Annotation of 43BSD/ingres/source/equel/main.c, revision 1.1

1.1     ! root        1: # include      <stdio.h>
        !             2: # include      "constants.h"
        !             3: # include      "globals.h"
        !             4: # include      <setjmp.h>
        !             5: # include      <sccs.h>
        !             6: 
        !             7: SCCSID(@(#)main.c      8.1     12/31/84)
        !             8: 
        !             9: 
        !            10: /*
        !            11: **  MAIN.C -- Start up routines
        !            12: **
        !            13: **     Usage:
        !            14: **             equel {-d | -v | -c | -y | -f | -f<integer> | <name>.q}
        !            15: **
        !            16: **     Files:
        !            17: **             standard output -- for diagnostics
        !            18: **             <name>.q -- read
        !            19: **             <name>.c -- created and written
        !            20: **             any file appearing in a "#include" with a name
        !            21: **             <name>.q.h -- read
        !            22: **             <name>.c.h -- created and written
        !            23: **
        !            24: **     Flags:
        !            25: **             possible arguments are:
        !            26: **             -d -- enables run-time errors to have the file name
        !            27: **                   and line number where they occurred reported
        !            28: **                   Defaults to off.
        !            29: **             -f -- specify the number of characters to fill
        !            30: **                   an output line on quel commands 
        !            31: **                   as being very high (to get C code on the 
        !            32: **                   right line invariably).
        !            33: **             -f<integer> -- fill output lines to integer chars
        !            34: **                   (0 is like -f alone)
        !            35: **                   Defaults to FILLCNT.
        !            36: **             -y -- have the parser print debugging info
        !            37: **                   Defaults to off.
        !            38: **             -v -- (verbose) have the lexical analizer
        !            39: **                   print the kind of token it sees.
        !            40: **                   (only available if xDEBUG is defined)
        !            41: **                   Defaults to off.
        !            42: **             -c -- have every character read or backed up
        !            43: **                   echoed (only if xDEBUG is defined)
        !            44: **                   Defaults to off.
        !            45: **             -r -- reset all previous flags to default
        !            46: **             <name>.q -- name of a file to be equel'ed
        !            47: **
        !            48: **     Compilation Flags:
        !            49: **             xDEBUG -- enables debugging flags -v and -c
        !            50: **
        !            51: **     Compilation Instructions:
        !            52: **             to setup equel do :
        !            53: **                     setup equel; setup libq
        !            54: */
        !            55: /*
        !            56: **  MAIN --  invokes the pre-compiler on all the argument files
        !            57: **
        !            58: **     Parameters:
        !            59: **             argc
        !            60: **             argv
        !            61: **
        !            62: **     Returns:
        !            63: **             none
        !            64: */
        !            65: int            Exit_val = 0;                   /* Value to exit with */
        !            66: jmp_buf                Jmpbuf;                         /* nonlocal goto label */
        !            67: 
        !            68: main(argc, argv)
        !            69: int    argc;
        !            70: char   **argv;
        !            71: {
        !            72:        extern char     **argproc();
        !            73: 
        !            74: 
        !            75:        argv [argc] = 0;
        !            76: 
        !            77:        for (argv++; *argv; )
        !            78:        {
        !            79:                argv = argproc(argv);
        !            80:                if (!Arg_error)
        !            81:                        equel(Input_file_name);
        !            82:        }
        !            83:        exit(Exit_val);
        !            84: }
        !            85: 
        !            86: /*
        !            87: **  ARGPROC -- process arguments on the command line
        !            88: **     Arguments have effect on all the files following them
        !            89: **     until a "-r" or an argument cancelling the first
        !            90: **
        !            91: **     Also performs global initializations.
        !            92: **
        !            93: **     Parameters:
        !            94: **             argv -- a 0 terminated string vector with the
        !            95: **                     command lines components.
        !            96: **
        !            97: **     Returns:
        !            98: **             a new argv with all the leading arguments taken out
        !            99: **
        !           100: **     Side Effects:
        !           101: **             sets certain variables for certain flags
        !           102: **               -d -- Rtdb
        !           103: **               -c -- Chardebug
        !           104: **               -v -- Lex_debug
        !           105: **               -y -- yydebug
        !           106: **               -f -- Fillcnt
        !           107: **               -r -- resets all variables to default values
        !           108: **             Sets Arg_error on an argument error that should abort
        !           109: **             the pre-processing of the file read.
        !           110: */
        !           111: 
        !           112: char **argproc(argv)
        !           113: char   **argv;
        !           114: {
        !           115: 
        !           116:        /* initializations for a new file */
        !           117: 
        !           118:        C_code_flg = Pre_proc_flg = 0;
        !           119:        yyline = Newline = Lineout = 1;
        !           120:        Block_level = Indir_level = In_string = Fillmode = 0;
        !           121:        Charcnt = Lastc = In_quote = 0;
        !           122:        Arg_error = 0;
        !           123: 
        !           124:        /* free C variable trees, and symbol space */
        !           125:        freecvar(&C_locals);
        !           126:        freecvar(&F_locals);
        !           127:        freecvar(&C_globals);
        !           128:        freecvar(&F_globals);
        !           129: 
        !           130:        symspfree();
        !           131: 
        !           132:        for ( ; *argv && **argv == '-'; argv++)
        !           133:        {
        !           134:                switch (*++*argv)
        !           135:                {
        !           136:                        
        !           137: #                ifdef xDEBUG
        !           138:                  case 'v' :
        !           139:                        Lex_debug = 'v';
        !           140:                        break;
        !           141: 
        !           142:                  case 'c' :
        !           143:                        Chardebug = 'c';
        !           144:                        break;
        !           145: #                endif
        !           146: 
        !           147:                  case 'y' :
        !           148:                        yydebug = 1;
        !           149:                        break;
        !           150: 
        !           151:                  case 'd' :
        !           152:                        Rtdb = 1;
        !           153:                        break;
        !           154: 
        !           155:                  case 'f' :            /* line fill */
        !           156:                        Fillcnt = atoi(++*argv);
        !           157:                        if (!Fillcnt)
        !           158:                                /* make SURE that C_CODE is put
        !           159:                                 * on line that it was typed in on
        !           160:                                 */
        !           161:                                Fillcnt = 30000;
        !           162:                        break;
        !           163: 
        !           164:                  case 'r' :            /* reset all flags to 
        !           165:                                         * their default values.
        !           166:                                         */
        !           167:                        yydebug = Rtdb = 0;
        !           168:                        Fillcnt = FILLCNT;
        !           169: #                      ifdef xDEBUG
        !           170:                        Lex_debug = Chardebug = 0;
        !           171: #                      endif
        !           172:                        break;
        !           173: 
        !           174:                  default :
        !           175:                        printf("equel: invalid option: '-%c'\n", **argv);
        !           176:                }
        !           177:        }
        !           178:        if (*argv)
        !           179:                Input_file_name = *argv++;
        !           180:        else
        !           181:        {
        !           182:                printf("equel:  missing file name after arguments\n");
        !           183:                Arg_error++;
        !           184:        }
        !           185:        return (argv);
        !           186: }
        !           187: 
        !           188: 
        !           189: /*
        !           190: **  EQUEL -- invokes the precompiler for a non-included file
        !           191: **
        !           192: **     Parameters:
        !           193: **             filename -- the name of the file to pre-compile
        !           194: **
        !           195: **     Returns:
        !           196: **             none
        !           197: **
        !           198: **     Side Effects:
        !           199: **             performs the preprocessing on <filename>
        !           200: */
        !           201: 
        !           202: equel(filename)
        !           203: char           *filename;
        !           204: {
        !           205:        char            o_file [100];
        !           206:        register        l;
        !           207: 
        !           208:        l = length(filename);
        !           209:        if (l > sizeof o_file - 1)
        !           210:        {
        !           211:                printf("equel: filename \"%s\" too long\n",
        !           212:                filename);
        !           213:                return;
        !           214:        }
        !           215:        if (!sequal(".q", &filename [l - 2]))
        !           216:        {
        !           217:                printf("equel: EQUEL source files must end with .q\n");
        !           218:                return;
        !           219:        }
        !           220:        bmove(filename, o_file, l - 2);
        !           221:        bmove(".c", &o_file[l - 2], 3);
        !           222:        Input_file_name = filename;
        !           223:        In_file = Out_file = NULL;
        !           224: 
        !           225: 
        !           226:        if ((In_file = fopen(filename, "r")) == NULL)
        !           227:                cant("read", filename);
        !           228:        else if ((Out_file = fopen(o_file, "w")) == NULL)
        !           229:                cant("write", o_file);
        !           230:        else if (!setjmp(Jmpbuf))
        !           231:                yyparse();
        !           232: 
        !           233:        /* if a reset(III) is done while processing
        !           234:         * an included file, then this closes all
        !           235:         * files skipped.
        !           236:         */
        !           237:        while (restoref())
        !           238:                ;
        !           239: 
        !           240:        if (Out_file != NULL)
        !           241:                fclose(Out_file);
        !           242:        if (In_file != NULL)
        !           243:                fclose(In_file);
        !           244:        In_file = Out_file = NULL;
        !           245:        if (Block_level != 0)
        !           246:                yysemerr("unclosed block", 0);
        !           247:        Input_file_name = 0;
        !           248: }
        !           249: 
        !           250: /*
        !           251: **  CANT -- print error message on failure to open a file
        !           252: **
        !           253: **     Parameters:
        !           254: **             operation -- "read" or "write", according to what was
        !           255: **                          attempted
        !           256: **             filename -- the name of the file on which attempted
        !           257: **
        !           258: **     Returns:
        !           259: **             none
        !           260: **
        !           261: **     Side Effects:
        !           262: **             Prints error message on standard output
        !           263: */
        !           264: 
        !           265: cant(operation, filename)
        !           266: char           *operation;
        !           267: char           *filename;
        !           268: {
        !           269:        extern  char *sys_errlist[];
        !           270:        extern  int sys_nerr;
        !           271:        extern  int errno;
        !           272:        char    ebuf[BUFSIZ];
        !           273: 
        !           274:        if (errno > 0 && errno <= sys_nerr)
        !           275:                sprintf(ebuf, "Can't %s \"%s\": %s", operation, filename,
        !           276:                    sys_errlist[errno]);
        !           277:        else
        !           278:                sprintf(ebuf, "Can't %s \"%s\": unknown error", operation,
        !           279:                    filename);
        !           280:        yysemerr(ebuf, 0);
        !           281: }

unix.superglobalmegacorp.com

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