Trailing-Edge - PDP-10 Archives - mit_emacs_170_teco_1220 - info/
There are no other files named in the archive.

File: CRTSTY,  Node: Top,  Up: (DIR),  Next: Introduction

CRTSTY is a program that supports various display terminals not directly
supported by TOPS-20.  If you have problems with CRTSTY use @BUG CRTSTY
to report them.

* Menu:

* Introduction::	Introduction to CRTSTY
* Options::		Command line options
* Terminals::		Specific terminal types & features
* Unsupported::		What to do if your terminal is unsupported
* LOGIN Inits::		How to use CRTSTY from a LOGIN init

* New Terminals: (TERMS)TOP	Info for people planning on buying terminals

File: CRTSTY,  Node: Introduction,  Up: Top,  Previous: Top,  Next: Options

CRTSTY is a program which attempts to function as an invisible
Intermediary between TOPS-20 and a "strange" display terminal.  A
"strange" terminal is anything not supported by TOPS-20 itself.  To see
what support is available for your terminal, if any, see [*Note
Terminals: (INFO:TERMS)Top.]  For a variety of reasons, a terminal might
not be suitable for direct TOPS-20 support.  For example, it may have no
command corresponding to one that is required, or may need a non-
standard escape sequence, or whatever.  Since the monitor doesn't have
an infinite amount of space and, in general, these terminals are not
numerous enough to justify putting the support code directly into the
system CRTSTY exists.

In the usual case, all that is necessary is to furnish CRTSTY with the
terminal name and the host site, which in many cases will be this site,
Mit-Oz.  The minimum options for CRTSTY to work are:

		@CRTSTY <terminal-name> HOST <host-name>

For example, one might say "@CRTSTY FOX HOST MIT-OZ" or "@CRTSTY H1500

You will now be in a seperate job.  Login as yourself and the system
will understand your terminal.  You will notice (if you finger
yourself) that you have two jobs.  One will be in CRTSTY and the
other will be a TRUE finger of yourself.  Example:

@Finger .
-User-   GR --Full name--         -What- Idle TTY -Console location-
KEITH    T  Keith M. Gabryelski   FINGER     .124 OZ: My Current TTY.
                                  CRTSTY     .110 PREP: My Original TTY.

You will also notice, if your perform a @Information Termianl, that your
terminal type is Supdup-Nvt.  This is a "Standard terminal" that is
known by most systems.  When EXEC sends a special cursor character
control it will send it so a terminal that uses Supdup-Nvt will
understand it.  CRTSTY "Filters" these cursor control characters and
changes them to the cursor controls characters for the terminal you

More information on how CRTSTY works will be explained later.

File: CRTSTY, Node: Options, Up: Top, Previous: Introduction, Next: Unsupported

There are many options that can be specified while invoking CRTSTY, so
as to better match the particular terminal or user.  For example, some
particular models of a certain terminal may have unusual features or
options, which CRTSTY can take advantage of if it is told about them, or
they may lack some features which CRTSTY assumes are standard, and
CRTSTY must be prevented from using them.

Options are specified on the JCL line just like a terminal ID is,
separated by spaces or commas:

		@CRTSTY <terminal> <option1> <option2>...

Some options may take an argument, which must immediately follow the
option name; for example, "@CRTSTY FOX SPEED 300 NOTAB" has an
option named "SPEED", with an argument of 300, as well as an option
named "NOTAB", with no argument.

The following list of options is organized functionally, although there
is some overlapping; the categories used are:

* Menu:

* Parameters::	Speed, Ispeed, Ospeed, Height, Pagel, Width, Linel, Buffer
* Features::	Noabs, Notab, Nocleol, Nosail
* Hacks::	Nobell, Visbel,	Invers,	Grafix
* Startup::	Notop, Login, Slave, Nowarn, Tpcbs

File: CRTSTY,  Node: Parameters,  Up: Options,  Next: Features	

You can override CRTSTY's default assumptions about terminal parameters
with these options.


Are each followed by a decimal number, indicating the actual speed of
the terminal in bits per second.  This is primarily meant for terminals
connected in such a manner that TOPS-20 cannot determine the speed of
their communications line, for example, most terminals connected through
the ARPANET.  The speed should be one of the following:
	110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600.
The input speed is currently unimportant as far as CRTSTY is concerned.
The output speed, however, is used for two things:
  [1]  Padding.  Terminals require a certain amount of time to execute
	their functions; in some cases so much that pad characters must
	be sent.  The number of pads is a function of output speed.
  [2]  Output buffer size.  CRTSTY attempts to buffer one second worth of 
	output at a time.  If this buffer is too large, it will take a
	long time to stop any output when the user wants to (by a ^S for
	example).  If this buffer is too small, output will be slowed
	and come in small bursts, especially when the system is loaded.


Followed by a decimal number.  Can be used to specifically override the
output buffer size.  See above paragraph for the implications of this.
In general, using this option isn't really recommended.


Followed by a decimal number.  This should only be used to specify the
actual number of lines on a terminal's screen, for cases when CRTSTY's
default size is wrong.  Do not use it to force display into an area
smaller than the actual screen size; use a @TERMIANL LENGTH n to set
that.  It is important that CRTSTY know the actual hardware screen size,
even if TOPS-20 is told not to use all of it.


Followed by a decimal number.  The number of columns on the terminals
screen.  Same cautions for HEIGHT hold here; it is Ok to use @TERMINAL
to shorten effective screen width, but CRTSTY must always know the
actual hardware size.
	Note that some terminals may do unexpected things in the last
column of a line.  If the terminal is skipping an extra blank line
whenever the system prints a continued line (one with an ! at the end),
you can probably fix that by performing a @TERMINAL WIDTH n to set the
line length to one less than the actual screen width.  Some terminals
have "auto-linefeed" switches which cause a character written in the
last column to generate a CRLF; in general CRTSTY and TOPS-20 will
provide better support if such switches are turned off.  Send mail to
BUG-CRTSTY if any of these problems evidence themselves, so that
permanent fixes can be made.

File: CRTSTY, Node: Features, Up: Options, Previous: Parameters, Next: Hacks

Enables the user to disable the use of various features that CRTSTY
might normally believe a terminal capable of.  Meant for use in case
the terminal is not properly executing the feature for some reason, or
use of the feature is causing lossage (perhaps due to improper
implementation in CRTSTY).  Since these are features that usually can
be done in some other (though usually slower) way, these options might
enable successful use of the terminal.

NOABS - Do not use absolute cursor positioning functions.
NOTAB - Do not use hardware Tab.
NOSAIL - VT52 only, do not attempt to do SAIL character translation.

File: CRTSTY,  Node: Hacks,  Up: Options,  Previous: Features,  Next: Startup

The user can control various random options.

NOBELL - Tells CRTSTY not to send Bells (^G, 007) to the terminal.
	This has no effect on VISBEL.
VISBEL - Send a visible printing sequence in addition to (or instead of, if
	NOBELL is on) all hardware  bells, usually using the standout mode
	of the terminal.
ALARM <# mins> - If this option is given, CRTSTY will send a bell
	whenever terminal output happens after being idle for the specified
	number of minutes.  The idea is that you may want to be alerted
	from your book/desk/dinner by an unsolicited typeout of any form.
	Typein resets the "timer", as does typeout, so echo alone won't feep.
INVERS - "Inverse Video", for HP2640 and HP2546 only.  Reverses the sense of
	the entire screen.  Characters will be black-on-white. [Inverse
	Video can be very eye-straining, but do as you wish.  sigh.]
GRAFIX - ADDS980.  Some special graphics hack, ask BYRON@ML about it.

File: CRTSTY,  Node: Startup,  Up: Options,  Previous: Hacks, Next: Terminals

*Note*  I am not sure if this node is correct when using CRTSTY with
TOPS-20.  In a few days (probably never) I will check the validity of
this node though.

Various options that tell CRTSTY how to set itself up.  Normally
CRTSTY will kill all current jobs the user has, attaches itself as the
user's top level job, opens up a Pseudo-TTY (STY) channel, ^Z's the
STY to get a new EXEC then logs the user in again.

NOTOP - CRTSTY runs like any other job, under the user's EXEC; it does
	not @ATTACH itself and become top-level.  ^Z will bring the
	user back to his original TOPS-20, stopping CRTSTY. 

NOLOGIN - CRTSTY attaches itself and ^Z's a new EXEC, but does not log
	the user in automatically as it usually does.

SLAVE - To "slave" a STY; suppresses the ^Z of a new EXEC, and naturally
	doesn't log the user in either.  Also, logging out will not
	kill the STY or CRTSTY; it can be ^Z'd again manually.  Note
	that if NOTOP is not also given, there is no way to flush the
	CRTSTY 	short of gunning it down.  This can be useful for
	semi-permanent 	setups.

NOWARN - Suppress warning messages on startup, such as "interchanged
	keys" messages.  This can be useful when CRTSTY is invoked from
	a LOGIN.CMD file, and the user is sick and tired of seeing the
	same warning again and again.

TPCBS - A temporary debugging switch which turns off CRTSTY's use of
	%TPCBS (intelligent terminal ptcl) so as to produce weird errors
	with SCPOS for the edification of unbelieving TOPS-20 TTY hackers.
	Don't use it.

File: CRTSTY,  Node: Terminals,  Up: Top, Previous: Options, Next: LOGIN Inits

This node will eventually have a menu pointing at each possible terminal
type that CRTSTY will understand, with each subnode documenting various
relevant features which CRTSTY furnishes for that terminal and the like.
In the meantime, [*Note Terminals: (INFO;TERMS)Terminals.]  lists most
supported terminals and gives technical information about them, mostly
aimed toward a potential buyer.

For the time being, the VT52 is the only one described here owing to its
usefulness (and complexity for the unknowing CRTSTY user).

Basically CRTSTY's VT52 implementation turns on the "alternate keypad"
mode in the following ways:
Key			Function
Left blank (blue)	META		These 3 apply to next real char typed;
Center blank (red)	TOP		any combination may be used.  If you
Right blank (black)	CONTROL		make a mistake, then hit the following
Down arrow		Cancel previous keys	which does what it says.
Up arrow		CALL		As opposed to plain Control-Z
Left arrow		BACK-NEXT	(^_ for com-links etc.)
ENTER			CRTSTY-Escape   Tell CRTSTY to do something
Right arrow		BREAK		escape for SUPDUP, TELNET, and PTY
0-9			META-0 to META-9	Very handy as args in EMACS.

*Note:* that Escape (altmode) followed by a capital A, B, C, or D very
quickly has a small but non-zero chance of being interpreted as CALL,
Cancel-previous, BREAK, or BACK-NEXT.  This chance is usually dependent
upon the phase of the moon (POM) and your shoe size, but we have yet to
figure out how these two variables are worked into the algorithm.  If
you don't use CAPS LOCK you'll probably never see this, but if you do,
the solution is (unfortunately) to not type with lightning speed.

The ENTER key is a key that signals CRTSTY that you want to tell it
something.  It saves the bottom line of your screen, and prompts with a
"CRTSTY-->" and waits for a single character.  It understands the
following commands on any terminal:

D -- Dump the screen image into the file .TEMP.;<uname> SCREEN
H -- Send a HELP character to the program
F -- Toggle FEEP mode (the ALARM option in JCL) whereby a BEEP is sent if you
     get output after being idle for both input and output for more than a
     JCL-specified amount of time.

In addition, individual terminals may specify additional operations.

File: CRTSTY, Node: Unsupported, Up: Top, Previous: Options, Next: Terminals

It is generally a simple matter to add support for a new terminal to CRTSTY.
This section will attempt to describe certain minimum requirements the terminal
must satisfy in order to be supportable.  It then gives the procedure for
requesting CRTSTY support for your terminal.

The first step is to check to see if your terminal is already supported.  The
most up to date information can be gained by typing @CRTSTY TTY ?, which will
cause CRTSTY to list the terminals it knows about.  However, sometimes the 6
letter names can be difficult to recognize, therefore one might want to look
over the menu in [*Note Terminals:  (INFO;TERMS)Terminals.]

In order for a terminal to be usable as a TOPS-20 display terminal it must be
able to selectively erase portions of the screen and to move its cursor to any
position on the screen.  While these requirements are satisfied by most display
terminals there are some which do not.  For example a storage scope terminal
(e.g. the Tektronix 4010 series terminals) cannot selectively erase - only the
whole screen can be cleared.  Some terminals cannot move the cursor anywhere on
the screen, (e.g. the ADM-3 (the ADM-3a does, however, have this capability and
is supported by CRTSTY).) and so do not qualify.  This is not to say that these
terminals are unusable as TOPS-20 terminals, but that they cannot be used as
display terminals (e.g. for real-time editing in EMACS).  Use @TERMINAL GLASS
for those CRT terminals which cannot move their cursor or in other ways losing.
(*Note (INFO;TCTYP)Top.)

If the terminal satisfies the above two requirements then it is possible for
CRTSTY to support it.  However some terminals which meet these requirements are
painful to use as display terminals because they lack features which must be
simulated.  For example some terminals lack any easy means of erasing to the
end of a line or to the end of the screen (e.g. ADM-3a's); to simulate these
basic erasure commands CRTSTY must erase character by character to the end of
line/screen.  This is often unbearable, especially at slow speeds.  Such
terminals are better used as "glass teletypes" rather than display terminals.
If you have such a terminal we highly recomend that you use it as a glass TTY
instead of trying to use CRTSTY.  If you do use CRTSTY, be content that it
works as well as it does; suggestions for display optimization on such
terminals are given the very lowest priority and will probably never be done.

At slow speeds even terminals with the basic erasure commands can be painful to
use as editing terminals unless they have the ability to insert a new line on
the screen (moving subsequent lines down), delete a line from the screen
(moving subsequent lines up), insert a character in a line, and delete a
character from a line.

If your terminal has all the necessary features (selective erase and cursor
positioning), and is not supported by TOPS-20 or CRTSTY, you are welcome to
request CRTSTY support for it.  To do so send a message to BUG-CRTSTY, that is


and give a detailed description of the terminal.  If you simply ask for support
without giving a description we will at best ask for the details, or at worst
ignore you.  To support a terminal we need to know the following things:

(Please do not specify commands in hex, or use obscure ASCII names for control

[1] The size of the screen, i.e. the no. of characters per line and the no. of\    lines on the screen.

[2] The commands which should be sent to perform each of the following

a.  Move cursor up one line.
b.  Move cursor down one line - usually this is LF (^J, 012).
c.  Move cursor back one character position - usually this is BS (^H, 010).
d.  Move cursor forward one character position.
e.  Move cursor to "home" position - For our purposes, this better be the upper
    left corner.
f.  Move cursor to beginning of line - usually CR (^M, 015).
g.  Move cursor to arbitrary position on screen ("absolute move").
h.  Erase to end of line - say whether it erases the complete line the cursor
    is on (bad) or just everything to the right of cursor (good).
i.  Erase to end of screen - similarly, will this clobber chars to the left of
    the cursor?  (It shouldn't).
j.  Erase whole screen - does it also move the cursor?  (it should move the
    cursor to the HOME position).
k.  Insert line.
l.  Delete line.
m.  Insert character (or enter/exit insert character mode).
n.  Delete character.
o.  Ring bell - usually BEL (^G, 007).
p.  Set tab stops - If tabs are not settable, or defaults are furnished,
    specify tab size (usually this is 8).
q.  Tab - usually HT (^I, 011).

[3] What the terminal does when a character is typed when the cursor is on the
    last column of a line.  Some terminals remain in the last column after the
    character is typed, others automatically CRLF.  If there is a choice (e.g.
    a switch) the former (remaining in the last column) is preferred.

[4] What the terminal does if you attempt to move down off the edges of the

a.  by LineFeed off bottom
b.  by cursor position command off the bottom
c.  move off the bottom by an auotmatic CRLF off the last line
d.  cursor position off the right, left and top of the screen.

[5] A list of functions which might require padding at some speeds and the
    amount of padding required (this is best expressed as the amount of time
    required to perform the operation, but can also be given as the no. of pad
    characters required at each speed).

[6] Also any other features which might be useful.  If in doubt as to "useful-
    ness", describe them anyway; who knows?

[7] Any misfeatures which CRTSTY should try to correct for.  For example many
    terminals have poor keyboard layouts which CRTSTY can correct for by
    exchanging certain keys.  The most common such switch is done for terminals
    where RUBOUT can only be typed with the SHIFT key down (e.g. ADM-3a).
    RUBOUT and the unshifted character are then usually exchanged.  Other
    common misfeatures include LF being ignored or interpreted specially after

It isn't necessary that a terminal be able to do everything listed above (in
fact, much of CRTSTY's benefit comes from simulating those which the terminal
can't do), however, be sure to furnish some answer for all of the items;
otherwise we'll probably have to ask you about it anyway.

File: CRTSTY, Node: LOGIN Inits, Up: Top, Previous: Terminals

If one simply puts CRTSTY ... in one's LOGIN.CMD file, when one logs in,
CRTSTY will be started up, and the user will have to login again.
However, this second login will also attempt to run CRTSTY and encounter
an error unless precautions are taken to prevent such recursion. (e.g.
use QLOGIN which doesn't doesn't do a TAKE LOGIN.CMD when it logs you in.)