|
|
1.1 root 1: /* parse.c
2: *
3: * Copyright (c) 1984, 1985 Xerox Corp.
4: *
5: * Items are left on the stack when execution finishes.
6: *
7: * pop() can be used to remove items from the stack.
8: * Please remember to free() any item you pop off the stack.
9: *
10: *
11: * HISTORY
12: *
13: * K. Knox, 28-Mar-85 18:26:50, Created first version.
14: *
15: */
16:
17: #include <stdio.h>
18: #include <iptokens.h>
19:
20: FILE *fp;
21: long filepos = 0;
22:
23:
24: #define len_IP_header 40
25:
26: #define token_id 0340
27: #define token_mask 0037
28: #define token_short_op 0200
29: #define token_long_op 0240
30: #define token_short_seq 0300
31: #define token_long_seq 0340
32:
33: parse(fpin)
34: FILE *fpin;
35: {
36: /* variables */
37: int c, len;
38: char string[len_IP_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_IP_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: (void) 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_makeveclu: op_makeveclu(); break;
105: case OP_rotate: op_rotate(); break;
106: case OP_scale: op_scale(); break;
107: case OP_scale2: op_scale2(); break;
108: case OP_concat: op_concat(); break;
109: case OP_beginBlock: op_beginblock(); break;
110: case OP_endBlock: op_endblock(); return(1);
111: case OP_beginBody: op_beginbody(); break;
112: case OP_endBody: op_endbody(); break;
113: default: op_unknown(op); break;
114: }
115: return (0);
116: }
117:
118: sequence(type, len, last)
119: int type, len, last;
120: {
121: switch (type)
122: {
123: case sequenceComment: seq_comment(len); break;
124: case sequenceIdentifier: seq_identifier(len); break;
125: case sequenceInteger: seq_integer(len); break;
126: case sequenceLargeVector: seq_largevector(len); break;
127: case sequenceRational: seq_rational(len); break;
128: case sequenceString: seq_string(len); break;
129: default: seq_unknown(type, len); break;
130: }
131: }
132:
133: #else
134: operator(op)
135: int op;
136: {
137: switch (op)
138: {
139: case OP_makevec:
140: fprintf(stderr, "op_makevec\n");
141: op_makevec();
142: break;
143: case OP_do:
144: fprintf(stderr, "op_do\n");
145: op_do();
146: break;
147: case OP_pop:
148: fprintf(stderr, "op_pop\n");
149: op_pop();
150: break;
151: case OP_copy:
152: fprintf(stderr, "op_copy\n");
153: op_copy();
154: break;
155: case OP_dup:
156: fprintf(stderr, "op_dup\n");
157: op_dup();
158: break;
159: case OP_roll:
160: fprintf(stderr, "op_roll\n");
161: op_roll();
162: break;
163: case OP_exch:
164: fprintf(stderr, "op_exch\n");
165: op_exch();
166: break;
167: case OP_nop:
168: fprintf(stderr, "op_nop\n");
169: op_nop();
170: break;
171: case OP_translate:
172: fprintf(stderr, "op_translate\n");
173: op_translate();
174: break;
175: case OP_rotate:
176: fprintf(stderr, "op_rotate\n");
177: op_rotate();
178: break;
179: case OP_scale:
180: fprintf(stderr, "op_scale\n");
181: op_scale();
182: break;
183: case OP_scale2:
184: fprintf(stderr, "op_scale2\n");
185: op_scale2();
186: break;
187: case OP_concat:
188: fprintf(stderr, "op_concat\n");
189: op_concat();
190: break;
191: case OP_makepixelarray:
192: fprintf(stderr, "op_makepixelarray\n");
193: op_makepixelarray();
194: break;
195: case OP_extractpixelarray:
196: fprintf(stderr, "op_extractpixelarray\n");
197: op_extractpixelarray();
198: break;
199: case OP_finddecompressor:
200: fprintf(stderr, "op_finddecompressor\n");
201: op_finddecompressor();
202: break;
203: case OP_makegray:
204: fprintf(stderr, "op_makegray\n");
205: op_makegray();
206: break;
207: case OP_findcolor:
208: fprintf(stderr, "op_findcolor\n");
209: op_findcolor();
210: break;
211: case OP_findcoloroperator:
212: fprintf(stderr, "op_findcoloroperator\n");
213: op_findcoloroperator();
214: break;
215: case OP_findcolormodeloperator:
216: fprintf(stderr, "op_findcolormodeloperator\n");
217: op_findcolormodeloperator();
218: break;
219: case OP_beginBlock:
220: fprintf(stderr, "op_beginblock\n");
221: op_beginblock();
222: break;
223: case OP_endBlock:
224: fprintf(stderr, "op_endblock\n");
225: op_endblock();
226: return(1);
227: case OP_beginBody: ; break;
228: case OP_endBody: ; break;
229: default:
230: fprintf(stderr, "op_unknown\n");
231: op_unknown(op);
232: break;
233: }
234: return (0);
235: }
236:
237: sequence(type, len, last)
238: int type, len, last;
239: {
240: switch (type)
241: {
242: case sequenceAdaptivePixelVector:
243: fprintf(stderr, "seq_adaptivepixel\n");
244: seq_adaptivepixel(len);
245: break;
246: case sequenceComment:
247: fprintf(stderr, "seq_comment\n");
248: seq_comment(len);
249: break;
250: case sequenceCompressedPixelVector:
251: fprintf(stderr, "seq_compressedpixel\n");
252: seq_compressedpixel(len);
253: break;
254: case sequenceContinued:
255: fprintf(stderr, "seq_continued\n");
256: break;
257: case sequenceIdentifier:
258: fprintf(stderr, "seq_identifier\n");
259: seq_identifier(len);
260: break;
261: case sequenceInsertFile:
262: fprintf(stderr, "seq_insertfile\n");
263: seq_insertfile(len);
264: break;
265: case sequenceInteger:
266: fprintf(stderr, "seq_integer\n");
267: seq_integer(len);
268: break;
269: case sequenceLargeVector:
270: fprintf(stderr, "seq_largevector\n");
271: seq_largevector(len);
272: break;
273: case sequencePackedPixelVector:
274: fprintf(stderr, "seq_packedpixel\n");
275: seq_packedpixel(len);
276: break;
277: case sequenceRational:
278: fprintf(stderr, "seq_rational\n");
279: seq_rational(len);
280: break;
281: case sequenceString:
282: fprintf(stderr, "seq_string\n");
283: seq_string(len);
284: break;
285: default:
286: fprintf(stderr, "seq_unknown\n");
287: seq_unknown(type, len);
288: break;
289: }
290: }
291:
292: #endif
293:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.