aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/cursor/gtrreset.x
blob: 36c55a9a7cd329c693aa17ca59667ff9a418cd8b (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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<error.h>
include	<gio.h>
include	"gtr.h"

# GTR_RESET -- Reset the graphics system.  Disconnect all connected subkernels
# and free all file descriptors and memory.

procedure gtr_reset (status)

int	status				# not used (req. for ONEXIT)

pointer	tr
int	stream
bool	streq()
include	"gtr.com"

begin
	do stream = STDGRAPH, STDPLOT {
	    tr = trdes[stream]
	    if (tr == NULL)
		next

	    iferr {
		# Close device graphcap descriptor.
		if (TR_TTY(tr) != NULL)
		    call ttycdes (TR_TTY(tr))

		# Disconnect old kernel.
		if (streq (TR_KERNFNAME(tr), "cl"))
		    call stg_close()
		else if (TR_DEVNAME(tr) != EOS && TR_KERNFNAME(tr) != EOS) {
		    call gtr_disconnect (TR_PID(tr),
			TR_IN(tr), TR_OUT(tr), stream)
		    TR_PID(tr) = NULL
		    TR_IN(tr) = NULL
		    TR_OUT(tr) = NULL
		}
	    } then {
		TR_DEVNAME(tr) = EOS
		call erract (EA_WARN)
	    } else
		TR_DEVNAME(tr) = EOS

	    # Free all storage.
	    call mfree (TR_FRAMEBUF(tr), TY_SHORT)
	    call mfree (TR_SCRATCHBUF(tr), TY_SHORT)
	    call mfree (tr, TY_STRUCT)

	    trdes[stream] = NULL
	}
end