Commit | Line | Data |
---|---|---|
c906108c SS |
1 | /* |
2 | * This simple classical example of recursion is useful for | |
3 | * testing stack backtraces and such. | |
4 | */ | |
5 | ||
6 | #ifdef vxworks | |
7 | ||
8 | # include <stdio.h> | |
9 | ||
10 | /* VxWorks does not supply atoi. */ | |
11 | static int | |
12 | atoi (z) | |
13 | char *z; | |
14 | { | |
15 | int i = 0; | |
16 | ||
17 | while (*z >= '0' && *z <= '9') | |
18 | i = i * 10 + (*z++ - '0'); | |
19 | return i; | |
20 | } | |
21 | ||
22 | /* I don't know of any way to pass an array to VxWorks. This function | |
23 | can be called directly from gdb. */ | |
24 | ||
25 | vxmain (arg) | |
26 | char *arg; | |
27 | { | |
28 | char *argv[2]; | |
29 | ||
30 | argv[0] = ""; | |
31 | argv[1] = arg; | |
32 | main (2, argv, (char **) 0); | |
33 | } | |
34 | ||
35 | #else /* ! vxworks */ | |
36 | # include <stdio.h> | |
085dd6e6 | 37 | # include <stdlib.h> |
c906108c SS |
38 | #endif /* ! vxworks */ |
39 | ||
085dd6e6 JM |
40 | #ifdef PROTOTYPES |
41 | int factorial (int); | |
42 | ||
43 | int | |
44 | main (int argc, char **argv, char **envp) | |
45 | #else | |
46 | int | |
c906108c SS |
47 | main (argc, argv, envp) |
48 | int argc; | |
49 | char *argv[], **envp; | |
085dd6e6 | 50 | #endif |
c906108c SS |
51 | { |
52 | #ifdef usestubs | |
53 | set_debug_traps(); | |
54 | breakpoint(); | |
55 | #endif | |
56 | #ifdef FAKEARGV | |
57 | printf ("%d\n", factorial (1)); | |
58 | #else | |
59 | if (argc != 2) { | |
60 | printf ("usage: factorial <number>\n"); | |
61 | return 1; | |
62 | } else { | |
63 | printf ("%d\n", factorial (atoi (argv[1]))); | |
64 | } | |
65 | #endif | |
66 | return 0; | |
67 | } | |
68 | ||
085dd6e6 JM |
69 | #ifdef PROTOTYPES |
70 | int factorial (int value) | |
71 | #else | |
72 | int factorial (value) int value; | |
73 | #endif | |
c906108c | 74 | { |
085dd6e6 JM |
75 | int local_var; |
76 | ||
c906108c SS |
77 | if (value > 1) { |
78 | value *= factorial (value - 1); | |
79 | } | |
085dd6e6 | 80 | local_var = value; |
c906108c SS |
81 | return (value); |
82 | } |