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