| /* |
| * This simple classical example of recursion is useful for |
| * testing stack backtraces and such. |
| */ |
| |
| #ifdef vxworks |
| |
| # include <stdio.h> |
| |
| /* VxWorks does not supply atoi. */ |
| static int |
| atoi (char *z) |
| /* char *z;*/ |
| { |
| int i = 0; |
| |
| while (*z >= '0' && *z <= '9') |
| i = i * 10 + (*z++ - '0'); |
| return i; |
| } |
| |
| /* I don't know of any way to pass an array to VxWorks. This function |
| can be called directly from gdb. */ |
| |
| void vxmain (char *arg) |
| /*char *arg;*/ |
| { |
| char *argv[2]; |
| |
| argv[0] = ""; |
| argv[1] = arg; |
| main (2, argv, (char **) 0); |
| } |
| |
| #else /* ! vxworks */ |
| # include <stdio.h> |
| # include <stdlib.h> |
| #endif /* ! vxworks */ |
| |
| int main (int argc, char *argv[], char **envp) |
| /*int argc; |
| char *argv[], **envp;*/ |
| { |
| int factorial (int); |
| #ifdef usestubs |
| set_debug_traps(); |
| breakpoint(); |
| #endif |
| #ifdef FAKEARGV |
| printf ("%d\n", factorial (1)); |
| #else |
| if (argc != 2) { |
| printf ("usage: factorial <number>\n"); |
| return 1; |
| } else { |
| printf ("%d\n", factorial (atoi (argv[1]))); |
| } |
| #endif |
| return 0; |
| } |
| |
| int factorial (int value) |
| /*int value;*/ |
| { |
| int local_var; |
| |
| if (value > 1) { |
| value *= factorial (value - 1); |
| } |
| local_var = value; |
| return (value); |
| } |