OU:HLPSUB.MAC=IN:[15,10]HLPSUB.VGN/AU:72. \ -2,2 .IDENT /02.00X/ ; ; JGD16 ADD A PROGRAMABLE WAIT INTO HELP FILES. IF A '~' IS FOUND ; IN COLLUMN 1 OF THE DESIRED SECTION OF HELP TEXT, A 2 SECOND ; WAIT WILL OCCUR FOR EACH '~' FOUND. THIS IS TO AID USERS ; WHO HAVE SCOPE DISPLAYS. IF THE TERMINAL IS NOT A CRT THEN ; NO WAIT WILL OCCUR. ; ; JGD20 Use unsolicited AST during HELP processing so user can exit ; from HELP by typing ^Z at any point. ; ; RVT01 1-JAN-81 ; ADD "?" FEATURE TO HELP TO PRINT ALL THE FILE KEYS AT THAT ; LEVEL. ; ; JGD21 Make =? a valid synonym ; ; JGD22 FIX A BL31 BUG ; ; JGD23 Fix a BL35 introduced bug in processing '?' keyword list ; ; ; % -/CSI$SV/,,/; RVT01/ .MCALL QIOW$S,QIOW$C,QIO$ -,,/; JGD20/ .MCALL DIR$,MRKT$,WTSE$S,ASTX$S -/ER10:/,,/; JGD21/ ER11: .ASCII <15>/??? -- Keyword not found. Allowed keywords are:/ .ASCIZ <15><12> -/.EVEN/,,/; JGD20/ HLPAST: QIO$ IO.ATA!TF.XCC,LUN1,EFN1,,,, ; Attach TI: DETHLP: QIO$ IO.DET,LUN1,EFN1 ; Detach TI: KILHLP: QIO$ IO.KIL,LUN1,EFN1 ; Kill output to TI: MKT: MRKT$ 1,60.,1 ; MARK TIME FOR 1 SEC LUN1=1 ; EFN1=1 ; -,,/; JGD16/ WAIT: .WORD 0 ; IF = 0, DO NOT WAIT 2 SEC BEFORE PRINTING ; IF > 0, WAIT 2 SEC BEFORE PRINTING ONCE: .WORD 0. ; ONLY ALLOW A =? ONE TIME -/SYNBUF:/,,/; RVT01/ COLNUM: .WORD 1000 ; COL NUMBER FOR "?" HELP FEATURE MAXCOL=79. ; DO CR/LF IF IT WOULD GO PAST THIS COLUMN CRLFBF: .BYTE 15,12 TABBF: .BYTE 11,11,0,0 .EVEN -/>XXX HELP NEW STRING/,,/; RVT01/ ; ; IF THE USER KEYWORD IS A "?", ALL THE FILE KEYS AT THAT LEVEL WILL BE ; TYPED OUT. (NORMALLY QUALIFIED UP TO THAT POINT) ; FOR EXAMPLE: ; HELP ? --- PRINT ALL 1ST LEVEL KEYS ; HELP CCL ? -- PRINT ALL THE LEVEL 2 KEYS UNDER KEY#1 OF "CCL" ; -/$HELP:/,,/; JGD20/ DIR$ #DETHLP ; Detach TI: so can reattach DIR$ #HLPAST ; Attach TI: for unsolicited input -/BEQ TEXT/ -/DUPLICATE KEYWORD?/ -/#ER5,/,,/; RVT01/ CMP #1000,COLNUM ; DID WE FIND A '?' BEQ 91$ ; NO MOV #TABBF+2,R0 ; A "?" IN USER KEYWORD MOV #1,R1 ; THAT IS ALL NEEDED, EXIT CALL HLPERR ; 91$: ; REF LABEL -/TEXT:/,,/; JGD16/ CLR WAIT ; DON'T WAIT ON ENTRY -/30$:/,,/; JGD16/ TST WAIT ; DID WE FIND A '~' BEQ 31$ ; NO, JUST PRINT , DON'T WAIT FIRST TST CRT ; IS THIS A SCOPE BEQ 301$ ; IF EQ NO, DON'T WAIT DIR$ #MKT ; MARK TIME FOR 1 SEC WTSE$S #1 ; AND WAIT FOR MARKTIME TO END 301$: CLR WAIT ; AS IF WE HAD NEVER BEEN WAIING BR 10$ ; DON'T PRINT OUT THE '~' 31$: ; REF LABEL -,,/; JGD21/ TST ONCE ; HAVE WE ENCOUNTERED A '?' BNE 60$ ; IF SO' DON'T PRINT -/COMPAR:/,.,/; JGD10/ COMPAR: ; REF LABEL .ENABL LSB MOV R4,-(SP) ; SAVE R4 -/45$:/,.,/; RVT01/ ; IF THE USER KEYWORD IS A "?", TYPE OUT ALL THE FILE KEYWORDS AT THAT LEVEL. 45$: CMPB #'?,(R4) ; IS IT A '?' BEQ 4501$ ; YES JMP 46$ ; NOPE, DO AS NORMAL 4501$: MOV #1,ONCE ; SHOW WE ARE PROCESSING A '?' ;**** CLRB WLDFLG ; ONLY PRINT OUT KEYWORDS ;**** MOV #1,R4 ; SET # KEYWORDS ON LINE COUNTER BIT #10,COLNUM ; MAKE THE COLUMNS 16 POSITIONS WIDE BNE 4551$ ; NO, MOVE OVER 1 INC R4 ; ADD #8.,COLNUM ; 4551$: ADD #8.,COLNUM ; WILL IT FIT ON THIS LINE ADD R1,COLNUM ; CMP COLNUM,#MAXCOL ; HAVE WE COME TO END OF LINE BGT 4552$ ; IF GT, YES, LINE IS FULL JMP 455$ ; IF LE, NO SO TAB AND PRINT 4552$: MOV R1,COLNUM ; THIS LINE'S FULL, ISSUE A FIRST QIOW$C IO.WVB,LUN1,EFN1,,,, ; CR/LF BR 456$ ; 455$: QIOW$S #IO.WVB,#LUN1,#EFN1,,,,<#TABBF,R4> ; INSERT A TAB 456$: QIOW$S #IO.WVB,#LUN1,#EFN1,,,, ; THE FILE KEY BIC #7,COLNUM ; BR 50$ 46$: CMPB (R0)+,(R4)+ -/BNE 45$/,.,/; RVT01/ BEQ 47$ ; YES, FINISH UP JMP 45$ ; NO, KEEP TRYING 47$: ; REF LABEL .DSABL LSB -/ISREC:/,.,/; JGD10/ ISREC: ; REF LABEL CMPB (R0),#'~ ; IS IT A '~' BNE 9$ ; NO INC WAIT ; SHOW WE HIT A WAIT FLAG 9$: ; REF LABEL CMPB (R0),#'1 ; IS THE FIRST CHARACTER A DIGIT? -/SYNSAV:/ -/20$:/,,/; JGD21/ CMPB #'?,(R2) ; A ? MAY NOT BE A SYNONYM BNE 30$ ; IT ISN'T, SKIP CMP ONCE,#1. ; HAVE WE DONE THIS ONCE ALREADY? BEQ 24$ ; DONE THIS ONCE ALREADY, SO EXIT INC ONCE ; SHOW WE'VE FOUND ONE =? -,,/; JGD23/ CLRB FLTHRU ; Fix a BL35 'improvement' -,,/; JGD21/ MOV #ER11,R0 ; WRITE OUT MESSAGE SAYING KEYWORD LIST CALL ERROR ; FOLLOWS BR 30$ ; TREAT THIS TYPE AS SYNONYM 24$: CLRB SYNFLG ; PRETEND IT WASN'T CALLR EXIT ; LETS JUST EXIT BR 100$ ; AND EXIT -/50$:/,.,/; JGD22/ 50$: MOV #STRBUF,R4 ; POINT TO SPACE PRECEDING NEW STRING CALLR $HELP ; TAKE IT FROM THE TOP -/WRIT2:/,, -/RETURN/,,/; JGD20/ HLPXIT: BIC #177400,(SP) ; Clear off high byte CMP (SP),#26. ; Is it ^Z? BNE 20$ ; If EQ, no TST (SP)+ ; Pop SP DIR$ #KILHLP ; Kill I/O JMP EXIT ; And exit 20$: TST (SP)+ ; Pop SP ASTX$S ; Exit ast /