|
|
1.1 root 1: #include <stdio.h>
2: #include <signal.h>
3: #include <sgtty.h>
4: #include "/usr/jerq/include/jioctl.h"
5: #include "view2d.h"
6:
7: #define PIXMAX 32766
8:
9: struct sgttyb sttybuf, sttysave;
10: char *zflag = "";
11: int shade = 0;
12: int grid = 1;
13: typedef struct Point
14: {
15: int x, y;
16: } Point;
17:
18: short z[4096];
19: double ztime;
20: double fmid, fscale;
21:
22: int zmax = -1000000000, zmin = 1000000000;
23: int nsleep, ntime;
24: int nframes = 0;
25: int period = 5;
26: int floor = -BIG;
27: char *progname;
28: short timewarp;
29: double ts, te;
30: Rd2d rd;
31:
32: main(argc, argv)
33: char **argv;
34: {
35: char buf[512];
36: int zc, scale, m, i;
37: short ragnorok, dim;
38: short *nz, *p, *q;
39: int fd;
40: int cv, tmin, tmax;
41: short nx, ny, fru, frv;
42: char *s;
43: char **av = argv;
44: int ac = argc;
45: extern char *getenv();
46: int magic[4];
47:
48: timewarp = 0;
49: progname = argv[0];
50: cv = ((s = getenv("TERM")) == 0) || strcmp(s, "5620");
51: cv = 1; /* I can't stand -T5 as default!!! ehg */
52: ioctl(0, TIOCGETP, &sttysave);
53: strcpy(buf, "level");
54: for(argc--, argv++; *argv && (**argv == '-'); argv++)
55: switch(argv[0][1])
56: {
57: case 'z':
58: zflag = "-z";
59: break;
60: case 's':
61: shade++;
62: break;
63: case 'g':
64: grid = 0;
65: break;
66: case 'T':
67: if(argv[0][2] == 'c') cv = 1;
68: else if(argv[0][2] == '5') cv = 0;
69: else if(argv[0][2] == 'p') cv = 2;
70: else if(argv[0][2] == 'h') cv = 3;
71: else if(argv[0][2] == 'd') cv = 4;
72: else if(argv[0][2] == 's') cv = 5;
73: else goto err;
74: break;
75: case 't':
76: i = sscanf(&argv[0][2], "%hd, %hd", &ts, &te);
77: if(i==0) error("bad TS,TE");
78: timewarp = i;
79: break;
80: case 'p':
81: sscanf(&argv[0][2], "%d", &period);
82: break;
83: case 'i':
84: if(cv==0) sscanf(&argv[0][2], "%d", &floor);
85: break;
86: case 'B':
87: case 'D':
88: case 'S':
89: case 'b':
90: case 'm':
91: case 'w':
92: /* these only apply in color, so assume -Tc */
93: cv = 1;
94: break;
95: case 'c':
96: if(cv==0) cv = 1; /* maybe -Tp, but probably -Tc */
97: case 'v':
98: case 'x':
99: case 'y':
100: break;
101: default:
102: err:
103: fprintf(stderr, "Usage: view2d [-Tdev] [-ptime] [-cn] [-ms]\n");
104: exit(1);
105: }
106: if(*argv){
107: if((fd = open(*argv, 0)) == -1)
108: quit("cannot open input", 1);
109: }else{
110: fd = 0; /* if no file argument, try standard input */
111: }
112: if(cv==1)
113: {
114: if(access((s="/usr/lib/view2d/level"), 1) == -1)
115: {
116: fprintf(stderr, "go to swift for color\n");
117: exit(1);
118: }
119: dup2(fd,0); /* close(0); dup(fd); close(fd); */
120: strcpy(*av, "level");
121: execvp(s, av);
122: perror(s);
123: exit(1);
124: } else if(cv==2) {
125: if(access((s="/usr/lib/view2d/contour"), 1) == -1)
126: {
127: fprintf(stderr, "can't find %s\n",s);
128: exit(1);
129: }
130: dup2(fd,0); /* close(0); dup(fd); close(fd); */
131: strcpy(*av, "cntour");
132: /* WARNING: strlen("cntour") must <= strlen("view2d") */
133: execvp(s, av);
134: perror(s);
135: exit(1);
136: } else if(cv==3)
137: {
138: if(access((s="/usr/lib/view2d/halft"), 1) == -1)
139: {
140: fprintf(stderr, "can't find %s\n",s);
141: exit(1);
142: }
143: dup2(fd,0); /* close(0); dup(fd); close(fd); */
144: strcpy(*av, "halft");
145: execvp(s, av);
146: perror(s);
147: exit(1);
148: } else if(cv==4)
149: {
150: if(access((s="/usr/lib/view2d/viewtd"), 1) == -1)
151: {
152: fprintf(stderr, "can't find %s\n",s);
153: exit(1);
154: }
155: dup2(fd,0); /* close(0); dup(fd); close(fd); */
156: strcpy(*av, "viewtd");
157: execvp(s, av);
158: perror(s);
159: exit(1);
160: } else if(cv==5)
161: {
162: if(access((s="/usr/lib/view2d/slice"), 1) == -1)
163: {
164: fprintf(stderr, "can't find %s\n",s);
165: exit(1);
166: }
167: dup2(fd,0); /* close(0); dup(fd); close(fd); */
168: strcpy(*av, "slice");
169: execvp(s, av);
170: perror(s);
171: exit(1);
172: }
173: rd2dh(fd, &nx, &ny);
174: if(nx*ny*sizeof(short) > sizeof z)
175: {
176: sprintf(buf, "nx*ny=%d: must be less than 4096\n", nx*ny);
177: quit(buf, 1);
178: }
179: sttybuf = sttysave;
180: sttybuf.sg_flags |= RAW;
181: sttybuf.sg_flags &= ~ECHO;
182: ioctl(0, TIOCSETP, &sttybuf);
183: sprintf(buf, "/usr/jerq/bin/32ld %s /usr/lib/view2d/view2d.m", zflag);/**/
184: if(system(buf)) quit(0, 1);
185: putchar('X'); sendn(nx);
186: putchar('Y'); sendn(ny);
187: if(grid) putchar('G');
188: if(shade) putchar('S');
189: putchar('P');
190: sendn(period);
191: putchar('n');
192: sendn(rd.nfr);
193: putchar('I');
194: sendn(floor);
195: m = 2*nx*ny;
196: fmid = (rd.pmin+rd.pmax)/2.0;
197: fscale = PIXMAX/(rd.pmax - fmid);
198: while(rd2di(&ztime, z))
199: {
200: char buf[56];
201:
202: putchar('F');
203: sprintf(buf, "%g", ztime);
204: sends(buf);
205: for(q = nx*ny + (p = z); q != p; p++)
206: sendn(*p < floor ? floor : (short)((*p-fmid)*fscale));
207: }
208:
209: putchar('Q');
210: fflush(stdout);
211: (void)getchar();
212: quit(0, 0);
213: }
214:
215: quit(s, e)
216: char *s;
217: {
218: ioctl(0, JTERM, 0);
219: ioctl(0, TIOCSETP, &sttysave);
220: if(s)
221: printf("view2d: %s\n", s);
222: exit(e);
223: }
224:
225: sendn(n)
226: {
227: putchar(n>>8);
228: putchar(n);
229: }
230:
231: sends(s)
232: char *s;
233: {
234: while(*s) putchar(*s++);
235: putchar(0);
236: }
237:
238: abs(n)
239: {
240: return(n<0? -n:n);
241: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.