home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / assembler / as / src / c / main < prev    next >
Encoding:
Text File  |  1993-03-07  |  2.4 KB  |  104 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.  
  28. char *ProgName;
  29. char *ObjFileName;
  30. char *SourceFileName;
  31.  
  32. int main(int argc, char **argv)
  33. {
  34.   initInclude();
  35.   ProgName  = *argv++;
  36.   for(argc--; argc; argv++,argc--) {
  37.     if(!strcmp(*argv,"-o")) {
  38.        if(ObjFileName) {
  39.          fprintf(stderr,"%s: Only one output file allowed\n",ProgName);
  40.          return -1;
  41.        }
  42.        if(--argc)
  43.          ObjFileName = *++argv;
  44.        else {
  45.          fprintf(stderr,"%s: Missing filename after -o\n",ProgName);
  46.          return -1;
  47.        }
  48.     } else if(!strcmp(*argv,"-throwback")) {
  49.        throwback++;
  50.     } else if(!strcmp(*argv,"-autocast")) {
  51.        autocast++;
  52.     } else if(!strcmp(*argv,"-verbose")) {
  53.        verbose++;
  54.     } else if(!strcmp(*argv,"-dde")) {
  55.        dde++;
  56.     } else if(!strcmp(*argv,"-p")) {
  57.        pedantic++;
  58.     } else if(!strncmp(*argv,"-I",2)) {
  59.        if(addInclude(*argv+2) < 0)
  60.          exit(-1);
  61.     } else if(!strcmp(*argv,"-v")) {
  62.        fprintf(stderr,VERSION);
  63.        exit(-1);
  64.     } else if(argv[0][0] == '-' && 
  65.               (argv[0][1] == 'H' || argv[0][1] == 'h' ||argv[0][1] == '?')) {
  66.        fprintf(stderr,"Usage: as [-v] [-p] [-dde] [-autocast] [-verbose] [-Idirectory] [-throwback] [-o objfile] [asmfile]\n");
  67.        exit(-1);
  68.     } else if(**argv != '-') {
  69.        if(SourceFileName) {
  70.          fprintf(stderr,"%s: Only one input file allowed\n",ProgName);
  71.          return -1;
  72.        }
  73.        SourceFileName = *argv;
  74.     } else {
  75.        fprintf(stderr,"%s: Illegal flagg %s ignored\n",ProgName,*argv);
  76.     }
  77.   }
  78.   if(!ObjFileName)
  79.     ObjFileName = SourceFileName;
  80.  
  81.   if(setjmp(asmAbort)) {
  82.     fprintf(stderr,"%s: Aborted\n",ProgName);
  83.     inputFinish();
  84.     outputFinish();
  85.   } else {
  86.     inputInit(SourceFileName);
  87.     errorInit(throwback,SourceFileName);
  88.     outputInit(ObjFileName);
  89.     areaInit();
  90.    (void)setjmp(asmContinue);
  91.     asm();
  92.     areaFinish();
  93.     inputFinish();
  94.     if(setjmp(asmContinue))
  95.       fprintf(stdout,"%s: Error when writing objectfile '%s'.\n",ProgName,ObjFileName);
  96.     else {
  97.       outputAof();
  98.     }
  99.     outputFinish();
  100.     errorFinish();
  101.   }
  102.   return noerrors();
  103. }
  104.