switch (fork ())
cpp_pid = fork (); switch (cpp_pid)
open_input (const char *infile, const char *define){  int pd[2];  infilename = (infile == NULL) ? "<stdin>" : infile;  if (pipe (pd) != 0)    {      perror ("pipe");      exit (1);    }  switch (fork ())    {    case 0:      find_cpp ();      putarg (0, CPP);      putarg (1, CPPFLAGS);      addarg (define);      if (infile)	addarg (infile);      addarg ((char *) NULL);      close (1);      dup2 (pd[1], 1);      close (pd[0]);      execv (arglist[0], (char **) arglist);      perror ("execv");      exit (1);    case -1:      perror ("fork");      exit (1);    }  close (pd[1]);  fin = fdopen (pd[0], "r");  if (fin == NULL)    {      fprintf (stderr, "%s: ", cmdname);      perror (infilename);      crash ();    }}