|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.