Annotation of 43BSD/contrib/courier/compiler/main.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)main.c     4.1 (Berkeley) 7/3/83";
        !             3: #endif
        !             4: 
        !             5: #include "Courier.h"
        !             6: #include <errno.h>
        !             7: 
        !             8: char *input_file;
        !             9: char hfile[MAXSTR], cfile1[MAXSTR], cfile2[MAXSTR];
        !            10: char ufile[MAXSTR], sfile[MAXSTR];
        !            11: FILE *hf, *cf1, *cf2, *uf, *sf;
        !            12: list Values, Types;
        !            13: int errs;
        !            14: int explicit = 0;      /* if true, generate stubs with explicit bindings */
        !            15: 
        !            16: /*
        !            17:  * Predefined types.
        !            18:  */
        !            19: struct object
        !            20:        *Boolean_type,
        !            21:        *Cardinal_type, *LongCardinal_type,
        !            22:        *Integer_type, *LongInteger_type,
        !            23:        *String_type,
        !            24:        *Unspecified_type, *LongUnspecified_type;
        !            25: 
        !            26: struct object
        !            27:        *Undefined_constant;
        !            28: 
        !            29: main(argc, argv)
        !            30:        int argc;
        !            31:        char **argv;
        !            32: {
        !            33:        argc--; argv++;
        !            34:        if (argc == 2 && strcmp(*argv, "-x") == 0) {
        !            35:                explicit = 1; argc--; argv++;
        !            36:        }
        !            37:        if (argc != 1) {
        !            38:                fprintf(stderr, "Usage: courier [-x] input_file\n");
        !            39:                exit(1);
        !            40:        }
        !            41:        input_file = *argv;
        !            42:        if (freopen(input_file, "r", stdin) == NULL) {
        !            43:                perror(input_file); exit(1);
        !            44:        }
        !            45:        tempname(hfile); tempname(ufile); tempname(sfile);
        !            46:        tempname(cfile1); tempname(cfile2);
        !            47:        if ((hf = fopen(hfile, "w")) == NULL) {
        !            48:                perror(hfile); goto bad;
        !            49:        }
        !            50:        if ((uf = fopen(ufile, "w")) == NULL) {
        !            51:                perror(ufile); goto bad;
        !            52:        }
        !            53:        if ((sf = fopen(sfile, "w")) == NULL) {
        !            54:                perror(sfile); goto bad;
        !            55:        }
        !            56:        if ((cf1 = fopen(cfile1, "w")) == NULL) {
        !            57:                perror(cfile1); goto bad;
        !            58:        }
        !            59:        if ((cf2 = fopen(cfile2, "w")) == NULL) {
        !            60:                perror(cfile2); goto bad;
        !            61:        }
        !            62:        setup_predefs();
        !            63:        (void) yyparse();
        !            64:        fclose(hf); fclose(uf); fclose(sf);
        !            65:        if (errs == 0) {
        !            66:                int c;
        !            67: 
        !            68:                freopen(cfile2, "r", cf2);
        !            69:                while ((c = getc(cf2)) != EOF)
        !            70:                        putc(c, cf1);
        !            71:                fclose(cf1); fclose(cf2);
        !            72:                unlink(cfile2);
        !            73:                rename(cfile1, program_name, "_stubs.c", 0);
        !            74:                rename(ufile, program_name, "_client.c", 0);
        !            75:                rename(sfile, program_name, "_server.c", 0);
        !            76:                rename(hfile, program_name, ".h", 1);
        !            77:                exit(0);
        !            78:        }
        !            79:        fclose(cf1); fclose(cf2);
        !            80: bad:
        !            81:        unlink(hfile);
        !            82:        unlink(ufile);
        !            83:        unlink(sfile);
        !            84:        unlink(cfile1);
        !            85:        unlink(cfile2);
        !            86:        exit(1);
        !            87: }
        !            88: 
        !            89: /*
        !            90:  * Rename the source file to be <dest>.<suffix> .
        !            91:  * If we're being paranoid, we prepend # to existing files that might
        !            92:  * get clobbered.
        !            93:  */
        !            94: rename(source, dest, suffix, paranoid)
        !            95:        char *source, *dest, *suffix;
        !            96:        int paranoid;
        !            97: {
        !            98:        char newname[MAXSTR], backup[MAXSTR];
        !            99:        extern int errno;
        !           100: 
        !           101:        sprintf(newname, "%s%s", dest, suffix);
        !           102:        for (;;)
        !           103:                if (link(source, newname) == 0)
        !           104:                        if (unlink(source) != 0) {
        !           105:                                perror(newname);
        !           106:                                return (-1);
        !           107:                        } else
        !           108:                                return (0);
        !           109:                else if (errno != EEXIST ||
        !           110:                         (paranoid && rename(newname, "#", newname) != 0) ||
        !           111:                         (! paranoid && unlink(newname) != 0))
        !           112:                                break;
        !           113:        perror(newname);
        !           114:        return (-1);
        !           115: }
        !           116: 
        !           117: /* VARARGS1 */
        !           118: yyerror(s, args)
        !           119:        char *s;
        !           120: {
        !           121:        extern int yylineno;
        !           122: 
        !           123:        errs = 1;
        !           124:        fprintf(stderr, "%d: ", yylineno);
        !           125:        _doprnt(s, &args, stderr);
        !           126:        putc('\n', stderr);
        !           127:        unlink(hfile); unlink(ufile); unlink(sfile);
        !           128:        unlink(cfile1); unlink(cfile2);
        !           129: }
        !           130: 
        !           131: tempname(buf)
        !           132:        char *buf;
        !           133: {
        !           134:        static int n = 0;
        !           135: 
        !           136:        sprintf(buf, "tmp%d.%d", n, getpid());
        !           137:        n++;
        !           138: }
        !           139: 
        !           140: /*
        !           141:  * This mess is needed because C doesn't handle initialization of unions.
        !           142:  */
        !           143: setup_predefs()
        !           144: {
        !           145:        struct object *t;
        !           146: 
        !           147:        Boolean_type = make(O_SYMBOL, "Boolean");
        !           148:        t = make(O_TYPE, C_PREDEF);
        !           149:        t->t_pfname = "PackBoolean";
        !           150:        t->t_ufname = "UnpackBoolean";
        !           151:        declare(&Values, Boolean_type, t);
        !           152: 
        !           153:        Cardinal_type = make(O_SYMBOL, "Cardinal");
        !           154:        t = make(O_TYPE, C_PREDEF);
        !           155:        t->t_pfname = "PackCardinal";
        !           156:        t->t_ufname = "UnpackCardinal";
        !           157:        declare(&Values, Cardinal_type, t);
        !           158: 
        !           159:        LongCardinal_type = make(O_SYMBOL, "LongCardinal");
        !           160:        t = make(O_TYPE, C_PREDEF);
        !           161:        t->t_pfname = "PackLongCardinal";
        !           162:        t->t_ufname = "Unpack_LongCardinal";
        !           163:        declare(&Values, LongCardinal_type, t);
        !           164: 
        !           165:        Integer_type = make(O_SYMBOL, "Integer");
        !           166:        t = make(O_TYPE, C_PREDEF);
        !           167:        t->t_pfname = "PackInteger";
        !           168:        t->t_ufname = "UnpackInteger";
        !           169:        declare(&Values, Integer_type, t);
        !           170: 
        !           171:        LongInteger_type = make(O_SYMBOL, "LongInteger");
        !           172:        t = make(O_TYPE, C_PREDEF);
        !           173:        t->t_pfname = "PackLongInteger";
        !           174:        t->t_ufname = "UnpackLongInteger";
        !           175:        declare(&Values, LongInteger_type, t);
        !           176: 
        !           177:        String_type = make(O_SYMBOL, "String");
        !           178:        t = make(O_TYPE, C_PREDEF);
        !           179:        t->t_pfname = "PackString";
        !           180:        t->t_ufname = "UnpackString";
        !           181:        declare(&Values, String_type, t);
        !           182: 
        !           183:        Unspecified_type = make(O_SYMBOL, "Unspecified");
        !           184:        t = make(O_TYPE, C_PREDEF);
        !           185:        t->t_pfname = "PackUnspecified";
        !           186:        t->t_ufname = "UnpackUnspecified";
        !           187:        declare(&Values, Unspecified_type, t);
        !           188: 
        !           189:        LongUnspecified_type = make(O_SYMBOL, "LongUnspecified");
        !           190:        t = make(O_TYPE, C_PREDEF);
        !           191:        t->t_pfname = "PackLongUnspecified";
        !           192:        t->t_ufname = "UnpackLongUnspecified";
        !           193:        declare(&Values, LongUnspecified_type, t);
        !           194: 
        !           195:        Undefined_constant = make(O_SYMBOL, "?undefined?");
        !           196:        declare(&Types, Undefined_constant, Unspecified_type);
        !           197:        declare(&Values, Undefined_constant, make(O_CONSTANT, 0));
        !           198: }

unix.superglobalmegacorp.com

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