|
|
1.1 ! root 1: /* parse.c ! 2: * ! 3: * Copyright (c) 1984, 1985 Xerox Corp. ! 4: * ! 5: * Eight items are left on the stack when execution finishes. ! 6: * See the RES manual. ! 7: * ! 8: * ! 9: * pop() can be used to remove items from the stack. ! 10: * Please remember to free() any item you pop off the stack. ! 11: * ! 12: * ! 13: * ! 14: */ ! 15: ! 16: #include <stdio.h> ! 17: #include <iptokens.h> ! 18: ! 19: FILE *fp; ! 20: long filepos = 0; ! 21: ! 22: ! 23: #define len_RES_header 40 ! 24: ! 25: #define token_id 0340 ! 26: #define token_mask 0037 ! 27: #define token_short_op 0200 ! 28: #define token_long_op 0240 ! 29: #define token_short_seq 0300 ! 30: #define token_long_seq 0340 ! 31: ! 32: parse(fpin) ! 33: FILE *fpin; ! 34: { ! 35: /* variables */ ! 36: int c, ! 37: len; ! 38: char string[len_RES_header+1], ! 39: *ptr; ! 40: int last = 0; ! 41: int seq, ! 42: hlen; ! 43: ! 44: fp = fpin; ! 45: ! 46: /* Get the header. */ ! 47: for (hlen = 0, ptr = string; hlen < len_RES_header; hlen++) ! 48: if ( (*ptr++ = getc(fp)) == ' ' ) ! 49: break; ! 50: ! 51: *ptr = '\0'; ! 52: ! 53: header(string); ! 54: ! 55: /* Analyze every token in the file. */ ! 56: while ((c = getc(fp)) != EOF) ! 57: { ! 58: filepos = ftell(fp)-1; ! 59: switch (c & token_id) ! 60: { ! 61: case token_short_op: /* Only allowed short op is "nop". */ ! 62: len = c & token_mask; ! 63: operator(len); ! 64: last = 0; ! 65: break; ! 66: case token_long_op: ! 67: len = getc(fp)+((c & token_mask) << 8); ! 68: if (operator(len)) return; /* Quit when you hit endBlock. */ ! 69: last = 0; ! 70: break; ! 71: case token_short_seq: ! 72: len = getc(fp); ! 73: seq = c & token_mask; ! 74: sequence(seq, len, last); ! 75: if (seq != sequenceContinued) last = seq; ! 76: break; ! 77: case token_long_seq: ! 78: len = getc(fp) << 16; ! 79: len = len+(getc(fp) << 8); ! 80: len = len+getc(fp); ! 81: seq = c & token_mask; ! 82: sequence(seq, len, last); ! 83: if (seq != sequenceContinued) last = seq; ! 84: break; ! 85: default: ! 86: shortnum((c << 8)+getc(fp)-INTEGER_ZERO); ! 87: last = 0; ! 88: break; ! 89: } ! 90: } ! 91: /* Shouldn't get here if file ends properly! */ ! 92: fprintf(stderr, "(%d) Unexpected EOF\n", filepos); ! 93: exit(2); ! 94: } ! 95: ! 96: ! 97: #ifndef debug ! 98: operator(op) ! 99: int op; ! 100: { ! 101: switch (op) ! 102: { ! 103: case OP_makevec: op_makevec(); break; ! 104: case OP_do: op_do(); break; ! 105: case OP_pop: op_pop(); break; ! 106: case OP_copy: op_copy(); break; ! 107: case OP_dup: op_dup(); break; ! 108: case OP_roll: op_roll(); break; ! 109: case OP_exch: op_exch(); break; ! 110: case OP_nop: op_nop(); break; ! 111: case OP_translate: op_translate(); break; ! 112: case OP_rotate: op_rotate(); break; ! 113: case OP_scale: op_scale(); break; ! 114: case OP_scale2: op_scale2(); break; ! 115: case OP_concat: op_concat(); break; ! 116: case OP_makepixelarray: op_makepixelarray(); break; ! 117: case OP_extractpixelarray: op_extractpixelarray(); break; ! 118: case OP_finddecompressor: op_finddecompressor(); break; ! 119: case OP_makegray: op_makegray(); break; ! 120: case OP_findcolor: op_findcolor(); break; ! 121: case OP_findcoloroperator: op_findcoloroperator(); break; ! 122: case OP_findcolormodeloperator: op_findcolormodeloperator(); break; ! 123: case OP_beginBlock: op_beginblock(); break; ! 124: case OP_endBlock: op_endblock(); return(1); ! 125: default: op_unknown(op); break; ! 126: } ! 127: return (0); ! 128: } ! 129: ! 130: sequence(type, len, last) ! 131: int type, len, last; ! 132: { ! 133: switch (type) ! 134: { ! 135: case sequenceAdaptivePixelVector: seq_adaptivepixel(len); break; ! 136: case sequenceComment: seq_comment(len); break; ! 137: case sequenceCompressedPixelVector: seq_compressedpixel(len); break; ! 138: case sequenceContinued: seq_continued(len, last); break; ! 139: case sequenceIdentifier: seq_identifier(len); break; ! 140: case sequenceInsertFile: seq_insertfile(len); break; ! 141: case sequenceInteger: seq_integer(len); break; ! 142: case sequenceLargeVector: seq_largevector(len); break; ! 143: case sequencePackedPixelVector: seq_packedpixel(len); break; ! 144: case sequenceRational: seq_rational(len); break; ! 145: case sequenceString: seq_string(len); break; ! 146: default: seq_unknown(type, len); break; ! 147: } ! 148: } ! 149: ! 150: #else ! 151: operator(op) ! 152: int op; ! 153: { ! 154: switch (op) ! 155: { ! 156: case OP_makevec: ! 157: fprintf(stderr, "op_makevec\n"); ! 158: op_makevec(); ! 159: break; ! 160: case OP_do: ! 161: fprintf(stderr, "op_do\n"); ! 162: op_do(); ! 163: break; ! 164: case OP_pop: ! 165: fprintf(stderr, "op_pop\n"); ! 166: op_pop(); ! 167: break; ! 168: case OP_copy: ! 169: fprintf(stderr, "op_copy\n"); ! 170: op_copy(); ! 171: break; ! 172: case OP_dup: ! 173: fprintf(stderr, "op_dup\n"); ! 174: op_dup(); ! 175: break; ! 176: case OP_roll: ! 177: fprintf(stderr, "op_roll\n"); ! 178: op_roll(); ! 179: break; ! 180: case OP_exch: ! 181: fprintf(stderr, "op_exch\n"); ! 182: op_exch(); ! 183: break; ! 184: case OP_nop: ! 185: fprintf(stderr, "op_nop\n"); ! 186: op_nop(); ! 187: break; ! 188: case OP_translate: ! 189: fprintf(stderr, "op_translate\n"); ! 190: op_translate(); ! 191: break; ! 192: case OP_rotate: ! 193: fprintf(stderr, "op_rotate\n"); ! 194: op_rotate(); ! 195: break; ! 196: case OP_scale: ! 197: fprintf(stderr, "op_scale\n"); ! 198: op_scale(); ! 199: break; ! 200: case OP_scale2: ! 201: fprintf(stderr, "op_scale2\n"); ! 202: op_scale2(); ! 203: break; ! 204: case OP_concat: ! 205: fprintf(stderr, "op_concat\n"); ! 206: op_concat(); ! 207: break; ! 208: case OP_makepixelarray: ! 209: fprintf(stderr, "op_makepixelarray\n"); ! 210: op_makepixelarray(); ! 211: break; ! 212: case OP_extractpixelarray: ! 213: fprintf(stderr, "op_extractpixelarray\n"); ! 214: op_extractpixelarray(); ! 215: break; ! 216: case OP_finddecompressor: ! 217: fprintf(stderr, "op_finddecompressor\n"); ! 218: op_finddecompressor(); ! 219: break; ! 220: case OP_makegray: ! 221: fprintf(stderr, "op_makegray\n"); ! 222: op_makegray(); ! 223: break; ! 224: case OP_findcolor: ! 225: fprintf(stderr, "op_findcolor\n"); ! 226: op_findcolor(); ! 227: break; ! 228: case OP_findcoloroperator: ! 229: fprintf(stderr, "op_findcoloroperator\n"); ! 230: op_findcoloroperator(); ! 231: break; ! 232: case OP_findcolormodeloperator: ! 233: fprintf(stderr, "op_findcolormodeloperator\n"); ! 234: op_findcolormodeloperator(); ! 235: break; ! 236: case OP_beginBlock: ! 237: fprintf(stderr, "op_beginblock\n"); ! 238: op_beginblock(); ! 239: break; ! 240: case OP_endBlock: ! 241: fprintf(stderr, "op_endblock\n"); ! 242: op_endblock(); ! 243: return(1); ! 244: default: ! 245: fprintf(stderr, "op_unknown\n"); ! 246: op_unknown(op); ! 247: break; ! 248: } ! 249: return (0); ! 250: } ! 251: ! 252: sequence(type, len, last) ! 253: int type, len, last; ! 254: { ! 255: switch (type) ! 256: { ! 257: case sequenceAdaptivePixelVector: ! 258: fprintf(stderr, "seq_adaptivepixel\n"); ! 259: seq_adaptivepixel(len); ! 260: break; ! 261: case sequenceComment: ! 262: fprintf(stderr, "seq_comment\n"); ! 263: seq_comment(len); ! 264: break; ! 265: case sequenceCompressedPixelVector: ! 266: fprintf(stderr, "seq_compressedpixel\n"); ! 267: seq_compressedpixel(len); ! 268: break; ! 269: case sequenceContinued: ! 270: fprintf(stderr, "seq_continued\n"); ! 271: seq_continued(len, last); ! 272: break; ! 273: case sequenceIdentifier: ! 274: fprintf(stderr, "seq_identifier\n"); ! 275: seq_identifier(len); ! 276: break; ! 277: case sequenceInsertFile: ! 278: fprintf(stderr, "seq_insertfile\n"); ! 279: seq_insertfile(len); ! 280: break; ! 281: case sequenceInteger: ! 282: fprintf(stderr, "seq_integer\n"); ! 283: seq_integer(len); ! 284: break; ! 285: case sequenceLargeVector: ! 286: fprintf(stderr, "seq_largevector\n"); ! 287: seq_largevector(len); ! 288: break; ! 289: case sequencePackedPixelVector: ! 290: fprintf(stderr, "seq_packedpixel\n"); ! 291: seq_packedpixel(len); ! 292: break; ! 293: case sequenceRational: ! 294: fprintf(stderr, "seq_rational\n"); ! 295: seq_rational(len); ! 296: break; ! 297: case sequenceString: ! 298: fprintf(stderr, "seq_string\n"); ! 299: seq_string(len); ! 300: break; ! 301: default: ! 302: fprintf(stderr, "seq_unknown\n"); ! 303: seq_unknown(type, len); ! 304: break; ! 305: } ! 306: } ! 307: ! 308: #endif ! 309: ! 310: /* Change Log ! 311: * ! 312: * K. Knox, 28-Mar-85 18:26:50, Created first version. ! 313: * ! 314: * ! 315: * ! 316: */ ! 317: ! 318: ! 319: ! 320: ! 321: ! 322:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.