|
|
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.