Annotation of 43BSDReno/pgrm/pascal/src/yymain.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #ifndef lint
                      8: static char sccsid[] = "@(#)yymain.c   5.1 (Berkeley) 6/5/85";
                      9: #endif not lint
                     10: 
                     11: #include "whoami.h"
                     12: #include "0.h"
                     13: #include "tree_ty.h"   /* must be included for yy.h */
                     14: #include "yy.h"
                     15: #include <a.out.h>
                     16: #include "objfmt.h"
                     17: #include <signal.h>
                     18: #include "config.h"
                     19: 
                     20: /*
                     21:  * Yymain initializes each of the utility
                     22:  * clusters and then starts the processing
                     23:  * by calling yyparse.
                     24:  */
                     25: yymain()
                     26: {
                     27: 
                     28: #ifdef OBJ
                     29: /*
                     30:  * initialize symbol table temp files
                     31:  */
                     32:        startnlfile();
                     33: #endif
                     34:        /*
                     35:         * Initialize the scanner
                     36:         */
                     37: #ifdef PXP
                     38:        if (bracket == 0) {
                     39: #endif
                     40:                if (getline() == -1) {
                     41:                        Perror(filename, "No lines in file");
                     42:                        pexit(NOSTART);
                     43:                }
                     44: #ifdef PXP
                     45:        } else
                     46:                yyline = 0;
                     47: #endif
                     48: 
                     49: #ifdef PI
                     50: #   ifdef OBJ
                     51:        magic();
                     52: #   endif OBJ
                     53: #endif
                     54:        line = 1;
                     55:        errpfx = 'E';
                     56:        /*
                     57:         * Initialize the clusters
                     58:         *
                     59:        initstring();
                     60:         */
                     61:        inithash();
                     62:        inittree();
                     63: #ifdef PI
                     64:        initnl();
                     65: #endif
                     66: 
                     67:        /*
                     68:         * Process the input
                     69:         */
                     70:        yyparse();
                     71: #ifdef PI
                     72: #   ifdef OBJ
                     73: 
                     74:        /*
                     75:         * save outermost block of namelist
                     76:         */
                     77:        savenl(NLNIL);
                     78: 
                     79:        magic2();
                     80: #   endif OBJ
                     81: #   ifdef DEBUG
                     82:        dumpnl(NLNIL);
                     83: #   endif
                     84: #endif
                     85: 
                     86: #ifdef PXP
                     87:        prttab();
                     88:        if (onefile) {
                     89:                extern int outcol;
                     90: 
                     91:                if (outcol)
                     92:                        pchr('\n');
                     93:                flush();
                     94:                if (eflg) {
                     95:                        writef(2, "File not rewritten because of errors\n");
                     96:                        pexit(ERRS);
                     97:                }
                     98:                (void) signal(SIGHUP, SIG_IGN);
                     99:                (void) signal(SIGINT, SIG_IGN);
                    100:                copyfile();
                    101:        }
                    102: #endif
                    103:        pexit(eflg ? ERRS : AOK);
                    104: }
                    105: 
                    106: #ifdef PXP
                    107: copyfile()
                    108: {
                    109:        extern int fout[];
                    110:        register int c;
                    111: 
                    112:        (void) close(1);
                    113:        if (creat(firstname, 0644) != 1) {
                    114:                perror(firstname);
                    115:                pexit(ERRS);
                    116:        }
                    117:        (void) lseek(fout[0], 0l, 0);
                    118:        while ((c = read(fout[0], &fout[3], 512)) > 0) {
                    119:                if (write(1, &fout[3], c) != c) {
                    120:                        perror(firstname);
                    121:                        pexit(ERRS);
                    122:                }
                    123:        }
                    124: }
                    125: #endif
                    126: 
                    127: 
                    128: #ifdef PI
                    129: #ifdef OBJ
                    130: 
                    131: static
                    132: struct exec magichdr;
                    133: 
                    134: magic()
                    135: {
                    136: 
                    137:        short           buf[HEADER_BYTES / sizeof ( short )];
                    138:        unsigned        *ubuf = (unsigned *) buf;
                    139:        register int    hf, i;
                    140: 
                    141:        hf = open(px_header,0);
                    142:        if (hf >= 0 && read(hf, (char *) buf, HEADER_BYTES) > sizeof(struct exec)) {
                    143:                magichdr.a_magic = ubuf[0];
                    144:                magichdr.a_text = ubuf[1];
                    145:                magichdr.a_data = ubuf[2];
                    146:                magichdr.a_bss = ubuf[3];
                    147:                magichdr.a_syms = ubuf[4];
                    148:                magichdr.a_entry = ubuf[5];
                    149:                magichdr.a_trsize = ubuf[6];
                    150:                magichdr.a_drsize = ubuf[7];
                    151:                for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++)
                    152:                        word(buf[i]);
                    153:        }
                    154:        (void) close(hf);
                    155: }
                    156: #endif OBJ
                    157: 
                    158: #ifdef OBJ
                    159: magic2()
                    160: {
                    161:        struct pxhdr pxhd;
                    162:        extern long lseek();
                    163: 
                    164:        if  (magichdr.a_magic != 0407)
                    165:                panic ( "magic2" );
                    166:        pflush();
                    167:        magichdr.a_data = ( unsigned ) lc - magichdr.a_text;
                    168:        magichdr.a_data -= sizeof (struct exec);
                    169:        pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES;
                    170:        pxhd.symtabsize = nlhdrsize();
                    171:        magichdr.a_data += pxhd.symtabsize;
                    172:        (void) time((long *) (&pxhd.maketime));
                    173:        pxhd.magicnum = MAGICNUM;
                    174:        (void) lseek(ofil, 0l, 0);
                    175:        write(ofil, (char *) (&magichdr), sizeof(struct exec));
                    176:        (void) lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0);
                    177:        write(ofil, (char *) (&pxhd), sizeof (pxhd));
                    178: }
                    179: #endif OBJ
                    180: #endif
                    181: 
                    182: #ifdef PXP
                    183: writef(i, cp)
                    184: {
                    185: 
                    186:        write(i, cp, strlen(cp));
                    187: }
                    188: #endif

unix.superglobalmegacorp.com

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