|
|
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: %%
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.