home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 143_01 / if.c < prev    next >
Text File  |  1985-11-14  |  4KB  |  161 lines

  1. /*
  2. %CC1 $1.C -X -E5000
  3. %CLINK $1  -S
  4. %DELETE    $1.CRL 
  5. */
  6. /*********************************************************************
  7. *                if                     *
  8. **********************************************************************
  9. *           COPYRIGHT 1983 EUGENE H. MALLORY             *
  10. *********************************************************************/
  11. #include "BDSCIO.H"
  12. #define    BCOUNT 120
  13. char fname[MAXLINE];
  14. int fd1;
  15. FILE fcb1;
  16. char barray[BCOUNT][128];
  17.  
  18. main(argc,argv)
  19. char **argv;
  20. int argc;
  21.  
  22. BEGIN
  23.     int    i,bctr,flag,ifcount;
  24. /********************************************************************
  25.             EVALUATE ARGUMENT EXPRESSION
  26. ********************************************************************/
  27.     if (argc ==    1) goto    false;
  28.     if (argc ==    2 && strequ(argv[1],"NOT")) goto true;
  29.     if (argc ==    3 && strequ(argv[1],"NOT")) goto false;
  30.     if (strequ(argv[1],"EXISTS"))
  31.     BEGIN
  32.         if (argc !=    3)
  33.         abort("IF: SYNTAX: if EXISTS fid.");
  34.         fd1    = open(argv[2],    READ);
  35.         if (fd1 == -1) goto    false;
  36.         close(fd1);
  37.         goto true;
  38.     END
  39.     if (strequ(argv[1],"NOTEXISTS"))
  40.     BEGIN
  41.         if (argc !=    3)
  42.         abort("IF: SYNTAX: if NOTEXISTS    fid.");
  43.         fd1    = open(argv[2],    READ);
  44.         if (fd1 == -1) goto    true;
  45.         close(fd1);
  46.         goto false;
  47.     END
  48.     if (argc ==    4)
  49.     BEGIN
  50.         if (strequ(argv[2],"EQUAL"))
  51.         if (strequ(argv[1],argv[3])) goto true;
  52.         else goto false;
  53.     END
  54.     if (argc ==    2 && strequ(argv[1],"EQUAL")) goto true;
  55.     if (argc ==    3 && strequ(argv[1],"EQUAL")) goto false;
  56.     if (argc ==    3 && strequ(argv[2],"EQUAL")) goto false;
  57.     if (argc ==    2 && strequ(argv[1],"NOTEQUAL")) goto false;
  58.     if (argc ==    3 && strequ(argv[1],"NOTEQUAL")) goto true;
  59.     if (argc ==    3 && strequ(argv[2],"NOTEQUAL")) goto true;
  60.     if (argc ==    4)
  61.     BEGIN
  62.         if (strequ(argv[2],"NOTEQUAL"))
  63.         if (strequ(argv[1],argv[3])) goto false;
  64.         else goto true;
  65.     END
  66.     abort("IF: SYNTAX: See help    file for correct forms.");
  67.     
  68. /*********************************************************************/
  69.     
  70. false:        /* Scan off to find endif    */
  71. /*  printf("    .\n    .\n    .\n  ENDIF"); */
  72.     
  73.     fd1    = open("A:$$$.SUB", READWRITE);
  74.     if (fd1 == -1)
  75.     BEGIN
  76.         abort("IF: Unable to open A:$$$.SUB.");
  77.     END
  78.     else
  79.     BEGIN
  80.         bctr = 0;
  81.         do
  82.         BEGIN
  83.             if (bctr ==    BCOUNT)
  84.             abort("IF: A:$$$.SUB too big.");
  85.             flag = read(fd1,barray[bctr++],1);
  86.             if (flag ==    -1)
  87.             abort("IF: Unable to read A:$$$.SUB.");
  88.         END
  89.         while (flag);
  90.         bctr--;
  91.         close(fd1);
  92.         unlink("A:$$$.SUB");
  93.     END
  94.     
  95.     ifcount = 1;
  96.     
  97.     while (bctr--)
  98.     BEGIN
  99.         if (toupper(barray[bctr][1]) == 'E'
  100.         &&
  101.         toupper(barray[bctr][2]) == 'N'
  102.         &&
  103.         toupper(barray[bctr][3]) == 'D'
  104.         &&
  105.         toupper(barray[bctr][4]) == 'I'
  106.         &&
  107.         toupper(barray[bctr][5]) == 'F')
  108.             ifcount -= 1;
  109.         if (toupper(barray[bctr][1]) == 'I'
  110.         &&
  111.         toupper(barray[bctr][2]) == 'F')
  112.             ifcount += 1;
  113. #ifdef C80
  114.         printf("--%s\n",barray[bctr][1]);
  115. #else
  116.         printf("--%s\n",&barray[bctr][1]);
  117. #endif
  118.         if (ifcount    == 0) break;
  119.     END
  120.         
  121.     fd1    = creat("A:$$$.SUB");
  122.     if (fd1 == -1)
  123.         abort("IF: Unable to recreate A:$$$.SUB.");
  124.     for    (i=0;i<bctr;i++)
  125.     BEGIN
  126.         flag = write(fd1,barray[i],1);
  127.         if (flag !=    1)
  128.         abort("IF: Unable to write A:$$$.SUB.");
  129.     END
  130.     close(fd1);
  131. true: 
  132. #ifdef C80
  133.     exit(0);
  134. #else
  135.     bios(1);
  136. #endif
  137. END
  138.  
  139. /********************************************************************/
  140. /*              ERROR                        */
  141. /********************************************************************/
  142. abort(string)
  143. char *string;
  144.     BEGIN
  145.     unlink("A:$$$.SUB");
  146.     error(string);
  147.     END
  148.  
  149. int strequ(s,t)
  150. char *s, *t;
  151. BEGIN
  152.     int    i;
  153.     for (i=0;i<MAXLINE;i++)
  154.         BEGIN
  155.         if (t[i] != s[i]) return(0);
  156.         if (s[i] == '\0')  return(1);
  157.         END
  158.     return(1);
  159. END
  160.  
  161.