/*
       STRIPC.C
       Written by Leor Zolman, 3/82

       This program takes an assembly language source file as input,
       and writes out the same file stripped of comments. Everything between
       a semicolon and the end of the line is stripped, plus the tabs
       before the semicolon.
       If a line contains an odd number of single quote (') characters before
       the first semicolon, then the line is left intact.
*/

#include "bdscio.h"
char ibuf[BUFSIZ], obuf[BUFSIZ];

main(argc,argv)
char **argv;
{
       char iname[30], oname[30];
       char linbuf[200];

       int i,j,k;

       if (argc != 3) exit(puts("usage: stripc <infile> <outfile>\n"));
       if (!strcmp(argv[1],argv[2])) exit(puts("Names must be distinct\n"));

       strcpy(iname,argv[1]);
       strcpy(oname,argv[2]);

       strcat(iname,".ASM");
       strcat(oname,".ASM");

       if (fopen(iname,ibuf) == ERROR)
               exit(puts("\7Can't open input file\n"));

       if (fcreat(oname,obuf) == ERROR)
               exit(puts("\7Can't create output file\n"));

       while (fgets(linbuf,ibuf)) {
               if ((i = index(linbuf,";")) != ERROR)
               {
                  if (!i)
                  {
                       *linbuf = '\0';
                  }
                  else
                  {
                       if (index(linbuf,"'") < i)
                       {
                               k = 0;  /* quote count */
                               for (j = 0; j < i; j++)
                                       if (linbuf[j] == '\'')
                                               k++;
                               if (k & 1) goto lineout;
                       }
                       while (i && isspace(linbuf[i-1]))
                               i--;
                       linbuf[i++] = '\n';
                       linbuf[i] = '\0';
                  }
               }
 lineout:      if (fputs(linbuf,obuf) == ERROR)
                       exit(puts("\7Error writing output file"));
               putchar('.');
       }
       putc(CPMEOF,obuf);
       fflush(obuf);
       fclose(obuf);
       fclose(ibuf);
       puts("All done.\n");
}