From d0fc04469ac6f294085f3fdc0798988dc16db799 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Wed, 16 Nov 2016 10:07:44 +0100 Subject: [PATCH] Add some system documentation. .CALLS - Symbolic system calls. UUOS - Old system calls. BINFMT - Program binary formats. UFD - Disk format. --- doc/sysdoc/_calls.127 | 5244 +++++++++++++++++++++++++++++++++++++++++ doc/sysdoc/binfmt.101 | 272 +++ doc/sysdoc/ufd.100 | 148 ++ doc/sysdoc/uuos.112 | 2290 ++++++++++++++++++ 4 files changed, 7954 insertions(+) create mode 100755 doc/sysdoc/_calls.127 create mode 100755 doc/sysdoc/binfmt.101 create mode 100755 doc/sysdoc/ufd.100 create mode 100755 doc/sysdoc/uuos.112 diff --git a/doc/sysdoc/_calls.127 b/doc/sysdoc/_calls.127 new file mode 100755 index 00000000..f92a3c58 --- /dev/null +++ b/doc/sysdoc/_calls.127 @@ -0,0 +1,5244 @@ +ITS CALLS: + +This file attempts to maintain up-to-date documentation on all +symbolic ("new") system calls. 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: + + :MAIL INFO-ITS@AI I added more details to the "FOO" call ^C + +If you want to be put on the INFO-ITS mailing list, +just say so in a message to it. +------------------------------------------------- + +The format for executing a new system call is: + +CALL: .CALL CALBLK ;the call itself + ;error return is to CALL+1 + ;successful return is to CALL+2 + + + ... + +CALBLK: SETZ ;always + SIXBIT /NAME/ ;where "NAME" is any implemented call + parm1 ;parameters start here + parm2 + + ... + + SETZ parmn ;bit 4.9 (SETZ) => last argument + +A list of all implemented system calls may be seen in +AI:SYSTEM;ITS > starting at SYSCTB:. The actual addresses +within ITS where each call is executed may be found from the +table starting at SYSCTD:. + +There are four types of parameters: + (input) argument + (output) value + (error) error return code + (input) control + +Bits 4.1-4.3 of the parameter word form an "op code" +for that parameter: + + Op Code Meaning Symbol Value + + 0 argument %CLIN 0000 + 1 immediate argument %CLIMM 1000 + 2 value %CLOUT 2000 + 3 error return code %CLERR 3000 + 4 control %CLBTW 4000 + 5 immediate control %CLBIT 5000 + + +The indirect, index, and address fields are used to calculate +an effective address, PDP-10 style. These point to the location +where the argument is or the output is to be placed. For +immediate parameters the address itself is the argument or +control bits. (Some calls update their input arguments. Such +arguments may not be immediate.) + +The order of the input arguments matters; so does the order of +the output values. Other than that, the order is irrelevant. +(As a matter of style, one normally writes them in the order +"control, arguments, values, errors" for clarity. In the descriptions +given here the parameters will always be described in that order.) + +If too many input arguments are present, the excess are ignored, +except that more than 9 arguments will cause error 15. If too +few arguments are present, error 30 occurs. If too many output +values are specified, the extra values will be garbage. If too +few output values are specified, only those specified will +receive information, and any extra output is thrown away. +Specifying more than one error return parameter causes error 15. +Specifying an illegal sixbit name for the call causes error 43. + +If an error return parameter is specified, then if the call +takes the non-skip return an error code will (probably) have +been stored into the error return parameter. It is also +stored into the I/O Status Word of some channel, as before. +If the call fails but no error code is returned, the error +return parameter is zeroed. Note that the error return parameter +is also zeroed if the call succeeds. Also, since this zeroing +takes place when the arguments are first processed, the error +return parameter should not be located on top of any input +arguments. Only one error return parameter is permitted. + +The values of all control bit parameters given are XOR'ed +together, and the result may or may not be used by the system +call. Only the right half of a non-immediate control bit +parameter is significant. Some system calls XOR the left +half of their first argument with the control bits as well. + +FAILURE CODES: Returned by New System CALLs (and .OPEN's, etc.) + +The failure code from a new system call that doesn't skip can be +obtained by reading the .USET variable .BCHN to find the number of +the channel on which the code was returned, and then reading +that channel's .IOS variable (using the .STATUS uuo or +the STATUS symbolic call) to get a word with the error code +in bits 3.6-3.1. + +Alternatively an error return code argument may be specified and the error +code will be stored right-justified (not in bits 3.6-3.1, but bits 1.6-1.1). +To get the corresponding message from the ERR device, use a first file +name of 4 (number, not sixbit) and use the error code as the second file name. + +The error codes which may be returned by each individual call are described +in the documentation for that call. Note that if the call is interpreted +by a job device, any error code may be returned, not just those documented; +job devices should, however, adhere as closely as possible to normal +error code conventions. Errors codes 15, 30, 43, and 44 may be returned by +any symbolic system call, and so are not included under the individual +descriptions. + +The ERR device can be used to get a corresponding message as indicated in +the table on the following page. See the OPEN system call for information +on the ERR device. + +The error codes have symbolic names, which are pre-defined in DDT and +MIDAS. The first two characters in the name are "%E". The remaining +letters usually follow the following conventions. 3rd and 4th letters: +"TM" = "too many", "BD" = "bad or illegal", "TF" = "too few", "RO" = +"read-only", "NA" = "not available", "NS" = "no such", "EX" = "already +exists", "FL" = "full", "NR" = "not ready". 5th and 6th letters: "JB" = +"job", "RG" = "arg", "DV" = "device", "DR" = "directory", "IO" = +"direction", "FL" = "file", "FN" = "file name". + +ERROR CODES: + +Number Symbolic Message +------ -------- ------- +1 %ENSDV NO SUCH DEVICE +2 %ENSIO WRONG DIRECTION +3 %ETMTR TOO MANY TRANSLATIONS +4 %ENSFL FILE NOT FOUND +5 %EFLDR DIRECTORY FULL +6 %EFLDV DEVICE FULL +7 %ENRDV DEVICE NOT READY +10 %ENADV DEVICE NOT AVAILABLE +11 %EBDFN ILLEGAL FILE NAME +12 %ENSMD MODE NOT AVAILABLE +13 %EEXFL FILE ALREADY EXISTS +14 %EBDCH BAD CHANNEL NUMBER +15 %ETMRG TOO MANY ARGUMENTS +16 %ENAPK PACK NOT MOUNTED +17 %ENADR DIRECTORY NOT AVAIL +20 %ENSDR NON-EXISTENT DIRECTORY +21 %ELCDV LOCAL DEVICE ONLY +22 %ESCO SELF-CONTRADICTORY OPEN +23 %ENAFL FILE LOCKED +24 %ETMDR M.F.D. FULL +25 %EMCHN DEVICE NOT ASSIGNABLE TO THIS PROCESSOR +26 %ERODV DEVICE WRITE-LOCKED +27 %ETMLK LINK DEPTH EXCEEDED +30 %ETFRG TOO FEW ARGUMENTS +31 %EROJB CAN'T MODIFY JOB +32 %EROPG CAN'T GET THAT ACCESS TO PAGE +33 %EBDRG MEANINGLESS ARGS +34 %EBDDV WRONG TYPE DEVICE +35 %ENSJB NO SUCH JOB +36 %EBOJ VALID CLEAR OR STORED SET +37 %ENACR NO CORE AVAILABLE +40 %ETOP NOT TOP LEVEL +41 %ENAPP OTHER END OF PIPELINE GONE OR NOT OPEN +42 %ENAJB JOB GONE OR GOING AWAY +43 %ENSCL ILLEGAL SYSTEM CALL NAME +44 %ENSCH CHANNEL NOT OPEN +45 %ENRBF INPUT BUFFER EMPTY OR OUTPUT BUFFER FULL +46 %EBDFL UNRECOGNIZABLE FILE +47 %EBDLK LINK TO NON-EXISTENT FILE + +ARGS: Special Common Types of Arguments + + TTY channel # + STY channel # (accesses TTY which is STY's alter ego) + 400000 + TTY # (may be used to examine TTY variables, + but not to alter them or to transact input/output) + + channel # for USR device + channel # for JOB device (means job on other end, + unless argument may also be a , in which + case the job device will interpret things) + channel # for BOJ device (means calling job) + channel # for STY device (means job possessing + the corresponding TTY) + 400000 + job # (user index) + -1 or 777777 specifies self. + 400377 specifies superior. + 400376 specifies the pdp6. + + The symbols %JSELF (777777), %JSNUM (400000), %JSSIX (400376), + and %JSSUP (400377) are pre-defined in MIDAS and DDT. + Various other symbols beginning with %JS are defined + for special codes that can be used instead of a + spec with certain calls; they are documented + under those calls. + + channel # for JOB device + + Many symbolic system calls which take a channel number + as the first argument may be passed to JOB devices + for interpretation by that device. A few act on the device + itself, and are not passed for interpretation. Those + passed for interpretation include: + ACCESS CNSGET CNSSET + DIRSIZ DSKUPD FILBLK + FILLEN FINISH FORCE + JOBCAL JOBGET JOBINT + JOBIOC JOBRET JOBSTS + LISTEN NETAC NETBLK + NETINT RAUTH RHCST + RCPOS RDMPBT RENMWO + RESET RESRDT RFDATE + RFPNTR RSSIZE SAUTH + SCML SCPOS SDMPBT + SETIOC SFDATE SRDATE + SREAPB STLGET STYGET + TTYGET TTYSET TTYVAR + TVWHER WHOLIN WHYINT + + The JOB device may of course interpret such calls in + any way desired, and return any results desired. + It is of course advisable to adhere as closely to + the standard actions of each call as possible. + + Most of the above calls simply pass the symbolic + call name and arguments along to the JOB device. The + following have special interfaces for historical reasons: + + ACCESS RCHST RENMWO + RESET + + The following calls can open up a JOB device if their + sixbit device name argument is not the name of a + device that is built into the system: + + DELETE MLINK OPEN + RENAME + + Those calls which are definitely NOT passed for + interpretation include: + CLOSE + IOT + SIOT + STATUS + RFNAME + IOPUSH + IOPOP + These calls interact with the JOB device in another way. + +A number of these calls include special bits and fields in their +arguments or return values. Several files exist which contain +symbolic definitions of these bits and fields. These files +can be inserted into a MIDAS program with .INSRT. In addition, +most of the symbols are predefined in MIDAS and DDT through +a symbol table in the system. The symbols defined are the same +as used in this documentation. + +The following files exist on the SYSENG directory. + + FSDEFS > Bits in fields used by the file system, + including the format of directories. + ITS BITS Miscellaneous bits and codes. + +The following errors are standard for all calls that take +arguments, and are generally not documented under the individual +calls: + + 14 BAD CHANNEL NUMBER + The argument was not a special negative code, not + 400000+a user number, and not a valid channel number. + 33 MEANINGLESS ARGS + A random number that could not be decoded was given + as a argument. + 34 WRONG TYPE DEVICE + A channel number was specified that did not have open an + appropriate type of device (generally USR, STY, or BOJ). + 35 NO SUCH JOB + 400000+user number was specified, but the user number + did not correspond to a currently-existing job, or + 400377 was given, specifying the superior, but the job + was top-level. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + A STY channel number was specified, but the corresponding + TTY was free and had no associated job. + 42 JOB GONE OR GOING AWAY + The specified job exists but is in process of being killed. + +The following errors are standard for all calls that take arguments: + + 1 NO SUCH DEVICE + 400000+tty number was specified, but there is no tty with the + indicated number. + 14 BAD CHANNEL NUMBER + The argument was not 400000+tty number and was not a valid + channel number. + 34 WRONG TYPE DEVICE + A channel number argument does not refer to a channel open + to a STY or a TTY. + 44 CHANNEL NOT OPEN + The specified channel is not open. + +ACCESS: set file access pointer + + arg 1 Channel number. + arg 2 New access pointer. This pointer is + the number of bytes from the beginning + of the file of the next byte to be + processed. Note that in block mode, + even ASCII block mode, a byte is always + a full word. + + This is useful primarily for DSK and disk-like job devices; + that is, any device which has "files." + + See also the .ACCESS uuo. + +Errors: + + 14 BAD CHANNEL NUMBER + + If the ACCESS pointer is set to more than the number of words in + in the file, an IOC error 2 will occur on the next IOT operation + on that channel. + +ATTACH: attach a job-tree to a console (ITS DETACH) + + cbits 2.9 If there are 2 args, causes the jname + of the job being attached to be changed + to HACTRN, unless there is already a HACTRN. + 1.3 "P" the job by clearing bit 4.4 of .USTP + arg 1 to be attached to the console. + arg 2 Optional: to attach it to. Must be free. + If not present, the executing job must be + top-level and console-controlled; it is logged + out, and its console used as the tty to attach to. + + Attaching a job tree to a tty causes the job tree to be + console-controlled with the specified tty as its console. + The specified job must be either the top-level job of + a disowned job tree, or a direct inferior of the job executing + the ATTACH; in the latter case the specified job is disowned + first. The tty to be attached to must be free. In the + one-argument case the job executing the ATTACH must be the + top-level job of a console-controlled job tree; it is logged + out to make the console free. The one-argument case furthermore + causes the attached job to take on the jname of the job + executing the ATTACH. In the 2-argument case, control bit + 400000 causes the attached job to take on the jname HACTRN, + unless that would cause it to have the same names as an + existing job. + + The one-argument case is made available in DDT via the + command :ATTACH, which attaches the current job to the console. + Also, when a user logs in (say as FOO), DDT checks for the + existence of a job called FOO HACTRO; if it exists, DDT asks: + --ATTACH YOUR DETACHED JOB-- + If at this point the user types a space, DDT executes the + commands "HACTROJ :ATTACH ", thereby attaching the HACTRO to + the console, and changing the HACTRO's name to HACTRN. + This affords a convenient method of recovery from automatic + detachment. + + See the DETACH symbolic system call. + +Errors: + + 10 DEVICE NOT AVAILABLE + This job's tree is not console-controlled (one argument); + the specified tty is not free or does not exist (two arguments). + 14 BAD CHANNEL NUMBER + The first argument is not a valid channel number. + 31 CAN'T MODIFY JOB + The specified job is not disowned or a direct inferior. + 34 WRONG TYPE DEVICE + First argument must be a job. + 35 NO SUCH JOB + First argument specified a non-existent job. + 40 NOT TOP LEVEL + The executing job must be a top-level job (one argument). + +ATTY: pass tty to inferior + + arg 1 + + The tree's console tty is passed to the , which must + be a direct inferior. This is the same as the .ATTY uuo. + +Errors: + +31 CAN'T MODIFY JOB + The specified job is not a direct inferior. + +34 WRONG TYPE DEVICE + The specified job is the pdp-6. + +42 JOB GONE OR GOING AWAY + The specified job is dying. + +CALL: perform system call + + arg 1 Name of symbolic system call to perform. + + The other arguments serve as the arguments to the + specified symbolic call. The values and errors returned by + that call become the values and errors of this call. + This is useful if the name of a symbolic call is to be + determined dynamically. Lisp hackers should think of this + as the "Funcall" system call. + +CHAOSO: open Chaosnet connection + + arg 1 - receive channel number + arg 2 - transmit channel number + arg 3 - receive window size + + First, the two specified channels are closed. Then an index + is assigned to the user and the two channels are set up to + point to it. Two channels are used since in general ITS + channels are unidirectional, and to allow to the user to + handle receive and transmit interrupts differently. + + The created index is placed in the Closed state. To set up + a connection, IOT an RFC or LSN packet down the transmit + channel. + +CHAOSQ: Chaosnet Queue + + arg 1 - address of a 126.-word block (packet buffer) + + This is a special system call for use by the ATSIGN CHAOS + program, which is a daemon program that gets run when + an RFC is received that does not match up against an + existing LSN. + + The first packet on the pending-RFC queue is copied + into the packet buffer, then moved to the end of the + queue (so that the right thing happens when several + RFC's are pending at the same time.) + + The call fails if the pending-RFC queue is empty. + + The program should use the contact name in this + packet to choose a server program to execute. This + server program will then LSN to (presumably) the same + contact name, thus picking up the RFC. + +CLOSE: close input/output channel + + arg 1 Channel number to close. + + The specified input/output channel is closed. + + For TCP connections: + A CLOSE on the output channel will cause an automatic FORCE, + and a FIN segment will be sent to the remote host indicating + "no more data to send". However, the input channel will + remain open, and data can continue to be read from it. + A CLOSE on the input channel will cause any further input received + to be thrown away by ITS. Output can continue to be sent. + Return from this call is immediate; it will not hang. Note that, + like NCP, this does not allow the user to determine + whether the last stuff successfully reached the destination or + not. When this is desirable, a FINISH should be done prior to + the CLOSE. + +For the Chaosnet: + Immediately closes the connection. All buffers and other + information associated with the index are discarded. Normally + the user should first IOT a CLS + packet containing an ascii explanation for why it is + closing. Note that any data previously written on the + connection but not yet received by the other end will be + lost. The system will attempt to send a CLS with reason + "channel closed", but this will only be sent if buffer space + is available. + + See also the .CLOSE uuo. + +CNSGET: get various console parameters (ITS TTY) + + arg 1 or + val 1 Vertical screen size. + val 2 Horizontal screen size. + val 3 TCTYP variable. + 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 H19 + 16 %TNAAA Ann Arbor Ambassador + val 4 TTYCOM variable. + 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. + val 5 TTYOPT variable. + 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. + 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. + Use pad chars. + On displays, + 0 don't use tabs. + 1 use tabs. + 2 use VT52-style absolute positioning. + 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. + 1.1 %TPIBM It really is a 2741. + val 6 TTYTYP variable. + 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. + val 7 TTYSMT variable. + 4.9-4.7 %TQMCH Machine type + 0 = nothing special 1 = PDP11 2 = PDS4 + 3 = 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 rectangle commands + 3.2 %TQSET Terminal implements multiple object sets + 3.1 %TQGRF Terminal understands graphics protocol + 2.9 %TRGIN Terminal has graphic imput + 2.8 %TRGHC Terminal has graphic hardcopy + 2.7 %TRLED Terminal has local editing protocol + 2.6 %TRSCN Terminal implements raster commands + 2.5-2.3 %TRLSV <>0 means terminal supports 4**N saved lines + 2.2-1.7 %TRTIM signed offset from GMT minus 20 or zero if + terminal's timezone is unknowable. + + See also the CNSSET, TTYGET, and TTYSET symbolic system calls. + +CNSSET: set various console parameters (ITS TTY) + + arg 1 or + arg 2 Vertical screen size (negative => no change). + arg 3 Horizontal screen size (negative => no change). + arg 4 TCTYP variable (negative => no change). + 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 H19 + 16 %TNAAA Ann Arbor Ambassador + arg 5 TTYCOM variable. + 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.) + 3.9 %TCINP Someone waited for input since last home-up. + The remaining bits, documented under CNSGET, may not be changed. + arg 6 TTYOPT variable. + 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. + 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. + Use pad chars. + On displays, + 0 don't use tabs. + 1 use tabs. + 2 use VT52-style absolute positioning. + 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. + 1.1 %TPIBM It really is a 2741. + + Omitting an argument also means no change (only works + if all arguments after it are also omitted, of course.) + Not all bits of the variables are settable; those explicitly + not user-settable have been omitted above. If contradictory + bits are supplied, the system will reconcile the conflicts. + See also the CNSGET, TTYGET, and TTYSET symbolic system calls. + +CORBLK: modify blocks of core in page map (ITS CORBLK) + + cbits 2.9 %CBWRT Try to get write access; okay if can't. + 2.8 %CBRED Try to get read access; okay if can't. + 2.7 %CBNDW Try to get write access; fail if can't. + 2.6 %CBPUB Make page public. This operation fails if + an attempt to get write access would fail; + however, it does not actually get write + access unless bit 2.7 is set also. + Any job is allowed to get write access to + a public page. + 2.5 %CBPRV Make page private. This operation fails if + an attempt to get write access would fail; + however, it does not actually get write + access unless bit 2.7 is set also. + A job can have write access to a private page + only if it is getting the page from itself or + a job it is allowed to write in, and that job + has write access itself. Pages are usually private. + 2.4 %CBNDR Fail if can't get read access + (attempting to share with a non-existent page). + 2.3 %CBCPY Make a copy (disk files only). + 2.2 %CBLOK Lock page in core (don't allow swap out.) + 2.1 %CBULK Unlock page from core. + 1.9 %CBSLO Force page to reside in slowest memory. + This is useful when trying to get + reproduceable run time measurements. + 1.8 %CBUSL Undo the effect of %CBSLO + Bits 2.2-1.8 are not yet implemented. + All zero means delete page from page map. + arg 1 RH and LH are XOR'd with control bits. + arg 2 to put page into (or delete it from). + arg 3 Page number within job specified by arg 2. + If LH negative, block mode operation: + After doing operation, increment arg 5 if any, + AOBJN arg 3, write args back into user core, + and repeat the operation, until LH of arg 3 + becomes positive. + arg 4 Any one of the following: + to get page from. + Disk channel number. + When disk file pages are inserted, + the access pointer is left pointing + after the last word of the last page + inserted. + If the pages so inserted are inserted + with write access for modification, + the DSKUPD symbolic system call may + be used to set the creation and + reference dates for the file. + PDP-6 channel number. + One of the following special negative codes. + Only the right-half matters. + -2 %JSTVB means video buffer pages. + Pages 0-7 are video buffer. + First word of page 10 contains + console register and ALU. + See the .TVCREG user variable, + and the VIDBUF and VIDSW symbolic + system calls. + -5 %JSNEW get a fresh page. A new page, not + shared with any other, will be created. + The system tries to zero it out, but + currently may fail to if there is already + a page at the destination address. If + wasn't very difficult to fix, I'd fix it + instead of documenting it. + -6 %JSABS an absolute page. Arg 5 specifies the + desired page of physical memory. You are + not permitted write access to such a page. + 400000 specifies the system job (job # 0). Sharing + a page with the system job is almost like + getting an absolute page via %JSABS, since + the system job's address space mostly + corresponds to physical memory. + 400001 specifies the core job. For historical + reasons, this is taken to mean get a fresh + page instead. This special case will go + away some day, so use %JSNEW instead. + If arg 4 is omitted, it is the same as arg 2. + arg 5 Page number within source specified by arg 4. + Arg 5 is ignored for fresh page. + If omitted, same as arg 3 if source is a job. + If source is a disk file, the current access + pointer rounded down to a page boundary + is the default. + +Errors: + + 10 DEVICE NOT AVAILABLE + PDP-11 TV not available for mapping. + 14 BAD CHANNEL NUMBER + Argument 2 or 4 is invalid. + 31 CAN'T MODIFY JOB + Executing job doesn't have modification rights to the job + specified by argument 2. + 32 CAN'T GET THAT ACCESS TO PAGE + Can't satisfy access requested by cbits 2.7-2.4. + This usually means that the page does not exist in the + source specified in argument 4, or that it exists but + write access is not permissible. It may also mean that + an absolute page which normally exists is currently down. + 33 MEANINGLESS ARGS + Page number outside range 0-377 for another job's page, + or outside 0-10 for a video buffer page, + or outside 0-17 for a PDP-6 page. + The allowed range for absolute pages depends on the machine. + 34 WRONG TYPE DEVICE + Can't map pages from any device other than those listed above. + 35 NO SUCH JOB + Argument 2 or 4 specified a non-existent job. + 37 NO CORE AVAILABLE + Tried to get fresh page, but no more (virtual) core is available. + The total number of distinct pages in the system is limited + by the size of the MMP table. + +CORTYP: determine type info from page map (ITS CORBLK) + +If one argument: + arg 1 Page number within current job. +If two arguments: + arg 1 + arg 2 Page number within specified job. + val 1 4.9 %CBWRT Page is writable. + 4.8 %CBRED Page is readable (exists). + 4.6 %CBPUB Page is public (writable by anyone) + 4.2 %CBLOK page is locked in core + (inhibited from swapout) + 3.9 %CBSLO Page is in slow memory + (Doesn't work; Moon says it never will) + For non-existent page, whole word is zero. + Thus, this value is: + zero => no page. + positive => read-only page, + negative => writable page. + val 2 0 Absolute page. + -1 Unshared page. + other User index of next job in circular + list of jobs sharing the page. + val 3 For val 2 = 0, absolute page number. + For val 2 = -1, zero. + Otherwise, page number within job specified + by val 2. + val 4 4.9 Page is in core. + 2.9-1.1 Number of times page is shared (zero + for absolute or non-existent page, + else >=1 ). + +Errors: + + 14 BAD CHANNEL NUMBER + 33 MEANINGLESS ARGS + Page number was outside range 0-377. + 34 WRONG TYPE DEVICE + Channel not open on USR, BOJ, JOB, or STY device. + 35 NO SUCH JOB + +DELETE: delete a file + + Either + arg 1 Byte pointer to ASCIZ filename string, + or aobjn pointer to block of such byte pointers. + + or + arg 1 Left-justified device name, in SIXBIT. + arg 2 File name 1 in SIXBIT. + arg 3 File name 2 in SIXBIT. + arg 4 Sname in SIXBIT. + + The file specified either by the four SIXBIT names or by the + ASCIZ string(s) is deleted. + + See the SOPEN symbolic system call for how the byte or AOBJN + pointer argument should be formatted and how the string(s) are + parsed. + +DELEWO: Delete file While Open. + + arg 1 Channel number. + + The file open on the channel is marked for deletion. + It is actually deleted as soon as all channels referencing + it (including the one used by the DELEWO) are closed. + In the meantime, it is inaccessible (starred in the directory). + Either an input channel or an output channel can be used. + +Errors: + + 34 WRONG TYPE DEVICE + This call works only on DSK, and such job devices as simulate DSK. + +DEMSIG: demon signal + + arg 1 Sixbit name of demon to signal. + arg 2 Optional: + zero => signal once only. + positive => signal repeatedly every 2*n minutes. + negative => load demon but do not signal. + + A demon is a program which runs (and perhaps even exists) + only when a request has been signaled for it. If the + demon with the specified demon is not currently running, + the system job creates a demon job and loads it from the + file SYS:ATSIGN , where is the name of the + demon. + When the demon runs, it can acknowledge receipt of one + or more signals by using the .DEMON uuo (q.v.). + The status of a demon can be examined and altered by + using the RDDMST and STDMST symbolic system calls. + When the system is started up, there is a once-only + signal for the DEMSTR demon pending; this demon normally + signals requests for all other standard systemic demons. + + Demons were much used on the DM machine for various purposes. + Standard demons which are started by the DEMSTR demon include + (as of July 23, 1975): + NAME REPT RATE PURPOSE + TCTYP 0 Set terminal types?? (Doesn't exist on SYS) + UNSPOO 0 Line printer unspooler (TPL). + SURVEY 10. Network survey generator. + LDRDEM 0 Loader demon (obsolete). + BATCHM 0 Old batch monitor (obsolete). + COMSYS 0 Old message demon (obsolete). + NETRJS 0 CCN remote job server demon. + ZONE 0 MUDDLE compile batcher. + MG 0 Maze Guncher - kills games of MAZE + in an obscure way. AV doesn't like them. + COMDMN 0 Communications demon (replaces COMSYS). + BATCHN 0 Batch monitor (replaces BATCHM). + RFC402 0 Message archival demon. + +DETACH: detach a job tree from a console (ITS DETACH) + + arg 1 for any job in the tree to be detached. + If omitted, the tree referred to is that + of the executing job. + cbits 1.1 Leave the detached tree as a non-disowned, + non-console-controlled tree, instead of as + a disowned tree. + 1.2 Use system tree's resource word instead + of disowned resource word. This is to + be used only by legitimate system daemons. + 1.3 "P" the job by clearing bit 4.4 of .USTP + 1.4 if an hour goes by and the detached tree + does not run and is not reowned or attached, + it will be killed automatically by the system. + 1.5 suppress the console-free message that would + otherwise be printed on the tree's console. + The entire job tree which the specified job belongs + to is made to be disowned. If it was controlled by + a console, that console is made free. If the tree is + already disowned, nothing happens, but the DETACH call + skips anyway. If the top level job of the tree has a + jname of HACTRN, the jname is incremented to be HACTRO + and then re-incremented as necessary to make its uname- + jname pair unique. + + DDT provides a command :DETACH which detaches the tree + the DDT itself is in. LOCK provides a DETACH command + for detaching other trees conveniently: + DETACH detaches the tree containing the + job with user index . + DETACH detaches the tree containing + the job named . + + Automatic detachment by the system job: + Fatal interrupts in top-level jobs will cause them to be stopped + and then detached by the system job, which will type the message + TOP LEVEL INTERRUPT, TREE DETACHED + on the console detached from, followed by the normal + console-free message. A message is also printed on the system + console saying which job was detached from which terminal. + + If the PDP-11 controlling the TV consoles crashes, the system + job automatically detaches all job trees controlled by TV + consoles. This allows the user to log back in and re-attach + his job tree when the PDP-11 is restarted. + If the ARPA network crashes (that is, the local network + attachment crashes, or the host which is connected to + the console of a particular console-controlled tree + crashes) the server telnets automatically detach those + job trees whose consoles are no longer connected to anything. + On some ITS machines if a dial-up line is disconnected + the job tree controlled by that line will be automatically + detached. Other ITS machines do not have the hardware to + to detect disconnection. + When a tree is detached because its tty, whether TV, network + connection, or dialup line, has disconnected, then if the + tree is not logged in it will be killed immediately. + + Whenever a tree is detached automatically for any of the + reasons mentioned above, control bit 1.4 is used, so the + tree will go away if it is not touched for an hour. + + See the ATTACH and DISOWN symbolic system calls. + +Errors: + + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + Cannot detach the SYS or CORE jobs, or the PDP-6. + 34 WRONG TYPE DEVICE + 35 NO SUCH JOB + +DL10MP: Hack the DL10 (pdp11 interface) + + THIS SYSTEM CALL CAN CRASH THE SYSTEM IF MISUSED. IT SHOULD + NOT BE USED LIGHTLY. + + arg 1 Page number + val 1 AOBJN pointer to DL10 control area + val 2 Pointer to 3 words for pdp11 examine/deposit commands + val 3 Pointer to first free word in DL10 control area + + A read/write, unencached, absolute page is created at the + specified page number in the user's address space. The page + contains the DL10 control area, which can be used to examine, + deposit, or bootload the pdp11. A message is printed on the + system console when this call is used. + +Errors: + +13 FILE ALREADY EXISTS + The page slot specified is already in use. + +33 MEANINGLESS ARGS + The page number is invalid. + +DIRSIZ: read the total size of files in a directory. + + arg 1 The number of a channel open on the DSK device, + or a . The channel should be open to a file + in the directory to be hacked. + + arg 2 (optional) quota + + arg 3 (optional) dsk number,,allocation + + val 1 quota,,total number of disk blocks used by files + this directory + + val 2 dsk number,,allocation (normally 0). + +DISMIS: dismiss an interrupt (ITS INTRUP) + + arg 1 Points to the third of three words which + are the new .DF1, .DF2, and .UPC + variables for use in dismissing the interrupt + (but see the cbits for this call). + If not an immediate argument, it is assumed to + be a pdl pointer which is appropriately + popped three times to get these items. + It is then popped twice more to flush the + two interrupt words pushed by a new-style + vectored interrupt. + If the job has enabled the pdl overflow + interrupt (bit 2.8 of the .MASK user variable) + then it will receive such an interrupt if the + popping by DISMIS causes pdl underflow. + arg 2 If present, overrides the new pc on the + stack specified by arg 1. + arg 3 If present, overrides the new .DF1 on + the stack specified by arg 1. + arg 4 If present, overrides the new .DF2 on + the stack specified by arg 1. Thus if four + arguments are supplied, the first is + effectively ignored, except for popping. + arg 5 If present, is the ,, + for a LOSE that is done, uninterruptably, + after the interrupt has been dismissed. + + cbits The control-bits for this argument specify + extra words to be popped off the pdl pointer + which is the first arg, BEFORE the PC and defer + words are popped. The cbits are ignored if the + first arg is immediate. The intention is that + the cbits will tell DISMIS how to pop exactly + what was pushed when the interrupt happened. The + format of the cbits is the same as that of the LH of + the first word of the interrupt table (for new-style + vectored interrupts) (see ITS INTRUP), which is what + specifies what is to be pushed when an interrupt happens. + It is: + 2.9=1 => throw away three words first thing. Throws away + the debugging info that interrupts can push. + 1.1-1.5 nonzero => it is number of ACs to be popped, + and 1.7-2.1 is the number of the lowest AC to be popped. + The ACs to be popped are BLT'ed out of the stack. + + If four arguments are supplied and the first is + immediate, then the first is totally ignored (except + that the address calculation is performed). + Thus this call is good for dismissing old-style + interrupts as well as new-style (stack oriented) + interrupts. + + Note that if the job is using the feature that interrupts + automatically push some accumulators or some debugging info, + it must explicitly request (with the control bits) that the + same words be popped. DISMIS does NOT vary its function + according to the job's interrupt table, for a given set of args. + + If the interrupt handler wishes to pretend that a class 2 + interrupt had not been enabled, it can dismiss the interrupt + and supply a fifth argument which is like the first argument + to a symbolic LOSE system call. Making the rh of that + argument 1+.LZ will cause DDT to print the + error message appropriate to an unhandled interrupt on that + bit. The lh. of that argument should be the address of + the instruction that caused the interrupt. + + See also the .DISMISS uuo. + +DISOWN: disown an inferior job + + cbits 1.4 Set BUMRTL, saying that if for one hour the + job does not run and is not attached or reowned + it should be gunned down by the system. + 1.3 Perform .USET ,[.SUSTP,,[0]]. + In this way the job is not started until + after being disowned. + 1.2 Use the system resource word instead of + the disowned job resource word for scheduling. + 1.1 Make this job not disowned, but rather the + top-level job of a non-disowned, non-console + controlled job tree. This prevents the job + from receiving 1/4'th priority as ordinary + disowned jobs do. + arg 1 A directly inferior . + + Please do not misuse the 1.1 and 1.2 control bits. These are + intended for generally useful "system daemons" only. + + The specified job is caused to be no longer an inferior of + the executing job, and is made to be the top level + job of a disowned job tree. Because of this, the disowned + job will continue to exist even if its erstwhile superior + does not (if, for example, the user logs out). + + Disowning is illegal if the executing job has given control + of its console to the job to be disowned (see .ATTY). + + All channels on which the executing job has open the job being + disowned will be closed in the process of disowning (see the + .CLOSE uuo). If the disowned job has opened the + console, then the channels are not closed, but + are marked as "disowned tty"; certain operations + on such a channel will succeed, and others will hang + until the job is re-owned and a console tty given + to the job. Such channels appear to be open on + tty number %TINON=77 octal. + A disowned job is distinguished by the fact that + bit 4.9 of its .APRC user variable is set. + A disowned job never succeeds in executing the RELOAD symbolic + system call, even if it is the top level job in its tree. + When a job tree is logged out, any micro-tapes assigned + to the uname of that job tree are de-assigned (see the + .ASSIGN and .DESIGN uuo's), but only if the job tree is + not disowned. + All disowned jobs share a resource word for purposes of + scheduling, in the same way that all jobs in a single + non-disowned tree share a resource word. Thus all disowned + jobs tend collectively to use no more runtime than any + single non-disowned job tree. + Furthermore, individual disowned jobs are given only 1/4 + the priority to run as a non-disowned job. This does + not apply, however, if the disowned job in question has + .MASTER mode, or controls the 340 display, the E&S display, + the vidisector, the arm, the LPT (line printer), or the + PLT (plotter). + When operating under heavy loads, the swapper prefers to + swap out disowned jobs rather than non-disowned jobs. + + The DETACH symbolic system call makes a non-disowned tree + disowned. See also the %OPDET bit of the .OPTION user + variable. + +Errors: + + 31 CAN'T MODIFY JOB + The specified job must be a direct inferior. + +DSKUPD: disk update + + arg 1 Disk channel number or + + The creation and reference dates for the disk file + open on the channel are set to the current date and time. + The dump check bit is cleared (! will show in the + directory). + This is useful for programs which modify a file by + mapping pages of the file into their page maps with write + access, and which want to indicate this fact by setting + the creation and reference dates. See the CORBLK symbolic + system call for mapping pages of disk files. + + See also the FILBLK, RESRDT, RFDATE, and RQDATE + symbolic system calls. + +Errors: + + 34 WRONG TYPE DEVICE + The supplied channel number must be a disk or JOB device channel. + +ECHOIN: echo characters and store them in a buffer, until a break character + + arg 1 TTY channel number + arg 2 Byte pointer to buffer + arg 3 Number of characters left in buffer + arg 4 Address of break table + arg 5 Address of TECO buffer block (or zero) + + The second and third arguments are counted out as characters + are stored. When the call returns due to a break character, the + count will still be greater than zero. + + ECHOIN tells the system to echo characters and insert them in + the buffer specified by the second and third arguments without + requiring the user program to be executed. This is more + efficient and gets visibly faster response time. Echoing + stops when either the count is exhausted or a break character + is input. When this happens, the ECHOIN returns. If it returns + because of a break character, then the break character + is available for normal input. Non-break characters following + the break character are not handled. + + Break characters are specified by the break table, + a four-word block pointed to by the fourth argument. Each of + the four words says, for 32 characters, whether they break + or not. In the first word, the sign bit is for SAIL code 0, + and bit 1.5 is for SAIL code 37. The sign bit of the second + word is for Space, and bit 1.5 is for ?. And so on. + Characters with Control or Meta set (including ASCII control + characters on non-Meta keyboards) are always break characters. + + To prevent timing errors, ECHOIN will return immediately if + there are characters in the input buffer already. + + For use by TECO, ECHOIN can update the block of counters which + TECO uses to remember the extent of the buffer. The fifth + argument should point to this block, the "Buffer block", which + is seven words long. When a character is inserted, the first + two words of the buffer block are not changed, the next four + are incremented, and th next one is decremented. Passing the + buffer block to ECHOIN allows ECHOIN to insert characters + directly into TECO's buffer as an indivisible operation. + Note that the insertion of the characters themselves is still + controlled by the byte pointer and count arguments. + However, in the future this may change; when ECHOIN is made + able to handle operations besides insertion, it will use the + buffer block for updating the buffer (which may involve deletion) + but will still insert all characters it processes down the byte + pointer. This way, TECO will have both an updated buffer and + a list of the commands which the user typed. + +FILBLK: get contents of file parameter block + + arg 1 Disk channel number or + val 1 First file name. + val 2 Second file name. + val 3 Random information: + 4.9 Dump check bit. + 4.7-3.7 Word count of last block. + 3.6 Has been deleted from an + unmounted pack. + 3.5 Delete the file when closed. + 3.4 GC mark bit. + 3.3 Open for writing. + 3.2 The grim file reaper should not reap this file. + 3.1 This is a link, not a file. + 2.9-2.5 Pack number. + 2.4-1.1 Pointer to internal UFD descriptor. + val 4 File creation date and time in disk format: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + 2.9-1.1 Time of creation, in half-seconds + after midnight. + val 5 File reference date in disk format: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + 2.1-2.9 Author, as M.F.D. index. + 1.1-1.9 File byte size and bit count in compressed form. + + See also the DSKUPD, RESRDT, RFDATE, RQDATE, SFDATE, + and SRDATE symbolic system calls. + +FILLEN: get file length + + arg 1 Disk channel number or + val 1 File length in bytes of the size + the channel is open in. + val 2 The size of those bytes. + val 3 File length in bytes of the size used to + write it (actually, the size in use the + last time it was opened for writing). + val 4 The size of those bytes. + + The length of the file open on the specified channel + is returned. + + +Errors: + + 34 WRONG TYPE DEVICE + Currently FILLEN works only for disk files and job devices. + +FINISH: wait for output to reach the device + + arg 1: channel # + + Does a FORCE (see below) then waits until all buffered + output has reached the device. + + The following devices currently support FINISH. + + TTY: STY: DSK: NET: CHA: TCP: + + TCP: Does a FORCE (ensures that data is PUSH'd out) and + waits until all data thus far has been ACK'd, i.e. acknowledged + by the foreign host. + + Chaosnet: (channels opened with CHAOSO) + On an output channel, does FORCE and then waits until + there are no queued output buffers. I.e., waits for + all output to be received and acknowledged by the foreign + host. This in fact waits for acknowledge, not just receipt. + +Errors: +* Any errors which the FORCE call might encounter. + +FLAP: flap a micro-tape + + arg 1 Micro-tape number (typically 1-4). + + The directory for the micro-tape is written back onto + the tape if it is currently in core; the tape is then + physically dismounted by running the tape back onto + the original reel (thereby making the tape go flap, flap, + flap ...). Micro-tapes should not be manually dismounted, + for this will cause the directories to get out of phase, + messing up the dismounted tape and also the next one to + use the drive. The FLAP will fail if any files are still + open on the specified drive, or if any one else has the + drive assigned to him. + See also the .UDISMT uuo. + +FLUSH: wait for output to reach the device + + arg 1: channel # + + This call has been renamed to FINISH (in ITS 1052). + The old name will be kept around for a while, but new + programs should not use it. + +FORCE: empty out device's output buffers + + arg 1 - channel # + + If any output is buffered for the device, it is now sent + to the device. Note that this is not needed for the TTY + device since output is always sent as soon as possible. + + It is not necessary to do a FORCE before doing CLOSE. + + The following devices currently support FORCE: + + NET: Causes output to be sent as soon as possible; + otherwise it would only be sent when the buffer + was full or when 2 seconds have elapsed since + output was first put in the buffer. + + TCP: Same as NET, except that the PUSH flag is set + in outgoing segments. If there is no buffered data, + nothing is sent. (Note that ITS TCP always sets PUSH + in all outgoing segments whether FORCEd or not. + Otherwise, a FORCE with an empty buffer would require ITS + to re-send old data with PUSH set in order to nudge the + remote site into action.) + + DSK: Causes the current output buffer and the directory + to be written to disk. + + Chaosnet: (channels opened with CHAOSO) + If there is a partially-filled output packet (created by IOT + or SIOT), it is transmitted. + + The following devices ignore FORCE (it always skip returns) + because they don't need it: + + TTY: STY: LPT: PLT: PTP: COD: + +Errors: + 2 WRONG DIRECTION + TCP: Channel is not an output channel. + 7 DEVICE NOT READY + TCP: Connection not open for writing. +34 WRONG TYPE DEVICE + The device is not an output device, or does not have + the kind of buffered up output which needs this call. + +IOPOP: pop input/output channel + + arg 1 Channel number + + The top entry on the job's IO pdl is popped into the + specified channel. Entries on the IO pdl are made + only by pushing channels with IOPUSH. If a channel + is pushed with IOPUSH and then popped into with IOPOP, + it is in exactly the same state as it would have been + if left untouched; however, the channel is available + for other use in the meantime. + +IOPUSH: push input/output channel + + arg 1 Channel number + + The contents of the specified channel are pushed onto + the job's IO pdl, and the channel is put into a + "closed" state. If the channel had been open, the + open file is not closed, but is instead now open on + the IO pdl slot instead of on the channel. It is + not accessible to the job for IOT'ing, etc., while + there, but it can be popped back into a channel with + IOPOP and then will be available for IO. + + +IOT: input/output transfer + + cbits Per-IOT mode bits. Device dependent. + arg 1 Channel number. LH XOR'd with control bits. + arg 2 Location for input/output transfer. + May not be immediate. + For unit mode, this is the word to + output from or read into. + For block mode this is an AOBJN + pointer to a buffer. + arg 3 (Optional) device-independent special mode bits. + These are not currently used. + + For ease of use, in unit input mode arg 2 and arg 3 + may be omitted and val 1 will then be the word read. + +For TTY and Tnn devices (terminals in general), + the following control bits are effective for IOT. + They are XOR'd into the left half of the I/O channel + word both before and after the IOT (see the .IOC user + variable). Thus one can modify the tty's + characteristics temporarily for just one IOT. + (ITS TTY) + 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 If no input available, don't wait, but return -1. + 1.9 %TIFUL Use full character set (for Imlacs and TV's). + + Control bits on output: + 2.6 %TJECH Echo mode output. + 2.5 %TJCTN Don't do line continuation. + 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.7 %TJHDE Account for cursor motion due to characters + echoed on a half-duplex tty. +For the Chaosnet (channel opened with CHAOSO): + 1.4 ?? Don't hang. + + This can be used to do unit-mode 8-bit-byte transfers. + Control bit 1.4 means don't-hang, and applies to both input + and output. Only data packets with opcode 200 will be + transferred. Anything else on input causes the transfer + to stop, like an end-of-file. Use PKTIOT to find out what + the story is. (The correct way is to verify that there are + some packets in the input buffer, then do a (S)IOT, and if it + transfers 0 bytes then the first packet in the input buffer + must not be a data packet, so PKTIOT it in.) + + There can be input available to (S)IOT even when the state is + not %CSOPN (e.g. if the input buffer contains data and + a CLS packet.) In this case, you should first (S)IOT (if you + care to pick up the data) then PKTIOT. + + +Errors: + + 14 BAD CHANNEL NUMBER + 33 MEANINGLESS ARGS + The second argument was immediate. + +IPKIOT: Internet packet (datagram) I/O + + This call is similar to PKTIOT and works for channels + opened on the IPQ device. It should NOT BE USED without + a good understanding of Internet Protocol datagram formats. + This call is still subject to change and thus is not + documented further. Ask KLH if you think you need to use it. + +ITYIC: read tty interrupt character + + arg 1 + val 1 a character + + This call fails to skip if there is no input + interrupt character to be read from the tty. + Otherwise, it returns the next un-ITYIC'ed + input interrupt character. + ITYIC'ing a character does not remove it from + the input buffer - it is still there to be IOT'ed + in its turn, along with the non-interrupt characters. + ITYIC makes it possible for a program to scan input + interrupt characters as they interrupt, without + interfering with the IOT'ing that will take place + later. + +JOBCAL: get info on how job device was called + + arg 1 BOJ channel number or + arg 2 Optional: AOBJN pointer for job call data. + arg 3 Optional: sixbit device name for PEEK and who-lines. + val 1 "opcode" for requested operation. + + See ITS JOB for information on job devices. + + This call is to be executed by a JOB device when it + receives an interrupt on its BOJ channel. It returns + data describing the operation desired by the calling job. + Note that the second argument is an AOBJN pointer + to an area in which the call will place data, not get it! + + The third argument, if present, is a device name to be used + by PEEK and who-lines for printing things like ARCBO. + (This name is initialized to the device name returned as word + 4 by OPEN - see below. The unknown-device handler, if involved + in the process (see the OPEN symbolic system call), resets + this to the second file name of the JOBDEV file it actually + succeeded in loading (this name may have had digits stripped off).) + + The "opcode" describes the operation to be performed: + 4.9-4.7 Open mode, if 2.9-1.1 contains 0. + 4.6 Close + 4.5 Close (both bits always the same) + 4.1 SIOT rather than IOT + 3.8 pclsred call restarting + 2.9-1.1 0 .OPEN + 1 .IOT + 2 MLINK (make a link) + 3 .RESET + 4 .RCHST + 5 .ACCESS + 6 .FDELE (delete or rename) + 7 .FDELE (rename while open) + 8 .CALL + + The second argument should point to a block of 12 + words (0-11) in which the following data are deposited: + + OPEN + wd 1 First file name. + wd 2 Second file name. + wd 3 Directory name. + wd 4 Device name. + wd 5 Full 18.-bit open mode in right half. + wd 7 BP or AOBJN ptr specifying filename, if + the SOPEN call was used to do the open. + Zero otherwise. + + IOT + wd 0 For block IOTs, the loser's IOT + pointer. The left half contains the + negative of the desired number of words. + For SIOTs, the byte count. 1 for unit IOTs. + + ACCESS + wd 0 The address within the file to access. + The beginning of the file is 0. + + MLINK + wd 0 Linked-to FN1. + wd 1 FN1 of the link. + wd 2 FN2 of the link. + wd 3 Directory name of the link. + wd 4 Device name of the link. + wd 5 Linked-to FN2. + wd 6 Linked-to directory. + wd 7 BP or AOBJN ptr specifying name of link, + or 0 if the name was specified as SIXBIT. + wd 10 BP or AOBJN ptr specifying name to link to, + or 0 if the name was specified as SIXBIT. + (note links from one device to another don't exist). + + FDELE (rename or delete) + wd 0 Zero implies delete. Otherwise, the + new first file name. + wd 1 Old first file name. + wd 2 Old second file name. + wd 3 Name of directory. + wd 4 Name of device. + wd 5 Zero implies delete. Otherwise, the + new second file name. + wd 7 BP or AOBJN ptr specifying file to act on, + or 0 if the name was specified as SIXBIT. + wd 10 BP or AOBJN ptr specifying name to rename to, + or 0 if the name was specified as SIXBIT. + + FDELE (rename while open) + wd 0 Zero implies delete. Otherwise, the + new first file name. + wd 5 Zero implies delete. Otherwise, the + new second file name. + wd 10 BP or AOBJN ptr specifying name to rename to, + or 0 if the name was specified as SIXBIT. + + CALL + wd 0 Name of operation in sixbit. + wd 1 Control bits for the call. + wd 2 Number of following words. + wds 3-n Input arguments to call. The first + will almost always be a channel number. + Values may be returned via the + JOBRET symbolic system call. + +Errors: + + 34 WRONG TYPE DEVICE + The first argument must be a BOJ channel number or + a JOB device channel number. + +JOBGET: get job device information + + This symbolic system call is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the JOBCAL + symbolic system call. + + arg 1 BOJ channel number or + + The individual returned values are identical to + the words returned by JOBCAL in the area specified + by JOBCAL's second argument. + +JOBINT: cause caller of JOB device to get an interrupt + + arg 1 BOJ channel number or + + See ITS JOB for information on job devices. + + This is used by JOB devices to cause the calling job + to receive a word 2 interrupt for the channel it has + the JOB device open on. See also the SETIOC + symbolic system call. + +Errors: + + 34 WRONG TYPE DEVICE + The first argument must be a BOJ channel number + or a JOB device channel number. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + +JOBIOC: set input/output channel error + + arg 1 BOJ channel number or + arg 2 IOC error code. + + This is used by JOB devices to cause the calling job + to receive a word 1 IOC interrupt. This interrupt + will be given when the calling job next attempts + an IOT operation. The .BCHN variable for that job + will be set to the channel it has the JOB device + open on, and bits 4.1-4.5 of the corresponding + .IOS word are set to the specified IOC error code. + See also the JOBINT symbolic system call. + + Valid IOC error codes are as follows: + 1 ILLEGAL HARDWARE OPERATION ATTEMPTED + 2 ATTEMPTED RANDOM ACCESS TO ADDRESS BEYOND END OF FILE + 3 NON-RECOVERABLE DATA ERROR + 4 NON-EXISTENT SUB-DEVICE + 5 OVER IOPOP + 6 OVER IOPUSH + 7 USR OP CHNL DOES NOT HAVE USR OPEN + 10 CHNL NOT OPEN + 11 DEVICE FULL (can also mean a directory is full) + 12 CHNL IN ILLEGAL MODE ON IOT + 13 ILLEGAL CHR AFTER CNTRL P ON TTY DISPLAY + 14 DIRECTORY FULL + 15 DIRECTORY'S ALLOCATION EXHAUSTED + +Errors: + + 33 MEANINGLESS ARGS + Second argument is not a valid IOC error code. + 34 WRONG TYPE DEVICE + First argument is not a BOJ channel number. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + +JOBRET: return values to loser and let him continue + + arg 1 BOJ channel number or + arg 2 LH contains error code, or 0 if none. + RH contains amount for loser to skip. + arg 3 Optional AOBJN pointer to a block + of values to be returned to the loser. + + See ITS JOB for information on job devices. + + This call is used by JOB devices to cause the + calling job to continue after an input/output request. + The second argument specifies an error code in its LH; + if non-zero it is placed in bits 3.6-3.1 of the .IOS + word for the JOB device (see the STATUS symbolic + system call). The RH contains the amount by which + the loser should skip upon continuing if he used a .CALL; + this amount is usually 0 or 1. The third argument is + an AOBJN pointer to a block of values which are + passed back to the .CALL or to the .RCHST. + +Errors: + + 34 WRONG TYPE DEVICE + First argument must be a BOJ channel number + or a JOB device channel number. + 36 VALID CLEAR OR STORED SET + +JOBREU: Lets a JOB device handler offer itself for re-use + + arg 1 Device name that the handler can handle + arg 2 FN1 of file the handler was loaded from + arg 3 FN2 of file the handler was loaded from + arg 4 SNAME of file the handler was loaded from + (Note: the only device it could have been + loaded from is DSK). + arg 5 Amount of time to wait (for someone to try + to re-use us) before giving up and taking the + failure return, in 30'ths of a second. + Alternatively, minus the time to wait until + (in 30'ths since the system was started up). + If the argument is positive (a duration) it + is converted to a negative one (time to stop) + and written back. + + Some job device handlers take a considerable amount of + work to initialize themselves - for example, the ML device + must set up network connections to another machine. + Improved performance results if the same handler job + can be used for several OPENs, instead of having to + load a new job and open a new set of network connections + for each one. The JOBREU call makes this possible. + The time to use it is when the handler has completed all + of the business for one operation - it has received a + "CLOSE" from its creator, has tidied up its data bases, + and would otherwise have nothing to do except log out. + Instead, it can do a JOBREU. During the time period + specified in the JOBREU, if any job tries to do an OPEN + on a job device which this handler could be used for, + this handler job will in fact be used. In this case, + the JOBREU will skip return. The handler should then + act as if it had just been loaded, and do the "initial + JOBGET". If nobody tries to reuse the handler in the + specified time period, the JOBREU will return without + skipping, and the handler should log out. + + Note that one should not do a JOBREU immediately upon + receiving a close when the JOBRET of the initial OPEN + has failed, because the creator has pclsred and is + likely to be coming back. In order to make it use the + same job device when it comes back, JOBREU should not + be done; instead, a PCLSRed JOB device open automatically + finds the right job and sends another request to it. + You should time out and if this second request does not + come in, then give up and do a CLOSE and a JOBREU. + + There are two kinds of OPENs that can invoke the JOB device: + 1) An open of JOB: explicitly. It can reuse a + job device handler if match the FN1, FN2, + and SNAME specified in the JOBREU. + 2) An open of a device name (such as ARC) that is not + built into the system. Such an open can reuse a job + device handler if the device name matches the one + specified in the JOBREU. + + +Errors: + + 10 DEVICE NOT AVAILABLE + This job isn't a JOB-device handler. + 13 FILE ALREADY EXISTS + This job device handler is already (still) in use + by a creator. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + Nobody tried to reuse this job, and the time period ran out. + +JOBSTS: set JOB device status + + arg 1 BOJ channel number or + arg 2 New JOB device status - stored in the RH of + the job channel's .IOS word, where .STATUS + on the job channel will find it. + This may be arbitrary, of course, but the + standard bits are as follows: + 2.9-2.3 Device dependent. + 2.2 Buffering capacity empty. + 2.1 Buffering capacity full. + 1.9-1.7 Mode in which device was opened. + 1.9 0 = ascii, 1 = image. + 1.8 0 = unit, 1 = block. + 1.7 0 = input, 1 = output. + 1.6-1.1 ITS internal physical device code. + For a job device this should be 22, + unless you really know what you are + doing. + If omitted, 000022 is used. + arg 3 Sets the "device name" of this channel. + The device name is used by the RFNAME + and RCHST system calls, and by PEEK + and who-lines, to say what device a job + is transferring to or waiting for in the + job's status. The argument is optional. + arg 4 Sets the "file name 1". Optional. + arg 5 Sets the "file name 2". Optional. + arg 6 Sets the "system name". Optional. + arg 7 Sets the "open mode" that will be returned + by the RFNAME system call. Optional. + arg 8 Optional byte pointer to ASCIZ string in device handler's + address space containing full filenames. The byte pointer + my not be indexed or indirect. Note that ITS might decide + to read a string from this byte pointer at any time, so the + string must continue to exist even after the JOBSTS call + has returned. + + When the channel is first opened the device, file + name 1, file name 2, system name, and open mode + are set to the ones by which the channel was opened. + JOB device programs may change these if they wish, + but are not required to. + + See the STATUS symbolic system call, the .STATUS uuo, + and the RFNAME system call. + + See ITS JOB for information on job devices. + +KLPERF: Use KL10 performance analysis counter + + arg 1 whose performance is to be measured + -3 (%JSNUL) => the null job + -4 (%JSALL) => all jobs + 0,,-3 and 0,,-4 are also acceptable. + arg 2 Performance Analysis Enables word + 0 => turn off the performance counter + and make it available for other users. + See DEC drawing M8538-0-MTR4 for the bits in this + argument. + val 1 Previous setting; -3, -4, or a job number + val 2 Previous Performance Analysis Enables word + val 3 High-order word of the time base + val 4 Low-order word of the time base + val 5 High-order word of the performance counter + val 6 Low-order word of the performance counter + + If no arguments are supplied, the state of the counter + is not changed and the six values are returned. + + If arguments are supplied, the performance analysis counter + is siezed so no other users can interfere and performance + measurement begins. When the specified job is running + and the conditions specified in the Enables word are met, + the performance counter counts. A bit in the Enables + word controls whether it counts the duration, in microseconds, + that the conditions were satisfied, or the number of times + that the conditions became satisfied. While the specified + job is running, the time base counts microseconds. If -4 + (all jobs) was specified, this is the elapsed real time. + Issuing the KLPERF call again allows the results to be + determined by subtracting the values obtained the first time + from the values obtained the second time. + + The two counters are double-precision numbers. The high-order + 35 bits are in bits 1.1-4.8 of the high-order word, and + the low-order 23 bits are in bits 2.4-4.8 of the low-order + word. + +Errors: + + 10 DEVICE NOT AVAILABLE + Someone else is using the performance analysis counter. + 14 BAD CHANNEL NUMBER + Argument 1 is invalid. + 35 NO SUCH JOB + Argument 1 specified a non-existent job. + +LISTEN: listen for any typed-ahead input (ITS TTY) + + arg 1 (but not a STY channel) or + val 1 Number of typed-ahead characters pending. + + Waits for output buffer to empty before listening. + To check for input without waiting for output use + .STATUS. The uuo .LISTEN is the same as LISTEN, + but applies only to the job's console, and furthermore + returns zero if the job doesn't possess the tty. + +Errors: + + 14 BAD CHANNEL NUMBER + +LNKEDP: find out whether open file was reached via a link + + arg 1 Channel number of open disk file + val 1 Nonzero if file was reached via a link. + + The file open was reached through a link if the names + actually specified in the OPEN were the names of a link + which pointed at this file. It is not a question of + what file is open, but of what names were specified to + open the file. + +Errors: + +14 BAD CHANNEL NUMBER + Arg 1 is not between 0 and 17. +34 WRONG TYPE DEVICE + Arg 1 does not specify a disk channel. + +LOAD: load file (a program) into a job + + arg 1 + arg 2 Disk channel number (freshly opened for reading). + arg 3 Optional argument which causes part of the file + to be ignored: either ,,, to load + only between addresses and (inclusive), + or zero meaning load only pure pages. + The default is 0,,-1 normally, 20,,-1 when loading + oneself, and 20,,37777 when loading the PDP6. + When loading a PDUMP format file, and + are rounded outward to page boundaries. + + The file open on the input channel is loaded into + the specified job. The file may be in one of two formats: + PDUMP format, or SBLK format. The former is produced by + the PDUMP symbolic system call, under which its format + is documented. The latter is described below. + The two formats are distinguished by the + fact that a PDUMP format file begins with a zero word, + but an SBLK format file begins with a non-zero word. + + SBLK format: + First off, any words in the file are ignored until a word + 254000,,1 (JRST 1) is found. This should be followed + by zero or more blocks of the following form: + wd 0 -,, + wds 1-n data words + wd n+1 checksum + That is, the first word is an AOBJN pointer describing where + to load consecutive words of data into the job; this is + effectively used as a block .IOT pointer to load the words. + Following the data is a checksum, which is ignored. + (Historically, when microtapes were used, the checksum was + necessary for error checking.) + Following the last block must be a non-negative word + to denote the fact that there are no more blocks. + This word and all succeeding words in the file are ignored. + (DDT assumes that this word contains the starting + address of the program, and that following words contain + the symbol table for the program.) The disk channel + is left open, with the access pointer pointing to the + positive word which followed the last block. + + The standard form of symbol table is: + -<2*n>,,0 + squoze code,symbol -- these 2 words are + value of symbol -- repeated n times + + The word after the symbol table is another copy of the starting address. + +Errors: + +7 DEVICE NOT READY + A disk read error occurred. +31 CAN'T MODIFY JOB + The calling job may not write into the job being loaded. +32 CAN'T GET THAT ACCESS TO PAGE + You tried to create an absolute page pointing to memory + that the system doesn't have. +34 WRONG TYPE DEVICE + Arg 2 does not specify a disk read channel, or + you tried to load a PDUMP file into the PDP-6. +37 NO CORE AVAILABLE + The MMP was full so a needed page could not be created. +46 UNRECOGNIZABLE FILE + The file open on the specified channel is not in + valid SBLK format, nor in valid PDUMP format. + +LOGIN: log in a job tree + + arg 1 Sixbit name to log in under. + " " (0) and "___xxx" (-1 in left half) are illegal. + arg 2 Sixbit name of "terminal." This is not required + for hard-wired terminals. When this field specifies + a network host, the standard form is HSTnnn, where + nnn is the octal host number, however often the English + name of the host, abbreviated to six letters, is used. + arg 3 Sixbit XUNAME. This is normally the same as arg 1 + except that if arg 1 is changed to make it unique, + this should not be changed. The XUNAME is what is + used for accounting purposes. + + The uname for the job tree is changed from "___nnn" + (where "nnn" is the top-level job's user index in + sixbit octal characters), which is the initial uname of + a non-logged-in job tree, to the specified sixbit name. + If the job tree already has a uname other than "___nnn", + the LOGIN fails. Only top-level jobs with no direct + inferiors may LOGIN. + +Errors: + + 11 ILLEGAL FILE NAME + Cannot log in as "___xxx" or " ". + 12 MODE NOT AVAILABLE + Jobs with direct inferiors may not log in. + 13 FILE ALREADY EXISTS + Someone is already logged in under the specified name. + 31 CAN'T MODIFY JOB + Already logged in. + 40 NOT TOP LEVEL + Only top-level jobs may log in. + +LOGOUT: log out a job tree + + No arguments or values (note, however, that at least + one must be present in order to contain the 4.9 bit + terminating the argument list). If the executing + job is the top level job in its job tree, then the + entire job tree is expunged from the system. + Does not skip if not a top level job. This is not + considered an error, however; no error code is returned. + See also the .LOGOUT uuo. + +LOSE: report lossage + + arg 1 left half - address of losing instruction + right half - lossage code (defined by DDT.) + arg 2 new PC. If omitted, the address of the .CALL + minus one is used. + control bits: + 1.1 default arg 2 to the address of the .CALL plus one. + 1.2 do SETZM @.40ADDR, i.e. clear the location + in the job where a UUO returned from the + system would be stored. + 1.3 Really take the left half of arg 1 as the address + of the losing instruction. If this control bit + is not specified, the new PC is used instead. + + The job's Program Counter is set to the new PC, + the job's .VAL user variable is set to the address + of the losing instruction,,the lossage code, and the + job is given a %PILOS interrupt. If the job does not + enable this interrupt, and its superior is DDT, a + helpful error message will be printed. + + The LOSE symbolic system call is a more general version + of the .LOSE UUO. .LOSE is simpler, and usually good + enough. Symbolic LOSE is for situations where sophisticated + error reporting is needed. Symbolic LOSE allows the new PC + value to be specified explicitly, and therefore is suitable + for use inside an error-handling subroutine. In addition, + the address of the "culpable" instruction can be specified + independantly from the address to restart at. Thus, the + program can provide more complicated error recovery + than simply restarting at the losing instruction. + + The lossage codes are defined by DDT's interpretation of them. + The defined values are: + + %LSSYS==1000 The last error code returned by a failing + system call describes the problem. + + %LSFIL==1400 The last error code returned by a failing + system call, together with the name of the file + it was operating on, describe the problem. + The "culpable instruction" address should point + at the failing system call. + DDT will decode it to determine the filenames + (if it is an OPEN) or the channel number and then + the filenames via an RFNAME. + + %LSSYS+errcode Means that the system call error code + describes the problem. + + %LSFIL+errcode Means that the error code + together with the filenames being used + describe the problem. + + 0 Signifies some other nondescript error condition. + + 1+.LZ + Means that the error should be handled as if it + were a fatal interrupt on the specified interrupt + bit. For example, 1+.LZ %PIMPV will make DDT tell the + user that the job received a fatal MPV interrupt. Why + might a program wish to do this? It might have + enabled its own handling of MPV, and then received an + MPV interrupt at a time when one was not expected and + was not recoverable. At such a time the ideal thing + to do is to report the MPV back to DDT, so that DDT + will handle it - to "pretend" that MPV wasn't enabled + at all. To make the pretense complete, the program's + own MPV interrupt handler should dismiss the + interrupt, and leave the PC pointing at the guilty + instruction, since that would be the state of things + if the program had not handled the interrupt. That + can be done with a special feature of the DISMIS + symbolic system call, which can do a .LOSE after + dismissing the interrupt and restoring the PC. + + This call never gets an error, and never returns. + +MLINK: make link + + Either + arg 1 Byte pointer to ASCIZ string specifying name for link, + or AOBJN pointer to block of byte pointers, + arg 2 Byte pointer to ASCIZ string specifying name to link to, + or AOBJN pointer to block of byte pointers, + + Or + arg 1 Left-justified "from" device. + arg 2 "from" file name 1. + arg 3 "from" file name 2. + arg 4 "from" sname. + arg 5 "to" file name 1. + arg 6 "to" file name 2. + arg 7 "to" sname. + + A link is created on the specified device. + The only standard device which accepts links + is DSK; of course, various job devices (such as + the AI, ML, DM, and MC devices) also implement it. + Links cause an indirection when opened + for reading; writing or deleting a link affects + the link itself. + The "from" file names are subject to file name + translation. See the TRANAD and TRANDL symbolic + system calls. + + See the SOPEN symbolic system call for a description of + how the byte or AOBJN pointer arguments should be formatted + and how the strings are parsed into filenames. + +NETAC: accept network connection OBSOLETE (ITS NCP) + + This system call is obsolete, and has been flushed. + It is documented here for historical purposes only. + + arg 1 - channel # of an Arpanet NCP channel + + If the channel is in the RFC-received state, the + connection is accepted. Use CLOSE to refuse a + request for connection. + + See also the .NETAC UUO. + + This call only works for NCP and is obsolete. It isn't needed + for TCP since incoming requests that satisfy a LISTEN will + automatically be hooked up and the connection opened. + +Errors: + +34 WRONG TYPE DEVICE + The specified channel is not an Arpanet NCP channel +41 OTHER END OF PIPELINE GONE OR NOT OPEN + The socket is not in the %NSRFC (request for + connection received) state. + +NETBLK: network block (ITS NCP) + + arg 1 Channel number - should be a network channel. + NCP, TCP, and CHAOS are allowed. + arg 2 Connection state code. + NCP: Socket state as returned in the right + half of word 4 by the .RCHST uuo: + 0 %NSCLS CLS received. + 1 %NSLSN Listening for RFC. + 2 %NSRFC RFC received while listening. + 3 %NSRCL CLS received while in RFC received state. + 4 %NSRFS RFC sent. + 5 %NSOPN Connection open. + 6 %NSRFN RFNM wait on write link. + 7 %NSCLW CLS sent. Waiting for matching CLS. + 10 %NSCLI CLS received, but input still available. + 11 %NSINP Input available. + CHAOS: + TCP: basically the same as NCP. See WHYINT for state list. + arg 3 Optional: address of a word containing an argument + as for the .SLEEP uuo. This word must be writable, + as it will be replaced by an appropriate negative + number as for .SLEEP. + If not supplied, positive infinity (377777,,777777) + is assumed by default for the time to sleep. + val 1 New connection state. + val 2 Time left, in thirtieths of a second. + (Meaningful only if arg 3 supplied.) + + The executing job hangs until one of two conditions + becomes true: either the network conection associated + with the specified channel enters a state different + from the specified state, or the amount of time + specified by arg 3 has passed. + + Example: suppose that a NCP socket is in state 1 + (listening for RFC). This call will return when + the socket is no longer in that state, or after 5 + seconds, whichever comes first: + + MOVEI AC,5*30. ;five seconds + .CALL [ SETZ + SIXBIT \NETBLK\ ;network block + 1000,,CHNUM ;channel number + 1000,,%NSLSN ;old state + ,,AC ;time to sleep + 2000,,NSTATE ;new state + 402000,,TLEFT ] ;time left + +Errors: + +34 WRONG TYPE DEVICE + The specified channel is not a network (NCP, TCP, CHAOS) channel. + +NETHST: net host status (ITS NCP) + + arg 1 Host number (-1 for self). + arg 2 Reason for going down (optional, valid + only if arg 1 is -1). + 5 Going down for scheduled P.M. + 6 Going down for scheduled hardware work. + 7 Going down for scheduled software work. + 10 Going down for emergency restart. + 11 Going down because of power outage. + 12 Stopping at software breakpoint. + 13 Going down because of hardware failure. + 14 Going down because not scheduled to be up. + val 2 Host number (useful if arg 1 is -1). + Note THESE ARE OUT OF ORDER (because "val 1" is so long). + val 1 Host status + 4.9 1 => RFNM wait on link 0. + 4.8-4.3 Unused. + 4.2-4.1 Host status: + 0 Down. + 1 RST sent. + 2 Up. + 3.9-3.1 Time (as returned by .RDTIME) modulo 1000 + the last RFNM sent on link 0. + 2.9-1.1 Last message from IMP about "host dead status" + for this host. (See BBN Report #1822, Chapter 3.) + 2.7-1.5 Time host will come back up, Greenwich Mean Time: + 2.7-2.5 Day of week (0=Monday, ..., 6=Sunday). + 2.4-1.9 Hour of day (0-23.). + 1.8-1.5 Five-minute interval within hour (0-11.). + -1 means more than a week. + -2 means time coming back up is unknown. + 1.4-1.1 Reason host is down: + 1 Foreign host not communicating + with network (took ready-line down + without saying why). + 2 Foreign host not communicating with + network (host was tardy in accepting + network traffic without saying why). + 3 Foreign host does not exist, to the + knowledge of the Network Control Center. + 4 The IMP software is preventing + communication with foreign host + (this usually indicates IMP software + initialization at the foreign site). + 5 Foreign host down for scheduled P.M. + 6 Foreign host down for scheduled + hardware work. + 7 Foreign host down for scheduled + software work. + 10 Foreign host down for emergency restart. + 11 Foreign host down because of power outage. + 12 Foreign host stopped at software + breakpoint. + 13 Foreign host down because of hardware + failure. + 14 Foreign host not scheduled to be up. + 17 Foreign host in process of coming up. + + If one argument is supplied, then the host status word + for the specified host is returned. If two arguments are + supplied, then the "reason for going down" word for the + local host is set. (As of June 30, 1975, setting this + word doesn't seem to do anything at all. Didn't the code + for sending this data to the IMP ever get written??) + +NETIMP: network IMP status (ITS NCP) + + If no arguments are present, three values are returned: + val 1 Last message from IMP about going down. + 4.9 IMP really is down now. + 1.2-1.1 Reason: + 0 "Last warning" or "panic restart"; + the IMP is going down in 30. seconds or less. + 1 Scheduled hardware P.M. + 2 Scheduled software reload. + 3 Emergency restart. + val 2 Time going down, as returned by .RDTIME. + val 3 Time coming back up, as returned by .RDTIME. + + If arguments are present, three must be present. + They are used to set three default values which are returned + if the IMP itself has not set the above three values. + Presumably this is good for logically disabling network software? + +Errors: + +30 TOO FEW ARGUMENTS + Must have either 3 arguments or no arguments. + +NETINT: Send network interrupt OBSOLETE (ITS NCP) + + This system call is obsolete, and has been flushed. + It is documented here for historical purposes only. + + arg 1 channel # + + An INR or INS message is sent, depending on the send/receive + gender of the socket specified by the channel #. What this does + depends on the protocol being used and the program at the + other end of the connection. + + This call only works for NCP and is obsolete. +Errors: + +34 WRONG TYPE DEVICE + The channel specified is not an Arpanet NCP channel. + +NETRFC: Get pending Request For Connection for a specified network + + cbits + %NQREF Arg 2 is a previously returned identifier, + refuse connection and flush from queue. + arg 1 - SIXBIT name of network + one of CHAOS, TCP, or ARPNCP (obsolete) + arg 2 - optional network-dependent arg + for CHAOS: pointer to packet buffer + for TCP: If %NQREF set, is ,, of request to + reject (as returned from previous NETRFC call) + val 1 - network-dependent value + for TCP: ,, + for ARPNCP: ,, + + This call is intended for use by very specialized programs + which ITS invokes upon receiving unsolicited requests for + connections. ITS will queue the request for a short time + and start an appropriate job which uses NETRFC to obtain + the request and process it. Currently these programs are + NCP: SYS;ATSIGN NETRFC + TCP: SYS;ATSIGN TCP + CHAOS: SYS;ATSIGN CHAOS + + Normally the program will execute a NETRFC appropriate for its + network, and obtain a returned request value. Accepting the + request is device dependent, but refusal can always be done + by calling NETRFC again with the %NQREF control bit set and + furnishing the appropriate request identifier. + + See the CHAOSQ system call, which NETRFC is replacing. + +ERRORS + 4 - TCP: No pending RFCs, or %NQREF with non-existent ,,. + 12 - CHAOS: can't handle %NQREF yet. + 33 - Unknown network specified. + +OPEN: open a file + + cbits Device dependent. Standard bits are: + 2.7-2.9 0 = normal, 1 = write-over mode. + 1.3 0 = ascii, 1 = image. + 1.2 0 = unit, 1 = block. + 1.1 0 = read, 1 = write. + arg 1 Channel number. LH XOR'd with control bits. + arg 2 Left-justified device name. + arg 3 File name 1. + arg 4 File name 2. + arg 5 Sname. If not present, defaults to executing + job's current sname (see the .SNAM user variable). + + See also the .OPEN uuo. + + The file names used for opening are subject to translation. + See the TRANAD and TRANDL symbolic system calls. + + The file names .FILE. (DIR) are special: + they cause the directory for the given device + (and sname, if applicable) to be read. It is + illegal to write the directory. If a device has + no directory, then opening .FILE. (DIR) will + supply the string "NON-DIRECTORY DEVICE", presumably. + (This is a function of the unknown-device handler + (see below) and hence the exact results may vary). + Opening a directory in ascii mode yields an + ascii string for people to look at; opening it + in image mode yields a device-dependent file + (or possibly a MODE NOT AVAILABLE error). + + For the DSK device, the control bits are: + 1.4 %DONRF Don't set the reference date. + 1.5 %DONLK Don't chase links. (I. E., if + this is a link, open the link itself, + not the file at which the link points. + 1.6 %DORWT Readers wait. On output open, makes would-be + readers wait till we close. + 2.7 %DOWOV Write-over mode. Writes on the existing + file of that name, instead of replacing + it with a new file. + + The file names M.F.D. (FILE) when opened for + input yield a master file directory for all + disks. In ascii mode this is an ascii string + containing the names of all directories, separated + by a cr/lf sequence. + + The file names ..NEW. (UDIR) cause a new directory + to be created with the given sname if none already + exists. Creating a directory in this way causes a + message to be printed on the system console. + (A directory is destroyed only when the disks are + salvaged by the stand-alone salvager, which is generally + run just before the time-sharing system is restarted. + A directory is then destroyed iff it contains no files.) + + If < or > is used as a file name, it is treated + specially according to an algorithm no one + understands, but which attempts to let it stand + for the numerically smallest or largest file name + among those in the directory. In particular, + if you call your files FOO nnn, where nnn is a version + number, then reading FOO > will read in the latest + version, writing FOO > will write out a version + one higher than the latest one (or FOO 1 if there + is no file named FOO nnn), and deleting FOO < + will delete the oldest one. Writing FOO < doesn't + recreate an old file; it is the same as FOO >. + If a file with numbers and letters in its name, + for example FOO BAR27, already exists, + writing FOO > will generate FOO BAR28 + and not FOO 1. Letters to the right of numbers are + generally ignored as far as < and > are concerned. + + Note that < and > may be used as first + file names as well; this is mainly useful for the + .LPTR. directory. It is illegal to use < or > for + both file names at once. + + The SYS device ignores the sname, and otherwise + is like using the device-sname pair DSK:SYS; . + Writing new files or altering old ones on the SYS + device (or even on DSK:SYS;) causes a message to + appear on the system console documenting who the + culprit is and what he did. This is because system + programs and other files critical to system operation + are kept on SYS:. In fact this applies to writing + or altering files on any disk directory whose name + begins with the three letters "SYS". Standard + directories whose names begin with "SYS" include: + SYS1 Extension for SYS directory (holds programs). + SYS2 Extension for SYS directory (holds programs). + SYS3 Extension for SYS directory (holds programs). + SYSENG Source files for many system programs. + SYSEN1 Extension for SYSENG directory. + SYSEN2 Extension for SYSENG directory. + SYSBIN Binary files for many system programs. + SYSTEM Files having to do with ITS itself. + SYSDOC Documentation for ITS itself. + SYSNET Files having to do with Chaosnet and TCP. + + The COM device ignores the sname, and otherwise + is like using the device-sname pair DSK:COMMON; . + + The TPL device ignores the sname, and otherwise + is like using the device-sname pair DSK:.LPTR.; . + (On systems without lineprinters the TPL device is + generally just a JOB device.) + On output, it furthermore ignores the file names, + and instead uses the uname of the opening job as + the second file name, and randomly generates a + first file name. The system job prints files + it finds on .LPTR. on the line printer, whenever it + has nothing better to do and the line printer happens + to be free; these files are subsequently deleted. + Thus the TPL device provides a printer spooling facility. + Attempts to rename a file on the TPL device are + ignored, because the name controls the spooling order. + + For the LPT device, opening succeeds only if no one + has the LPT, or the same user already has the LPT; + in the former case the opening job must be in a tree + controlled by a "local" tty as defined by its TTYTYP + variable. In all other cases the OPEN is converted + to use the TPL device instead. + + For the USR device, the file names should be the + uname-jname pair of the job to open. If the uname is + zero, it is equivalent to using the uname of the + job doing the call. If the jname is zero, then the + uname is interpreted as a specification; + in this way one can open a job given its user index. + A jname of PDP6 or PDP10 opens up the PDP-6 + as the "job". (PDP10 as a jname goes back to the + days when the PDP-6 ran ITS and the PDP-10 was the + auxiliary processor!) + Control bits: + 1.4 Insist on opening an already existing job; + i.e. do not create a new one. The job will + be opened as a foreign job, not as an inferior. + Here is an algorithm for deciding whether job Y will + be a direct inferior or merely a foreign job when + opened by job X: + (DEFUN USR-OPEN-RESULT (X Y BIT-1*4) + (COND (BIT-1*4 (COND ((EXISTS Y) 'FOREIGN) + (T (ERROR)))) + ((EXISTS Y) + (COND ((INFERIOR Y X) 'INFERIOR) + ((DISOWNED X) 'FOREIGN) + ((NOT (DISOWNED Y)) 'FOREIGN) + ((TOPLEVEL Y) + (MAKE-NON-DISOWNED Y) + (CHANGE-ALL-UNAMES Y (UNAME X)) + (FIX-UP-TTY-CHANNELS Y) + 'INFERIOR) + (T 'FOREIGN))) + ((= (UNAME X) (UNAME Y)) + (CREATE-USR Y) + (AND (DISOWNED X) + (MAKE-DISOWNED Y)) + 'INFERIOR) + (T (ERROR)))) + + For the ERR device, the first file name must be + numerically 1, 2, 3, or 4. If it is 1, then the .IOS + word specified by the user variable .BCHN is + examined. If it is 2, the .IOS word for the channel + numerically specified by the second file name is + examined. If it is 3, the second file name is itself + the status word. Bits 3.1-4.5 of the specified word + yield a the number of an error message which can then + be read from the open ERR device. If the first file + name is 4, the second file name must be the value + returned into an error code return argument by a symbolic + system .CALL that didn't skip. The corresponding error + message can be read from the open ERR device. + + For TTY and Tnn devices (terminals in general), + 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. (ITS TTY) + 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. + + For STY device input, control bit 1.4 means that + input IOTs, instead of hanging, will input a -1 in + unit mode or not count out the AOBJN pointer in block + mode (see ITS TTY for details). + For STY output, control bit 1.4 means that output IOTs, + instead of hanging when the tty's input buffer is full, + will cause a ^G to be output, just as on normal ttys. + Control bit 1.5, on input or output, causes a %TDORS + character to be available as input when an output + reset is done on the sty's alter ego. + Control bit 1.3 is copied into the %TOHDX bit of the + associated tty, thus making it half-duplex if set. + These control bits are not per-channel, but rather + will affect all channels open on the same STY. + + For the LOCK device, the first file name is the name of the lock to + seize. Control bit 1.4 causes the open to hang if the lock is + already locked. See ITS LOCKS for details. + + For the UBI device, the first file name is of the form: + ,,. + + For the PTR and PTP devices (paper tape reader and + punch), if the 1.4 control bit is on, then the 1.2 bit + must be 0 and the 1.3 bit is ignored. In this mode + all eight paper tape channels may be read or punched. + + For the NET device, the arguments are as follows: + cbits 2.1-2.6 byte size for image mode + 1.7 Use 8 times as large a buffer. + 1.6 If ascii mode, use 8-bit bytes + instead of 7-bit bytes. + If image mode, use byte size in + bits 2.1-2.6. + 1.5 Open socket in listen mode. + 1.4 0 = use arg 3 as local socket number. + 1 = generate unique local socket number. + (A generated socket number can be examined + after opening by using the .RCHST uuo). + 1.1-1.3 Standard. + arg 1 Channel number. + arg 2 Left-justified device name (i.e. NET). + arg 3 Local socket number. + arg 4 Foreign socket number. + arg 5 Foreign host number. + + For the STK device (Stanford keyboard): + cbits 1.7 If 1.6 = 1 and 1.5 = 0, + then don't input the meta bit. + 1.6 0 = Stanford mode: + meta = 400 + ctrl = 200 + top+shift+others generate 0-177 + 1 = ITS mode: + meta = 200 + ctrl means ctrl, and works + with others to generate 0-177 + 1.5 0 = convert according to 1.6-1.7. + 1 = don't convert characters. + 1.4 Don't hang if no character + available for input - return -1 + instead. + + If the device name used in the OPEN is not one known to + to the system, the "unknown-device handler" is invoked. + The system creates a job device and loads SYS:ATSIGN DEVICE + into it; this program then has the responsibility for + handling the OPEN. The normal action of this program is + to look for a file DSK:DEVICE;JOBDEV , where + is the requested device name. For example, if an attempt + is made to OPEN the FOOBAR device, and the file + DSK:DEVICE;JOBDEV FOOBAR exists, the program contained in + this file will be used to interpret the OPEN via the JOB device. + If such a file does not exist, but the device name has trailing + digits, the unknown-device handler will try stripping successive + trailing digits and retrying. For example, opening the + AR1 device causes the unknown-device handler to look first for + JOBDEV AR1, and then for JOBDEV AR. If the handler succeeds, + it sets device name for PEEK and who-lines to the second + file name that finally succeeded (see the JOBSTS symbolic + system call). + The unknown-device handler also handles requests for the + directories of certain built-in devices whose directories + are seldom asked for. If there is nothing better to return for + a directory, the string "NON-DIRECTORY DEVICE" is returned. + +Errors: + + OPEN can return many errors. The following errors in + particular are relevant to OPEN on the DSK device: + + 4 FILE NOT FOUND + The specified directory exists, but the specified file + does not. + 5 DIRECTORY FULL + There is no room in the directory to create an entry + for the new output file. + 7 DEVICE NOT READY + The disk pack containing the file is offline (should + never really happen). + 10 DEVICE NOT AVAILABLE + a specific unit was selected, by opening DKn, and that + unit is off-line or contains a reserved pack. Or, a + specific pack was selected by opening PKn or Pnn, + and that pack is reserved. The reserved-pack check + only applies when writing. Reserved means secondary-pack, + or reserved for the exclusive use of certain directories. + 11 ILLEGAL FILE NAME + One or both file names were zero; or, for an output file, + the file names were M.F.D. (FILE) or .FILE. (DIR), which + are names reserved for directories. + 12 MODE NOT AVAILABLE + Control bits 2.9-2.7 specified an illegal mode. + 14 BAD CHANNEL NUMBER + This is a RENMWO error. + 16 PACK NOT MOUNTED + The pack specified by opening PKn or Pnn is not + mounted, or the pack containing the file being read + is not mounted. + 20 NON-EXISTENT DIRECTORY + The specified directory does not exist. + 22 SELF-CONTRADICTORY OPEN + Control bits 2.9-2.7 specified an illegal mode. + 23 FILE LOCKED + An attempt to open a file in write-over mode failed + because someone has the file open for reading; or + an attempt to open a file for read, write-over, rename, + or delete failed because someone is writing the file + or because the file has been deleted, but hasn't gone + away yet because someone is reading it (i.e. there is + a star next to it in the directory listing.) wait a while + and try again. + 24 M.F.D. FULL + Cannot create a new directory because the master file directory + is full. + 27 LINK DEPTH EXCEEDED + Links may not be chained to a length of greater than 100 links. + This error probably means a circular chain of links. + 47 LINK TO NON-EXISTENT FILE + Error 4 or 20 occurred after following a link. + +PDUMP: pure dump a job + + arg 1 . + arg 2 Disk output channel number. + Should have been freshly opened + for output. + arg 3 State word; should be 0 initially. + This word is updated as the PDUMP + progresses; a value of 400000,, means + that page is about to be dumped. + + The pages of the specified job are dumped onto + the disk file in a form that can be efficiently + loaded. In particular, information as to whether + each page is read-only or not is saved so that + when the program is run it can be swapped + efficiently. If the same file is loaded into + several jobs, they will all share the same + physical copies of the read-only pages. + In addition, absolute pages are remembered. + A number of 2000-word (1K) blocks are dumped onto + the file. The first block is as follows: + wd 0 Contains zero. This distinguishes + PDUMP'ed programs from, for example, + MIDAS output. + wds 1-400 Word contains information about + block of the dumped job. This + information is as follows: + 4.9 Absolute page (shared with system). + 2.9-2.8 00 Non-existent page. + 01 Read-only page. + 10,11 Read/write page. + 2.2-1.1 If 4.9=1, absolute page number. + wds 401-777 Zero. + wds 1000-1017 The contents of the accumulators. + Note that the accumulators aren't part of + any page, so they wouldn't be saved if it were + not for this special hack. + The following blocks of the file are the successive + pages of the job, but only those which need to be dumped. + That is, absolute and non-existent pages are not dumped. + Thus, suppose the pages of a job are laid out as follows: + pg 0 Read/write. + pg 1-5 Read-only. + pg 6-7 Absolute (e.g., system symbol table). + pg 100 Read/write. + pg 200 Read/write. + others Non-existent. + Then nine blocks would be dumped out: + blk 0 Descriptor block. + blk 1 Page 0. + blk 2-6 Pages 1-5. + blk 7 Page 100 (octal). + blk 10 Page 200 (octal). + This is all that PDUMP writes out, leaving the file's access + pointer at the end of the last block written. At this point + the job doing the PDUMP will normally write out the + symbol table, if any, for the dumped job onto the disk + channel, preceded and followed by JUMPA instructions + containing the starting address. When this is done, + the resulting file can be loaded and run as a program + under DDT. + See the LOAD symbolic system call. + +Errors: + + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + Can't dump the PDP-6 job. + 34 WRONG TYPE DEVICE + First argument was some oddball channel, or + second argument was not a disk output channel number. + 35 NO SUCH JOB + +PGWRIT: Cause page to be written to disk + + arg 1 (Optional) A + arg 2 Virtual page number within that job (a number from 0 to 377). + control bits: + 1.1 1 => don't wait for the page to finish getting written out, + return immediately. Issue the call again with this bit 0 + if you later want to wait for it to get written out. + 1.2 1 => unlock the page. + 0 => if the page is locked, swap it out anyway, but when it + next gets swapped in again it will be locked again. + + If there is only one argument, it is arg 2. The is + assumed to be the job issuing the call. + + The disk copy of the specified page is brought up to date; + if the in-core copy has been modified by the specified + the page is written out. The PGDUMP call does not return until + the disk has finished recording the page. + + This is useful when pages of a file have been mapped into + the user's address space. + + If the page cannot be swapped out because no disk space is available, + or some job that is using it cannot be pclsr'ed, it waits a while + and tries again. It does not return. + + This call used to be called PGDUMP, but the name was + changed to avoid confusion with PDUMP. + +Errors: + + 12 MODE NOT AVAILABLE + Page is absolute or tied down by exec pages. + 14 BAD CHANNEL NUMBER + The argument is invalid. + 31 CAN'T MODIFY JOB + Executing job doesn't have modification rights to the job + specified by argument 1. + 32 CAN'T GET THAT ACCESS TO PAGE + The page number in argument 2 is not between 0 and 377; or the + job does not have a page at that position in its address space. + 34 WRONG TYPE DEVICE + The specifies the pdp-6,followed by JUMPA instructions + containing the starting address. When this is done, + the resulting file can be loaded and run as a program + under DDT. + See the LOAD symbolic system call. + +Errors: + + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + Can't dump the PDP-6 job. + 34 WRONG TYPE DEVICE + First argument was some oddball channel, or + second argument was not a disk output channel number. + 35 NO SUCH JOB + +PGWRIT: Cause page to be written to disk + + arg 1 (Optional) A + arg 2 Virtual page number within that job (a number from 0 to 377). + control bits: + 1.1 1 => don't wait for the page to finish getting written out, + return immediately. Issue the call again with this bit 0 + if you later want to wait for it to get written out. + 1.2 1 => unlock the page. + 0 => if the page is locked, swap it out anyway, but when it + next gets swapped in again it will be locked again. + + If there is only one argument, it is arg 2. The is + assumed to be the job issuing the call. + + The disk copy of the specified page is brought up to date; + if the in-core copy has been modified by the specified + the page is written out. The PGDUMP call does not return until + the disk has finished recording the page. + + This is useful when pages of a file have been mapped into + the user's address space. + + If the page cannot be swapped out because no disk space is available, + or some job that is using it cannot be pclsr'ed, it waits a while + and tries again. It does not return. + + This call used to be called PGDUMP, but the name was + changed to avoid confusion with PDUMP. + +Errors: + + 12 MODE NOT AVAILABLE + Page is absolute or tied down by exec pages. + 14 BAD CHANNEL NUMBER + The argument is invalid. + 31 CAN'T MODIFY JOB + Executing job doesn't have modification rights to the job + specified by argument 1. + 32 CAN'T GET THAT ACCESS TO PAGE + The page number in argument 2 is not between 0 and 377; or the + job does not have a page at that position in its address space. + 34 WRONG TYPE DEVICE + The specifies the pdp-6, which does not have paging. + 35 NO SUCH JOB + The argument specified a non-existent job. + +PKTIOT: transfer one Chaosnet packet + arg 1 - channel number + arg 2 - address of a 126.-word block. + + Always transfers exactly one packet. + The format of the 126.-word block is: + 16 16 4 + ----------------------------------------- + | opcode | unused | fc | nbytes | 0 | + ----------------------------------------- + |destination host |destination index| 0 | + ----------------------------------------- + | source host | source index | 0 | + ----------------------------------------- + | packet # | ack packet # | 0 | + ----------------------------------------- + | data1 | data2 ... + + ... data487 | + ----------------------------------------- + + For details of how to use these packets, see the Chaosnet + protocol documentation. + +RAUTH: read a file's author. + + arg 1 Number of a channel open on the DSK device, + or a . + + val 1 Sixbit name of the file's author (the last + person to write on the file.) + +RCHST: read channel status. + Note: This system call is obsolete. Use the RFNAME, + RFPNTR, or WHYINT system call to obtain the + information you want. + + arg 1 channel number + + val 1 The fullword sixbit name of the device open + on the specified channel, or 0 if the channel + is closed. + val 2 The first file name of the file open on the + channel, or 0 if filenames mean nothing on + the device which is open. + val 3 The second file name, or 0. + val 4 The directory name of the open file, assuming + that "directory name" has some meaning for the + device which is in use; otherwise, 0. + val 5 The channel's access pointer, if it is randomly + accessible; otherwise, -1. + val 6...additional device-dependent results + + The values may not be the same as the filenames, etc. + that were used to open the channel. The results of + this call are quite device-dependent. + in the open-mode returned by RCHST. + + The following devices return the access pointer as -1 + and the filenames and directory name as 0: + NUL LPT NVD PLT PTP IMX OMX + PTR DIS IDS COD TVC TAB MT0 + MSP STK + + The data stored by other specific devices is described below. + If a specific numbered value is not mentioned, then the default + is returned by that device - 0 for values 2, 3 and 4; + -1, for value 5. + + DIRECTORIES + val 1 The device name + val 2 sixbit/.FILE./ + val 3 sixbit/(DIR)/ + val 4 the directory name, on a multi-directory device + + DISK MFD's + val 1 sixbit/DSK/ + val 2 sixbit/M.F.D./ + val 3 sixbit/(FILE)/ + + ERR + val 1 'ERR,, + val 2 3 + val 3 a word in the format of a channel status word, + which has the error codes that the ERR device + is describing. + + Closed channel: + vals 1-4 0 + val 5 -1 + + TTY (as a console) + val 1 'TTY,, + + TTY (as a device) + val 1 'Tnm,, + + STY + val 1 'Snm,, + + USR (including PDP-6) + val 1 'USR,, + val 2 Uname of job. + val 3 Jname of job. + val 4 0 + val 5 Access pointer. + + UTn (micro-tape) + val 1 'UTn,, + val 2 File name 1. + val 3 File name 2. + val 4 Uname assigned to, or zero if none (see the .ASSIGN uuo). + + CLI, CLO, CLA, CLU + val 1 'CLO,, + val 2 File name 1. + val 3 File name 2. + val 4 Sname. + + DSK + val 1 'DSK,, + val 2 File name 1. + val 3 File name 2. + val 4 Directory name. + val 5 Access pointer. May be a byte pointer if character mode. + + BOJ + val 1 'BOJ,, + val 2 Uname of creator (zero if he has gone away). + val 3 Jname of creator (zero if he has gone away). + + JOB + vals 1-n Whatever the job device decides to return. + See the JOBSTS and JOBRET symbolic system calls. + Note that the job sets the results for vals 1-4 once + using the JOBSTS call, and only the values 5, 6, ... + are taken from the JOBRET that responds to the RCHST. + + NET + val 1 'NET,, + val 2 Local socket number. + val 3 Foreign socket number. + val 4 4.9 Network interrupt (INR/INS) received. + 2.9-2.1 Byte size. + 1.9-1.1 Foreign host number. + val 5 4.9-3.1 Time until IMP goes down, in thirtieths + of a second. + 0 => IMP down. + -1 => IMP doesn't plan to go down. + 2.9-1.1 Socket state: + 0 %NSCLS CLS received. val 6 gives reason. + 1 %NSLSN Listening for RFC. + 2 %NSRFC RFC received while listening. + 3 %NSRCL CLS received while in RFC received state. + 4 %NSRFS RFC sent. + 5 %NSOPN Connection open. + 6 %NSRFN RFNM wait on write link. + 7 %NSCLW CLS sent. Waiting for matching CLS. + 10 %NSCLI CLS received, but input still available. + 11 %NSINP Input available. + val 7 Reason for closing: + 0 %NCNTO Never open. + 1 %NCUSR Closed by user. + 2 %NCFRN Closed by foreign host. + 3 %NCRST Foreign host Reset itself. + 4 %NCDED Foreign host dead. + 5 %NCINC Incomplete transmission. + 6 %NCBYT Byte size mismatch. + 7 %NCNCP Local NCP went down. + 10 %NCRFS Connection refused. + val 8 Input: number of bits available. + Output: number of bits of buffer free. + + TCP: (Internet TCP) + val 1 SIXBIT /TCP/ + val 2 Local port # + val 3 Foreign port # + val 4 Foreign net address (HOSTS3 format) + + Chaosnet: + val 1 SIXBIT /CHAOS/ + val 2 Local index + val 3 Foreign index + val 4 Foreign net address (HOSTS3 format) + + SPY: + val 1 SIXBIT /SPY/ + val 2 TTY number + + DIRHNG: + val 1 SIXBIT /DIRHNG/ + val 2 0 + val 3 0 + val 4 Directory name + + LOCK: + val 1 SIXBIT /LOCK/ + val 2 Lock name + + UBI: + val 1 SIXBIT /UBI/ + val 2 ,, + +RCPOS: read cursor position (ITS TTY) + + arg 1 or + val 1 Main program area cursor position. + val 2 Echo area cursor position. + + Each cursor position is returned as a word with the + vertical position in the left half and the horizontal + position in the right half. + See the SCML symbolic system call for setting up an + echo area. + +RDDMST: read demon status + + arg 1 Either the sixbit name or the user index + of a demon job. + val 1 If arg 1 was the sixbit name, the user index; + if it was the user index, the sixbit name. + val 2 4.9-3.1 If non-zero, the time in two-minute ticks + between automatic signals for the demon. + 2.9-1.1 Number of requests pending for the demon. + val 3 Time in two-minute ticks until the next automatic + signal will occur (meaningful only if arg 2 bits + 4.9-3.1 not zero). + + See also the DEMSIG and STDMST symbolic system calls, + and the .DEMON uuo. + +RDMPBT: read dump bit + + arg 1 Disk channel number or + val 1 A word, all zero, except with the dump check + bit for the file in bit 1.1. + + The dump check bit is used by the magtape file backup + system to keep track of which files have been backed + up on magtape. This bit therefore should not be + twiddled light-heartedly. The "!" you sometimes see + in front of a date in a disk file directory is present + iff the dump check bit for the file is zero. + + See also the .DMPCH uuo and the SDMPBT + symbolic system call. + +RELOAD: reload top-level job (ITS DETACH) + + No arguments or values. Note, however, that an + argument of some kind must be supplied so that the + SETZ bit may be present to terminate the set of + arguments. + + The executing job must be the top level job of + a non-disowned job tree. + + Most of the job's system variables are initialized; + the file SYS:ATSIGN is then loaded and + started up, where is the jname of the job + (see the .JNAME user variable). + For example, if the jname of the job is HACTRN, + then the file SYS:ATSIGN HACTRN (which is DDT) + is loaded and started. This is how DDT performs + the U. command. Note that the translation lists for + the job are not cleared before this loading; thus one + can translate the file names SYS:ATSIGN and + cause a different file to be loaded. + + More specifically, the way the job is loaded is that + the following program is put into the job's ac's + and started at location 0: + + 0/ JFCL ;unused word + 1/ .OPEN 1,7 ;open up file SYS:ATSIGN + 2/ JRST 0 ;retry on failure + 3/ .CALL 12 ;load up program + 4/ .LOGOUT ;logout if loading fails + 5/ .IOT 1,2 ;read in starting address + 6/ JRST (2) ;go there + 7/ 4,,'SYS ;SYS device, image unit input + 10/ SIXBIT \ATSIGN\ + 11/ 0 ; is placed here + 12/ SETZ + 13/ SIXBIT \LOAD\ ;load file into job + 14/ 16 ;job specification + 15/ SETZ 17 ;channel number + 16/ -1 ;job is me + 17/ 1 ;channel number is 1 + + Typically the first thing a job used as a top level + (such as DDT) does is close channel 1. Now you know + why. The LOAD system call leaves channel 1 open + so that the start address and symbol table can be + read in. + +Errors: + + 40 NOT TOP LEVEL + +RENAME: rename a file + + Either + arg 1 Byte pointer to ASCIZ string specifying the old name, + or AOBJN pointer to block of byte pointers, + arg 2 Byte pointer to ASCIZ string specifying the new name, + or AOBJN pointer to block of byte pointers, + + Or + arg 1 Left-justified device name. + arg 2 Old file name 1. + arg 3 Old file name 2. + arg 4 Sname. If zero, the executing job's sname + is used (see the .SNAM user variable). + arg 5 New file name 1. + arg 6 New file name 2. + + The file specified by the first four names is renamed + according to the last two. It is not possible to + "rename" a file into a new directory or device. + Attempting to rename to an already existing file will + fail with error code 13 (File already exists). + + The old file names are subject to file name translation. + See the TRANAD and TRANDL symbolic system calls. + + See the SOPEN symbolic system call for how the byte or AOBJN + pointer argument should be formatted and how the string(s) are + parsed. + + See also the .FDELE uuo. + +RENMWO: rename while open + + Either + arg 1 Channel number of channel with file open on it. + arg 2 Byte pointer to ASCIZ string specifying the new name, + or AOBJN pointer to block of byte pointers, + + Or + arg 1 Channel number of channel with file open on it. + arg 2 New file name 1. + arg 3 New file name 2. + + The file open on the specified channel is renamed + according to the specified names. + + Ordinarily this is used in connection with output. Often + one opens a file for output with artificial file names, for + instance _TECO_ OUTPUT, instead of the real desired names. + This is so that if something should happen, causing the + channel to be closed before writing to the file is finished, + any previous file with the desired names will not be + replaced by the new, incomplete file. When all the + necessary data have been written into the file, + one RENMWO's to the desired names and then CLOSE's. + This causes the new, good file to replace the old one of + the same names. (By convention, file names beginning + with "_" are artificial names reserved for this purpose. + Ordinarily a program FOO will use the first file name + _FOO_ and a second file name indicating the nature of + the output file; thus _FOO_ OUTPUT, _FOO_ CRFOUT, + _FOO_ LSTOUT, etc.) + + See the SOPEN symbolic system call for how the byte or AOBJN + pointer argument should be formatted and how the string(s) are + parsed. + + See also the .FDELE uuo. + +REOWN: re-own a disowned job + + arg 1 channel # + + The foreign job open on the specified channel is made + an inferior of the current job. The sub-tree of that job + becomes part of the sub-tree of the current job. The UNAMEs + of the specified job and all its inferiors are changed to + the UNAME of the current job. The JNAMEs are altered where + necessary to keep all UNAME-JNAME pairs in the system unique. + +Errors: + +5 DIRECTORY FULL + The current job already has the maximum number of inferiors (8). +31 CAN'T MODIFY JOB + The specified job is not top-level, or not disowned. +34 WRONG TYPE DEVICE + Specified channel is not open on the USR device, + or the job is already an inferior of the current job. +42 JOB GONE OR GOING AWAY + The specified job is in the process of logging out. + +RESET: reset input/output channel + + arg 1 Channel number. + + See also the .RESET uuo. + + This is a device-dependent operation. In general + the intent is to reset the state of the device to + some standard setting. + + For TTY input: + If the particular TTY involved is the console, + wait until the executing job possesses the tty. + (If the %TBINT bit is set for the job, give a + word 1 interrupt on bit 4.2 if the job doesn't + have the tty.) If the TTY is in communicate mode, + wait until it leaves communicate mode. + All characters pending in the input buffer are + thrown away. Any interrupt characters which have + not yet interrupted will not interrupt. Any echoing + characters which have not yet echoed will not echo. + + For TTY output: + If the particular TTY involved is the console, + wait until the executing job possesses the tty. + (If the %TBINT bit is set for the job, give a + word 1 interrupt on bit 4.2 if the job doesn't + have the tty.) If the TTY is in communicate mode, + wait until it leaves communicate mode. + Any characters in the output buffer are thrown away + iff the %TPORS bit is 1. If the channel was hung in + a **MORE**, the **MORE** is forgotten. If the job + was interrupted in the middle of ^P code typeout, + the ^P is forgotten. Other oddball state bits are + also reset to their normal state. + If the intelligent terminal protocol is in use on + the tty, then a %TDORS code will be sent to it, + and a reply stating the terminal's actual cursor + position awaited before any more output is allowed. + See the description of this protocol in the TTY documentation. + + For the USR device: + This is like doing a .UCLOSE and then re-opening the + job, but with less overhead. All pages of the job + are flushed, and a single page, page 0, is created + and cleared. All resource variables and other variables + are initialized. The %TBNOT and %TBDTY bits are set + in the .TTY variable. The .SNAM variable is initialized + to the uname of the job. The .40ADDR variable is set + to 40 octal. The .APRC variable is set to 447 octal. + + For the LPT device: + The line currently being physically output is terminated + and output. All characters pending in the output buffer + are flushed. The printer is skipped to a new page. + + For the PLT device: + All buffered plotter commands are flushed. + + For the PTR device: + All buffered input characters are flushed. + + For the PTP device: + All buffered output characters are flushed. + + For the COD device: + All buffered output characters are flushed. + + For the PDP-6: + The core of the PDP-6 is cleared. If it is running, + this should cause it to loop, executing the zero word + in location 41. A routine is then placed in core to + clear the PI flags, clear the processor flags, release + all shared devices, clear the accumulators, and finally + clear itself from core. If the routine fails to run + (the PDP-6 is not running), then the routine is cleared + out of the PDP-6 memory again anyway. + + For the NET device: + Any pending interrupt (INR or INS) is cleared. + + For TCP channels: + Currently does nothing. + + For the Chaosnet (channels opened with CHAOSO): + Does nothing. + + For the STY device: + An input reset is much like an output reset for the + tty which is the STY's alter ego; similarly, an output + reset is much like an input reset for the associated tty. + One difference is that a STY input reset does not + reset certain channel-related bits that a tty output + reset would; on the other hand, it always succeeds in + flushing characters even if the %TPORS bit is not set. + + For the STK device: + All buffered input characters are flushed. + +RESRDT: restore file reference date + + arg 1 Disk channel number or + + The reference date for the disk file is restored to + its value prior to the opening of the file. + Note that control bit 1.4 avoids setting the + reference date when a disk file is opened. See + the OPEN symbolic system call. + + See also the DSKUPD, FILBLK, RQDATE and SRDATE symbolic + system calls. + +RFDATE: read file creation date + + arg 1 Disk channel number or + val 1 The creation date of the file: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + 2.9-1.1 Time of creation, in half-seconds + after midnight. + + See also the RQDATE and SFDATE symbolic system calls. + +RFNAME: read name of file channel is open to + + arg 1 whose channel should be read. (OPTIONAL) + If omitted, self is assumed. + arg 2 channel number + arg 3 Optional byte pointer to store ASCIZ filename string through. + arg 4 Optional maximum number of characters to store. + + val 1 The fullword sixbit name of the device open + on the specified channel, or 0 if the channel + is closed. + val 2 The first file name of the file open on the + channel, or 0 if filenames mean nothing on + the device which is open. + val 3 The second file name, or 0. + val 4 The directory name of the open file, assuming + that "directory name" has some meaning for the + device which is in use; otherwise, 0. + val 5 The mode in which the channel is open. + + The filenames and mode as described by the RFNAME may + not be the same as those specified in the original open. + That is because they are intended to be the "real" + filenames, etc., as opposed to those that were specified. + In other words, they are supposed to be the canonical + arguments to specify to attempt to re-open the file. + For example, the results of filename translation and + link following will show up in the names returned by + RFNAME, as opposed to the translated names or the names + of the link that was followed. Similarly, if COM or SYS + is opened, RFNAME will return DSK:COMMON; or DSK:SYS; + since COM and SYS are equivalent to those disk directories. + The core link devices CLO, CLU, CLA and CLI + perform different functions when first opened, but after the + open they result in indistinguishable channels, and the file + could be re-opened in any case by specifying CLO with the + right filenames, so RFNAME will for all four devices return + the device name CLO. + Some open-mode bits also have only an initial effect, and + they too are likely to be missing (or else always present!) + in the open-mode returned by RFNAME. + + + The following devices return the filenames and directory name as 0: + NUL LPT NVD PLT PTP IMX OMX + PTR DIS IDS COD TVC TAB MT0 + MSP STK + + The data stored by other specific devices is described below. + If a specific numbered value is not mentioned, then the default + is returned by that device - 0 for values 2, 3 and 4; + bits 1.1, 1.2, 1.3 with their standard meanings + for the open-mode (value 5). + + DIRECTORIES + val 1 The device name + val 2 sixbit/.FILE./ + val 3 sixbit/(DIR)/ + val 4 the directory name, on a multi-directory device + + DISK MFD's + val 1 'DSK,, + val 2 sixbit/M.F.D./ + val 3 sixbit/(FILE)/ + + ERR + val 1 'ERR,, + val 2 3 + val 3 a word in the format of a channel status word, + which has the error codes that the ERR device + is describing. + + Closed channel: + vals 1-5 0 + + TTY (as a console) + val 1 'TTY,, + val 5 see TTY as a device + + TTY (as a device) + val 1 'Tnm,, + val 5 Bits 1.1 and 1.2 are standard. + For output channels, all the %TJ... bits + are returned also as they were in the OPEN. + For input channels, all the %TI... bits are + returned as they were specfied in the OPEN. + + STY + val 1 'Snm,, + val 5 All the bits of a STY open are returned. + + USR (including PDP-6) + val 1 'USR,, + val 2 Uname of job. + val 3 Jname of job. + val 4 0 + val 5 bits 1.1 and 1.2 as standard + bit 1.4 1 if the job is not an inferior + of the job which has it open. + + UTn (micro-tape) + val 1 'UTn,, + val 2 File name 1. + val 3 File name 2. + val 4 Uname assigned to, or zero if none (see the .ASSIGN uuo). + + CLI, CLO, CLA, CLU + val 1 'CLO,, + val 2 File name 1. + val 3 File name 2. + val 4 Sname. + + DSK + val 1 'DSK,, + val 2 File name 1. + val 3 File name 2. + val 4 Directory name. + + BOJ + val 1 'BOJ,, + val 2 Uname of creator (zero if he has gone away). + val 3 Jname of creator (zero if he has gone away). + + JOB + vals 1-n Whatever the job device decides to return. + See the JOBSTS system call. Note that the JOB device + is not specifically consulted when the RFNAME call is + given; it sets up the file names and open mode once + and then these values are returned whenever a user + asks for them with RFNAME. + + NET: (Arpanet NCP) + Note that val 4 is slightly nonstandard. + val 1 'NET,, + val 2 Local socket number. + val 3 Foreign socket number. + val 4 4.9 Network interrupt (INR/INS) received. + 2.9-2.1 Byte size. + 1.9-1.1 Foreign host number. + + TCP: (Internet TCP) + val 1 SIXBIT /TCP/ + val 2 Local port # + val 3 Foreign port # + val 4 Foreign net address (HOSTS3 format) + + Chaosnet: + val 1 SIXBIT /CHAOS/ + val 2 Local index + val 3 Foreign index + val 4 Foreign net address (HOSTS3 format) + val 5 0 or 1 (i.e. .UAI or .UAO) + + SPY: + val 1 SIXBIT /SPY/ + val 2 TTY number + + DIRHNG: + val 1 SIXBIT /DIRHNG/ + val 2 0 + val 3 0 + val 4 Directory name + + LOCK: + val 1 SIXBIT /LOCK/ + val 2 Lock name + + UBI: + val 1 SIXBIT /UBI/ + val 2 ,, + +RFPNTR: read channel's random access pointer + + arg 1 channel # (or ) + + val 1 random access pointer + val 2 channel byte size. The acces pointer + is in terms of bytes of this size. + + The random access pointer is the number of bytes + into the file at which the next reading or writing + operation will occur. + + See also the ACCESS system call, the .ACCESS UUO, + the RCHST system call, and the .RCHST UUO. + +Errors: + +34 WRONG TYPE DEVICE + The device open on the specified channel is not random-access. + +RQDATE: read disk format date + + val 1 Current date and time in disk format: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + 2.9-1.1 Time in half-seconds after midnight. + If date and time are unknown, -1 is returned. + val 2 Date and time the system came up in disk format. + If date and time are unknown, -1 is returned. + + See also the DSKUPD, FILBLK, RESRDT, RFDATE, and SFDATE + symbolic system calls. + +RSSIZE: read screen size (ITS TTY) + + arg 1 or + val 1 Vertical size of screen (huge if printing). + val 2 Horizontal size of screen (print width). + + See also the CNSGET and CNSSET symbolic system calls. + +SAUTH: set a file's author + + arg 1 The number of a channel open on the DSK + device, or a . + + arg 2 The sixbit name of the file's author. + + Note: the author is actually stored as a directory + number, so if the author does not have a directory + SIXBIT /______/ will be substituted. Trailing digits + are deleted in an attempt to find the author's directory. + +SCML: set the number of TTY command lines (ITS TTY) + + arg 1 or + arg 2 Number of command lines (typical value is 4). + Must be less than the height of the screen. + If zero, no echo area. + + This causes an echo area to be set up at the bottom + of the display screen, using the last lines. + Characters typed in, or characters output in echo + mode, are output to this area rather than the main area. + Note that control bit 1.6 in an OPEN symbolic + system call for TTY input does an implicit SCML + with a second argument of 3. + +SCPOS: set tty cursor position (ITS TTY) + + arg 1 or + arg 2 vertical position (optional). + arg 3 horizontal position (optional). + arg 4 TTOALC word (optional). + val 1 old vertical position. + val 2 old horixontal position. + val 3 old TTOALC word. + + This call tells the system what the main-program-level + cursor position of the specified tty really is. It + does NOT request that the cursor be MOVED there; + it asserts that the cursor is expected to end up there + as a result of the characters already IOT'ed. + This call is necessary only when the system cannot figure + the resulting cursor position out for itself. + There are two cases when that happens: + + 1) The system does not compute cursor motion when + super-image output is done. If the user program, which + presumably knows how the characters are being used, knows + that the cursor will be moved by them, it should inform + the system. This is necessary even if the user program + is just trying to save time by generating the internal + system output buffer codes itself. + + 2) When an output reset is done on a tty of type %TNSFW + (a "software tty"), the system does not know where the + tty's cursor is physically located. Since the system + does not actually interpret the output characters at + interrupt level, but merely passes them off to the + tty, it does not know how much the tty had done when + the output reset happened. To recover, the system + sets the LH of the tty's TTOALC word to 0, and sends + a %TDORS character to the tty. The tty should respond by + informing the system of the current cursor position and + setting the LH of TTOALC to -1. Physical ttys must + use the intelligent terminal protocol to do that, + but STY users may do it with SCPOS. + +SDMPBT: set dump bit + + arg 1 Disk channel number or + arg 2 A word with the new value for the dump check + bit in bit 1.1. + + The dump check bit is used by the magtape file backup + system to keep track of which files have been backed + up on magtape. This bit therefore should not be + twiddled light-heartedly. The "!" you sometimes see + in front of a date in a disk file directory is present + iff the dump check bit for the file is zero. + + See also the .DMPCH uuo and the RDMPBT + symbolic system call. + +SETIOC: set input/output channel error + + This symbolic system call is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the JOBIOC + symbolic system call. + + arg 1 BOJ channel number or + arg 2 IOC error code. + + This is used by JOB devices to cause the calling job + to receive a word 1 IOC interrupt. This interrupt + will be given when the calling job next attempts + an IOT operation. The .BCHN variable for that job + will be set to the channel it has the JOB device + pen on, and bits 4.1-4.5 of the corresponding + .IOS word are set to the specified IOC error code. + See also the JOBINT symbolic system call. + + Valid IOC error codes are as follows: + 1 ILLEGAL HARDWARE OPERATION ATTEMPTED + 2 ATTEMPTED RANDOM ACCESS TO ADDRESS BEYOND END OF FILE + 3 NON-RECOVERABLE DATA ERROR + 4 NON-EXISTENT SUB-DEVICE + 5 OVER IOPOP + 6 OVER IOPUSH + 7 USR OP CHNL DOES NOT HAVE USR OPEN + 10 CHNL NOT OPEN + 11 DEVICE FULL (can also mean a directory is full) + 12 CHNL IN ILLEGAL MODE ON IOT + 13 ILLEGAL CHR AFTER CNTRL P ON TTY DISPLAY + 14 DIRECTORY FULL + 15 DIRECTORY'S ALLOCATION EXHAUSTED + +Errors: + + 33 MEANINGLESS ARGS + Second argument is not a valid IOC error code. + 34 WRONG TYPE DEVICE + First argument is not a BOJ channel number. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + +SFDATE: set file creation date + + arg 1 Disk channel number or + arg 2 New creation date and time in disk format: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + 2.9-1.1 Time of creation, in half-seconds + after midnight. + + See also the DSKUPD, FILBLK, RFDATE, RQDATE and SRDATE + symbolic system calls. + +SIOT: byte-string in/out transfer + + cbits Same as for IOT symbolic system call (q.v.). + arg 1 I/O channel number. + arg 2 Byte pointer to string to transfer + (must not be indexed or indirect). + arg 3 Count of bytes to be transferred. + arg 4 (Optional) device-independent special mode bits. + + The second and third arguments are updated as the + transfer proceeds. If an end of file condition occurs + or the job is interrupted out of the system call, they + may not be fully counted out. + + SIOT is notably efficient for STY input and TTY superimage + output - much faster than block mode. For details of Chaosnet + SIOT, see the description of IOT. + + Supposedly some esoteric devices don't support this mode of + I/O transfer, but I can't think of any. Also, it is alleged + that on some devices, SIOT is not yet as efficient as block + mode. + +Errors: + + 12 MODE NOT AVAILABLE + The device open on this channel doesn't support SIOT. + 14 BAD CHANNEL NUMBER + 33 MEANINGLESS ARGS + The second or third argument was immediate. + +SOPEN: open file, using strings to specify the filename + + arg 1 mode bits,,channel number + arg 2 byte pointer to ASCIZ filename string, + or AOBJN pointer to a block of byte pointers + to strings to be concatenated. + +If the second argument's left half is between -63. and -1, then the +argument is treated as an AOBJN pointer to a block of byte pointers to +ASCIZ strings. Those ASCIZ strings are effectively concatenated for +parsing. Otherwise, the second argument is treated as one byte +pointer. 0 may be used as the left half of a byte pointer, and is an +abbreviation for 440700. + +The combined string is parsed using the ordinary ITS filename syntax, with +colon indicating a device name, semicolon indicating a directory name, and +space separating filenames. ^Q is used for quoting colon, semicolon, +space, ^Q and ^@ (which would otherwise terminate the string); it cannot +hurt to quote other characters with ^Q. SOPEN defaults the device to +"DSK", the second filename to ">", and the directory to the executing job's +current sname. + +Multiple devices, directories and names may be significant with some job +devices, and perhaps with disk files as well at some time in the future. + +Once the string has been parsed into filenames, operation proceeds as +for the OPEN symbolic system call, which see. + +SOPEN appears to a job device handler just like any other OPEN, except +that the original second argument byte or AOBJN pointer is available +as one of the values of the JOBCAL symbolic system call (which see). +For an ordinary OPEN, that value from JOBCAL is zero. + +SRDATE: set file reference date + + arg 1 Disk channel number or + arg 2 New reference date in disk format: + 4.7-4.1 Year (mod 100.). + 3.9-3.6 Month (January = 1). + 3.5-3.1 Day of month. + + See also the DSKUPD, FILBLK, RESRDT, and RQDATE + symbolic system calls. + +SREAPB: set the do not reap bit + + arg 1 Disk channel or + arg 2 0 for the normal case. + 1 to request the grim file reaper to + leave this file alone. + + The do not reap bit of the file open on the channel + is set. The G*** F*** R**P** doesn't + respect this bit yet. + + The bit can be read using the FILBLK system call. + It is UNREAP in the FSDEFS insert file. + +SSERVE: set server job + + arg 1 Client job (OPTIONAL) + If omitted, self is assumed. + arg 2 Server job + + The .SERVER variable of the client job is modified to point to the + server job. See the description of .SERVER in .INFO.;ITS USETS. + This system call permits .SERVER to be updated without trafficking + in user indices. + +Errors: + + 34 WRONG TYPE DEVICE + Neither the client nor the server can be the PDP6 + 31 CAN'T MODIFY JOB + Executing job must be able to modify the client job. + +SSTATU: get various system status variables + + val 1 If non-negative, the time (in thirtieths of a + second) until the system will go down. + -1 if the system does not intend to go down. + -2 if the system is already down (can happen + in a job with %OPLIV set). + Obtained from the ITS variable SHUTDN. + See the .DIETIME, .SHUTDN, and .REVIVE uuos. + val 2 Non-zero if the system is being debugged. + This state causes the message + XX ITS ### BEING DEBUGGED + to appear on free consoles instead of the + XX ITS ### IN OPERATION + message usually seen when the system comes up. + If negative, the system is officially down; + ^Z is accepted only from tty 0 (the terminal + physically next to the PDP-10 console) or from + the tty whose number is the absolute value of + the contents of this quantity. A ^Z is also + accepted from a tty associated with a STY; + this is so that STY devices may be debugged! + It is the responsibility of the STELNT server + to examine this quantity and keep network users + from logging in when the system is being debugged. + Obtained from the ITS variable SYSDBG. + val 3 Number of users on the system. This is a + count of logged-in, console-controlled job + trees in the system. This variable is + incremented whenever a user logs in from a + console, and decremented whenever a console- + controlled tree is detached, gunned, or logged out. + This is the ITS variable SUSRS. + val 4 Sum of parity and nxm memory errors during this + incarnation of the system. This is the sum of + the ITS variables PARERR and NXMERR. + val 5 Time the system has been up, in thirtieths of + a second. This is the ITS variable TIME. + See the .RDTIME uuo. + val 6 The left-justified name of the machine, i.e. one of: + SIXBIT \AI\ ;A.I. Lab KS-10 + SIXBIT \ML\ ;Mathlab KS-10 + SIXBIT \MC\ ;Mail Computer KS-10 + SIXBIT \MD\ ;Mostly Development KS-10 + SIXBIT \MX\ ;Macsyma Consortium KL-10 + SIXBIT \SI\ ;Stacken ITS KS-10 + SIXBIT \PM\ ;PandaMonium KS-10 + SIXBIT \FU\ ;Australian KS-10 + SIXBIT \DM\ ;Dynamic Modeling KA-10 (R.I.P.) + SIXBIT \MLKA\ ;Mathlab KA-10 (R.I.P.) + SIXBIT \AIKA\ ;A.I. Lab KA-10 (R.I.P.?) + This is the name which appears for XX in such + messages as + XX ITS ### IN OPERATION + and which serves as a device name for that + machine's disks (i.e. the ML device is the + DSK device of the ML (Mathlab) machine). + If more ITS machines come into existence, + naturally more machine names will be invented. + val 7 The system version number, in sixbit. This is + the ### in such messages as above. + val 8 The number of free job slots. + + DDT uses much of this information to print out its + greeting to you: + If value 2 is non-zero DDT prints out + ITS BEING DEBUGGED! + If value 1 is non-negative DDT prints out + XX ITS GOING DOWN IN 1:23 + if e.g. ITS were going down in 1 minute, 23 seconds. + (DDT also prints the contents of the file SYS:DOWN MAIL + if that file exists.) + Value 3 is used to print out the number of users as + 23. LUSERS + (if your DDT has not logged in itself, it increments + this value so as to count you also). + Values 4 and 5 are used to compute the number of memory + errors per hour, printed as: + MEM ERRS .034142/HOUR + The DDT command :SSTATU will print out all + this information. + +STATUS: get input/output status word + + arg 1 Channel number. + val 1 Status word for specified channel. + + This call returns a word describing the state of + the specified channel: + 4.9-4.6 Always zero. See the .IOPUSH and .IOPOP + uuo's, and the .IOP and .IOS user variables. + 4.5-4.1 If non-zero, the number of a non-display + input/output error (see table below). + 3.9-3.7 If non-zero, the number of an interpreted + display input/output error (see table below). + 3.6-3.1 If non-zero, the number of a standard error. + These are the same as the error codes returned + by failing .CALL's. + 2.9-2.3 Device dependent (see below). + 2.2 Buffering capacity empty. + 2.1 Buffering capacity full. + 1.9-1.7 Mode in which device was opened. + 1.9 0 = ascii, 1 = image. + 1.8 0 = unit, 1 = block. + 1.7 0 = input, 1 = output. + 1.6-1.1 ITS internal physical device code. + 0 TTY Console input. + 1 TTY Printing console output. + 2 TTY Display console output. + 3 LPT Data Products line printer. + 4 VID Vidisector ??? + 5 BAT Vidisector ??? + 6 PLT Calcomp plotter. + 7 PTP Paper tape punch. + 10 IMX Input multiplexor. + 11 OMX Output multiplexor. + 12 PTR Paper tape reader. + 13 DIS DEC 340 display, ascii output. + 14 IDS Interpreted 340 display. ??? + 15 MTn Magnetic tape. + 16 COD Morse code device. + 17 TAB Tablet. ??? + 21 NUL Source of zeroes, or output sink. + 22 JOB Job device. + 23 BOJ Inverse of JOB. + 24 SPY Spy on another console. + 25 STY Pseudo-teletype. + 26 NET ARPAnet (NCP). + 27 LPT Vogue line printer (yech!) + 30 STK Stanford keyboard. + 31 MSP (DM) Interprocess message protocol. + 32 CHAOS CHAOS net. + 33 TCP TCP Internet. + 34 TRAP Trap "device" + 35 IPQ Internet IP Queue. + 36 UBI KS10 Unibus interrupt + 41 UTn Microtape (DECtape). + 43 DSK 2311 disk drives or equivalent. + 60 USR A not immediately inferior procedure. + 61 USR An immediately inferior procedure. + 62 CLx Various core link devices (CLA, CLI, CLO, CLU) + 63 --- File directory or ERR device. + 64 USR The PDP-6. + 65 DIRHNG Directory hang "device" + 66 LOCK Lock "device" + + Device dependent bits for TTY input: + 2.9 Local tty. + 2.8 Next to the 340 or a 340 slave. + 2.5 Chars pending which have been .ITYIC'ed but not IOT'ed. + 2.4 The job possesses the tty. + + Device dependent bits for TTY output: + 2.4 The job possesses the tty. + + Device dependent bits for Data Products LPT: + 2.9-2.3 Current column (left margin = 0). + + Device dependent bits for MTn (macro-tape): + 2.9 Chunk, write EOR after each IOT (should be block) on output, + don't ignore them on input. See magtap info. + 2.8 0 => odd parity, 1 => even parity. + 2.7-2.6 Density: 00 => 800, 01 => 200, 10 => 556. + Apparently 11 => IBM 9 track 800 bpi?? + 2.5 0 => 7 track, 1 => 9 track. + 2.4 End of tape. + 2.3 Read compare error. + + Device dependent bits for NET: + 2.9-2.4 Socket state: + 0 %NSCLS CLS received or net down. Connection closed. + 1 %NSLSN Listening for RFC. + 2 %NSRFC RFC received while listening. + 3 %NSRCL CLS received while in state 2. + 4 %NSRFS RFC sent. + 5 %NSOPN Connection open. + 6 %NSRFN RFNM wait on write link. + 7 %NSCLW CLS sent; waiting for matching CLS. + 10 %NSCLI CLS received but input still available. + 11 %NSINP Input available. + + Device dependent bits for TCP: + 2.9-2.4 Connection state - see WHYINT call for state codes. + + CHAOSnet provides no device dependent bits. + + A STATUS word can be supplied to the ERR + device to obtain corresponding error message, if any. + + See also the JOBSTS symbolic system call, the .STATUS uuo, + and the .IOS user variable. + +STDMST: set demon status + + arg 1 Either the sixbit name or the user index + of a demon job. + arg 2 If negative, flush all requests for the specified demon. + Otherwise: + 4.9-3.1 If non-zero, the time in two-minute ticks + between automatic signals for the demon. + 2.9-1.1 Number of requests pending for the demon. + arg 3 Time in two-minute ticks until the next automatic + signal will occur (meaningful only if arg 2 bits + 4.9-3.1 not zero). + + See also the DEMSIG and RDDMST symbolic system calls, + and the .DEMON uuo. + +STLGET: get information from Server Telnet + + arg 1 a + + val 1 XJNAME of server telnet + val 2 TRMNAM of server telnet + This is the sixbit name of the host connected to. + val 3 SNAME of server telnet + val 4 In LH: STY status bits + In RH: index of telnet server job which owns the STY. + + This call can be used to find out where in the network + a TTY really is. + + The STY status bits are from the STYSTS table in ITS. + Some of the more interesting ones include: + %SSNET==4000 ;4.3 = 1 => THIS STY CONNECTED TO SOME NET SOCKETS. + %SSCHA==2000 ;4.2 = 0 FOR ARPANET, 1 FOR CHAOS NET + %SSTCP==1000 ;4.1 = 1 for TCP internet (%SSCHA must be 0) + +Errors: + +34 WRONG TYPE DEVICE + Specified TTY is not controlled by a server telnet. + +STYGET: get information about STY + + arg 1 (need not be associated with a STY) + val 1 STY status word: + 4.9 %SSHNG Don't hang on input IOT. + 4.8 %SSUSE STY is in use. + 4.7 %SSINT Have given interrupt on STY output channels. + 4.6 %SSONT Have given interrupt on STY input channels. + 4.5 %SSOHG Don't hang on output IOT. + 4.4 %SSORS Give a %TDORS whenever an output RESET is + done on the controlled tty, regardless + of whether the tty is a software tty. + 2.9-1.1 User index of job which owns the STY. + Zero if STY is not in use, or if TTY is not + associated with a STY. + val 2 User index of job which owns the TTY, either as a device + or as a currently possessed console; or -1 if TTY is free. + val 3 -1 if the TTY is not a console or is free. Otherwise, + 2.9-1.1 is the user index of the top-level job of the + job tree controlled by the TTY. + 4.8 = 1 if that job is in the process of logging out. + 4.7 = 1 if that job is logged in. + + val 4 4.9 Owner of TTY is in a TTY output wait on the TTY. + 1.1 Owner of TTY is in a TTY input wait on the TTY. + These bits probably don't work very well. + val 5 4.9 TTY input available. + 4.8 TTY output buffer has room. + val 6 The tty's TTYSTA word. + 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. + + This symbolic system call originally was intended to return + STY information, but now returns useful data concerning any TTY. + +STYNET: Connect a STY to a pair of Network connections. + + arg 1 Sty channel (either direction). + arg 2 -1 to disconnect the STY from its network channels + (in which case args 3 and 4 are unnecessary), + or Net input channel (to connect STY output to). + This may be a NCP, TCP, or CHAOS channel. + arg 3 Net output channel (to connect STY input to). + arg 4 Characters to send out on net + when an output .RESET is done on the STY's TTY. + Up to 3 8-bit characters, left-justified. + + It is possible with this call to connect a STY to a pair + of network channels, one open for input, and one open for output. + When the direct connection is established, anything received by + the net input socket will be fed automatically to the + STY, and any type-out that the STY receives from its TTY will be + fed automatically to the net output channel. The transfer of + data is handled by the system at clock level, eliminating + the need for the program to wake up at each character. + + Only one input and one output net channel can be connected to + a STY, and only one STY can be connected to any net channel. + Both sides of a STY are connected and disconnected at once. + A job can connect a STY if it has the STY open in either direction + (but it will generally want to have both directions open). + + Once established, the direct connection will last until + broken explicitly by the user, or until an escape condition + is detected by the system. Escape conditions include receipt + of a TELNET control character on the net input channel (any + character with the 200's bit on), and + either net channel's getting into an abnormal state (other + than %NSOPN, %NSINP, or %NSCLI) - in general, things which + the system expects that the user program will want to take + action on. + + The connection can be broken explicitly by the user either + by a STYNET call with arg 2 negative, or by a CLOSE of any + of the channels involved (this also happens when the job + is killed.) It is an error to IOT on any of the channels + without breaking the connection first. + + The STYNET call returns immediately, without actually + transferring any data. The program can assume that the + connection is still in effect until it is notified of + a disconnection by an interrupt on the net input channel. + While the connection lasts, interrupts on the net channels + due to arriving data are intercepted by the system, so + an interrupt implies that the connection has been broken. + + When a %TDORS comes out of the STY, indicating that the TTY's + output buffer has been cleared, this is indicated to the net + output channel by means of a network interrupt (NCP only), and the + string of up to 3 characters specified as the fourth argument + to the STYNET call. If TCP, these characters are PUSHed with the + URGENT bit set. + + If you use STYNET with the official TELNET protocol, you must + turn on the %TPTEL bit in the STY TTY's TTYOPT variable, to + cause the sequence CR-LF to be turned into just a CR. + + For the Chaosnet: + arg 1 - STY channel + arg 2 - Chaos channel to connect to, or + -1 to disconnect + arg 3 - Other Chaos channel (not actually used) + arg 4 - Output-reset character sequence, up to 3 8-bit + characters left-justified. + + This works the same as on the Arpanet. The specified STY + is connected to or disconnected from a Chaos net channel. + Data is transferred in and out by the system without the + need for intervention by the user program. If an unusual + condition occurs, the STY is disconnected from the Chaos + channel and the user is interrupted. It is illegal to do + I/O on any of the involved channels while they are connected. + + This call is provided for the benefit of the "Telnet" server. + +Errors: + + 2 WRONG DIRECTION + An input net channel was supplied as the third argument, or + an output channel was supplied as the second argument. + 23 FILE LOCKED + The STY or one of the network channels is already direct-connected + to another network channel or another STY. + 41 OTHER END OF PIPELINE GONE OR NOT OPEN + An attempt was made to disconnect a STY not already connected. + +T11MP: PDP-10 to PDP-11 map + + arg 1 Page number within the user's core. That page + must be either non-existent or shared with an + absolute page. The user's virtual page is made + to share with some arbitrarily chosen absolute + page, which is then made to share with PDP-11 memory + according to argument 2. + arg 2 Desired PDP-10 to PDP-11 map word. + 4.9 Valid (must be 1). + 4.8 Write enable. + 4.7-4.3 Unused. + 4.2-3.9 PDP-11 number. See below. + 3.8-2.2 Relocation (origin of segment in PDP-11 + address space). = 4*. + 2.1-1.1 Protection (number of accessible words - 1). + = 4*. + If protection=0 then only one 16-bit word + is accessible. + + The CORBLK symbolic system call may be used in the special + case of mapping one's TV console video buffer memory. + + The AI KA-10 has a PDP-10 to PDP-11 interface which lets the PDP-10 + programmer directly access the memories of up to eight PDP-11's. + PDP-10 pages are mapped into segments of variable size in the + PDP-11's memory. The PDP-10 to PDP-11 page map is also directly + addressable in memory (it currently lives in absolute locations + 2,,776000 - 2,,776377). There are 256. such entries, one for each + page in the range 2,,0 - 2,,777777, which are the addresses fielded + by the PDP-10 to PDP-11 interface. ITS allocates these pages + and their corresponding map entries randomly as needed. + + When the PDP-10 attempts to access a physical address in the range + 2,,0 to 2,,777777, the interface uses the 776000 bits to index + the map words. If the appropriate map word does not have its + valid bit set, the memory is considered non-existent. The same + is true if the reference would violate the protection bounds. + The reference also fails if it is a write reference and the + map word does not have the write enable bit set. + Otherwise, the relocation quantity is added to the 1777 bits, + and this determines which PDP-11 double-word to access. + The PDP-11 number determines which PDP-11 to access, of course. + The PDP-11 double-word corresponds to the high 32. bits of the + PDP-10 word, as follows: + PDP-10 BIT PDP-11 WORD AND BIT + 4.9 0 15 + 4.8 0 14 + 4.7 0 13 + --- --- --- + 3.4 0 01 + 3.3 0 00 + 3.2 1 15 + 3.1 1 14 + --- --- --- + 1.6 1 01 + 1.5 1 00 + When reading the PDP-11 memory, bits 1.4-1.1 are read as zeros. + When writing, 1.4=1 means don't change word 0, 1.3=1 means don't + change word 1, and 1.2-1.1 are ignored. Split cycles do the right + thing, so ILDB and IDPB should work correctly. + Note that accessing consecutive 16.-bit PDP-10 bytes will access + consecutive PDP-11 words, but accessing consecutive 8-bit PDP-10 + bytes will not access consecutive PDP-11 bytes! Rather, the PDP-11 + bytes are accessed in the order 1, 0, 3, 2. + + The following PDP11s are currently (4/2/76) attached. + + 0 The pdp11 that runs the AI KA-10 TV system. + 1 The pdp11 that runs the AI KA-10 XGP. + 2 The Lisp Machine GT40. + 3 The Chess Machine (not really a pdp11.) + 4 The Logo pdp11/45. + 5 The Micro-Automation pdp11/45. + +Errors: + + 1 NO SUCH DEVICE + There is no PDP-11 connected to this PDP-10. + 3 DEVICE NOT READY + The PDP-11 is not ready. + 33 MEANINGLESS ARGS + The page number is invalid, or the map word has bit 4.9=0. + 37 NO CORE AVAILABLE + No map words free. + +TCPOPN: open a TCP Internet connection (TCP;TCPDOC >) + + arg 1 - receive channel number + arg 2 - transmit channel number + arg 3 - local port # (-1 to gensym a unique local port #) + arg 4 - foreign port # (-1 for wild port) + arg 5 - foreign host address (HOSTS3 fmt) (-1 for wild host) + arg 6 - Retransmission timeout (optional, not yet used) + +Control bits: + - None needed for channels - they are opened as .UAI and .UAO + automatically (no other modes possible). + - 7 vs 8 bit ASCII transfers can be determined by user-space byte + pointer used in SIOT. System buffers are always 8-bit bytes. + %NOLSN - Listen mode + + Note a value of -1 for either the foreign port or host will imply + that the call is a "listen". Return is always immediate, use NETBLK + to determine when the channels become open. For a non-listen call, + there is an internal ITS timeout, but for listen the state can persist + forever. + +ERRORS: + 6 - No free TCBs or buffers available (system has too many active conns) + 7 - TCP disabled in system. + 11 - Bad local or fgn port # + 13 - Connection already exists with these ports + 14 - Bad channel # arguments. + 33 - Illegal to use same channel for both input/output. + +TRANAD: add a translation entry (ITS TRANSL) + + cbits 2.9 Atomic translation (do not retranslate). + 2.8 0 => TRNLST, 1 => TRNLS1. + The TRNLST applies only to the specified job; + the TRNLS1 applies to the job and its inferiors, + direct or indirect. + 1.2 Output translation. + 1.1 Input translation. + Before the control bits are interpreted, the LH + of arg 1 is XOR'd into them. + arg 1 RH is a . LH XOR'd into cbits. + arg 2 AOBJN pointer to a block of "from" names. + arg 3 AOBJN pointer to a block of "new" names. + + Each AOBJN pointer should point to a block of + from one to four words. These are, in order, the + device, file name 1, file name 2, and sname which + are to be translated. All names are left-justified + within a word. A zero or omitted word is equivalent + to *. + Before creating the translation, a TRANDL is + performed on the first two arguments to prevent + duplicate translations. + + Uuos and symbolic system calls affected by translation + include .FDELE, .OPEN, MLINK, RENAME, and OPEN. + +Errors: + + 5 DIRECTORY FULL + No room in system for new translation entry. + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + 33 MEANINGLESS ARGS + 34 WRONG TYPE DEVICE + Not meaningful to put a translation on the PDP-6. + 35 NO SUCH JOB + +TRANCL: clear translation list (delete all entries) (ITS TRANSL) + + cbits 2.8 Clear TRNLS1. + 2.7 Clear TRNLST. + The TRNLST applies only to the + specified job; the TRNLS1 applies + to the job and its inferiors, + direct or indirect. + Before the control bits are interpreted, the LH + of arg 1 is XOR'd into them. + arg 1 RH is a . LH XOR'd into cbits. + + + Either or both lists may be cleared with a single call. +Errors: + + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + 33 MEANINGLESS ARGS + 34 WRONG TYPE DEVICE + Not meaningful to clear translation lists for PDP-6. + 35 NO SUCH JOB + +TRANDL: delete a translation entry (ITS TRANSL) + + cbits 2.8 0 means TRNLST, 1 means TRNLS1. + The TRNLST applies only to the + specified job; the TRNLS1 applies + to the job and its inferiors, + direct or indirect. + 1.2 Stop translating for output. + 1.1 Stop translating for input. + Before the control bits are interpreted, the LH + of arg 1 is XOR'd into them. + arg 1 RH is a . LH XOR'd into cbits. + arg 2 An AOBJN pointer to a block of names. + + The AOBJN pointer should point to a block of + from one to four words. These are, in order, the + device, file name 1, file name 2, and sname which + are no longer to be translated. All names are + left-justified within a word. A zero or omitted + word is equivalent to *. + +Errors: + + 4 FILE NOT FOUND + No such translation entry to delete. + 14 BAD CHANNEL NUMBER + 31 CAN'T MODIFY JOB + 33 MEANINGLESS ARGS + 34 WRONG TYPE DEVICE + Not meaningful to delete translation entry for PDP-6. + 35 NO SUCH JOB + +TRANEX: examine a translation list (ITS TRANSL) + + cbits 2.8 0 means TRNLST, 1 means TRNLS1. + The TRNLST applies only to the + specified job; the TRNLS1 applies + to the job and its inferiors, + direct or indirect. + Before the control bits are interpreted, the LH + of arg 1 is XOR'd into them. + arg 1 RH is a . LH XOR'd into cbits. + arg 2 AOBJN pointer to array in core. + val 1 AOBJN pointer to tail end of array, + i.e. the part not needed to hold the data. + + The translation list is stored as consecutive + nine-word blocks of translation information. + Each block has the following form: + wd 0 4.9 Atomic translation entry. + 3.2 Output translation. + 3.1 Input translation. + wd 1 "from" device name. + wd 2 "from" file name 1. + wd 3 "from" file name 2. + wd 4 "from" sname. + wd 5 "to" device name. + wd 6 "to" file name 1. + wd 7 "to" file name 2. + wd 8 "to" sname. + A zero word for a "from" name means translate for any + name in that position; a zero "to" word means don't + change that name when translating. + +Errors: + + 14 BAD CHANNEL NUMBER + 33 MEANINGLESS ARGS + 34 WRONG TYPE DEVICE + Not meaningful to examine translation list for PDP-6. + 35 NO SUCH JOB + 37 NO CORE AVAILABLE + Supplied array too small to hold data. + +TRANS: translate some file names (ITS TRANSL) + + cbits 1.1 0 for input, 1 for output. + arg 1 "from" device name. + arg 2 "from" file name 1 (defaults to zero). + arg 3 "from" file name 2 (defaults to zero). + arg 4 "from" sname (defaults to job's current sname). + arg 5 mode (XOR'd with control bits; defaults to 0). + val 1 "to" device name. + val 2 "to" file name 1. + val 3 "to" file name 2. + val 4 "to" sname. + + The given file names are translated by the same rules + for translation governing the operations of OPEN, + RENAME, DELETE, and MLINK. These rules are as follows. + + Translation lists are searched in the order: + executing job's TRNLST + executing job's TRNLS1 + executing job's superior's TRNLS1 + that job's superior's TRNLS1 + . . . + top-level job's TRNLS1 + system job's TRNLS1 + The lists are searched for an entry matching the given "from" + file names. A translation entry is said to match if each + "from" name matches the entry's corresponding name, + and if the translation entry applies to the mode (input or output). + A name in turn matches if the entry's name is the same as + the given name, or if the entry's name is * (matches anything). + If a match is found, the given file names are replaced by the "to" + file names in the translation entry, except that in the entry + a "to" file name of * means don't change the given name; + the process is then repeated from the beginning unless the + matching translation entry is atomic. When this happens, or + when a full search finds no matching translation entries, + the translation process is complete. To prevent endless + retranslation, it is considered an error to repeat the + translation process more than eight times. + + When a job is first created its TRNLST and TRNLS1 are null. + The TRANAD, TRANCL, TRANDL, and TRANEX symbolic system calls + may be used to examine and modify translation lists. + +Errors: + + 3 TOO MANY TRANSLATIONS + No more than eight consecutive translations are permitted. + +TRPOPN: Open trap-device channel + + arg 1 + arg 2 channel number in that job + arg 3 IOCHNM word (only LH is used) + arg 4 IOCHST word + + The specified channel of the specified job is made a trap-device + channel. Almost any attempt to use it will cause a %PITRP interrupt. + See documentation of the TRAP: device. + +Errors: + +13 FILE ALREADY EXISTS + The specified channel is open. + +14 BAD CHANNEL NUMBER + arg 2 is invalid. + +31 CAN'T MODIFY JOB + The is not clobberable. + +34 WRONG TYPE DEVICE + The is the pdp-6. + +TTYESC: simulate type-in of ^_ + + arg 1 + + Pretends that the user has just typed in a ^_. + The next character the user types will be interpreted + as a ^_ command. + + The intended use of this is for programs which use + super-image input, so that ^_ does not have its normal + effect, but which wish to provide an escape convention + so that the effect of ^_ can be obtained. When the program + sees the escape character sequence as input, it should + do a TTYESC. + +Errors: + +7 DEVICE NOT READY + The terminal is already in the middle of a ^_ code + being typed by the user. + +TTYFLS: flush TTY input + + arg 1 + control bits: + 1.1 0 => cause the last interrupt character .ITYIC'ed + to be ignored by .IOT. + 1 => discard all input up to and including the last + character .ITYIC'ed. + + This call is normally used by TTY input interrupt handlers. + +TTYGET: read the variables TTYST1, TTYST2, TTYSTS (ITS TTY) + + arg 1 or + val 1 TTYST1 variable. + 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 < > ( ) [ ] { } + val 2 TTYST2 variable. + Six more groups of six bits: + 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) + val 3 TTYSTS variable. + 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. + val 4 the TTYTYP variable + See the CNSGET documentation. + val 5 the TCTYP variable + See the CNSGET documentation. + + Values 4 and 5 probably should not be depended upon. + + See also the CNSGET, CNSSET, and TTYSET symbolic system calls. + +Errors: + + 1 NO SUCH DEVICE + No tty exists with the specified number. + 14 BAD CHANNEL NUMBER + 34 WRONG TYPE DEVICE + +TTYSET: set the variables TTYST1, TTYST2, TTYSTS (ITS TTY) + + arg 1 or + arg 2 TTYST1 variable. See under TTYGET. + arg 3 TTYST2 variable. See under TTYGET. + arg 4 TTYSTS variable (optional). See under TTYGET. + %TSFRE, %TSHDX, %TSLCZ, and %TSCNS may not be altered, + nor may the RH. + + See also the CNSGET, CNSSET, and TTYGET symbolic system calls. + +Errors: + + 1 NO SUCH DEVICE + No tty exists with the specified number. + 14 BAD CHANNEL NUMBER + 34 WRONG TYPE DEVICE + +TTYVAR: read or set a variable associated with a TTY. + + arg 1 or + + In the simplest mode: + + arg 2 the name of a tty variable, in SIXBIT. + arg 3 (if writing) the new value. + + If arg 3 is not supplied, you are reading, and + val 1 is the value of the variable. + + In immediate-instruction mode: + + arg 2 the SIXBIT name of a tty variable. + arg 3 ignored + arg 4 the instruction + + This mode is detected by the presence of four arguments. + + The specified instruction is executed as if the + variable was in ac 0. MOVE can be used to set the + variable, MOVEM to read it, but you can also use + TLO to set bits, ADDI to increment, etc. + + In block mode + + arg 2 an AOBJN pointer to a block of pairs of words. + + This mode is detected by bits 4.1-4.9 of arg 2 being all + ones. + + The first word in each pair is the SIXBIT name of a tty + variable, and the second word is an instruction to be + executed as if that variable were in ac 0. The block pointer + argument is updated. + + The TTY variables include HEIGHT, WIDTH, ISPEED, OSPEED, TTYOPT, + TTYTYP, TTYCOM, TCTYP, TTYROL, TTYSMT, and IDLTIM. See + .INFO.;ITS TTY for a description of their meanings. + + The instructions allowed in immediate-instruction and + block modes are: MOVx, MOVxI, MOVEM, ADD, ADDI, SUB, SUBI, + all Booleans in normal and immediate modes, and TxZ, TxC, + and TxO (i.e. all Test instructions that modify and don't + skip.) + +Errors: + + 11 ILLEGAL FILE NAME + Unrecognized tty variable name. + 26 DEVICE WRITE-LOCKED + Specified variable or specified tty cannot be written. + 33 MEANINGLESS ARGS + Attempt to store an illegal value in the TCTYP variable, + or an illegal instruction was specified in immediate- + instruction or block mode. + +TVWHER: tell where a TV is + + arg 1 or + val 1 The keyboard number of the physical + terminal in use. + The correspondence between keyboard numbers + and physical locations is in the file + SYSENG;TVKBD ROOMS, which is how the NAME + program gets this information. If this table + and that file disagree, that file is correct, + and please update this table. + As of February 7, 1977, these correspondences + were in effect: + KBD # ROOM WHO LIVES THERE + 0 809 Fahlman, Holloway, Knight x7807 + 1 810 Lavin, Kuipers, Miller, Bruss x7836 + 2 919 Very Small Data Bases north x6765 + 3 812 Yvonne, Karen x5876 + 4 813 Hewitt x5873 + 5 814 Sussman, McDermott x5874 + 6 808 Freiling, Lozano-Perez, Ullman x5875 + 10 817 Jabari x6218 + 13 819 Goldstein x5879 + 14 820 Minsky x5864 + 17 822 Marr x2082 + 21 824 Rich, Levin, DeKleer x6032 + 22 825 Purcell, Doyle x5848 + 23 826 Fredkin's Folly x5904 + 30 925 Moon (Tycho, north wall) x6765 + 31 902 Mason, Raibert, Hollerbach x3483 + 32 919 Very Small Data Bases south x6765 + 33 344 Edwards, Lebel x6765 + 34 913 Baisley, Greenblatt x6765 + 35 914 Gosper's Fishbowl x2076 + 36 912 9th Floor Lounge x6765 + 37 907 Chess, Lisp Machines x6765 + + val 2 The number of the TV video buffer in use + on this tty (0-17 octal). This is NOT a + Video Switch input number. + +Errors: + + 1 NO SUCH DEVICE + No tty exists with the specified number. + 10 DEVICE NOT AVAILABLE + The PDP-11 which services the TV consoles is down. + 34 WRONG TYPE DEVICE + The specified tty was not a TV, or the specified + channel was not a or . + +UNLOCK: Unlock JOB's locks. + + arg 1 + + If the specified job is writable, and is using the locks + feature, its locks are unlocked. (Usually this is used on + onesself.) See the ITS LOCKS file for more information + on locks. + + (Note that this has nothing to do with the LOCK device. In + particular it will -not- close LOCK device channels.) + +Errors: + + 31 CAN'T MODIFY JOB + The specified job is not writable. + + Plus the usual errors for arguments. + +USRMEM: Read or write another job's memory + + cbits 2.9 Allow writing into any job + 1.1 If page isn't readable or writable give an + MPV or pure interrupt to the job being + referenced. + + arg 1 + Other args are like USRVAR and TTYVAR. In place of + a variable-specifier you put the address in the job + of the word to be read or written. + + arg 2 Address to read or write (non-negative) + + Straight reading: + + Specify only 2 arguments. + + Straight writing: + + arg 3 New value + + Writing with an instruction: + + arg 3 Ignored + arg 4 Instruction to write with + + Block mode: + + arg 2 An AOBJN pointer to a block of pairs, first address + and then instruction. + + val 1 Previous contents (these are not valid in block mode) + val 2 New contents + + + Reading: + The content of the specified address in + is returned as val 1. + + Writing: + Arg 3 is written into the specified address + in . The previous contents are returned + as val 1. + + Writing with an instruction: + The instruction should modify its AC as if the spec'd job's + memory location were in it. The memory operand is fetched + from your own address space and is not stored back. + No jobs can run while the location is being modified, that is + between the fetching of the old value and the storing of + the new value. + The previous contents are returned as val 1, the new + contents as val 2. + +Errors: + + 31 CAN'T MODIFY JOB + The specified job is not writable. + 32 CAN'T GET THAT ACCESS TO PAGE + The specified page is either nonexistant + or is read-only. + 33 MEANINGLESS ARGS + Attempt to specify an illegal instruction for writing. + +USRVAR: Read or set some of a job's variables + + arg 1 + + In the simplest mode: + + arg 2 user variable specifier (see below). + arg 3 (if writing) the new value. + + If arg 3 is not supplied, you are reading, and + val 1 is the value of the variable. + + In immediate-instruction mode: + + arg 2 user variable specifier (see below). + arg 3 ignored + arg 4 the instruction + + This mode is detected by the presence of four arguments. + + The specified instruction is executed as if the + variable was in ac 0. MOVE can be used to set the + variable, MOVEM to read it, but you can also use + TLO to set bits, ADDI to increment, etc. + + In block mode + + arg 2 an AOBJN pointer to a block of pairs of words. + + This mode is detected by bits 4.1-4.9 of arg 2 being all + ones. + + The first word in each pair is the user variable specifier + (see below), and the second word is an instruction to be + executed as if that variable were in ac 0. The block pointer + argument is updated. + + The instructions allowed in immediate-instruction and + block modes are: MOVx, MOVxI, MOVEM, ADD, ADDI, SUB, SUBI, + all Booleans in normal and immediate modes, and TxZ, TxC, + and TxO (i.e. all Test instructions that modify and don't + skip.) + + This call is the symbolic equivalent of the .USET and .SUSET + UUO's. It can read, write, or both (but you are usually not + allowed to write any job except yourself or an inferior); + it is a .SUSET if the is %JSELF, or a .USET if given a + channel number as the , or it can be given other kinds + of job specs. + + The user variable specifier can be either numeric or sixbit. + If sixbit, it is the same as the name given in the ITS USETS + file except without the dot at the beginning. Sixbit specifiers + are good for programs which take arguments as to which user + variable to operate on, and are useful to allow a program + which uses a new variable to assemble before that variable is + actually put in the system (it will get error code 11 when it + tries to refer to the variable.) + + A numeric specifier is a small integer similar to those used + with the .USET and .USET uuos. Predefined symbols exist for + these, consisting of ".R" followed by the name of the variable. + (Use ".R" rather than ".S" even if you are writing.) Do not + use the symbols without the "R" (these are something else.) + The .IOC, .IOS, .IOP, and .PMAP arrays of user variables + can only be specified numerically. + + See the .SUSET and .USET UUO's (in .INFO.;ITS UUOS) + for more information on particular user variables. + +Errors: + + 11 ILLEGAL FILE NAME + Unrecognized sixbit user variable specifier, or numeric specifier + larger than the legal range. + 12 MODE NOT AVAILABLE + The specified variable is not available for the current combination + of reading versus writing and self versus other job. + 13 FILE ALREADY EXISTS + Attempt to cause two jobs in the system to have the same UNAME/JNAME pair. + 31 CAN'T MODIFY JOB + Attempt to write into a user variable of a job which is not writable. + 33 MEANINGLESS ARGS + Attempt to specify an illegal instruction in immediate- + instruction or block mode; or attempt to store an illegal value + into a user variable (e.g. zero into the .UNAME). + 34 WRONG TYPE DEVICE + Attempt to access user variables of the pdp-6 other than .UIND + or .MEMT. + 40 NOT TOP LEVEL + Attempt to set a user variable for a job that is not top level, + when only top-level jobs are allowed to set that variable, for + example the .UNAME and .JNAME. + +VIDBUF: request/release video buffer + + arg 1 If non-negative, the number of a video buffer + to release. If negative, requests a video buffer. + val 1 If arg 1 was negative, the number of the buffer obtained. + + A video buffer for the PDP-11 TV consoles is assigned or + released. If assigned, the video switch input number + of that buffer is returned. This value can be placed + in bits 4.1-3.3 of the .TVCREG user variable in order to + cause video buffer pages in one's page map to refer to + the allocated video buffer. + + A video buffer is a segment of PDP-11 memory large enough + to represent all the bits on a TV display. A display + is 1100=576. bits wide by 706=454. lines high. Every + line is represented by 36. 16.-bit PDP-11 words; + this corresponds to 18. PDP-10 words as mapped through + the PDP-10 to PDP-11 interface (see the T11MP symbolic + system call). The word with the lowest address holds + the leftmost displayed bits; furthermore within each word + bit 15 is the leftmost displayed bit. Thus, as seen by the + PDP-10 bits are displayed in the "obvious" manner. + The entire buffer is 16344.=37730 PDP-11 words long; + this corresponds to 8172.=17754 PDP-10 words. + The word 77777 PDP-11 words (17777 PDP-10 words) from the + origin of the video buffer is a special control register: + 3.2-2.9 15-13 Unused. + 2.8 12 0 => white on black, 1 => black on white. + 2.7-1.5 11-00 Scroll offset: video buffer wraps around; + the first word displayed is that 4* + PDP-11 bytes from the buffer origin. For + best results this should be a multiple + of 9 (for utput device. + +Errors: + + 7 DEVICE NOT READY + The PDP-11 is not ready. + +WHOLIN: examine and set TV who-line (ITS TV) + + arg 1 or + Must be a TV terminal if a . + arg 2 If present, used to set new who mode: + -1 No who-line. + 0 User who-line; migrates with TTY. + 1 User who-line; frozen on who job. + 4 System who-line. + arg 3 If present, used to set new who . + val 1 Old who mode. + val 2 Old who job. + + The TTY must be specified by a channel number and not + by 400000 + tty number if the variables are to be altered. + + See ITS TV. + +Errors: + + 1 NO SUCH DEVICE + No tty exists with the specified number. + 10 DEVICE NOT AVAILABLE + The PDP-11 which services the TV consoles is down. + 34 WRONG TYPE DEVICE + The specified tty was not a TV, or the specified + channel was not a or . + +WHYINT: Find out reason for second-word interrupt + + arg 1 channel # (or ) + + val 1 %WY code (see below) + val 2-n device-dependent + + This system call is the standard response to a second-word + (.IFPIR) interrupt. The first value returned is a code + number which indicates the type of device on the channel. + Usually a program will know what type of device is present, + because it only tries to use one type, but this value + is provided just in case. The codes are: + + 1 %WYTYI TTY input + 2 %WYTYO TTY output + 3 %WYSTI STY input + 4 %WYSTO STY output + 5 %WYNET (Arpa)NET + 6 %WYCHA CHAosnet + 7 %WYTCP TCP Internet + 10 %WYUBI KS10 Unibus interrupt (UBI device) + + The device-dependent values returned are: + + For a TTY input channel: + val 1 %WYTYI + val 2 character typed. Reading characters this way + does not interfere with later reading them via + normal IOT. This allows characters to be processed + both as interrupt characters at the time they are + typed, and as normal input. The call fails to + skip if there are no more interrupt characters. + The program should keep calling WHYINT until + it fails to skip, then DISMIS the interrupt. + + For a TTY output channel: + val 1 %WYTYO + val 2 bit mask of reasons. The only reason that presently + exists is: + 4.9 --MORE-- interrupt. (Typeout reached + the bottom of the screen.) + + For a STY input channel: + val 1 %WYSTI + + For a STY output channel: + val 1 %WYSTO + + For a UBI channel: + val 1 %WYUBI + val 2 Count of all interrupts ever signalled at the + given interrupt address. + + For a NET (Arpanet NCP) channel: + val 1 %WYNET + val 2 Sign bit 1 if "network interrupt" received. + Right Half Socket state: + 0 %NSCLS Connection closed. + 1 %NSLSN Listening for RFC. + 2 %NSRFC RFC received while listening. + 3 %NSRCL CLS received while in %NSRFC state. + 4 %NSRFS RFC sent. + 5 %NSOPN Connection open. + 6 %NSRFN RFNM wait on write link. + 7 %NSCLW CLS sent, waiting for matching CLS. + 10 %NSCLI CLS received but input still available. + 11 %NSINP Input available. + val 3 Number of bytes of input available (if input channel). + Number of bytes free in output buffer (if output channel.) + val 4 Close reason. Only valid if val 2 is %NSCLS. + 0 %NCNTO Never opened. + 1 %NCUSR Closed by user. + 2 %NCFRN Closed by foreign host. + 3 %NCRST Foreign host reset itself. + 4 %NCDED Foreign host dead. + 5 %NCINC Incomplete transmission. + 6 %NCBYT Byte size mismatch. + 7 %NCNCP Local NCP went down (local host dead). + 10 %NCRFS Request for Connection rejected by fgn host. + + For a TCP channel: + val 1 %WYTCP + val 2 state code (see below) + val 3 input: # bytes avail, output: # bytes free in buffer + val 4 Close reason (same values/meanings as for NET. See + definition of %NX== in SYSTEM;BITS > if curious.) + + The TCP state codes are defined in SYSTEM;BITS > at %NT==: + ; Legend: - Pre-Open, * Open, + Post-open, ? impossible. + ; I = can read, O = can write. + ; Note that the input and output channels for a TCP connection + ; will usually have different states. Also, note that + ; for all practical purposes, %NT and %NS symbols with the same + ; value have the same meaning. SYN = Request for connection. + ; In Out + %NTCLS==:0 ; - - Closed (reason available from WHYINT) + %NTLSN==:1 ; - - Listening for a SYN + %NTSYR==:2 ; - - SYN received + %NTCLU==:3 ; + ? Being closed by fgn host + %NTSYN==:4 ; - - SYN sent, waiting for response + %NTOPN==:5 ; *I *O Open + %NTWRT==:6 ; ? *O Output buffer full + %NTCLX==:7 ; ? + Being closed by user + %NTCLI==:10 ; +I ? Closing/closed, input still available + %NTINP==:11 ; *I ? Open, input available + + + Chaosnet: + val 1 - %WYCHA + val 2 - state + val 3 - number of packets queued (receive,,transmit) + val 4 - window size (receive,,transmit) + val 5 - input channel#,,output channel# (-1 if not open or I/O-pushed) + + LH(val 3) is the number of packets available to input IOT. + This is different from the number of received packets + if some are out of order. This is increased by 1 if + there is a partially-read buffer available to SIOT; + this packet is not available to PKTIOT. This is zero + if the connection is direct-connected to a STY. + + RH(val 3) is the number of packet slots available in the output + window, i.e. the window size minus the number of packets + which have been transmitted by output IOT but which have + not yet been received and acknowledged by the foreign + host. + + The state codes are: + + %CSCLS Closed + %CSLSN Listen + %CSRFC RFC-received + %CSRFS RFC-sent + %CSOPN Open + %CSLOS Broken by receipt of "LOS" packet. + %CSINC Broken by incomplete transmission (no acknowledge + for a long time) + +Errors: + +34 WRONG TYPE DEVICE + The specified channel supposedly never gives interrupts. + +XGPIM: xerox graphic printer image output + + arg 1 Address of a word with the number of pages of + data in the left half and the number of the first + data page in right half. + This word must be in writable memory. + + Bits are shoved out onto the XGP. + + I wonder what the precise semantics of this kludge are? diff --git a/doc/sysdoc/binfmt.101 b/doc/sysdoc/binfmt.101 new file mode 100755 index 00000000..bb4f5091 --- /dev/null +++ b/doc/sysdoc/binfmt.101 @@ -0,0 +1,272 @@ +BINARY FILE FORMATS + +This file documents the formats of absolute binary program +files on ITS, as understood by the LOAD symbolic system +call. + +There are two different file formats: "SBLK" files, and +"PDUMP" files. Each has its advantages. An SBLK file is +easier to write, when that must be done "by hand"; it is +usually smaller than a PDUMP file containing the same +information. On the other hand, a PDUMP file can record +the accessibility of the pages dumped, including the fact +that some pages may not exist, and when it is loaded such +pages will be left nonexistent; an SBLK file would lose +that information, and when loaded would fill in all gaps in +the page map, which may be very slow. On the third hand, a +PDUMP file loads a whole page or it loads nothing in the +page, while an SBLK file may specify contents for some +words in a page but leave the others unmentioned; thus, +when a file is to be merge-loaded an SBLK file may be +advantageous. + + +A. SBLK FILES + +An SBLK file contains one or more blocks, each of which +specifies the data to be loaded into one or more +consecutive words of core. + + 1. RIM10 LOADER + +The file begins with an essentially arbitrary prologue, +whose end is marked by a word containing a JRST 1 +instruction. The intention of the prologue is to contain +a RIM10-format program which will load the rest of the SBLK +file, assuming that it has been punched on paper tape and +read in using KA-10 "read-in" mode (The one normally used +happens to end with a JRST 1). However, if that mode of +operation is not desired, the JRST 1 may be the first word +of the SBLK file. In any case, the prologue's first word +should be nonzero, so that the file will not appear to be a +PDUMP file. + + 2. SIMPLE BLOCKS + +After the JRST 1 come one or more "simple blocks" (whence +comes "SBLK file"). Each simple block starts with an +AOBJN-pointer to the range of core to be loaded; +explicitly, -,,. It +is inadvisable for any block to load more than 1K, or for a +block's range to wrap around from -1 to 0. After the +range-word come as many words of data as the range-word +specifies. The simple block is completed by the checksum +word, which is computed as follows: + + (DO ((I 0 (1+ I)) (ACCUM 0)) + ((> I NUMBER-OF-DATA-WORDS) ACCUM) + (SETQ ACCUM (+ (WORD I) (ROT ACCUM 1)))) + +where the range-word is treaded as (WORD 0). All SBLK +files MUST be written with correct checksums, but it is not +essential for all readers of SBLK files to check them +(though it is better to do so). + + 3. START ADDRESS + +A simple block always starts with a negative word. +A positive word seen when the beginning of another simple +block was expected, indicates that there are no more simple +blocks in the file. The positive word itself is the "start +instruction" of the file, and should be a jump of some sort. +0 indicates that there is no starting address. + + Other Information Blocks + +After the start instruction come may come several different +blocks of additional information. Included are the symbol +table, the undefined-symbol-table, and the random-info-block. +Any or all of these may be absent in a given file. +Each of these are in the format of an Simple-block, including +the checksum at the end of each block, which must be present +and correct. + + 4. SYMBOL TABLE + +The symbol table is divided arbitrarily into sections. +Each section looks exactly like a simple block, with zero +as the address to be loaded. The first word is +-,,0; it is followed by that many +words of data, followed by a checksum. After each section +may come another section; encountering the duplicate start +instruction (see 5, below) indicates the nonexistence of +further sections. + +The symbol table itself is obtained by stripping out just +the data words of the symbol table sections. + +See DDT ORDER for information on the contents of the symbol +table. + + 5. THE UNDEFINED SYMBOL TABLE + + +Each section of DDT undefined symbol table starts with a +word containing -<# of data words>,,1 (not 0!) after which +come data words and a checksum. + +The two types of symbol table sections may be interspersed +arbitrarily in the file. + + 6. Indirect Symbol Table Pointer + +An indirect file pointer looks just like a symbol table +section except that its data consists of four filenames. +It starts with a word -4,,2 (2 indicates this is an +indirect pointer), followed by the device, fn1, fn2 and +sname (each as a word of sixbit), followed by the +checksum. A file may contain only one such indirect +pointer, and it must be the last block present before the +duplicate start instruction which ends the file. + + 7. MISCELLANEOUS INFORMATION BLOCKS + +A Miscellaneous Info Block looks like a symbol table block +except it consists of sub-blocks of various miscellaneous +info, and begins with a word -<# wds in block>,,3 (the 3 +indicates it is a Misc Info block). If there are more than +one of these blocks, the division is not significant, and on +loading into DDT they may be merged. The sub-blocks look +slightly like SBLK's but are entirely contained within one +or more SBLK's and are *NOT* followed by individual +checksums. Only the top-level SBLK's have checksums. + +A Misc Info block consists of sub-blocks of the following form: +-<# of words>,, + + +The only currently defined sub-block type is type 1, + +Assembly Info: Sub-block type 1 + -<# of words (normally 6)>,,1 + + + + + + + + There may only be one of these blocks in a file. It + is created when MIDAS produces the file. + +------ + +Debugging info: + -<# of words>,,2 + + + This is intended for taking crash dumps and the like to + save various information that a person debugging it might + find useful. It will not be found in most files; a + separate debugging dump command will be used to generate + it. + + 8. THE DUPLICATE START INSTRUCTION + +This word is a second copy of the start instruction. +It exists to terminate the symbol table, or indicate the +absence of one. + +B. PDUMP FILES. + + 1. INITIAL ZERO + +The first word of a PDUMP file is always zero. This is +to make it easy to distinguish PDUMP files from SBLK ones. + + 2. PAGE MAP + +The next 256 words of the file are the file's "page map". +The remaining words in the first page of the file are +unused. + +The way a PDUMP file is loaded into a job is that each +of the job's page slots is treated as specified by the +corresponding word in the PDUMP file's page map. +If the page map word is zero, nothing is done to that +page slot in the job. Otherwise, the page map word is +decoded to determine how to obtain the page +to put there. + + a. Page-map - English Dictionary + + Bit Meaning + + 400000,, This is an absolute page. + 200000,, The job must not share with the + file; the job's page should be + set up using %CBCPY. Note that + %CBCPY will be used in any case + if the page is writeable. + 100000,, This page should be shared with + some other page in the job's map. + Should not be present with 400000,,. + 400000 This page should be writeable. + 200000 This page should be readable. + 777 If 400000,, is set, the bottom + bits contain the number of the + page in the system. If 100000,, + is set, they contain the number of + the other page in the job's map + which is to be shared. + These bits are ignored otherwise. + +Bits not mentioned should be ignored when reading, +and written as zero. + +If neither 400000,, nor 100000,, is set, but either +200000 or 400000 is set, a data page taken from +the PDUMP file itself is put in the job's page slot. +If neither 200000,, nor 400000 is set, the job actually +shares memory with the file; thus, all jobs into +which the file is loaded will share that page. +Otherwise, the file page is copied and the copy is +put in the job's page slot. + + b. English - Page-map Dictionary + +The meaningful word-patterns appear below. + is either 200000 for read-only, or 600000 +for read-write. A star indicates a type of map-word +that requires a corresponding data page in the file. + + No page 0 + * Pure page 200000 + * Impure page 600000 + * Unshared pure page 200000,,200000 + Absolute page 400000,, + Note that only PDP6 pages may be writeable. + A sharing of another page in the job + 100000,, + This is to be used when a single data + page is to be loaded into two page slots + (shared). The lower page slot should + specify the page as either pure, impure, + or unshared impure. The remaining page + slot(s) should specify sharing with the first. + + 3. AC's + +Since the AC's are not part of any page, they would not +be saved in one of the data pages. To compensate for +this, they are saved in locations 1000 - 1017 in the +first block of the file. + + 4. DATA PAGES + +When page map words specify data pages, those data pages +follow the page-map page. There must be exactly as many +data pages as there are map entries that require one, and +the correspondence of data pages to such map entries is +made by order in the file or in the map. + + 5. START INSTRUCTION AND SYMBOL TABLE + +After the last data page come a start instruction, a symbol +table, and a duplicate start instruction, just as in an +SBLK file. + + +;;; Local Modes: ::: +;;; Mode:TEXT ::: +;;; Fill Column:60 ::: diff --git a/doc/sysdoc/ufd.100 b/doc/sysdoc/ufd.100 new file mode 100755 index 00000000..d005e643 --- /dev/null +++ b/doc/sysdoc/ufd.100 @@ -0,0 +1,148 @@ +Disk file directories are each one disk block +of data (2000 words). The file directory contains +all the data necessary to maintain the actual files on the disk. +The directory is arranged in two main portions. The name area +contains identification data for every file said +to be "in that directory", including the file's names, time of +creation, and a pointer to the descriptor area. The descriptor +area portion of a file directory describes exactly where on the disk +the files are. + +The file SYSTEM; FSDEFS > contains a page beginning +";UFD INFO", UFD meaning "user file directory". +This page contains the assignment of most of the important +symbols which define the directory format parameters. The following +description assumes the values of the parameters when this +document was written, and although most of the parameters are not +apt to change, there is this possibility. + +The first word of the file directory contains a pointer to the beginning +of the descriptor area, and the second word points to the beginning +of the name area. The third word of the directory contains the sixbit +user name of the directory. + +The name area of the directory contains 5 words +of information for every file. + +1 - FN1 (SIXBIT) +2 - FN2 (SIXBIT) +3 - STATUS BITS & RANDOM INFO +4 - CREATION DATE +5 - DATE LAST REFERENCED + +The fourth word contains the compacted date and time of +creation for the file. The right half of this word is the +time of day since midnight in half-seconds. Bits 3.1-3.5 +are the day, bits 3.6-3.9 are the month, and bits 4.1-4.7 +are the year. The fifth word's left half holds the date the +file was last referenced. This is in the same format as the +creation date. + + 4.9-4.8 - UNUSED + 4.7-4.1 - YEAR (RELATIVE TO 1900) + 3.9-3.6 - MONTH (1=JAN) + 3.5-3.1 - DAY (1-31) + 2.9-1.1 - (RH) # HALF-SECS SINCE LAST MIDNIGHT (4th wd only) + +The third word in the name area for every file contains all +the information about the file's status, with bits +indicating things such as whether the file has been deleted, +whether it is open for writing, etc. + + 4.9 - FILE DUMPED TO TAPE + 4.8 - UNUSED + 4.7-3.7 - # WORDS IN LAST BLOCK OF FILE + 3.6 - FILE DELETED FROM UNMOUNTED PACK + 3.5 - FILE WILL DISAPPEAR WHEN CLOSED BY ALL WHO HAVE IT OPEN + 3.4 - UNUSED + 3.3 - OPEN FOR WRITING + 3.2 - UNUSED + 3.1 - THIS FILE IS LINK + 2.9-2.5 - PACK # FILE STORED ON + 2.4-1.1 - BYTE ADDR PTR TO START OF FILE'S DESCRIPTOR BYTES + +2.4-1.1 is actually a byte address relative to a point 11. +words from the beginning of the directory. The byte size is +6 characters, so the word address is the pointer divided by +6, and the byte within that word can easily be determined by +the remainder of the division. Once the correct byte +pointer is determined, successive ILDBs will get the +descriptor bytes of the file. Assuming the contents of A +points to the third word of the name block for a file, here +is a piece of code which will generate the correct byte +pointer in N, all set for ILDBing, with N indexing B, which +holds the correct word address: +;B=2 +;C=3 +;UFDBYT==6 ;SIZE OF BYTES +;UFDBPW==36./UFDBYT ;NUMBER OF BYTES PER WORD +;FDIRBF IS FIRST LOCATION IN DIRECTORY, UDDESC IS 11.. + + LDB B,[1500,,A] ;GET BYTE ADDRESS + IDIVI B,UFDBPW ;CHANGE TO WORD ADDRESS + ADDI B,FDIRBF+UDDESC + MOVNI N,-UFDBPW(C) + IMULI N,UFDBYT ;Only works because UFDBYT divides 36. + HRLI N,060200 ;ASSUMING B=2 !!!! + ROT N,30. +;END OF ROUTINE + +If the file is a link, the descriptor bytes themselves specify +what directory and file names this file is linked to. These +three args are the only pieces of information in the descriptor +area for links. Each name is terminated by a semicolon unless +it is a full six characters long. Colon quotes the character +that follows it. + +For normal disk files, every descriptor byte tells where the +next block, or group of blocks, of the file resides on the +disk. A byte with a value of 0 ends the description. A byte +with the value 31. (UDWPH) is an ignored place-holder. If +the byte is from 1 through 12. (UDTKMX), that many blocks +of the file reside contiguously. If the byte is from 13. +through 30., skip that many blocks minus 12., and the next +block, after the ones skipped, is in the file. If the 40 +bit of the byte is set, the low 4 bits of that byte together +with the next 2 bytes tell where the next block of the file +is to be found. When the 40 bit is set, the 20 bit is a +flag which, if on, says that blocks that follow each contain +a word count in their last word. + +Occasionally when a program tries to open a file for +writing, there is no more room in the file directory for the +file's specifications, not because there is really no room, +but because non-existant (deleted) files still have +descriptors etc. taking up unnecessary room. When this +happens, the system rearranges the directory, a +"housekeeping" chore known as garbage collecting. Garbage +collecting a file directory takes about 1-2 minutes of +realtime waiting, usually. If the system is provoked to +garbage collect FOO's file directory, it announces the +occasion on the system job console with the message "GC OF +USER DIR FOO". During the ordeal, the job provoking the +collection may not be control-Zed amongst other things. If +you try to control-Z it, however, the only noticeable +difference to you will be a long wait before DDT knows to +recognize your request for interruption. If ^Z seems not to +be "doing much", try checking the system job console to see +if you are being garbage collected. + +File directories are read by timesharing programs the way +any disk files are read. Merely use the file name .FILE. +(DIR) for the .OPEN, and the system will supply you with the +directory instead of a file. If the mode is ASCII, the data +you receive after .OPENing .FILE. (DIR) is the ASCII string +you normally see, upon doing :LISTF DSK: or DSK in DDT or +EYDSK: in TECO. If the mode for the .OPEN is image, the +data you receive is the actual file directory as advertised, +and as stored on the disk. As already mentioned, it is +exactly 2000 octal words long, and is organized exactly as +described above. Any program opening disk file directories +for the purpose of seeing what files are on the directory +will be far more efficient opening the directory in image as +opposed to ASCII mode. Such programs, when written in MIDAS +assembly language, should .INSRT SYSTEM; FSDEFS > and use +the symbolic definitions therein, for greater clarity and +immunity to system changes. + + \ No newline at end of file diff --git a/doc/sysdoc/uuos.112 b/doc/sysdoc/uuos.112 new file mode 100755 index 00000000..a863ee46 --- /dev/null +++ b/doc/sysdoc/uuos.112 @@ -0,0 +1,2290 @@ +ITS UUOS: + +This file attempts to maintain up-to-date documentation on +all non-symbolic ("old") system calls. 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 .FOO uuo ^C + +If you want to be put on the INFO-ITS mailing list, +just say so in a message to it. +------------------------------------------------- + +On the PDP-10, opcodes 0 through 77 are deliberately "not +defined", and are called uuos ("unimplemented user operations"). +Also, certain other opcodes are either illegal in user mode +or undefined (for example, I/O instructions, JRST 4,). + +When an undefined instruction is executed, it "traps to 40": +it is stored in location 40 +with the index and indirect fields zeroed and the address field +replaced by the effective address, and then the instruction +in 41 is executed (it is usually a subroutine call). +(Some instructions actually trap to 60 on KA's, but ITS contrives +to make them appear to have trapped to 40 just like all +the others). + +uuos 1 through 37 are reserved for user programs. They +go through the entire trap sequence remaining in user mode, +so it is the user's locations 40 and 41 that are used. +The operating system is not involved at all. +These uuos are called "user uuos". + +The other undefined opcodes enter exec mode during the trap, +so that the system's 40 and 41 are used; the PC saved by the +subroutine call will say "user mode" if the uuo was executed +in user mode, however. These instructions are the normal way +of calling any PDP-10 operating system. + +ITS interprets uuos 40 through 47 as monitor calls; those +uuos are called "system uuos". The bulk of this file is devoted +to describing how to use them. In addition, ITS will simulate +some I/O instructions for the user (for example, any CONI, and +DATAI 0,). All other instructions that trap to the system +will be signaled to the user (they are "returnable uuos"). +For simple programs, they will cause an ILOPR interrupt +(%PIILO, bit 1.6 of .PIRQC). For programs that appear able to +handle them, they are "returned" to the user, pretending to +be user uuos - that is, the system makes it appear that they had +trapped to the user's 40. However, they do not act precisely +like user uuos: + 1) The system can't simulate any trap instruction but +unindexed, direct JSR. If the user's trap instruction is +not a JSR, or is indexed or indirect, the system assumes that +the user can't handle the returnable uuos, and causes an ILOPR +interrupt instead. Also, if the AC field of the JSR is nonzero, +the system will interrupt instead of returning the uuo; this +is a way for a program to say explicitly that it doesn't want +to have uuos returned, but still handle user uuos. + 2) If the opcode in 41 is 0, the system treats it as if it +were a JSR. + 3) 0 is not considered a reasonable place to JSR to. If the +address field of 41 is 0, the system will interrupt instead of +returning the uuo. + 4) While the addresses 40 and 41 are fixed by hardware for +user uuos, for system returned uuos they are not. They must +always be consecutive, but the address of the first one is +kept in the RH of the .USET variable .40ADDR (whose initial value is, +of course, 40). Thus, the user may have one handler for user uuos +and another for returned uuos. +Note that the system uses "42" for interrupts and "43" and "44" +for the "locks" feature; those locations are also shifted +by setting .40ADDR. + 5) Returnable UUOs have complicated interactions with DDT. +When proceeding from a breakpoint, DDT must simulate certain +instructions, including all those that can transfer control. +User uuos can be simulated properly, but not returnable ones +since DDT does not know how to decide whether they are to cause +ILOPRs. So DDT treats those uuos like the typical instructions; +it puts the uuo in 31, a jump to 1 + the actual address of the +uuo in 32, and a jump to 2 + that address in 33. It then starts +the job at 31. If the returnable uuo handler does nothing with +the PC except possibly return to it, and does not try to examine +the uuo except by looking at 40, this causes no problem. However, +if the uuo is followed by arguments, or if it can skip more than +once, or if it tries to remember the PC somewhere, the handler +must understand that if the PC is 31 (+1) special treatment is required. +In addition, the real location of the uuo will contain not the +uuo but a .BREAK, which will be there to implement the breakpoint. + +If the .UTRAP variable of a job is nonzero, ALL instructions +that trap to the system will cause ILOPR interrupts - even those +that are usually treated as system calls. In addition, the +job will not handle any of its own interrupts - they all interrupt +its superior. Thus, the superior can make the job believe it is +running under a non-ITS environment. User uuos are not affected. +The .UTRAP variable is the same as the %OPTRP bit in the LH of .OPTION. + +If the %OPDEC bit in the LH of .OPTION is set, uuos 40, 41 and 47 +(as well as those I/O instructions which ITS usually simulates) +become returnable uuos instead of system calls. By a lucky +coincidence, those uuos, which are the only ones used by both +ITS and TOPS-10, are not really necessary in ITS (they are +.OPEN, .IOT and .ACCESS, and all have alternative forms using .CALL). +In this mode, all uuos used as system calls by TOPS-10 are +returnable. One of the TOPS-10 simulators works by setting +this bit, and making .40ADDR point into the simulator where +it lives at the top of core (to avoid conflicting with the user +uuo handlers of the simulated programs). + +CALLS: Overview of ITS System Calls + +ITS system calls come in two kinds: the older, numerically +decoded, non-standardized kind, and the newer "symbolic +system calls" with a standard calling sequence. + +Each of the numerically decoded system calls is distinguished +from all of the others by the values of specific fields +in the instruction (the opcode, and maybe the AC and address +fields). Each specific system call is known as "a uuo", and +its name is a predefined symbol in the assembler, whose value +is the appropriate instruction. For example, one uuo is +.ACCESS; it is distinguished by the opcode field alone, which means +that the AC field and address are available as arguments. +The symbol .ACCESS is defined as the appropriate opcode. +.RCHST, however, is distinguished by its opcode and its address, +so that only the AC field can be used as an argument. The uuos +distinguished by opcode and address all have the same opcode, +which is called .OPER; thus, all such uuos are called ".OPER's". +.FDELE is distinguished by opcode and ac field, leaving the address +as an argument; such uuos are called ".CALL's" since they all have +.CALL as their opcode. Each uuo is described individually in this file. + +The symbolic system calls all use the uuo .CALL. They are +distinguished by the contents of the block addressed by the .CALL, +which also points to the arguments. Ths symbolic system calls +are described in more detail in the file .INFO.;ITS .CALLS. + +.ACCESS chnum,[access pointer] set file access pointer + + Sets the access pointer for the I/O channel + for the next input/output operation. This is used to + effect random access. On the DSK device (and DSK-like + JOB devices) the access pointer is the number of "bytes" + from the beginning of the file. Bytes are normally the + same as words, but in unit ascii mode there are five + seven-bit bytes per word. In the future there may be + the ability to have bytes of any size from 1 to 36 bits. + On the USR device the access pointer is the address + within the job's memory. + Random access on the USR device can also be effected + via page mapping (see the .CBLK uuo and the CORBLK + symbolic system call). If the channel number + is variable, the symbolic system call ACCESS may + be used in place of the .ACCESS uuo. + The symbolic call RFPNTR may be used to read the current + access pointer for a file. + +.ARMOFF + +This uuo was for hacking the AMF arm. The arm no longer exists. + +.ARMOVE + +This uuo was for hacking the AMF arm. The arm no longer exists. + +.ARMRS + +This uuo was for hacking the AMF arm. The arm no longer exists. + +.ASSIGN ac, assign a microtape + ;skip if successful + + The accumulator should contain the number of a + microtape drive. If it succeeds, it assigns the drive + to the user who executed the .ASSIGN. When a job + attempts to use a microtape drive, + it will succeed only if it has the same + sname as the uname of the job which did the .ASSIGN. + A .ASSIGN will fail only if the drive is already + assigned to a different user (i.e. a different uname), + or if an invalid drive number is given. + See also the .DESIGN and .RCHST uuo's. + +.ATTY chnum, assign tty to inferior + ;skip if successful + + Puts the job in the state of wishing to pass control of + the tty to the direct inferior open on the specified + channel. It skips if successful; it fails if the + channel does not have a direct inferior open, if the + executing job had never had the tty, or if it had not + been in the state of wishing to retain the tty. If the + job had the tty, after the .ATTY the tty will belong + to the specified inferior, or one of its inferiors. + A job need not have the tty to do an .ATTY. + See the .DTTY uuo, and the .TTY user variable. + Also see ITS TTY. + +.BREAK ac,address breakpoint instruction, etc. + + The and
fields of this uuo are totally + ignored by ITS. The procedure executing it receives + a class 1 interrupt (bit 2.2 of the .PICLR user + variable, called %PIBRK), stopping it and interrupting + its superior. + + The standard superior procedure, DDT, assigns + the following semantics to .BREAK, dependent on + the field (for full information see DDT ORDER): + + meaning + 1-10 Breakpoint number in the program, for + between 1 and 10. + 12 Request for information transfer. + 15 Temporary breakpoint number 1. + 16 Request for program suspension or termination. + 17 Temporary breakpoint number 2. + + The "normal termination" instruction is .BREAK 16,160000 + (but also see .LOGOUT). + + When DDT sets a breakpoint in a program on a given + instruction, it replaces the opcode with .BREAK + and the ac field with the breakpoint number. Thus + the instruction will still calculate its usual effective + address before breaking. The two temporary breakpoints + are used for ^N (multiple instruction proceed), etc. + + .BREAK 12, is used to transfer information between + DDT and the executing program at the latter's request. + .BREAK 12, is like .SUSET in that it points + either to a specification word or to an AOBJN + pointer of such words. Bit 4.9=0 means read, =1 means + write (from the program's point of view). Writing can + be illegal if the ..PERMIT variable in DDT for + the job is set appropriately. Bits 4.7-3.1 + determine the type of information transferred: + ..RSTA 1 Starting address of program. + ..RLFI 2 Loaded file name. + Four words: device, sname, file name 1, file name 2. + ..RSTP 3 (read only) AOBJN pointer to program's symbol table + in DDT. The left half is the negative of + the symbol table size. See type 7 (..RSTB). + ..RSYM 4 Symbol definition. Uses two words. + Read: first word contains squoze for symbol. + Second word receives value. + If undefined, first word is zeroed. + Write: first word contains squoze, second value. + ..RJCL 5 Read: fetches command string for program. + Set by : command or via :JCL. + Always transfers at least one word of + packed ascii, then more until either a + zero word is transferred or until a + non-zero is about to be transferred into. + String is terminated by ^M if non-null. + Write: clear command string. + ..RPFI 6 File name defaults used for :PRINT. + Four words: device, sname, file name 1, file name 2. + ..RSTB 7 Symbol table. Allows transfers of many + symbols in either direction. + ..RCON 10 (read only) Number to symbol conversion. + Uses two words. The first should initially + contain a value. It receives squoze for + a symbol, and the next word receives a delta. + The value of the symbol plus the delta equals + the original argument. The lookup used by DDT + for symbolic typeout is employed here. + If the lookup fails, the first word receives + zero and the second receives what the first held. + ..RXUN 11 (read only) The XUNAME (a uname to be used for + getting mail, etc.). This is like the UNAME, but + has trailing digits stripped off, etc. This is + OBSOLETE; use the .XUNAME user variable. + ..RXJN 12 (read only) The XJNAME (what this job should think + of as its "real" name). This is like the JNAME, + but has trailing digits stripped off, etc. This is + OBSOLETE; use the .XJNAME user variable. + ..RLJB 13 (read only) Read index of previously current job. + ..RRND 14 Reads or writes the ..URANDM variable in DDT for + this job. + ..RPUR 15 Unpurify page. + ..RHSN 16 (read only) Ask to lookup an HSNAME from an XUNAME. + ..RMAI 17 (read only) Ask to lookup user's mail file name. + (Symbols with names starting with "..S" exist for all those not + marked as read only. For example ..RSTA==1 and ..SSTA==400001.) + + Illegal .BREAK 12,'s cause DDT to give the program an + illegal operation interrupt (bit 1.6 in the .PIRQC + user variable). + + .BREAK 16, is used to return to DDT in various + nice ways. The effective address is decoded as follows: + 2.9 Return from X. (Do not use unless you understand it!) + 2.8 Type extra carriage return in DDT. + 2.7 Do not reset TTY input (effective only if + executing job has the TTY). + "Normal" returns to DDT should always have + this bit set. + 2.6 Kill executing job: + Immediately, if it has the TTY. + When it gets the TTY, if current job. + Otherwise when J'd to in DDT. + Will print ":KILL" when killed. + 2.5 Kill executing job: + Like 2.6 if job current. + Otherwise is killed silently. + 2.6&2.5 Together mean kill executing job: + Like 2.6 if job current. + Otherwise kill immediately, and print + JOB FINISHED on TTY. + 2.4 Conditional breakpoint return. + 2.8=1 => condition true. + 2.8=0 => condition false. + Used by DDT. Dangerous for users to play with. + 2.3 Don't type even a carriage return. Don't close + the currently open location. If killing self + don't type :KILL. + 2.2-1.1 Illegal. (Reserved for expansion.) + + DDT sets the %OPCMD and %OPBRK bits for + its inferiors appropriately. See the .OPTION + user variable. + +.CALL [ SETZ ? SIXBIT \name\ ? -- args -- ] symbolic system call + ;skip if successful + + The .CALL uuo is used to invoke a large class of + operations which are distinguished by a sixbit name. + See the file ITS .CALLS for more information. + + .CALL is sometimes used in a generic sense to denote + the set of uuo's with the same opcode as .CALL; they + are distinguished by their accumulator fields: + .CALL 0, .CALL + .CALL 1, .DISMISS + .CALL 2, .LOSE + .CALL 3, .TRANAD + .CALL 4, .VALUE + .CALL 5, .UTRAN + .CALL 6, .CORE + .CALL 7, .TRANDL + .CALL 10, .DSTART + .CALL 11, .FDELE + .CALL 12, .DSTRT + .CALL 13, .SUSET + .CALL 14, .LTPEN + .CALL 15, .VSCAN + .CALL 16, .POTSET + .CALL 17, unused + +.CBLK ac, hack a core block + ;skip if successful + + This uuo is ARCHAIC. Its use should be avoided + in new programs, since the CORBLK symbolic system call + is much more flexible and easy to understand. + + The contents of accumulator specify an operation + on the executing job's core. It modifies the job's + page map entry for one page. The contents of + should be as follows: + 4.9 Must be zero. + 4.3-4.1 Desired operation: + 0 Get page from self. + 1 Get absolute page. + 2 Get a page from the user open on + the channel specified by bits 3.8-3.1. + 3 Get a page from the user whose user + index is in bits 3.8-3.1. + 4 Get fresh page. + 5 Get public page. + 6 Make my page public. + 7 Make my page private. + 3.9 If 1, request write permission for the page. + Assumed 1 for operation 4 (fresh page). + Otherwise valid only for self, public page, + or direct inferior open on channel. + 3.8-3.1 User index or USR device channel. + If the executing job is a job device, then + 377 will refer to the job which invoked it. + 2.9 1 = insert page in core map. + 0 = delete page. If the operation is 6 or 7, + this bit is ignored. Otherwise, the operation + is ignored for deletion. + 2.8-2.1 Virtual page to be affected within the core map + of the executing job. + 1.9-1.1 Block number within source specified by + bits 4.3-4.1. + + Sample contents of for various operations: + Delete my page 43: 0,,43000 + Create a fresh page 217: 4400,,517000 + Make my page 45 be read-only: 0,,445045 + Make my read-only page 45 writable: 400,,445045 + Make page 16 of job 34 read-only + as my page 377: 3034,,777016 + + This uuo is all right for hacking single pages within + your own core map. To alter another job's core map, + or to hack many pages at once, use the CORBLK + symbolic system call. + For more information on core blocks, see ITS CORBLK. + +.CLOSE chnum, close a file + + The input/output channel is closed. All + operations associated with that channel are completed. + For file structured devices, if another file with + the same name exists (if was being used for + output), that file is deleted at this time and the new + file replaces it. + Any further attempts to use the channel without re-opening + it will cause errors. + .CLOSE does nothing if the channel is not open. + If the USR device is open on the specified channel, + the job is not killed by .CLOSE; it is merely made + to be no longer open on the channel. To kill a USR + device job, the .UCLOSE uuo must be used. + If the channel number is a variable, the CLOSE + symbolic system call may be used. + +.CORE set core limit + ;skip if successful + + This uuo is a relic of the old pre-paging version of ITS. + For applications which want to be relatively clever + about paging and core allocation, see the .CBLK uuo + and the CORBLK symbolic system call. + The effective address of .CORE should be a number between + 0 and 400 octal. The core of the procedure executing it + is modified as follows: + + (DEFUN *CORE (N) + (DO ((K (// (*SUSET *RMEMT) 2000) + (// (*SUSET *RMEMT) 2000))) + ((= K N)) + (COND ((< K N) (CREATE-PAGE K)) + (T (DELETE-PAGE (- K 1)))))) + + That is, at each step a page is either added or deleted + at the top of the job's memory until page is the + highest one in the job's memory. Only a .CORE to + acquire more core can fail. If a .CORE fails to skip, + some of the requested core may have been obtained, + though not all. + +.DCLOSE display close + + This system call releases the 340 display or the + E&S display, if possessed by the executing job, and + closes all channels on which the display is open. + If the display is being hacked via .DSTART, this + won't be any channels. In the case of the 340, the + display is made available to the pdp-6. + If the executing job does not possess the + display, .DCLOSE does nothing but return. + +.DCONTIN display continue + + This system call will restart the E&S display after stopping + or single stepping (.DSTOP, .DSTEP). If the display is + stopped because of a Display MPV, a Hit Stop, WCR stop or + PROG Stop, the condition will NOT be cleared and the display + NOT restarted. If the display is not stopped or does not + belong to the executing job, no action is taken. + + This system call is ignored by the 340 display. + +.DEMON acknowledge one demon request +.DEMON ac, acknowledge demon requests + ;skip if successful and more requests pending + + As of September 1, 1976, only the DM machine has this. + + If the executing job is not a demon, the uuo merely returns + without skipping. If it is a demon, then either 1 or + the contents of the specified non-zero are subtracted + from the demon's request count, and the uuo skips iff the + resulting count is still positive. + See the DEMSIG, RDDMST, and STDMST symbolic system calls. + +.DESIGN ac, de-assign a microtape + ;skip if successful + + The accumulator should contain the number of a + microtape drive. It reverses the effect of a .ASSIGN + uuo by making the drive unassigned again. A .DESIGN + will fail only if an invalid drive number is given, + or if the drive is assigned to some other user than + the one owning the job trying to do the .DESIGN. + It will succeed if the drive is already unassigned. + +.DIAL ac, ANCIENT HISTORY dial a dataphone line + ;skip if successful + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .NETAC. + + The accumulator should contain a byte pointer + of the following form: + 440600,,[data](n) + where is not an index field, but the number of + a dialer (0 or 1), and is a series of dialing + bytes. The byte string may not be longer than 5 words. + Each byte specifies a dialing step as follows: + 0 End of data. + 1-10. Send 1-10. dialing pulses. Pauses are supplied + between digits automatically. + > 10. Pause <-10.> seconds in dialing. + If the accumulator is zero except for the dialer number, + then the "break" signal is sent after any previous + dialing has been completed. + A .DIAL will fail if the dialer number is invalid, + if the TTY associated with the dialer (0=T07, 1=T06) + is in use by another job, or if the dialer is being used + by some other job (the other job has not done .HANGUP yet). + See the .DIALW and .HANGUP uuos. + +.DIALW dialnum, ANCIENT HISTORY wait for dialing to finish + ;skip if successful + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .NETS. + + If dialer number is assigned to the job + executing the .DIALW (i.e. the job has done a .DIAL + but not a .HANGUP), then .DIALW skips after waiting + for dialing to be completed. Otherwise it fails. + See the .DIAL and .HANGUP uuos. + +.DIETIME ac, OBSOLETE time until system dies + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the SSTATU + symbolic system call. + + The accumulator is set to the maximum time + (in thirtieths of a second) before ITS will go + down. If the system is not planning to go down + (the normal case, we hope!) is set to -1. + See also the .REVIVE and .SHUTDN uuos. + +.DISMISS [new PC] dismiss an interrupt + + Dismiss an interrupt. The user variable .PICLR + is set to -1, thereby enabling interrupts, and the PC + receives the quantity . + + This is for the so-called "old-style" interrupt scheme. + See also the DISMIS symbolic system call, which + is ordinarily used with the "new-style" vectored + interrupt scheme, but may be used in either case. + + Typically .DISMISS is used in this manner: + + LOC 42 + JSR TSINT ;pointer to interrupt handler + LOC 100 ;or wherever + TSINT: 0 ;interrupt flags + 0 ;PC as of interrupt + EXCH A,TSINT + TSINT1: TLZE A, ;check for various interrupts + JRST ;handlers return to TSINT1 + TLZE A, + JRST + . . . . + MOVE A,TSINT ;restore accumulator + .DISMISS TSINT+1 ;dismiss interrupt + + See ITS INTRUP for more information on interrupts. + +.DISOWN chnum, disown an inferior + + An inferior job should be open on channel . + The job is caused to be no longer an inferior of + the executing job, and is made to be the top level + job of a disowned job tree. The usual reason for + disowning a job is so that it can continue to exist + after its former superior has been killed (for instance, + after the user who disowned it has logged out). + Another reason for disowning a subtree is to reown it + under a different superior, thus altering the shape + of the system's job-tree structure. + All channels on which the executing job has open the + job being disowned will be closed in the process of + disowning (see the .CLOSE uuo). Disowning is illegal if + does not have an inferior open, or if the + subtree being disowned controls the console (see the + .ATTY uuo). If the jobs of the subtree have opened + the console, then the channels are not closed, but + are marked as "disowned tty"; certain operations + on such a channel will succeed, and others will hang + until the tree is re-owned and a console tty given + to the job. Such channels appear to be open on + tty number %TINON=77 octal. + A disowned job is distinguished by the fact that + bit 4.9 of its .APRC user variable is set. + A disowned job never succeeds in executing the RELOAD symbolic + system call, even if it is the top level job in its tree. + When a job tree is logged out, any micro-tapes assigned + to the uname of that job tree are de-assigned (see the + .ASSIGN and .DESIGN uuo's), but only if the job tree is + not disowned. + All disowned jobs share a resource word for purposes of + scheduling, in the same way that all jobs in a single + non-disowned tree share a resource word. Thus all disowned + jobs tend collectively to use no more runtime than any + single non-disowned job tree. + Furthermore, individual disowned jobs are given only 1/4 + the priority to run as a non-disowned job. This does + not apply, however, if the disowned job in question has + .MASTER mode, or controls the 340 display, the E&S display, + the vidisector, the arm, the LPT (line printer), or the + PLT (plotter). + When operating under heavy loads, the swapper prefers to + swap out disowned jobs rather than non-disowned jobs. + + The DETACH symbolic system call makes a non-disowned tree + disowned. + + When a non-disowned top-level job encounters + a fatal interrupt, the system will make it disowned and + print a suitable message on the system console and on + the job's console (if it has one). The disowned tree + can then be reowned with DDT and debugged. + +.DMPCH ac, OBSOLETE mung dump check bit + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the RDMPBT + and SDMPBT symbolic system calls. + + The accumulator should contain a channel number + in the right half, which should have a disk channel + open on it. The left half describes any alterations + to be made to the dump check bit for the open file: + 4.9 Set dump check bit. + 4.8 Clear dump check bit. + The state of the dump check bit (possibly after setting) + is returned in accumulator in bit 1.1. + The dump check bit is used by the magtape file backup + system to keep track of which files have been backed + up on magtape. This bit therefore should not be + twiddled light-heartedly. The "!" you sometimes see + in front of a date in a disk file directory is present + iff the dump check bit for the file is zero. + +.DSTART [start-addr] start the display + ; skip if successful + + This system call is used to start the E&S or 340 display processor, + whichever one the system has. If it has neither, the uuo is + an illegal operation and gives a %PIILO interrupt. + .DSTART assigns the display to the executing job if it is available, + and skips if successful. If the display is not available + .DSTART does not skip. + + In the case of the 340 display, the effective address of the + .DSTART is the address of the user's display list. This can + be either a single BLKO pointer (if the word is negative), or + the first word in a linked list (if the word is positive). + The right half of each word in the linked list is zero + to end the list, or the address of the next word in the list. + The left half of each word in the linked list is the address + (which must be less than 400000!) of a BLKO pointer. If this + address is zero, or the BLKO pointer is zero, it is ignored + (this allows "jump-type" entries in the list.) + The display will continually execute the commands pointed + to by this list. It is OK to change the list, or the single + BLKO pointer, while the display is running, provided everything + always points to valid data. + The .DSTRTL uuo is the same as .DSTART except that it uses + regular AOBJN pointers instead of BLKO pointers. + + In the case of the E&S display, the argument to .DSTART contains + in the right half, the address at which the display program will + start, and in the left half, a code to determine modes of + operation: There are four 3-bit fields in this code: + + 3.1-3.3 Start mode. Only the 3.1 bit is significant. If set, + the display is started in single step mode. + 3.4-3.6 Action to take on Program stop. + 3.7-3.9 Action to take on Hit stop. + 4.1-4.3 Action to take on Memory stop. + + Each of the three Action fields is decoded as follows: + + 0 Restart from address of the last .DSTART. + 1 Continue after the stop condition has been reset. + 2 Stop. + 3 (Reserved). + 4 Interrupt and restart. + 5 Interrupt and continue. + 6 Interrupt and stop. + +.DSTEP step the E&S display + + The .DSTEP call will step the display processor one instruction + cycle if it has been stopped (.DSTOP) or started (.DSTART) in + step mode. If the display is not stopped, .DSTEP will first + simulate a .DSTOP. If the display is not the executing job's, + no action is taken. + + The .DSTEP call is ignored by the 340 display. + +.DSTOP stop the display + + The .DSTOP call will stop the E&S or 340 display processor, + if the display belongs to the executing job. + +.DSTRTL start the display + + In the case of the 340 display, this is the same as + .DSTART (q.v.) except that the display will use AOBJN + pointers instead of BLKO pointers. + + In the case of the E&S display, this + crashes the system. Maybe someday this will be fixed. + +.DTTY devour the tty + + .DTTY is used when a job decides that it wishes to + retain the tty. It skips if it succeeds; it fails if + the job was already in the state of wishing to retain + the tty, or if it had never had the tty. If the tty had + actually belonged to some (possibly indirect) inferior, it + will belong after the .DTTY to the job that executed it. + A job need not have the tty to do a .DTTY. + See ITS TTY for a full explanation of .DTTY. + See also the .ATTY uuo, and the .TTY user variable. + +.DWORD [word] send word to E&S display + + The specified word is sent to the E&S display via + the DATAO instruction. The display is stopped first + via .DSTOP if necessary. + + This system call is ignored if there is no E&S display + or the executing job does not own it. + +.EOFC ac, OBSOLETE end of file character + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been obsoleted and not replaced. + + Accumulator receives the eof character used to + pad the end of the file open on the channel specified + by the contents of before the uuo is executed. + Apparently early microtape files used 141 as the pad + character. + +.EVAL ac, evaluate squoze symbol + ;skip if successful + + Before the uuo is executed, accumulator should + contain the squoze code for a symbol. This symbol + is looked up in the symbol table used by exec DDT + (the one used to debug ITS); this table contains + symbols defined within ITS. The uuo fails to + skip if the symbol is not found; otherwise the value + is placed in and the uuo skips. + + This uuo offers a useful method of obtaining + information from ITS, when combined with the .GETLOC + uuo or with absolute memory pages; for example, + to find out how many irrecoverable disk errors there + have been, PEEK .EVAL's the symbol QIRRCV and examines + that location in the system. Naturally, this is more + risky than using a system call, since the system's + symbols may be changed. One protection against that + is to make an entry in the file AI:SYSTEM;EVSYMS > + mentioning which symbol is being .EVAL'ed by which + program. Then, there will probably be warning from + ITS hackers of any change. + +.FDELE fblock OBSOLETE delete or rename file + ;skip if successful + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the DELETE, + RENAME, and RENMWO symbolic system calls. + + This uuo may be used to delete and rename files. + It points to a five-word block describing the + operation to be performed. There are three cases. + + [1] Delete a file. + + fblock: SIXBIT \ dev\ ;right-justified device name + SIXBIT \fname1\ ;file name 1 + SIXBIT \fname2\ ;file name 2 + 0 ;zero + --- ;not examined + + [2] Rename a file open for writing on channel . + + fblock: --- ;not examined + 0 ;zero + ;channel number + SIXBIT \fname1\ ;new file name 1 + SIXBIT \fname2\ ;new file name 2 + + [3] Rename an arbitrary file. + + fblock: SIXBIT \ dev\ ;right-justified device name + SIXBIT \fname1\ ;old file name 1 + SIXBIT \fname2\ ;old file name 2 + SIXBIT \fname1\ ;new file name 1 + SIXBIT \fname2\ ;new file name 2 + + In cases [1] and [3], if the device specified has + true directory structure, the .SNAME user variable + for the executing job is used as the directory name. + Also, the file names (for case [1]) or the old file + names (for case [3]) are subject to input translation + (see the TRANAD symbolic system call). + If the device is not file structured, .FDELE + succeeds and skips. If .FDELE fails, it returns + an error code on channel 0 which can be retrieved via + the .STATUS uuo or the ERR device. + +.FEED chnum, feed paper tape + ;skip if successful + + If device PTP (the paper tape punch) is open on + channel , the uuo punches one line of blank + tape and skips. Otherwise it fails and does not skip. + +.GENNUM ac, generate number + + Accumulator receives a unique generated number + which will not be generated again for a very long + time (unless the system crashes, in which case the + counter is reset, of course). + [ In ITS 1554 and later. ] + +.GENSYM ac, generate symbol + + Accumulator receives the sixbit name of a + unique generated symbol which will not be generated + again for a very long time (unless the system + crashes, in which case the counter is reset, of + course). + +.GETLOC ac, get absolute location + + The accumulator should contain + an absolute address in the left half and an address + within the executing job in the right half. + The contents of the absolute location specified is + deposited in the location specified within the job. + This is useful for examining locations within the + system. However, if many locations are to be + examined, or if a location is to be examined many + times, it is far more efficient to map the absolute + page(s) containing the location(s) of interest into + the job's core map as read-only memory; the job + can then examine the locations at top speed without + having to go through the system uuo handler. + Such page mappings can be established via the .CBLK + uuo or the CORBLK symbolic system call. + +.GETSYS ac, get system data + ;skip if successful + + Accumulator should contain an AOBJN pointer to a data area in + the user's core. (A zero left half means the data area extends to + the end of core.) Accumulator should contain the sixbit + name of a system data area. The specified system data area is + transferred into the user's core in such a way that the data is + consistent (i.e. interrupts are inhibited in appropriate ways, + etc.). If the .GETSYS is successful, is updated to point to + the unused part of the user's data area. + + If the named data area does not exits, is cleared. If the + area in the user's core is too small, the left half of is + replaced with the negative of the correct size. In both of these + cases .GETSYS fails to skip. + + Valid data areas are: + MEMORY Memory tables. + UTAPE Micro-tape variables. + NCPSM Network control program socket map. + NCPPQ Network control program pending RFC queue. + NCPHT Network control program host table. + USERS User variables for all jobs. + USER User variables for job whose user index is in . + Formerly a uname-jname pair was accepted in + and , but this is no longer true (ANCIENT HISTORY). + GETS Valid sixbit .GETSYS area names. + DEVS Valid sixbit built-in device names. (Doesn't include those on + DEVICE directory.) + CALLS Official system symbol table. Squoze symbols and values for + UUO's, .USET variables, and bits DEFSYM'ed in SYSTEM;BITS. + IMPX Input multiplexor data area. + CLINK Core link device variables. + DSYMS Exec DDT symbol table. Squoze symbols and values. + USYMS Squoze symbols and values for .USET variables only. + (Does -not- contain .RMEMT or .SMEMT, but rather .MEMT. + Used by DDT when you type ".MEMT/".) + CHDEVS Device names, from .RCHST table. + NCALLS Valid sixbit names for symbolic system calls. + USRVAR Valid sixbit user variable names for USRVAR system call. + TTYVAR Valid sixbit tty variable names for TTYVAR system call. + ITSNMS Valid sixbit names of all local ITS machines. + + Names which used to be valid but are no longer (ANCIENT HISTORY): + TRANS Translation tables. + OMPX Output multiplexor data area. + + PEEK used to use this uuo to get system information. + Nowadays it merely maps systems pages into its core + image, thereby gaining efficiency at some small cost + in accuracy. + +.GSNAME ac, ANCIENT HISTORY get system name + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function has been superseded by .SUSET of .RSNAM. + Its opcode has been recycled as .REALT. + + Put the executing job's .SNAM user variable + into accumulator ; this is the default directory + name ("system name") for the job. + +.GUN ac, gun down a job tree + ;skip if successful + + Accumulator should contain the user index of the + top level job of a job tree. That job tree is expunged + from the system. All the jobs are closed and killed. + This is to be used as a last resort to flush hung + and worthless jobs. The system program LOCK + contains a command which performs this operation. + The system job will print a message on the system console + describing what job was gunned and who gunned it. + +.HANG hang until condition satisfied + + The .HANG uuo is to make it easy for programs to wait for various + conditions. It should be used the way a JRST .-1 would be used in + a stand-alone program. Explicitly, it should be preceded by an + instruction that will skip or jump if the awaited condition is + true. Because the system must understand that instruction, only + certain instructions are allowed to be used (any others cause + illegal operation interrupts (%PIILO, bit 1.6 of the .PIRQC user + variable)). They are: SKIP, JUMP, AOS, SOS, AOJ, SOJ, CAI, and CAM + class instructions, -all- test instructions, CONSO and CONSZ (which + work only if the job is in .IOTLSR mode, and the processor is not a + KS10), SKIP and JFCL, which are used to hang forever (really, until + some interrupt routine jumps away instead of returning), SKIPA and + CAIA, which are used to cause rescheduling but don't actually hang, + and JFFO. XCT is also allowed, but the ultimate end of the chain + of XCT's must be one of the instructions listed above. + + In the case of hanging forever, the job is specified to be + desirable to swap out, since it may hang for a long time. + + .HANG conditional instructions which reference only ACs are treated + as hang-forever, except that they don't set the desire-to-swap-out + flag, since the contents of the AC can't change without the job + being interrupted out of the .HANG. + + When a job executes a .HANG, the system effectively executes the + preceding instruction at each schedule to decide whether the job + may be run (cf. the .FLS user variable). If the job is + interrupted, the interrupt routine will find that the saved PC + points to the instruction before the .HANG instruction. It may + dismiss normally, in which case the .HANG will be executed again + unless the condition has become true (of course, the interrupt + routine may do something to make the condition true). + + .HANG takes care to be certain that any side effects of the + instruction will be performed when the condition finally becomes + true. .HANG does this by always exiting by jumping to .-1. Thus + an AOSE instruction followed by a .HANG really will increment the + referenced location after it becomes -1, JFFO AC, followed by .HANG + really will store a bit number into AC+1, and TLZN followed by + .HANG really will clear out the bit after it comes on. + + While a job is waiting in a .HANG, the system does not re-examine + the AC used by the conditional instruction each time it executes + that instruction; it uses what was in the AC when the .HANG was + entered. However, there is no way for this AC to change without + the job being interrupted out of the .HANG so it can change it, or + PCLSRed out when it's superior changes it. Also, the effective + address calculation is not repeated, and if the actual instruction + supplied is an XCT, the XCT'd instruction is not re-fetched. + Therefore, it does not work to expect the condition to become true + because the contents of a memory location indirected through or + XCTed will change. Because an interrupt always causes the .HANG to + be redone, it does work to expect the interrupt routine to change + the AC or the indirect pointer in order to make the instruction + skip. + + In the special case of waiting for a specific interval of time to + pass, the .SLEEP uuo (q.v.) may be useful. In the special case of + waiting for a network socket to change state, the NETBLK symbolic + system call may be useful. + +.HANG ac, .HANG with timeout + + [In ITS version 1622 and later] + + .HANG with a non-zero AC field acts as the disjuction of .HANG and + .SLEEP, allowing a program to wait either for a condition to become + true or for some time to pass. The contents of accumulator + specify when the .HANG should stop waiting for the condition to + become true by returning to the instruction following the .HANG. + If non-negative, it is a length of time to wait in thirtieths of a + second. If negative, it means to wait until the system TIME + variable exceeds its absolute value. + + As with .SLEEP, if the job is interrupted while .HANGing, the + accumulator will be found to contain the appropriate negative + number to allow the .HANG to be resumed properly when the interrupt + is dismissed. + + If .HANG times out before the awaited condition becomes true, the + accumulator will contain 0. This is the only case in which .HANG + will exit to the following instruction. + + If the awaited condition becomes true, so that the previous + instruction skips or jumps away, the accumulator will contain the + negative of the time at which the .HANG would have timed out. + + +.HANGUP dialnum, ANCIENT HISTORY hang up a dialed line + ;skip if successful + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .REVIVE. + + This uuo was used to hang up on a line which had + been dialed by the .DIAL uuo. + +.IFSET ac, if location contains what I think, set it + ;skip if successful + + The accumulator should contain an absolute 18.-bit + address in the right half and a pointer to a two-word block + in the left half. The first word of the two-word block + contains a test word, and the second a new value. + + If the absolute core location specified contains exactly + the quantity specified by the test word, then the contents + of that location are replaced by the new value specified, + and the .IFSET skips. If the contents of the location + are not the same as the test word, the .IFSET fails. + + This is similar to the .SETLOC uuo, but provides a + measure of safety if the contents of the location + may be volatile. Like the .SETLOC uuo, if the .IFSET + succeeds the system job prints out a message on the + system console detailing the old and new contents + of the location and who modified it. + +.IOPDL reset I/O pdl + + The I/O channel pdl of the executing job is reset. + Entries on the I/O pdl contain the channel number + from which they were pushed; .IOPDL is equivalent + to just enough .IOPOP's (possibly none) to clear + the I/O pdl, popping each entry into the channel + it was pushed from. + See the .IOPUSH and .IOPOP uuos, and the .IOC, .IOS, + .IOP user variables. + +.IOPOP chnum, pop I/O channel + + This uuo is the inverse of the .IOPUSH uuo. + The top entry of the I/O pdl is popped into + channel , which may be a different channel + from the one the entry was pushed from. + A .CLOSE is first performed on the channel popped into. + If the channel originally pushed was a closed channel, + then after popping channel will be closed. + If the I/O pdl has no entries on it, IOC error + number 5 is signaled on channel , giving the + job a class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC + user variable). + + If the channel number is variable, the IOPOP symbolic + call may be used. + + See the .IOPUSH and .IOPDL uuos, and the .IOC, .IOS, + and .IOP user variables. + See also the .UCLOSE uuo for a discussion of what + occurs when a job open on a pushed channel is killed. + +.IOPUSH chnum, push I/O channel + + The channel is pushed onto the I/O pdl + for the executing job. A channel may be pushed + whether or not it is actually open; if it is open, + transactions on the channel are suspended when + it is pushed, and any transfer on that channel is + inaccessible until the pushed entry is popped + again. The error status and access pointer are + correctly saved as well. The channel number + is also saved in the pdl entry for use by the .IOPDL uuo. + After the channel has been pushed it is returned to + a non-open state (this is not the same as being closed + since closing implies terminating the I/O transaction). + The I/O pdl for each job has room for eight entries; + if all are in use .IOPUSH will signal IOC error + number 6 on channel , giving the job a + class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable). + + If the channel number is variable, the IOPUSH + symbolic call may be used. + + See the .IOPOP and .IOPDL uuos, and the .IOC, .IOS, + and .IOP user variables. + See also the .UCLOSE uuo for a discussion of what + occurs when a job open on a pushed channel is killed. + +.IOT chan,[foo] input/output transfer + + Input or output is performed, according to the device + open on the specified channel and the mode in which it + was opened. If an error occurs, any of several IOC + errors may occur, giving the job a class 2 interrupt + (%PIIOC, bit 1.9 of the .PIRQC user variable.) + + In "unit mode", foo is the datum to be transferred + in or out. (In the case of input, the word pointed + to by the effective address of the .IOT is modified.) + + In "block mode", foo is an AOBJN pointer to the data + to be transferred in or out. The left half is the + negative of the number of words, the right half is + the address of the first word. The pointer is updated + as the transfer proceeds. When the .IOT returns the + pointer will have been fully counted out, that is + the left half will be zero, except in the case of input + that stops because the end of the file was reached. + + In the case of block mode on an intrinsically character + device, such as TTY, bits 4.9-4.7 of the pointer are + fiddled to indicate which byte in the word is being + processed. + + The VID, NVD, and IMX devices handle .IOT in a non-standard + way because they do both input and output at the same time. + + The symbolic system calls IOT and SIOT are versions of + .IOT which have additional features. + +.IOTLSR ac, iot loser mode + + This uuo is used to request permission from + the system to run in user I/O mode (bit 4.3 of the PC). + In this mode a program is in user mode (and thus is + subject to user mode page mapping), but may perform + I/O instructions without trapping to the system. + This facility must naturally be used with discretion. + It should be noted that ITS will interpretively + simulate most I/O instructions anyway, if it thinks + that the operation will not harm the time-sharing + system. For example, one may use DATAI to read the + console switches even when not in .IOTLSR mode. + This simulation is slower than direct execution + of I/O instructions, but much safer. + + If bit 4.9 (the sign bit) of accumulator is zero, + .IOTLSR mode is relinquished, even if it was not formerly + possessed by the job. + If bit 4.9 is one, then the executing job is granted .IOTLSR + mode, and the system job prints a message on the system + console to document the fact. + +.IPDP chnum, interrupt PDP-6 + + Channel should have the PDP-6 open as an + inferior procedure; if it does not, .IPDP does nothing. + Otherwise the PDP-6 receives an interrupt. + + The PDP-6 can also interrupt the PDP-10; when this occurs + a job with the PDP-6 open as an inferior will receive + an interrupt if enabled for it. See the .IFPIR + user variable for PDP-6 channel interrupts. + + The interface between the PDP-6 and the PDP-10 + is device 20 octal. + The interrupts are given via a CONO: + 1.5 Interrupt other processor. + 1.4 Clear interrupt flag. + 1.3-1.1 Priority interrupt assignment. + The bits read by CONI are as follows: + 1.4 Interrupt flag. + 1.3-1.1 Clear interrupt flag. + +.ITYI ac, OBSOLETE input tty interrupt + ;skip if successful + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the .ITYIC uuo. + + This uuo is exactly like .ITYIC except that it applies + only to the job's console, if any. This uuo is to be + flushed eventually. + +.ITYIC ac, input tty interrupt on channel + ;skip if successful + + The specified accumulator should contain the + number of a channel which is open for tty input. + If an interrupt character is pending in that tty's + input buffer, that character replaces the channel number + in and the .ITYIC skips. It will fail if the + channel is bad, if it does not have a tty open, if the + tty is the job's console but the job does not possess it, + or if there is no interrupt character pending. + If the job does not possess its console and the job's + %TBINT bit is set in the .TTY user variable, the job + receives a class 2 word 1 interrupt (bit 4.2 in the + .PIRQC user variable). + + This uuo is typically used in an interrupt routine + invoked by bit 1.1 (%PITYI) in the .PIRQC user variable or by + a word 2 I/O interrupt on a tty input channel. + If the .ITYIC does not skip the program should ignore + the interrupt entirely; this can happen due to certain + timing screws related to passing the console around + among several jobs. + + See the TTYGET and TTYSET symbolic system calls, which + manipulate bits relevant to interrupt characters. + See the WHYINT system call, which (in the case of + TTY channels) is another way to do the same function + as .ITYIC. + See the .PIRQC and .TTY user variables. + See ITS TTY for a complete explanation of .ITYIC. + +.LISTEN ac, listen to tty + + If the job possesses its console, .LISTEN waits + for any output to be completed, and then returns the + number of input characters pending in the input + buffer. If the job does not possess a console, zero is + returned. + See also the LISTEN symbolic system call. + +.LOGIN ac, ANCIENT HISTORY log in + ;skip if successful + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function has been superseded by the LOGIN symbolic system call. + Its opcode has been recycled as .DEMON. + + Accumulator contains the sixbit name to log in as. + Attempting to log in with a uname equal to 0 or -1 fails, + as does attempting to log in when already logged in. + +.LOGOUT log out + + The executing job and all direct inferiors are killed, + providing that it is the top-level job of its job tree. + All resources used by such jobs are freed. If the job + tree was console-controlled, the system job will print + a "console free" message on the freed console. + + If the executing job is not top-level, .LOGOUT with zero + in the AC field merely returns without skipping. + (An inferior job may not commit suicide without the consent + of its superior.) .LOGOUT with a nonzero AC field will + cause a fatal %PIBRK interrupt which will inform the superior + that the job wants to be killed. If the superior is DDT, + it will kill the job. Here is how a program should exit: + + SKIPE DEBUG ;optional debugging aid: + .VALUE ; job hangs if being debugged + .LOGOUT 1, ;log out or be killed. + +.LOSE lossage-code report lossage + + The job's Program Counter is set to the address of the + .LOSE minus one, the job's .VAL user variable is set + to the new PC,,the magic bits, and the + job is given a %PILOS interrupt. If the job does not + enable this interrupt, and it's superior is DDT, a + helpful error message will be printed. + + The magic bits are documented in DDT ORDER. + The most useful ones are 0 for a random error, + 1000 to ask DDT to type the error message corresponding + to the most recent system call error return, and + 1400 if DDT should attempt to print the names of + the file that the call was opening/referring to. + + The lossage codes are defined by DDT's interpretation of them. + The defined values are: + + %LSSYS==1000 The last error code returned by a failing + system call describes the problem. + + %LSFIL==1400 The last error code returned by a failing + system call, together with the name of the file + it was operating on, describe the problem. + That system call should be right before the .LOSE. + DDT will decode it to determine the filenames + (if it is an OPEN) or the channel number and then + the filenames via an RFNAME. + + %LSSYS+errcode Means that the system call error code + describes the problem. + + %LSFIL+errcode Means that the error code + together with the filenames being used + describe the problem. + + 1+.LZ + Means that the error should be handled as if it + were a fatal interrupt on the specified interrupt + bit. For example, the lossage code 1+.LZ %PIMPV + will to cause DDT to print out an MPV error message. + These lossage codes are more useful with the + LOSE and DISMIS symbolic system calls. + + 0 Signifies some other nondescript error condition. + + The usual way of using this uuo is to put it + after a system call which is expected always to + skip. If it fails to skip, DDT will print an error + message based on what the system call is and what + it was failing to do (if you said 1000 or 1400). + Proceeding the job will retry the call. + + See also the LOSE symbolic system call. + + This call never gets an error, and never returns. + +.LTPEN block hack light pen + + This uuo hacks the light pen on the 340 display. + The address should be the start of a six-word + block. The first word controls the mode: + 4.9 0 => ignore other bits, 1 => examine them. + 3.1 1 => hang until light pen seen at least once. + 1.1 Used to set the multiple sighting mode (1 = on). + The six words of data returned are as follows: + wd 0 The word read by DATAI from the 340 display at + the last light pen interrupt. + wd 1 Number of times the light pen interrupted + since the last .LTPEN uuo. + wd 2 Sum of all Y coordinates since the last .LTPEN uuo. + wd 3 Sum of all X coordinates since the last .LTPEN uuo. + wd 4 The current linked display list pointer. + wd 5 The current BLKO display pointer. + If the job does not currently possess the 340 display, + words 0 and 1 are set to zero. + + If the system has no 340, .LTPEN is ignored. + +.MASTER ac, request/release master mode + ;skip if successful + + Accumulator should have bit 4.9=1 to request + master mode, or =0 to release it. Releasing master + mode always succeeds, even if the job did not have it. + Requesting master mode succeeds if the job already has + master mode, or if it has control of its tty (as determined + by bit 4.9 (%TBNOT) of the .TTY user variable). + Only one job at a time may have master mode; thus requesting + master mode may imply taking it from some other job. + + A job in master mode gets double priority for run time; + that is, it tends to get twice as much run time as any other + job competing for run time. Furthermore, it has priority + in grabbing the 340 display from another user. (The precise + algorithm for grabbing the 340 is actually a function of + who has master mode and of the %TT340 and %TT3HP bits of + the TTYTYP variables of the jobs involved.) + + Master mode should be used only when absolutely necessary. + Needless use of it is considered to be antisocial, and may + be grounds for harassment. + +.MTAPE ac, hack magtape + ;skip if successful + + Accumulator should have a channel number in the + left half and an address in the right half. + (An illegal channel number causes an illegal operation + interrupt (%PIILO, bit 1.6 of the .PIRQC user variable).) + The channel should have device MTn open on it. + The address should point to a word with a signed count + in the left half and a function code in the right half. + Valid function codes are: + 0 Hang until tape motion done. + 1 Rewind tape. + 2 Rewind and dismount. + 3 Write end-of-record (i.e. force current output buffer). + 4 Write three inches of blank tape. + 5 Write end-of-file. + 6 Space over records (negative => backwards). + Illegal for output channel. + 7 Space over files (negative => backwards). + Illegal for output channel. + 10 Space to end-of-tape. + 11 Stop all commands on this channel. + 12 Set block size for writing to words. + 13 Return block size in . For reading, this is the size + of the record most recently swallowed by an IOT. + This operation may trigger one of the following IOC errors, + causing an interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable): + 1 ILLEGAL HARDWARE OPERATION ATTEMPTED + 3 NON-RECOVERABLE DATA ERROR + 9 DEVICE FULL + +.NDIS ac, display times + ;skip if successful + + This uuo is intended for use in taking pictures of + the 340 display screen. It sets a display control + variable from the contents of accumulator . + This variable has no effect if negative, but if + zero it inhibits display completely, and if positive + is decremented by 1 each time the current display + block or list of blocks is displayed. This call + fails to skip if the job does not possess the 340 display. + + On systems which don't have a 340, .NDIS is ignored. + +.NETAC chnum, OBSOLETE accept network connection + ;skip if successful + + This UUO is obsolete. + It is documented here for historical purposes only. + It now ALWAYS fails to skip. + + Channel should be be a network channel in + the "RFC received while listening" (%NSRFC) state (see + the ITS NCP file.) + This is used to accept a connection on a socket opened + with mode bit 1.5=1 (see the OPEN symbolic system call). + An RFC is sent back and the channel put into the + "connection open" state. + + To reject a connection, the channel should be closed with + either the .CLOSE uuo or the CLOSE symbolic system call. + +.NETINT chnum, OBSOLETE network interrupt + + This UUO is obsolete. + It is documented here for historical purposes only. + It is now always a no-op. + + Sends an interrupt out on the network socket associated + with channel number , which should be open on + the NET device. If the local socket number is even + (receiving), an INR message is sent; otherwise, INS + is sent. + +.NETS chnum, network send + + Channel number should be open for network + output. The .NETS uuo forces the current output buffer + to be sent. If the channel is open in the wrong direction, + IOC error 1 (ILLEGAL HARDWARE OPERATION ATTEMPTED) will occur, + possibly giving the user an IOC interrupt (%PIIOC, bit 1.9 of + the .PIRQC user variable). + +.OPEN chnum,block open a file + ;skip if successful + + This uuo is semi-obsolete. The OPEN symbolic system + call is somewhat more flexible and consistent. + However, it is still reasonable to use .OPEN for + devices which do not use directory names. + + A file is opened on the channel specified by . + That channel number is then used to specify the file + on all further I/O transactions on that file. + The address should be the first of several + locations: + wd 0 ,, + wd 1 File name 1, if applicable. + wd 2 File name 2, if applicable. + wd 3 For the NET device, the foreign host number. + The directory name, if applicable, is taken from the + .SNAME user variable. Note that the device name may + be only three characters. The mode bits are as for + the OPEN symbolic system call. + + If bits 4.9-4.7 of word 0 contain 2, then a link is + created. Words 1-5 are then as follows: + wd 1 From file name 1. + wd 2 From file name 2. + wd 3 To file name 1. + wd 4 To file name 2. + wd 5 To sname. + .OPEN should never be used in this way in new programs; + use the MLINK symbolic system call instead. + + If the .OPEN fails to skip, an error code as for + .CALL OPEN will be returned on channel . + +.OPER random operation + + The term .OPER is used to refer to a class of uuo's + which all have the same op-code and are decoded by + the value of their effective address. Those .OPER's + which take arguments generally specify either an + accumulator or an I/O channel number in the accumulator + field of the .OPER. + If the effective address is not a valid .OPER number, + then the job executing the .OPER receives an illegal + operation interrupt (%PIILO, bit 1.6 of the .PIRQC user + variable). + A list of currently valid .OPER's is given below in + numerical order. + + .OPER 0 illegal + .OPER 1 .ITYI + .OPER 2 .LISTEN + .OPER 3 .SLEEP + .OPER 4 .SETMSK + .OPER 5 .SETM2 + .OPER 6 .DEMON + .OPER 7 .CLOSE + .OPER 10 .UCLOSE + .OPER 11 .ATTY + .OPER 12 .DTTY + .OPER 13 .IOPUSH + .OPER 14 .IOPOP + .OPER 15 .DCLOSE + .OPER 16 .DSTOP + .OPER 17 .RDTIME + .OPER 20 .RDSW + .OPER 21 .GUN + .OPER 22 .UDISMT + .OPER 23 .GETSYS + .OPER 24 .IPDP + .OPER 25 .GETLOC + .OPER 26 .SETLOC + .OPER 27 .DISOWN + .OPER 30 .DWORD + .OPER 31 .DSTEP + .OPER 32 .GENSYM + .OPER 33 .LOGOUT + .OPER 34 .REALT + .OPER 35 .WSNAME + .OPER 36 .UPISET + .OPER 37 .RESET + .OPER 40 .ARMOVE + .OPER 41 .DCONT + .OPER 42 .CBLK + .OPER 43 .ASSIGN + .OPER 44 .DESIGN + .OPER 45 .RTIME + .OPER 46 .RDATE + .OPER 47 .HANG + .OPER 50 .EOFC + .OPER 51 .IOTLSR + .OPER 52 .RSYSI + .OPER 53 .SUPSET + .OPER 54 .PDTIME + .OPER 55 .ARMRS + .OPER 56 .UBLAT + .OPER 57 .IOPDL + .OPER 60 .ITYIC + .OPER 61 .MASTER + .OPER 62 .VSTST + .OPER 63 .NETAC + .OPER 64 .NETS + .OPER 65 .REVIVE + .OPER 66 .DIETIME + .OPER 67 .SHUTDN + .OPER 70 .ARMOFF + .OPER 71 .NDIS + .OPER 72 .FEED + .OPER 73 .EVAL + .OPER 74 .REDEF + .OPER 75 .IFSET + .OPER 76 .UTNAM + .OPER 77 .UINIT + .OPER 100 .RYEAR + .OPER 101 .RLPDTM + .OPER 102 .RDATIM + .OPER 103 .RCHST + .OPER 104 .RBTC + .OPER 105 .DMPCH + .OPER 106 .SWAP + .OPER 107 .MTAPE + .OPER 110 .GENNUM + .OPER 111 .NETINT + +.PDTIME ac, PD time + + Returns in accumulator the time since the beginning of the + year, measured in sixtieths of a second. If the time is not known, + -1 is returned. PD = Paul DeCoriolis, who hacked the original + clock on which this was based. Said clock ceased to work many + years ago. + +.POTSET + +.RBTC ac, robot console switches + + The contents of accumulator are sent to the + robot console (device 514) with a DATAO. After a short + delay the result of a DATAI are returned in . + + What the heck is device 514??? + +.RCHST ac, OBSOLETE read channel status + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by the RCHST + and RFNAME symbolic system calls. + + Accumulator should contain a channel number + in the left half and an address in the right half + pointing to a block of several words. + The executing job receives an illegal operation + interrupt (%PIILO, bit 1.6 of the .PIRQC user variable) + if the channel number is illegal. + + The block of words is filled with information + about the status of the channel. The general + pattern of this information is as follows, though + not all devices adhere to it strictly: + wd 0 Device name in the right half. + wd 1 First file name, if applicable. + wd 2 Second file name, if applicable. + wd 3 Sname (directory name), if applicable. + wd 4 Access pointer. Measured in words. + A byte pointer if in character mode, for some devices. + -1 if not randomly accessible. + wds 5-n Other data. May be garbage, or not stored, + depending on the device as specified by word 0. + + See the RCHST symbolic system call for details + of what information is returned for specific devices. + Wd 0 from .RCHST has in its RH the LH of symbolic + RCHST's 1st value. Wds 1-4 from .RCHST are the same as + the 2nd-5th values returned by symbolic RCHST. + Wds 5 and up from .RCHST are the same as values 7 and up + of symbolic RCHST, except that they are not stored for + devices which do not return significant information in + them. Note that value 6 of the RCHST symbolic system + call is not available from .RCHST. + +.RD500 ac, ANCIENT HISTORY read device 500 + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .IPDP. + + Device 500 formerly purported to be some kind of clock. + +.RD710 ac, ANCIENT HISTORY read device 710 + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .HANG. + + Device 710 used to be a kind of clock on the PDP-6. + This uuo read a 24.-bit quantity from this clock, + measured in 4-microsecond ticks. + +.RD760 ANCIENT HISTORY + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .DWORD. + + Device 760 of the PDP-6 used to be used for temporary + direct sense hookups. (For example, the low six + bits controlled lights on the hand of the AMF arm.) + This uuo returned the result of a DATAI on this device. + +.RDATE ac, read date + + The current date is returned in accumulator as a + word of sixbit characters "YYMMDD", where YY is the + year (modulo 100.), MM is the month, and DD is the day, + all as two-digit decimal numbers. + If the system does not know what the current date is, + -1 is returned. + +.RDATIM ac, read date and time + + This is exactly like the sequence + .RTIME ac, + .RDATE ac+1, + except that the timing error involved with crossing + midnight between execution of the two uuo's is avoided. + Thus accumulator receives the time of day as a word + of sixbit "HHMMSS", where HH is the hour (in 24.-hour + notation), MM is the minute, and SS is the second, + all as two-digit decimal numbers. + Accumulator receives the date as a word of sixbit + characters "YYMMDD" where YY is the year (modulo + 100.), MM is the month, and DD is the day, + all as two-digit decimal numbers. + If one of the quantities is not known by the system, + -1 is returned for that quantity. + +.RDSW ac, OBSOLETE read switches + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by DATAI. + + The contents of the data switches on the PDP-10 console + are returned in accumulator . + The same effect can be achieved by using DATAI 0, + (or any arbitrary location instead of ), which, if + the job is not in .IOTLSR mode, ITS will interpret + specially and simulate. + Neither .RDSW nor DATAI works correctly on KL10s. + Hopefully this will not inconvenience anyone. + On KS10s .RDSW no longer exists. + +.RDTIME ac, read system time + + The time since the system started running, measured in + thirtieths of a second, is returned in accumulator . + Thus the difference between two successive values gives + the amount of real time which passed between the two + executions of .RDTIME. This time does not include time + during which the system was temporarily down, for instance + stopped at a bug halt from which it was later continued + by a system hacker. + +.REALT ac, real time hackery + ;maybe skip on success (see below) + + This uuo controls a fairly complex facility allowing + a job to get good service in real time. The contents + of the specified accumulator are decoded as follows: + %RLFLS 4.9 Turn off old clock rate, zero the tick count, + and release the real time facility. + %RLSET 4.8 Turn on new clock rate. + %RLUSR 4.7 Attempt to seize the real time facility. + %RLNPS 4.6 Do not settle for pseudo-real time status. + %RLPSD 4.5 Insist on pseudo-real time status. + %RLBLK 4.4 Block me except during high priority period. + %RLGET 4.3 Read into words 2-3 (see below) before + interpreting the other bits. + 4.2-3.1 Reserved. Should be zero. + 2.9-1.1 Pointer to four word block: + wd0 Frame time in sixtieths of a second. + Must fit in the right half. + wd1 Priority time in sixtieths of a second. + Must be less than 15 octal, and less + than or equal to half the contents + of word 0. + wd2 If bit 4.3 on, set the right half to + the frame time, and the left half to + the tick count since last examined. + wd3 If bit 4.3 on, set the right half to + the high priority time, and the left + half to 0 if currently at low priority + or -1 if currently at high priority. + + The real time facility is interpreted as follows: + real time is broken up into cycles, each the number + of sixtieths of a second in length specified by the frame + time. At the beginning of each frame, the %PIRLT + bit (4.8) in the job's .PIRQC user variable is turned + on. This causes an interrupt if the corresponding + bit is on in the .MASK user variable. + Within each frame, the first sixtieths are + high priority time for the job with the real time + facility, where is the specified high priority time. + If a job has the facility, presently has high priority, + and otherwise wants to run, then it is scheduled above + all other jobs. This guarantees that a job will + get a certain amount of run time at specified intervals; + this is useful for responding to real-time conditions. + The system will not schedule the job during its low-priority + phase if it has requested that it be blocked (bit 4.4), + unless it gets an interrupt and is not using the new-style + interrupt system. + The .REALT uuo will skip only if the facility + was requested and successfully seized. In all other + cases it does not skip, even if the requested operation + succeeded. If an invalid quantity is supplied for + a frame time, or for the high priority time, an + illegal operation interrupt occurs + (%PIILO, bit 1.6 of the .PIRQC user variable). + +.REDEF ac, redefine symbol to exec DDT + ;skip if successful + + The specified accumulator should contain the address of + a two word block: + wd0 SQUOZE bits,symbol + wd1 value + If the are all ones, then the symbol is deleted. + Otherwise it is defined with the specified value, + replacing any old value. This occurs in the symbol + table used by exec DDT, which is used to debug the + system, and which is used by the .EVAL uuo. + A .REDEF fails to skip only if it tries to add + a new symbol and fails for lack of room in the system. + +.RESET chnum, reset I/O channel + + I/O channel is reset. This is exactly + like the symbolic system call RESET. What happens + is device-dependent; see the description of that call. + +.REVIVE revive system + + This uuo reverses the effect of the .SHUTDN uuo. + It is used by the REVIVE command of LOCK. + Jobs which have enabled it will receive an + interrupt (bit 1.7 of the .PIRQC user variable). + See the .DIETIME and .SHUTDN uuo's, and the SSTATU + symbolic system call. + +.RLPDTM ac, read localized PD time and .RYEAR + + This returns the time and date in and , in a binary + form. contains the result of .RYEAR; see the description + of that uuo for details. contains the "localized" number + of seconds since the beginning of the year. If this is divided + by the number of seconds in a day (86400.), the remainder will + be the number of seconds since midnight local time, and the + quotient will be the number of days since the beginning of the + year, with the (mis)feature that all years are considered to + include February 29. This is done so that date-printing + routines do not have to check for leap-year, but it does mean + that during the last 10 months of non-leap years the day number + is 1 greater than the correct Julian day. Bit 4.9 of is + set in this case. + + Note also that when daylight savings time is in effect will + be advanced by one hour. Again this is done to simplify date + and time printing routines. Bit 4.7 of is set in this + case. + + Note that .RLPDTM should be used instead of .PDTIME followed by + .RYEAR, since it guarantees consistency of the two values + returned. + + +.RRTIM ac, ANCIENT HISTORY read run time + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function has been superseded by the .RUNT user variable. + Its opcode has been recycled as .CBLK. + + The job's run time is returned in accumulator . + See the .RUNT user variable. + +.RSYSI ac, read system incarnation + + Returns in the .FNAM2 of the system when it + was assembled. Thus, it is a version number in sixbit. + This is the same as the seventh value of the + SSTATU symbolic system call. + +.RTIME ac, read time + + The time of day is returned in accumulator as a word + of sixbit characters "HHMMSS", where HH is the hour + (in 24.-hour notation), MM is the minute, and SS is + the second, all as two-digit decimal numbers. + If the system does not know the time, -1 is returned. + See also .RDATIM. + +.RYEAR ac, read year + + Returns in accumulator a word as follows: + + 4.9 This year has 365. days, and it is after February 28. + 4.8 This year is a leap year (366. days). + 4.7 Daylight savings time is in effect. + 4.6 The time of year is known. + 4.2-3.9 If bit 4.6 set, the current day of the week. + Sunday=0, Monday=1, etc. + 3.8-3.6 The day of the week of January 1 of this year. + 3.5-3.1 Zero. + 2.9-1.1 The year, not modulo 100., but as a full quantity, + e.g. 1969. or 1975. + + If the system does not know the time, zero is returned. + +.SETLOC ac, deposit in system + + Expects the rh of to contain the address of a + location in physical core, and the lh of to point + to a word of data in the executing job's memory. + The job's argument word is copied into the addressed + location in physical core, and a message is printed + on the system console. + +.SETM2 OBSOLETE set two interrupt masks + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by block-mode + .SUSET of .MASK and .MSK2. + + The job's .MASK and .MSK2 user variables are set to + the respective contents of accumulators and . + +.SETMSK ac, OBSOLETE set interrupt mask + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by .SUSET of .MASK. + + The job's .MASK user variable is set to the contents of + accumulator . + +.SHUTDN ac, shut down system + ;skip on success + + This uuo causes the system to prepare to go down. + (It is used by the KILL command in LOCK.) + Accumulator should contain a time interval, + in thirtieths of a second. The system will go down + exactly that much time after the present moment. + + When the system prepares to go down, all jobs enabled + for it receive a system going down interrupt (%PIDWN, bit 1.7 + of the .PIRQC user variable). (DDT prints a message when it + receives such an interrupt; part of this message is the + contents of the file SYS:DOWN MAIL.) This interrupt will + occur repeatedly every time 3/4 of the time from the previous + interrupt to the time of shutdown has elapsed, except that + interrupts will not occur less than ten seconds before shutdown. + (Thus, if the system were scheduled to go down in ten minutes, + interrupts would happen at the following times before shutdown: + 10:00, 2:30, 0:37. If in five minutes: 5:00, 1:15, 0:17.) + When the magic moment arrives, all users are forceably logged + out, all jobs killed (except job trees whose top-level jobs + have the %OPLIV bit set in their respective .OPTION user variables + -- a feature used primarily by system daemons. Such trees are + expected to log out on their own after finishing their work), + all micro-tapes are flapped, the file SYS:DOWN MAIL is deleted, + "ITS NOT IN OPERATION" messages are printed on all consoles, + all Terminet motors are stopped, all files, directories, and TUTs + are written out, and everything generally put into a good state; + the system then calls DDT. It may be brought back up again + with XREVIV$X, which reloads demons and allows ^Z'ing once more. + + The effects of a .SHUTDN may be reversed by a .REVIVE uuo. + See the .DIETIME and .REVIVE uuo's, and the SSTATU symbolic + system call. + +.SLEEP ac, sleep + + The .SLEEP uuo temporarily puts the executing job into + a dormant but interruptable state. The job consumes no + run time until the specified time interval has elapsed, + unless an interrupt occurs. + The contents of accumulator specify how long the + job is to sleep. If non-negative, it is the length + of time to sleep in thirtieths of a second. If negative, + it means to sleep until the system TIME variable (which + is read by the .RDTIME uuo (q.v.)) exceeds the absolute + value of the specified quantity; thus one can sleep + until a specific time. + + If the job is interrupted in the middle of a .SLEEP, + the accumulator will be seen to contain the appropriate + negative number, either the one originally there or one + calculated from the original positive argument. Thus + re-executing the .SLEEP after dismissing the interrupt + will cause the .SLEEP to be resumed correctly. + + Often it is desirable to "sleep" until some condition + other than the passing of time occurs. For this see + the .HANG uuo. For the special case of sleeping until + a network socket changes state, see the NETBLK symbolic + system call. + +.STATUS chnum,loc I/O channel status + + The status of I/O channel is placed in + location . This is exactly like the STATUS + symbolic system call. + +.SUPSET ac, SUPCOR set + + The system job is partially controlled by a variable + called SUPCOR; .SUPSET XOR's the contents of accumulator + with that variable, returning the result of + the XOR in . Not all bits specified by take + effect; some are AND'ed out first. A message is printed on + the system console as for the .IFSET and .SETLOC uuo's. + + The only really useful bits to set are as follows: + 1.6 Update TV who lines. + 1.2 Kill current file being spooled from TPL to LPT + (this is what the TPL command in LOCK uses). + +.SUSET [suset spec] self USET + + This uuo is used to examine and set user variables + associated with the executing job. See ITS USETS + for more information on .SUSET and .USET. + +.SWAP ac, hack swapping + + This uuo is illegal unless the system is being + debugged (the SYSDBG variable in the system is + non-zero; see the SSTATU symbolic system call). + + The bits in the specified accumulator indicate + a test of the page swapping software in the + system: + 4.9-4.7 Operation to perform. + 0 Swap out the number of pages + specified in 2.9-1.1. + 1,3,5,7 Go into a loop, waiting for + a few seconds and then referencing + location 2000 octal. + 2 Hack the PCLSR test feature on + this job. Bits 2.9-1.1 specify + the test mode: + -1 Enter in hold mode. + 0 Leave PCLSR test mode. + 1 Enter in advance mode. + 2 Enter in advance but don't ^Z. + 4 Swap out the virtual page specified + by bits 2.9-1.1 for the user specified + by bits 3.9-3.1. + 6 Swap out all pages for the user + specified by bits 3.9-3.1. + 3.9-3.1 User index, for operations 4 and 6. A user + index of zero means the job executing the .SWAP. + (After all, it's hard to swap out the system!) + 2.9-1.1 Number of pages for operation 0. + Test mode for operation 2. + Virtual page number for operation 4. + +.TRANAD OBSOLETE translation-list add + +.TRANDL OBSOLETE translation-list delete + +.TRANS ANCIENT HISTORY translate file name + +.UBLAT ac, micro-tape blat (?) + ;skip if successful + + The specified accumulator should contain a micro-tape + drive number. If the uuo succeeds, the drive is marked + as being in .UBLAT mode. In this mode, there are + only two permissible operations on the drive: to dismount + (flap) it, and to open it as one giant file. This uuo + is intended for use in reading micro-tapes written in + non-standard (e.g. DEC) format. Any .OPEN + on a micro-tape in .UBLAT mode will ignore the + file names, and all the blocks of the tape except block 0 + will be read or written consecutively. No deletes, renames, + etc. are permitted. A .UBLAT will fail if the drive does + not exist, if the micro-tape directory has been read in + already by the system, or if the drive is not assigned + to the user whose job is trying to do a .UBLAT. + +.UCLOSE chnum, USR close + + This uuo is used to explicitly kill an inferior + open on channel . Merely performing a + .CLOSE on the channel is not enough - that + dissociates the inferior from the I/O channel, + but does not destroy the inferior procedure. + When the procedure is destroyed, all of its + inferiors, direct or indirect, are destroyed also. + As each job is destroyed, its I/O channels + are automatically .CLOSE'd, and any facilities + such as .MASTER mode are released. The translation + lists are cleared for all destroyed jobs. + + If any procedure whatever has a destroyed job + open on an I/O channel, that channel is automatically + closed; in particular, the channel is + closed. All jobs with channels which have the job open + as a foreign user (as opposed to an inferior or a + job device) also receive a word 2 I/O interrupt on each + such channel (see the .IFPIR user variable). + If a procedure has pushed a channel with a job to be + destroyed onto its I/O pdl (see the .IOPUSH, .IOPOP, and + .IOPDL uuos, and the .IOC, .IOS, and .IOP user variables), + then that I/O pdl entry is replaced on the pdl with a special + entry for a pseudo-device called the "interrupt on .IOPOP + device", which delivers a word 2 interrupt when popped from + the I/O pdl and then closes its channel (thus it should be + impossible to perform any operation on this "device" except + .IOPOP). In this way a job can detect the fact that a + foreign job disappeared while it was pushed. + + A procedure which executes a .UCLOSE receives + an I/O channel error interrupt (%PIIOC, bit 1.9 of the + .PIRQC user variable) if the specified channel + does not have an immediately inferior procedure + open on it. + +.UDISMT ac, micro-tape dismount + ;skip if successful + + The specified accumulator should contain a micro-tape + drive number. If the uuo succeeds, the directory + is written back onto the micro-tape and excised from + the system's memory. The micro-tape is then physically + dismounted (this is known as "flapping" the tape, since + when it runs off the reel it goes flap, flap). + Micro-tapes should not be manually dismounted, for this + will cause the directories to get out of phase, messing + up that micro-tape and the next one to use that drive. + The .UDISMT will fail if any files are still + open on the micro-tape, or if someone else has the + drive assigned to him. + DDT makes this available via its command :FLAP. + See also the FLAP symbolic system call. + +.UINIT ac, initialize micro-tape + ;skip if successful + + The specified accumulator should contain a micro-tape + drive number. If the uuo succeeds, the directory + of the micro-tape is initialized (containing no files). + The uuo fails if the drive does not exist, or if the + drive is not assigned to the user whose job is trying + to do the .UINIT. + See the .ASSIGN and .DESIGN uuos. + +.UPISET ac, OBSOLETE user priority interrupt set + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by .SUSET of .PICLR + and/or the .DISMISS uuo and the DISMIS symbolic system + call. + + The value of the ac is converted to -1 or 0 on the basis + of bit 4.9; this value is then exchanged with the .PICLR + user variable for the executing job. Thus the accumulator + gets the old value of .PICLR even as it specifies a + new value. This allows enabling and disabling of + interrupts. + +.USET chnum,[uset spec] set (or get) user variable + + This uuo is used to inspect or alter the user variables + of a job open on channel , which may be a channel + open on the USR or BOJ device. + See ITS USETS for further information on .USET and .SUSET. + +.UTNAM ac, set micro-tape name + ;skip if successful + + The specified accumulator should contain a micro-tape + drive number in the right half and a three character + sixbit name in the left half. If the uuo succeeds, + the name of the micro tape will be changed to the one + specified. The uuo fails if there is no such drive, + if it is in .UBLAT mode, or if it is assigned + to another user. + The name of a micro-tape can be examined with the .RCHST uuo. + +.UTRAN loc user interrupt bit translate + ;skip if successful + + + The effective address of .UTRAN must be a three-word + block: + loc: bit,, ;interrupt bit of inferior + 0 ;uname returned here + 0 ;jname returned here + + The first word should be all zero, except for one + of bits 3.1-3.8; these correspond to inferior + interrupt bits in the .IFPIR user variable. + If the job executing job has an inferior for that + interrupt bit, .UTRAN stores the uname and jname + of the inferior in the second and third words and skips; + otherwise it fails to skip. + + DDT uses this to find jobs which have been :FORGET'ed, or + accidentally created by open's of the USR: device via :PRINT + etc. Normally, superiors should keep track of the interrupt bit + and job names when the job is created, and this UUO should be + used only for exceptional cases. + + See the .IFPIR, .UNAME, .JNAME, and .UIND user variables. + +.VALUE [item] return value to superior + + The job which executes a .VALUE receives a class 1 + interrupt, which stops the job, turns on %PIVAL (bit 1.8) + in its .PIRQC variable, and interrupts its superior. + The word is placed in the .VAL variable of + the executing job (this fact is a historical artifact, + relatively useless now). + + The standard superior procedure (DDT) imposes the + following additional semantics on .VALUE: + If the effective address is zero, then DDT prints + out a message to that effect, and the job is left stopped. + This used to be the standard way to crap out from a grossly + irrecoverable situation (e.g. can't get core, or can't + open the TTY when started). Now .LOSE (q.v.) is preferred. + A typical sequence is: + + GO: .OPEN TTYC,[SIXBIT \ !TTY\] + .VALUE ;unhappy if never got TTY + .CALL [ SETZ ? 'TTYGET ? 1000,,TTYC ? 2000,,A ? 402000,,B ] + .VALUE ;shouldn't lose if .OPEN succeeded + + If the effective address is not zero, it is assumed to + point to an ASCIZ string in the memory of the job + which executed the .VALUE. DDT proceeds to + interpret these characters as if they were typed to + DDT on the console. Thus a job might execute + + .VALUE [ASCIZ \:PROCED :DISOWN V\] + + or something similar, to get itself running again and + disowned from its superior. See the DDT documentation + for specific details on .VALUE. + +.VSCAN + +.VSTST + +.WMAR ac, ANCIENT HISTORY write mar address + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function has been superseded by .SUSET of .MARA. + Its opcode has been recycled as .DCONT. + + The user's mar address variable is set from the + contents of the specified accumulator. + +.WR760 ac, ANCIENT HISTORY write device 760 + + This uuo NO LONGER EXISTS. + It is documented here for historical purposes only. + Its function is obsolete. + Its opcode has been recycled as .DSTEP. + + Device 760 of the PDP-6 used to be used for temporary + direct sense hookups. (For example, the low six + bits controlled lights on the hand of the AMF arm.) + This uuo used the contents of accumulator for a + DATAO to device 760. + +.WSNAME ac, OBSOLETE write system name + + This uuo is ARCHAIC and OBSOLETE. + It is documented here for historical purposes only. + Its use in new programs is to be avoided. + Its function has been superseded by .SUSET of .SNAME. + + The system name for the job (used as a file directory name) + is set to the sixbit contents of accumulator .