diff options
Diffstat (limited to 'sys/gio/cursor/grcclose.x')
-rw-r--r-- | sys/gio/cursor/grcclose.x | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sys/gio/cursor/grcclose.x b/sys/gio/cursor/grcclose.x new file mode 100644 index 00000000..304a0904 --- /dev/null +++ b/sys/gio/cursor/grcclose.x @@ -0,0 +1,42 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <gio.h> +include "gtr.h" +include "grc.h" + +# GRC_CLOSE -- Close the workstation (kernel). Called by RCURSOR to close the +# kernel after a cursor read. Note that a cursor read may occur while the +# workstation is open, i.e., after gopen but before gclose, or after the +# workstation has been closed, i.e., after a plotting program terminates. +# If the workstation was already open (GKI_OPENWS) by the application when +# the cursor read occurred we must leave things as they were. + +procedure grc_close (fd, rc) + +int fd # graphics stream +pointer rc # rcursor descriptor + +pointer tr +pointer gtr_init() +errchk gtr_init + +begin + tr = gtr_init (fd) + + # Decrement the logical OPENWS count and issue the actual CLOSEWS + # only if the counter goes to zero. If the workstation was open + # but deactivated when grc_open() was called (WS_ACTIVE == NO), + # restore it to its former (deactivated) state. + + TR_WSOPEN(tr) = TR_WSOPEN(tr) - 1 + if (TR_WSOPEN(tr) <= 0) { + call gki_closews (fd, TR_DEVNAME(tr)) + TR_WSOPEN(tr) = 0 + TR_WSACTIVE(tr) = NO + } else if (TR_WSACTSAVE(tr) == NO) { + call gki_deactivatews (fd, 0) + TR_WSACTIVE(tr) = NO + } + + call gki_fflush (fd) +end |