1 /*
2 * dcl graphic driver for Xlib
3 *
4 * original M. Shiotani
5 * 93/04/15 A. Numaguti (wait option etc.)
6 * 94/01/28 S. Sakai ver.5.x
7 * 94/03/15 M. Shiotani
8 * 95/03/18 A. Numaguti
9 * 01/10/19 T. Kagimoto (backing store)
10 * 01/11/13 T. Kagimoto (bug fix for backing store)
11 *
12 * Copyright (C) 2000-2010 GFD Dennou Club. All rights reserved.
13 *
14 */
15
16 #include <X11/Xlib.h>
17 #include <X11/Xutil.h>
18 #include <X11/keysym.h>
19 #include <stdio.h>
20 #include <string.h>
21 #include <stdlib.h>
22 #include "../../../config.h"
23
24 #define BORDWD 2 /* border width */
25 #define PAD 2.0 /* padding for workstation window */
26 #define FACTZ 0.03 /* scaling factor */
27 #define TRUE 1 /* numeric value for true */
28 #define FALSE 0 /* numeric value for false */
29 #define LWDATR TRUE /* line width capability */
30 #define LCLATR TRUE /* line color capability */
31 #define LTNATR TRUE /* hard fill capability */
32 #define LIMATR TRUE /* bit image capability */
33 #define LPTATR TRUE /* mouse point capability */
34 #define MAXWDI 9 /* maximum number of line index */
35 #define MAXCLI 255 /* maximum number of line color */
36 #define MAXBMP 300 /* maximum number of bitmaps */
37
38 #define Max(x, y) (((x) > (y)) ? (x) : (y))
39 #define Min(x, y) (((x) < (y)) ? (x) : (y))
40 #define LEMAX 1000 /* unit of line elements drawn on window */
41
42 static int LFCATR; /* full color capability */
43 static int linewidth[MAXWDI] = { 1, 2, 2, 3, 3, 4, 4, 5, 5 };
44 /* initialization for line width */
45 static int iwdidz, iclidz, iwtroz, lclatrz, iwnd;
46 static int wsxwd, wsywd, wsxmnz, wsxmxz, wsymnz, wsymxz;
47 static int ixz, iyz, iwz, ihz, ixxz, iyyz, page;
48 static int posx, posy, wait_np, wait_op, wait_cl;
49 static int keymask, alternate, dump, fgbg;
50 static int nbmap, nn1[MAXBMP], nn2[MAXBMP], nx[MAXBMP], ny[MAXBMP];
51 static unsigned long pl[1], px[MAXCLI];
52 static DCL_REAL rwxold, rwyold;
53 static char dmpfile[80], xtitle[80];
54 static char bmline[MAXBMP][260];
55 static int lfcmod = FALSE;
56
57 static Display *d;
58 static Window w, ww[2];
59 static GC gc, gct;
60 static XEvent e;
61
62 /*---------------------internal function ------------------*/
63
zxbmcv(int * nx,int * ny,char bmline[],char bitmap[])64 void zxbmcv(int *nx, int *ny, char bmline[], char bitmap[])
65 {
66 static int n8 = 8;
67 int n, nb;
68 unsigned bx;
69
70 nb = *nx * *ny / n8;
71 for (n = 0; n < nb; n++){
72 sscanf(&bmline[2*n], "%2x", &bx);
73 bitmap[n] = bx;
74 }
75 bitmap[nb] = '\0';
76 }
77
78 /*------------------------- device ------------------------*/
79
zxdopn_(DCL_INT * width,DCL_INT * height,DCL_INT * iposx,DCL_INT * iposy,DCL_INT * lwait,DCL_INT * lwait0,DCL_INT * lwait1,DCL_INT * lkey,DCL_INT * lalt,DCL_INT * ldump,DCL_INT * lfgbg,char clrmap[],char cbmmap[],char file[],char title[])80 void zxdopn_(DCL_INT *width, DCL_INT *height, DCL_INT *iposx, DCL_INT *iposy,
81 DCL_INT *lwait, DCL_INT *lwait0, DCL_INT *lwait1, DCL_INT *lkey,
82 DCL_INT *lalt, DCL_INT *ldump, DCL_INT *lfgbg,
83 char clrmap[], char cbmmap[], char file[], char title[])
84 {
85 int bordcl, backcl, ncolor, n, m, msk;
86 long int rx[MAXCLI], gx[MAXCLI], bx[MAXCLI], rx1, gx1, bx1;
87 char c[80], cmapz[80], bmapz[80];
88
89 XSetWindowAttributes att;
90 XSizeHints sizehint;
91 Colormap cm;
92 XColor cx[MAXCLI];
93 FILE *stream;
94 void cfnchr();
95
96 posx = *iposx;
97 posy = *iposy;
98 wait_np = *lwait;
99 wait_op = *lwait0;
100 wait_cl = *lwait1;
101 keymask = *lkey;
102 alternate = *lalt;
103 dump = *ldump;
104 fgbg = *lfgbg;
105
106 cfnchr (dmpfile, file, 79);
107 cfnchr (xtitle, title, 79);
108
109 /* window size */
110
111 wsxwd = *width + 2 * PAD; /* window width */
112 wsywd = *height + 2 * PAD; /* window height */
113 wsxmnz = PAD; /* lower-left corner */
114 wsymnz = PAD; /* lower-left corner */
115 wsxmxz = PAD + *width - 1; /* upper-right corner */
116 wsymxz = PAD + *height - 1; /* upper-right corner */
117 page = 0;
118 iwnd = 1;
119 if (alternate)
120 iwnd = 0;
121
122 /* read colormap file */
123
124 cfnchr (cmapz, clrmap, 79);
125
126 if ((stream = fopen(cmapz, "r")) == NULL) {
127 fprintf (stderr, "*** Error in zxdopn : ");
128 fprintf (stderr,
129 "Allocation failed for colormap (%s).\n", cmapz);
130 exit (1);
131 }
132
133 fscanf (stream, "%d : %s", &ncolor, c);
134 for (n = 0; n < ncolor; n++)
135 fscanf(stream, "%6ld%6ld%6ld : %s", &rx[n], &gx[n], &bx[n], c);
136 fclose(stream);
137
138 if (fgbg) {
139 rx1 = rx[0];
140 gx1 = gx[0];
141 bx1 = bx[0];
142 rx[0] = rx[1];
143 gx[0] = gx[1];
144 bx[0] = bx[1];
145 rx[1] = rx1;
146 gx[1] = gx1;
147 bx[1] = bx1;
148 }
149
150
151 /* read bitmap file */
152
153 cfnchr (bmapz, cbmmap, 79);
154
155 if ((stream = fopen(bmapz, "r")) == NULL) {
156 fprintf (stderr, "*** Error in zxdopn : ");
157 fprintf (stderr,
158 "Allocation failed for bitmap (%s).\n", bmapz);
159 exit (1);
160 }
161
162 fscanf (stream, "%d", &nbmap);
163 for (n = 0; n < nbmap; n++)
164 fscanf(stream, "%4d%4d%3d%3d%s",
165 &nn1[n], &nn2[n], &nx[n], &ny[n], bmline[n]);
166
167 fclose(stream);
168
169 /* open ( and activate ) workstation */
170
171 d = XOpenDisplay (NULL);
172 if ( d == NULL ) {
173 fprintf (stderr, "*** Error in zxdopn : Can't open display.\n" );
174 exit (1);
175 }
176
177 cm = DefaultColormap (d, 0);
178 lclatrz = (DefaultVisual(d,0) -> class != StaticGray);
179
180 if (lclatrz) {
181 for (n = 0; n < MAXCLI; n++) {
182 m = n % ncolor;
183 cx[n].red = rx[m];
184 cx[n].green = gx[m];
185 cx[n].blue = bx[m];
186 if (XAllocColor(d,cm,&cx[n]))
187 px[n] = cx[n].pixel;
188 else
189 break;
190 }
191 if (n < MAXCLI) {
192 fprintf (stderr, "*** Warning in zxdopn : ");
193 fprintf (stderr, "Only %d colors are allocated.\n", n);
194 for ( ; n < MAXCLI; n++)
195 px[n] = BlackPixel (d, 0);
196 }
197 }
198 else {
199 px[0] = WhitePixel (d, 0);
200 for (n = 1; n < MAXCLI; n++)
201 px[n] = BlackPixel (d, 0);
202 }
203
204 bordcl = px[1];
205 backcl = px[0];
206
207 w = XCreateSimpleWindow (d, DefaultRootWindow(d), posx, posy,
208 wsxwd, wsywd, BORDWD, bordcl, backcl);
209
210 XStoreName (d, w, xtitle);
211
212 LFCATR = (DefaultVisual(d,0) -> class >= 4); /* TrueColor or DirectColor */
213
214 if (posx != -999 && posy != -999) {
215 sizehint.flags = USPosition;
216 sizehint.x = posx;
217 sizehint.y = posy;
218 XSetNormalHints (d, w, &sizehint);
219 }
220
221 msk = ExposureMask | ButtonPressMask;
222 if (keymask)
223 msk |= KeyPressMask;
224 XSelectInput (d, w, msk);
225
226 gc = XCreateGC (d, w, 0, 0);
227
228 XMapWindow (d, w);
229
230 do
231 XNextEvent (d, &e);
232 while (e.type != Expose);
233
234 /*- XMapWindow (d, w);*/
235 ww[0] = XCreateSimpleWindow (d, w, 0, 0,
236 wsxwd, wsywd, 0, bordcl, backcl);
237 ww[1] = XCreateSimpleWindow (d, w, 0, 0,
238 wsxwd, wsywd, 0, bordcl, backcl);
239
240 XMapSubwindows (d, w);
241
242 att.backing_store = Always;
243 XChangeWindowAttributes (d, ww[0], CWBackingStore, &att);
244 XChangeWindowAttributes (d, ww[1], CWBackingStore, &att);
245
246 if (wait_op) {
247 do
248 XNextEvent (d, &e);
249 while (e.type != ButtonPress && e.type != KeyPress);
250 }
251 }
252
zxdcls_(void)253 void zxdcls_(void)
254 {
255 int next;
256 char string[2];
257
258 KeySym key;
259
260 next = False;
261
262 if (!wait_np && wait_cl) {
263 while (1) {
264 XNextEvent (d, &e);
265 if (e.type == KeyPress) {
266 if (XLookupString (&e.xkey, string, 2, &key, NULL) == 1) {
267 switch (key) {
268 case XK_Return:
269 next = True;
270 break;
271 case XK_space:
272 next = True;
273 break;
274 default:
275 next = False;
276 }
277 }
278 }
279 if (e.type == ButtonPress)
280 next = True;
281 if (next)
282 break;
283 }
284 }
285 XDestroySubwindows (d, w);
286 XDestroyWindow (d, w);
287 XCloseDisplay (d);
288 }
289
290 /*------------------------- page --------------------------*/
291
zxpopn_(void)292 void zxpopn_(void)
293 {
294
295 /* open page ( or screen ) */
296
297 ++page;
298 iwdidz = 1;
299 iclidz = 1;
300
301 XClearWindow (d, ww[iwnd]);
302
303 }
304
zxpcls_(void)305 void zxpcls_(void)
306 {
307 int next, dumpz, ixl;
308 char cmd[64], string[2];
309
310 KeySym key;
311
312 /* close page ( or screen ) */
313
314 if (alternate) {
315 XRaiseWindow (d, ww[iwnd]);
316 iwnd = 1 - iwnd;
317 }
318
319 XFlush (d);
320 if (XCheckTypedEvent (d, KeyPress, &e)) {
321 ixl = XLookupString (&e.xkey, string, 2, &key, NULL);
322 if (key == XK_w)
323 wait_np = True;
324 }
325
326 dumpz = False;
327 next = False;
328
329 if (wait_np) {
330 while (1) {
331 XNextEvent (d, &e);
332 if (e.type == KeyPress) {
333 if (XLookupString (&e.xkey, string, 2, &key, NULL) == 1) {
334 switch (key) {
335 case XK_Return:
336 next = True;
337 break;
338 case XK_space:
339 next = True;
340 break;
341 case XK_d:
342 next = True;
343 dumpz = True;
344 break;
345 case XK_s:
346 next = True;
347 wait_np = False;
348 break;
349 case XK_q:
350 XDestroyWindow (d, w);
351 XCloseDisplay (d);
352 exit (0);
353 default:
354 next = False;
355 }
356 }
357 }
358 if (e.type == ButtonPress)
359 next = True;
360 if (next)
361 break;
362 }
363
364 }
365 if ( dump || dumpz ) {
366 sprintf (cmd, "xwd -name %s -out %s_%03d.xwd", xtitle, dmpfile, page);
367 system (cmd);
368 }
369 }
370
371 /*------------------------- object ------------------------*/
372
zxoopn_(char * objname,char * comment)373 void zxoopn_(char *objname, char *comment)
374 {
375
376 }
377
zxocls_(char * objname)378 void zxocls_(char *objname)
379 {
380 XFlush(d);
381 }
382
383 /*--------------------- full color ------------------------*/
384
zxqfcc_(DCL_INT * lfcatr)385 void zxqfcc_(DCL_INT *lfcatr)
386 {
387 /* return full color capability */
388
389 *lfcatr = LFCATR;
390 }
391
zxsfcm_(DCL_INT * lfc)392 void zxsfcm_(DCL_INT *lfc)
393 {
394 /* set full color mode */
395
396
397 lfcmod = *lfc;
398
399 }
400
401 /*------------------------- line --------------------------*/
402
zxswdi_(DCL_INT * iwdidx)403 void zxswdi_(DCL_INT *iwdidx)
404 {
405
406 /* set line width index */
407
408 iwdidz = *iwdidx % 10;
409 if (iwdidz == 0)
410 iwdidz = 1;
411 }
412
zxscli_(DCL_INT * iclidx)413 void zxscli_(DCL_INT *iclidx)
414 {
415
416 /* set line color index */
417
418 iclidz = *iclidx % MAXCLI;
419
420 /* if (iclidz == 0)
421 iclidz = 1; */
422 }
423
zxslcl_(unsigned long int * icolor)424 void zxslcl_(unsigned long int *icolor)
425 {
426 /* set line color in 24 bit RGB */
427
428 XColor cx;
429 unsigned long int pix;
430
431 cx.red = ((*icolor >> 16) & 255) * 256;
432 cx.green = ((*icolor >> 8) & 255) * 256;
433 cx.blue = ((*icolor >> 0) & 255) * 256;
434
435 if (XAllocColor(d, DefaultColormap (d, 0), &cx))
436 pix = cx.pixel;
437 else
438 pix = BlackPixel(d, 0);
439
440 XSetForeground(d, gc, pix);
441
442 }
443
zxgopn_(void)444 void zxgopn_(void)
445 {
446 XGCValues gv;
447
448 /* open graphic segment */
449
450 gv.cap_style = CapRound;
451 gv.line_width = linewidth[iwdidz-1];
452
453 if (lfcmod == FALSE){
454 XSetForeground (d, gc, px[iclidz]);
455 }
456
457
458 XChangeGC (d, gc, GCLineWidth | GCCapStyle, &gv);
459
460 }
461
zxgmov_(DCL_REAL * wx,DCL_REAL * wy)462 void zxgmov_(DCL_REAL *wx, DCL_REAL *wy)
463 {
464
465 /* pen-up move */
466
467 rwxold = *wx;
468 rwyold = *wy;
469 }
470
zxgplt_(DCL_REAL * wx,DCL_REAL * wy)471 void zxgplt_(DCL_REAL *wx, DCL_REAL *wy)
472 {
473 DCL_INT iwxold, iwyold, iwx, iwy;
474 void zxfint_();
475
476 /* pen-down move */
477
478 zxfint_(&rwxold, &rwyold, &iwxold, &iwyold);
479 zxfint_( wx, wy, &iwx, &iwy );
480
481 if (iwxold == iwx && iwyold == iwy)
482 XDrawPoint (d, ww[iwnd], gc, (int) iwx, (int) iwy);
483 else
484 XDrawLine (d, ww[iwnd], gc, (int) iwxold, (int) iwyold, (int) iwx, (int) iwy);
485 rwxold = *wx;
486 rwyold = *wy;
487 }
488
zxgcls_(void)489 void zxgcls_(void)
490 {
491
492 /* close graphic segment */
493 XFlush(d);
494
495 }
496
497 /*------------------------- tone --------------------------*/
zxstcl_(unsigned long int * icolor)498 void zxstcl_(unsigned long int *icolor)
499 {
500 /* set tone color in 24 bit RGB */
501
502 XColor cx;
503 unsigned long int pix;
504
505 if (gct == NULL)
506 gct = XCreateGC (d, w, 0, 0);
507
508 cx.red = ((*icolor >> 16) & 255) * 256;
509 cx.green = ((*icolor >> 8) & 255) * 256;
510 cx.blue = ((*icolor >> 0) & 255) * 256;
511
512 if (XAllocColor(d, DefaultColormap (d, 0), &cx))
513 pix = cx.pixel;
514 else
515 pix = BlackPixel(d, 0);
516
517 XSetForeground(d, gct, pix);
518 }
519
520
zxgton_(DCL_INT * np,DCL_REAL wpx[],DCL_REAL wpy[],DCL_INT * itpat)521 void zxgton_(DCL_INT *np, DCL_REAL wpx[], DCL_REAL wpy[], DCL_INT *itpat)
522 {
523 static int ltfrst = TRUE, ibitold = -1;
524 static XPoint p[16384];
525 DCL_INT ipx, ipy, iclr, ibit;
526 int i, nb;
527 char bitmap[16384];
528
529 Pixmap pixmap;
530 void zxbmcv(), zxfint_();
531
532 /* hard fill */
533
534 if (ltfrst) {
535 if(gct == NULL)
536 gct = XCreateGC (d, w, 0, 0);
537 XSetFillRule (d, gct, WindingRule);
538 ltfrst = FALSE;
539 }
540
541 if (lfcmod == FALSE) {
542
543 ibit = *itpat % 1000;
544 iclr = (*itpat / 1000) % MAXCLI;
545 /* if (iclr == 0)
546 iclr = 1; */
547
548 XSetForeground (d, gct, px[iclr]);
549
550 }
551
552 if (ibit != ibitold) {
553 ibitold = ibit;
554 nb = -1;
555 if (iwtroz == 1) {
556 for (i = 0; i < nbmap; i++)
557 if (ibit == nn1[i]) {
558 nb = i;
559 break;
560 }
561 }else{
562 for (i = 0; i < nbmap; i++)
563 if (ibit == nn2[i]) {
564 nb = i;
565 break;
566 }
567 }if (nb >= 0) {
568 zxbmcv(&nx[nb], &ny[nb], bmline[nb], bitmap);
569 pixmap = XCreateBitmapFromData (d, w, bitmap, nx[nb], ny[nb]);
570 XSetFillStyle (d, gct, FillStippled);
571 XSetStipple (d, gct, pixmap);
572 }else{
573 return;
574 }
575 }
576
577 for (i = 0; i < *np; i++) {
578 zxfint_(&wpx[i],&wpy[i], &ipx, &ipy);
579 p[i].x = ipx;
580 p[i].y = ipy;
581 }
582 XFillPolygon (d, ww[iwnd], gct, p, *np, Complex, CoordModeOrigin);
583 }
584
585 /*------------------------- image -------------------------*/
586
zxiopn_(DCL_INT * iwx,DCL_INT * iwy,DCL_INT * iwidth,DCL_INT * iheight)587 void zxiopn_(DCL_INT *iwx, DCL_INT *iwy, DCL_INT *iwidth, DCL_INT *iheight)
588 {
589 ixz = *iwx;
590 iyz = *iwy;
591 iwz = *iwidth;
592 ihz = *iheight;
593 ixxz = ixz;
594 iyyz = iyz;
595 printf (" *** image ");
596 }
597
zxidat_(DCL_INT image[],DCL_INT * nlen)598 void zxidat_(DCL_INT image[], DCL_INT *nlen)
599 {
600 int i;
601
602 for (i = 0; i < *nlen; i++) {
603 XSetForeground (d, gc, px[image[i]]);
604 XDrawPoint (d, ww[iwnd], gc, ixxz, iyyz);
605 ixxz = ixxz + 1;
606 if (ixxz >= ixz+iwz) {
607 ixxz = ixz;
608 iyyz = iyyz + 1;
609 if (iyyz % 16 == 0) {
610 printf (".");
611 fflush (stdout);
612 }
613 }
614 }
615 }
616
zxicls_(void)617 void zxicls_(void)
618 {
619 printf (" end\n");
620 }
621
zxiclr_(DCL_INT image[],DCL_INT * nlen)622 void zxiclr_(DCL_INT image[], DCL_INT *nlen)
623 {
624 XColor cx;
625 int i;
626 unsigned long int pix;
627
628 for (i = 0; i < *nlen; i++) {
629
630 cx.red = ((image[i] >> 16) & 255) * 256;
631 cx.green = ((image[i] >> 8) & 255) * 256;
632 cx.blue = ((image[i] >> 0) & 255) * 256;
633
634 if (XAllocColor(d, DefaultColormap (d, 0), &cx))
635 pix = cx.pixel;
636 else
637 pix = BlackPixel(d, 0);
638
639 XSetForeground (d, gc, pix);
640
641 XDrawPoint (d, ww[iwnd], gc, ixxz, iyyz);
642
643 ixxz = ixxz + 1;
644
645 if (ixxz >= ixz+iwz) {
646 ixxz = ixz;
647 iyyz = iyyz + 1;
648 if (iyyz % 16 == 0) {
649 printf (".");
650 fflush (stdout);
651 }
652 }
653 }
654 }
655 /*------------------------- mouse -------------------------*/
656
zxqpnt_(DCL_REAL * wx,DCL_REAL * wy,DCL_INT * mb)657 void zxqpnt_(DCL_REAL *wx, DCL_REAL *wy, DCL_INT *mb)
658 {
659 int ixl;
660 char cc[1];
661
662 XFlush(d);
663 do
664 XNextEvent (d, &e);
665 while (e.type != ButtonPress && e.type != KeyPress);
666
667 if (e.type == ButtonPress) {
668 *wx = e.xbutton.x;
669 *wy = wsywd - e.xbutton.y;
670 switch (e.xbutton.button) {
671 case Button1:
672 *mb = 1;
673 break;
674 case Button2:
675 *mb = 2;
676 break;
677 case Button3:
678 *mb = 3;
679 break;
680 default:
681 *mb = 0;
682 }
683 }
684 else {
685 *wx = e.xkey.x;
686 *wy = wsywd - e.xkey.y;
687 ixl = XLookupString (&e.xkey , (char *) cc, 1, 0, 0);
688 *mb = *cc;
689 }
690 }
691
692 /*---------------------- transformation -------------------*/
693
zxfint_(DCL_REAL * wx,DCL_REAL * wy,DCL_INT * iwx,DCL_INT * iwy)694 void zxfint_(DCL_REAL *wx, DCL_REAL *wy, DCL_INT *iwx, DCL_INT *iwy)
695 {
696 *iwx = *wx + 0.5;
697 *iwy = wsywd - *wy + 0.5;
698 }
699
zxiint_(DCL_INT * iwx,DCL_INT * iwy,DCL_REAL * wx,DCL_REAL * wy)700 void zxiint_(DCL_INT *iwx, DCL_INT *iwy, DCL_REAL *wx, DCL_REAL *wy)
701 {
702 *wx = *iwx;
703 *wy = wsywd - *iwy;
704 }
705
706 /*------------------------- inquiry -----------------------*/
707
zxqwdc_(DCL_INT * lwdatr)708 void zxqwdc_(DCL_INT *lwdatr)
709 {
710
711 /* inquire line width capability */
712
713 *lwdatr = LWDATR;
714 }
715
zxqclc_(DCL_INT * lclatr)716 void zxqclc_(DCL_INT *lclatr)
717 {
718
719 /* inquire line color capability */
720
721 *lclatr = lclatrz;
722 }
723
zxqtnc_(DCL_INT * ltnatr)724 void zxqtnc_(DCL_INT *ltnatr)
725 {
726
727 /* inquire hard fill capability */
728
729 *ltnatr = LTNATR;
730 }
731
zxqimc_(DCL_INT * limatr)732 void zxqimc_(DCL_INT *limatr)
733 {
734
735 /* inquire bit image capability */
736
737 *limatr = LIMATR;
738 }
739
zxqptc_(DCL_INT * lptatr)740 void zxqptc_(DCL_INT *lptatr)
741 {
742
743 /* inquire mouse point capability */
744
745 *lptatr = LPTATR;
746 }
747
zxqrct_(DCL_REAL * wsxmn,DCL_REAL * wsxmx,DCL_REAL * wsymn,DCL_REAL * wsymx,DCL_REAL * fact)748 void zxqrct_(DCL_REAL *wsxmn, DCL_REAL *wsxmx, DCL_REAL *wsymn, DCL_REAL *wsymx, DCL_REAL *fact)
749 {
750
751 /* inquire workstation rectangle */
752
753 *wsxmn = wsxmnz;
754 *wsxmx = wsxmxz;
755 *wsymn = wsymnz;
756 *wsymx = wsymxz;
757 *fact = FACTZ;
758 }
759
zxsrot_(DCL_INT * iwtrot)760 void zxsrot_(DCL_INT *iwtrot)
761 {
762
763 /* set frame rotation flag */
764
765 iwtroz = *iwtrot;
766 }
767
zxclini_(char clrmap[],DCL_INT * lfgbg)768 void zxclini_(char clrmap[], DCL_INT *lfgbg)
769 {
770
771 /* change/initialize colormap */
772
773 }
774
775