1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-05 11:04:02 +00:00

Added PR.

This commit is contained in:
Eric Swenson
2016-12-05 21:56:10 -08:00
committed by Lars Brinkhoff
parent a0f2529bf2
commit 95cb6f4a9e
6 changed files with 3113 additions and 0 deletions

View File

@@ -122,6 +122,7 @@ from scratch.
- DCROCK, digital watch.
- JOBS, list jobs by category
- HSNDEV, HSNAME device
- PR, print out various system documentation
6. A brand new host table is built from the host table source and
installed into SYSBIN; HOSTS3 > using H3MAKE.

View File

@@ -690,6 +690,24 @@ expect ":KILL"
respond "*" ":link device;jobdev hs,device;jobdev hsname\r"
respond "*" ":link device;jobdev hf,device;jobdev hsname\r"
# pr
respond "*" ":midas sys1;ts pr_sysen1;pr\r"
expect ":KILL"
respond "*" ":link sys1;ts call,sys1;ts pr\r"
respond "*" ":link sys1;ts .call,sys1;ts pr\r"
respond "*" ":link sys1;ts uuo,sys1;ts pr\r"
respond "*" ":link sys1;ts uset,sys1;ts pr\r"
respond "*" ":link sys1;ts suset,sys1;ts pr\r"
respond "*" ":link sys1;ts doc,sys1;ts pr\r"
respond "*" ":link sys1;ts intrup,sys1;ts pr\r"
respond "*" ":link sys1;ts ttyvar,sys1;ts pr\r"
respond "*" ":link .info.;its .calls,sysdoc;.calls >\r"
respond "*" ":link .info.;its uuos,sysdoc;uuos >\r"
respond "*" ":link .info.;its usets,sysdoc;usets >\r"
respond "*" ":link .info.;its %pi,sysdoc;%pi >\r"
respond "*" ":link .info.;its ttyvar,sysdoc;ttyvar >\r"
# ndskdmp tape
respond "*" ":link kshack;good ram,.;ram ram\r"
respond "*" ":link kshack;ddt bin,.;@ ddt\r"

290
doc/sysdoc/%pi.105 Normal file
View File

@@ -0,0 +1,290 @@
ITS INTERRUPTS:
This file attempts to maintain up-to-date documentation on
ITS interrupts. Those wonderful
souls who update the information in any way (additions,
deletions, corrections) should describe their
modifications in a brief note to INFO-ITS@AI so
that interested parties can correct their copies or
conceptions without needing to print or read the
entire file again. For example:
:QMAIL INFO-ITS@AI I added more details to the %PIJST interrupt ^C
If you want to be put on the INFO-ITS mailing list,
just say so in a message to it.
-------------------------------------------------
<Most of ITS INTRUP is not here...>

FIRST The Interrupt Bits in the First Interrupt Word.
The interrupt classes are:
[1] stops job and interrupts superior (fatal intr)
[2] stops job and interrupts superior unless enabled and undeferred
[3] does nothing unless enabled; waits if deferred.
Bits in the left half have two names: %PI... as a bit in the word,
and %PJ... shifted down by 18. bits.
The following interrupts abort the instruction, and leave the PC pointing
before the instruction if %OPOPC is 1 (as is winning), or after it if
%OPOPC is 0: %PIMPV, %PIOOB, %PIIOC, %PIILO, %PITTY, %PIWRO, %PIFET, %PITRP.
"(S)" indicates a synchronous interrupt; "(A)", an asynchronous one.
An interrupt is synchronous if its occurrence is always directly related
to the instruction that is being executed when it is signaled.

SECOND The Interrupt Bits in the Second Interrupt Word.
The right half of the second word (.IFPIR) is used for I/O channel
interrupts that signal the arrival of or need for data.
They should not be confused with I/O channel error interrupts
or IOCERRors. Each channel has its own bit: 1.1 is for channel
0; 1.2, for channel 1; ... 2.7, for channel 17 .
They are all class 3, and their significance depends on the device
open on the channel.
The left half of the second word (.IFPIR) is used for
"inferior got a fatal interrupt" interrupts. Each of a job's
inferiors is assigned its own interrupt bit from among the
bottom 8 bits of the left half. When an inferior job is created,
its interrupt bit should be read and remembered by reading the
.INTB variable with a .USET. Every time that inferior gets a fatal
interrupt, it will be stopped and the superior will receive an
interrupt on that inferior's bit in .IFPIR. The inferior may
be restarted by zeroing its .USTP variable, but if the fatal
interrupts remain and are still fatal the inferior will simply
stop and interrupt the superior again. "Inferior got a fatal
interrupt" interrupts are all class 3.
The reason that inferiors interrupt through a special set of bits
instead of using I/O channel interrupts is that it makes it possible
to receive interrupts from all one's inferiors without having them
all open on I/O channels at all times. DDT normally keeps only
its current job open, and when it receives an interrupt from some
other job it opens that job temporarily.

STACK The format of the new-style interrupt stack
-----------------------------------
| 1st word interrupt bits |
-----------------------------------
| 2nd word interrupt bits |
-----------------------------------
| Saved .DF1 |
-----------------------------------
| Saved .DF2 |
-----------------------------------
| Saved program counter |
-----------------------------------
| . . . |
| Saved accumulators, if any |
| . . . |
-----------------------------------
| Saved .JPC, if requested |
-----------------------------------
| Saved .SUUOH, if requested |
-----------------------------------
Top -> | Saved LSPCL, if requested |
-----------------------------------

%PI1PR Single-instruction proceed [1] (S)
If a job is started with the one-proceed flag
(%PC1PR on KA-10's) set, after one instruction
is completed a %PI1PR interrupt will occur.
DDT's ^N command uses this feature.

%PIARO Arithmetic overflow [3] (S)
The PDP-10's built-in arithmetic overflow
condition was detected by the hardware.
In fact, overflow occurs so often
that enabling this interrupt causes the
machine to slow down considerably,
and it should be avoided.

%PIATY TTY returned. [3] (A)
This interrupt happens when the TTY is
returned by the superior, after having
been taken away. TECO uses this to know
that it must redisplay the entire screen.

%PIB42 BADPI (Bad location 42) [1] (S)
If in attempting to interrupt a job it turns out
to be necessary to refer to nonexistent memory
or write in read-only memory, this interrupt
is signaled, instead of MPV or WIRO.
This is so that the program will return to DDT
instead of mysteriously looping.

%PIBRK .BREAK instruction executed. [1] (S)
.BREAK is used for DDT breakpoints, and for explicit
program requests to DDT.

%PIC.Z ^Z or CALL typed on terminal [1] (A)

%PICLI CLI interrupt [3] (A)
Some job opened the CLI device with filenames equal
to the uname and jname of this job.

%PICLK Slow (1/2 sec) clock [3] (A)

%PIDBG System being debugged state change [3] (A)
When the system enters or leaves "debugging mode",
this interrupt is signaled.

%PIDCL Deferred call. [1] (S)
An attempt was made to read TTY input
and the next character was a deferred-call
character (^_D or Control-CALL).
This deferred-call character is never seen
by the program; it just causes the interrupt.
It differs from ordinary CALL or ^Z
in that it takes effect when the program
gets around to reading it, not immediately.

%PIDIS Display memory protect [2] (A)
The 340 or E&S display got an MPV.
This is now obsolete since the 340 and E&S
no longer work.

%PIDWN System-going-down status change [3] (A)
If the system changes its mind about whether
or when it is scheduled to go down, this interrupt
is signaled.

%PIFET Fetched insn from impure page [2] (S)
On KA-10's, if bit %PCPUR of the PC flags is 1,
fetching an instruction from an impure page
will cause this interrupt. This is supposed to
facilitate catching jumps to randomness.
The guilty instruction is aborted, and the PC is
left set according to %OPOPC.

%PIFOV ARFOV (Floating overflow) [3] (S)
This is a non-aborting PDP-10 hardware condition.

%PIILO ILOPR, ILUUO (illegal operation) [2] (S)
This can be caused by a returnable uuo when the
program's 41 doesn't seem suitable for handling one
(see ITS UUOS). It can also be used to report
the failure of certain more archaic system calls.
The guilty instruction was aborted, and the PC was
left set according to %OPOPC.

%PIIOC IOCERR (I/O channel error) [2] (S)
This indicates the failure of an I/O system
call. The channel that was being operated on is
in .BCHN, and its .IOS word should contain, in
bits 4.5 - 4.1, an error code.
The guilty instruction was aborted, and the PC was
left set according to %OPOPC.

%PIJST Job Status display request. [3] (A)
The sequence ^_J was typed on the
console owned by this process or some inferior.

%PILOS Lossage signaled. [2] (S)
A .LOSE UUO or a LOSE system call was executed.

%PILTP 340 or E&S light pen hit [3] (A)

%PIMAR MAR hit. [2] (S)
The MAR is a hardware feature that allows
references to a specific memory location to
be trapped. This is the interrupt that happens
when such a reference is detected. The guilty
instuction is usually not aborted; if it is, the
PC is SOS'ed regardless of the setting of %OPOPC.
See the .MARA and .MARPC variables.

%PIMPV MPV (memory protect violation) [2] (S)
The job referenced a non-existent memory location.
The address of that location (roundd down to
a page boundary on KA-10's) may be found in .MPVA.
The guilty instruction was aborted, and the PC was
left set according to %OPOPC.

%PINXI Non-existent IO register [2] (S)
A Job in User IOT mode referenced a non-existent IO
register on the KS10 Unibus. The PC is left pointing
before the guilty instruction. The address of the
non-existant register may be found in .MPVA.

%PIOOB Address out of bounds [2] (S)
This is an obscure condition that used to
happen on USR device IOT's, when an attempt
was made to refer to a nonexistent location in the
other job. Now this always causes an MPV.
The guilty instruction was aborted, and the PC was
left set according to %OPOPC.

%PIPAR Memory parity error [2] (A)
Programs are not intended to try to recover
from parity errors, on the assumption that they
are probably permanently screwed up.
This interrupt is asynchronous because it can
be caused by a parity error in another job
which destroys data in a page shared with this job.

%PIPDL PDL overflow [3] (S)

%PIRLT Real-time timer went off [3] (A)
These interrupts are controlled by the .REALT
uuo. See ITS UUOS.

%PIRUN Run-time timer went off [3] (A)
This interrupt is requested (in advance)
by setting .RTMR.

%PITRP SYSUUO (System uuo in trap mode) [1] (S)
A job whose .UTRAP variable was nonzero either
attempted to execute an instruction that trapped
to the system, or was about to be interrupted.
This feature is intended to be used by the superior
to provide a non-ITS environment for the inferior.
The guilty instruction was aborted, and the PC was
left set according to %OPOPC.

%PITTY Don't have TTY [2] (S)
This results from an attempt to use the job's
console tty when the job does not own it, if
%TBINT is 1 and %TBWAT is 0. See ITS TTY.
The guilty instruction is aborted, and the PC is
left set according to %OPOPC.

%PITYI TTY input (obsolete) [3] (A)

%PIVAL .VALUE instruction executed [1] (S)

%PIWRO WIRO (Write in read-only page) [2] (S)
The guilty instruction was aborted, and the PC was
left set according to %OPOPC. The address of read
only location (rounded down to a page boundary on
KA-10's) may be found in .MPVA.

429
doc/sysdoc/ttyvar.105 Normal file
View File

@@ -0,0 +1,429 @@
ITS TTY Variables:
This file attempts to maintain up-to-date documentation on all
the TTY variables. Those wonderful souls who update this information
in anyway (additions, deletions, corrections) should describe their
modifications in a brief note to INFO-ITS so that interested parties
can correct their copies or conceptions without needing to print or read
the entire file again. For example:
:MAIL INFO-ITS I added documentation on the FOO variable to TTYVAR.^C
----------------------------------------------------------------------
For a more complete description of TTY handling see the file
.INFO.;ITS TTY. This file exists primarily to facilitate lookup via
the DOC program. Use :DOC TTYVAR <name> to read the documentation
of a specific variable.
The system calls for reading and setting TTY variables are:
CNSGET, CNSSET, OPEN, RCPOS, RFNAME, RSSIZE, SCML, SCPOS, STYGET,
TTYGET, TTYSET, and TTYVAR.
BIT names:
Bit names begin with %Tx where x specifies which variable. Byte
pointer names begin with $Tx. Here is a list of the prefixs in use
and where they're found:
%TA TTYSTA
%TB .TTY
%TC TTYCOM
%TD output buffers (these are characters, not bits)
%TF ?
%TG TTYST1 and TTYST2
%TI IOCHNM (for input channels)
%TJ IOCHNM (for output channels)
%TN TCTYP (these are codes, not bits)
%TO TTYOPT LH
%TP TTYOPT RH
%TQ TTYSMT LH
%TR TTYSMT RH
%TS TTYSTS
%TT TTYTYP LH
%TX input buffers
%TY TTYTYP RH
HEIGHT: Screen Height (per-TTY)
HEIGHT contains the number of lines on the screen. For printing
terminals it is usually some large number.
This variable can be read with the CNSGET, RSSIZE, and TTYVAR system
calls and set with the CNSSET and TTYVAR system calls.

IDLTIM: Idle Time (per-TTY)
IDLTIM contains the length of time since the last input character
character was typed on the TTY, in 30'ths of a second.
This variable can be read with the TTYVAR system call.
IOCHNM: I/O channel bits (per-channel)
Some of the control bits set first time options and some are per-channel.
Those which are per-channel are marked below with a *. The standard names
for these bits are also given.
Control bits on input:
2.6 * %TIECH Read even if char needs pi echoing
2.5 * %TIPEK Don't remove char from buffer (peek)
2.3 * %TIACT Don't wait for activation char
2.2 * %TIINT Read even if char is an interrupt
char and hasn't interrupted yet.
2.1 * %TINWT Do not wait for input. If no input is
available, return -1 in unit mode, or
return a partially filled block in block mode.
1.9 * %TIFUL Use the full TV character set if possible.
In this mode, characters have this form:
2.3 %TXTOP Top.
2.2 Obsolete. Used to be Shift lock.
2.1 %TXSUP Super. Used to be Shift.
1.9 %TXMTA Meta.
1.8 %TXCTL Control.
1.7-1.1 %TXASC Ascii part of character.
Of course, for non-TV's only %TXASC
will be non-zero.
1.6 Set up 3 line echo area (like SCML of 3).
1.4 "DDT" mode. Initially clear the %TGPIE and
%TGMPE bits for carriage return, line feed,
and tab, thus causing them not to echo.
1.3 Image mode. Initially clear the %TGPIE
and %TGMPE bits for all characters.
1.2 0 = unit mode, 1 = block mode. In block mode,
^C causes a block mode end of file.
1.1 0 = input.
Control bits on output:
2.6 * %TJECH Echo mode output.
2.5 * %TJCTN Don't do line continuation.
2.4 * %TJSTP Channel is hung in **MORE**.
Unusual in that the system modifies this bit.
2.3 * %TJDIS Recognize ^P cursor codes.
2.2 * %TJSIO Super-image output. No padding
or cursor control is performed.
2.1 * %TJMOR Do not do **MORE** processing.
1.9 * %TJPP2 Output in the echo area if it exists.
1.6 Same as 2.2 - turns on %TJSIO.
1.5 Same as 2.3 - turns on %TJDIS.
1.4 Turns on %TJECH, %TJPP2, %TJMOR.
1.3 Image mode. Initially set %TGIMG bits
for all characters.
1.2 0 = unit mode, 1 = block mode. In block mode
output all ^C's are ignored.
1.1 1 = output.
The I/O channel word for a TTY channel can be read with RFNAME. It
is set by the OPEN call.
ISPEED: Input Speed (per-TTY)
ISPEED is the input speed of the terminal. It refers to the input
speed code stored in the TTYTYP variable. However, it is not a speed
code, but rather the speed in bits per second. Also, you are allowed to
set the ISPEED variable, while you are not allowed to set the whole TTYTYP
variable.
This variable can be read and set with the TTYVAR system call.

OSPEED: Output Speed (per-TTY)
OSPEED is the output speed of the terminal. It refers to the output
speed code stored in the TTYTYP variable. However, it is not a speed
code, but rather the speed in bits per second. Also, you are allowed to
set the OSPEED variable, while you are not allowed to set the whole TTYTYP
variable.
This variable can be read and set with the TTYVAR system call.
TCTYP: Terminal type code (per-TTY)
0 %TNPRT Printing terminal.
1 %TNDP Good Datapoint.
2 %TNODP Bad Datapoint ("loser").
3 %TNIML Imlac.
4 %TNTEK Tektronix.
5 %TNTV PDP-11 TV.
6 %TNMEM Memowreck.
7 %TNSFW Software terminal (accepts internal
ITS display codes, such as live in
internal terminal output buffers;
see ITS TTY for details).
10 %TNTRM Terminet.
11 %TNESC Display using ASCII standard display codes.
12 %TNDTM Datamedia.
13 %TNRAY Teleray 1061
14 %TNHDS Concept 100
15 %TNH19 Zenith H19
16 %TNAAA Ann Arbor Ambassador
This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.
TTYCOM: Com-link bits (per-TTY)
4.9 Communicate mode.
4.8 %TCLFT Local feed through (my job sees his typing).
4.7 %TCRFT Remote feed through (his job sees my typing).
4.6 %TCICO Input comm override (my job sees my typing).
4.5 %TCOCO Output comm override (I see my job's typing).
4.4 %TCRFS Refuse comm messages.
4.3 %TCQRY Query me if comm attempted to me.
4.2 %TCMTR The tty's motor is off, and must be
turned on before next output.
(Currently only Terminets get turned off.)
4.1 %TCECH The last output to this tty was PI echo.
3.9 %TCINP Someone waited for input since last home-up.
3.8 %TCDET Console's tree detached by top level interrupt.
3.7 %TCDNG Type bell (input buffer full).
3.6 %TCCBK Reading uname or tty number after ^_K.
3.5 %TCCBS Reading uname or tty number after ^_S.
3.4 %TCFPD First part of an output code sequence is done.
3.3 %TCTPN Type ^_N on leaving comm (unless user types it).
3.2 %TCPAD 0 => padding necessary on datapoint.
3.1 %TCHNG Done flag seems to be fried - time out quickly.
2.9-1.1 -1 if not in comm mode; otherwise number of
next tty in circular list of those in comm mode
together.
Only the %TCICO, %TCOCO, %TCRFS, %TCQRY, %TCMTR, and %TCINP bits may
be set.
This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.
TTYOPT: TTY capability and option bits (per-TTY)
4.8 %TOALT Standardize altmodes.
4.7 %TOCLC Convert lower case input to upper case.
4.6 %TOERS This tty can selectively erase.
4.5 %TOHDX This tty is half-duplex.
4.4 %TOMVB This tty can backspace directly.
4.3 %TOSAI This tty handles SAIL characters.
4.2 %TOSA1 Used to initialize %TSSAI for new jobs.
4.1 %TOOVR This tty can overprint correctly.
3.9 %TOMVU This tty can move its cursor upward.
3.8 %TOMOR Used to initialize %TSMOR for new jobs.
3.7 %TOROL Used to initialize %TSROL for new jobs.
3.6 %TORAW Don't optimize cursor motion.
3.5 %TOLWR This tty has a lower case keyboard.
3.4 %TOFCI This tty's keyboard has the full TV character set.
3.3 %TOIML This tty acts like an IMLAC.
3.2 %TOLID This tty can insert/delete lines.
3.1 %TOCID This tty can insert/delete characters.
2.9-2.7 $TPPLF How to pad line feeds:
0 Don't.
1 Two pad chars (Memorex, 2741).
2 Terminet.
2.6-2.4 $TPPCR How to pad carriage returns:
0 Don't. 4 Execuport.
1 Normal. 5 2741.
2 Double. 6 Memorex.
3 Unused. 7 Unused.
For a Datapoint, number of pad chars before
each string of cursor motion commands.
For a Terminet, 0=no padding, 1,2,3,4,5
correspond to 10,15,30,60,120 cps.
2.3-2.1 $TPPTB How to pad tabs:
0 Tabs not allowed.
<n> Use <n-1> pad chars.
On displays,
0 don't use tabs.
1 use tabs.
2 use VT52-style absolute positioning.
1.9 %TPMTA Treat bit 1.8 of input characters as the meta bit.
this is for terminals such as Telerays which have Edit keys.
1.8 %TPPRN interchange ( with [, and ) with ], on input.
1.7 %TPTEL Treat CRLF input as CR for TELNET protocol.
1.6 %TPCBS The ^\ intelligent terminal protocol is enabled.
1.5 %TP11T PDP-11 TV. Reflects %TY11T.
1.4 %TPORS Output reset really does something.
1.3 %TPRSC This tty can do region scrolling.
1.2 %TPIBC Oddball 2741-like tty. ;no longer defined
1.1 %TPIBM It really is a 2741. ;no longer defined
This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.
TTYROL: Scroll count (per-TTY)
TTYROL contains the number of lines the TTY moves up when it scrolls.
Scrolling occurs when a LF is sent while the cursor is on the last line.
This variable can be read and set with the TTYVAR system call.
TTYSMT: Smarts (per-TTY)
Bits marked with a * are pertain to the graphics protocol. If %TQGRF is 0,
they should all be 0.
4.9-4.7 %TQMCH CPU type. 0 => unknown or uninteresting.
1 => PDP11. 2 => IMLAC PDS4. 3 => IMLAC PDS1.
4.6-4.2 * %TQHGT Character height in dots.
4.1-3.7 * %TQWID Character width in dots.
3.6 * %TQVIR Terminal implements virtual coordinates.
3.5 * %TQBNK Terminal implements blinking.
3.4 * %TQXOR Terminal implements XOR mode.
3.3 * %TQREC Terminal implements the rectangle commands.
3.2 * %TQSET Terminal implements multiple sets.
3.1 * %TQGRF Terminal understands the graphics protocol.
(Used to be called %TQGPH.)
2.9 * %TRGIN Terminal provides graphic input.
2.8 * %TRGHC Terminal provides has graphic hardcopy.
2.7 %TRLED Terminal supports the local-editing protocol.
(See SUPDUP doc)
2.6 * %TRSCN Terminal implements scan-line output.
2.5-2.3 %TRLSV Nonzero means terminal can save about 4**n lines.
(See SUPDUP doc)
2.2-1.7 %TRTIM Signed offset from GMT minus 20. A value of zero
means don't know, don't care, or user program
hasn't implemented it yet.
This variable can be read and set with the TTYVAR system call.
TTYSTA: Console Status
4.9 %TACFM Tty does not need a console free message
eventually (hasn't been in use since
the last one).
4.8 %TAC.Z Tty is being ^Z'd. Shouldn't be on with
%TACFM. If %TACFM and %TAC.Z are both 0,
the tty is being freed and a console free
message is immanent.
4.7 %TANJS This ^Z is being flushed because no job
slots are available. If set, %TAC.Z
will be 1 and %TACFM will be 0.
4.6-4.3 %TANEC Number of following chars to inhibit echo and ints for.
This is used for the arg chars that follow Top-E,
Top-S, Top-Y, etc.
This variable can be read with the STYGET system call.
TTYST1: Activation and Echo control word 1 (per-job)
This variable contains six groups of six bits.
Each group is as follows:
1.6 %TGMPE Echo at main program level (when IOT'ed).
1.5 %TGPIE Echo at interrupt level (when typed).
1.4 %TGIMG Echo in image mode.
1.3 %TGSPC Special hack: convert lower case to upper.
1.2 %TGACT Activation character.
1.1 %TGINT Interrupt character.
The character groups are:
4.9-4.4 ^@-^F ^K ^L ^N-^R ^T-^Z ^\-^_
4.3-3.7 Upper and lower case letters.
3.6-3.1 Digits.
2.9-2.4 ! " # $ % & ' , . : ; ? @ \ ` | ~
2.3-1.7 + * - / = ^ _
1.6-1.1 < > ( ) [ ] { }
This variable can be read with the TTYGET system call and set
with the TTYSET system call.

TTYST2: Activation and Echo control word 2 (per-job)
This variable contains six more groups of six bits.
Each group is as follows:
1.6 %TGMPE Echo at main program level (when IOT'ed).
1.5 %TGPIE Echo at interrupt level (when typed).
1.4 %TGIMG Echo in image mode.
1.3 %TGSPC Special hack: convert lower case to upper.
1.2 %TGACT Activation character.
1.1 %TGINT Interrupt character.
The character groups are:
4.9-4.4 ^G ^S
4.3-3.7 ^I ^J (tab, linefeed)
3.6-3.1 altmode (33)
2.9-2.4 ^M (carriage return)
2.3-1.7 rubout (177)
1.6-1.1 space, ^H (backspace)
This variable can be read with the TTYGET system call and set
with the TTYSET system call.
TTYSTS: TTY option bits (per-job)
4.9 %TSFRE Free console (not in use).
4.8 %TSCLE ^L should echo as "^L" (normally
clears screen on displays).
4.7 %TSHDX Same as %TOHDX. Vestigial.
4.6 %TSFCO Use full 12-bit TV char set for output and
echoing: echo CONTROL as ALPHA, echo META
as BETA, echo SUPER as EPSILON, and use
Sail graphics if TOP is set.
4.5 %TSALT Do not standardize altmodes.
4.4 %TSROL Scroll mode.
4.3 %TSSAI Echo and ascii output use SAIL
character set.
4.2 %TSACT Next input IOT shouldn't wait
for an activation character.
4.1 %TSNEA Don't echo in echo area; echo in M.P. Area.
3.9 %TSINT Next input character should
interrupt even if it ordinarily
would not (%TGINT = 0).
3.8 %TSMOR Inhibit **MORE** processing.
3.7 %TSATY Set whenever an .ATTY executed by
some superior returns the tty to
the job.
3.4 %TSNOE Defer echoing.
3.3 %TSLCZ Last character typed was ^Z.
This bit causes .ATTY's to fail.
3.2 %TSSII Super-image input. The special
actions of ^Z and ^_ are suppressed.
3.1 %TSCNS This is a console, not a device.
2.9-1.1 The user index of the job which controls
the tty, or -1 if the tty is free.
%TSFRE, %TSHDX, %TSLCZ, %TSCNS, and the RH may not be altered.
This variable can be read with the TTYGET system call and set
with the TTYSET system call.
TTYTYP: Semi-permanent stuff (per-TTY)
This variable may not be set, just read (but see ISPEED and OSPEED).
4.9 %TTLCL Local tty (i.e. right near the PDP-10).
4.8 %TT340 Near the 340 or a 340 slave.
4.7 %TT3HP High priority for grabbing 340.
4.3 %TTPAR Tty needs a parity bit generated by software.
4.2 %TTDDI Don't ding bell on excess input.
4.1 %TTIBM Datel (2741) line.
3.8-3.5 $TTISP Input speed code:
0 = unknown 6 = 1800 baud 13 = 40K baud
1 = 600 baud 7 = 2400 baud 14 = 50K baud
2 = 110 baud 10 = 4800 baud 15 = 80K baud
3 = 150 baud 11 = 9600 baud 16 unused
4 = 300 baud 12 = 25K baud 17 unused
5 = 1200 baud
3.4-3.1 $TTOSP Output speed code, as above.
2.9 %TYDPK Datapoint controller line.
2.8 %TYSTY Alter ego to a STY.
2.7 %TYNVA Nova tty (requiescat in pace).
2.6 %TYMTY Morton controller line.
2.5 %TYDIL Dial-up line.
2.4 %TY11T PDP-11 TV tty.
2.3 %TYDL DL-10 tty.
2.2 %TYOTY KA-10 console tty.
2.1 %TYETY DTE-20 tty.
1.9 %TYNTY TK-10 tty.
1.8 %TYMDM Dial-up line with modem control.
1.7 %TYKST KS-10 console tty.
1.6 %TYDZT DZ-11 tty on a KS-10.
1.5 %TYRLM ROLM data switch tty.
This variable can be read with the CNSGET and TTYVAR system calls.
WIDTH: Screen width (per-TTY)
WIDTH contains the no. of usable print positions on a line for the
TTY. It is usually one or two less than the actual no. of columns to allow
room for a "!" in the last column to indicate typeout being continued on
the next line (two columns are required when the terminal loses by
automatically performing a CRLF operation when a character is output to
the last column).
This variable can be read with the CNSGET, RSSIZE and TTYVAR system
calls and set with the CNSSET and TTYVAR system calls.

1406
doc/sysdoc/usets.120 Normal file

File diff suppressed because it is too large Load Diff

969
src/sysen1/pr.87 Normal file
View File

@@ -0,0 +1,969 @@
;;; -*- Mode:MIDAS -*-
TITLE PR FANCY FILE PRINTER
;Written by ... JMB 8/23/76
;LSC feature changed since DM gone now ... CSTACY 1/30/84
;LSC feature updated again since KL-MC about to die -- Zvona 5/12/86
;Has special print modes depending upon JNAME:
; :DOC {:CALL :UUO :USET :SUSET :TTYVAR :INTRUP} <descriptor>
; :LSC gets you the current LSC movie schedule
; :PRIM ==> PRINT TO IMLAC
; :TVDOC ==> TRIVIA DOCUMENTATION
;See .INFO.;PR INFO FOR COMPLETE DETAILS
.MLLIT==1
;ACCUMULATOR DEFINITIONS
N=0 ;NUMBER OF OUTPUT CHARACTERS
A=1
B=2
C=3
D=4
E=5
CC=6 ;CHARACTER COUNT FOR INDEX MAKING
PSBP=7 ;PAGE STRING BP
PSNUM=10 ;STRING LENGTH
P=11 ;STACK POINTER
SWTCHS=12 ;CONTAINS ALL SWITCHES
DES=13 ;DESCRIPTOR NAME
MSK=14 ;MASK FOR DESCRIPTOR MATCHING
OBP=15 ;OUTPUT BYTE POINTER
IBP=16 ;INPUT BYTE POINTER
Z=17 ;RETURN ADDRESS FOR JSP
;SWITCH DEFINITIONS
AS==1 ;DON'T PRINT CONTROL-ATSIGNS
CS==4 ;STOP AT FIRST ^C (DEFAULTS ON)
DS==10 ;NEXT NAME IS DESCRIPTOR
FS==40 ;OUTPUT FILE IN USE
IS==400 ;OUTPUT IN IMAGE MODE TO TTY
LS==4000 ;LIST DOCUMENTATION DIRECTORY
PS==100000 ;PAGE AT ^L OR ^_
;DEVICE DEFINITIONS
TTYI==0
TTYO==1 ;OUTPUT FILE, NOT NECESSARILY A TTY
DSKBI==2
DSKIO==3
;INSTRUCTION DEFINITIONS
ERROR==JRST
LOC 42
JSR TSINT
LOC 100
;RANDOM LOCATIONS
JCL: BLOCK 16
FN1: 0 ;FIRST NAME FLAG
FN2: 0 ;SECOND NAME FLAG
NAME: 0 ;SLOT TO BUILD A NAME IN
JNAM: 0 ;JOB NAME
DEVICE: 0 ;INPUT FILE NAMES,
SNAME: 0 ;DEFAULTS FROM DDT OR OUTPUT FILE NAMES
FNAME1: 0
FNAME2: 0
ONAME1: 0 ;OUTPUT FILE NAMES,
ONAME2: 0 ;DEFAULTS FROM DDT
ODEVIC: 0
OSNAME: 0
XFNAME: 0
YFNAME: 0
IXNAME: 0
CHARS: 0
TSROL: 0 ;SCROLL MODE?
TYP: 0 ;DESCRIPTOR TYPE
GETDES: 0 ;DESCRIPTOR SEARCH LOOP?
NEWDES: 0 ;SEARCHING FOR NEW DESCRIPTOR?
BUFLEN==1000
BFR: BLOCK BUFLEN
ENDBFR: 10700,,BFR+BUFLEN-1 ;END OF INPUT BUFFER
OBUFLN==100
OBUF: BLOCK OBUFLN
PDL: BLOCK 20
;INITIAL SETUP
START: MOVEI P,PDL ;SET UP PDL
.OPEN TTYO,[.UAO,,'TTY]
.LOSE 1000
.OPEN TTYI,[.UAI,,'TTY]
.LOSE 1000
.SUSET [.SIMSK2,,[3]] ;ENABLE TTY INTERRUPTS
.CALL TTYSET ;SET UP TTY TO TAKE CONTROL-S
.LOSE 1000
.CALL TTYGET ;CHECK FOR SCROLLAGE
.LOSE 1000
TLNE A,%TSROL
SETOM TSROL
MOVE IBP,ENDBFR
MOVE OBP,[440700,,OBUF]
SETZ N,
MOVEI SWTCHS,CS ;C SWITCH STARTS SET (STOP AT ^C)
.SUSET [.RXJNAME,,JNAM] ;GET JOB NAME
MOVE A,JNAM
CAME A,[SIXBIT /CALL/] ;SPECIAL FORMS OF DOC
CAMN A,[SIXBIT /.CALL/]
JRST DOCTYP
CAME A,[SIXBIT /UUO/]
CAMN A,[SIXBIT /USET/]
JRST DOCTYP
CAME A,[SIXBIT /TVDOCT/]
CAMN A,[SIXBIT /TVDOC/]
JRST DOCTYP
CAME A,[SIXBIT /MUD/]
CAMN A,[SIXBIT /MUDDLE/]
JRST DOCTYP
CAME A,[SIXBIT /SUSET/]
CAMN A,[SIXBIT /TTYVAR/]
JRST DOCTYP
CAMN A,[SIXBIT /INTRUP/]
JRST DOCTYP
CAMN A,[SIXBIT /PRIM/]
JRST PRIM
CAMN A,[SIXBIT /LSC/] ;IF LSC, GO TO SPECIAL ROUTINE
JRST LSC
; CAMN A,[SIXBIT /NLSC/] ;IF NLSC, GO TO SPECIAL ROUTINE
; JRST NLSC
JRST GETJCL
PRIM: .CALL CNSGET
.LOSE 1000
TLNN A,%TOIML
JRST FINIS
XORI SWTCHS,IS
.CALL SCPOS
.LOSE 1000
JRST GETJCL
DOCTYP: MOVEM A,TYP ;SAVE DOC TYPE FOR LATER REFERENCE
MOVE A,[SIXBIT /DOC/]
MOVEM A,JNAM
GETJCL: .BREAK 12,[5,,JCL] ;GET JCL LINE
MOVE D,[440700,,JCL] ;GET BP TO JCL
MOVE E,TYP
CAME E,[SIXBIT /TVDOC/]
.BREAK 12,[6,,DEVICE] ;SET UP DEFAULTS FROM DDT
MOVE A,FNAME1
MOVEM A,XFNAME
MOVE B,FNAME2
MOVEM B,YFNAME
;JCL PARSER
LOOP: SETZM NAME
MOVE C,[440600,,NAME];CLEAR NAME SLOT
GETCHR: CAIE B,^X ;CATCH LEFTOVER ^X OR ^Y
CAIN B,^Y
JRST FIELD
ILDB B,D
JUMPE B,FOPEN
CAIE B,40
CAIN B,11
JRST GETCHR
FIELD: CAIE B,40 ;HERE TO GET A NAME
CAIN B,11
JRST FNAM ;SPACE AND TAB MAKE FNAME1 AND 2
CAIE B,0
CAIN B,15
JRST FNAM ;SO DOES 0 AND <CR>
CAIN B,":
JRST DEV
CAIN B,";
JRST DIR
CAIN B,"_
JRST OFILE
CAIN B,"/
JRST SWITCH
CAIE B,^X ;TRAP ^X AND ^Y CROCKS
CAIN B,^Y
JRST XYNAME
CAIN B,^Q ;HANDLE QUOTING
ILDB B,D
CAIGE B,40 ;SUBI B,40 < 0 (BAD CHARACTER)
ERROR ILLCHR
SUBI B,40
CAIL B,100
SUBI B,40 ;CASE CONVERSION
TLNE C,770000 ;IGNORE MORE THAN 6 CHARACTERS,
JRST NXTCHR-1
MOVE A,JNAM
TRNN SWTCHS,DS ;UNLESS D SWITCH IS SET,
CAMN A,[SIXBIT /DOC/] ;OR JNAME IS DOC,
CAIA
JRST NXTCHR
LDB E,[360600,,NAME]
CAIE E,'. ;AND FIRST CHAR IN NAME WAS "."
JRST NXTCHR
MOVE E,NAME ;IF ALL THAT WAS TRUE, FLUSH "." & ADD NEW CHAR
LSH E,6
MOVEM E,NAME
DPB B,C
SKIPA
IDPB B,C
NXTCHR: ILDB B,D
JRST FIELD
;FILE NAME STORERS
DEV: MOVE A,NAME
MOVEM A,DEVICE
JRST LOOP
DIR: MOVE A,NAME
MOVEM A,SNAME
JRST LOOP
FNAM: TRNE SWTCHS,DS
JRST DESNAM
MOVE A,NAME
JUMPE A,LOOP
SKIPN FN1
JRST FNAM1
SETOM FN2
MOVEM A,FNAME2
JRST LOOP
FNAM1: MOVEM A,FNAME1
SETOM FN1
JRST LOOP
DESNAM: MOVE DES,NAME
TRZ SWTCHS,DS
JRST LOOP
OFILE: MOVE B,DEVICE ;TRANSFER CURRENT NAMES TO OUTPUT FILE NAME SLOTS
MOVEM B,ODEVIC
MOVE B,SNAME
MOVEM B,OSNAME
MOVE B,FNAME1
MOVEM B,ONAME1
MOVE B,FNAME2
MOVEM B,ONAME2
.BREAK 12,[6,,DEVICE] ;RESET DEFAULTS FROM DDT
MOVE A,FNAME1
MOVEM A,XFNAME
MOVE B,FNAME2
MOVEM B,YFNAME
SETZM FN2
MOVE A,NAME
TRNN SWTCHS,DS
JRST .+3
SETZM FN1
JRST DESNAM
SKIPE FN1
JRST .+4
JUMPE A,LOOP
MOVEM A,ONAME1
JRST LOOP
SETZM FN1
JUMPE A,LOOP
MOVEM A,ONAME2
JRST LOOP
;HANDLERS FOR SPECIAL JCL COMMANDS
SWITCH: ILDB B,D
CAIE B,"C
CAIN B,"c
JRST CSWI
CAIE B,"P
CAIN B,"p
JRST PSWI
CAIE B,"A
CAIN B,"a
JRST ASWI
CAIE B,"L
CAIN B,"l
JRST LSWI
CAIE B,"D
CAIN B,"d
JRST DSWI
CAIE B,"I
CAIN B,"i
JRST ISWI
JRST ILLSWI
CSWI: XORI SWTCHS,CS ;COMPLEMENT APPROPRIATE BIT
JRST NXTCHR
PSWI: XORI SWTCHS,PS
JRST NXTCHR
ASWI: XORI SWTCHS,AS
JRST NXTCHR
LSWI: XORI SWTCHS,LS
JRST NXTCHR
DSWI: TRO SWTCHS,DS
SKIPE NAME
JRST FNAM+2
JRST NXTCHR
ISWI: XORI SWTCHS,IS
JRST NXTCHR
XYNAME: SKIPE NAME ;CAUSE BREAK IF NAME AROUND
JRST FNAM
MOVE A,XFNAME
CAIE B,^X
MOVE A,YFNAME
MOVEM A,NAME
MOVEI B,40
JRST FNAM
;DISK AND TTY OPENS
LSC: .CALL LSCOPN ;Get channel to LSC movies file
ERROR NOLSC
JRST PLOOP ;Print the file until ^C seen.
;NLSC: .CALL NLSCOP ;GET CHANNEL TO LSC MOVIES FILE
; ERROR MVELST
; JRST NLSCRD
FOPEN: MOVE A,JNAM
CAME A,[SIXBIT /DOC/]
JRST FOPEN1
SKIPN TYP ;IF DOC TYPE COMES FROM JNAME, DO FIXUPS
JRST FOPEN2
SKIPE FN1
MOVE DES,FNAME1
JRST FOPEN3
FOPEN2: SKIPN FN1 ;IF NO TYPE NAME, GIVE POSSIBILITIES
ERROR DLIST
MOVE A,FNAME1
MOVEM A,TYP
SKIPE FN2
MOVE DES,FNAME2
FOPEN3: SKIPN DES ;IF NO DESCRIPTOR, LIST DIRECTORY
IORI SWTCHS,LS
MOVE A,[SIXBIT /DSK/]
MOVEM A,DEVICE
MOVE B,TYP
CAME B,[SIXBIT /MUD/]
CAMN B,[SIXBIT /MUDDLE/]
CAIA
JRST DITS
MOVE A,[SIXBIT /MUDMAN/]
MOVEM A,SNAME
MOVE A,[SIXBIT /MUDDLE/]
MOVEM A,FNAME1
MOVE A,[SIXBIT /ORDER/]
JRST FOPEN0
DITS: MOVE A,[SIXBIT /.INFO./]
MOVEM A,SNAME
MOVE A,[SIXBIT /ITS/]
MOVEM A,FNAME1
CAME B,[SIXBIT /CALL/]
CAMN B,[SIXBIT /.CALL/]
JRST [MOVE A,[SIXBIT /.CALLS/]
JRST FOPEN0]
CAMN B,[SIXBIT /UUO/]
JRST [MOVE A,[SIXBIT /UUOS/]
JRST FOPEN0]
CAME B,[SIXBIT /SUSET/]
CAMN B,[SIXBIT /USET/]
JRST [MOVE A,[SIXBIT /USETS/]
JRST FOPEN0]
CAMN B,[SIXBIT /TTYVAR/]
JRST [MOVE A,B
JRST FOPEN0]
CAMN B,[SIXBIT /INTRUP/]
JRST [MOVE A,[SIXBIT /%PI/]
JRST FOPEN0]
CAME B,[SIXBIT /TVDOCT/]
CAMN B,[SIXBIT /TVDOC/]
JRST [MOVE A,TYP
JRST FOPEN0]
ERROR BADTYP
FOPEN0: MOVEM A,FNAME2
JUMPE B,FOPEN1
TRZ A,7777
IOR A,[SIXBIT / IX/]
MOVEM A,IXNAME
FOPEN1: .CALL DSKOPN ;DO ALL OF THE NORMAL OPENS
ERROR ILFILE
SKIPN ODEVIC ;IF OUTPUT FILE GIVEN,
JRST FOPEN4
.CALL OFOPEN ;OPEN IT AS "TTYO",
.LOSE 1000
TRZ SWTCHS,PS ;TURN OFF PAGING,
TRO SWTCHS,FS ;AND TURN ON F SWITCH
FOPEN4: JUMPN B,DOCRD
TRNE SWTCHS,IS ;IF I SWITCH IS SET,
JRST ILOOP ;DO SUPERIMAGE OUTPUT
SKIPE ODEVIC ;IF OUTPUT FILE GIVEN,
TRO SWTCHS,IS ;TURN ON IMAGING (JUST TO FOOL MOREAGE)
TRNE SWTCHS,PS ;IF P SWITCH IS SET,
SKIPE TSROL ;AND NOT SCROLLING,
JRST PLOOP0
MOVEI PSNUM,2 ;CLEAR PAGE BEFORE STARTING
MOVE PSBP,[440700,,[ASCII /C/]]
.CALL PBLOCK
.LOSE 1000
JRST PLOOP
;READ AND PRINT LOOPS FOR VARIOUS MODES
PLOOP0: TRNN SWTCHS,FS
.IOT TTYO,[^J]
PLOOP: JSP Z,CIN ;HERE TO PRINT FILE
JRST CFINIS
CAIE A,^C
JRST .+3
TRNE SWTCHS,CS ;STOP IF ^C AND C SWITCH IS SET
JRST CFINIS
TRNN SWTCHS,PS ;SKIP THIS SECTION IF P SWITCH NOT SET
JRST .+4
CAIE A,^L
CAIN A,^_
JRST PAGE
CAIN A,^@ ;DON'T PRINT ^@ IF A SWITCH SET
TRNN SWTCHS,AS
JSP Z,COUT
JRST PLOOP
ILOOP: SETZ B,
ILOOP1: JSP Z,CIN ;HERE TO PRINT FILE IN SUPERIMAGE MODE
JRST FINIS
CAIN A,^C
AOJA B,ILOOP1
JUMPE B,ILOOP3
MOVE C,A
MOVEI A,^C
ILOOP2: .CALL IMGIOT
.LOSE 1000
SOJN B,ILOOP2
MOVE A,C
ILOOP3: .CALL IMGIOT ;OUTPUT CHAR
.LOSE 1000
JRST ILOOP1
;LSCRD: JSP Z,CIN ;READ UNTIL ^@
; ERROR MVELST
; JUMPN A,LSCRD
;PRLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT ^@
; JRST CFINIS
; JUMPE A,CFINIS
; JSP Z,COUT
; JRST PRLOOP
;
;NLSCRD: JSP Z,CIN ;READ UNTIL "
; ERROR MVELST
; CAIE A,""
; JRST NLSCRD
; MOVEI PSNUM,2 ;CLEAR PAGE BEFORE STARTING
; MOVE PSBP,[440700,,[ASCII /C/]]
; .CALL PBLOCK
; .LOSE 1000
;NPLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT "
; JRST CFINIS
; CAIN A,""
; JRST NMDONE
; CAIE A,"\ ;HANDLE QUOTING
; JRST .+3
; JSP Z,CIN
; JRST CFINIS
; JSP Z,COUT
; JRST NPLOOP
;NMDONE: JSP Z,CIN ;LOOK FOR A (
; JRST CFINIS
; CAIE A,"(
; JRST NMDONE
;NMDON1: JSP Z,CIN ;NOW GET A "
; JRST CFINIS
; CAIE A,""
; JRST NMDON1
; JSP Z,OBCLR
; PUSHJ P,MORE ;DO MOREAGE
; JRST NPLOOP ;NOW PRINT THIS MESSAGE
DOCRD: LDB A,[360600,,DES];FLUSH LEADING DOTS IN DESCRIPTOR
CAIE A,'.
JRST .+3
LSH DES,6
JRST DOCRD
TRNE SWTCHS,LS
JRST DOCRD1
MOVEI A,DSKBI
.CALL RFDATE
ERROR RFDLST
MOVE D,B
MOVEI A,.UII
.CALL IDXOPN
JRST MAKIDX
MOVEI A,DSKIO
.CALL RFDATE
ERROR RFDLST
CAME B,D
JRST [ .CALL [ SETZ
SIXBIT /DELEWO/
SETZI DSKIO]
.LOSE 1000
JRST MAKIDX]
MOVE A,DES ;SET UP MASK FOR DESCRIPTOR COMPARISON
MOVEI B,[ 0
770000,,0
777700,,0
-1,,0
-1,,770000
-1,,777700
-1]
MLOOP: ANDCM A,(B)
SKIPE A
AOJA B,MLOOP
MOVE MSK,(B)
SETOM GETDES
JRST GETDOC
MAKIDX: MOVEI PSNUM,46.
MOVE PSBP,[440700,,[ASCII /New documentation file, must index, hang on.../]]
.CALL PBLOCK
.LOSE 1000
MOVEI A,.UIO
.CALL IDXOPN
ERROR IDOLST
JRST DOCRD1 ;FIRST PAGE DOESN'T HAVE TO START WITH ^L
DOCRD0: JSP Z,CIN ;READ UNTIL ^L OR ^_
JRST DOCEND
CAIE A,^L
CAIN A,^_
JRST DOCRD1
JRST DOCRD0
DOCRD1: SETZ E, ;USE E TO KEEP TRACK OF LEADING DOTS
JSP Z,CIN ;READ UNTIL A LETTER/NUMBER IS FOUND
JRST DOCEND
CAIE A,".
JRST .+3
MOVE E,A
JRST DOCRD1+1
CAIG A,40
JRST DOCRD1
MOVE B,[440600,,C]
SETZ C,
MOVEM CC,CHARS
SOS CHARS
GNLOOP: SUBI A,40 ;GET DESCRIPTOR NAME ON THIS PAGE
IDPB A,B
JSP Z,CIN
JRST DOCEND
CAIE A,"* ;THESE SPECIAL CHARACTERS MAY BE PART OF A NAME
CAIN A,"+
JRST GDCHAR
CAIE A,"-
CAIN A,"/
JRST GDCHAR
CAIE A,"=
CAIN A,"?
JRST GDCHAR
CAIL A,"0 ;NON-LETTER/NUMBER SIGNALS END OF NAME
CAILE A,"Z
JRST DOCRD2
CAILE A,"9
CAIL A,"A
SKIPA
JRST DOCRD2
GDCHAR: TLNE B,770000 ;IGNORE MORE THAN SIX CHARACTERS
JRST GNLOOP
DOCRD2: TRNN SWTCHS,LS ;IF L SWITCH SET, LIST NAMES AS PASSED
JRST INDEX
SKIPE E ;PRINT DOT IF THERE WAS ONE BEFORE NAME
.IOT TTYO,E
JSP Z,OSIX ;PRINT DESCRIPTOR NAME
DOCRD3: .IOT TTYO,A ;PRINT REST OF LINE
CAIN A,^J
JRST DOCRD0
JSP Z,CIN
JRST DOCEND
JRST DOCRD3
DOCEND: TRNE SWTCHS,LS ;IF IN LIST MODE, END AT EOF
JRST FINIS
.IOT DSKIO,[0]
.CALL SFDATE
ERROR SFDLST
.CLOSE DSKIO,
MOVE IBP,[10700,,BFR+BUFLEN-1]
MOVEM IBP,ENDBFR
JRST FOPEN1
INDEX: .IOT DSKIO,C ;WRITE OUT DESCRIPTOR NAME
SKIPE E ;IF THERE WAS A DOT,
SOS CHARS ; ALLOW SPACE FOR IT
.IOT DSKIO,CHARS ;WRITE OUT POSITION
JRST DOCRD0
DESCMP: .IOT DSKIO,C
GETDOC: .IOT DSKIO,C
SKIPN C
JRST [ SKIPN NEWDES
ERROR DOCLST
JRST FINIS]
AND C,MSK ;FLUSH UNWANTED PART
CAME C,DES ;SEE IF THIS IS DESIRED DESCRIPTOR
JRST DESCMP
SKIPN NEWDES
JRST PRDOC
MOVE IBP,[10700,,BFR+BUFLEN-1]
MOVEM IBP,ENDBFR
PUSHJ P,MORE
TRNE SWTCHS,FS
.IOT TTYO,[12.]
SETZM NEWDES
PRDOC: .IOT DSKIO,C ;YES, CLEAR PAGE & PRINT NAME
IDIVI C,5
.ACCESS DSKBI,C
TRNE SWTCHS,FS ;IF NOT OUTPUT FILING,
JRST SLOOP
SKIPE TSROL ;OR SCROLLING,
JRST SLOOP-1
MOVEI PSNUM,2 ;CLEAR SCREEN
MOVE PSBP,[440700,,[ASCII /C/]]
.CALL PBLOCK
.LOSE 1000
JRST SLOOP
.IOT TTYO,[^M]
.IOT TTYO,[^J]
SLOOP: JUMPE D,CPLOOP
JSP Z,CIN
ERROR FILLST
SOJA D,SLOOP
CPLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT ^L OR ^_ OR EOF
JRST CFINIS
CAIE A,^L
CAIN A,^_
JRST NXTDES
CAIN A,^C
TRNN SWTCHS,CS
CAIA
JRST NXTDES
JSP Z,COUT
JRST CPLOOP
NXTDES: JSP Z,OBCLR
SETOM NEWDES
JRST GETDOC
;PAGER FOR READING PAGED FILES (^L OR ^_) WITH P SWITCH SET; MORE HANDLER
PAGE: JSP Z,OBCLR
SETZ B, ;B USED FOR SPACE COUNTER
JSP Z,CIN
JRST FINIS ;DON'T PAGE IF AT END OF FILE
CAIE A,^C
JRST .+3
TRNE SWTCHS,CS
JRST FINIS
CAIE A,^M ;FLUSH TRAILING CARRIAGE-RETURNS & LINE-FEEDS
CAIN A,^J
JRST PAGE
CAIN A,40
AOJA B,PAGE+1
PUSHJ P,MORE
JUMPE B,PAGEND
MOVEI C,40
.IOT TTYO,C ;PRINT SPACES, IF ANY
SOJG B,.-1
PAGEND: .IOT TTYO,A
JRST PLOOP
MORE: TRNE SWTCHS,IS+FS ;IF I SWITCH OR F SWITCH IS ON,
POPJ P, ;DO NOTHING
PUSH P,PSNUM
PUSH P,PSBP
PUSH P,A
SKIPE NEWDES
JRST [ MOVEI PSNUM,14.
MOVE PSBP,[440700,,[ASCII /--Next Match--/]]
JRST DMORE]
MOVEI PSNUM,8.
MOVE PSBP,[440700,,[ASCII /--More--/]]
DMORE: .CALL PBLOCK ;PAGER USING ^P HACKERY
.LOSE 1000
.LISTEN A,
.CALL PEEK
.LOSE 1000
CAIN A,40
JRST MORE1
CAIE A,177
CAIN A,^S
CAIA
JRST MORE2
.CALL TYI
.LOSE 1000
MORE2: MOVEI PSNUM,7
MOVE PSBP,[440700,,[ASCII /Flushed/]]
.CALL PBLOCK
.LOSE 1000
SKIPE GETDES
CAIE A,177
JRST FINIS
SKIPE NEWDES
JRST FINIS
MOVEI A,NXTDES
MOVEM A,TSINT+1
MOVE OBP,[440700,,OBUF]
SETZ N,
JRST MPOPS
MORE1: .CALL TYI
.LOSE 1000
MOVEI PSNUM,4
MOVE PSBP,[440700,,[ASCII /TL/]]
SKIPN TSROL
JRST .+3
MOVEI PSNUM,2
MOVE PSBP,[440700,,[ASCII /
/]]
.CALL PBLOCK
.LOSE 1000
MPOPS: POP P,A
POP P,PSBP
POP P,PSNUM
POPJ P,
;ERROR MESSAGE PRINTER (WORD POINTER IN C)
ERRPRT: MOVEI PSNUM,2
MOVE PSBP,[440700,,[ASCII /A/]]
.CALL PBLOCK
.LOSE 1000
HRLI C,440700
ERLOOP: ILDB B,C
JUMPE B,ERRDON
.IOT TTYO,B
JRST ERLOOP
ERRDON: .IOT TTYO,[^M]
.IOT TTYO,[^J]
JRST FINIS
;SIXBIT OUTPUT ROUTINE (PUT WORD IN C, USES B & D)
OSIX: MOVE B,[440600,,C]
OLOOP: ILDB D,B
JUMPE D,(Z)
ADDI D,40
.IOT TTYO,D
TLNE B,770000
JRST OLOOP
JRST (Z)
;IOT SIMULATOR FOR READING FROM DISK FILE
CIN: CAMN IBP,ENDBFR
JRST CIN1
ILDB A,IBP
AOJ CC, ;INCREMENT CHARACTER COUNT
JRST 1(Z) ;NORMAL RETURN
CIN1: MOVE A,ENDBFR
CAME A,[10700,,BFR+BUFLEN-1]
JRST (Z) ;EOF RETURN
MOVE A,[-BUFLEN,,BFR]
.IOT DSKBI,A
MOVE IBP,[10700,,BFR-1]
SKIPL A
JRST CIN
SOJ A,
HRRM A,ENDBFR
JRST CIN
;IOT SIMULATOR FOR WRITING TO TTY & REAL STRING OUTPUTER
COUT: IDPB A,OBP
AOJ N,
CAIE N,OBUFLN*5
JRST (Z)
OBCLR: JUMPE N,(Z)
MOVE OBP,[440700,,OBUF]
.CALL [ SETZ
SIXBIT /SIOT/
1000,,TTYO
OBP
SETZ N]
.LOSE 1000
MOVE OBP,[440700,,OBUF]
JRST (Z)
;INTERRUPT HANDLER
TSINT: 0
0
PUSH P,A
MOVE A,TSINT
NXTINT: TRZE A,2
PUSHJ P,MORE
TRZE A,1
JRST TYIINT
INTRET: POP P,A
.DISMIS TSINT+1
TYIINT: MOVEI A,TTYI
.ITYIC A,
JRST INTRET ;IGNORE FALSE CHAR INTERRUPTS
.RESET TTYO, ;FLUSH OUTPUT
.RESET TTYI, ;AND INPUT
.IOT TTYO,A
JRST FINIS
;VARIOUS CALL BLOCKS
DSKOPN: SETZ
SIXBIT /OPEN/
5000,,.BAI
1000,,DSKBI
DEVICE
FNAME1
FNAME2
SETZ SNAME
IDXOPN: SETZ
SIXBIT /OPEN/
4000,,A
1000,,DSKIO
DEVICE
FNAME1
IXNAME
SETZ SNAME
OFOPEN: SETZ
SIXBIT /OPEN/
5000,,.UAO
1000,,TTYO
ODEVIC
ONAME1
ONAME2
SETZ OSNAME
RFDATE: SETZ
SIXBIT /RFDATE/
A
SETZM B
SFDATE: SETZ
SIXBIT /SFDATE/
1000,,DSKIO
SETZ D
LSCOPN: SETZ
SIXBIT /OPEN/
5000,,.BAI
1000,,DSKBI
[SIXBIT /KS/]
[SIXBIT /MOVIES/]
[SIXBIT /LSC/]
SETZ [SIXBIT /COMAIL/]
;NLSCOP: SETZ
; SIXBIT /OPEN/
; 5000,,.BAI
; 1000,,DSKBI
; [SIXBIT /DM/]
; [SIXBIT /SPECS/]
; [SIXBIT /545MVE/]
; SETZ [SIXBIT /.BATCH/]
PBLOCK: SETZ
SIXBIT /SIOT/
5000,,%TJDIS ;ENABLE ^P HACKERY
1000,,TTYO
PSBP
SETZ PSNUM
IMGIOT: SETZ
SIXBIT /IOT/
5000,,%TJSIO
1000,,TTYO
SETZ A
TYI: SETZ
SIXBIT /IOT/
5000,,%TIACT
1000,,TTYI
SETZ A
PEEK: SETZ
SIXBIT /IOT/
5000,,%TIPEK+%TIACT
1000,,TTYI
SETZ A
TTYSET: SETZ
SIXBIT /TTYSET/
1000,,TTYI
[404040,,404040]
SETZ [414040,,500040]
TTYGET: SETZ
SIXBIT /TTYGET/
1000,,TTYI
2000,,A
2000,,A
SETZM A
CNSGET: SETZ
SIXBIT /CNSGET/
1000,,TTYI
2000,,A
2000,,A
2000,,A
2000,,A
SETZM A
SCPOS: SETZ
SIXBIT /SCPOS/
1000,,TTYI
1000,,0
SETZI
;ERROR CRUFTIES
DEFINE DEFERR NAME,STRING
NAME: MOVEI C,[ASCIZ/!STRING!/]
JRST ERRPRT
TERMIN
DEFERR ILLCHR,[Illegal character in JCL]
DEFERR ILFILE,[File not found]
DEFERR ILLSWI,[Illegal switch]
DEFERR MVELST,[Information not currently available]
DEFERR NOLSC,[The LSC movie guide seems to be missing.]
DEFERR DOCLST,[No such descriptor found in this DOC file]
DEFERR DLIST,[Known documentation types: CALL UUO USET SUSET TTYVAR INTRUP MUD(DLE)]
DEFERR BADTYP,[Bad DOC type, use DOC^K to list possibilities]
DEFERR SFDLST,[Set-file-date CALL lost]
DEFERR RFDLST,[Read-file-date CALL lost]
DEFERR IDOLST,[Open for output of new index file lost]
DEFERR FILLST,[Documentation file or index in bad format]
;NORMAL EXIT
CFINIS: JSP Z,OBCLR
FINIS: .VALUE [ASCIZ ":KILLî:VKî"]
END START