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++.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), EXP 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, ; 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, ;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