Commit | Line | Data |
---|---|---|
ef44eed1 SS |
1 | /* |
2 | * This simple classical example of recursion is useful for | |
3 | * testing stack backtraces and such. | |
4 | */ | |
5 | ||
6 | #ifdef vxworks | |
7 | # include <vxWorks.h> | |
8 | # include <stdioLib.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> | |
37 | #endif /* ! vxworks */ | |
38 | ||
39 | main (argc, argv, envp) | |
40 | int argc; | |
41 | char *argv[], **envp; | |
42 | { | |
43 | if (argc != 2) { | |
44 | printf ("usage: factorial <number>\n"); | |
45 | return 1; | |
46 | } else { | |
47 | printf ("%d\n", factorial (atoi (argv[1]))); | |
48 | } | |
49 | return 0; | |
50 | } | |
51 | ||
52 | int factorial (value) | |
53 | int value; | |
54 | { | |
55 | if (value > 1) { | |
56 | value *= factorial (value - 1); | |
57 | } | |
58 | return (value); | |
59 | } |