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

unix.superglobalmegacorp.com

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