aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/sgikern/sgiopen.x
blob: 5164ecd73071d9b31d9f6d4dfa660a450df356a2 (plain) (blame)
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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<gki.h>
include	"sgi.h"

# SGI_OPEN -- Install the SGI 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 sgi_open (devname, dd)

char	devname[ARB]		# nonnull for forced output to a device
int	dd[ARB]			# device table to be initialized

pointer	sp, devns
int	len_devname
int	locpr(), strlen()
extern	sgi_openws(), sgi_closews(), sgi_clear(), sgi_cancel()
extern	sgi_flush(), sgi_polyline(), sgi_polymarker(), sgi_text()
extern	sgi_fillarea(), sgi_putcellarray(), sgi_plset()
extern	sgi_pmset(), sgi_txset(), sgi_faset()
extern	sgi_escape()
include	"sgi.com"

begin
	call smark (sp)
	call salloc (devns, SZ_FNAME, TY_SHORT)

	# Flag first pass.  Save forced device name in common for OPENWS.
	# Zero the frame and instruction counters.

	g_kt = NULL
	g_nframes = 0
	g_ndraw = 0
	call strcpy (devname, g_device, SZ_GDEVICE)

	# Install the device driver.

	dd[GKI_OPENWS]		= locpr (sgi_openws)
	dd[GKI_CLOSEWS]		= locpr (sgi_closews)
	dd[GKI_DEACTIVATEWS]	= 0
	dd[GKI_REACTIVATEWS]	= 0
	dd[GKI_MFTITLE]		= 0
	dd[GKI_CLEAR]		= locpr (sgi_clear)
	dd[GKI_CANCEL]		= locpr (sgi_cancel)
	dd[GKI_FLUSH]		= locpr (sgi_flush)
	dd[GKI_POLYLINE]	= locpr (sgi_polyline)
	dd[GKI_POLYMARKER]	= locpr (sgi_polymarker)
	dd[GKI_TEXT]		= locpr (sgi_text)
	dd[GKI_FILLAREA]	= locpr (sgi_fillarea)
	dd[GKI_PUTCELLARRAY]	= locpr (sgi_putcellarray)
	dd[GKI_SETCURSOR]	= 0
	dd[GKI_PLSET]		= locpr (sgi_plset)
	dd[GKI_PMSET]		= locpr (sgi_pmset)
	dd[GKI_TXSET]		= locpr (sgi_txset)
	dd[GKI_FASET]		= locpr (sgi_faset)
	dd[GKI_GETCURSOR]	= 0
	dd[GKI_GETCELLARRAY]	= 0
	dd[GKI_ESCAPE]		= locpr (sgi_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 sgi_openws (Mems[devns], len_devname, NEW_FILE)
	}

	call sfree (sp)
end