home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / math / pac / pipes.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-05  |  1.8 KB  |  56 lines

  1. /* pipes.c */
  2. /**********************************************************************
  3. *    File Name     : pipes.c
  4. *    Function      : make A and B pipes to bc
  5. *    Author        : Istvan Mohos, 1987
  6. ***********************************************************************/
  7.  
  8. #include "defs.h"
  9.  
  10. pipes()
  11. {
  12.     char tmp[LINEMAX]; /* PLUS6300 needs this --- beats me why */
  13.     /* setup main bc function */
  14.     if (pipe(A_write) == -1 || pipe(A_read) == -1)
  15.         fatal("main pipe setup");
  16.     switch (A_ret = fork()) {
  17.     case -1:
  18.         fatal("main fork");
  19.     case  0:
  20.         if (close(0) == -1 || close(1) == -1)
  21.             fatal("main close1");
  22.         if (dup(A_write[0]) != 0)
  23.             fatal("main dup0");
  24.         if (dup(A_read[1]) != 1)
  25.             fatal("main dup1");
  26.         if (close(A_write[0]) == -1 || close(A_read[0]) == -1 ||
  27.             close(A_write[1]) == -1 || close(A_read[1]) == -1)
  28.             fatal("main close2");
  29.         execlp("/usr/bin/bc", "bc", "-l", 0);
  30.     }
  31.     if (close(A_write[0]) == -1 || close(A_read[1]) == -1)
  32.         fatal("main close3");
  33.  
  34.     /* setup converter bc function */
  35.     if (pipe(B_write) == -1 || pipe(B_read) == -1)
  36.         fatal("conv pipe setup");
  37.     switch (A_ret = fork()) {
  38.     case -1:
  39.         fatal("conv fork");
  40.     case  0:
  41.         if (close(0) == -1 || close(1) == -1)
  42.             fatal("conv close1");
  43.         if (dup(B_write[0]) != 0)
  44.             fatal("conv dup0");
  45.         if (dup(B_read[1]) != 1)
  46.             fatal("conv dup1");
  47.         if (close(B_write[0]) == -1 || close(B_read[0]) == -1 ||
  48.             close(B_write[1]) == -1 || close(B_read[1]) == -1)
  49.             fatal("conv close2");
  50.         execlp("/usr/bin/bc", "bc", 0);
  51.     }
  52.     if (close(B_write[0]) == -1 || close(B_read[1]) == -1)
  53.         fatal("conv close3");
  54. }
  55.  
  56.