home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * main.c
- * Copyright © 1992 Niklas Röjemo
- */
- #include <setjmp.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "input.h"
- #include "output.h"
- #include "error.h"
- #include "asm.h"
- #include "area.h"
- #include "riscos.h"
- #include "include.h"
- #include "version.h"
-
- jmp_buf asmContinue;
- jmp_buf asmAbort;
-
- int verbose;
- int pedantic;
- int throwback;
- int dde;
- int autocast;
- int align = 1;
- int gcc_backend;
-
- char *ProgName;
- char *ObjFileName;
- char *SourceFileName;
-
- int main(int argc, char **argv)
- {
- initInclude();
- ProgName = *argv++;
- for(argc--; argc; argv++,argc--) {
- if(!strcmp(*argv,"-o")) {
- if(ObjFileName) {
- fprintf(stderr,"%s: Only one output file allowed\n",ProgName);
- return -1;
- }
- if(--argc)
- ObjFileName = *++argv;
- else {
- fprintf(stderr,"%s: Missing filename after -o\n",ProgName);
- return -1;
- }
- } else if(!strcmp(*argv,"-throwback")) {
- throwback++;
- } else if(!strcmp(*argv,"-autocast")) {
- autocast++;
- } else if(!strcmp(*argv,"-verbose")) {
- verbose++;
- } else if(!strcmp(*argv,"-gcc")) {
- gcc_backend++;
- } else if(!strcmp(*argv,"-noalign")) {
- align=0;
- } else if(!strcmp(*argv,"-dde")) {
- dde++;
- } else if(!strcmp(*argv,"-p")) {
- pedantic++;
- } else if(!strncmp(*argv,"-I",2)) {
- if(addInclude(*argv+2) < 0)
- exit(-1);
- } else if(!strcmp(*argv,"-v")) {
- fprintf(stderr,VERSION);
- exit(-1);
- } else if(argv[0][0] == '-' &&
- (argv[0][1] == 'H' || argv[0][1] == 'h' ||argv[0][1] == '?')) {
- fprintf(stderr,"Usage: as [-v] [-p] [-dde] [-gcc] [-noalign] [-autocast] [-verbose] [-Idirectory] [-throwback] [-o objfile] [asmfile]\n");
- exit(-1);
- } else if(**argv != '-') {
- if(SourceFileName) {
- fprintf(stderr,"%s: Only one input file allowed\n",ProgName);
- return -1;
- }
- SourceFileName = *argv;
- } else {
- fprintf(stderr,"%s: Illegal flagg %s ignored\n",ProgName,*argv);
- }
- }
- if(!ObjFileName)
- ObjFileName = SourceFileName;
-
- if(setjmp(asmAbort)) {
- fprintf(stderr,"%s: Aborted\n",ProgName);
- inputFinish();
- outputFinish();
- } else {
- inputInit(SourceFileName);
- errorInit(throwback,SourceFileName);
- outputInit(ObjFileName);
- areaInit();
- (void)setjmp(asmContinue);
- asm();
- areaFinish();
- inputFinish();
- if(setjmp(asmContinue))
- fprintf(stdout,"%s: Error when writing objectfile '%s'.\n",ProgName,ObjFileName);
- else {
- outputAof();
- }
- outputFinish();
- errorFinish();
- }
- return noerrors();
- }
-