#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

/* Pass the value as a command line argument. */

int main(int argc, char *argv[])
{
  unsigned long n;
  char arg[20];
  int r;

  n = atoi(argv[1]);
  printf("factorial: %ld\n", n);
  if (n == 0) {
    printf("return 1 (%d)\n", (int)getpid());
    return 1;
  }
 
  sprintf(arg, "./factorial_system %ld", n-1);
  r = system(arg);
  r = WEXITSTATUS(r);
  printf("pid = %d; r = %d\n", (int)getpid(), r);
  printf("return %d\n", n * r);
  return n * r;
}
