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