Annotation of 43BSDReno/pgrm/pascal/src/yymain.c, revision 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.