|
|
BSD 4.3
/* stackres.c
*
* Copyright (c) 1984, 1985 Xerox Corp.
*
* Module: stackres
* Owner: knox
* stdout: text description
* args:
* name (name of the input res file)
*
* Description:
* This program reads an RES file, executes it and produces a
* text description file. The name of the RES file is the
* the first argument of the command line. The text description
* written to the standard output describes the results left
* on the stack after the image has been executed.
*
* The image raster will be read from the file "name.res",
* where name is read from the command line. The ".res"
* extension will not be added if it is already present in the
* name.
*
*
*/
#include "stack.h"
#include <stdio.h>
extern unsigned char *malloc();
#define err0 "readres: No input RES file name!\n"
#define err1 "readres: RES file could not be found, %s!\n"
FILE *fpin;
int fdout;
main(argc, argv)
int argc;
char *argv[];
{
getargs(argc, argv);
parse(fpin);
writedata();
exit(0);
}
getargs(argc, argv)
int argc;
char *argv[];
{
int n;
char *filename;
if (argc < 2) error(err0);
/* Open input RES file. */
fdout = 1;
filename = (char *) malloc(strlen(argv[1])+1+strlen(".res"));
strcpy(filename, argv[1]);
if (strcmp(".res", rindex(filename, '.')) != 0) strcat(filename, ".res");
fpin = fopen(filename, "r");
if (fpin == NULL) error(err1, filename);
}
writedata()
{
/* remove everything from the stack. */
int n;
unsigned char *ptr;
n = 0;
while (!stackempty())
{
n++;
ptr = pop(0);
printitem(ptr, n);
printf("\n");
free(ptr);
}
}
printitem(ptr, element)
unsigned char *ptr;
int element;
{
char *type, *subtype;
printf("Element: %d\n", element);
printf("Length: %d\n", getlength(ptr));
switch (gettype(ptr))
{
case type_number: printnumber(ptr); break;
case type_string: printstring(ptr); break;
case type_vector: printvector(ptr); break;
case type_operator: printoperator(ptr); break;
case type_color: printcolor(ptr); break;
case type_pixelarray: printpixelarray(ptr); break;
case type_transformation: printtransformation(ptr); break;
case type_integers: printintegers(ptr); break;
default: printf("Type: unknown\n"); break;
}
}
printnumber(ptr)
unsigned char *ptr;
{
printf("Type: number\n");
switch (getsubtype(ptr))
{
case subtype_integer: printinteger(ptr); break;
case subtype_rational: printrational(ptr); break;
default: printf("Subtype: unknown\n"); break;
}
}
printinteger(ptr)
unsigned char *ptr;
{
printf("Subtype: integer\n");
printf("Value: %d\n", getint(ptr));
}
printrational(ptr)
unsigned char *ptr;
{
printf("Subtype: rational\n");
printf("Value: %f/%f\n", getnumerator(ptr), getdenominator(ptr));
}
printstring(ptr)
unsigned char *ptr;
{
printf("Type: string\n");
switch (getsubtype(ptr))
{
case subtype_identifier: printidentifier(ptr); break;
case subtype_string: printsubstring(ptr); break;
default: printf("Subtype: unknown\n"); break;
}
}
printidentifier(ptr)
unsigned char *ptr;
{
printf("Subtype: identifier\n");
printf("Identifier: %s\n", getstring(ptr, subtype_identifier));
}
printsubstring(ptr)
unsigned char *ptr;
{
printf("Subtype: string\n");
printf("String: %s\n", getstring(ptr, subtype_string));
}
printvector(ptr)
unsigned char *ptr;
{
printf("Type: vector\n");
switch (getsubtype(ptr))
{
case subtype_general: printvec(ptr, "general"); break;
case subtype_integers: printvec(ptr, "integers"); break;
case subtype_samples: printvec(ptr, "samples"); break;
default: printf("Subtype: unknown\n"); break;
}
}
printvec(ptr, string)
unsigned char *ptr;
char *string;
{
int n, depth;
unsigned char **array;
depth = getdepth(ptr);
printf("Subtype: %s\n", string);
printf("Depth: %d\n", depth);
array = getvector(ptr);
for (n=0; n < depth; n++) printitem(array[n], n);
free(array);
}
printoperator(ptr)
unsigned char *ptr;
{
printf("Type: operator\n");
switch (getsubtype(ptr))
{
case subtype_decompressop: printop(ptr, "decompressop"); break;
case subtype_colorop: printop(ptr, "colorop"); break;
case subtype_colormodelop: printop(ptr, "colormodelop"); break;
default: printf("Subtype: unknown\n"); break;
}
}
printop(ptr, string)
unsigned char *ptr;
{
int n, depth;
unsigned char **array;
depth = getdepth(ptr);
printf("Subtype: %s\n", string);
printf("Depth: %d\n", depth);
array = getoperator(ptr);
for (n=0; n < depth; n++) printitem(array[n], n);
free(array);
}
printcolor(ptr)
unsigned char *ptr;
{
printf("Type: color\n");
switch (getsubtype(ptr))
{
case subtype_value: printcol(ptr, "value"); break;
case subtype_name: printcol(ptr, "name"); break;
case subtype_operator: printcol(ptr, "operator"); break;
default: printf("Subtype: unknown\n"); break;
}
}
printcol(ptr, string)
unsigned char *ptr;
{
int n, depth;
unsigned char **array;
depth = getdepth(ptr);
printf("Subtype: %s\n", string);
printf("Depth: %d\n", depth);
array = getcolor(ptr);
for (n=0; n < depth; n++) printitem(array[n], n);
free(array);
}
printpixelarray(ptr)
unsigned char *ptr;
{
int n, depth;
unsigned char **array;
depth = getdepth(ptr);
printf("Type: pixelarray\n");
printf("Depth: %d\n", depth);
array = getcolor(ptr);
for (n=0; n < depth; n++) printitem(array[n], n);
free(array);
}
printtransformation(ptr)
unsigned char *ptr;
{
double *array;
array = gettransformation(ptr);
printf("Type: transformation\n");
printf("A: %f\n", array[0]);
printf("B: %f\n", array[1]);
printf("C: %f\n", array[2]);
printf("D: %f\n", array[3]);
printf("E: %f\n", array[4]);
printf("F: %f\n", array[5]);
free(array);
}
printintegers(ptr)
unsigned char *ptr;
{
printf("Type: integers\n");
printf("Bytes/Integer: %d\n", getbytesPerInteger(ptr));
printf("Bytepos: %ld\n", getbytepos(ptr));
printf("ByteLength: %ld\n", getbytelength(ptr));
}
/* Change Log
*
* K. Knox, 28-Mar-85 15:04:13, Created first version.
*
*
*
*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.