-
Notifications
You must be signed in to change notification settings - Fork 83
/
crtsty.39
executable file
·458 lines (383 loc) · 19.6 KB
/
crtsty.39
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
-*-TEXT-*-
File: CRTSTY, Node: Top, Up: (DIR), Next: Introduction
CRTSTY is a program that supports various display terminals
not directly supported by ITS. 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 ITS and a "strange" display terminal. A "strange"
terminal is anything not supported by ITS 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 ITS
support. For example, it may have no command corresponding to one that
is required, or may need a non-standard escape sequence, or whatever.
In general these terminals are not numerous enough to justify putting
the support code directly into the system, and so CRTSTY exists.
In the usual case, all that is necessary is to furnish CRTSTY with the
terminal name:
:CRTSTY <name>
For example, one might say ":CRTSTY FOX" or ":CRTSTY H1500". The system
will now understand your terminal. This is not actually what goes on; a
full explanation will be given later.
File: CRTSTY, Node: Options, Up: Top, Previous: Introduction, Next: Terminals
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 NO TAB" has an
option named "SPEED", with an argument of 300, as well as an option
named "NO TAB", with no argument.
The following list of options is organized functionally, although there
is some overlapping; the categories used are:
* Menu:
* Terminal capabilities and parameters::
speed, ispeed, ospeed, height, width, no abs, no tabs,
no bell, no cleol, no cleos, no lid, no cid, scrlcount
* ITS options::
glass, sail, scroll
* startup options::
no warn, softok, no login, login
* user choice options::
[no] inverse, visbel, wholine, alarm, [no] smeol, steos,
no sii, no attach, tty, slave, debug, tpcbs, buffer, simulate
File: CRTSTY, Node: Terminal capabilities and parameters, Up: Options,
Next: ITS options, Previous: Options
You can override CRTSTY's default assumptions about terminal
capabilities and parameters with these options. For example,
if you had a cheap model of the HP2645 that lacked line insert
and delete, you could use ":CRTSTY HP2645 NO LID".
SPEED, ISPEED, OSPEED
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 ITS
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 down
and come in small bursts, especially when the system is loaded.
HEIGHT, PAGEL
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;
instead use ":TCTYP PAGEL N" after invoking CRTSTY. It is
important that CRTSTY know the actual hardware screen size, even
if ITS is told not to use all of it.
WIDTH, LINEL
Followed by a decimal number. The number of columns on
the terminals screen. Same cautions for HEIGHT hold here; it is
OK to use ":TCTYP WIDTH N-1" to shorten effective screen width,
but CRTSTY must always know the actual hardware size. Note that
TCTYP uses width specifications that are the number of columns
minus one. Thus ":CRTSTY FOO WIDTH 80" and ":TCTYP FOO WIDTH 79"
are equivalent.
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 giving a :TCTYP 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 ITS will provide better support if such
switches are turned off. Send mail to BUG-CRTSTY@MC if any of
these problems evidence themselves, so that permanent fixes can
be made.
SCRLCOUNT N
Tells CRTSTY that the terminal creates N blank lines on each
scroll (LF from last line of screen).
The following enable 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.
NO BELL - Tells CRTSTY that the terminal lacks a bell.
NO ABS - Tells CRTSTY that the terminal lacks absolute cursor
positioning.
NO TABS - Tells CRTSTY that the terminal lacks a tab command.
NO CLEOL - Tells CRTSTY that the terminal lacks a clear to end of
line command.
NO CLEOS - Tells CRTSTY that the terminal lacks a clear to end of
screen command.
NO LID - Tells CRTSTY that the terminal lacks line insert/delete
commands.
NO CID - Tells CRTSTY that the terminal lacks character
insert/delete commands.
File: CRTSTY, Node: ITS options, Up: Options,
Previous: Terminal capabilities and parameters, Next: startup options
GLASS - Same as :TCTYP GLASS.
SAIL - Same as :TCTYP SAIL. Tells ITS to display characters 0-37
and 177 directly.
SCROLL - Same as :TCTYP SCROLL. Tells ITS to scroll instead of
wrap when typeout reaches the bottom of the screen.
File: CRTSTY, Node: startup options, Up: Options, Previous: ITS options,
Next: user choice options
NO LOGIN - CRTSTY ^Z's a new HACTRN, but does not log the
user in automatically as it usually does.
LOGIN <name> - CRTSTY ^Z's a new HACTRN, and logs it in
automatically as <name>.
NO WARN - Suppress warning messages on startup, such as "interchanged keys"
messages. This can be useful when CRTSTY is invoked from a
DDT INIT file, and the user is sick and tired of seeing the same
warning again and again.
SOFTOK - Suppresses error check that complains if CRTSTY user
current terminal type is "software".
File: CRTSTY, Node: user choice options, Up: Options,
Previous: startup options
The user can control various random options.
[no] inverse, visbel, wholine, alarm,
[no] smeol, steos,
no sii, no attach, tty, slave, debug,
tpcbs, buffer, simulate
BUFFER N
Followed by a decimal number. Can be used to
specifically override the output buffer size. See the
description of the OSPEED option for the implications of this.
In general, using this option isn't recommended.
VISBEL - Send a visible printing sequence in addition to (or instead of, if
NO BELL is specified) all hardware bells, usually using
the standout mode of the terminal.
INVERSE - "Inverse Video". Reverses the sense of the entire
screen. Characters will be black-on-white.
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.
NO ATTACH - CRTSTY runs like any other job, under the user's HACTRN; it does
not :ATTACH itself and become top-level. ^Z will
bring the user back to his original HACTRN, stopping the CRTSTY.
SLAVE - To "slave" a STY; suppresses the ^Z of a new HACTRN, 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 NO ATTACH 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.
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 ITS TTY hackers.
Don't use it.
File: CRTSTY, Node: Terminals, Up: Top, Previous: Options, Next: Unsupported
This node may 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. 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: Terminals,
Next: LOGIN Inits
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 ?, 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 an ITS 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) and so do not qualify. This is not to say that these
terminals are unusable as ITS terminals, but that they cannot be used
as display terminals (e.g. for real-time editing in EMACS). Use
":TCTYP TEK" for the 4010 series, and ":TCTYP GLASS" for those CRT
terminals which cannot move their cursor. (*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; 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 (e.g. the ADM-3A) 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 ITS or CRTSTY, you are
welcome to request CRTSTY support for it. To do so send a message to
BUG-CRTSTY, that is do
:BUG CRTSTY
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 characters.)
[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
functions:
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? (should home)
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
the screen
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
"usefulness", 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. RUBOUT and the unshifted character are
then usually exchanged. Other common misfeatures include LF
being ignored or interpreted specially after CR.
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: Unsupported
If one simply puts :CRTSTY ... in one's init file, when one logs in, CRTSTY
will be started up, and will log in the user on the CRTSTY's STY. However,
this second login will also attempt to run CRTSTY and encounter an error unless
precautions are taken to prevent such recursion.
The way to prevent the recursion is as follows:
:DDTSYM TCTYP/
:IF N Q-%TNSFW
(:CRTSTY <the JCL you would use to run it by hand>
)
Note that all 's in the above are ALTMODE's, not Dollar-signs
This should be placed near the beginning of your init before anything real
is done. The first time through, you won't be on a STY so it will simply
run the CRTSTY, which will flush the DDT that was running the init, so no
further processing will be done on that run of the init. The second time
through, you will be on a STY, and the :IF conditional will fail and the
part between the ( and the ) will not be done. It also will not try to
run it if you are on a PTY, or using SUPDUP.
If you wish to have it ask you if you want to run CRTSTY, you can do the
following:
:DDTSYM TCTYP/
:IF N Q-%TNSFW
(:--CRTSTY--IF MORE 0
(:CRTSTY <the JCL you would use to run it by hand>
))
To prevent it from asking if you're on a TV, another layer is necessary:
:DDTSYM TCTYP/
:IF N Q-%TNSFW
(:IF N Q-%TNTV
(:--CRTSTY--IF MORE 0
(:CRTSTY <the JCL you would use to run it by hand>
)))
Another aproach is to only run it if you are on a dialup or coming in from the
net:
:DDTSYM TCTYP/
:IF N -%TNSFW
(:DDTSYM TTYTYP/
:IF N Q&<%TYDIL^_%TYSTY>
(:--CRTSTY--IF MORE 0
:CRTSTY <the JCL you would use to run it by hand>
)))
For more info on DDT see *note DDT: (DDT)TOP.
For more info on INIT files, and DDT conditionals,
see *note INITS: (DDT)XFILE.