Trailing-Edge
-
PDP-10 Archives
-
bb-jr93k-bb
-
10,7/help/help.mac
There are 10 other files named help.mac in the archive. Click here to see a list.
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