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