|
|
1.1 ! root 1: /* stackres.c ! 2: * ! 3: * Copyright (c) 1984, 1985, 1986 Xerox Corp. ! 4: * ! 5: * Module: stackres ! 6: * Owner: knox ! 7: * stdout: text description ! 8: * args: ! 9: * name (name of the input res file) ! 10: * ! 11: * Description: ! 12: * This program reads an RES file, executes it and produces a ! 13: * text description file. The name of the RES file is the ! 14: * the first argument of the command line. The text description ! 15: * written to the standard output describes the results left ! 16: * on the stack after the image has been executed. ! 17: * ! 18: * The image raster will be read from the file "name.res", ! 19: * where name is read from the command line. The ".res" ! 20: * extension will not be added if it is already present in the ! 21: * name. ! 22: * ! 23: * HISTORY ! 24: * ! 25: * ! 26: */ ! 27: ! 28: #include "stack.h" ! 29: #include <stdio.h> ! 30: #include <strings.h> ! 31: ! 32: extern char *malloc(); ! 33: ! 34: #define err0 "readres: No input RES file name!\n" ! 35: #define err1 "readres: RES file could not be found, %s!\n" ! 36: ! 37: FILE *fpin; ! 38: int fdout; ! 39: ! 40: main(argc, argv) ! 41: int argc; ! 42: char *argv[]; ! 43: { ! 44: getargs(argc, argv); ! 45: parse(fpin); ! 46: writedata(); ! 47: exit(0); ! 48: } ! 49: ! 50: getargs(argc, argv) ! 51: int argc; ! 52: char *argv[]; ! 53: { ! 54: char *filename; ! 55: ! 56: if (argc < 2) { ! 57: fprintf(stderr, err0); ! 58: exit(2); ! 59: } ! 60: ! 61: /* Open input RES file. */ ! 62: fdout = 1; ! 63: filename = (char *) malloc((unsigned) strlen(argv[1])+1+strlen(".res")); ! 64: (void) strcpy(filename, argv[1]); ! 65: ! 66: if (strcmp(".res", rindex(filename, '.')) != 0) ! 67: (void) strcat(filename, ".res"); ! 68: ! 69: fpin = fopen(filename, "r"); ! 70: ! 71: if (fpin == NULL) { ! 72: fprintf(stderr, err1, filename); ! 73: exit(2); ! 74: } ! 75: } ! 76: ! 77: ! 78: ! 79: writedata() ! 80: { ! 81: /* remove everything from the stack. */ ! 82: int n; ! 83: unsigned char *ptr; ! 84: n = 0; ! 85: while (!stackempty()) ! 86: { ! 87: n++; ! 88: ptr = pop(0); ! 89: printitem(ptr, n); ! 90: printf("\n"); ! 91: free((char *) ptr); ! 92: } ! 93: } ! 94: ! 95: printitem(ptr, element) ! 96: unsigned char *ptr; ! 97: int element; ! 98: { ! 99: printf("Element: %d\n", element); ! 100: printf("Length: %d\n", getlength(ptr)); ! 101: switch (gettype(ptr)) ! 102: { ! 103: case type_number: printnumber(ptr); break; ! 104: case type_string: printstring(ptr); break; ! 105: case type_vector: printvector(ptr); break; ! 106: case type_operator: printoperator(ptr); break; ! 107: case type_color: printcolor(ptr); break; ! 108: case type_pixelarray: printpixelarray(ptr); break; ! 109: case type_transformation: printtransformation(ptr); break; ! 110: case type_integers: printintegers(ptr); break; ! 111: default: printf("Type: unknown\n"); break; ! 112: } ! 113: } ! 114: ! 115: printnumber(ptr) ! 116: unsigned char *ptr; ! 117: { ! 118: printf("Type: number\n"); ! 119: switch (getsubtype(ptr)) ! 120: { ! 121: case subtype_integer: printinteger(ptr); break; ! 122: case subtype_rational: printrational(ptr); break; ! 123: default: printf("Subtype: unknown\n"); break; ! 124: } ! 125: } ! 126: ! 127: printinteger(ptr) ! 128: unsigned char *ptr; ! 129: { ! 130: printf("Subtype: integer\n"); ! 131: printf("Value: %d\n", getint(ptr)); ! 132: } ! 133: ! 134: printrational(ptr) ! 135: unsigned char *ptr; ! 136: { ! 137: printf("Subtype: rational\n"); ! 138: printf("Value: %f/%f\n", getnumerator(ptr), getdenominator(ptr)); ! 139: } ! 140: ! 141: printstring(ptr) ! 142: unsigned char *ptr; ! 143: { ! 144: printf("Type: string\n"); ! 145: switch (getsubtype(ptr)) ! 146: { ! 147: case subtype_identifier: printidentifier(ptr); break; ! 148: case subtype_string: printsubstring(ptr); break; ! 149: default: printf("Subtype: unknown\n"); break; ! 150: } ! 151: } ! 152: ! 153: printidentifier(ptr) ! 154: unsigned char *ptr; ! 155: { ! 156: printf("Subtype: identifier\n"); ! 157: printf("Identifier: %s\n", getstring(ptr, subtype_identifier)); ! 158: } ! 159: ! 160: printsubstring(ptr) ! 161: unsigned char *ptr; ! 162: { ! 163: printf("Subtype: string\n"); ! 164: printf("String: %s\n", getstring(ptr, subtype_string)); ! 165: } ! 166: ! 167: printvector(ptr) ! 168: unsigned char *ptr; ! 169: { ! 170: printf("Type: vector\n"); ! 171: switch (getsubtype(ptr)) ! 172: { ! 173: case subtype_general: printvec(ptr, "general"); break; ! 174: case subtype_integers: printvec(ptr, "integers"); break; ! 175: case subtype_samples: printvec(ptr, "samples"); break; ! 176: default: printf("Subtype: unknown\n"); break; ! 177: } ! 178: } ! 179: ! 180: printvec(ptr, string) ! 181: unsigned char *ptr; ! 182: char *string; ! 183: { ! 184: int n, depth; ! 185: unsigned char **array; ! 186: ! 187: depth = getdepth(ptr); ! 188: printf("Subtype: %s\n", string); ! 189: printf("Depth: %d\n", depth); ! 190: array = getvector(ptr); ! 191: ! 192: for (n=0; n < depth; n++) ! 193: printitem(array[n], n); ! 194: ! 195: free((char *) array); ! 196: } ! 197: ! 198: printoperator(ptr) ! 199: unsigned char *ptr; ! 200: { ! 201: printf("Type: operator\n"); ! 202: switch (getsubtype(ptr)) ! 203: { ! 204: case subtype_decompressop: printop(ptr, "decompressop"); break; ! 205: case subtype_colorop: printop(ptr, "colorop"); break; ! 206: case subtype_colormodelop: printop(ptr, "colormodelop"); break; ! 207: default: printf("Subtype: unknown\n"); break; ! 208: } ! 209: } ! 210: ! 211: printop(ptr, string) ! 212: unsigned char *ptr; ! 213: char *string; ! 214: { ! 215: int n, depth; ! 216: unsigned char **array; ! 217: depth = getdepth(ptr); ! 218: printf("Subtype: %s\n", string); ! 219: printf("Depth: %d\n", depth); ! 220: array = getoperator(ptr); ! 221: ! 222: for (n=0; n < depth; n++) ! 223: printitem(array[n], n); ! 224: ! 225: free((char *) array); ! 226: } ! 227: ! 228: printcolor(ptr) ! 229: unsigned char *ptr; ! 230: { ! 231: printf("Type: color\n"); ! 232: switch (getsubtype(ptr)) ! 233: { ! 234: case subtype_value: printcol(ptr, "value"); break; ! 235: case subtype_name: printcol(ptr, "name"); break; ! 236: case subtype_operator: printcol(ptr, "operator"); break; ! 237: default: printf("Subtype: unknown\n"); break; ! 238: } ! 239: } ! 240: ! 241: printcol(ptr, string) ! 242: unsigned char *ptr; ! 243: char *string; ! 244: { ! 245: int n, depth; ! 246: unsigned char **array; ! 247: depth = getdepth(ptr); ! 248: printf("Subtype: %s\n", string); ! 249: printf("Depth: %d\n", depth); ! 250: array = getcolor(ptr); ! 251: for (n=0; n < depth; n++) printitem(array[n], n); ! 252: free((char *) array); ! 253: } ! 254: ! 255: printpixelarray(ptr) ! 256: unsigned char *ptr; ! 257: { ! 258: int n, depth; ! 259: unsigned char **array; ! 260: depth = getdepth(ptr); ! 261: printf("Type: pixelarray\n"); ! 262: printf("Depth: %d\n", depth); ! 263: array = getcolor(ptr); ! 264: ! 265: for (n=0; n < depth; n++) ! 266: printitem(array[n], n); ! 267: ! 268: free((char *) array); ! 269: } ! 270: ! 271: printtransformation(ptr) ! 272: unsigned char *ptr; ! 273: { ! 274: double *array; ! 275: array = gettransformation(ptr); ! 276: printf("Type: transformation\n"); ! 277: printf("A: %f\n", array[0]); ! 278: printf("B: %f\n", array[1]); ! 279: printf("C: %f\n", array[2]); ! 280: printf("D: %f\n", array[3]); ! 281: printf("E: %f\n", array[4]); ! 282: printf("F: %f\n", array[5]); ! 283: free((char *) array); ! 284: } ! 285: ! 286: printintegers(ptr) ! 287: unsigned char *ptr; ! 288: { ! 289: printf("Type: integers\n"); ! 290: printf("Bytes/Integer: %d\n", getbytesPerInteger(ptr)); ! 291: printf("Bytepos: %ld\n", getbytepos(ptr)); ! 292: printf("ByteLength: %ld\n", getbytelength(ptr)); ! 293: } ! 294: ! 295: /* Change Log ! 296: * ! 297: * K. Knox, 28-Mar-85 15:04:13, Created first version. ! 298: * ! 299: * ! 300: * ! 301: */ ! 302: ! 303: ! 304: ! 305:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.