BSD 4_4_Lite2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 8 Sep 1986 06:11:49 +0000 (22:11 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 8 Sep 1986 06:11:49 +0000 (22:11 -0800)
Work on file usr/src/contrib/dipress/src/bin/ipmetrics/parse.c

Synthesized-from: CSRG/cd3/4.4BSD-Lite2

usr/src/contrib/dipress/src/bin/ipmetrics/parse.c [new file with mode: 0644]

diff --git a/usr/src/contrib/dipress/src/bin/ipmetrics/parse.c b/usr/src/contrib/dipress/src/bin/ipmetrics/parse.c
new file mode 100644 (file)
index 0000000..d1d9fcd
--- /dev/null
@@ -0,0 +1,293 @@
+/* parse.c
+ *
+ * Copyright (c) 1984, 1985 Xerox Corp.
+ *
+ *  Items are left on the stack when execution finishes.
+ *
+ *  pop() can be used to remove items from the stack.
+ *  Please remember to free() any item you pop off the stack.
+ *
+ *
+ * HISTORY
+ *
+ * K. Knox, 28-Mar-85 18:26:50, Created first version.
+ *
+ */
+
+#include <stdio.h>
+#include <iptokens.h>
+
+FILE *fp;
+long filepos = 0;
+
+
+#define len_IP_header 40
+
+#define token_id          0340
+#define token_mask        0037
+#define token_short_op    0200
+#define token_long_op     0240
+#define token_short_seq   0300
+#define token_long_seq    0340
+
+parse(fpin)
+  FILE *fpin;
+  {
+  /* variables */
+  int c, len;
+  char  string[len_IP_header+1],
+       *ptr;
+  int last = 0;
+  int seq,
+      hlen;
+
+  fp = fpin;
+
+  /* get the header */
+  for (hlen = 0, ptr = string; hlen < len_IP_header; hlen++)
+    if ( (*ptr++ = getc(fp)) == ' ' )
+       break;
+
+  *ptr = '\0';
+
+  header(string);
+
+  /* Analyze every token in the file. */
+  while ((c = getc(fp)) != EOF)
+    {
+    filepos = ftell(fp)-1;
+    switch (c & token_id)
+      {
+      case token_short_op:        /* Only allowed short op is "nop". */
+        len = c & token_mask;
+        (void) operator(len);
+       last = 0;
+        break;
+      case token_long_op:
+        len = getc(fp)+((c & token_mask) << 8);
+        if (operator(len)) return;      /* Quit when you hit endBlock. */
+       last = 0;
+        break;
+      case token_short_seq:
+        len = getc(fp);
+       seq = c & token_mask;
+        sequence(seq, len, last);
+       if (seq != sequenceContinued) last = seq;
+        break;
+      case token_long_seq:
+        len = getc(fp) << 16;
+        len = len+(getc(fp) << 8);
+        len = len+getc(fp);
+       seq = c & token_mask;
+        sequence(seq, len, last);
+       if (seq != sequenceContinued) last = seq;
+        break;
+      default:
+        shortnum((c << 8)+getc(fp)-INTEGER_ZERO);
+       last = 0;
+        break;
+      }
+    }
+  /* Shouldn't get here if file ends properly! */
+  fprintf(stderr, "(%d) Unexpected EOF\n", filepos);
+  exit(2);
+  }
+
+
+#ifndef debug
+operator(op)
+  int op;
+  {
+  switch (op)
+    {
+    case OP_makevec:                 op_makevec();                break;
+    case OP_makeveclu:               op_makeveclu();             break;
+    case OP_rotate:                  op_rotate();                 break;
+    case OP_scale:                   op_scale();                  break;
+    case OP_scale2:                  op_scale2();                 break;
+    case OP_concat:                  op_concat();                 break;
+    case OP_beginBlock:              op_beginblock();             break;
+    case OP_endBlock:                op_endblock();               return(1);
+    case OP_beginBody:              op_beginbody();              break;
+    case OP_endBody:                op_endbody();                break;
+    default:                         op_unknown(op);              break;
+    }
+  return (0);
+  }
+
+sequence(type, len, last)
+  int type, len, last;
+  {
+  switch (type)
+    {
+    case sequenceComment:               seq_comment(len);           break;
+    case sequenceIdentifier:            seq_identifier(len);        break;
+    case sequenceInteger:               seq_integer(len);           break;
+    case sequenceLargeVector:           seq_largevector(len);       break;
+    case sequenceRational:              seq_rational(len);          break;
+    case sequenceString:                seq_string(len);            break;
+    default:                            seq_unknown(type, len);     break;
+    }
+  }
+
+#else
+operator(op)
+  int op;
+  {
+  switch (op)
+    {
+    case OP_makevec:
+      fprintf(stderr, "op_makevec\n");
+      op_makevec();
+      break;
+    case OP_do:
+      fprintf(stderr, "op_do\n");
+      op_do();
+      break;
+    case OP_pop:
+      fprintf(stderr, "op_pop\n");
+      op_pop();
+      break;
+    case OP_copy:
+      fprintf(stderr, "op_copy\n");
+      op_copy();
+      break;
+    case OP_dup:
+      fprintf(stderr, "op_dup\n");
+      op_dup();
+      break;
+    case OP_roll:
+      fprintf(stderr, "op_roll\n");
+      op_roll();
+      break;
+    case OP_exch:
+      fprintf(stderr, "op_exch\n");
+      op_exch();
+      break;
+    case OP_nop:
+      fprintf(stderr, "op_nop\n");
+      op_nop();
+      break;
+    case OP_translate:
+      fprintf(stderr, "op_translate\n");
+      op_translate();
+      break;
+    case OP_rotate:
+      fprintf(stderr, "op_rotate\n");
+      op_rotate();
+      break;
+    case OP_scale:
+      fprintf(stderr, "op_scale\n");
+      op_scale();
+      break;
+    case OP_scale2:
+      fprintf(stderr, "op_scale2\n");
+      op_scale2();
+      break;
+    case OP_concat:
+      fprintf(stderr, "op_concat\n");
+      op_concat();
+      break;
+    case OP_makepixelarray:
+      fprintf(stderr, "op_makepixelarray\n");
+      op_makepixelarray();
+      break;
+    case OP_extractpixelarray:
+      fprintf(stderr, "op_extractpixelarray\n");
+      op_extractpixelarray();
+      break;
+    case OP_finddecompressor:
+      fprintf(stderr, "op_finddecompressor\n");
+      op_finddecompressor();
+      break;
+    case OP_makegray:
+      fprintf(stderr, "op_makegray\n");
+      op_makegray();
+      break;
+    case OP_findcolor:
+      fprintf(stderr, "op_findcolor\n");
+      op_findcolor();
+      break;
+    case OP_findcoloroperator:
+      fprintf(stderr, "op_findcoloroperator\n");
+      op_findcoloroperator();
+      break;
+    case OP_findcolormodeloperator:
+      fprintf(stderr, "op_findcolormodeloperator\n");
+      op_findcolormodeloperator();
+      break;
+    case OP_beginBlock:
+      fprintf(stderr, "op_beginblock\n");
+      op_beginblock();
+      break;
+    case OP_endBlock:
+      fprintf(stderr, "op_endblock\n");
+      op_endblock();
+      return(1);
+    case OP_beginBody:              ;                            break;
+    case OP_endBody:                ;                            break;
+    default:
+      fprintf(stderr, "op_unknown\n");
+      op_unknown(op);
+      break;
+    }
+  return (0);
+  }
+
+sequence(type, len, last)
+  int type, len, last;
+  {
+  switch (type)
+    {
+    case sequenceAdaptivePixelVector:
+      fprintf(stderr, "seq_adaptivepixel\n");
+      seq_adaptivepixel(len);
+      break;
+    case sequenceComment:
+      fprintf(stderr, "seq_comment\n");
+      seq_comment(len);
+      break;
+    case sequenceCompressedPixelVector:
+      fprintf(stderr, "seq_compressedpixel\n");
+      seq_compressedpixel(len);
+      break;
+    case sequenceContinued:
+      fprintf(stderr, "seq_continued\n");
+      break;
+    case sequenceIdentifier:
+      fprintf(stderr, "seq_identifier\n");
+      seq_identifier(len);
+      break;
+    case sequenceInsertFile:
+      fprintf(stderr, "seq_insertfile\n");
+      seq_insertfile(len);
+      break;
+    case sequenceInteger:
+      fprintf(stderr, "seq_integer\n");
+      seq_integer(len);
+      break;
+    case sequenceLargeVector:
+      fprintf(stderr, "seq_largevector\n");
+      seq_largevector(len);
+      break;
+    case sequencePackedPixelVector:
+      fprintf(stderr, "seq_packedpixel\n");
+      seq_packedpixel(len);
+      break;
+    case sequenceRational:
+      fprintf(stderr, "seq_rational\n");
+      seq_rational(len);
+      break;
+    case sequenceString:
+      fprintf(stderr, "seq_string\n");
+      seq_string(len);
+      break;
+    default:
+      fprintf(stderr, "seq_unknown\n");
+      seq_unknown(type, len);     
+      break;
+    }
+  }
+
+#endif
+