|
|
1.1 ! root 1: %{ ! 2: /* ! 3: * Copyright (c) 1984, 1985, 1986 Xerox Corp. ! 4: * ! 5: * texttoip - convert a textual representation of interpress to a real ! 6: * interpress file. The text produced by "iptotext" is the input ! 7: * that is recognized. ! 8: * ! 9: * This is the lex specification of the input scanner. ! 10: * ! 11: * Written for Xerox Corporation by William LeFebvre ! 12: * ! 13: * 6-May-1984 ! 14: * ! 15: * HISTORY ! 16: * 15-Jul-86 Lee Moore (lee) at Xerox Webster Research Center ! 17: * Escaped characters (as octal numbers) are no longer processed ! 18: * here. The popular null was causing problems. Processing ! 19: * of these escapes has been moved to AppendString1 in libip.a . ! 20: * ! 21: * 01-Dec-85 lee at Xerox, WRC ! 22: * Linted. ! 23: * ! 24: * 28-apr-85 ed flint ! 25: * add conditional compilation for vax11-c (vms) ! 26: * ! 27: * ! 28: * if using this file on vms, you must edit this file and add the following ! 29: * lines around the #include "stdio.h" line which is at the top of the file ! 30: * ! 31: * #ifdef vax11c ! 32: * # include stdio ! 33: * #else ! 34: * # include "stdio.h" ! 35: * #endif ! 36: */ ! 37: ! 38: ! 39: #ifdef vax11c ! 40: # include ctype ! 41: #else ! 42: # include <ctype.h> ! 43: #endif ! 44: ! 45: # include "iptokens.h" ! 46: # include "texttoken.h" ! 47: # include "ipnames.h" ! 48: ! 49: # define short_or_long(ch) (ch != '>' ? 1 : 2) ! 50: ! 51: extern long yylval_long; ! 52: extern char *yylval_charP; ! 53: char *buffptr; ! 54: char string_buffer[1024]; ! 55: %} ! 56: ! 57: %% ! 58: ! 59: ^"File: " { ! 60: return(T_file); ! 61: } ! 62: ! 63: ^"Header: " { ! 64: return(T_header); ! 65: } ! 66: ! 67: ^>[> ]"Comment: " { ! 68: yylval_long = short_or_long(yytext[1]); ! 69: return(T_seq_comment); ! 70: } ! 71: ! 72: ^>[> ]"Identifier: " { ! 73: yylval_long = short_or_long(yytext[1]); ! 74: return(T_seq_identifier); ! 75: } ! 76: ! 77: ^>[> ]"Insert file: " { ! 78: yylval_long = short_or_long(yytext[1]); ! 79: return(T_seq_insert_file); ! 80: } ! 81: ! 82: ^>[> ]"Integer: " { ! 83: yylval_long = short_or_long(yytext[1]); ! 84: return(T_seq_integer); ! 85: } ! 86: ! 87: ^>[> ]"Rational: " { ! 88: yylval_long = short_or_long(yytext[1]); ! 89: return(T_seq_rational); ! 90: } ! 91: ! 92: ^>[> ]"String: " { ! 93: yylval_long = short_or_long(yytext[1]); ! 94: return(T_seq_string); ! 95: } ! 96: ! 97: ^>[> ]"Adaptive Pixel Vector: " { ! 98: yylval_long = short_or_long(yytext[1]); ! 99: return(T_seq_apv); ! 100: } ! 101: ! 102: ^>[> ]"Compressed Pixel Vector: " { ! 103: yylval_long = short_or_long(yytext[1]); ! 104: return(T_seq_cpv); ! 105: } ! 106: ! 107: ^>[> ]"Packed Pixel Vector: " { ! 108: yylval_long = short_or_long(yytext[1]); ! 109: return(T_seq_ppv); ! 110: } ! 111: ! 112: [+-]?[0-9A-Fa-f][0-9A-Fa-f]* { ! 113: yylval_long = getnum(yytext); ! 114: return(T_number); ! 115: } ! 116: ! 117: ^[a-zA-Z{}][a-zA-Z]* { ! 118: register char *ptr; ! 119: ! 120: for (ptr = yytext; *ptr; ptr++) ! 121: { ! 122: if (isupper(*ptr)) ! 123: { ! 124: *ptr = tolower(*ptr); ! 125: } ! 126: } ! 127: for (yylval_long = 0; yylval_long <= OP_LIMIT; ! 128: yylval_long++) ! 129: { ! 130: if (strcmp(yytext, op_names[yylval_long]) == 0) ! 131: { ! 132: return(T_operator); ! 133: } ! 134: } ! 135: return(T_operator); ! 136: } ! 137: ! 138: \" { ! 139: unsigned char ch; ! 140: int val = 0; ! 141: int cnt = 0; ! 142: ! 143: yylval_charP = buffptr = string_buffer; ! 144: ! 145: while ((ch = input()) != '"') ! 146: { ! 147: if (ch == '\\') ! 148: { ! 149: ch = input(); ! 150: if (ch >= '0' && ch <= '9') ! 151: { ! 152: *buffptr++ = '\\'; ! 153: } ! 154: } ! 155: *buffptr++ = ch; ! 156: } ! 157: *buffptr = '\0'; ! 158: return(T_string); ! 159: } ! 160: ! 161: [a-zA-Z][a-zA-Z0-9\-]* { ! 162: yylval_charP = yytext; ! 163: return(T_identifier); ! 164: } ! 165: ! 166: [ \t][ \t]* { ! 167: yyleng = 0; /* gobble white space */ ! 168: yymore(); ! 169: } ! 170: ! 171: \(.*\) { ! 172: yyleng = 0; /* gobble comments */ ! 173: yymore(); ! 174: } ! 175: ! 176: ^\(.*\)\n { ! 177: /* comment that spans the whole line */ ! 178: yyleng = 0; ! 179: yymore(); ! 180: } ! 181: ! 182: \n { ! 183: return(T_newline); ! 184: } ! 185: ! 186: . { ! 187: yylval_long = yytext[yyleng-1]; ! 188: return(T_character); ! 189: } ! 190: ! 191: %% ! 192: ! 193: extern int radix; ! 194: ! 195: getnum(str) ! 196: ! 197: char *str; ! 198: ! 199: { ! 200: register int val; ! 201: register int digit; ! 202: ! 203: /* take the easy and fast way out for base 10 */ ! 204: if (radix == 10) ! 205: { ! 206: return(atoi(str)); ! 207: } ! 208: ! 209: /* otherwise this is a standard "convert any radix" algorithm */ ! 210: val = 0; ! 211: while ((digit = *str++) != '\0') ! 212: { ! 213: if ((digit -= '0') > 9) ! 214: { ! 215: /* it is a letter */ ! 216: if ((digit -= ('A' - '0' - 10)) > 15) ! 217: { ! 218: /* it is a lower case digit */ ! 219: digit -= ('a' - 'A'); ! 220: } ! 221: } ! 222: if (digit >= radix) ! 223: { ! 224: /* this is really too much! give up at this point */ ! 225: return(val); ! 226: } ! 227: val *= radix; ! 228: val += digit; ! 229: } ! 230: return(val); ! 231: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.