/*******************************************************************
   Program :  Recursive Descent Compiler for PL/0
   Module  :  PL0C - Compiler driver
   File    :  pl0c.c
   Compiler:  Borland C 3.1 - 4.5, GNU C 2.7.2
   Author  :  H. Weber
   Revision:  Aug. 1998
********************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(int argc, char *argv[])
{
   char buf[50];
   int i, rv,
       exe = 0, 
       interp = 0,
       os2 = 0;

   if (argc == 1) {
      fprintf(stderr, "No source file specified.\n");
      exit(1);
   }

   for (i=2; i<=argc-1; i++) {
      if (strcmp(argv[i], "-e") == 0) 
         exe = 1;
      else if (strcmp(argv[i], "-i") == 0) 
         interp = 1;
      else if (strcmp(argv[i], "-2") == 0)
         os2 = 1;
   }

   sprintf(buf, "pl0scan %s", argv[1]);
   system(buf);

   sprintf(buf, "pl0pars %s", argv[1]);
   system(buf);

   if (interp) {
      sprintf(buf, "pl0int %s", argv[1]);
      system(buf);

      sprintf(buf, "%s.tok", argv[1]);
      unlink(buf);
      sprintf(buf, "%s.cod", argv[1]);
      unlink(buf);
      sprintf(buf, "%s.stb", argv[1]);
      unlink(buf);
      sprintf(buf, "%s.err", argv[1]);
      unlink(buf);
      exit(0);
   }

   if (os2)
      sprintf(buf, "pl0asm %s -c -2", argv[1]);
   else
      sprintf(buf, "pl0asm %s -c", argv[1]);
   system(buf);

{  sprintf(buf, "masm %s;", argv[1]); }
   sprintf(buf, "tasm %s", argv[1]);
   system(buf);

{  sprintf(buf, "link %s;", argv[1]); }
   sprintf(buf, "tlink %s", argv[1]);
   system(buf);

   /* delete some files */
   sprintf(buf, "%s.tok", argv[1]);
   unlink(buf);
   sprintf(buf, "%s.cod", argv[1]);
   unlink(buf);
   sprintf(buf, "%s.asm", argv[1]);
   unlink(buf);
   sprintf(buf, "%s.obj", argv[1]);
   unlink(buf);
   sprintf(buf, "%s.stb", argv[1]);
   unlink(buf);
   sprintf(buf, "%s.err", argv[1]);
   unlink(buf);

   if (exe)
      system(argv[1]);
   return 0;
}
