home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d110 / pdc.lha / Pdc / src / Cmain.c < prev    next >
C/C++ Source or Header  |  1987-10-28  |  3KB  |  127 lines

  1. #include        <stdio.h>
  2. #include        "c.h"
  3. #include        "expr.h"
  4. #include        "gen.h"
  5. #include        "cglbdec.h"
  6.  
  7. #define VERSION    "Version 0.2 October 1, 1987"
  8. /*
  9.  *68000 C compiler
  10.  *
  11.  *Copyright 1984, 1985, 1986 Matthew Brandt.
  12.  *  all commercial rights reserved.
  13.  *
  14.  *This compiler is intended as an instructive tool for personal use. Any
  15.  *use for profit without the written consent of the author is prohibited.
  16.  *
  17.  *This compiler may be distributed freely for non-commercial use as long
  18.  *as this notice stays intact. Please forward any enhancements or questions
  19.  *to:
  20.  *
  21.  *Matthew Brandt
  22.  *Box 920337
  23.  *Norcross, Ga 30092
  24.  */
  25.  
  26. char            infile[20],
  27.                 listfile[20],
  28.                 outfile[20];
  29. extern TABLE    tagtable;
  30. int        mainflag;
  31. extern int      total_errors;
  32.  
  33. main(argc,argv)
  34. int     argc;
  35. char    **argv;
  36. {       while(--argc) {
  37.                 if( **++argv == '-')
  38.                         options(*argv);
  39.                 else if( openfiles(*argv)) {
  40.                         lineno = 0;
  41.                         initsym();
  42.                         getch();
  43.                         getsym();
  44.                         compile();
  45.                         summary();
  46.                         release_global();
  47.                         closefiles();
  48.                         }
  49.                 }
  50. }
  51.  
  52. static int options(s)
  53. char*s;
  54. {
  55.     if ( strcmp(s, "-n") == 0 || strcmp(s, "-N") == 0 )
  56.       Options.Optimize = !Options.Optimize;
  57.     else if ( strcmp(s, "-l") == 0 || strcmp(s, "-L") == 0 )
  58.       Options.List = !Options.List;
  59. }
  60.  
  61. static int     openfiles(s)
  62. char *s;
  63. {
  64.         int     ofl;
  65.     FILE     *fdopen();
  66.  
  67.     printf("PDC Public Domain Compiler - %s\n", VERSION );
  68.     printf("Copyright 1984, 1985, 1986 By Mathew Brandt.\n");
  69.     printf("Amiga port by Jeff Lydiatt.\n");
  70.     printf("Freely Distributable for non-commercial use.\n\n");
  71.         strcpy(infile,s);
  72.         strcpy(listfile,s);
  73.         strcpy(outfile,s);
  74.         makename(listfile,".lis");
  75.         makename(outfile,".s");
  76.         if( (input = fopen(infile,"r")) == 0) {
  77.                 printf(" cant open %s\n",infile);
  78.                 return 0;
  79.                 }
  80.         ofl = creat(outfile,-1);
  81.         if( ofl < 0 )
  82.                 {
  83.                 printf(" cant create %s\n",outfile);
  84.                 fclose(input);
  85.                 return 0;
  86.                 }
  87.         if( (output = fdopen(ofl,"w")) == NULL) {
  88.                 printf(" cant open %s\n",outfile);
  89.                 fclose(input);
  90.                 return 0;
  91.                 }
  92.     if ( Options.List )
  93.            if( (list = fopen(listfile,"w")) == 0) {
  94.                 printf(" cant open %s\n",listfile);
  95.                 fclose(input);
  96.                 fclose(output);
  97.                 return 0;
  98.                 }
  99.         return 1;
  100. }
  101.  
  102. static makename(s,e)
  103. char    *s, *e;
  104. {       while(*s != 0 && *s != '.')
  105.                 ++s;
  106.         while(*s++ = *e++);
  107. }
  108.  
  109. static summary()
  110. {   printf("\n -- %d errors found.",total_errors);
  111.     if ( Options.List )
  112.        fprintf(list,"\f\n *** global scope symbol table ***\n\n");
  113.     list_table(&gsyms,0);
  114.     if ( Options.List )
  115.         fprintf(list,"\n *** structures and unions ***\n\n");
  116.     list_table(&tagtable,0);
  117.     fprintf(output,"\tEND\n");
  118. }
  119.  
  120. static closefiles()
  121. {       fclose(input);
  122.         fclose(output);
  123.     if (Options.List)
  124.            fclose(list);
  125. }
  126.  
  127.