source: SH_SHM/trunk/source/newgraph/graphch.c @ 16

Revision 16, 32.1 KB checked in by marcus, 11 years ago (diff)

r1 | svn | 2007-12-13 11:10:29 +0100 (Do, 13 Dez 2007) | 2 lines

Initial import

Line 
1
2/* file GRAPHCH.C
3 *      =========
4 *
5 * version 17, 24-May-93
6 *
7 * channel dispatcher of graphic output
8 * K. Stammler, 9-AUG-91
9 */
10
11
12#define __THIS_IS_GRAPHCH
13
14#include <stdio.h>
15#include BASECNST
16#include BC_SYSBASE
17#include "graphbas.h"
18#include "gmusrdef.h"
19#include "mmusrdef.h"
20#include "psusrdef.h"
21#include "ccusrdef.h"
22#include "tkusrdef.h"
23#include "hpusrdef.h"
24#include "djusrdef.h"
25#include "bgusrdef.h"
26#include "xwusrdef.h"
27#include "vwusrdef.h"
28#include BC_GCUSRDEF
29
30
31
32#define WDWMASK 7
33
34
35
36/* redraw routine available for all graphic modules
37 * imported via graphbas.h
38 */
39void (*gbv_playback)( CHMAP src, CHMAP dst, PAINTBOX *pb,
40        char outf[], STATUS *status );
41
42
43/* global variables */
44static BOOLEAN   gcv_init;           /* module initialized */
45static unsigned int gcv_initmap;     /* initialized modules */
46static BOOLEAN   gcv_swap;           /* swap display */
47static void      (*gcv_writeext)(char text[]);
48                                     /* write routine to external channel */
49
50
51/* macros */
52#define CSWAP(x,y) if (gcv_swap) {COOTYPE tmp;tmp=(x);(x)=(y);(y)=tmp;}
53
54
55/*------------------------------------------------------------------------*/
56
57
58
59void gc_init( CHMAP map, int attribs, COOTYPE xlo, COOTYPE ylo,
60        COOTYPE width, COOTYPE height, STATUS *status )
61
62/* initialises channels
63 *
64 * parameters of routine
65 * CHMAP      map;       input; channel map
66 * int        attribs;   input; window attributes
67 * COOTYPE    xlo;       input; x-coo of lower left corner
68 * COOTYPE    ylo;       input; y-coo of lower left corner
69 * COOTYPE    width;     input; widths of window
70 * COOTYPE    height;    input; height of window
71 * STATUS     *status;   output; return status
72 */
73{
74        /* executable code */
75
76        if  (!gcv_init)  {
77                gbv_playback = mm_playback;
78                gcv_init = TRUE;
79        } /*endif*/
80
81        if  (GCF_GEM & map)  {
82                gm_init( map & WDWMASK, attribs, xlo, ylo, width, height, status );
83                if  (Severe(status))  return;
84                gcv_initmap |= GCF_GEM;
85        } /*endif*/
86
87        if  (GCF_XWDW & map)  {
88                xw_init( map & WDWMASK, attribs, xlo, ylo, width, height, status );
89                if  (Severe(status))  return;
90                gcv_initmap |= GCF_XWDW;
91        } /*endif*/
92
93        if  (GCF_BGI & map)  {
94                bg_init( map & WDWMASK, attribs, xlo, ylo, width, height, status );
95                if  (Severe(status))  return;
96                gcv_initmap |= GCF_BGI;
97        } /*endif*/
98
99        if  (GCF_MEM & map)  {
100                mm_init( map & WDWMASK, status );
101                if  (Severe(status))  return;
102                gcv_initmap |= GCF_MEM;
103        } /*endif*/
104
105        if  (GCF_PSF & map)  {
106                ps_init( attribs, xlo, ylo, width, height, status );
107                if  (Severe(status))  return;
108                gcv_initmap |= GCF_PSF;
109        } /*endif*/
110
111        if  (GCF_CALCOMP & map)  {
112                cc_init( attribs, xlo, ylo, width, height, status );
113                if  (Severe(status))  return;
114                gcv_initmap |= GCF_CALCOMP;
115        } /*endif*/
116
117        if  (GCF_TEK & map)  {
118                tk_init( attribs, xlo, ylo, width, height, status );
119                if  (Severe(status))  return;
120                gcv_initmap |= GCF_TEK;
121        } /*endif*/
122
123        if  (GCF_HPGL & map)  {
124                hp_init( attribs, xlo, ylo, width, height, status );
125                if  (Severe(status))  return;
126                gcv_initmap |= GCF_HPGL;
127        } /*endif*/
128
129        if  (GCF_DJ & map)  {
130                dj_init( attribs, xlo, ylo, width, height, status );
131                if  (Severe(status))  return;
132                gcv_initmap |= GCF_DJ;
133        } /*endif*/
134
135        if  (GCF_VWS & map)  {
136                vw_init( map & WDWMASK, attribs, xlo, ylo, width, height, status );
137                if  (Severe(status))  return;
138                gcv_initmap |= GCF_VWS;
139        } /*endif*/
140
141} /* end of gc_init */
142
143
144
145/*------------------------------------------------------------------------*/
146
147
148
149void gc_exit( CHMAP map )
150
151/* closes channel
152 *
153 * parameters of routine
154 * CHMAP      map;          input; window to be closed
155 */
156{
157        /* executable code */
158
159        if  (GCF_GEM & map)
160                gm_exit( map & WDWMASK );
161
162        if  (GCF_XWDW & map)
163                xw_exit( map & WDWMASK );
164
165        if  (GCF_BGI & map)
166                bg_exit( map & WDWMASK );
167
168        if  (GCF_MEM & map)
169                mm_exit( map & WDWMASK );
170
171        if  (GCF_PSF & map)
172                ps_exit();
173
174        if  (GCF_CALCOMP & map)
175                cc_exit();
176
177        if  (GCF_TEK & map)
178                tk_exit();
179
180        if  (GCF_HPGL & map)
181                hp_exit();
182
183        if  (GCF_DJ & map)
184                dj_exit();
185
186        if  (GCF_VWS & map)
187                vw_exit( map & WDWMASK );
188
189} /* end of gc_exit */
190
191
192
193/*------------------------------------------------------------------------*/
194
195
196
197void gc_finish( void )
198
199/* closes all channels and terminates graphics
200 *
201 * no parameters
202 */
203{
204        /* executable code */
205
206        gm_finish();
207        xw_finish();
208        bg_finish();
209        mm_finish();
210        ps_finish();
211        cc_finish();
212        tk_finish();
213        hp_finish();
214        dj_finish();
215        vw_finish();
216        gcv_initmap = 0;
217
218} /* end of gc_finish */
219
220
221
222/*------------------------------------------------------------------------*/
223
224
225
226void gc_resizewdw( CHMAP map, COOTYPE xpos, COOTYPE ypos,
227        COOTYPE width, COOTYPE height, STATUS *status )
228
229/* resizes channel
230 *
231 * parameters of routine
232 * CHMAP      map;            input; channel map
233 * COOTYPE    xpos, ypos;     input; position of window
234 * COOTYPE    width, height;  input; size of window
235 * STATUS     *status;        output; return status
236 */
237{
238        /* executable code */
239
240        if  (GCF_GEM & map)  {
241                gm_resizewdw( map & WDWMASK, xpos, ypos, width, height, status );
242                if  (Severe(status))  return;
243        } /*endif*/
244
245        if  (GCF_XWDW & map)  {
246                xw_resizewdw( map & WDWMASK, xpos, ypos, width, height, status );
247                if  (Severe(status))  return;
248        } /*endif*/
249
250        if  (GCF_BGI & map)  {
251                bg_resizewdw( map & WDWMASK, xpos, ypos, width, height, status );
252                if  (Severe(status))  return;
253        } /*endif*/
254
255        if  (GCF_PSF & map)  {
256                ps_resize( xpos, ypos, width, height, status );
257                if  (Severe(status))  return;
258        } /*endif*/
259
260        if  (GCF_CALCOMP & map)  {
261                cc_resize( xpos, ypos, width, height, status );
262                if  (Severe(status))  return;
263        } /*endif*/
264
265        if  (GCF_TEK & map)  {
266                tk_resize( xpos, ypos, width, height, status );
267                if  (Severe(status))  return;
268        } /*endif*/
269
270        if  (GCF_HPGL & map)  {
271                hp_resize( xpos, ypos, width, height, status );
272                if  (Severe(status))  return;
273        } /*endif*/
274
275        if  (GCF_DJ & map)  {
276                dj_resize( xpos, ypos, width, height, status );
277                if  (Severe(status))  return;
278        } /*endif*/
279
280        if  (GCF_VWS & map)  {
281                vw_resizewdw( map & WDWMASK, xpos, ypos, width, height, status );
282                if  (Severe(status))  return;
283        } /*endif*/
284
285} /* end of gc_resizewdw */
286
287
288
289/*------------------------------------------------------------------------*/
290
291
292
293void gc_popwdw( CHMAP map )
294
295/* pops window on top
296 *
297 * parameters of routine
298 * CHMAP      map;            input; channel map
299 */
300{
301        /* executable code */
302
303        if  (GCF_GEM & map)
304                gm_popwdw( map & WDWMASK );
305
306        if  (GCF_XWDW & map)
307                xw_popwdw( map & WDWMASK );
308
309        if  (GCF_VWS & map)
310                vw_popwdw( map & WDWMASK );
311
312} /* end of gc_popwdw */
313
314
315
316/*------------------------------------------------------------------------*/
317
318
319
320void gc_setwdwname( CHMAP map, char name[] )
321
322/* sets new window name
323 *
324 * parameters of routine
325 * CHMAP     map;       input; channel map
326 * char      name[];    input; new name
327 */
328{
329        /* executable code */
330
331        if  (GCF_GEM & map)
332                gm_setwdwname( map & WDWMASK, name );
333
334        if  (GCF_XWDW & map)
335                xw_setwdwname( map & WDWMASK, name );
336
337        if  (GCF_BGI & map)
338                bg_setwdwname( map & WDWMASK, name );
339
340        if  (GCF_VWS & map)
341                vw_setwdwname( map & WDWMASK, name );
342
343} /* end of gc_setwdwname */
344
345
346
347/*------------------------------------------------------------------------*/
348
349
350
351void gc_setstyle( CHMAP map, unsigned style, char item[],
352        char value[], STATUS *status )
353
354/* sets style attribute
355 *
356 * parameters of routine
357 * CHMAP      map;       input; channel map
358 * unsigned   style;     input; style block number
359 * char       item[];    input; name of attribute
360 * char       value[];   input; new value of attribute (text)
361 * STATUS     *status;   output; return status
362 */
363{
364        /* executable code */
365
366        if  (GCF_GEM & map)  {
367                gm_setstyle( map & WDWMASK, style, item, value, status );
368                if  (Severe(status))  return;
369        } /*endif*/
370
371        if  (GCF_XWDW & map)  {
372                xw_setstyle( map & WDWMASK, style, item, value, status );
373                if  (Severe(status))  return;
374        } /*endif*/
375
376        if  (GCF_BGI & map)  {
377                bg_setstyle( map & WDWMASK, style, item, value, status );
378                if  (Severe(status))  return;
379        } /*endif*/
380
381        if  (GCF_MEM & map)  {
382                mm_setstyle( map & WDWMASK, style, item, value, status );
383                if  (Severe(status))  return;
384        } /*endif*/
385
386        if  (GCF_PSF & map)  {
387                ps_setstyle( style, item, value, status );
388                if  (Severe(status))  return;
389        } /*endif*/
390
391        if  (GCF_CALCOMP & map)  {
392                cc_setstyle( style, item, value, status );
393                if  (Severe(status))  return;
394        } /*endif*/
395
396        if  (GCF_TEK & map)  {
397                tk_setstyle( style, item, value, status );
398                if  (Severe(status))  return;
399        } /*endif*/
400
401        if  (GCF_HPGL & map)  {
402                hp_setstyle( style, item, value, status );
403                if  (Severe(status))  return;
404        } /*endif*/
405
406        if  (GCF_DJ & map)  {
407                dj_setstyle( style, item, value, status );
408                if  (Severe(status))  return;
409        } /*endif*/
410
411        if  (GCF_VWS & map)  {
412                vw_setstyle( map & WDWMASK, style, item, value, status );
413                if  (Severe(status))  return;
414        } /*endif*/
415
416} /* end of gc_setstyle */
417
418
419
420/*------------------------------------------------------------------------*/
421
422
423
424void gc_setcoo( CHMAP map, COOTYPE x, COOTYPE y, COOTYPE w, COOTYPE h,
425        STATUS *status )
426
427/* sets user coordinates in window.  If x,y,w,h are all equal to zero,
428 * the last call is repeated.
429 *
430 * parameters of routine
431 * CHMAP      map;        input; channel map
432 * COOTYPE    x, y, w, h; input; user coordinates
433 * STATUS     *status;    output; return status
434 */
435{
436        /* executable code */
437
438        CSWAP(x,y)
439        CSWAP(w,h)
440
441        if  (GCF_GEM & map)  {
442                gm_setcoo( map & WDWMASK, x, y, w, h, status );
443                if  (Severe(status))  return;
444        } /*endif*/
445
446        if  (GCF_XWDW & map)  {
447                xw_setcoo( map & WDWMASK, x, y, w, h, status );
448                if  (Severe(status))  return;
449        } /*endif*/
450
451        if  (GCF_BGI & map)  {
452                bg_setcoo( map & WDWMASK, x, y, w, h, status );
453                if  (Severe(status))  return;
454        } /*endif*/
455
456        if  (GCF_MEM & map)  {
457                mm_setcoo( map & WDWMASK, x, y, w, h, status );
458                if  (Severe(status))  return;
459        } /*endif*/
460
461        if  (GCF_PSF & map)  {
462                ps_setcoo( x, y, w, h, status );
463                if  (Severe(status))  return;
464        } /*endif*/
465
466        if  (GCF_CALCOMP & map)  {
467                cc_setcoo( x, y, w, h, status );
468                if  (Severe(status))  return;
469        } /*endif*/
470
471        if  (GCF_TEK & map)  {
472                tk_setcoo( x, y, w, h, status );
473                if  (Severe(status))  return;
474        } /*endif*/
475
476        if  (GCF_HPGL & map)  {
477                hp_setcoo( x, y, w, h, status );
478                if  (Severe(status))  return;
479        } /*endif*/
480
481        if  (GCF_DJ & map)  {
482                dj_setcoo( x, y, w, h, status );
483                if  (Severe(status))  return;
484        } /*endif*/
485
486        if  (GCF_VWS & map)  {
487                vw_setcoo( map & WDWMASK, x, y, w, h, status );
488                if  (Severe(status))  return;
489        } /*endif*/
490
491} /* end of gc_setcoo */
492
493
494
495/*------------------------------------------------------------------------*/
496
497
498
499float gc_aspectratio( CHMAP map )
500
501/* returns ratio of width to height
502 *
503 * parameters of routine
504 * CHMAP      map;      input; channel map
505 *                      returns aspect ratio
506 */
507{
508        /* executable code */
509
510        if  (GCF_GEM & map)
511                return gm_aspectratio( map & WDWMASK );
512
513        if  (GCF_XWDW & map)
514                return xw_aspectratio( map & WDWMASK );
515
516        if  (GCF_BGI & map)
517                return bg_aspectratio( map & WDWMASK );
518
519        if  (GCF_PSF & map)
520                return ps_aspectratio();
521
522        if  (GCF_CALCOMP & map)
523                return cc_aspectratio();
524
525        if  (GCF_TEK & map)
526                return tk_aspectratio();
527
528        if  (GCF_HPGL & map)
529                return hp_aspectratio();
530
531        if  (GCF_DJ & map)
532                return dj_aspectratio();
533
534        if  (GCF_VWS & map)
535                return vw_aspectratio( map & WDWMASK );
536
537        return 1.0;
538
539} /* end of gc_aspectratio */
540
541
542
543/*------------------------------------------------------------------------*/
544
545
546
547void gc_moveto( CHMAP map, COOTYPE x, COOTYPE y )
548
549/* moves to position (x,y) in user coordinates
550 *
551 * parameters of routine
552 * CHMAP      map;      input; channel map
553 * COOTYPE    x, y;     input; location to move to
554 */
555{
556        /* executable code */
557
558        CSWAP(x,y)
559
560        if  (GCF_GEM & map)
561                gm_moveto( map & WDWMASK, x, y );
562
563        if  (GCF_XWDW & map)
564                xw_moveto( map & WDWMASK, x, y );
565
566        if  (GCF_BGI & map)
567                bg_moveto( map & WDWMASK, x, y );
568
569        if  (GCF_MEM & map)
570                mm_moveto( map & WDWMASK, x, y );
571
572        if  (GCF_PSF & map)
573                ps_moveto( x, y );
574
575        if  (GCF_CALCOMP & map)
576                cc_moveto( x, y );
577
578        if  (GCF_TEK & map)
579                tk_moveto( x, y );
580
581        if  (GCF_HPGL & map)
582                hp_moveto( x, y );
583
584        if  (GCF_DJ & map)
585                dj_moveto( x, y );
586
587        if  (GCF_VWS & map)
588                vw_moveto( map & WDWMASK, x, y );
589
590} /* end of gc_moveto */
591
592
593
594/*------------------------------------------------------------------------*/
595
596
597
598void gc_drawto( CHMAP map, int style, COOTYPE x, COOTYPE y )
599
600/* moves to position (x,y) in user coordinates
601 *
602 * parameters of routine
603 * CHMAP      map;      input; channel map
604 * int        style;    input; style block number
605 * COOTYPE    x, y;     input; location to move to
606 */
607{
608        /* executable code */
609
610        CSWAP(x,y)
611
612        if  (GCF_GEM & map)
613                gm_drawto( map & WDWMASK, style, x, y );
614
615        if  (GCF_XWDW & map)
616                xw_drawto( map & WDWMASK, style, x, y );
617
618        if  (GCF_BGI & map)
619                bg_drawto( map & WDWMASK, style, x, y );
620
621        if  (GCF_MEM & map)
622                mm_drawto( map & WDWMASK, style, x, y );
623
624        if  (GCF_PSF & map)
625                ps_drawto( style, x, y );
626
627        if  (GCF_CALCOMP & map)
628                cc_drawto( style, x, y );
629
630        if  (GCF_TEK & map)
631                tk_drawto( style, x, y );
632
633        if  (GCF_HPGL & map)
634                hp_drawto( style, x, y );
635
636        if  (GCF_DJ & map)
637                dj_drawto( style, x, y );
638
639        if  (GCF_VWS & map)
640                vw_drawto( map & WDWMASK, style, x, y );
641
642} /* end of gc_drawto */
643
644
645
646/*------------------------------------------------------------------------*/
647
648
649
650void gc_setpixel( CHMAP map, int style, COOTYPE x, COOTYPE y )
651
652/* sets pixel at position (x,y) in user coordinates
653 *
654 * parameters of routine
655 * CHMAP      map;      input; channel map
656 * int        style;    input; style block number
657 * COOTYPE    x, y;     input; location to move to
658 */
659{
660        /* executable code */
661
662        CSWAP(x,y)
663
664        if  (GCF_GEM & map)
665                gm_setpixel( map & WDWMASK, style, x, y );
666
667        if  (GCF_MEM & map)
668                mm_setpixel( map & WDWMASK, style, x, y );
669
670} /* end of gc_setpixel */
671
672
673
674/*------------------------------------------------------------------------*/
675
676
677
678void gc_arrayplot( CHMAP map, int style, long cnt, int red, COOTYPE xoff,
679        COOTYPE xinc, COOTYPE yoff, COOTYPE yarr[], COOTYPE yzoom, STATUS *status )
680
681/* plots an array of sample data
682 *
683 * parameters of routine
684 * CHMAP      map;       input; channel map
685 * int        style;     input; line style ID
686 * long       cnt;       input; length of data array
687 * int        red;       input; reduction factor for plotting
688 * COOTYPE    xoff;      input; x-position of first sample
689 * COOTYPE    xinc;      input; x increment
690 * COOTYPE    yoff;      input; y-position of first sample
691 * COOTYPE    yarr[];    input; sample data
692 * COOTYPE    yzoom;     input; zoom factor of sample data
693 * STATUS     *status;   output; return status
694 */
695{
696        /* executable code */
697
698        if  (cnt < 2)  return;
699
700        if  (GCF_GEM & map)  {
701                gm_arrayplot( map & WDWMASK, style, cnt, red, xoff, xinc,
702                        yoff, yarr, yzoom, status );
703                if  (Severe(status))  return;
704        } /*endif*/
705
706        if  (GCF_XWDW & map)  {
707                xw_arrayplot( map & WDWMASK, style, cnt, red, xoff, xinc,
708                        yoff, yarr, yzoom, status );
709                if  (Severe(status))  return;
710        } /*endif*/
711
712        if  (GCF_BGI & map)  {
713                bg_arrayplot( map & WDWMASK, style, cnt, red, xoff, xinc,
714                        yoff, yarr, yzoom, status );
715                if  (Severe(status))  return;
716        } /*endif*/
717
718        if  (GCF_MEM & map)  {
719                mm_arrayplot( map & WDWMASK, style, cnt, red, xoff, xinc,
720                        yoff, yarr, yzoom, status );
721                if  (Severe(status))  return;
722        } /*endif*/
723
724        if  (GCF_PSF & map)  {
725                ps_arrayplot( style, cnt, red, xoff, xinc, yoff, yarr,
726                        yzoom, status );
727                if  (Severe(status))  return;
728        } /*endif*/
729
730        if  (GCF_CALCOMP & map)  {
731                cc_arrayplot( style, cnt, red, xoff, xinc, yoff, yarr,
732                        yzoom, status );
733                if  (Severe(status))  return;
734        } /*endif*/
735
736        if  (GCF_TEK & map)  {
737                tk_arrayplot( style, cnt, red, xoff, xinc, yoff, yarr,
738                        yzoom, status );
739                if  (Severe(status))  return;
740        } /*endif*/
741
742        if  (GCF_HPGL & map)  {
743                hp_arrayplot( style, cnt, red, xoff, xinc, yoff, yarr,
744                        yzoom, status );
745                if  (Severe(status))  return;
746        } /*endif*/
747
748        if  (GCF_DJ & map)  {
749                dj_arrayplot( style, cnt, red, xoff, xinc, yoff, yarr,
750                        yzoom, status );
751                if  (Severe(status))  return;
752        } /*endif*/
753
754        if  (GCF_VWS & map)  {
755                vw_arrayplot( map & WDWMASK, style, cnt, red, xoff, xinc,
756                        yoff, yarr, yzoom, status );
757                if  (Severe(status))  return;
758        } /*endif*/
759
760} /* end of gc_arrayplot */
761
762
763
764/*------------------------------------------------------------------------*/
765
766
767
768void gc_erase( CHMAP map )
769
770/* clears channel
771 *
772 * parameters of routine
773 * CHMAP      map;       input; channel map
774 */
775{
776        /* executable code */
777
778        if  (GCF_GEM & map)
779                gm_erase( map & WDWMASK );
780
781        if  (GCF_XWDW & map)
782                xw_erase( map & WDWMASK );
783
784        if  (GCF_BGI & map)
785                bg_erase( map & WDWMASK );
786
787        if  (GCF_MEM & map)
788                mm_erase( map & WDWMASK );
789
790        if  (GCF_PSF & map)
791                ps_erase();
792
793        if  (GCF_CALCOMP & map)
794                cc_erase();
795
796        if  (GCF_TEK & map)
797                tk_erase();
798
799        if  (GCF_HPGL & map)
800                hp_erase();
801
802        if  (GCF_DJ & map)
803                dj_erase();
804
805        if  (GCF_VWS & map)
806                vw_erase( map & WDWMASK );
807
808} /* end of gc_erase */
809
810
811
812/*------------------------------------------------------------------------*/
813
814
815
816void gc_text( CHMAP map, int style, COOTYPE x, COOTYPE y, char text[] )
817
818/* writes text to window
819 *
820 * parameters of routine
821 * CHMAP      map;        input; channel map
822 * int        style;      input; character style block number
823 * COOTYPE    x, y;       input; text position
824 * char       text[];     input; output text
825 */
826{
827        /* executable code */
828
829        CSWAP(x,y)
830
831        if  (GCF_GEM & map)
832                gm_text( map & WDWMASK, style, x, y, text );
833
834        if  (GCF_XWDW & map)
835                xw_text( map & WDWMASK, style, x, y, text );
836
837        if  (GCF_BGI & map)
838                bg_text( map & WDWMASK, style, x, y, text );
839
840        if  (GCF_MEM & map)
841                mm_text( map & WDWMASK, style, x, y, text );
842
843        if  (GCF_PSF & map)
844                ps_text( style, x, y, text );
845
846        if  (GCF_CALCOMP & map)
847                cc_text( style, x, y, text );
848
849        if  (GCF_TEK & map)
850                tk_text( style, x, y, text );
851
852        if  (GCF_HPGL & map)
853                hp_text( style, x, y, text );
854
855        if  (GCF_DJ & map)
856                dj_text( style, x, y, text );
857
858        if  (GCF_VWS & map)
859                vw_text( map & WDWMASK, style, x, y, text );
860
861} /* end of gc_text */
862
863
864
865/*------------------------------------------------------------------------*/
866
867
868
869void gc_write( CHMAP map, char text[] )
870
871/* writes text to window at current write position
872 *
873 * parameters of routine
874 * CHMAP      map;          input; channel map
875 * char       text[];       input; output text
876 */
877{
878        /* executable code */
879
880        if  (GCF_GEM & map)
881                gm_write( map & WDWMASK, text );
882
883        if  (GCF_XWDW & map)
884                xw_write( map & WDWMASK, text );
885
886        if  (GCF_BGI & map)
887                bg_write( map & WDWMASK, text );
888
889        if  (GCF_STDCH & map)
890                printf( "%s", text );
891
892        if  (GCF_VWS & map)
893                vw_write( map & WDWMASK, text );
894
895        if  (GCF_TEK & map)
896                tk_write( text );
897
898        if  (GCF_EXTERN & map && gcv_writeext != NULL)
899                (*gcv_writeext)( text );
900
901} /* end of gc_write */
902
903
904
905/*------------------------------------------------------------------------*/
906
907
908
909void gc_wrtch( CHMAP map, char ch )
910
911/* writes a single character to channel
912 *
913 * parameters of routine
914 * CHMAP      map;         input; channel map
915 * char       ch;          input; char to be written
916 */
917{
918        /* executable code */
919
920        if  (GCF_GEM & map)
921                gm_wrtch( map & WDWMASK, ch );
922
923        if  (GCF_XWDW & map)
924                xw_wrtch( map & WDWMASK, ch );
925
926        if  (GCF_BGI & map)
927                bg_wrtch( map & WDWMASK, ch );
928
929        if  (GCF_STDCH & map)
930                printf( "%c", ch );
931
932        if  (GCF_VWS & map)
933                vw_wrtch( map & WDWMASK, ch );
934
935        if  (GCF_TEK & map)
936                tk_wrtch( ch );
937
938} /* end of gc_wrtch */
939
940
941
942/*------------------------------------------------------------------------*/
943
944
945
946int gc_txtwidth( CHMAP map )
947
948/* returns width of channel in characters
949 *
950 * parameters of routine
951 * CHMAP      map;      input; channel map
952 */
953{
954        /* executable code */
955
956        if  (GCF_GEM & map)
957                return gm_txtwidth( map & WDWMASK );
958
959        if  (GCF_BGI & map)
960                return bg_txtwidth( map & WDWMASK );
961
962        if  (GCF_STDCH & map)
963                return 80;
964
965        return 80;
966
967} /* end of gc_txtwidth */
968
969
970
971/*------------------------------------------------------------------------*/
972
973
974
975int gc_txtheight( CHMAP map )
976
977/* returns height of window in characters
978 *
979 * parameters of routine
980 * CHMAP      wdw;     input; channel map
981 */
982{
983        /* executable code */
984
985        if  (GCF_GEM & map)
986                return gm_txtheight( map & WDWMASK );
987
988        if  (GCF_BGI & map)
989                return bg_txtheight( map & WDWMASK );
990
991        if  (GCF_STDCH & map)
992                return 24;
993
994        return 24;
995
996} /* end of gc_txtheight */
997
998
999
1000/*------------------------------------------------------------------------*/
1001
1002
1003
1004float gc_chheight( CHMAP map )
1005
1006/* returns current character height in window "wdw"
1007 *
1008 * parameter of routine
1009 * CHMAP     map;      input; channel map
1010 */
1011{
1012        /* executable code */
1013
1014        if  (GCF_GEM & map)
1015                return gm_chheight( map & WDWMASK );
1016
1017        if  (GCF_XWDW & map)
1018                return xw_chheight( map & WDWMASK );
1019
1020        if  (GCF_BGI & map)
1021                return bg_chheight( map & WDWMASK );
1022
1023        return 0.0;
1024
1025} /* end of gc_chheight */
1026
1027
1028
1029/*------------------------------------------------------------------------*/
1030
1031
1032
1033void gc_read( CHMAP map, int maxlth, char text[] )
1034
1035/* reads text from terminal
1036 *
1037 * parameters of routine
1038 * CHMAP    map;          input; channel map
1039 * int      maxlth;       input; maximum length of text
1040 * char     text[];       output; text read
1041 */
1042{
1043        /* executable code */
1044
1045        if  (GCF_GEM & map)  {
1046                gm_read( map & WDWMASK, maxlth, text );
1047                return;
1048        } /*endif*/
1049
1050        if  (GCF_XWDW & map)  {
1051                xw_read( map & WDWMASK, maxlth, text );
1052                return;
1053        } /*endif*/
1054
1055        if  (GCF_BGI & map)  {
1056                bg_read( map & WDWMASK, maxlth, text );
1057                return;
1058        } /*endif*/
1059
1060        if  (GCF_VWS & map)  {
1061                vw_read( map & WDWMASK, maxlth, text );
1062                return;
1063        } /*endif*/
1064
1065        fgets( text, maxlth, stdin );
1066
1067} /* end of gc_read */
1068
1069
1070
1071/*------------------------------------------------------------------------*/
1072
1073
1074
1075void gc_getloc( CHMAP map, COOTYPE *x, COOTYPE *y, char *ch )
1076
1077/* requests mouse position in window
1078 *
1079 * parameters of routine
1080 * CHMAP      map;        input; channel map
1081 * COOTYPE    *x, *y;     output; location selected
1082 * char       *ch;        output; key pressed
1083 */
1084{
1085        /* executable code */
1086
1087        if  (GCF_GEM & map)  {
1088                gm_getloc( map & WDWMASK, x, y, ch );
1089                CSWAP(*x,*y)
1090                return;
1091        } /*endif*/
1092
1093        if  (GCF_XWDW & map)  {
1094                xw_getloc( map & WDWMASK, x, y, ch );
1095                CSWAP(*x,*y)
1096                return;
1097        } /*endif*/
1098
1099        if  (GCF_BGI & map)  {
1100                bg_getloc( map & WDWMASK, x, y, ch );
1101                CSWAP(*x,*y)
1102                return;
1103        } /*endif*/
1104
1105        if  (GCF_VWS & map)  {
1106                vw_getloc( map & WDWMASK, x, y, ch );
1107                CSWAP(*x,*y)
1108                return;
1109        } /*endif*/
1110
1111        if  (GCF_TEK & map)  {
1112                tk_getloc( x, y, ch );
1113                CSWAP(*x,*y)
1114                return;
1115        } /*endif*/
1116
1117} /* end of gc_getloc */
1118
1119
1120
1121/*------------------------------------------------------------------------*/
1122
1123
1124
1125void gc_set_outputdir( char dir[], STATUS *status )
1126
1127/* sets scratch directory
1128 *
1129 * parameters of routine
1130 * char      dir[];     input; new directory name of scratch path
1131 * STATUS    *status;   output; return status
1132 */
1133{
1134        /* executable code */
1135
1136        gm_set_outputdir( dir, status );
1137        if  (Severe(status))   return;
1138        bg_set_outputdir( dir, status );
1139        if  (Severe(status))   return;
1140        ps_set_outputdir( dir, status );
1141        if  (Severe(status))   return;
1142        cc_set_outputdir( dir, status );
1143        if  (Severe(status))   return;
1144        tk_set_outputdir( dir, status );
1145        if  (Severe(status))   return;
1146        hp_set_outputdir( dir, status );
1147        if  (Severe(status))   return;
1148        dj_set_outputdir( dir, status );
1149        if  (Severe(status))   return;
1150        xw_set_outputdir( dir, status );
1151        if  (Severe(status))  return;
1152        vw_set_outputdir( dir, status );
1153        if  (Severe(status))  return;
1154
1155} /* end of gc_set_outputdir */
1156
1157
1158
1159/*------------------------------------------------------------------------*/
1160
1161
1162
1163void gc_set_inputdir( char dir[], STATUS *status )
1164
1165/* sets input directory
1166 *
1167 * parameters of routine
1168 * char      dir[];     input; new directory name
1169 * STATUS    *status;   output; return status
1170 */
1171{
1172        /* executable code */
1173
1174        gm_set_inputdir( dir, status );
1175        if  (Severe(status))   return;
1176        bg_set_inputdir( dir, status );
1177        if  (Severe(status))   return;
1178        ps_set_inputdir( dir, status );
1179        if  (Severe(status))   return;
1180        cc_set_inputdir( dir, status );
1181        if  (Severe(status))   return;
1182        tk_set_inputdir( dir, status );
1183        if  (Severe(status))   return;
1184        hp_set_inputdir( dir, status );
1185        if  (Severe(status))   return;
1186        dj_set_inputdir( dir, status );
1187        if  (Severe(status))   return;
1188        xw_set_inputdir( dir, status );
1189        if  (Severe(status))  return;
1190        vw_set_inputdir( dir, status );
1191        if  (Severe(status))  return;
1192
1193} /* end of gc_set_inputdir */
1194
1195
1196
1197/*------------------------------------------------------------------------*/
1198
1199
1200
1201void gc_setpar( CHMAP map, char item[], char value[], STATUS *status )
1202
1203/* sets channel specific parameters
1204 *
1205 * parameters of routine
1206 * CHMAP      map;       input; channel map
1207 * char       item[];    input; name of item to be changed
1208 * char       value[];   input; new value of item
1209 * STATUS     *status;   output; return status
1210 */
1211{
1212        /* executable code */
1213
1214        if  (GCF_GEM & map)  {
1215                gm_setpar( item, value, status );
1216                if  (Severe(status))  return;
1217        } /*endif*/
1218
1219        if  (GCF_BGI & map)  {
1220                bg_setpar( item, value, status );
1221                if  (Severe(status))  return;
1222        } /*endif*/
1223
1224        if  (GCF_PSF & map)  {
1225                ps_setpar( item, value, status );
1226                if  (Severe(status))  return;
1227        } /*endif*/
1228
1229        if  (GCF_CALCOMP & map)  {
1230                cc_setpar( item, value, status );
1231                if  (Severe(status))  return;
1232        } /*endif*/
1233
1234        if  (GCF_TEK & map)  {
1235                tk_setpar( item, value, status );
1236                if  (Severe(status))  return;
1237        } /*endif*/
1238
1239        if  (GCF_HPGL & map)  {
1240                hp_setpar( item, value, status );
1241                if  (Severe(status))  return;
1242        } /*endif*/
1243
1244        if  (GCF_DJ & map)  {
1245                dj_setpar( item, value, status );
1246                if  (Severe(status))  return;
1247        } /*endif*/
1248
1249        if  (GCF_VWS & map)  {
1250                vw_setpar( item, value, status );
1251                if  (Severe(status))  return;
1252        } /*endif*/
1253
1254} /* end of gc_setpar */
1255
1256
1257
1258/*----------------------------------------------------------------------------*/
1259
1260
1261
1262void gc_update( void )
1263
1264/* updates window content
1265 * no parameters
1266 */
1267{
1268   /* executable code */
1269
1270   if  (GCF_XWDW & gcv_initmap)
1271      xw_updatewdw();
1272
1273} /* end of gc_update */
1274
1275
1276
1277/*------------------------------------------------------------------------*/
1278
1279
1280
1281void gc_flushbuffers( void )
1282
1283/* flushes all output buffers
1284 *
1285 * no parameters
1286 */
1287{
1288   /* executable code */
1289
1290        if  (GCF_XWDW & gcv_initmap)
1291                xw_flushbuffers();
1292
1293} /* end of gc_flushbuffers */
1294
1295
1296
1297/*------------------------------------------------------------------------*/
1298
1299
1300
1301void gc_playback( CHMAP src, CHMAP dst, char outf[], STATUS *status )
1302
1303/* copies content of channel src into channel dst
1304 *
1305 * parameters of routine
1306 * CHMAP      src;     input; source channel
1307 * CHMAP      dst;     input; destination channel
1308 * char       outf[];  output; output filename
1309 * STATUS     *status; output; return status
1310 */
1311{
1312        /* local variables */
1313        PAINTBOX pb;       /* paintbox routines */
1314
1315        /* executable code */
1316
1317#       ifdef BC_G_GEM
1318        if  (GCF_GEM & dst)  {
1319                pb.wpb.pbtype = GBC_WPAINT;
1320                pb.wpb.prepare = gm_prepare;
1321                pb.wpb.moveto = gm_moveto;
1322                pb.wpb.drawto = gm_drawto;
1323                pb.wpb.arrayplot = gm_arrayplot;
1324                pb.wpb.text = gm_text;
1325                pb.wpb.setstyle = gm_setstyle;
1326                pb.wpb.setcoo = gm_setcoo;
1327                pb.wpb.cleanup = gm_cleanup;
1328                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1329                if  (Severe(status))  return;
1330        } /*endif*/
1331#       endif  /* BC_G_GEM */
1332
1333#       ifdef BC_G_XWDW
1334        if  (GCF_XWDW & dst)  {
1335                pb.wpb.pbtype = GBC_WPAINT;
1336                pb.wpb.prepare = xw_prepare;
1337                pb.wpb.moveto = xw_moveto;
1338                pb.wpb.drawto = xw_drawto;
1339                pb.wpb.arrayplot = xw_arrayplot;
1340                pb.wpb.text = xw_text;
1341                pb.wpb.setstyle = xw_setstyle;
1342                pb.wpb.setcoo = xw_setcoo;
1343                pb.wpb.cleanup = xw_cleanup;
1344                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1345                if  (Severe(status))  return;
1346        } /*endif*/
1347#       endif  /* BC_G_XWDW */
1348
1349#       ifdef BC_G_BGI
1350        if  (GCF_BGI & dst)  {
1351                pb.wpb.pbtype = GBC_WPAINT;
1352                pb.wpb.prepare = bg_prepare;
1353                pb.wpb.moveto = bg_moveto;
1354                pb.wpb.drawto = bg_drawto;
1355                pb.wpb.arrayplot = bg_arrayplot;
1356                pb.wpb.text = bg_text;
1357                pb.wpb.setstyle = bg_setstyle;
1358                pb.wpb.setcoo = bg_setcoo;
1359                pb.wpb.cleanup = bg_cleanup;
1360                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1361                if  (Severe(status))  return;
1362        } /*endif*/
1363#       endif  /* BC_G_BGI */
1364
1365#       ifdef BC_G_POSTSCRIPT
1366        if  (GCF_PSF & dst)  {
1367                pb.ppb.pbtype = GBC_PPAINT;
1368                pb.ppb.prepare = ps_prepare;
1369                pb.ppb.moveto = ps_moveto;
1370                pb.ppb.drawto = ps_drawto;
1371                pb.ppb.arrayplot = ps_arrayplot;
1372                pb.ppb.text = ps_text;
1373                pb.ppb.setstyle = ps_setstyle;
1374                pb.ppb.setcoo = ps_setcoo;
1375                pb.ppb.cleanup = ps_cleanup;
1376                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1377                if  (Severe(status))  return;
1378        } /*endif*/
1379#       endif  /* BC_G_POSTSCRIPT */
1380
1381#       ifdef BC_G_CALCOMP
1382        if  (GCF_CALCOMP & dst)  {
1383                pb.ppb.pbtype = GBC_PPAINT;
1384                pb.ppb.prepare = cc_prepare;
1385                pb.ppb.moveto = cc_moveto;
1386                pb.ppb.drawto = cc_drawto;
1387                pb.ppb.arrayplot = cc_arrayplot;
1388                pb.ppb.text = cc_text;
1389                pb.ppb.setstyle = cc_setstyle;
1390                pb.ppb.setcoo = cc_setcoo;
1391                pb.ppb.cleanup = cc_cleanup;
1392                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1393                if  (Severe(status))  return;
1394        } /*endif*/
1395#       endif  /* BC_G_CALCOMP */
1396
1397#       ifdef BC_G_TEK
1398        if  (GCF_TEK & dst)  {
1399                pb.ppb.pbtype = GBC_PPAINT;
1400                pb.ppb.prepare = tk_prepare;
1401                pb.ppb.moveto = tk_moveto;
1402                pb.ppb.drawto = tk_drawto;
1403                pb.ppb.arrayplot = tk_arrayplot;
1404                pb.ppb.text = tk_text;
1405                pb.ppb.setstyle = tk_setstyle;
1406                pb.ppb.setcoo = tk_setcoo;
1407                pb.ppb.cleanup = tk_cleanup;
1408                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1409                if  (Severe(status))  return;
1410        } /*endif*/
1411#       endif  /* BC_G_TEK */
1412
1413#       ifdef BC_G_HPGL
1414        if  (GCF_HPGL & dst)  {
1415                pb.ppb.pbtype = GBC_PPAINT;
1416                pb.ppb.prepare = hp_prepare;
1417                pb.ppb.moveto = hp_moveto;
1418                pb.ppb.drawto = hp_drawto;
1419                pb.ppb.arrayplot = hp_arrayplot;
1420                pb.ppb.text = hp_text;
1421                pb.ppb.setstyle = hp_setstyle;
1422                pb.ppb.setcoo = hp_setcoo;
1423                pb.ppb.cleanup = hp_cleanup;
1424                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1425                if  (Severe(status))  return;
1426        } /*endif*/
1427#       endif  /* BC_G_HPGL */
1428
1429#       ifdef BC_G_DESKJET
1430        if  (GCF_DJ & dst)  {
1431                pb.ppb.pbtype = GBC_PPAINT;
1432                pb.ppb.prepare = dj_prepare;
1433                pb.ppb.moveto = dj_moveto;
1434                pb.ppb.drawto = dj_drawto;
1435                pb.ppb.arrayplot = dj_arrayplot;
1436                pb.ppb.text = dj_text;
1437                pb.ppb.setstyle = dj_setstyle;
1438                pb.ppb.setcoo = dj_setcoo;
1439                pb.ppb.cleanup = dj_cleanup;
1440                mm_playback( src & WDWMASK, dst & WDWMASK, &pb, outf, status );
1441                if  (Severe(status))  return;
1442        } /*endif*/
1443#       endif  /* BC_G_DESKJET */
1444
1445#       ifdef BC_G_VWS
1446        if  (GCF_VWS & dst)  {
1447                vw_cleanup( src & WDWMASK, outf, status );
1448        } /*endif*/
1449#       endif /* BC_G_VWS */
1450
1451} /* end of gc_playback */
1452
1453
1454
1455/*------------------------------------------------------------------------*/
1456
1457
1458
1459void gc_set_write_extern( void (*wr_rout)(char text[]) )
1460
1461/* sets the write routine for the external channel
1462 *
1463 * parameters of routine
1464 * void       (*wr_rout)(char text[]);    input; output routine
1465 */
1466{
1467        /* executable code */
1468
1469        gcv_writeext = wr_rout;
1470
1471} /* end of gc_set_write_extern */
1472
1473
1474
1475/*------------------------------------------------------------------------*/
1476
1477
1478
1479void gc_closeplot( CHMAP map, char outf[], STATUS *status )
1480
1481/* closes plot file on hardcopy channels
1482 *
1483 * parameters of routine
1484 * CHMAP      map;         input; channel map
1485 * char       outf[];      output; name of plotfile
1486 * STATUS     *status;     output; return status
1487 */
1488{
1489        /* executable code */
1490
1491        if  (GCF_PSF & map)  {
1492                ps_cleanup( outf, status );
1493                if  (Severe(status))  return;
1494        } /*endif*/
1495
1496        if  (GCF_CALCOMP & map)  {
1497                cc_cleanup( outf, status );
1498                if  (Severe(status))  return;
1499        } /*endif*/
1500
1501        if  (GCF_HPGL & map)  {
1502                hp_cleanup( outf, status );
1503                if  (Severe(status))  return;
1504        } /*endif*/
1505
1506        if  (GCF_DJ & map)  {
1507                dj_cleanup( outf, status );
1508                if  (Severe(status))  return;
1509        } /*endif*/
1510
1511        if  (GCF_VWS & map)  {
1512                vw_cleanup( map & WDWMASK, outf, status );
1513                if  (Severe(status))  return;
1514        } /*endif*/
1515
1516} /* end of gc_closeplot */
1517
1518
1519 
1520/*------------------------------------------------------------------------*/
1521
1522
1523
1524void gc_swap( BOOLEAN on_off )
1525
1526/* switches x-y swapping on or off
1527 *
1528 * parameters of routine
1529 * BOOLEAN    on_off;    input; TRUE=on, FALSE=off
1530 */
1531{
1532   /* executable code */
1533
1534   gcv_swap = on_off;
1535#  ifdef BC_G_XWINDOW
1536   xw_arrayswap( on_off );
1537#  endif
1538#  ifdef BC_G_POSTSCRIPT
1539   ps_arrayswap( on_off );
1540#  endif
1541#  ifdef BC_G_CALCOMP
1542   cc_arrayswap( on_off );
1543#  endif
1544#  ifdef BC_G_TEK
1545   tk_arrayswap( on_off );
1546#  endif
1547#  ifdef BC_G_HPGL
1548   hp_arrayswap( on_off );
1549#  endif
1550#  ifdef BC_G_BGI
1551   bg_arrayswap( on_off );
1552#  endif
1553#  ifdef BC_G_GEM
1554   gm_arrayswap( on_off );
1555#  endif
1556#  ifdef BC_G_DESKJET
1557   dj_arrayswap( on_off );
1558#  endif
1559#  ifdef BC_G_VWS
1560   vw_arrayswap( on_off );
1561#  endif
1562
1563} /* end of gc_swap */
1564
1565
1566
1567/*------------------------------------------------------------------------*/
Note: See TracBrowser for help on using the repository browser.