|
|
1.1 ! root 1: /* PDP-11 assembler pass 0 */ ! 2: #include "as1.h" ! 3: #include <signal.h> ! 4: ! 5: #ifndef PASS2PGM ! 6: #define PASS2PGM "/lib/as2" /*god: is tweakable */ ! 7: #endif ! 8: #ifndef A_DOT_OUT ! 9: #define A_DOT_OUT "a.out" /*god: " */ ! 10: #endif ! 11: ! 12: char *atmp1 = "/tmp/atm1XXXXXX"; ! 13: char *atmp2 = "/tmp/atm2XXXXXX"; ! 14: char *atmp3 = "/tmp/atm3XXXXXX"; ! 15: char *fpass2 = PASS2PGM; /*god: use -DPASS2PGM=/xxxx... */ ! 16: char unglob[3] = "-"; ! 17: char *outfile = A_DOT_OUT; /*god:6/17/80 made for porting*/ ! 18: int debug; ! 19: ! 20: main(argc, argv) ! 21: char **argv; ! 22: { ! 23: extern char *sbrk(); ! 24: extern aexit(); ! 25: FILE *t; ! 26: char *buf1,*buf2; ! 27: ! 28: if (signal(SIGINT,SIG_IGN)!=SIG_IGN) signal(SIGINT,aexit); ! 29: while (--argc>=0 && (++argv)[0][0]=='-') { ! 30: if (argv[0][1]=='u' || argv[0][1]=='\0') unglob[1]='g'; ! 31: else if (argv[0][1]=='o' && --argc>=0) outfile= *++argv; ! 32: else if (argv[0][1]=='d') { ! 33: atmp1 = "T1"; atmp2 = "T2", atmp3 = "T3"; ! 34: debug++; ! 35: } ! 36: } ! 37: nargs=argc+1; curarg=argv-1; ! 38: if (NULL==(pof=fopen(mktemp(atmp1),"w"))) wrterr(); ! 39: setbuf(pof,buf1=sbrk(BUFSIZ)); ! 40: if (NULL==(fbfil=fopen(mktemp(atmp2),"w"))) wrterr(); ! 41: setbuf(fbfil,buf2=sbrk(BUFSIZ)); ! 42: setup(); ! 43: fclose(stdin); ! 44: assem(); ! 45: if (EOF==fclose(pof)) wrterr(); if (EOF==fclose(fbfil)) wrterr(); ! 46: if (errflg) aexit(); ! 47: if (NULL==(t=fopen(mktemp(atmp3),"w"))) wrterr(); ! 48: setbuf(t,buf1); ! 49: if ((symend-usymtab)!=fwrite(usymtab,sizeof(*usymtab),symend-usymtab,t)) wrterr(); ! 50: if (EOF==fclose(t)) wrterr(); ! 51: if (debug) ! 52: exit(1); ! 53: execl(fpass2,fpass2,unglob,"-o",outfile,atmp1,atmp2,atmp3,0); ! 54: filerr(fpass2,"?\n"); ! 55: aexit(); ! 56: } ! 57: ! 58: aexit() ! 59: { ! 60: unlink(atmp1); unlink(atmp2); unlink(atmp3); ! 61: exit(3); ! 62: } ! 63: ! 64: filerr(file,str) ! 65: char *file,*str; ! 66: { ! 67: fprintf(stderr,"%s%s",file,str); ! 68: } ! 69: ! 70: wrterr() ! 71: { ! 72: fprintf(stderr,"as: Write error on temp file.\n"); ! 73: ++errflg; aexit(); ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.