⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stackres.c

📁 早期freebsd实现
💻 C
字号:
/* stackres.c * * Copyright (c) 1984, 1985, 1986 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. * * HISTORY * * */#include "stack.h"#include <stdio.h>#include <strings.h>extern 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[];  {  char *filename;  if (argc < 2) {	fprintf(stderr, err0);	exit(2);  }   /* Open input RES file. */  fdout = 1;  filename = (char *) malloc((unsigned) strlen(argv[1])+1+strlen(".res"));  (void) strcpy(filename, argv[1]);  if (strcmp(".res", rindex(filename, '.')) != 0)	(void) strcat(filename, ".res");  fpin = fopen(filename, "r");  if (fpin == NULL) {	fprintf(stderr, err1, filename);	exit(2);  }}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((char *) ptr);    }  }printitem(ptr, element)  unsigned char *ptr;  int element;  {  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((char *) 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;  char *string;  {  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((char *) 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;  char *string;  {  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((char *) 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((char *) 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((char *) 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. * * * */    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -