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 (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 25vxmain (arg) 26char *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 40#ifdef PROTOTYPES 41int factorial (int); 42 43int 44main (int argc, char **argv, char **envp) 45#else 46int 47main (argc, argv, envp) 48int argc; 49char *argv[], **envp; 50#endif 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 69#ifdef PROTOTYPES 70int factorial (int value) 71#else 72int factorial (value) int value; 73#endif 74{ 75 int local_var; 76 77 if (value > 1) { 78 value *= factorial (value - 1); 79 } 80 local_var = value; 81 return (value); 82} 83