APPENDIX A LIST OF ALL IOLIB ROUTINES This appendix lists all the IOLIB routines in several categories. If a category contains some critical routines, these are listed before the rest separated from them by a line. Otherwise, within a category, the routines are listed in alphabetical order. The columns in the table are mostly self-explanatory. The 'DI' column indicates whether the routine requires that ac(D) points to the current file and/or ac(I) points to the IDB. If the 'size' column contains a name instead of a number of words, then the routine is an entry point to the named routine. Many routines are in IOMOD, the basic IO module. The current size of IOMOD is 360 words long. Note that all sizes are given in decimal. If the 'section' column is empty, then this appendix is the defining and only mention of that routine. Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.1 Basic IO Routines --- ----- -- -------- $APDWT APDWT$ D open the current file for appending. If the file is being modified T1 5 6.21 wait for a given period before giving up. Inputs: T1 : sleep seconds,,number of sleeps Returns: error : non-skip o.k. : skip Outputs: T1 : bytes free in block (o.k. only) T1 : IO error code (error only) $APEND APEND$ D open the current file for appending, including setting the buffer T1 21 6.22 pointer for buffered modes. $APEND will not work correctly for files with more liberal protections. Returns: error : non-skip o.k. : skip Outputs: T1 : bytes free in block (o.k. only) T1 : IO error code (error only) $CLOSE CLOSE$ D execute a CLOSE UUO for the current file. All CLOSE bits are zeroed. T1 IOMOD 6.7 Inputs: taken from FDB $CLOS0 CLOSE$ D as $CLOSE but allow caller to set CLOSE bits T1 IOMOD 6.7 Inputs: T1 : CLOSE bits $DELET DELET$ DI delete the current file none IOMOD 6.10 LIST OF ALL IOLIB ROUTINES Page A-2 Returns: error : non-skip (LOOKUP or RENAME failure) o.k. : skip Outputs: T1 : IO error code (error only) $DLBUF DLBUF$ DI return a buffer ring to the memory manager T1 IOMOD 6.18 Inputs: T1 : point to buffer header $ENTER ENTER$ DI execute an ENTER UUO on the current file T1 IOMOD 6.5 Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $ENTE0 ENTER$ DI as $ENTER, but allow the caller to set the protection and create T1 IOMOD 6.5 date/time. $FRCHN FRCHN$ find the first free channel starting with a given channel T1 IOMOD Inputs: T1 : starting channel Returns: none free : non-skip o.k. : skip Outputs: T1 : channel number $GETST GETST$ D get the IO status halfword for the current file T1 IOMOD 6.12 Outputs: T1 : status halfword (rh) $LUKUP LUKUP$ DI execute a LOOKUP on the current file T1 IOMOD 6.4 Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $INPUT INPUT$ DI read a physical record from the current file. T1 IOMOD 6.2 Inputs: taken from FDB Returns: error : non-skip endfile : skip o.k. : double-skip $MKBUF MKBUF$ DI create a ring of buffers for the current file. The size and number T1 IOMOD 6.17 of the buffers is taken from $FDBUF. Inputs: T1 : point to buffer header $FDBUF(D) Returns: no core : non-skip o.k. : skip Outputs: T1 : 0,,ERNEC% (error only) $MTxxx MTxxx$ D execute an MTAPE UUO for the current file. 'xxx' can be any of the T1 35 6.23 codes for MTAPE functions: e.g. MTREW$, MTBSF$. All functions wait for completion using MTWAT$. MTBSF$ skips over EOF unless at BOT. $OPEN OPEN$ DI execute an OPEN UUO for the current file. If the caller does not T1 IOMOD 6.6 specify a channel number, $OPEN chooses the 1st free channel. Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) LIST OF ALL IOLIB ROUTINES Page A-3 $OUTIN OUTIN$ DI write the last physical record read back to the current file. T1 IOMOD 6.3 as $OUTPU, but subtracts 1 from the block number before writing. $OUTPU OUTPU$ DI write a physical record to the current file T1 IOMOD 6.3 Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $RLEAS RLEAS$ DI execute a RELEAS UUO for the current file. Return all buffers to T1 IOMOD 6.8 the heap. Inputs: taken from FDB $RLEA0 RLEAS$ DI as $RLEAS, but don't return rings to memory manager T1 IOMOD 6.8 $RENAM RENAM$ DI change the name and/or other details of the current file T1 IOMOD 6.9 The file must have been opened. Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: IO error code (error only) $SETST SETST$ D set the status halfword for the current file T1 IOMOD 6.13 Inputs: T1 : 0,,status halfword $UPDAT UPDAT$ DI open the current file for updating T1 7 6.19 Returns: error : non-skip (LOOKUP or ENTER failure) o.k. : skip Outputs: T1 : IO error code (error only) $UPDWT UPDWT$ DI open the current file in update mode. If the file is being modified T1 17 6.20 wait for a given period before giving up. Inputs: T1 : sleep seconds,,number of sleeps Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $USETI USETI$ DI position the current file to a given physical record for input T1 IOMOD 6.11 This routine is only effective for disk. Inputs: T1 : last record number,,this record number $USETO USETO$ D position the current file to a given physical record for output T1 IOMOD 6.11 This routine is only effective for disk. Inputs: T1 : last record number,,this record number $XTCAL XTCAL$ D execute a CALLI UUO for the current file, setting physical-only T1 IOMOD 6.15 if required Inputs: T1 : UUO T2 : argument Returns: non-skip : non-skip skip : skip $XTDCL XTDCL$ D execute a device dependent CALLI UUO for the current file. T1 IOMOD 6.16 As $XTCLI, but set DSK if no device given. $XTUUO XTUUO$ D execute a UUO for the current file none IOMOD 6.14 LIST OF ALL IOLIB ROUTINES Page A-4 Inputs: T1 : UUO (without channel number) Returns: non-skip : non-skip skip : skip LIST OF ALL IOLIB ROUTINES Page A-5 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.2 Formatted Read Routines --- --------- ---- -------- $READ READ$ DI read one byte from the current file T1 16 7.5 Returns: error : non-skip endfile : skip o.k. : double-skip Outputs: T1 : byte, right-justified (o.k. only) : IO-error-code (error and endfile only) $$RBYT RBYTE$ DI read one byte from the current file. Fatal errors go to $FTLIO. T1 4 7.6 Returns: endfile : non-skip o.k. : skip Outputs: T1 : byte, right-justified (o.k. only) : IO-error-code (endfile only) $$RCH0 DI read a character from the current file. Fatal errors goto $FTLIO. T1 1 7.7 Returns: endfile : non-skip o.k. : skip Outputs: T1 : character, right justified (o.k. only) : IO error code (endfile only) $$RCHR RCHAR$ DI read a character from the current file and interpret it as T1 1 7.8 command character. Outputs: T1 : character, right justified or endline indicator (0 : ALT, -1 : EOL, -2 : EOF) ------------------------------------------------------------------------------------------------------------------------- $RANCH RANCH$ DI read one character from the current file and test whether it is T1-T4 8 alphanumeric. Returns: not alphanumeric : non-skip alphanumeric : skip Outputs: T1 : character $RANC0 RANCH$ DI as $RANCH, but the character has already been read T1 $RANCH Note: this routine can be used to check whether a character is alphanumeric. Inputs: T1 : character $RCASH RCASH$ DI read a cash value in dollars and cents from the current file. T1-T4 29 The string may appear as '$dddd.cc' with or without the '$'. If there is no '.' or '$', the number is assumed to be cents. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : value in cents $RCAS0 RCASH$ DI as $RCASH but leading character already read T1-T4 $RCASH Inputs: T1 : character LIST OF ALL IOLIB ROUTINES Page A-6 $RCALT DI as $RCCHR, but check first if last character was altmode, and if so, T1 $RCCHR 7.10 return $CHALX without reading another character Outputs: T1 : character $RCCHR DI read a character from the current file as a command character which T1 70 7.10 means that a certain amount of editing is done, to wit: the editing done by $REDCH leading spaces on a line are deleted multiple spaces are compressed trailing spaces are deleted comments are ignored '-' followed by is ignored (continuation line) Outputs: T1 : character $RDATE RDATE$ DI read the date from the current file in the format 'dd-mmm-yy' T1-T4 37 Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : date in internal format $RDAT0 RDATE$ DI as $RDATE but leading character already read T1-T4 $RDATE Inputs: T1 : character $RDECL RDECL$ DI read a signed decimal number from the current file. If the 1st T1-T4 17 character is '#' read the rest as an octal number. The '#' may also follow the sign. Outputs: T1 : delimiting character T2 : number $RDEC0 RDECL$ DI as $RDECL but leading character already read T1-T4 $RDECL Inputs: T1 : character $RDECM RDECM$ DI read a decimal number (+ possible multiplier) from the current T1-T4 3 file. The number is as $RDECL, but may have a multiplier, 'K' kilo, 'M' mega or 'G' giga. Note that 1K = 1000, not 1024. Outputs: T1 : delimiting character T2 : number $RDCM0 RDECM$ DI as $RDECM but leading character already read T1-T4 $RDECM Inputs: T1 : character $RDVIC RDVIC$ DI read a device name from the current device. $RDVIC insists on a T1-T3 14 terminating ':'. Null names are forbidden. Returns: error : nonskip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : device name in SIXBIT $RDVI0 RDVIC$ DI as for $RDVIC but enter with the leading character already read T1-T4 $RDVIC Inputs: T1 : ASCII character $REDCH REDCH$ DI read a character from the current file and perform some basic T1 24 7.9 editing: endfile is converted to ^Z LIST OF ALL IOLIB ROUTINES Page A-7 , , & are ignored is converted to & are converted to is converted to -1 is converted to 0 ^C and ^Z are converted to -2 Outputs: T1 : character $REDC0 REDCH$ DI as $REDCH but the character has already been read T1 $REDCH 7.9 Inputs: T1 : character $RFILE RFILE$ DI read a filename from the current file. The filename may T1-T4 170 7.11 contain wild characters, and may include standard switches and switches defined by the caller. $RFILE remembers and applies sticky parts of filenames. Returns: error : nonskip o.k. : skip Outputs: T1 : delimiting character (o.k. return) : syntax error code (error return) T2 : flags,,point to FDB containing file details $RFIL0 RFILE$ DI as for $RFILE, but the FDB and the user switches may be given T1-T4 $RFILE 7.11 Inputs: T1 : point to switch tables T2 : length,,point to FDB $RKWRD RKWRD$ DI read a Kword value from the current file in the format 'nnnx', where T1-T4 11 x maybe 'K' or 'P' or blank. e.g. 20P, 13K, 128. Default is K. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : value in words $RKWR0 RKWRD$ DI as $RKWRD but leading character already read T1-T4 $RKWRD Inputs: T1 : character $RNAME RNAME$ DI read an alphanumeric word from the current file. Only the 1st T1-T4 11 6 characters are remembered. Outputs: T1 : delimiting character T2 : word of SIXBIT characters $RNAM0 RNAME$ DI as $RNAME but leading character already read T1-T4 $RNAME Inputs: T1 : charatcer $ROCTL ROCTL$ DI read a signed octal number from the current file. If the number T1-T4 17 terminates with a period, treat the number as if it had been decimal. Outputs: T1 : delimiting character T2 : number $ROCT0 ROCTL$ DI as $ROCTL but leading character already read T1-T4 $ROCTL Inputs: T1 : character $ROCTM ROCTM$ DI read an octal number (+ possible multiplier) from the current T1-T4 3 file. The number is as $ROCTL, but may have a multiplier, 'K' kilo, 'M' mega or 'G' giga. Note that 1K = 1000 octal or 512 decimal. LIST OF ALL IOLIB ROUTINES Page A-8 Outputs: T1 : delimiting character T2 : number $ROCM0 ROCTM$ DI as $ROCTM but leading character already read T1-T4 $ROCTM Inputs: T1 : character $RPATH RPATH$ DI read a path specification from the current file. The spec. may T1-T4 49 7.12 contain wild numbers and SFDs. Returns: error : nonskip o.k. : skip Outputs: T1 : delimiting character (o.k. only) syntax error code (error only) T2 : PPN or point to path spec. block T3 : PPN mask or point to path mask block T4 : flags $RPAT0 RPATH$ DI as $RPATH but enter with leading '[' already read T1-T4 $RPATH 7.12 Inputs: T1 : ASCII character $RPJPG RPJPG$ DI read a project-programmer pair from the current file (no []). T1-T4 43 7.12 Both project and programmer may be wild. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : PPN T3 : wildcard mask T4 : flags $RPJP0 RPJPG$ DI as $RPJPG but leading character already read. T1-T4 $RPJPG 7.12 Inputs: T1 : character $RPPN RPPN$ DI read a PPN in the form [PPN] from the current device. The PPN T1-T4 12 7.12 may be wild. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) syntax error code (error only) T2 : PPN T3 : wildcard mask T4 : flags $RPPN0 RPPN$ DI as $RPPN but leading '[' already read T1-T4 $RPPN 7.12 Inputs: T1 : character $RREAL RREAL$ DI read a signed floating point number from the current file. T1-T4 39 The number may have a signed exponent as Esnn. Outputs: T1 : delimiting character T2 : number $RREA0 RREAL$ DI as $RREAL but leading character already read T1-T4 $RREAL Inputs: T1 : character $RSWIT RSWIT$ DI read a switch spec. from the current file in the form T1-T4 122 7.13 '/name:value', where the name is a switch name either defined by the caller, or a standard name, and the value is optional and may be in LIST OF ALL IOLIB ROUTINES Page A-9 one of a number of predefined forms. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) $RSWI0 RSWIT$ DI as $RSWIT but leading '/' already read T1-T4 $RSWIT 7.13 Inputs: character $RTDAY RTDAY$ DI read a date and time from the current file in the format T1-T4 16 'dd-mmm-yy hh:mm:ss'. Either date or time may be omitted. Assumptions are today, and midnight. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character : syntax error code (error only) T2 : time in milliseconds T3 : date in internal format $RTDA0 RTDAY$ DI as $RTDAY but leading character already read T1-T4 $RTDAY Inputs: T1 : character $RTIME RTIME$ DI read the time from the current file in the format 'hh:mm:ss' T1-T4 22 Trailing fields may be omitted. Returns: error : non-skip o.k. : skip Outputs: T1 : delimiting character (o.k. only) : syntax error code (error only) T2 : time in milliseconds $RTIM0 RTIME$ DI as $RTIME but leading character already read T1-T4 $RTIME Inputs: T1 : character $RUCCH RUCCH$ DI read a character from the current file and convert lower case T1 6 alphabetics to upper case. Note: this routine may be called to convert a character to upper case. Outputs: T1 : character $RUCC0 RUCCH$ DI as $RUCCH but character already read T1 $RUCCH Inputs: T1 : character $RWNAM RWNAM$ DI read a name from the current file, where the name can include T1-T4 65 wildcards. The name is treated as alphanumeric and converted to SIXBIT unless the leading character is '#' when it is octal with a possible multiplier, and is converted to binary. Outputs: T1 : delimiting character T2 : word (SIXBIT or binary) T3 : wildcard mask T4 : flags $RWNA0 RWNAM$ DI as $RWNAM but leading character already read T1-T4 $RWNAM Inputs: T1 : character $RWNUM RWNUM$ DI as $RWNAM, but octal is assumed unless the 1st character is alpha. T1-T4 $RWNAM $RWNU0 RWNUM$ DI as $RWNUM but leading character already read T1-T4 $RWNAM LIST OF ALL IOLIB ROUTINES Page A-10 Inputs: T1 : character $RWORD RWORD$ DI read a word of characters from the current file delimited by or T1-T4 12 any non-SIXBIT character. Only the 1st 6 characters are remembered Outputs: T1 : delimiting character T2 : word of SIXBIT characters $RWOR0 RWORD$ DI as $RWORD, but leading character already read T1-T3 $RWORD Inputs: T1 : character LIST OF ALL IOLIB ROUTINES Page A-11 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.3 Formatted Write Routines --- --------- ----- -------- $WRITE WRITE$ DI write one byte to the current file. T1 14 7.2 Inputs: T1 : byte, right-justified Returns: error : non-skip o.k : skip Outputs: T1 : IO-error-code (error return only) $$WBYT WBYTE$ DI write one byte to the current file. Fatal errors go to $FATAL. T1 1 7.3 Inputs: T1 : byte, right justified $$WCHR WCHAR$ DI write one character to the current file. Fatal errors go to $FATAL. T1 $$WBYT 7.4 Inputs: T1 : ASCII character, right justified ------------------------------------------------------------------------------------------------------------------------- $WADDR WADDR$ DI write the contents of a halfword (e.g. an address) as 6 octal T1-T3 7 digits, zero filled Inputs: T1 : binary halfword (rh) $WBWRD WBWRD$ DI write a number as blocks (128 words) rounded up T1-T3 $WWWRD Inputs: T1 : number of words $WCASH WCASH$ DI write a sum in dollars and cents in the format '$ddddd.cc' T1-T3 15 Inputs: T1 : value in cents $WCRLF WCRLF$ DI write a none 5 Inputs: none $WCWRD WCWRD$ DI write a number as a number of words of core choosing kwords or words T1-T3 $WWWRD Inputs: T1 : number of words $WDATE WDATE$ DI write a date in the format 'dd-mmm-yy' T1-T3 15 Inputs: T1 : date in internal form $WDECL WDECL$ DI write a number in decimal T1-T3 $WRADX Inputs: T1 : number $WDNOW WDNOW$ DI write the date today in the format 'dd-mmm-yy' T1-T3 $WDATE Inputs: none $WDVIC WDVIC$ DI write a device name to the current file as 'nnn:' T1-T2 3 Inputs: T1 : device name in SIXBIT $WFCHA WFCHA$ DI write a character exactly, by flagging control characters with ^, T1-T3 34 lower case characters with ', and naming special control characters. e.g. ^A, 'Z, Inputs: T1 : ASCII character, right justified $WFILE WFILE$ DI write a filename to the current file T1-T2 22 LIST OF ALL IOLIB ROUTINES Page A-12 Inputs: T1 : pointer to FDB containing filename $WKWRD WKWRD$ DI write a number as Kwords rounded up T1-T3 $WWWRD Inputs: T1 : number of words $WNAME WNAME$ DI write a name which maybe in XWD format T1-T2 3 Inputs: T1 : name in SIXBIT $WOCTL WOCTL$ DI write a number in octal T1-T3 $WRADX Inputs: T1 : number $WPATH WPATH$ DI write a path specification in []s T1-T3 18 Inputs: T1 : PPN or pointer to PATH. UUO block $WPWOR WPWOR$ DI write a character followed by a word of SIXBIT characters T1-T2 $WWORD Inputs: T1 : ASCII prefix character T2 : word of SIXBIT characters $WPWRD WPWRD$ DI write a core size in pages rounded up T1-T3 $WWWRD Inputs: T1 : size in words $WRADX WRADX$ DI write an integer in a given radix T1-T3 18 Inputs: T1 : number T2 : radix $WREAL WREAL$ DI write a word as a floating point number (F format if T1-T4 54 0.1 .le. n .ge. 1.0 and E format otherwise) Inputs: T1 : number $WTDAY WTDAY$ DI write a time and date in format 'hh:mm:ss dd-mmm-yy' T1-T3 6 Inputs: T1 : time in milliseconds T2 : date in internal format $WTDNW WTDNW$ DI write the time and date now (i.e. write a timestamp) T1-T3 4 Inputs: none $WTEXT WTEXT$ DI write a text string to the current file T1 9 WLINE$ Inputs: T1 : pointer to ASCIZ text string $WTIME WTIME$ DI write a time in hours and minutes 'hh:mm' T1-T3 8 Inputs: T1 : time in milliseconds $WTIMS WTIMS$ DI write a time accurate to seconds 'hh:mm:ss' T1-T3 9 Inputs: T1 : time in milliseconds $WTMTS WTMTS$ DI write a time accurate to tenths of a second 'hh:mm:ss.t' T1-T3 8 Inputs: T1 : time in milliseconds $WTNOW WTNOW$ DI write the time now as 'hh:mm:ss' T1-T3 $WTIMS Inputs: none $WVERS WVERS$ DI write out all fields of a version number in standard format T1-T3 25 Inputs: T1 : version number $WWORD WWORD$ DI write out a word as 6 SIXBIT characters T1-T2 7 Inputs: T1 : word of SIXBIT characters LIST OF ALL IOLIB ROUTINES Page A-13 $WWWRD WWWRD$ DI write a number as a number of words e.g. 123W T1-T3 18 Inputs: T1 : number of words $WXWD WXWD$ DI write a word as two halfwords, blank filled, separated by , T1-T3 8 Inputs: T1 : word $W2FIL W2FIL$ DI write a 2 digit number with a given fill character T1-T3 8 Inputs: T1 : number T2 : ASCII fill character $W2FLB W2FLB$ DI write a number in 2 digits filled with a space T1-T3 $W2FIL Inputs: T1 : number $W2FL0 W2FL0$ DI write a number in 2 digits filled with a zero T1-T3 $W2FIL Inputs: T1 : number LIST OF ALL IOLIB ROUTINES Page A-14 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.4 Core Management Routines --- ---- ---------- -------- $$ALLC ALLOC$ I allocate a block of free core. This routine exists to decide between T1 2 5.1 dynamic and static core allocation. Inputs: T1 : number of words required Returns: no core : non-skip o.k. : skip Outputs: T1 : point to word 1 of allocated block (o.k. only) : 0,,ERNEC% (error only) $$DALC DEALC$ I deallocate a block of core by returning it to the pool of T1 $$ALLC 5.1 free blocks Inputs: T1 : point to word 1 of core block -------------------------------------------------------------------------------------------------------------------------- $CRGET I allocate a block of core from above .JBFF, by moving .JBFF and T1 17 5.3 obtaining more core from the monitor if need be. Inputs: T1 : size of chunk required Returns: no core : non-skip o.k. : skip Outputs: T1 : point to 1st word of chunk (o.k. only) : 0,,ERNEC% (error only) $CRREL I it is not possible to deallocate a chunk using static management. none $CRGET 5.3 This call is a noop. $HPGET I allocate a block of core from a linked list of free chunks of core. T1 108 5.2 If there is insuffient space, first garbage collect the list and then get more space from the monitor. Inputs: T1 : size of chunk required or 0 for largest available Returns: no core : non-skip o.k. : skip Outputs: T1 : point to 1st word of chunk : 0,,ERNEC% (error only) $HPREL I deallocate a chunk (or chunks) of core by linking it back into T1 $HPGET 5.2 the chain of free chunks. Several chunks may be deallocated together chaining them through their -1th word. Inputs: T1 : point to 1st word of chunk LIST OF ALL IOLIB ROUTINES Page A-15 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.5 Data Block Manipulation Routines --- ---- ----- ------------ -------- $CLRFD CLRFD$ I create a new standard length FDB, clear it, set the length in $FDCNT T1 20 MAKFD$ and initialise $FDBFR and $FDSNC to -1. Returns: no core : non-skip o.k. : skip Outputs: T1 : point to FDB (o.k. only) : 0,,ERNEC% (error only) $CLRF0 CLRFD$ I as $CLRFD, but allow caller to specify address and/or length of FDB T1 $CLRFD If the address is given, the old FDB is used. Inputs: T1 : length,,address of FDB $INIID I clear the IDB, set the verbosity to standard, set MAXCOR to all core I 10+19 and set the last command character to endline. This routine contains the IDB. $LOSFD LOSFD$ I deallocate the space occupied by an FDB. If $FDPPN points to a path T1 7 block, the path block is deallocated also. This routine only succeeds if dynamic core management is used. Inputs: T1 : point to 1st word of FDB $PATCH patch area loaded if FT$DBG is on none 0+200 $STACK pushdown stack and pointer thereto none 1+100 3.8 LIST OF ALL IOLIB ROUTINES Page A-16 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == ========== ========= ====== ======= A.6 Tempcore Routines --- -------- -------- $TMPDL TMPDL$ DI delete a tempcore file from core and/or disk T1-T3 13 8.4 It is not an error if the file does not exist. Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $TMPFD TMPFD$ create an FDB for a tempcore file given a 3 character name T1-T4 17 8.2 The name of the file is nnnccc.TMP, where 'nnn' is the job number and 'ccc' is the 3 character name. Inputs: T1 : 3 SIXBIT characters, right justified Outputs: D : point to FDB $TMPIN TMPIN$ DI read 1 block of a tempcore file from core or from disk. If core, T1-T4 31 8.3 set flag FC$TCI to ensure that further calls to $INPUT give endfile return. Inputs: taken from FDB Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) $TMPOU TMPOU$ DI close off a tempcore file. If the file is not yet ENTERed, try to T1-T4 19 8.5 write the file to tempcore. If so, or if tempcore fails, write to disk and release channel. Returns: error : non-skip o.k. : skip Outputs: T1 : IO error code (error only) LIST OF ALL IOLIB ROUTINES Page A-17 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.7 Error Routines --- ----- -------- $ADVIS ADVIS$ I write an advisory error message. Call as for $ERROR T1-T4 $ERROR 9.5 Inputs: as for $ERROR Returns: yes $ERROR I write an error message to the error file whose point is in $IDEFD(I) T1-T4 57 9.4 Full documentation may be found in section 9.4 Inputs: T1 : message point and flags T2 : value T3 : UUO or error type name (optional) Returns: depends; yes if warning, no if fatal $FATAL FATAL$ I write a fatal error message. Call as for $ERROR. T1-T4 $ERROR 9.5 Inputs: as for $ERROR Returns: never; traps to $$FERR $FTLIO FATAL$ DI write a fatal error message for the current file based on an IO error T1-T4 21 9.7 code, returned by basic IO module routines Inputs: T1 : UUO-code,,error code $FTLSY FATAL$ I write a fatal error message based on an error code returned by T1-T4 8 9.8 the command scanning subroutines. Inputs: T1 : syntax error code T2 : value $WARN WARN$ I write a warning error message. Call as for $ERROR T1-T4 $ERROR 9.5 Inputs: as for $ERROR Returns: yes $WRNIO WARN$ DI write a warning error message about the current file. A code is T1-T4 $FTLIO 9.7 returned by the routines in the basic IO module. Inputs: T1 : UUO-code,,error-code $WRNSY WARN$ I write a warning error about bad syntax, given a code returned T1-T4 $FTLSY 9.8 by the command scanners on error. Inputs: T1 : syntax error code T2 : value $$FERR exit to monitor mode after clearing input buffer. If CONTINUEd, T1 5 9.9 try to start at start address, if fail, exit. Returns: only to program start address LIST OF ALL IOLIB ROUTINES Page A-18 Acs Size Routine Macro DI Description destroyed (words) Section ======= ===== == =========== ========= ======= ======= A.8 Utility Routines --- ------- -------- $POPJ execute a POPJ P, instruction none IOMOD $POPJ1 increment the return address and POPJ, thus doing a skip return none IOMOD $POPJ2 double increment the return address and POPJ, thus doing a double none IOMOD skip return. Cannot be used with $SAVEn. $TOPJ POP the top of the stack into T1 and POPJ return T1 IOMOD $TOPJ1 POP the top of the stack into T1 and skip POPJ return T1 IOMOD $TOPJ2 POP the top of the stack into T1 and double skip POPJ return T1 IOMOD Cannot be used with $SAVEn. $XOPJ POP the top off the stack (to nowhere) and POPJ return none IOMOD $XOPJ1 POP the top off the stack and skip POPJ return none IOMOD -------------------------------------------------------------------------------------------------------------------------- $RESTT RESTT$ restore T1-T4 from the stack T1-T4 $SAVET $SAVET SAVET$ save T1-T4 on the stack none 13 $SAVE1 SAVE1$ called on entry to a subroutine to save P1 and to restore P1 on exit none IOMOD The caller is called as a subroutine so that his eventual POPJ returns to $SAVE1 to restore P1. POPJ and POPJ1 are catered for $SAVE2 SAVE2$ as $SAVE1, but P1 and P2 are saved and restored none IOMOD $SAVE3 SAVE3$ as $SAVE1, but P1, P2 and P3 are saved and restored none IOMOD $SAVE4 SAVE4$ as $SAVE1, but P1, P2, P3 and P4 are saved and restored none IOMOD -------------------------------------------------------------------------------------------------------------------------- $BATCH BATCH$ determine whether the job's terminal is a PTY none 6 Returns: not PTY : non-skip PTY : skip $BEGCC BEGIn$ DI initialise a program and set up CCL tempcore input file if entry T1-T2 10 3.9 was at 'start+1'. $BEGIN BEGIN$ DI initialise a program T1-T2 5 3.9 $CLBUF CLBUF$ DI clear command input by clearing the TTCALL TTY buffer or by reading T1 18 to endline. LIST OF ALL IOLIB ROUTINES Page A-19 $CLLIN CLLIN$ DI clear the current command input line none 5 $CNVNU CNVNU$ return the universal date/time now T1-T4 $CNVUI As $CNVIU but uses the date/time from the monitor $CNVUI CNVUI$ convert a date/time in universal format to internal format T1-T4 102 Inputs: T1 : universal date,,time Outputs: T1 : time in milliseconds T2 : date in internal format $CNVIU CNVIU$ convert internal date/time to universal format T1-T4 $CNVUI Inputs: T1 : time in milliseconds T2 : date in internal format Outputs: T1 : universal date,,time $FDTTY FDTTY$ DI check whether the current file is a terminal or not. none 6 Returns: not TTY : normal TTY : skip $MATCH MATCH$ match a SIXBIT name against a table of names, selecting T1-T3 36 10.1 either an exact match or an unambiguous abbreviation. A name in the table may begin with '*' to say that the first letter is enough to identify this name. Inputs: T1 : IOWD length,address of table T2 : SIXBIT name to match Returns: error, no or several matches o.k. :skip Outputs: T1 : flag,,table index. lh=0 if exact, lt 0 if not (o.k. only) : lt 0 : no match; ge 0 :several (error only) $MONRT MONRT$ return to monitor mode by EXIT 1, unless job not logged in. Then T1 13 use LOGOUT. Return to caller on 'CONTINUE'. Return: only if CONTINUE is typed at monitor mode $SLEEP SLEEP$ send the job to sleep for a specified period using HIBER or SLEEP T1 9 Inputs: T1 : sleep time in seconds $ZERO ZERO$ zero a chunk of core by BLT none 10 Inputs: T1 : length,,address APPENDIX B IOLIB MACROS This appendix is a complete list of all IOLIB macros. The macros are listed under several headings but within those headings the macros are listed in alphabetical order. The macros that are useful in writing the program, rather than macros which merely call routines, are listed first. The macro name is given, along with the names of any routines called, a brief description, the call, the number of lines of inline code generated, and a further reference. The descriptions in this appendix are not as full as those of the routines in appendix A, and the user should refer to appendix A if he needs clarification. Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.1 Programming Macros --- ----------- ------ BEGIN$ $BEGIN perform all program initialisation including concealed BEGIN$ tfn 5 3.9 mode entry points, CCL entry points, RESET UUO, stack setup, IDB initialisation and command FDB setup 'tfn' 3 character tempcore filename (otherwise program name) CMDFD$ set ac(D) to point to the current command file. CMDFD$ 1 Load ac(D) from $IDIFD(I). ERRFD$ set ac(D) to point to the current error file. ERRFD$ 1 Load ac(D) from $IDEFD(I). FDESC$ create an inline FDB and fill it with values FDESC$ dv,nm,ex,pt,md,ln $LNFDB+ 3.12 'dv' device name 'nm' file name 'ex' extension name 'pt' path spec. in <>, e.g. <104,427> 'md' IO mode 'ln' length of FDB, if longer than standard HISEG$ if first call of program, create 'TWOSEG' and HISEG$ 0 3.11 'RELOC 400000' pseudo-ops to start two-segmenting otherwise, if assembling high segment code, do nothing; otherwise, set outstanding literals into low segment and switch segments IOLIB MACROS Page B-2 JBREN$ load .JBREN (reenter address) with the given address JBREN$ ac,adr 2 The user may choose the temporary ac. 'ac' temporary ac to be used 'adr' reenter address JBVER$ set the version number defined by the $$V??? symbols JBVER$ 0 3.14 into .JBVER in DEC format LDFD$ move an FDB point into ac(D) LDFD$ adr 1 'adr' address of FDB point LDFDI$ move immediate an FDB point into ac(D) LDFDI$ adr 1 'adr' FDB point LOSEG$ if assembling code into the low segment, do nothing LOSEG$ 0 3.11 otherwise, set all outstanding literals into high segment and switch segments MAKFD$ write code to create or initialise an FDB and MAKFD$ dv,nm,ex,pt,md,ln,ad 5+ 3.13 fill the FDB with values. 'dv' device name 'nm' file name 'ex' extension name 'pt' path spec. inside <>, e.g. <104,427,SF1> 'md' IO mode 'ln' length of FDB if non-standard 'ad' address of FDB; if none make a new FDB if an ac, use it as point to address MSGFD$ set ac(D) to point to the current message file. MSGFD$ 1 Load ac(D) from $IDOFD(I). PATCH$ increment $$VEDT for each patch; increment $$VMIN by one PATCH$ 0 3.14 and make a symbol '$n' for each pn to be used if adding and subtracting code with IFDEF and IFNDEF 'p1,..pn' patch numbers TRMFD$ set ac(D) to point to the job's terminal. Zero ac(D). TRMFD$ 1 VERSN$ define values for the symbols, $$VMAJ, $$VMIN VERSN$ vm,ve,vw 0 3.14 $$VEDT and $$VCOD. These symbols are used by the other version number macros and are explained in section 3.14. 'vm' is the major version number 've' is the edit number (updated by PATCH$) 'vw' is the who last edited code the minor version is set to zero (updated by PATCH$) The versions of C and IO used are PRINTXed during assembly. VTEXT$ creates an ASCIZ string of the version number from VTEXT$ 1+ 3.14 the version number symbols e.g. '5B(107)-1' IOLIB MACROS Page B-3 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.2 Basic IO Macros --- ----- -- ------ APDWT$ $APDWT as APEND$ but on 'file being modified' failure APDWT$ 1 6.21 wait and try again a given number of times error return APEND$ $APEND open a file for appending, setting buffer pointers APEND$ 1 6.22 appropriately. Only works for append mode files. error return CLOSE$ $CLOSE execute a CLOSE UUO. If the call has an argument, two CLOSE$ bits 1!2 6.7 instructions are generated, and the arguments are used as CLOSE UUO bits. 'bits' CLOSE UUO bits DELET$ $DELET delete the current file DELET$ 1 6.10 error return DLBUF$ $DLBUF deallocate a buffer ring DLBUF$ 1 6.18 ENTER$ $ENTER Execute an ENTER UUO for the current file. If the ENTER x 1 6.5 macro has an argument then the UUO may change the error return create date/time field 'x' any argument (just a flag) FRCHN$ $FRCHN locate the first free software IO channel starting FRCHN$ 1 with the contents of ac(T1) error return GETST$ $GETST get the IO status halfword from the monitor. The status GETST$ 1 6.12 returned in ac(t1) LUKUP$ $LUKUP execute a LOOKUP UUO for the current file. LUKUP$ 1 6.4 error return INPUT$ $INPUT execute an INPUT UUO for the current file. Make a INPUT$ 1 6.2 buffer ring and find the required record if needed error return endfile return MKBUF$ $MKBUF build a buffer ring (see Appendix A) MKBUF$ 1 6.17 error return MTxxx$ $MTxxx execute an MTAPE UUO for the current file. MTxxx$ 1 6.23 'xxx' may be any of the codes for the various MTAPE functions, e.g. MTREW$ executes a rewind. All functions are followed by an MTWAT$ to wait for completion. MTBSF$ skips over the EOF unless at BOT. OPEN$ $OPEN execute an OPEN UUO for the current file, setting OPEN$ 1 6.6 defaults and finding a free channel error return OUTIN$ $OUTIN output the last record input (to a disk device) OUTIN$ 1 6.3 error return IOLIB MACROS Page B-4 OUTPU$ $OUTPU execute an OUTPUT UUO for the current file OUTPU$ 1 6.3 making a buffer ring and finding required record if error return necessary RLEAS$ $RLEAS execute a RELEAS UUO for the current file and RLEAS$ x 1 6.8 deallocate buffers 'x' flag. If given, don't deallocate buffers. RENAM$ $RENAM execute a RENAME UUO for the current file. The file RENAM$ 1 6.9 have been LUKUP$ed first. error return SETST$ $SETST set the IO channel status from ac(T1) into the monitor SETST$ 1 6.13 UPDAT$ $UPDAT open a file for updating UPDAT$ 1 6.19 error return UPDWT$ $UPDWT as UPDAT$, but on 'file being modified' failure UPDWT$ 1 6.20 wait and try again a given number of times error return USETI$ $USETI find the required record for disk files. On entry USETI$ 1 6.11 ac(T1) contains 'last-record,,next record' USETO$ $USETO find the required record for output for disk files USETO$ 1 6.11 On entry ac(T1) contains 'last-record,,this-record' XTCAL$ $XTCAL execute a CALLI UUOZ for the current file, setting XTCAL$ uuo 2 6.15 physical-only if required error return 'uuo' CALLI UUO to be executed (arg in ac(T2)) XTDCL$ $XTDCL execute a device dependent CALLI UUO for the current XTDCL$ uuo 2 6.16 file. error return 'uuo' CALLI UUO to be executed XTUUO$ $XTUUO execute an IO UUO for the current file XTUUO$ uuo 2 6.14 'uuo' UUO name error return IOLIB MACROS Page B-5 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.3 Read macros --- ---- ------ RBYTE$ $$RBYT read a byte, and trap to $FATAL on error RBYTE$ 1 7.6 endfile RCALT$ $RCALT read a character with command editing, but if last RCALT$ 1 7.10 character was altmode, return altmode instead. RCCHR$ $RCCHR read a character with command editing RCCHR$ 1 7.10 RCHAR$ $$RCHR read a character with command editing RCHAR$ 1 7.8 READ$ $READ read a byte READ$ 1 7.5 error return endfile ----------------------------------------------------------------------------------------------------------------------------- The following macros will accept an argument. If an argument is provided it is assumed to be the address of the leading character of the string to be read. If that address is ac(T1), the macro merely assembles a jump to the secondary entry point of the routine. If the address is elsewhere, then the macro assembles an extra instruction to move the character into ac(T1). If there is no argument, the macro assembles a PUSHJ to the routine as described in appendix A. All the macros given below return the delimiting character in ac(T1) and the value read in ac(T2). Some routines return a wildcard mask in ac(T3), and a few return extra data in ac(T4). Refer to the description of the routines for specific details of parameters. RANCH$ $RANCH read a character and check whether alphanumeric RANCH$ ac 1!2 error return means not alphanumeric error return RCASH$ $RCASH read a cash value in dollars and cents RCASH$ ac 1!2 error return RDATE$ $RDATE read a date from the current file in the format RDATE$ ac 1!2 dd-mmm-yy. error return RDECL$ $RDECL read a decimal number RDECL$ ac 1!2 RDECM$ $RDECM read a decimal number possibly with a K, M or G RDECM$ ac 1!2 multiplier RDVIC$ $RDVIC read a device name RDVIC$ ac 1!2 REDCH$ $REDCH read a character and perform basic editing REDCH$ ac 1!2 7.9 RFILE$ $RFILE read a file specification into an FDB. Note that this RFILE$ ac 1!2 7.11 macro is different. If there is no argument, there is error return no switch table, and $RFILE creates an FDB. If there is an argument, it is an ac which holds a point to the switch table (possibly zero). If this is ac(T1), no IOLIB MACROS Page B-6 extra code is created. A point to an FDB or zero must be in ac(T2). RKWRD$ $RKWRD read a core size as Kwords or pages RKWRD$ ac 1!2 RNAME$ $RNAME read an alphanumeric name and convert to a SIXBIT word RNAME$ ac 1!2 ROCTL$ $ROCTL read an octal number ROCTL$ ac 1!2 ROCTM$ $ROCTM read an octal number possibled postfixed by a K, M or G ROCTM$ ac 1!2 multiplier. RPATH$ $RPATH read a path specification RPATH$ ac 1!2 7.12 error return RPJPG$ $RPJPG read a project,programmer pair (no []) RPJPG$ ac 1!2 7.12 error return RPPN$ $RPPN read a PPN RPPN$ ac 1!2 7.12 error return RREAL$ $RREAL read a floating point number expressed in FORTRAN E or F RREAL$ ac 1!2 format. RSWIT$ $RSWIT read a switch name and value RSWIT$ ac 1!2 7.13 error return RTDAY$ $RTDAY read a tme and date RTDAY$ ac 1!2 error return RTIME$ $RTIME read a time in the format hh:mm:ss RTIME$ ac 1!2 error return RUCCH$ $RUCCH read a character and convert lower to upper case RUCCH$ ac 1!2 RWNAM$ $RWNAM read a possibly wild name RWNAM$ ac 1!2 RWNUM$ $RWNUM read a possibly wild number (or name if 1st character is RWNUM$ ac 1!2 alphabetic). IOLIB MACROS Page B-7 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.4 Write Macros --- ----- ------ WADDR$ $WADDR write an octal address in 6 digits filled by zeros WADDR$ 1 WBWRD$ $WBWRD write a number as a number of blocks (128 words) WBWRD$ 1 WBYTE$ $$WBYT write a byte but trap to $FATAL on error WBYTE$ 1 7.3 WCASH$ $WCASH write a number of cents as dollars and cents WCASH$ 1 WCHAR$ $$WCHR write character WCHAR$ "c" 1!2 7.4 'c' an ASCII character WCRLF$ $WCRLF write an endline WCRLF$ 1 WCWRD$ $WCWRD write a number as a multiple of core size WCWRD$ 1 which may be P, K or W. WDATE$ $WDATE write a date as dd-mmm-yy WDATE$ 1 WDECL$ $WDECL write a decimal number WDECL$ n 1!2 'n' a positive decimal number WDNOW$ $WDNOW write the date now WDNOW$ 1 WDVIC$ $WDVIC write a device name as 'dev:' WDVIC$ 1 WFCHA$ $WFCHA write a funny character, making code explicit WFCHA$ 1 by flagging control and lower case characters WFILE$ $WFILE write the filename from an FDB WFILE$ 1 WHELP$ $WHELP write a help text WHELP$ 1 WKWRD$ $WKWRD write a core size in Kwords WKWRD$ 1 WLINE$ $WTEXT write a text string adding a WLINE$ 1!2 'text' a string of ASCII characters WNAME$ $WNAME write a name in SIXBIT or halfwords WNAME$ 1 WOCTL$ $WOCTL write an octal number WOCTL$ n 1!2 'n' a positive octal number WPATH$ $WPATH write a path specification (or just PPN) WPATH$ 1 WPWOR$ $WPWOR write a word of SIXBIT characters preceded by an WPWOR$ "c",word 1!2!3 ASCII character. Either argument may be ommitted. 'c' an ASCII character 'word' up to 6 SIXBIT characters IOLIB MACROS Page B-8 WPWRD$ $WPWRD write a core size in pages WPWRD$ 1 WRADX$ $WRADX write a number in a given radix (given in ac(T2)) WRADX$ 1 WREAL$ $WREAL write a floating point number WREAL$ n 1!2 'n' a number in FORTRAN E-format WRITE$ $WRITE write a byte WRITE$ 1 7.2 error return WTDAY$ $WTDAY write time and date as dd-mmm-yy hh:mm WTDAY$ 1 WTDNW$ $WTDNW write time and date now WTDNW$ 1 WTEXT$ $WTEXT write a text string WTEXT$ 1!2 'text' a string of ASCII characters WTIME$ $WTIME write time as hh:mm WTIME$ 1 WTIMS$ $WTIMS write time as hh:mm:ss WTIMS$ 1 WTMTS$ $WTMTS write time as hh:mm:ss.t WTMTS$ 1 WTNOW$ $WTNOW write time now as hh:mm:ss WTNOW$ 1 WWORD$ $WWORD write a word of SIXBIT characters WWORD$ word 1!2 'word' a string of up to 6 characters WWWRD$ $WWWRD write a number as a number of words WWWRD$ 1 WXWD$ $WXWD write a word as two halfwords WXWD$ 1 W2FIL$ $W2FIL write 2 digits, filled on left W2FIL$ 1 W2FLB$ $W2FLB write 2 digits, filled on left by space W2FLB$ 1 W2FL0$ $W2FL0 write 2 digits, filled on left by zero W2FL0$ 1 IOLIB MACROS Page B-9 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.5 Core Management Macros --- ---- ---------- ------ ALLOC$ $$ALLC call the memory manager to allocate space ALLOC$ 1 5.1 error return DEALC$ $$DALC call the memory manager to deallocate space DEALC$ 1 5.1 B.6 Data Block Manipulation Macros --- ---- ----- ------------ ------ CLRFD$ $CLRFD maybe create, but certainly zero and initialise an CLRFD$ adr 1!2 FDB. If the macro has an argument use this as the address error return (no core) of the FDB. 'adr' address of FDB LOSFD$ $LOSFD deallocate space occupied by FDB. Deallocates path LOSFD$ 1 block, if any, too B.7 Tempcore Macros --- -------- ------ TMPDL$ $TMPDL delete a tempcore file TMPDL$ 1 8.4 error return TMPFD$ $TMPFD create an FDB for a tempcore file TMPFD$ 1 8.2 TMPIN$ $TMPIN read a tempcore file TMPIN$ 1 8.3 error return TMPOU$ $TMPOU write and close a tempcore file TMPOU$ 1 8.5 error return IOLIB MACROS Page B-10 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.8 Error Macros --- ----- ------ ADVIS$ $ADVIS write an advisory message to the error file ADVIS$ ,arg,ec,uc 1 9.6 'text' the text of the message 'arg' a code for the type of argument 'ec' a 3 character code prefaciing the message 'uc' a 6 character UUO name FATAL$ $ERROR write a fatal error message to the error file and FATAL$ ,arg,ec,uc 1 9.6 exit through $$FERR. 'text' the text of the message 'arg' a code for the type of the argument 'ec' a 3 character code which prefixes the message 'uc' a 6 character UUO name WARN$ $ERROR send a warning error message to the error file WARN$ ,arg,ec,uc 1 9.6 'text' the text of the error message 'arg' a code for the data type of the argument 'ec' a 3 character code prefacing the message 'uc' a 6 character UUO name IOLIB MACROS Page B-11 Inline Macro Routine Description Call code Section ===== ======= =========== ==== ====== ======= B.9 Utility Routine Macros --- ------- ------- ------ BATCH$ $BATCH discover whether job running from PTY BATCH$ 1 not PTY return CLBUF$ $CLBUF clear buffer for job's terminal; read to CLBUF$ 1 endline otherwise CLLIN$ $CLLIN read to endline CLLIN$ 1 CNVNU$ $CNVNU return now as a Universal date/time CNVNU$ 1 CNVUI$ $CNVUI convert Universal date/time to internal CNVUI$ 1 CNVIU$ $CNVIU convert internal date/time to Universal CNVIU$ 1 FDTTY$ $FDTTY check whether the current file in a terminal FDTTY$ 1 not TTY TTY MATCH$ $MATCH match a SIXBIT name against a table MATCH$ 1 10.2 MONRT$ $MONRT return to monitor mode MONRT$ 1 RESTT$ $RESTT restore T1-T4 from the stack RESTT$ 1 SAVET$ $SAVET save acs T1-T4 on the stack SAVET$ 1 SAVE1$ $SAVE1 preserve ac(P1) during a subroutine SAVE1$ 1 SAVE2$ $SAVE2 preserve acs P1-P2 during a subroutine SAVE2$ 1 SAVE3$ $SAVE3 preserve acs P1-P3during a subroutine SAVE3$ 1 SAVE4$ $SAVE4 preserve acs P1-P4 during a subroutine SAVE4$ 1 SLEEP$ SLEEP sleep by HIBER or SLEEP UUO for given time SLEEP$ ac 1!2 Time may be give in 'ac'. ZERO$ $ZERO zero a chunk or memory ZERO$ 1 APPENDIX C CONTENTS OF THE FDB Index Symbol Description ===== ====== =========== C.1 Words within the FDB --- ----- ------ --- --- 0 $FDFPT forward pointer. The left half is used to link FDBs together to form a linked list. The left half is unused but reserved for IOLIB. 1 $FDCHN channel number. The right half contains the software IO channel number in bits 29 to 32. The user may select a channel number but normally he will let IOLIB do this for him. The left half contains flags showing the status of the IO process on this file. The flags are described below. 2 $FDTYP argument returned by a DEVTYP UUO on the channel. Set by the $OPEN routine. 3 $FDNBK current record number for the FDB,,next record number for the FDB. The next record number may be set before calling $INPUT or $OUTPU for a disk device only. Updated by $INPUT, $OUTPU, $USETI, $USETO and initialised by $OPEN only if zero. 4 $FDBUF buffering details. The right half contains the length of each buffer in words. The left half contains the number of buffers. IOLIB assumes that these details are identical for input and output sides of a channel. Defaults are two buffers of the standard size for the device. Set up by $OPEN. 5 $FDIOW Point to IOWD chain for dump mode IO. Normally zero for buffered modes, but may be the address of the next buffer if out of sequence. CONTENTS OF THE FDB Page C-2 6-10 $FDOPN 3 word OPEN UUO data block. The words are described indiviually below, and in the Monitor Calls Handbook. 6 $FDSTS IO channel status. The $open routine takes values supplied in $FDMOD, for parity, density and physical-only, and puts them into $FDSTS. All other fields default to zero, in particular, the default mode is ASCII (.IOASC). $GETST writes the current IO status into the right half of $FDSTS. 7 $FDDEV device name, left-justified. The default is 'DSK' for IOLIB IO. 10 $FDBHD buffer header addresses. The left half is the output buffer header address and the right half is the input buffer header address. The buffer headers are within the FDB at $FDOBH and $FDIBH. 11-21 $FDPTH path specification in a form suitable for PATH. UUOs. The first 2 words are unused, the 3rd word is the PPN and further words are SFDs terminated by a zero word. 13 $FDPPP PPN word in the path specification 14 $FDSFD first SFD name in the path specification 22-25 $FDOBH output buffer header (4 words). Also used for the path mask for command scanning. 22-27 $FDPTM path mask block of 6 words masking the PPN and the SFDs. Set by the filename scanner RFILE to indicate wildcards typed. 26-31 $FDIBH input buffer header (4 words). Also used for part of the path mask and for the filename mask in command scanning. 30 $FDNMM filename name mask. Set by the filename scanner, $RFILE, to indicate which characters were wildcards. 32 $FDMOD modifier word. A vector of switches and parameters that may be set by the user by program or by command. The individual fields in the modifier word are described below. 33 $FDMOM modifier mask. A vector of masks corresponding to the various fields in $FDMOD. If the mask in $FDMOM is set, then that field in $FDMOD has been given. 34 $FDBFR /BEFORE specification. Set by the command scanner to give the /BEFORE date and time. CONTENTS OF THE FDB Page C-3 35 $FDSNC /SINCE specification. Set by the command scanner to give the /SINCE date and time. 36 $FDABF /ABEFORE specification. Set by the command scanner to give the access BEFORE date and time. 37 $FDASN /ASINCE specification. Set by the command scanner to give the access SINCE date and time. 40-46 $FDRIB RIB block data. The format of the RIB block section is as for extended disk UUOs. A standard FDB contains the RIB block from .RBCNT to .RBVER, but further words may be added by building an extended FDB. The RIB data is physically the last information in an FDB. For further details, see the Monitor Calls Handbook. 40 $FDCNT the count of words in the extended RIB. 41 $FDPPN either the PPN or a point to a PATH. UUO block. MAKFD$ and FDESC$ set up $FDPPN to point to $FDPTH, but the user may write a PPN over this pointer or even a pointer to another path block. 42 $FDNAM the filename in SIXBIT, left justified. 43 $FDEXT Extension. The left half contains the extension in 3 SIXBIT characters, left-justified. The right half is used by the command scanner for the extension mask. 44 $FDPRV privilege word. Contains protection, mode and create time and date information. 45 $FDSIZ file size in words. 46 $FDVER version number. 46 $ENFDB end of the FDB. 47 $LNFDB length of an FDB in words. CONTENTS OF THE FDB Page C-4 Bits Symbol Description ==== ====== =========== C.2 Bits definitions for $FDCHN --- ---- ----------- --- ------ 0 FC$OPN an OPEN UUO has been done on this channel 1 FC$LUK a LOOKUP UUO has been done on this channel. 2 FC$ENT an ENTER UUO has been done on this channel. 3 FC$TCI Tempcore input has been done on this channel 4 FC$CSC channel number set by caller. C.3 Bit definitions in $FDMOD and $FDMOM --- --- ----------- -- ------ --- ------ 0 FM$NDV null device specification. 1 FM$NUL null extension. The extension was specified but was null; therefore do not use a default extension. 2 FM$DIR directory specified. 3 FM$PHY /PHYSICAL; physical only IO on this channel. 4 FM$NOM /OKNONE; ok if no file matches this specification. 5 FM$DFX wild fixup unnecessary for this directory. 6-8 FM$TRM code for terminator of file specification. 9 FM$STR /STRS 10-23 unused 24 FM$PAR magtape recording parity (1=even). 20-26 FM$DEN magtape recording density (0=std, 1=250, 2=556, 3=800) 27-35 FM$PRO protection code as 3 octal digits. APPENDIX D CONTENTS OF THE IDB Index Symbol Description ===== ====== =========== 0 $IDDYC pointer to a linked list of chunks of free core for allocation to any routine that requires space. The dynamic core pointer is not used by the static core allocater. 1 $IDTOP maximum core that may be used by this program, set by program or by command using the /MAXCOR switch. The core is measured in words and the value is actually the maximum+1. 2 $IDLAC look-ahead character. Used by the command scanner to store the extra character when it has had to look ahead to interpret the current character. 3 $IDCPC PC for the command scanning coroutine. 4 $IDLSC last character read by the command scanner $REDCH. 5 $IDNXC next character to be read. If this word is non-zero, it forces the command scanner to read this character instead of reading from the input file. 6 $IDPNM program name. Set by the BEGIN$ macro by GETTAB. 7 $IDPPN program PPN. As $IDPNM. 10 $IDPEX low segment extension name (left half). 11 $IDPDV program device name. 12 $IDIFD input FDB pointer. The address of the FDB being used for command input. Set to TTY: or to a tempcore file by the BEGIN$ macro. 13 $IDOFD output FDB pointer. The address of the FDB being used for message output. Set to TTY: by the CONTENTS OF THE IDB Page D-2 BEGIN$ macro. 14 $IDEFD error FDB pointer. The address of the FDB being used for error message output. Set to TTY: by the BEGIN$ macro. 15 $IDCCL CCL entry point flag (0=normal, -1=CCL). Set up by the BEGIN$ macro. 16 $IDSWT point to standard switch table. Used by $RSWIT to compare switch against standard switches, if it doesn't match against user-provided switches. 17 $IDRUN runoffset,,point to run FDB. Details for program to be run on termination of this program. 20 $IDECD error codes. The left half contains 3 SIXBIT characters to preface all error messages written by the program. The right half contains the verbosity code for error messages (0=low, 1=normal, 2=high). Set to 'normal' by the BEGIN$ macro. 21 $IDHNM file name for 'help'. 22 $IDDFD point to FDB containing defaults for file name scanning. 23 $IDJNO reserved,,job number: set by BEGIN$ macro 24 $IDJPP job's PPN: set by BEGIN$ macro 25-35 $IDJPT default path specification for this task. Set by the BEGIN$ macro, and should be used to change the default path spec. 36 $IDCPU code for the CPU type, set by the BEGIN$ macro. $CPKAX==0, and $CPKIX==1. 36 $ENIDB end of the IDB 37 $LNIDB length of the IDB. APPENDIX E IO ERROR CODES Index Symbol Description ===== ====== =========== E.1 UUO codes --- --- ----- 0 UUUUO$ error for undefined UUO 1 UUOPN$ OPEN UUO error 2 UUENT$ ENTER UUO error 3 UULUK$ LOOKUP UUO error 4 UUREN$ RENAME UUO error 5 UUINP$ INPUT UUO error 6 UUOUT$ OUTPUT UUO error 7 UURUN$ RUN UUO error 10 UUGET$ GETSEG UUO error 11 UUCLO$ CLOSE UUO error 12 UUTMP$ TMPCOR UUO error IO ERROR CODES Page E-2 E.2 IO Error codes --- -- ----- ----- 0-27 ER???% LOOKUP/ENTER/RENAME error codes as defined in the Monitor Calls Handbook appendix E. IOLIB sets some of these codes for UUOs other than LOOKUP, ENTER and RENAME when the messages are appropriate, for instance, ERNEC%, no core available is set when the is no space to build a buffer ring. -1 EREOF$ endfile, which may be an error in some cases -2 ERBKT$ block too large, which includes the 'no room or quota exceeded' cases for DSK:. -3 ERDTE$ data error, most likely parity or checksum errors. -4 ERDER$ device error. This normally means real trouble with the device, although the real meaning is device dependent. -5 ERIMP$ improper mode for device. -6 ERQTA$ code reserved for no room or quota exceeded case. -7 ERRSD$ restricted device. Attempt to access a device that is available, and is not spooled by the user, but is restricted by the operator. -10 ERNFC$ no free IO software channels. The user program has used at least 15 out of the 16 possible. Note that IOLIB does not attempt IO on channel 0 unless forced. -11 ERUNK$ unknown error. This error can be produced on IO when no error bit was set in the status word, which may be due to e.g. write-ring missing in magtape. APPENDIX F IOLIB STANDARD ERROR IDS All the 3 character error identifications produced by IOLIB are listed here, together with their meanings. The error ids that correspond to LOOKUP/ENTER/RENAME error codes are flagged by an '*'. More details about these codes can be found in the Monitor Calls Handbook, Appendix E. Error ids flagged with 'S' are produced by the IOLIB command string reading routines. Id Description == =========== AEF * File already exists ASW S ambiguous switch name BKT block too large ($INPUT/$OUTPU) BNF * block busy CSD * subfile directory already exists DER device error ($INPUT/$OUTPU) DNA * device not available ($OPEN also) DNE * directory not empty DTE * data error, e.g. checksum or parity error ($INPUT/$OUTPU) EOF end of file ($INPUT) FBM * file being modified FNF * file not found ILC S illegal character in input string ILU * processor doesn't have 2 segment capability IMP improper IO mode for this device ($OPEN/$INPUT/$OUTPU) IOLIB STANDARD ERROR IDS Page F-2 IPG S programmer number zero or too big IPJ S project number zero or too big ISU * incorrect sequence of UUOs LVL * too many levels of SFDs NCE * can't create in directory NDV s Null device name in device specification NEC * not enough core (also $INPUT/$OUTPU) NET * not enough table space in monitor (also $OPEN if no spare DDBs in monitor) NFC no free IO channels($OPEN) NOR S number out of range NRM * no room on structure NSD * no such device (also $OPEN) NSF * not a save file POA * no room (??) PRT * protection failure QTA quota exceeded RSD restricted device ($OPEN) SLE * search list empty SNF * no directory SNS * no segment STI S switch tables built incorrectly TRN * transmission error UKW S unknown keyword in switch specification UNK unknown error code USW S unknown switch name VIL S value illegal in switch specification WDV S wild device name in device specification WLK * write-locked device IOLIB STANDARD ERROR IDS Page F-3 2DV S two device names in one file specification 2EX S two extensions in one file specification 2NM S two file names in one file specification 2PT S two path specifications in one file specification