1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <gset.h>
include <gki.h>
include "stdgraph.h"
# STG_OPEN -- Install the STDGRAPH kernel as a graphics kernel device driver.
# The device table DD consists of an array of the entry point addresses for
# the driver procedures. If a driver does not implement a particular
# instruction the table entry for that procedure may be set to zero, causing
# the interpreter to ignore the instruction.
procedure stg_open (devname, dd, in, out, xres, yres, hardchar)
char devname[ARB] # if nonnull, force output to device
int dd[ARB] # device table to be initialized
int in # input file
int out # output file
int xres # number of resolved pixels in X
int yres # number of resolved pixels in Y
int hardchar # use hardware character generator
bool first_time
pointer sp, devns
int len_devname
int locpr(), strlen()
extern stg_openws(), stg_closews(), stg_clear(), stg_cancel()
extern stg_flush(), stg_polyline(), stg_polymarker(), stg_text()
extern stg_fillarea(), stg_putcellarray(), stg_setcursor(), stg_plset()
extern stg_pmset(), stg_txset(), stg_faset(), stg_getcursor()
extern stg_getcellarray(), stg_escape()
extern stg_reactivatews(), stg_deactivatews()
include "stdgraph.com"
data first_time /true/
begin
call smark (sp)
call salloc (devns, SZ_FNAME, TY_SHORT)
if (first_time) {
g_nopen = 0
g_sg = NULL
g_tty = NULL
g_term = NULL
g_pbtty = NULL
g_cursor = 0
first_time = false
}
g_in = in
g_out = out
g_xres = xres
g_yres = yres
g_nopen = g_nopen + 1
g_stream = STDGRAPH
g_hardchar = hardchar
g_active = NO
g_enable = NO
g_message = NO
g_msgbuf = NULL
g_msgbuflen = 0
g_msglen = 0
call strcpy (devname, g_device, SZ_GDEVICE)
# Install the device driver.
dd[GKI_OPENWS] = locpr (stg_openws)
dd[GKI_CLOSEWS] = locpr (stg_closews)
dd[GKI_REACTIVATEWS] = locpr (stg_reactivatews)
dd[GKI_DEACTIVATEWS] = locpr (stg_deactivatews)
dd[GKI_MFTITLE] = 0
dd[GKI_CLEAR] = locpr (stg_clear)
dd[GKI_CANCEL] = locpr (stg_cancel)
dd[GKI_FLUSH] = locpr (stg_flush)
dd[GKI_POLYLINE] = locpr (stg_polyline)
dd[GKI_POLYMARKER] = locpr (stg_polymarker)
dd[GKI_TEXT] = locpr (stg_text)
dd[GKI_FILLAREA] = locpr (stg_fillarea)
dd[GKI_PUTCELLARRAY] = locpr (stg_putcellarray)
dd[GKI_SETCURSOR] = locpr (stg_setcursor)
dd[GKI_PLSET] = locpr (stg_plset)
dd[GKI_PMSET] = locpr (stg_pmset)
dd[GKI_TXSET] = locpr (stg_txset)
dd[GKI_FASET] = locpr (stg_faset)
dd[GKI_GETCURSOR] = locpr (stg_getcursor)
dd[GKI_GETCELLARRAY] = locpr (stg_getcellarray)
dd[GKI_ESCAPE] = locpr (stg_escape)
dd[GKI_SETWCS] = 0
dd[GKI_GETWCS] = 0
dd[GKI_UNKNOWN] = 0
# If a device was named open the workstation as well. This is
# necessary to permit processing of metacode files which do not
# contain the open workstation instruction.
len_devname = strlen (devname)
if (len_devname > 0) {
call achtcs (devname, Mems[devns], len_devname)
call stg_openws (Mems[devns], len_devname, NEW_FILE)
}
call sfree (sp)
end
|