/* plotprint.c : Print Unix Plot files in english By Joel Swank April, 1988 */ #include #include /************************************************* Parameter output routine definitions *************************************************/ #define put_xy(x,y) printf(" %ld,%ld",x,y); #define put_int(x) printf(" %ld",x); #define put_txt(x) printf(" %s\n",x); FILE *input; short longflag; main(argc,argv) int argc; char *argv[]; { struct IntuiMessage *msg; int cmd, i; long x,y, r; long x1,y1,x2,y2; char textbuf[100], *p; longflag = 1; /************************************************* Interrogate command line *************************************************/ if (argc == 1) { fprintf(stderr,"Usage:plotprint [-l] plotfile\n"); exit(2); } while (*argv[1] == '-') { p = (char *) &*argv[1]; p++; /* point to the option chars */ switch (*p) { case 'l': /* x size value */ longflag =0; break; default: fprintf(stderr,"plotprint:Invalid option %s\n",argv[1]); exit(27); } argc--; argv++; } if (argc == 1 || argc >2) { fprintf(stderr,"plotprint:Exactly One filename required\n"); exit(2); } if ((input = fopen(argv[1],"r")) == NULL) { fprintf(stderr,"plotprint: %s: open failed\n",argv[1]); exit(3); } /************************************************* MAIN printing loop *************************************************/ while ((cmd = getc(input)) != EOF) { switch (cmd) { case 'm': /* move x,y */ (longflag) ? putchar('m') : fputs("move",stdout); get_xy(&x,&y); put_xy(x,y); putchar('\n'); break; case 'n': /* draw x,y */ (longflag) ? putchar('n') : fputs("cont",stdout); get_xy(&x,&y); put_xy(x,y); putchar('\n'); break; case 'p': /* point x,y */ (longflag) ? putchar('p') : fputs("point",stdout); get_xy(&x,&y); put_xy(x,y); putchar('\n'); break; case 'l': /* line xs,ys, xe,ye */ (longflag) ? putchar('l') : fputs("line",stdout); get_xy(&x,&y); put_xy(x,y); putchar(','); get_xy(&x,&y); put_xy(x,y); putchar('\n'); break; case 'a': /* arc xc,yc, xs,ys, xe,ye */ (longflag) ? putchar('a') : fputs("arc",stdout); get_xy(&x,&y); /* get center */ put_xy(x,y); putchar(','); get_xy(&x,&y); /* get start point */ put_xy(x,y); putchar(','); get_xy(&x,&y); /* get end point */ put_xy(x,y); putchar('\n'); break; case 't': /* Text string\n */ (longflag) ? putchar('t') : fputs("label",stdout); get_txt(textbuf); put_txt(textbuf); break; case 'c': /* circle xc,yc, r */ (longflag) ? putchar('c') : fputs("circle",stdout); get_xy(&x,&y); put_xy(x,y); putchar(','); get_int(&r); put_int(r); putchar('\n'); break; case 'f': /* linemode string\n */ (longflag) ? putchar('f') : fputs("linemod",stdout); get_txt(textbuf); put_txt(textbuf); break; case 's': /* space xlo,ylo, xhi,yhi */ (longflag) ? putchar('s') : fputs("space",stdout); get_xy(&x,&y); put_xy(x,y); putchar(','); get_xy(&x,&y); put_xy(x,y); putchar('\n'); break; case 'e': /* erase */ (longflag) ? putchar('e') : fputs("erase",stdout); putchar('\n'); break; default: printf("Invalid Command character:%c\n",cmd); } } } /************************************************* Parameter input routines *************************************************/ /* * input a pair of 16 bit ints, scale and clip to screen, * and return them as longs * */ get_xy(x,y) register long *x, *y; { get_int(x); get_int(y); } /* * input a 16 bit int and return as a long */ get_int(num) long *num; { register short hi, lo; lo = getc(input); hi = (getc(input)) << 8; *num = (long) lo + hi; } /* * input a text string delinited by newline, * return to buffer delimited by a null. */ get_txt(str) char *str; { register int cmd; while ((cmd = getc(input)) != '\n') *str++ = cmd; *str = '\0'; }