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. */ 11static int 12atoi (char *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 25void vxmain (char *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# include <stdlib.h> 38#endif /* ! vxworks */ 39 40int main (int argc, char *argv[], char **envp) 41/*int argc; 42char *argv[], **envp;*/ 43{ 44 int factorial (int); 45#ifdef usestubs 46 set_debug_traps(); 47 breakpoint(); 48#endif 49#ifdef FAKEARGV 50 printf ("%d\n", factorial (1)); 51#else 52 if (argc != 2) { 53 printf ("usage: factorial <number>\n"); 54 return 1; 55 } else { 56 printf ("%d\n", factorial (atoi (argv[1]))); 57 } 58#endif 59 return 0; 60} 61 62int factorial (int value) 63/*int value;*/ 64{ 65 int local_var; 66 67 if (value > 1) { 68 value *= factorial (value - 1); 69 } 70 local_var = value; 71 return (value); 72} 73