1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-01-31 05:42:03 +00:00
Files
PDP-10.stacken/files/stacken-tape-backup/dskb:10_7/help/help.mac
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

1064 lines
30 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE HELP %7(100) CUSP TO TYPE OUT HELPFUL DOCUMENTATION.
SUBTTL MLB(ADR)/PFC/DIB/RDH/PLB 9-AUG-85
SEARCH JOBDAT,MACTEN,UUOSYM ;STANDARD DEFINTIONS
SALL ;PRETTY LISTINGS
.DIREC FLBLST ;PRETTIER LISTINGS
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972,1974,1978,1979,1980,1984,1985,1986.
;ALL RIGHTS RESERVED.
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
; FOR OPERATING INSTRUCTIONS READ HELP.HLP. THERE ARE NO SPECIAL
; COMPILE, LOAD OR SAVE INSTRUCTIONS.
; A NULL FILENAME IS CONSIDERED TO BE HELP.HLP BY DEFAULT.
; HELP *, LISTS ALL *.HLP FILES WHICH COULD BE LISTED BY HELP FOO.
; COLS IS NUMBER OF COLUMNS / LINE WHEN LISTING HELP *
; DEFAULT COLS==^D8
ND COLS,^D8
VWHO==0 ;WHO LAST EDITTED
VERSIN==7 ;VERSION NUMBER
VPATCH==0 ;VERSION LETTER
VEDIT==100 ;EDIT NUMBER
;NONE OF THE FOLLOWING ACS ARELOCATION DEPENDENT,
; THEY CAN BE MOVED TO ANY POSITION IF NECESSARY.
F=0
T=1
T1=T+1
T2=T1+1
T3=T2+1
CH=5 ; CONTAINS CURRENT CHARACTER
EOL=6 ; -1 IF END OF LINE SEEN. 0 OTHERWISE
STS=7 ; LAST GETSTS INFO.
D=10 ; COUNTS # OF NAMES PER LINE (COLUMN ROUTINE)
;11-16 ARE FREE; NOTE THAT 11-14 ARE USED IN NEW SORT ROUTINE
C1=11 ;SCRATCH 1
C2=12 ;SCRATCH 2
C3=13 ;SCRATCH 3
LN=16 ;LOGICAL NAME POINTER
P=17
;I/O CHANNELS
DSK==1
TTY==2
FIL==3
PDLSIZ==10 ;LENGTH OF PUSH DOWN LIST
TWOSEG
LOC 137
BYTE (3)VWHO (9)VERSIN (6)VPATCH (18)VEDIT
RELOC 400000
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972,1986. ALL RIGHTS RESERVED.
\;END COPYRIGHT MACRO
;REVISION HISTORY
;%3(34) RELEASED FEB, 1972
;35 REMOVE SPECIAL TEST FOR 175 (ALTMODE)
;36 CORRECT ERROR IN PRINTING "ILLEGAL CHAR" MESSAGE
;37 USE JOBSTS TO DETERMINE IF LOGGED IN
;40 SKIP REST OF COMMAND ON COMMAND ERRORS
;41 USE DEFAULT NUMBER OF DISK BUFFERS
;42 ADD EXPLICIT DEVICE ALLOWED
;43 HANDLE HLP:,NEW:,OLD:
;44 ADD MONITOR COMMANDS TO HELP *
;45 FIX BUG WHICH OCCASIONALLY INCLUDED ONE JUNK LINE IN HELP *
;46 ONLY LIST IN HELP * THOSE FILES WHOSE PROT. CODE ALLOWS THEM
; TO BE PRINTED.
;47 HANDLE PHYSICAL UUOS IN HELP * SO THE LIST INCLUDES ALL THOSE
; FILES WHICH CAN BE LISTED.
;50 TRANSLATE COMMON WORDS, EG "HELP ME" TO "HELP HELP".
;51 CHANGE TO 8 COLS PER LINE INSTEAD OF 6
;52 REMOVE LOOKUPS INTRODUCED BY 46 UNTIL CHANCE TO CODE
; HISTORY TO MAKE SPEED ACCEPTABLE.
;53 MAKE REENTRANT
;54 EXTEND 43 TO HANDLE SYS: CORRECTLY IF /NEW ON HELP *.
;%4(54) RELEASED DEC, 1972
;55 (10-11623) HANDLE LISTS OF ONE ELEMENT
;56 REMOVE SPACE C.RET. IN SOURCE FILE ON PAGE 1
;57 (10-9710) DISCARD SEQUENCE NUMBERS IN HELP FILES
;60 ADD TTY COMMANDS TO MONITOR COMMAND LISTS
;61 ADD WATCH COMMANDS TO MONITOR COMMAND LISTS
;62 SUPPORT RUN HELP (...) STYLE COMMAND AND COMMENTS
;63 SUPPORT ERROR MESSAGE STANDARD
;64 DON'T PRINT JUNK CHARS FOR NEW 5 LETTER COMMAND AND SET TABLES
;65 CHANGE TO USE UUOSYM SYMBOLS
;66 (QARS 10-02478, 10-02495) ACCEPT ONLY DISK AS USER DEVICE.
;67 (QAR 10-02502) DONT TYPE PROTECTED FILES IF NOT LOGGED IN
;%5(67) RELEASED ???
;70 FASTER SORTING, USE TTY WIDTH, TYPE TERMINAL TYPES TABLE
;71 USE .GTIDX TABLE TO LIST CUSTOMER GETTAB VALUES ALSO
;72 TYPE 6-CHARACTER COMMAND NAMES AGAIN
;73 TYPE OUT SET DEFAULT COMMANDS
;74 QAR 10-03930 USE CONTROLLING JOB'S PPN FOR .HLP FILE LOOKUP
;75 SPR #10-30242 RKB 12-JAN-80
; FIX THE MONTAB ROUTINE @ NEXT2+2 TO AVOID ?ILL MEM REF AND ALSO
; AVOID DUPLICATE ENTRIES. FIXED A SMALL BUG @ SORT6+1.
;76 NO SPR PLB 20-Jul-83
; ADD THE "DOC" COMMAND. PATH. REQUIRES 3 WORDS TO READ /NEW.
; CHECK CORRECT BIT FOR /NEW. SUPPORT PATH-O-LOGICAL DEVICES!!
; REMOVED USELESS OPEN/RELEASE OF CHAN FIL. (UNUSED SINCE EDIT 52)
;77 NO SPR NT/RDH 16-MAR-85
; LIST BOTH SITE-SPECIFIC ("MONGEN") COMMANDS AND JOB-SPECIFIC
; ("DECLARE") COMMANDS.
;100 NO SPR LEO 9-AUG-85
; DO COPYRIGHTS.
;
HELP: JFCL ;DEFEND AGAINST CCL CALL
RESET
RESCAN
SETZB EOL,FWAZER
MOVE T,[FWAZER,,FWAZER+1]
BLT T,LWAZER
MOVE P,[IOWD PDLSIZ,PDL]
MOVSI T,'HLP' ;DEFAULT DEVICE AND EXT
MOVEM T,DEVEXT ;STORE
PJOB T, ;GET MY JOB NUMBER
MOVNS T ;NEGATE FOR JOBSTS
JOBSTS T, ;GET STATUS
SETO T, ;ASSUME YES
SETO T1, ;-1 = US
TXNE T,JB.ULI ;ARE WE LOGGED-IN?
JRST HELP0 ;YES - NO FANCY TRICKERY THEN
CTLJOB T1, ;NO - ARE WE BEING CONTROLLED BY ANYONE?
SETO T1, ;ASSUME NOT
JUMPGE T1,HELP02 ;IF BEING CONTROLLED USE HIS (HER?) PPN
SETO T1, ;NOT LOGGED IN, NOT BEING CONTROLLED
JRST HELP04 ;PRETEND WE DON'T OWN ANY FILES
HELP02: MOVSS T1 ;JOB INDEX IN LEFT HALF
HRRI T1,.GTPPN ;GETTAB ARG POINTER TO
GETTAB T1, ;READ CONTROLLING JOB'S PPN
SETZ T1, ;NO JBTPPN TABLE?
HELP04: MOVEM T1,USEPPN ;SET PPN TO USE FOR .HLP FILE ACCESS
HELP0: PUSHJ P,CHAR ;SKIP UP TO FIRST ATOM
JRST DEFAULT ; SHOULDN'T SEE EOL UNTIL AFTER FIRST ATOM
JRST HELP0 ; OVER ANY SPACES,TABS, OR COMMAS
MOVE T,CH ;SAVE FOR LATER TEST
HELP1: PUSHJ P,CHAR ;SKIP PAST FIRST ATOM
JRST DEFAULT ; NO FILNAME.
JRST HELP1X ;SPACE--GO SEE IF HELP
CAIN CH,"(" ;SEE IF START OF ARGUMENT
JRST HELP2 ;YES--GO GET IT
CAIN CH,":" ;SEE IF DEVICE BEFORE NAME
JRST HELP0 ;YES--START OVER
JRST HELP1
HELP1X: TRZ T,40 ;FORCE SAVE TO UC
CAIN T,"H" ;SEE IF "HELP"
JRST HELP2 ;YES--PROCEED
CAIE T,"D" ;CHECK FOR "DOC"
JRST HELP1Y ;NO SUCH LUCK
MOVSI T,'DOC' ;GET DEVICE AND EXT
MOVEM T,DEVEXT ;STORE
JRST HELP2 ;JOIN HELP CODE
HELP1Y: PUSHJ P,CHAR ;NO--SKIP TO PAREN
JRST DEFAULT ;IF EOL, DEFAULT
JRST HELP1Y ;IF SPACE, LOOP ON
CAIE CH,"(" ;SEE IF PAREN
JRST HELP1Y ;NO--LOOP ON
HELP2: PUSHJ P,CHAR ;AND UP TO THE SECOND ATOM.
JRST DEFAULT
JRST HELP2
CAIN CH,"(" ;SEE IF PAREN
JRST HELP2 ;YES--IGNORE
CAIN CH,")" ;SEE IF END OF ARG
JRST DEFAULT ;YES--DEFAULT
SETZM FILNAM ;CLEAR FILNAME
MOVE T,[POINT 6,FILNAM]
MOVEI T1,6 ;ONLY LOOK AT NEXT 6 CHARS.
JRST HELP4
HELP3: PUSHJ P,CHAR ;GET A CHAR.
JRST DONE ;EOL RETURN.
JRST DONE ;SPACE,TAB,OR COMMA RET
HELP4: CAIN CH,"*" ;IS CHAR A *
JRST SEARCH ;USER TYPED *--WANTS LIST OF ALL INFO
CAIN CH,":" ;SEE IF DEVICE
JRST GETDEV ;YES--STORE IT AWAY
CAIN CH,")" ;SEE IF CLOS PAREN
JRST DONE ;YES--ALL DONE
CAIL CH,"A"+40 ;LOWER CASE
CAILE CH,"Z"+40 ;ALPHABETIC
SKIPA ;NO.
TRZ CH,40 ;YES MAKE IT UPPER CASE.
CAIL CH,"A" ;IS IT A-Z?
CAILE CH,"Z"
SKIPA
JRST OK
CAIL CH,"0"
CAILE CH,"9" ;IS IT 0-9?
JRST E$$ILC ;NOPE--HE LOOSES
OK: SUBI CH,40 ;MAKE TO SIXBIT
SOJL T1,HELP3
IDPB CH,T
JRST HELP3
GETDEV: SKIPN DEVICE ;SEE IF ALREADY A DEVICE
SKIPN T,FILNAM ;OR NO NAME
JRST E$$IDS ;YES--ERROR
MOVEM T,DEVICE ;OK--STORE AS DEVICE
JRST HELP2 ;LOOP FOR MORE
;USER JUST TYPED HELP, PRETEND HE TYPED HELP HELP
DEFAULT:MOVE T,[SIXBIT/HELP/]
MOVEM T,FILNAM
;READ TO END OF LINE, IF NOT ALREADY THERE
;INIT DSK FOR ASCII INPUT
;LOOKUP INFO
;INIT TTY FOR OUTPUT
;OUTPUT INFO TO TTY
DONE: PUSHJ P,CHAR ;NOPE.
JRST DONE03 ;EOL SEEN.
JRST DONE ; GO LOOK FOR IT.
JRST DONE ;KEEP LOOKING.
DONE03: MOVE T1,DEVICE ;GET DEVICE TYPE
DEVTYP T1, ;
JRST DONE3A ;ERROR--ASSUME IT'S ALL RIGHT
ANDI T1,77 ;ISOLATE DEVICE TYPE
CAIE T1,.TYDSK ;IS IT A DISK?
JRST E$$IDS ;NO, BOMB THE USER OFF
DONE3A: PUSHJ P,SETDEV ;OK--INITIALIZE FOR DEVICE
DONE05: MOVEI T,0 ;SET ASCII MODE
SKIPN T1,DEVICE ;SEE IF USER DEVICE
MOVE T1,(D) ;SET DEVICE
JUMPE T1,NOINF ;NO-INFO IF NOT FOUND
MOVEI T2,IBUF ;POINT TO BUFFER HEADERS
DONE07: MOVEM T,FILBLK+.FOIOS ;SET FILOP. DEVIOS WORD
MOVEM T1,FILBLK+.FODEV;SET FILOP. DEVICE WORD
MOVEM T2,FILBLK+.FOBRH;SET FILOP. BUFFER HEADER WORD
MOVEI T3,LEBBLK ;ADDRESS OF LOOKUP BLOCK
MOVEM T3,FILBLK+.FOLEB;SET FILOP. LOOKUP WORD
; UNFORTUNATELY, THE "ON-BEHALF-OF" PPN WORKS ONLY IF [1,2], BEING THE
; OWNER OF THE FILE IS NOT SUFFICIENT. THEREFORE WE DO A CHKACC LATER
; AND IGNORE ANY POSSIBLE FILDAE PRIVILEGES
; MOVE T3,USEPPN ;GET FLAG/CTL-JOB'S PPN
; MOVEM T3,FILBLK+.FOPPN;SET FILOP. "ON-BEHALF-OF" WORD
MOVEI T3,.RBPRV ;LENGTH OF LOOKUP BLOCK (INCLUDE PROT)
MOVEM T3,LEBBLK+.RBCNT;SET IN LOOKUP BLOCK
SETZM LEBBLK+.RBPPN ;USE IMPLIED DIRECTORY (E.G., HLP:)
MOVE T3,FILNAM ;NAME OF HELP TEXT DESIRED
MOVEM T3,LEBBLK+.RBNAM;SET IN LOOKUP BLOCK
MOVE T3,DEVEXT ;GET PROPER EXTENSION
MOVEM T3,LEBBLK+.RBEXT;SET IN LOOKUP BLOCK
MOVE T3,[1B0+<DSK,,0>+.FORED] ;FILOP. READ FUNCTION
MOVEM T3,FILBLK+.FOFNC;SET FILOP. FUNCTION WORD
MOVE T3,[.FOPPN+1,,FILBLK] ;FILOP. ARG POINTER TO
FILOP. T3, ;READ HELP FILE
JRST DONE7 ;CAN'T READ HELP FILE
;CONTINUED ON NEXT PAGE
;CONTINUED FROM PREVIOUS PAGE
SKIPN C3,USEPPN ;DOING FUNNY PRIVILEGE CHECKING?
JRST LOOKNC ;NO, STRAIGHTFORWARD OPERATION
LDB C1,[POINTR LEBBLK+.RBPRV,RB.PRV] ;YES, FILE PROTECTION
HRLI C1,.ACRED ;READ FILE FUNCTIONALITY
MOVE C2,LEBBLK+.RBPPN;OWNER OF THE FILE
AOSE C3 ;RUNNING NOT-LOGGEG-IN?
SOSA C3 ;NO, BEING CONTROLLED, USE HIS PPN
TDC C3,C2 ;YES, PRETEND NO INTRINSIC ACCESS RIGHTS
MOVEI T3,C1 ;CHKACC ARG POINTER TO
CHKACC T3, ;VERIFY ACCESS RIGHTS
SETZ T3, ;ASSUME ACCESS ALLOWED
AOJE T3,DONE7 ;IF ACCESS DISALLOWED, FLICK IN THIS FILE
LOOKNC: INBUF DSK,0 ;SETUP BUFFERS
PUSHJ P,TTYINI ;INIT TTY
PUSHJ P,CRLF ;SKIP A LINE
DONE1: PUSHJ P,INR ;GET A CHAR
JRST EXITL ;NO MORE CHARS.
PUSHJ P,OUTR ;OUTPUT CHAR.
JRST DONE1 ;GO DO IT AGAIN
DONE7: TLON T,(UU.PHS) ;SET PHYSICAL AND TRY AGAIN
JRST DONE07 ;LOOP BACK ONCE
SKIPE DEVICE ;SEE IF USER DEVICE
JRST NOINF ;ELSE, COMPLAIN
NODEV: SKIPE DEVICE ;SEE IF USER DEVICE
JRST E$$COI ;ERROR IF SO
AOJA D,DONE05 ;ELSE, TRY NEXT IN LIST
;HERE WHEN CAN NOT FIND ANYPLACE--TRY TRANSLATION
NOINF: SKIPE T,OLDNAM ;SEE IF ALREADY HERE ONCE
JRST [MOVEM T,FILNAM ;YES--RESTORE ARGUMENT
JRST E$$NIO] ;AND GIVE ERROR
MOVE T,[-TNAML,,TNAM-1]
MOVE T1,FILNAM ;GET MATCH
MOVEM T1,OLDNAM ;SAVE FOR LATER
NOINFL: AOS T ;SKIP VALUE
CAME T1,(T) ;SEE IF MATCH
AOBJN T,NOINFL ;NO--LOOP
JUMPGE T,E$$NIO ;DONE--SEE IF MATCHED
MOVE T,1(T) ;YES--GET VALUE
MOVEM T,FILNAM ;CHANGE ARGUMENT
JRST DONE03 ;AND GO DO IT AGAIN
;TABLE OF PAIRS TO TRANSLATE FROM X TO Y
DEFINE TRANS(X,Y),<XLIST
EXP <SIXBIT \X\>
EXP <SIXBIT \Y\>
LIST>
TNAM:
TRANS US,HELP
TRANS ME,HELP
TNAML==.-TNAM
;CHAR--GETS NEXT CHAR FROM TTY INPUT BUFFER
; IF END OF LINE SEEN SETS EOL TO -1
;CALL: PUSHJ P,CHAR
; EOL RETURN
; SPACE,COMMA,OR TAB RETURN
; OTHER CHARACTER RETURN
CHAR: JUMPL EOL,CHAR2 ;RETURN IF DONE
INCHSL CH ;GET A CHAR FROM TTY
JRST CHAR2 ; IF NO CHARS LEFT CONSIDER IT EOL.
JUMPE CH,CHAR ;IGNORE NULL
CAIE CH,177 ;IGNORE DELETE
CAIN CH,15 ;IGNORE C.RET.
JRST CHAR ; ..
ANDI CH,177 ;MAKE SURE IT LOOKS LIKE CHAR
AOS 0(P) ;INCR RETURN ADDR
AOS 0(P) ;TWICE
CAIN CH," " ;IS CHAR A SPACE?
SOS 0(P) ;YES. DECR RETURN ADDR.
CAIE CH," " ;IS CHAR A TAB?
CAIN CH,"," ;MAYBE ITS A COMMA?
SOS 0(P) ;DECR RET ADDR IF SO.
CAIE CH,";" ;SEE IF COMMENT
CAIN CH,"!" ; OR NEW STYLE
JRST CHAR3 ;YES--GO SKIP COMMENT
CAIN CH,33
JRST CHAR1 ;YES.
CAIG CH,14 ;IS IT VT,FF,OR LF?
CAIGE CH,12
POPJ P, ;NO.
CHAR1: SOS 0(P) ;YES. DECR RETURN ADDR
SOS 0(P) ;TWICE
CHAR2: SETOI EOL, ;SET EOL TO -1
POPJ P, ;AND GO AWAY.
;HERE IF COMMENT SEEN
CHAR3: INCHSL CH ;GET NEXT CHAR
JRST CHAR1 ;ALL DONE
CAIN CH,33 ;SEE IF ESCAPE
JRST CHAR1 ;YES--END
CAIG CH,14 ;SEE IF VT,
CAIGE CH,12 ; FF, OR LF?
JRST CHAR3 ;NO--LOOP
JRST CHAR1 ;YES--DONE
;SETDEV--INITIALIZES TO CORRECT DEFAULT LIST OF HELP DEVICES
;RETURNS WITH D POINTING TO LIST ENDED BY 0
SETDEV: MOVEI D,DEVLST-1 ;WHERE TO PUT THIS STUFF
PUSH D,DEVEXT ;PUT DEFAULT DEV/EXT FIRST IN LIST
MOVE T,[3,,T1] ;SETUP INVESTIGATION (NEEDS 3!!)
MOVNI T1,-.PTFRL ;READ DEFAULT PATH
MOVEI T2,0 ;FLAGS
PATH. T, ;READ CURRENT PATH
SETZ T2, ;IF NOT IMPLEMENTED, RETURN DEFAULT
TRNE T2,PT.SNW ;SEE IF /NEW
JRST SETNEW ;YES, SET ALTERNATE LIST
PUSH D,['SYS '] ;SET SYS NEXT
PUSH D,['NEW '] ;THEN NEW
JRST SETDEY ;DONE
SETNEW: PUSH D,['NEW '] ;SET NEW NEXT
PUSH D,['SYS '] ;THEN SYS
SETDEY: PUSH D,['OLD '] ;FINALLY OLD
PUSH D,[0] ;TERMINATE
MOVEI D,DEVLST ;ADDRESS OF ABOVE JUNK
POPJ P, ;AND RETURN
;IN--READS BYTE OF INPUT FROM DSK, BYTE SIZE DEPENDS ON
; MODE DISK INITED IN, FOR *.HLP FILE 7 BIT ASCII, FOR
; TXTDIR.UFD FILE 36 BIT BINARY.
;
;CALL PUSHJ P,INR
; EOF RETURN
; NORMAL RETURN
; BYTE IS RETURNED IN CH.
; THERE IS NO RETURN ON AN ERROR.
INR: SOSGE IBUF+2 ;ANY CHARS LEFT IN BUFFER
JRST IN1 ;NOPE.
MOVE CH,IBUF+1 ;GET BYTE POINTER
TLNN CH,(70B11) ;SEE IF BINARY
JRST IN2 ;NO--GO LOOK FOR SEQ NUMBS
ILDB CH,IBUF+1 ;YES--GO GET IT
IN0: AOS (P) ;AND INCR RET ADDR
POPJ P, ;RETURN.
IN1: IN DSK, ;GET NEW BUFFER.
JRST INR ;GO BACK, GET CHAR
GETSTS DSK,STS ;SOMETHING GOOFED--FIND OUT WHAT
TRNE STS,IO.ERR ;CHECK FOR ERROR BITS.
JRST E$$IDE ;YES ERROR--GIVE UP.
TRNN STS,IO.EOF ;EOF?
JRST E$$HBS ;NOT ERROR BITS OR EOF--CAN NEVER GET HERE
POPJ P, ;EOF RETURN
IN2: IBP IBUF+1 ;ASCII MODE--ADVANCE POINTER
MOVE CH,@IBUF+1 ;GET THIS WORD
TRNN CH,1 ;SEE IF SEQUENCED
JRST IN3 ;NO--JUST RETURN NEXT CHAR
AOS IBUF+1 ;YES--ADVANCE 6 CHARS
MOVNI CH,5 ;ALSO COUNTER
ADDM CH,IBUF+2 ; ..
JRST INR ;AND TRY AGAIN
IN3: LDB CH,IBUF+1 ;GET BYTE OF DATA
JRST IN0 ;AND RETURN IT
;TTYINI-INIT TTY FOR OUTPUT.
;CALL PUSHJ P,TTYINI
; NORMAL RETURN
; NEVER RETURNS IF ANY ERROR.
TTYINI: INIT TTY,.IOASL
SIXBIT /TTY/
XWD OBUF,0
JRST E$$COO ;NEVER GET HERE--I HOPE
OUTBUF TTY,0
MOVE T1,[2,,T2] ;POINTER FOR TRMOP.
MOVEI T2,.TOWID ;TO READ TTY WIDTH
MOVEI T3,TTY ;OUTPUT CHANNEL
IONDX. T3, ;GET TTY'S UDX
CAIA ;???
TRMOP. T1, ;READ TTY WIDTH
MOVEI T1,COLS*^D8 ;USE DEFAULT IF NOT TTY
IDIVI T1,^D8 ;CONVERT TO NUMBER OF TAB COLUMS
MOVEM T1,NUMCOL ;SAVE FOR TYPEOUT ROUTINES
POPJ P,
;OUT--OUTPUTS BYTE TO TTY. CALLED WITH BYTE IN CH.
;TAB--OUTPUTS TAB TO TTY.
;CRLF-OOUTPUTS CR-LF SEQUENCE TO TTY.
;
;CALL PUSHJ P,<ROUTINE>
; NORMAL RETURN
; THERE IS NO RETURN ON ANY ERROR.
CRLF: MOVEI CH,.CHCRT
PUSHJ P,OUTR
MOVEI CH,.CHLFD
PUSHJ P,OUTR
POPJ P,
TAB: MOVEI CH,.CHTAB ;PUT OUT TAB.
OUTR: SOSG OBUF+2 ;ROM FOR ONE MORE?
JRST OUT1 ;NO--GO MAKE ROOM
IDPB CH,OBUF+1 ;YES--PUT IT THERE
POPJ P, ;AND RETURN?
OUT1: OUT TTY, ;OUTPUT A BUFFER
JRST OUTR ;GO TRY NOW
GETSTS TTY,STS ;SOMETHING WENT WRONG--GET STATUS
TRNN STS,IO.ERR ;ERROR?
JRST E$$HBS ;SHOULDN'T GET HERE
JRST E$$ODE ;LEGIT. ERROR TELL USER.
; SEARCH--TYPE OUT LIST OF ALL AVAILABLE *.HLP FILES
; IN HELP'S DIRECTORY.
; FIRST READ PAST END OF COMMAND
; LOOKUP DIRECTORY--COMPUTE SIZE OF PDL
; NEEDED.
; READ DIRECTORY FOR ALL *.HLP FILES, PUT NAMES FOUND
; AT .JBFF
; SORT LIST
; TYPE OUT LIST.
SEARCH: PUSHJ P,CHAR ;READ TO END OF COMMAND
JRST S0
JRST SEARCH
JRST SEARCH ;KEEP LOOKING.
S0: PUSHJ P,TTYINI ;SETUP TTY
PUSHJ P,SETDEV ;SETUP DEFAULT DEVICE LIST
MOVE T,.JBFF ;SAVE INITIAL
MOVEM T,SAVFF ; .JBFF
MOVEI F,0 ;CLEAR COUNT
S0A: TLZ F,(UU.PHS) ;CLEAR PHYS BIT
MOVEI T,.IOBIN ;SET FOR BINARY MODE
S0B: MOVEM T,IOMODE ;STORE I/O MODE
SKIPN T1,DEVICE ;GET USER DEVICE IF ANY
MOVE T1,(D) ;ELSE GET NEXT DEFAULT
JUMPE T1,S2A ;EXIT WHEN ALL DONE
PUSHJ P,SRHLNM ;GO TRY THIS DEVICE
; TRANSPLANTED (USED TO BE LABEL S2)
SKIPE DEVICE ;SEE IF USER DEVICE
JRST S2A ;YES--ALL DONE
TLOE F,(UU.PHS) ;SET/TEST FLAG FOR PHYSICAL
AOJA D,S0A ;LOOP OVER ALL DEVICES
MOVE T,(D) ;REFETCH DEVICE NAME
DEVNAM T, ;GET PHYSICAL NAME
TRNA
CAMN T,(D) ;SEE IF SAME
AOJA D,S0A ;YES
MOVE T,[UU.PHS+.IOBIN] ;NO--TRY AGAIN, PHYSICAL
JRST S0B ;AS WELL
SRHLNM: MOVEM T1,LNMBLK+.PTLNM ;STORE DEVICE
DMOVE T2,[EXP .PTFRN, PT.RCN] ;PATH. FUNCTION
DMOVEM T2,LNMBLK ;STORE
MOVE T1,[.PTLLB,,LNMBLK] ;POINT TO FUNCTION BLOCK
SETZ T, ;ASSUME NOT PHYSICAL
TLNE F,(UU.PHS) ;UNTIL PROVEN
MOVEI T,UU.PHY ;OTHERWISE
PATH. T1,(T) ;READ LOGICAL NAME
JRST SL.PTH ;COULDN'T, TRY NORMAL PATH.
SL.LNM: MOVEI LN,LNMBLK+.PTLSB ;POINTER TO FIRST GROUP
SL.LN2: MOVEI T1,<.PTSTR-.PTPPN+.PTLPP>(LN) ;POINTER TO "PATH" BLOCK
SKIPN T2,.PTLSL(LN) ;GET STRUCTURE NAME
POPJ P, ;NONE, END OF THIS NAME
PUSHJ P,SRHOPN ;OPEN AND READ IT
MOVEI LN,.PTLSF(LN) ;ADVANCE POINTER TO 1ST SFD
SL.LN3: SKIPE (LN) ;ZERO?
AOJA LN,SL.LN3 ;NO, ADVANCE
AOJA LN,SL.LN2 ;POINT TO "NODE"
SL.PTH: MOVE T1,LNMBLK+.PTLNM ;GET NAME BACK
MOVEM T1,LNMBLK+.PTFCN ;STORE AS FUNCTION
MOVE T1,[.PTMAX+1,,LNMBLK] ;POINT TO STD PATH
PATH. T1,(T) ;READ NORMAL PATH.
JRST S.PPN ;NORMAL PATH. LOSSES!
MOVEI T1,LNMBLK ;GET POINTER TO PATH
MOVE T2,LNMBLK+.PTSTR ;GET PATH STRUCTURE
PJRST SRHOPN ;GO DO THE OPEN
S.PPN: MOVE T1,LNMBLK+.PTFCN ;GET DEVICE BACK
MOVE T2,T1 ;COPY DEVICE
DEVPPN T1,(T) ;PERHAPS ERSATZ?
TRNA ;NO, GET SYS:
PJRST SRHOPN ;YES, READ DIR
MOVE T1,[%LDSYS] ;NOT ERSATZ!!
GETTAB T1, ;ASK MONITOR FOR SYS:
MOVE T1,[1,,1] ;MUST BE ANCIENT
;; PJRST SRHOPN ;GO OPEN DIR
;CONTINUED ON NEXT PAGE
;CONTINUED FROM PREVIOUS PAGE
SRHOPN: MOVEI T3,IBUF ;INPUT BUFFER HEADER
DMOVEM T2, IOMODE+.OPDEV ;STORE OPEN DEVICE
OPEN DSK,IOMODE ;OPEN DEVICE
JRST NODSKS ;GIVE UP.
MOVE T2,SAVFF ;GET ORIGINAL .JBFF
EXCH T2,.JBFF ;RESTORE FOR BUFFERS
INBUF DSK,0
CAMLE T2,.JBFF ;IF FIRST TIME,
MOVEM T2,.JBFF ; RESTORE UPDATED VALUE
TLNE T1,-1 ;FULL PATH OR JUST PPN?
PJRST SO.UFD ;JUST PPN
MOVEM T1,FILNAM+3 ;STORE PATH PTR
MOVEI T2,.PTSFD(T1) ;POINTER TO SFDS
SKIPN T1,.PTPPN(T1) ;GET PPN
POPJ P, ;NOT SO FAST
SKIPN (T2) ;ANY SFDS?
PJRST SO.UFD ;NO, OPEN UFD
SO.LOP: SKIPE 1(T2) ;MORE SFDS?
AOJA T2,SO.LOP ;LOOP TILL END
MOVE T1,(T2) ;GET LAST SFD NAME
SETZM (T2) ;ZERO IT
PUSH P,T1 ;SAVE SFD NAME
PUSH P,T2 ;AND ADDR
MOVSI T2,'SFD' ;GET EXT
PUSHJ P,SO.LKP ;GO DO LOOKUP
POP P,T2 ;RESTORE SFD ADDR
POP P,(T2) ;RESTORE SFD NAME
POPJ P,
SO.UFD: MOVE T2,[%LDMFD] ;
GETTAB T2, ;
MOVE T2,[XWD 1,1] ;
MOVEM T2,FILNAM+3 ;STORE PATH
MOVSI T2,'UFD' ;.UFD
SO.LKP: DMOVEM T1,FILNAM ;STORE NAME & EXT
SETZM FILNAM+2 ;
LOOKUP DSK,FILNAM ;LOOKUP DIRECTORY FILE
JRST NOUFD ;WE TRIED.
;CONTINUED ON NEXT PAGE
;CONTINUED FROM PREVIOUS PAGE
;READ DIRECTORY
S1: PUSHJ P,INR
POPJ P, ;DONE!
MOVE T,CH
PUSHJ P,INR
JRST E$$HBS ;PRETEND EOF WILL NEVER OCCUR HERE.
HLLZ CH,CH ;JUST GET EXT
CAME CH,DEVEXT ;CHECK IT
JRST S1 ; NOT A *.HLP FILE KEEP LOOKING.
MOVE T1,DEVEXT ;SET IN EXTENSION
SETZB T2,T3 ;CLEAR DIRECTORY
PUSHJ P,STOR ;SAVE NAME
JRST S1 ;AND LOOP
NOUFD: SKIPE DEVICE ;SEE IF USER DEVICE
JRST E$$CLD ;YES--HE IS IN TROUBLE
NODSKS: SKIPE DEVICE ;SEE IF USER DEVICE
JRST E$$COI ;YES--ERROR
POPJ P,
S2A: RELEAS DSK, ;FREE CHANNEL
JUMPE F,MONCMD ;SKIP ON IF NOTHING!
PUSHJ P,SORT ;ELSE GO SORT LIST
MOVEI D,[ASCIZ/
HELP is available for the following:/]
HLRZ T1,DEVEXT ;GET DEVICE
CAIE T1,'HLP' ;NOT DOC?
MOVEI D,[ASCIZ/
DOCumentation is available for the following:/] ;GET DOC HEADER
PUSHJ P,HEAD ;OUTPUT HEADING AND LIST
;CONTINUED ON NEXT PAGE
;CONTINUED FROM PREVIOUS PAGE
MONCMD: MOVEI T,.GTCOM ;POINT TO COMMAND TABLE
MOVEI D,[ASCIZ /
The monitor has the following commands:/]
PUSHJ P,MONTAB ;GET AND OUTPUT A TABLE
MOVEI T,.GTCCM ;POINT TO CUSTOMER SPECIFIC COMMANDS
MOVEI D,[ASCIZ /
The monitor has the following site-specific commands:/]
PUSHJ P,MONTAB ;LIST "MONGEN" COMMANDS
MOVEI D,[ASCIZ /
The monitor has the following job-specific commands:/]
PUSHJ P,DCLTAB ;LIST "DECLARE" COMMANDS
MOVEI T,.GTCM2 ;POINT TO SET COMMAND TABLE
MOVEI D,[ASCIZ /
The monitor has the following SET commands:/]
PUSHJ P,MONTAB ;GET AND OUTPUT THE TABLE
MOVEI T,.GTDCN ;POINT TO SET DEFAULT COMMANDS TABLE
MOVEI D,[ASCIZ/
The monitor has the following SET DEFAULT commands:/]
PUSHJ P,MONTAB ;GET AND OUTPUT THE TABLE
MOVEI T,.GTCMT ;POINT TO TTY COMMAND TABLE
MOVEI D,[ASCIZ /
The monitor has the following SET TTY commands:/]
PUSHJ P,MONTAB ;GET AND OUTPUT TABLE
MOVEI T,.GTTNM ;TERMINAL TYPES TABLE
MOVEI D,[ASCIZ/
The monitor supports the following terminal types:/]
PUSHJ P,MONTAB ;LIST TERMINAL TYPES
MOVEI T,.GTCMW ;POINT TO WATCH TABLE
MOVEI D,[ASCIZ /
The monitor has the following SET WATCH commands:/]
PUSHJ P,MONTAB ;GET AND OUTPUT TABLE
JRST EXITL ;GO FINISH UP
;MONTAB -- ROUTINE TO GET A MONITOR TABLE, SORT IT, AND LIST IT
;CALL: MOVSI T,TABLE NUMBER (MUST BE IN SIXBIT)
; MOVE D,[POINT 7,ASCIZ STRING FOR HEADING]
; PUSHJ P,MONTAB
MONTAB: MOVE T1,SAVFF ;RESTORE .JBFF
MOVEM T1,.JBFF ; ..
PUSH P,T ;SAVE GETTAB TABLE NUMBER
MOVS T2,T ;TABLE NUMBER AS INDEX
HRRI T2,.GTIDX ;TO SEE WHERE TABLE STARTS
GETTAB T2, ;(IN CASE CUSTOMER-DEFINED ENTRIES)
SETZ T2, ;DO IT THE OLD WAY - START AT 0
HLRE T2,T2 ;T2:=STARTING INDEX FOR TABLE SEARCH
MOVEI F,0 ;CLEAR COUNT
MONTB1: MOVS T1,T2 ;GET NEXT INDEX
HRR T1,0(P) ;INSERT TABLE NUMBER
GETTAB T1, ;READ THIS TABLE ENTRY
JRST PRMTAB ;DONE - PRINT THE TABLE
MOVEI T,0 ;CLEAR AC
LSHC T,6 ;GET FIRST CHAR
CAIN T,'.' ;SEE IF STARTS WITH PERIOD
SETZB T,T1 ;YES--CLEAR COMMAND
LSHC T,^D30 ;REPOSITION COMMAND
PUSHJ P,STOR ;SAVE AWAY
AOJA T2,MONTB1 ;INCREMENT ENTRY AND TRY AGAIN
;STOR--ROUTINE TO ADD ENTRY TO LIST
;CALL: MOVE T,ENTRY
; PUSHJ P,STOR
STOR: JUMPE T,CPOPJ ;RETURN IF BLANK ENTRY
MOVE T1,.JBFF ;SEE IF ENOUGH CORE
CAMLE T1,.JBREL ; ..
JRST [CORE T1, ; NO--GET MORE
JRST E$$CLE ;GIVE UP IF NO MORE TO BE HAD
JRST .+1]
MOVEM T,@.JBFF ;STORE NAME
AOS .JBFF ;AND ADVANCE POINTER
AOS F ;COUNT RESULT
CPOPJ: POPJ P, ;RETURN
;DCLTAB -- ROUTINE TO GET AND PRINT "DECLARE" COMMANDS (ANALGUOS TO MONTAB)
;CALL: MOVEI D,<ADR> ;ASCIZ STRING TO PREFIX TABLE (IF EXTANT)
; PUSHJ P,DCLTAB
DCLTAB: MOVE T1,SAVFF ;PERMANENT COPY OF .JBFF
MOVEM T1,.JBFF ;RESTORE .JBFF
MOVEI T2,40 ;STARTING SIZE FOR READING COMMANDS
DCLTA2: MOVE T1,T2 ;SIZE OF BUFFER
ADD T1,.JBFF ;PROPOSED END OF BUFFER
CAMLE T1,.JBREL ;ENOUGH SPACE ALREADY?
JRST [CORE T1, ;ASK FOR MORE ROOM
JRST E$$CLE ;FAILED, GO COMPLAIN
JRST .+1] ;CONTINUE
MOVEM T2,@.JBFF ;SET "LENGTH" OF BUFFER
MOVSI T1,.CMLST ;"LIST" COMMANDS FUNCTION
HRR T1,.JBFF ;ADDRESS OF ARG BLOCK
MOVE T3,T1 ;SAVE A COPY FOR ERROR RETURN
CMAND. T1, ;GET THE LIST OF USER-DEFINED COMMANDS
JRST [LSH T2,1 ;INCREMENT THE BUFFER SIZE
CAIN T1,CMDNF% ;WAS BUFFER TOO SHORT?
JRST DCLTA2 ;YES, TRY WITH A BUGGER BIFFER
CAMN T1,T3 ;UUO NOT IMPLEMENTED?
POPJ P, ;NO SUCH UUO, ERGO NO SUCH PRINTOUT
JRST E$$DCL] ;REAL UUO ERROR, GO COMPLAIN
MOVE F,@.JBFF ;.CMSIZ = COUNT OF RETURNED COMMANDS
ADDM F,.JBFF ;ADVANCE .JBFF TO END OF BUFFER FOR SORT
AOS .JBFF ;(THE REAL END OF THE BUFFER)
PJRST PRITAB ;GO LIST THE BUFFER
;PR?TAB -- ROUTINE TO SORT AND PRINT TABLE RESULTS FROM MONTAB/ETC.
PRMTAB: POP P,T2 ;ADJUST STACK
PRITAB: JUMPE F,CPOPJ ;RETURN IF NOTHING
PUSHJ P,SORT ;GO SORT TABLE
;FALL INTO "OUTPUT THE WHOLE THING"
;HEAD -- ROUTINE TO OUTPUT HEADING AND THEN LIST
;CALL: MOVE D,[POINT 7,ASCIZ STRING]
; PUSHJ P,HEAD
HEAD: TLOA D,(POINT 7,) ;MAKE INTO BYTE POINTER
HEAD1: PUSHJ P,OUTR
ILDB CH,D
JUMPN CH,HEAD1
NEWLIN: PUSHJ P,CRLF
MOVE D,NUMCOL ;GET NUMBER OF TAB SUBCOLUMNS
SKIPA
NEXT: PUSHJ P,TAB
MOVE T3,(T)
NEXT1: MOVEI T2,0
LSHC T2,6
MOVEI CH,40(T2)
PUSHJ P,OUTR
JUMPN T3,NEXT1
NEXT2: AOBJP T,CRLF ;LOOP FOR WHOLE TABLE
MOVE T3,(T) ;GET NEXT ITEM
CAMN T3,-1(T) ;COMPARE WITH PREVIOUS ONE
; PLACED A "-" SIGN IN THE ABOVE LINE OF CODE: IT WAS NEGLECTED BEFORE.
JRST NEXT2 ;SAME--SKIP PRINTING
SOJG D,NEXT
JRST NEWLIN
SUBTTL SORT AN ARRAY INTO INCREASING ORDER
;NEW SORT ROUTINE, GRATEFULLY STOLEN FROM LLN
;
;SORT - SORT AN ARRAY INTO INCREASING ORDER
;CALL IS:
;
; .JBFF/ END OF ARRAY + 1
; F/ LENGTH OF ARRAY
;
; PUSHJ P,SORT
; RETURN
;
;THE ALGORITHM USED HERE IS A HEAPSORT ALGORITHM, TAKEN DIRECTLY FROM
;DONALD KNUTH, THE ART OF COMPUTER PROGRAMMING, VOL. 3, SORTING AND
;SEARCHING, PP. 145-149. THE USER IS REFERRED TO THAT VOLUME FOR
;MORE THOROUGH DOCUMENTATION ON THE METHOD.
;
;RETURNS WITH T:=AOBJN POINTER TO SORTED TABLE
;
;NOTE THAT ACS 11-14 ARE USED, AS WELL AS F AND T1-T3
;AC'S ARE NAMED DIFFERENTLY HERE TO CORRESPOND TO THE VARIABLES USED
;IN KNUTH'S ALGORITHM, PP. 147-147 OF VOLUME MENTIONED ABOVE.
TEMP== F
ADDR== T1
R== T2
L== T3
RCAP== 11
K== 12
I== 13
J== 14
AC== 15
;THE CODE THAT FOLLOWS IS GRATEFULLY STOLEN FROM LLN.
;CAN'T DO MUCH BETTER WITHOUT RECURSION
SORT: MOVE R,F ;LENGTH OF ARRAY
MOVE ADDR,.JBFF ;ADDRESS + 1 OF END
SUBI ADDR,1(R) ;ADDR:=ADDRESS OF ARRAY (MINUS ONE)
MOVN T,R ;NEGATIVE LENGTH FOR AOBJN
MOVS T,T ;COUNT IN L.H.
HRRI T,1(ADDR) ;ADDRESS IN R.H.
MOVEI L,(R) ;INITIALIZE
CAIG R,1 ;CHECK INDEX
POPJ P, ;RETURN IF INVALID, OR =1
LSH L,-1 ;L=N/2
AOJ L,
SORT2: CAIG L,1 ;DECREASE L OR R
JRST SORT9
SOJ L, ;L POINTS TO FIRST UNCHECKED NODE
HRLI ADDR,L
MOVE RCAP,@ADDR ;GET THAT ENTRY
SORT3: MOVEI J,(L) ;PREPARE FOR SIFT-UP
SORT4: MOVEI I,(J) ;ADVANCE DOWNWARD
LSH J,1 ;J POINTS TO FIRST SON
CAMN J,R
JRST SORT6 ;JUMP IF LAST ENTRY
CAML J,R
JRST SORT8 ;J TOO HIGH--JUMP
HRLI ADDR,J ;FIND "LARGER" SON
MOVE TEMP,@ADDR
AOJ J,
MOVE AC,TEMP ;GET A COPY OF TEMP
PUSHJ P,CAML36 ;DO A 36-BIT UNSIGNED "CAML AC,@ADDR"
SOJ J,
SORT6: HRLI ADDR,J ;LARGER THAN RCAP?
MOVE AC,RCAP ;GET A COPY OF RCAP
PUSHJ P,CAML36 ;DO THE "CAML AC,@ADDR"
JRST SORT8
HRLI ADDR,J ;MOVE IT UP
MOVE TEMP,@ADDR
HRLI ADDR,I
MOVEM TEMP,@ADDR
JRST SORT4
SORT8: HRLI ADDR,I ;STORE R
MOVEM RCAP,@ADDR
JRST SORT2
SORT9: HRLI ADDR,R ;HAVE A HEAP NOW
MOVE RCAP,@ADDR
MOVE TEMP,1(ADDR)
MOVEM TEMP,@ADDR
SOJ R,
CAILE R,1
JRST SORT3
MOVEM RCAP,1(ADDR)
POPJ P,
; HERE TO DO A "CAML AC,@ADDR"
CAML36: MOVE K,@ADDR ;GET A COPY OF @ADDR
TXC K,1B0 ;TOGGLE SIGN-BIT ON EACH NUMBER
TXC AC,1B0 ;
CAMGE AC,K ;DO THE COMPARISON
AOS (P) ;GIVE SKIP-RETURN
POPJ P, ;
EXITL: PUSHJ P,CRLF
EXITR: RELEAS TTY,
EXITRL: PUSHJ P,CHAR
JRST EXITRX
JRST EXITRL
JRST EXITRL
EXITRX: RESET
AOSN USEPPN ;LOGGED IN?
JRST KJOB ;NO, GO COMMIT SUICIDE
EXIT 1, ;YES, EXIT QUIETLY
JRST .-1 ;AND STAY EXITED
KJOB: OUTSTR [ASCIZ/
.KJOB
./] ;NO. MAKE SURE HE KNOWS IT
LOGOUT
;ERROR AND WARNING MESSAGES
E$$ILC: PUSHJ P,ERRMSG
'ILC',,"%"
EXITX,,[ASCIZ/Illegal char: "/]
CAIGE CH,40
JRST [OUTSTR [ASCIZ /^/]
ADDI CH,100
JRST .+1]
OUTCHR CH
OUTSTR [ASCIZ/", for HELP type HELP/]
JRST EXITX
;POSSIBLE WAYS TO GOOF,
; IN OR OUT FAILED WITHOUT ANY 74B23 BITS SET.
; READ FILNAME BUT NOT EXTENSION OUT OF A DIR BLOCK.
; NOTE THAT NONE OF THESE SHOULD EVER HAPPEN.
E$$HBS: PUSHJ P,ERRMSG
'HBS',,"?"
EXITX,,[ASCIZ/Horrible bug somewhere..../]
JRST EXITR
E$$NIO: PUSHJ P,ERRMSG
'NIO',,"%"
EXITX,,[ASCIZ/No information is currently available on "/]
MOVE T1,FILNAM
NOINF1: MOVEI T,0
LSHC T,6
ADDI T,40
OUTCHR T ;PRINT IT.
JUMPN T1,NOINF1
OUTSTR [ASCIZ /"
/]
JRST EXITR ;ALL DONE.
E$$IDE: PUSHJ P,ERRMSG
'IDE',,"?"
EXITX,,[ASCIZ/Input error /]
JRST TYPSTS
E$$ODE: PUSHJ P,ERRMSG
'ODE',,"?"
EXITX,,[ASCIZ/Output error /]
TYPSTS: HRLZ T1,STS
MOVEI F,6
TYPST1: MOVEI T,0
LSHC T,3
ADDI T,"0"
OUTCHR T
SOJG F,TYPST1
JRST EXITX
E$$IDS: PUSHJ P,ERRMSG
'IDS',,"?"
EXITX,,[ASCIZ /Illegal device specification in command/]
JRST EXITX
E$$COO: PUSHJ P,ERRMSG
'COO',,"?"
EXITX,,[ASCIZ/Can't OPEN output device/]
JRST EXITX
E$$COI: PUSHJ P,ERRMSG
'COI',,"?"
EXITX,,[ASCIZ/Can't OPEN input device/]
JRST EXITX
E$$CLD: PUSHJ P,ERRMSG
'CLD',,"?"
EXITX,,[ASCIZ/Can't LOOKUP directory/]
JRST EXITX
E$$CLE: PUSHJ P,ERRMSG
'CLE',,"?"
EXITX,,[ASCIZ/Core limit exceeded/]
EXITX: OUTSTR [ASCIZ /
/]
JRST EXITR
E$$DCL: PUSHJ P,ERRMSG
'DCL',,"?"
EXITX,,[ASCIZ/Can't read DECLARE commands/]
JRST EXITX
;ERROR MESSAGE PREFIX PRINTER
ERRMSG: MOVE T2,(P) ;POINT TO ANSWERS
AOS (P) ;ADVANCE RETURN
AOS (P) ;ADVANCE RETURN
OUTCHR (T2) ;OUTPUT PREFIX CHARACTER
HRRZ T1,(T2) ;GET CHARACTER
CAIN T1,"?" ;SEE IF ?
CLRBFI ;YES--CLEAR INPUT BUFFER
HRROI T3,.GTWCH ;WATCH TABLE
GETTAB T3, ;GET IT
MOVEI T3,0 ;ZERO IF MISSING
TLNN T3,(JW.WMS) ;SEE IF SET
TLO T3,(JW.WFL+JW.WPR) ;NO--SET TO PREFIX,LINE
MOVE T1,DEVEXT ;SET OUR PREFIX
HLR T1,(T2) ;GET MESSAGE CODE
TLNE T3,(JW.WPR) ;SEE IF PREFIX SUPPRESSED
PUSHJ P,TYPSIX ;TYPE IN SIXBIT
OUTSTR [ASCIZ / /]
HRRZ T1,1(T2) ;GET ADDRESS OF TEXT
TLNE T3,(JW.WCN+JW.WFL) ;SEE IF COMMENTARY
OUTSTR @T1 ;YES--DO IT
HLRZ T1,1(T2) ;GET NOMESSAGE ADDRESS
TLNN T3,(JW.WCN+JW.WFL) ;SEE IF REST
HRRM T1,(P) ;YES--RETURN THERE INSTEAD
POPJ P, ;RETURN
TYPSIX: MOVEI T,0 ;CLEAR NEXT CHAR
LSHC T,6 ;POSITION IT
ADDI T,40 ;MAKE ASCII
OUTCHR T ;OUTPUT IT
JUMPN T1,TYPSIX ;LOOP UNTIL DONE
POPJ P, ;RETURN
XLIST ;LITERALS
LIT
LIST
RELOC ;SWITCH TO LOW SEG
;STORAGE AREA
FWAZER:! ;START OF AREA TO ZERO
OLDNAM: BLOCK 1
SAVFF: BLOCK 1
NUMCOL: BLOCK 1 ;NUMBER OF TAB SUB-COLUMNS
DEVICE: BLOCK 1
FILNAM: BLOCK 4
IBUF: BLOCK 3
OBUF: BLOCK 3
PDL: BLOCK PDLSIZ
USEPPN: BLOCK 1 ;.LT. 0 THEN NOT LOGGED IN
;.EQ. 0 THEN LOGGED IN AS USER JOB
;.GT. 0 NOT LOGGED IN, CTL JOB'S PPN
FILBLK: BLOCK <.FOPPN+1> ;FILOP. BLOCK
LEBBLK: BLOCK <.RBPRV+1> ;EXTENDED FILOP. LOOKUP BLOCK
NEXTPC: BLOCK 1 ;SAVED PC IN PATH. COROUTINE
DEVEXT: BLOCK 1 ;DEVICE AND EXT TO USE
LNMBLK: BLOCK .PTLLB ;PATH BLOCK FOR LOGICAL NAMES
IOMODE: BLOCK 3 ;OPEN BLOCK FOR UFD/SFD
SFDPTH: BLOCK .PTMAX ;PATH FOR .SFD OPEN
DEVLST: BLOCK 1 ;DEFAULT DEVEXT
BLOCK 1 ;SYS OR NEW
BLOCK 1 ;NEW OR SYS
BLOCK 1 ;OLD
BLOCK 1 ;0
LWAZER==.-1 ;END
END HELP