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: */