Annotation of researchv8dc/cmd/PDP11/11as/as11.c, revision 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.