Annotation of 43BSD/usr.bin/ratfor/rlex.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)rlex.c     1.2 (Berkeley) 8/11/83";
        !             3: #endif
        !             4: 
        !             5: # include "r.h"
        !             6: 
        !             7: char *keyword [] = {
        !             8:        "do",
        !             9:        "if",
        !            10:        "else",
        !            11:        "for",
        !            12:        "repeat",
        !            13:        "until",
        !            14:        "while",
        !            15:        "break",
        !            16:        "next",
        !            17:        "define",
        !            18:        "include",
        !            19:        "return",
        !            20:        "switch",
        !            21:        "case",
        !            22:        "default",
        !            23:        0};
        !            24: 
        !            25: int keytran[] = {
        !            26:        DO,
        !            27:        IF,
        !            28:        ELSE,
        !            29:        FOR,
        !            30:        REPEAT,
        !            31:        UNTIL,
        !            32:        WHILE,
        !            33:        BREAK,
        !            34:        NEXT,
        !            35:        DEFINE,
        !            36:        INCLUDE,
        !            37:        RETURN,
        !            38:        SWITCH,
        !            39:        CASE,
        !            40:        DEFAULT,
        !            41:        0};
        !            42: 
        !            43: char   *fcnloc;        /* spot for "function" */
        !            44: 
        !            45: int    svargc;
        !            46: char   **svargv;
        !            47: char   *curfile[10]    = { "" };
        !            48: int    infptr  = 0;
        !            49: FILE   *outfil = { stdout };
        !            50: FILE   *infile[10]     = { stdin };
        !            51: int    linect[10];
        !            52: 
        !            53: int    contfld = CONTFLD;      /* place to put continuation char */
        !            54: int    printcom        = 0;    /* print comments if on */
        !            55: int    hollerith       = 0;    /* convert "..." to 27H... if on */
        !            56: 
        !            57: #ifdef gcos
        !            58: char   *ratfor "tssrat";
        !            59: int    bcdrat[2];
        !            60: char   *bwkmeter       ".           bwkmeter    ";
        !            61: int    bcdbwk[5];
        !            62: #endif
        !            63: 
        !            64: main(argc,argv) int argc; char **argv; {
        !            65:        int i;
        !            66:        while(argc>1 && argv[1][0]=='-') {
        !            67:                if(argv[1][1]=='6') {
        !            68:                        contfld=6;
        !            69:                        if (argv[1][2]!='\0')
        !            70:                                contchar = argv[1][2];
        !            71:                } else if (argv[1][1] == 'C')
        !            72:                        printcom++;
        !            73:                else if (argv[1][1] == 'h')
        !            74:                        hollerith++;
        !            75:                argc--;
        !            76:                argv++;
        !            77:        }
        !            78: 
        !            79: #ifdef gcos
        !            80:        if (!intss()) {
        !            81:                _fixup();
        !            82:                ratfor = "batrat";
        !            83:        }
        !            84:        ascbcd(ratfor,bcdrat,6);
        !            85:        ascbcd(bwkmeter,bcdbwk,24);
        !            86:        acdata(bcdrat[0],1);
        !            87:        acupdt(bcdbwk[0]);
        !            88:        if (!intss()) {
        !            89:                if ((infile[infptr]=fopen("s*", "r")) == NULL)
        !            90:                        cant("s*");
        !            91:                if ((outfil=fopen("*s", "w")) == NULL)
        !            92:                        cant("*s");
        !            93:        }
        !            94: #endif
        !            95: 
        !            96:        svargc = argc;
        !            97:        svargv = argv;
        !            98:        if (svargc > 1)
        !            99:                putbak('\0');
        !           100:        for (i=0; keyword[i]; i++)
        !           101:                install(keyword[i], "", keytran[i]);
        !           102:        fcnloc = install("function", "", 0);
        !           103:        yyparse();
        !           104: #ifdef gcos
        !           105:        if (!intss())
        !           106:                bexit(errorflag);
        !           107: #endif
        !           108:        exit(errorflag);
        !           109: }
        !           110: 
        !           111: #ifdef gcos
        !           112: bexit(status) {
        !           113:        /* this is the batch version of exit for gcos tss */
        !           114:        FILE *inf, *outf;
        !           115:        char c;
        !           116: 
        !           117:        fclose(stderr); /* make sure diagnostics get flushed */
        !           118:        if (status) /* abort */
        !           119:                _nogud();
        !           120: 
        !           121:        /* good: copy output back to s*, call forty */
        !           122: 
        !           123:        fclose(outfil,"r");
        !           124:        fclose(infile[0],"r");
        !           125:        inf = fopen("*s", "r");
        !           126:        outf = fopen("s*", "w");
        !           127:        while ((c=getc(inf)) != EOF)
        !           128:                putc(c, outf);
        !           129:        fclose(inf,"r");
        !           130:        fclose(outf,"r");
        !           131:        __imok();
        !           132: }
        !           133: #endif
        !           134: 
        !           135: cant(s) char *s; {
        !           136:        linect[infptr] = 0;
        !           137:        curfile[infptr] = s;
        !           138:        error("can't open");
        !           139:        exit(1);
        !           140: }
        !           141: 
        !           142: inclstat() {
        !           143:        int c;
        !           144:        char *ps;
        !           145:        char fname[100];
        !           146:        while ((c = getchr()) == ' ' || c == '\t');
        !           147:        if (c == '(') {
        !           148:                for (ps=fname; (*ps=getchr()) != ')'; ps++);
        !           149:                *ps = '\0';
        !           150:        } else if (c == '"' || c == '\'') {
        !           151:                for (ps=fname; (*ps=getchr()) != c; ps++);
        !           152:                *ps = '\0';
        !           153:        } else {
        !           154:                putbak(c);
        !           155:                for (ps=fname; (*ps=getchr()) != ' ' &&*ps!='\t' && *ps!='\n' && *ps!=';'; ps++);
        !           156:                *ps = '\0';
        !           157:        }
        !           158:        if ((infile[++infptr] = fopen(fname,"r")) == NULL) {
        !           159:                cant(fname);
        !           160:                exit(1);
        !           161:        }
        !           162:        linect[infptr] = 0;
        !           163:        curfile[infptr] = fname;
        !           164: }
        !           165: 
        !           166: char   str[500];
        !           167: int    nstr;
        !           168: 
        !           169: yylex() {
        !           170:        int c, t;
        !           171:        for (;;) {
        !           172:                while ((c=gtok(str))==' ' || c=='\n' || c=='\t')
        !           173:                        ;
        !           174:                yylval = c;
        !           175:                if (c==';' || c=='{' || c=='}')
        !           176:                        return(c);
        !           177:                if (c==EOF)
        !           178:                        return(0);
        !           179:                yylval = (int) str;
        !           180:                if (c == DIG)
        !           181:                        return(DIGITS);
        !           182:                t = lookup(str)->ydef;
        !           183:                if (t==DEFINE)
        !           184:                        defstat();
        !           185:                else if (t==INCLUDE)
        !           186:                        inclstat();
        !           187:                else if (t > 0)
        !           188:                        return(t);
        !           189:                else
        !           190:                        return(GOK);
        !           191:        }
        !           192: }
        !           193: 
        !           194: int    dbg     = 0;
        !           195: 
        !           196: yyerror(p) char *p; {;}
        !           197: 
        !           198: 
        !           199: defstat() {
        !           200:        int c,i,val,t,nlp;
        !           201:        extern int nstr;
        !           202:        extern char str[];
        !           203:        while ((c=getchr())==' ' || c=='\t');
        !           204:        if (c == '(') {
        !           205:                t = '(';
        !           206:                while ((c=getchr())==' ' || c=='\t');
        !           207:                putbak(c);
        !           208:        }
        !           209:        else {
        !           210:                t = ' ';
        !           211:                putbak(c);
        !           212:        }
        !           213:        for (nstr=0; c=getchr(); nstr++) {
        !           214:                if (type[c] != LET && type[c] != DIG)
        !           215:                        break;
        !           216:                str[nstr] = c;
        !           217:        }
        !           218:        putbak(c);
        !           219:        str[nstr] = '\0';
        !           220:        if (c != ' ' && c != '\t' && c != '\n' && c != ',') {
        !           221:                error("illegal define statement");
        !           222:                return;
        !           223:        }
        !           224:        val = nstr+1;
        !           225:        if (t == ' ') {
        !           226:                while ((c=getchr())==' ' || c=='\t');
        !           227:                putbak(c);
        !           228:                for (i=val; (c=getchr())!='\n' && c!='#' && c!='\0'; i++)
        !           229:                        str[i] = c;
        !           230:                putbak(c);
        !           231:        } else {
        !           232:                while ((c=getchr())==' ' || c=='\t' || c==',' || c=='\n');
        !           233:                putbak(c);
        !           234:                nlp  = 0;
        !           235:                for (i=val; nlp>=0 && (c=str[i]=getchr()); i++)
        !           236:                        if (c == '(')
        !           237:                                nlp++;
        !           238:                        else if (c == ')')
        !           239:                                nlp--;
        !           240:                i--;
        !           241:        }
        !           242:        for ( ; i>0; i--)
        !           243:                if (str[i-1] != ' ' && str[i-1] != '\t')
        !           244:                        break;
        !           245:        str[i] = '\0';
        !           246:        install(str, &str[val], 0);
        !           247: }
        !           248: 

unix.superglobalmegacorp.com

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