Annotation of researchv9/jtools/src/Jpic/picl.l, revision 1.1

1.1     ! root        1: %Start A str comment def sc br
        !             2: %e 1300
        !             3: %k 100
        !             4: %a 1400
        !             5: %o 1200
        !             6: %p 3500
        !             7: %n 600
        !             8: 
        !             9: %{
        !            10: #undef input
        !            11: #undef unput
        !            12: #include <stdio.h>
        !            13: #include <ctype.h>
        !            14: #include "pic.h"
        !            15: #include "y.tab.h"
        !            16: 
        !            17: extern double  atof();
        !            18: extern int     dbg;
        !            19: #define        dprintf if(dbg)printf
        !            20: extern int     yylval;
        !            21: extern struct  symtab  symtab[];
        !            22: extern char    *filename;
        !            23: extern int     synerr;
        !            24: extern float   lastfloat;
        !            25: 
        !            26: #define        CADD    cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long", cbuf); BEGIN A;}
        !            27: #define        CBUFLEN 150
        !            28: char   cbuf[CBUFLEN];
        !            29: int    clen, cflag;
        !            30: %}
        !            31: 
        !            32: A      [a-zA-Z_]
        !            33: B      [a-zA-Z0-9_]
        !            34: D      [0-9]
        !            35: WS     [ \t]
        !            36: 
        !            37: %%
        !            38:        switch (yybgin-yysvec-1) {      /* witchcraft */
        !            39:        case 0:
        !            40:                BEGIN A;
        !            41:                break;
        !            42:        case sc:
        !            43:                BEGIN A;
        !            44:                return('}');
        !            45:        case br:
        !            46:                BEGIN A;
        !            47:                return(']');
        !            48:        }
        !            49: 
        !            50: <A>{WS}                ;
        !            51: <A>"\\"\n      ;
        !            52: <A>\n          { return(ST); }
        !            53: <A>";"         { return(ST); }
        !            54: <A>"}"         { BEGIN sc; return(ST); }
        !            55: <A>"]"         { BEGIN br; return(ST); }
        !            56: 
        !            57: <A>^".".*      { if (yytext[1] == 'P' && (yytext[2] == 'E' || yytext[2] == 'F')) {
        !            58:                        yylval = yytext[2];
        !            59:                        return(EOF);
        !            60:                  } else {
        !            61:                        yylval = tostring(yytext);
        !            62:                        return(TROFF);
        !            63:                  }
        !            64:                }
        !            65: 
        !            66: <A>print       return(yylval = PRINT);
        !            67: <A>box         return(yylval = BOX);
        !            68: <A>circle      return(yylval = CIRCLE);
        !            69: <A>arc         return(yylval = ARC);
        !            70: <A>ellipse     return(yylval = ELLIPSE);
        !            71: <A>arrow       return(yylval = ARROW);
        !            72: <A>spline      return(yylval = SPLINE);
        !            73: <A>line                return(yylval = LINE);
        !            74: <A>move                return(yylval = MOVE);
        !            75: <A>"[]"                return(yylval = BLOCK);
        !            76: 
        !            77: <A>same                return(SAME);
        !            78: <A>between     return(BETWEEN);
        !            79: <A>and         return(AND);
        !            80: 
        !            81: <A>of          ;
        !            82: <A>the         ;
        !            83: <A>way         ;
        !            84: 
        !            85: <A>".e"                { yylval = EAST; return(CORNER); }
        !            86: <A>".east"     { yylval = EAST; return(CORNER); }
        !            87: <A>".r"                { yylval = EAST; return(CORNER); }
        !            88: <A>".right"    { yylval = EAST; return(CORNER); }
        !            89: <A>".w"                { yylval = WEST; return(CORNER); }
        !            90: <A>".west"     { yylval = WEST; return(CORNER); }
        !            91: <A>".l"                { yylval = WEST; return(CORNER); }
        !            92: <A>".left"     { yylval = WEST; return(CORNER); }
        !            93: <A>".n"                { yylval = NORTH; return(CORNER); }
        !            94: <A>".north"    { yylval = NORTH; return(CORNER); }
        !            95: <A>".t"                { yylval = NORTH; return(CORNER); }
        !            96: <A>".top"      { yylval = NORTH; return(CORNER); }
        !            97: <A>".s"                { yylval = SOUTH; return(CORNER); }
        !            98: <A>".south"    { yylval = SOUTH; return(CORNER); }
        !            99: <A>".b"                { yylval = SOUTH; return(CORNER); }
        !           100: <A>".bot"      { yylval = SOUTH; return(CORNER); }
        !           101: <A>".bottom"   { yylval = SOUTH; return(CORNER); }
        !           102: <A>".c"                { yylval = CENTER; return(CORNER); }
        !           103: <A>".center"   { yylval = CENTER; return(CORNER); }
        !           104: <A>".start"    { yylval = START; return(CORNER); }
        !           105: <A>".end"      { yylval = END; return(CORNER); }
        !           106: <A>".ne"               { yylval = NE; return(CORNER); }
        !           107: <A>"."upper" "*right   { yylval = NE; return(CORNER); }
        !           108: <A>".se"               { yylval = SE; return(CORNER); }
        !           109: <A>"."lower" "*right   { yylval = SE; return(CORNER); }
        !           110: <A>".nw"               { yylval = NW; return(CORNER); }
        !           111: <A>"."upper" "*left    { yylval = NW; return(CORNER); }
        !           112: <A>".sw"               { yylval = SW; return(CORNER); }
        !           113: <A>"."lower" "*left    { yylval = SW; return(CORNER); }
        !           114: 
        !           115: <A>top" "+of           { yylval = NORTH; return(CORNER); }
        !           116: <A>north" "+of         { yylval = NORTH; return(CORNER); }
        !           117: <A>bottom" "+of                { yylval = SOUTH; return(CORNER); }
        !           118: <A>south" "+of         { yylval = SOUTH; return(CORNER); }
        !           119: <A>left" "+of          { yylval = WEST; return(CORNER); }
        !           120: <A>west" "+of          { yylval = WEST; return(CORNER); }
        !           121: <A>right" "+of         { yylval = EAST; return(CORNER); }
        !           122: <A>east" "+of          { yylval = EAST; return(CORNER); }
        !           123: <A>center" "+of                { yylval = CENTER; return(CORNER); }
        !           124: <A>start" "+of         { yylval = START; return(CORNER); }
        !           125: <A>end" "+of           { yylval = END; return(CORNER); }
        !           126: <A>upper" "+right" "+of        { yylval = NE; return(CORNER); }
        !           127: <A>upper" "+left" "+of { yylval = NW; return(CORNER); }
        !           128: <A>lower" "+right" "+of        { yylval = SE; return(CORNER); }
        !           129: <A>lower" "+left" "+of { yylval = SW; return(CORNER); }
        !           130: 
        !           131: <A>height      { yylval = HEIGHT; return(ATTR); }
        !           132: <A>ht          { yylval = HEIGHT; return(ATTR); }
        !           133: <A>wid         { yylval = WIDTH; return(ATTR); }
        !           134: <A>width       { yylval = WIDTH; return(ATTR); }
        !           135: <A>rad         { yylval = RADIUS; return(ATTR); }
        !           136: <A>radius      { yylval = RADIUS; return(ATTR); }
        !           137: <A>diam                { yylval = DIAMETER; return(ATTR); }
        !           138: <A>diameter    { yylval = DIAMETER; return(ATTR); }
        !           139: <A>size                { yylval = SIZE; return(ATTR); }
        !           140: <A>left                { yylval = LEFT; return(DIR); }
        !           141: <A>right       { yylval = RIGHT; return(DIR); }
        !           142: <A>up          { yylval = UP; return(DIR); }
        !           143: <A>down                { yylval = DOWN; return(DIR); }
        !           144: <A>cw          { yylval = CW; return(ATTR); }
        !           145: <A>ccw         { yylval = CCW; return(ATTR); }
        !           146: <A>then                { yylval = THEN; return(ATTR); }
        !           147: <A>invis       { yylval = INVIS; return(ATTR); }
        !           148: <A>invisible   { yylval = INVIS; return(ATTR); }
        !           149: <A>dot         return(yylval = DOT);
        !           150: <A>dotted      return(yylval = DOT);
        !           151: <A>dash                return(yylval = DASH);
        !           152: <A>dashed      return(yylval = DASH);
        !           153: <A>chop                return(yylval = CHOP);
        !           154: 
        !           155: <A>spread      return(yylval = SPREAD);
        !           156: <A>fill                return(yylval = FILL);
        !           157: <A>ljust       return(yylval = LJUST);
        !           158: <A>rjust       return(yylval = RJUST);
        !           159: <A>above       return(yylval = ABOVE);
        !           160: <A>below       return(yylval = BELOW);
        !           161: 
        !           162: <A>"<-"                { yylval = HEAD1; return(HEAD); }
        !           163: <A>"->"                { yylval = HEAD2; return(HEAD); }
        !           164: <A>"<->"       { yylval = HEAD12; return(HEAD); }
        !           165: 
        !           166: <A>".x"                return(yylval = DOTX);
        !           167: <A>".y"                return(yylval = DOTY);
        !           168: <A>".ht"       return(yylval = DOTHT);
        !           169: <A>".height"   return(yylval = DOTHT);
        !           170: <A>".wid"      return(yylval = DOTWID);
        !           171: <A>".width"    return(yylval = DOTWID);
        !           172: <A>".rad"      return(yylval = DOTRAD);
        !           173: <A>".radius"   return(yylval = DOTRAD);
        !           174: 
        !           175: <A>from                return(yylval = FROM);
        !           176: <A>to          return(yylval = TO);
        !           177: <A>at          return(yylval = AT);
        !           178: <A>by          return(yylval = BY);
        !           179: <A>with                return(yylval = WITH);
        !           180: <A>last                return(yylval = LAST);
        !           181: 
        !           182: <A>Here                return(yylval = HERE);
        !           183: <A>define{WS}+ { BEGIN def; }
        !           184: <def>{A}{B}*   { yylval = definition(yytext); BEGIN A; return(TROFF); }
        !           185: 
        !           186: <A>first               { yylval = 1; return(NTH); }
        !           187: <A>{D}+(th|nd|rd|st)   { yylval = atoi(yytext); return(NTH); }
        !           188: <A>({D}+("."?){D}*|"."{D}+)i?  {
        !           189:                int i, inch;
        !           190:                inch = 0;
        !           191:                for (i = 0; i < yyleng; i++)
        !           192:                        if (yytext[i] == '.' || yytext[i] == 'i') {
        !           193:                                inch++;
        !           194:                                break;
        !           195:                        }
        !           196:                if (inch)
        !           197:                        yylval = atof(yytext) * getvar("scale") + 0.5;
        !           198:                else
        !           199:                        yylval = atoi(yytext);
        !           200:                lastfloat = atof(yytext);
        !           201:                return(NUMBER); }
        !           202: 
        !           203: <A>{A}{B}* {
        !           204:                int c;
        !           205:                char buf[100];
        !           206:                struct symtab *p;
        !           207:                p = lookup(yytext);
        !           208:                if (p != NULL && p->s_type == DEFNAME) {
        !           209:                        yylval = defuse(yytext, p);
        !           210:                        return(TROFF);
        !           211:                } else if (islower(yytext[0])) {
        !           212:                        yylval = (int) tostring(yytext);
        !           213:                        return(VARNAME);
        !           214:                } else {
        !           215:                        yylval = (int) tostring(yytext);
        !           216:                        return(PLACENAME);
        !           217:                }
        !           218:        }
        !           219: 
        !           220: <A>\"          { BEGIN str; clen=0; }
        !           221: 
        !           222: <A>#           { BEGIN comment; }
        !           223: <comment>\n    { BEGIN A; return(ST); }
        !           224: <comment>.     ;
        !           225: 
        !           226: <A>.           { yylval = yytext[0]; return(yytext[0]); }
        !           227: 
        !           228: <str>\"                { BEGIN A; cbuf[clen]=0; yylval = tostring(cbuf); return(TEXT); }
        !           229: <str>\n                { yyerror("newline in string"); BEGIN A; return(ST); }
        !           230: <str>"\\\""    { cbuf[clen++]='"'; }
        !           231: <str>"\\"t     { cbuf[clen++]='\t'; }
        !           232: <str>"\\\\"    { cbuf[clen++]='\\'; }
        !           233: <str>.         { CADD; }
        !           234: 
        !           235: %%

unix.superglobalmegacorp.com

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