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> 37 #endif /* ! vxworks */ 38 39 main (argc, argv, envp) 40 int argc; 41 char *argv[], **envp; 42 { 43 #ifdef usestubs 44 set_debug_traps(); 45 breakpoint(); 46 #endif 47 if (argc != 2) { 48 printf ("usage: factorial <number>\n"); 49 return 1; 50 } else { 51 printf ("%d\n", factorial (atoi (argv[1]))); 52 } 53 return 0; 54 } 55 56 int factorial (value) 57 int value; 58 { 59 if (value > 1) { 60 value *= factorial (value - 1); 61 } 62 return (value); 63 } 64