Annotation of researchv8dc/cmd/PDP11/11as/as11.c, revision 1.1.1.1

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: 
                     19: main(argc, argv)
                     20: char **argv;
                     21: {
                     22:        extern aexit();
                     23:        FILE *t;
                     24:        char *buf1,*buf2;
                     25: 
                     26:        if (signal(SIGINT,SIG_IGN)!=SIG_IGN) signal(SIGINT,aexit);
                     27:        while (--argc>=0 && (++argv)[0][0]=='-') {
                     28:                if (argv[0][1]=='u' || argv[0][1]=='\0') unglob[1]='g';
                     29:                else if (argv[0][1]=='o' && --argc>=0) outfile= *++argv;
                     30:        }
                     31:        nargs=argc+1; curarg=argv-1;
                     32:        if (NULL==(pof=fopen(mktemp(atmp1),"w"))) wrterr();
                     33:        setbuf(pof,buf1=sbrk(BUFSIZ));
                     34:        if (NULL==(fbfil=fopen(mktemp(atmp2),"w"))) wrterr();
                     35:        setbuf(fbfil,buf2=sbrk(BUFSIZ));
                     36:        setup();
                     37:        fclose(stdin);
                     38:        assem();
                     39:        if (EOF==fclose(pof)) wrterr(); if (EOF==fclose(fbfil)) wrterr();
                     40:        if (errflg) aexit();
                     41:        if (NULL==(t=fopen(mktemp(atmp3),"w"))) wrterr();
                     42:        setbuf(t,buf1);
                     43:        if ((symend-usymtab)!=fwrite(usymtab,sizeof(*usymtab),symend-usymtab,t)) wrterr();
                     44:        if (EOF==fclose(t)) wrterr();
                     45:        execl(fpass2,fpass2,unglob,"-o",outfile,atmp1,atmp2,atmp3,0);
                     46:        filerr(fpass2,"?\n");
                     47:        aexit();
                     48: }
                     49: 
                     50: aexit()
                     51: {
                     52:        unlink(atmp1); unlink(atmp2); unlink(atmp3);
                     53:        exit(3);
                     54: }
                     55: 
                     56: filerr(file,str)
                     57: char *file,*str;
                     58: {
                     59:        fprintf(stderr,"%s%s",file,str);
                     60: }
                     61: 
                     62: wrterr()
                     63: {
                     64:        fprintf(stderr,"as: Write error on temp file.\n");
                     65:        ++errflg; aexit();
                     66: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.