home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / program / language / as / source / c / main < prev    next >
Encoding:
Text File  |  1994-09-13  |  2.6 KB  |  110 lines

  1.  
  2. /*
  3.  *  main.c
  4.  * Copyright © 1992 Niklas Röjemo
  5.  */
  6. #include <setjmp.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include "input.h"
  11. #include "output.h"
  12. #include "error.h"
  13. #include "asm.h"
  14. #include "area.h"
  15. #include "riscos.h"
  16. #include "include.h"
  17. #include "version.h"
  18.  
  19. jmp_buf asmContinue;
  20. jmp_buf asmAbort;
  21.  
  22. int verbose;
  23. int pedantic;
  24. int throwback;
  25. int dde;
  26. int autocast;
  27. int align = 1;
  28. int gcc_backend;
  29.  
  30. char *ProgName;
  31. char *ObjFileName;
  32. char *SourceFileName;
  33.  
  34. int main(int argc, char **argv)
  35. {
  36.   initInclude();
  37.   ProgName  = *argv++;
  38.   for(argc--; argc; argv++,argc--) {
  39.     if(!strcmp(*argv,"-o")) {
  40.        if(ObjFileName) {
  41.          fprintf(stderr,"%s: Only one output file allowed\n",ProgName);
  42.          return -1;
  43.        }
  44.        if(--argc)
  45.          ObjFileName = *++argv;
  46.        else {
  47.          fprintf(stderr,"%s: Missing filename after -o\n",ProgName);
  48.          return -1;
  49.        }
  50.     } else if(!strcmp(*argv,"-throwback")) {
  51.        throwback++;
  52.     } else if(!strcmp(*argv,"-autocast")) {
  53.        autocast++;
  54.     } else if(!strcmp(*argv,"-verbose")) {
  55.        verbose++;
  56.     } else if(!strcmp(*argv,"-gcc")) {
  57.        gcc_backend++;
  58.     } else if(!strcmp(*argv,"-noalign")) {
  59.        align=0;
  60.     } else if(!strcmp(*argv,"-dde")) {
  61.        dde++;
  62.     } else if(!strcmp(*argv,"-p")) {
  63.        pedantic++;
  64.     } else if(!strncmp(*argv,"-I",2)) {
  65.        if(addInclude(*argv+2) < 0)
  66.          exit(-1);
  67.     } else if(!strcmp(*argv,"-v")) {
  68.        fprintf(stderr,VERSION);
  69.        exit(-1);
  70.     } else if(argv[0][0] == '-' &&
  71.               (argv[0][1] == 'H' || argv[0][1] == 'h' ||argv[0][1] == '?')) {
  72.        fprintf(stderr,"Usage: as [-v] [-p] [-dde] [-gcc] [-noalign] [-autocast] [-verbose] [-Idirectory] [-throwback] [-o objfile] [asmfile]\n");
  73.        exit(-1);
  74.     } else if(**argv != '-') {
  75.        if(SourceFileName) {
  76.          fprintf(stderr,"%s: Only one input file allowed\n",ProgName);
  77.          return -1;
  78.        }
  79.        SourceFileName = *argv;
  80.     } else {
  81.        fprintf(stderr,"%s: Illegal flagg %s ignored\n",ProgName,*argv);
  82.     }
  83.   }
  84.   if(!ObjFileName)
  85.     ObjFileName = SourceFileName;
  86.  
  87.   if(setjmp(asmAbort)) {
  88.     fprintf(stderr,"%s: Aborted\n",ProgName);
  89.     inputFinish();
  90.     outputFinish();
  91.   } else {
  92.     inputInit(SourceFileName);
  93.     errorInit(throwback,SourceFileName);
  94.     outputInit(ObjFileName);
  95.     areaInit();
  96.    (void)setjmp(asmContinue);
  97.     asm();
  98.     areaFinish();
  99.     inputFinish();
  100.     if(setjmp(asmContinue))
  101.       fprintf(stdout,"%s: Error when writing objectfile '%s'.\n",ProgName,ObjFileName);
  102.     else {
  103.       outputAof();
  104.     }
  105.     outputFinish();
  106.     errorFinish();
  107.   }
  108.   return noerrors();
  109. }
  110.