diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/gio/stdgraph/stgwtty.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/gio/stdgraph/stgwtty.x')
-rw-r--r-- | sys/gio/stdgraph/stgwtty.x | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/sys/gio/stdgraph/stgwtty.x b/sys/gio/stdgraph/stgwtty.x new file mode 100644 index 00000000..c01bd93c --- /dev/null +++ b/sys/gio/stdgraph/stgwtty.x @@ -0,0 +1,118 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <ctype.h> +include <chars.h> +include "stdgraph.h" + +# STG_WRITETTY -- Write one or more lines of text to the terminal in text +# mode. If the workstation is currently activated normal output is to the +# status line, otherwise output is to the indicated stream (STDOUT or +# STDERR). If the worstation is activated and the text to be output is +# preceded by the EM code, the text is a message being sent by GIO to a user +# interface parameter, and the text is passed on as is without formatting for +# the status line. +# +# Terminal output is directed to the status line by the GD sequence, and +# graphics output is reenabled by the GE sequence. The output text should +# consist of only a single line, but if multiple lines are present they are +# output line by line, without the trailing newline, since the status line +# can display only a single line of text. +# +# NOTE - If output occurs while in graphics mode and the output text is newline +# terminated, the GE (graphics enable) sequence is output to restore the +# terminal to graphics mode before exiting. If the text is not newline +# terminated, e.g., if it is a prompt, the workstation is left in alpha mode, +# ready for a read from STDIN. Thus one can write a prompt to STDOUT and read +# the user response from STDIN, while in graphics mode. +# +# This procedure is called by pseudofile i/o (gio/cursor/prpsio) whenever a +# task writes to STDOUT or STDERR. + +procedure stg_writetty (fd, text, nchars) + +int fd #I output stream +char text[ARB] #I text to be output +int nchars #I nchars to be written + +int ip, delim +pointer sp, lbuf, op +include "stdgraph.com" +bool ttygetb() +errchk write + +begin + if (g_active == NO) { + # Workstation not activated (normal text mode); normal text output. + call write (fd, text, nchars) + call flush (fd) + + } else if (text[1] == EM || g_message == YES) { + # Workstation is activated; the output text is a message to be + # sent to a UI parameter. The output stream is assumed to be + # flushed before and after a UI message, so we assume that the + # control codes used to bracket the message are the first and + # last characters in the output write packets. Multiple writes + # may be used to write output text, and messages can be any + # length. If the output device does not support messaging (no + # "EM" capability) the messages are discarded. + + g_message = YES + if (ttygetb (g_tty, "EM")) + call write (g_out, text, nchars) + delim = text[nchars] + if (delim == GS || delim == US) + g_message = NO + + } else { + # Workstation is activated; write to status line. Writing + # anything when graphics is enabled causes the status line to be + # cleared; newline causes a graphics enable; the string "\n\n" + # will always clear the status line and leave the terminal in + # graphics mode, regardless of the state of g_enable when issued. + + call smark (sp) + call salloc (lbuf, SZ_LINE, TY_CHAR) + + if (g_enable == YES) + call stg_gdisab() + + op = lbuf + for (ip=1; ip <= nchars; ip=ip+1) { + if (text[ip] == '\n') { + if (g_enable == YES) + call stg_gdisab() + if (op > lbuf) + call write (g_out, Memc[lbuf], op-lbuf) + call stg_genab() + op = lbuf + } else { + Memc[op] = text[ip] + op = min (lbuf+SZ_LINE, op+1) + } + } + + # Output a partial line, leaving graphics disabled. + if (op > lbuf) { + if (g_enable == YES) + call stg_gdisab() + call write (g_out, Memc[lbuf], op-lbuf) + } + + call flush (g_out) + call sfree (sp) + } +end + + +# STG_PUTLINE -- Output an EOS delimited line of text to the graphics terminal +# with stg_writetty. + +procedure stg_putline (fd, text) + +int fd # output file +char text[ARB] # EOS delimited line of text +int strlen() + +begin + call stg_writetty (fd, text, strlen(text)) +end |