HELLO.MAC;2/AU=HELLO.VGN/BF \ -2,2 .IDENT /01.22X/ -33 ; ; JGD MODIFIED HELP COMMAND TO ALLOW DISPLAYING OF ; JGD07 A TEXT FILE "NAME.TXT" WHEN THE COMMAND ; HELP $NAME IS GIVEN. ; ; JGD01 STORE TERMINAL NUMBER IN RSX11.SYS AT LOGON ; CHECK TO BE SURE NOT LOGGED ONTO OTHER TERMINAL, ; PUT PROTECTION WORD INTO TI:'S UCB(IN U.CW3 ; FOR NOW BUT EVENTUALLY IN U.PRV1=U.LUIC-2). ; THIS ALLOWS LOGIN TIME ACCOUNTING TO BE DONE ; AND ENABLES SELECTIVE PROTECTION FEATURES TO ; BE USED. ; ; JGD02 PRINT TEXT FILE NOLOG.TXT IF LOGONS DISABLED ; ; JGD03 IF BIT 2 IN THE TERMINAL PRIVLEGE MASK IS SET ; (IN U.PRV1), THEN RUN XXX AS HELLO EXITS. ; ALSO IF BIT 2 IS SET THE PRINTING OF LOGIN.TXT ; IS SUPRESSED. FINALLY, IF THE REQUESTED TASK ; CAN NOT BE RUN(ERROR RETURN), A WARNING MESSAGE ; IS PRINTED AND THE TERMINAL IS LOGGED OFF. ; ; JGD04 WARN THE USER THAT THE NUMBER OF DISK BLOCKS HE HAS IN USE ; EXCEEDS THE NUMBER OF BLOCKS ALLOCATED TO HIM. ; IF BIT 15 IN THE PRIVLEGE MASK IS SET THE TERMINAL ; AND USER IS LOGGED ON AS PRIVLEGED REGARDLESS OF ; THE TERMINAL UIC ; ; JGD05 IF BIT 3 IN THE TERMINAL PRIVLEGE MASK IS SET, LOG THE ; TERMINAL ON AS SLAVED. ; ; JGD06 CHANGE ALL REFERENCES TO U.CW3 TO U.PRV1=U.LUIC-2 SO THAT ; THE ACCOUNTING PACKAGE MAY BE USED WITH TERMINAL MULTIPLEXERS ; ; JGD08 MODIFICATIONS TO ALLOW USE OF VIRTUAL TERMINAL TO SIMULATE ; A BATCH PROCESS. ; 1) IF TERMINAL A VT DO NOT ENTER ACCOUNT FLAG ; 2) IF REQUEST FOR LOGON IS FROM A 'USER' ON VT0, ; THEN MULTIPLE LOGINS LEGAL ; ; JGD09 MODIFY HELP CODE SO THAT IF FIRST KEYWORD IS NOT ; FOUND, HELP.TXT IS CLOSED AND KEYWORD.TXT IS SEARCHED ; FOR THE REMAINING KEYWORDS. OPERATION IS IDENTICAL ; TO THE HELP $NAME KEYWORD PROCESSING EXCEPT THAT ; THE '$' IS NO LONGER REQUIRED. IF HELP.TXT IS ; A LONG FILE USING THE HELP $NAME WILL STILL PROVIDE ; A FASTER SEARCH. ; ; JGD10 MODIFY HELP CODE TO ALLOW FOR THE EXISTANCE OF ; SYNONYM KEYWORDS. A '$' IN PLACE OF THE LEVEL DIGIT ; IS TAKEN TO MEAN THAT THE LEVEL STAYS THE SAME ; AND THE KEYWORD IN THE FILE IS A SYNONYM FOR THE ; PREVIOUSLY FOUND KEYWORD/LEVEL IDENTIFIER. ; IN ADDITION THE MATCHALL LEVEL IDENTIFIER IS ADDED. ; IF A '#' IS IN COLUMN 1 OF THE HELP FILE, ALL KEYWORD PHRASES ; ARE RETURNED AS A MATCH. THIS FACILITATES USING THE LAST ; HELP RECORD IN A SPECIALIZED NAME.TXT FILE , AS AN INDEX TO ; REMIND THE USER AS TO WHAT KEYWORDS ARE AVAILABLE. ; ; JGD11 MCR HAS BEEN MODIFIED TO WORK WITH A /NOLI SWITCH ; WITH ...AT. THIS CHANGES SOMEWHAT WHEN MCR SHOOTS ; OUT A PROMPT. IN ORDER FOR BATCH TO WORK, HELLO ; MUST PROMPT ON EXIT. SO SET T3.MCR IN T.ST3 ON EXIT. ; BOY IS BATCH/VT: DUMB! ; ; JGD12 FIX 2 BUGS AT LOGCMD:. 1) CHANGE U.PRV1(R2) TO U.PRV1(R1). ; RUNCHK CLOBBERED R2., 2) AFTER MODIFYING MCRDIS TO REMOVE ; EXCESS MCRPROMPTING, NEED TO ADD A <15><12>/>/ FOR THE PRINTOUT ; OF @LOGCMD SO THAT IT WON'T OVERPRINT.. ; ; JGD13 FIX HELP %, SO THAT THIS SYNTAX ALSO WILL LOOK FOR HELP ; IN NAME.TXT IF THE HELP INFORMATION IS NOT IN HELP.TXT -57 ; ; MRJ002 23-MAR-78 NOTIFY USER IF MAIL WAITING FOR HIM. MAIL UTILITY ; COURTISY OF MARK JOHNSON, ALBERTA HAIL PROJECT ; % -59,,/; JGD01/ .MCALL GLUN$S,RQST$S,UCBDF$ UCBDF$ .IFNDF D$$H11&D$$J11&D$$M11&D$$ZMD&D$$Z11 U.PRV1=U.CW3 .IFF U.PRV1=U.LUIC-2 .ENDC -65,,/; JGD03 EFN2 = 2 ; EVENT FLAG FOR MARKTIME ; ; -69,,/; JGD03/ TSK: .ASCII / / TSK1: .BLKW 2 BYE: .RAD50 /...BYE/ -81,,/; JGD04/ MS7: .ASCIZ <15><12>/HEL -- LOGGED ONTO OTHER TERMINAL ALSO?/<15><12><7> MS8: .ASCII <15><12>/>> YOU ARE USING MORE THAN YOUR ALLOCATED DISK SPACE/ \ .ASCII <15><12>/>> PLEASE CLEAN UP YOUR UIC OR REQUEST MORE STORAGE SPACE/ % .ASCIZ <15><12><7> -82,,/;MRJ002/ MAIMSG: .ASCII <15><12><7>/>>>>YOU HAVE MAIL<<<<12><7><0> -97,,/; JGD01/ ER12: .ASCIZ <15>/HEL -- MULTIPLE LOGINS ILLEGAL/ -,,/; JGD03/ ER13: .ASCIZ <15>/HEL -- REQUESTED TASK NOT FOUND -- LOGGING OFF/ -114,,/;MRJ002/ ; ; MAIL FILE DESCRIPTOR ; MAIDSP: .WORD 4 .WORD MAIDEV .WORD 6 .WORD MAIDIR .WORD 10. .WORD MAIFIL MAIDEV: .ASCII /LB1:/ MAIDIR: .ASCII /[10,3]/ MAIFIL: .ASCII /000000.TXT/ -124,,/; JGD02/ NLGDSP: .WORD 4. ; .WORD DEVNAM ; .WORD 5. ; .WORD DIRNAM ; .WORD 9. ; .WORD NLGNAM ; -130,,/; JGD07/ HLPFIL: .WORD 4 .WORD DEVNAM .WORD 5 .WORD DIRNAM CHRNUM: .WORD 13. .WORD HLPNAM -139,,/; JGD07/ HLPNAM: .ASCII / / -141,141,/; JGD01/ DEVNAM: .ASCII /LB1:/ ; DEVICE FOR [1,2]HELP.TXT AND LOGIN.TXT -144,,/; JGD12/ LOG: .ASCII <15><12>/>/ -145,,/; JGD12/ NLGNAM: .ASCII /NOLOG.TXT/ -156,,/; JGD04/ BLKFLG: .WORD 0 ; DISPLAY TOO MANY DISK BLOCKS IN USE MSG IF SET INDEX: .WORD 0 ; TEMP STORAGE -,,/; JGD03/ BYEFLG: .WORD 0 ; IF =1, LOG OFF AND EXIT. USED ONLY IF A ; TASK REQUESTED TO RUN CAN NOT BE FOUND -,,/; JGD08/ VTFLG: .WORD 0 ; IF TERMNAL 'VT', DON' T PRINT OUT LOGIN HEADER -,,/; JGD09/ PASFLG: .WORD 0 ; IF =0, ON FIRST PASS TROUGH HELP PROCESSOR ; IF CAN'T FIND KEYWORD, TRY OPENING FILE ; NAME.TXT FOR A SECOND PASS. IF GT 1, SECOND ; PASS DONE, SO EXIT IF CAN'T FIND KEYWORD -,,/; JGD10/ SYNFLG: .WORD 0 ; IF =0, NOT A SYNONYM, IF >0 A SYNONYM MTCHAL: .WORD 0 ; IF =1, MATCHES ALL KEYWORDS,ALL LEVELS -165,,/; JGD001/ GLNBUF: .BLKW 6. ; BUFFER FOR GET LUN DIRECTIVE -171,171,/; JGD03/ MKT: MRKT$ EFN2,100.,1 ; WAIT FOR ONE HUNDRED TICS ; SLP PATCH MADE NO PROVISION FOR CLOCKS ; WITH OTHER THAN 60 TICS/SEC -203,204,/; JGD07/ ; HELP - DISPLAY FIRST SECTION OF LB1:[1,2]HELP.TXT ; HELP KEY1 KEY2 ... KEY9 - DISPLAY A SECTION OF LB1:[1,2]HELP.TXT -208,,/; JGD07/ ; HELP $NAME - DISPLAY FILE NAME.TXT ON [1,2] OF USER'S SY: -244,245,/; JGD07/ CMPB #'$,(R0) ; MAYBE A $? BEQ 4050$ ; YES, PROCESS THIS SPECIAL HELP COMMAND ; CMPB #'%,(R0)+ ; ; EB079 CMPB #'%,(R0) ; IS FIRST INPUT A % BNE 4020$ ; NO MOVB #40,(R0) ; YES, SO MAKE THE %, A SPACE -256,,/; JGD13/ MOV #LOGNAM,HLPFIL+2 ; SET UP FOR USE IF KEYWORD NOT IN HELP.TXT MOV #9.,HLPFIL+4 ; SET UP CHAR. CNT FOR UIC STRING MOV #LOGINU,HLPFIL+6 ; SET UP LOGIN UIC STRING -260,,/; JGD07/ 4050$: TSTB (R0)+ ; BUMP TO FIRST CHARACTER OF FILE NAME MOV #HLPNAM,R3 ; GET ADRESS OF PLACE TO PUT NAME CLR CHRNUM ; ASSUME ZERO LENGTH TO START WITH 4060$: MOV R0,R4 ; SAVE LOCATION IN BUFFER IN CASE OF CMPB (R0),#15 ; IS IT A RETURN? BEQ 4080$ ; YES, GO DISPLAY HELP FILE CMPB (R0),#40 ; IS IT A SPACE BEQ 4080$ ; YES, GO DISPLAY HELP FILE MOVB (R0)+,(R3)+ ; NO, MOVE IN FILE NAME(UP TO 9 CHARACTERS) INC CHRNUM ; AND INCREMENT CHARACTER COUNT CMP #9.,CHRNUM ; ARE WE AT 9 CHARACTERS YET? BNE 4060$ ; NO, WE DON'T HAVE FILE NAME ; SO BRANCH BACK AND LOOK FOR EOL, SP, OR CHAR. ; ; YES, WE HAVE FILE NAME ; HOWEVER, >9 CHAR. FILENAMES TRUNCATED AND ; KEYWORDS AFTER >9 CHAR FILE NAME WILL FAIL 4070$: MOV R0,R4 ; SAVE POINTER IN BUFFER AFTER FILE NAME 4080$: MOVB #'.,(R3)+ ; MOVE IN "." MOVB #'T,(R3)+ ; MOVE IN "T" MOVB #'X,(R3)+ ; MOVE IN "X" MOVB #'T,(R3) ; MOVE IN "T" ADD #4.,CHRNUM ; UPDATE THE CHARACTER COUNT IN THE FILE STRING MOV #HLPFIL,R1 ; POINT TO FILE DESCRIPTOR BLOCK MOV #1,FRCFLG ; FORCE FILE TO BE PRINTED CALL HELPP ; CALL HELP PROCESSOR JMP EXIT ; AND EXIT -277,277,/; JGD02/ MOV #ER7,R0 ; MOV #40,ODPB+Q.IOPL+4 ; SET NORMAL CARRIAGE RETURN CALL WRIT ; MOV #NLGDSP,R1 ; GET READY TO PRINT NOLOG.TXT CALL DSPFIL ; MOV #ODPB,R4 ; GET OUTPUT DPB ADRESS MOV #IO.DET,2(R4) ; SET FUNCTION TO DETACH CALL QIO ; DETACH TERMINAL JMP ERROR1 ; AND EXIT ; JMP ERR7 ; YES -354,355,/;MRJ002/ MOV #MAIFIL,R5 ; WE'LL USE IT FOR MAIL TOO MOV #6.,R2 ; SET COUNT OF BYTES TO MOVE 482$: MOVB (R0),(R1)+ ; MOVE THEM MOVB (R0)+,(R5)+ ; SET UP MAIL FILE NAME(IN CASE IT EXISTS) -372,,/; JGD04/ MOV ENTRY,R0 ; POINT TO ADDRESS OF ACCOUNT ENTRY ADD #A.UBLK,R0 ; POINT TO USED BLOCKS ENTRY MOV (R0),R1 ; SAVE USED BLOCKS IN R1 MOV ENTRY,R0 ; POINT TO ENTRY ADDRESS OF ACCOUNT ADD #A.ABLK,R0 ; POINT TO ALLOWED BLOCKS ENTRY MOV (R0),R2 ; ALLOCATED BLOCKS IN R2 CMP R2,R1 ; IS ALLOWED BLOCKS>=USED BLOCKS BGE 485$ ; YES, SKIP SETTING WARNING FLAG INC BLKFLG ; NO, SET FLAG -,,/; JGD01/ 485$: MOV ENTRY,R0 ; GET ADDRESS OF ACCOUNT ENTRY AGAIN ADD #A.PRIV,R0 ; POINT TO ADDRESS OF PRIVLEDGE MASK WORD MOV (R0),INDEX ; SAVE THE MASK WORD -,,/; JGD03/ BIT #4,INDEX ; CHECK TO SEE IF TASK TO BE RUN ON EXIT BEQ 490$ ; NO, ITS OK TO PRINT LOGIN.TXT INC TXTFLG ; YES, DON'T PRINT LOGIN.TXT INC FRCFLG ; YES, DON'T PRINT LOGIN.TXT MOV ENTRY,R0 ; GET ADDRESS OF ACCOUNT ENTRY ADD #A.TNAM,R0 ; POINT TO TASK NAME TO RUN IF ANY MOVB (R0)+,TSK ; INSERT FIRST LETTER INTO TASK NAME MOVB (R0)+,TSK+1 ; INSERT SECOND LETTER INTO TASK NAME MOVB (R0)+,TSK+2 ; INSERT THIRD LETTER INTO RUN COMMAND MOVB (R0)+,TSK+3 ; INSERT FOURTH LETTER INTO TASK NAME MOVB (R0)+,TSK+4 ; INSERT FIFTH LETTER INTO TASK NAME MOVB (R0),TSK+5 ; INSERT LAST LETTER INTO TASK NAME 490$: ; BRANCHING LABEL -376,377,/ ; EB033/ BIS #U2.PRV,U.CW2(R5) ; SET TERMINAL AS PRIVILEGED ; (TEMPORARY)TI: SLAVED EARLIER -381,,/; JGD01/ MOV INDEX,U.PRV1(R5); INSERT THE PROTECTION MASK INTO THE UNUSED ; CHARACTERISTICS WORD U.PRV1 IN TERMINAL UCB MOV U.LUIC(R5),INDEX ; SAVE THE PROTECTION UIC FOR LATER -392,,/; JGD08/ TST VTFLG ; IS BATCH TRYING TO LOG ONTO A VIRTUAL BEQ 65$ ; IF EQ, NO PRINT OUT ALL HEADERS JMP 120$ ; IF NE, YES, SKIP PRINTING HEADER 65$: ; REF LABLE -428,428,/;MRJ002/ CALL MAIL ; NOTIFY USER IF THERE IS MAIL FOR HIM/HER -,,/; JGD04/ TST BLKFLG ; IS THE USER USING TOO MANY BLOCKS BEQ 100$ ; NO , SKIP OVER MOV #MS8,R0 ; YES, PRINT WARNING MESSAGE CALL WRIT ; AT TERMINAL JMP 100$ ; SKIP OVER PRINTING JUNK TO CO: ;*****>>>>WE CAN NEVER GET TO THIS SECTION OF CODE -471,,/; JGD04/ 100$: ; REF LABLE -495,495,/; JGD03/ 150$: MOV #10,MKT+M.KTMG ; CHANGE WAIT MAGNITUDE TO 10 TICS ; EB033 152$: CALL RUNCK ; CHECK OUT TO SEE IF RUN TASK ON EXIT BCC 155$ ; IF CARRY IS CLEAR CONTINUE DIR$ #MKT ; IF CARRY SET, WAIT ONE TENTH SECOND BR 152$ ; AND TRY AGAIN 155$: MOV #ODPB,R4 ; GET TERMINAL DPB ADDRESS -500,500,/; EB033/ ; MOV #10.,MKT+M.KTMG ; CHANGE WAIT MAGNITUDE -510,515,/; JGD03/ BIT #100000,U.PRV1(R1) ; IS BIT 15 SET, IF YES SET TI: PRIVLEGED BNE 180$ ; YES, TI: SHOULB BE PRIVLEGED 175$: BIC #U2.PRV,U.CW2(R1) ; NO, CLEAR PRIV FLAG ;180$: BIC #U2.SLV,U.CW2(R1) ; ALLOW TERMINAL INPUT AGAIN 180$: BIC #T3.MCR,T.ST3(R0) ; INHIBIT MCR PROMPT -,,/; JGD05/ BIT #10,U.PRV1(R1) ; SHOULD TERMINAL BE LEFT SLAVED AT LOGON BNE 182$ ; YES, LEAVE IT SLAVED -,,/; EB033/ BIC #U2.SLV,U.CW2(R1) ; ALLOW TERMINAL INPUT AGAIN -,,/;BLS010/ ; ROR (SP)+ ; SHOULD WE WAIT FOR CO: TO FINISH? ; BCS 185$ ; IF CS NO ; CALL $COWAT ; YES--WAIT NOW ;185$: ; REF LABEL -,,/; JGD03/ 182$: TST BYEFLG ; IF A REQUESTED TASK WAS NOT INSTALLED, THEN ; LOG OFF BEQ LOGCMD ; A TASK IF REQUESTED WAS INSTALLED ; SO CONTINUE WITH LOGIN RQST$S #BYE ; REQUESTED TASK NOT FOUND, LOG OFF BIS #U2.SLV,U.CW2(R1) ; SET TI SLAVE UNTIL BYE CAN RUN JMP EXIT ; RUNCK: MOV $TKTCB,R1 ; GET OUR TCB ADRESS CLC ; CLEAR CARRY FLAG EACH PASS THROUGH MOV T.UCB(R1),R2 ; GET TI UCB ADDRESS BIT #4,U.PRV1(R2) ; IS RUN TASK ON EXIT BIT SET BNE 5$ ; YES, BRANCH RETURN ; NO , THEN RETURN 5$: BIT #U2.AT.,U.CW2(R2) ; IS MCR STILL BUSY ? BEQ 6$ ; NO ,THEN CONVERT TSK TO RAD50 SEC ; YES SET CARRY AND RETURN RETURN ; 6$: MOV #TSK,R0 ; MOVE ADRESS OF TASK NAME INTO R0 INC R1 ; R1 NE 0 -> PERIOD A R50 CHARACTER ; AFTER SETTING UP R0, AND R1 WE CAN USE THE ; SUPPLIED ASCII TO RAD50 CONVERSION ROUTINE CALL $CAT5 ; CALL RAD50 SUBROUTINE MOV R1,TSK1 ; R1 HAS RAD50 TASK NAME, SO PUT IT IN TSK1 CLR R1 ; R1 =0 -> PERIOD A TERMINATOR MOV #TSK+3,R0 ; GET ADDRESS OF 2ND HALF OF TASK NAME CALL $CAT5 ; CALL RAD50 SUBROUTINE MOV R1,TSK1+2 ; MOVE SECOND HALF OF RAD50 NAME INTO TSK1 RQST$S #TSK1 ; REQUEST THE TASK TO RUN BCS 7$ ; IF CARRY SET DIRECTIVE IS REJECTED RETURN ; 7$: JMP ERR13 ; GO WARN THAT TASK WAS NOT FOUND -518,,/; JGD07/ LOGCMD: ;BIT #4,U.PRV1(R2) ; IS A TASK TO BE REQUESTED AT LOGON BIT #4,U.PRV1(R1) ; IS A TASK TO BE REQUESTED AT LOGON BNE 210$ ; YES, SKIP @LOGIN.CMD -,,/; JGD11/ TST VTFLG ; IS THIS A 'BATCH' LOGIN? BNE 210$ ; IF NE, YES, DON'T PROCESS @LOGIN.CMD -529,529,/; JGD12/ ; MOV #LOGINC,R0 ; SET COMMAND ADDRESS ;WB001 MOV #LOG,R0 ; SET COMMAND ADDRESS -546,546,/; JGD12/ ; BIC #T3.MCR,T.ST3(R0) ; INHIBIT MCR PROMPT ;WB001 BIS #T3.MCR,T.ST3(R0) ; SET MCR TO PROMPT -563,563,/; JGD02/ ; BR ERROR ; BR ERROUT ; PRINT WARNING AND GO DISPLAY NOLOGIN.TXT -565,,/; JGD01/ ERR12: MOV #ER12,R0 ;MULTIPLE LOGINS FOR NON PRIVLEDGED USERS BR ERROR ; ARE ILLEGAL -,,/; JGD03/ ERR13: MOV #ER13,R0 ; REQUESTED TASK NOT FOUND CALL WRIT ; WRITE OUT WARNING MESAGE INC BYEFLG ; SET BYE FLAG SO TERMINAL WILL LOG OFF AT EXIT RETURN ; FINISH LOGGING ON -574,574 ERROR1: MOV $TKTCB,R0 ; GET OUR TCB ADDRESS -952,952, /; JGD01/ ; LOGONS, AND WRITE ENTRY BACK TO FILE. ; A NON PRIVLEGED USER IS ALLOWED TO LOG ON TO ONLY ; ONE TERMINAL/ACCOUNT AT A TIME. ADDITIONAL LOGON ; TO MULTI TERMINALS ARE REJECTED. ; A PRIVLEGED USER HOWEVER CAN LOG ON TO AS MANY TERMINALS ; AT ONCE AS HE/SHE DESIRES. -962,,/; JGD01/ MOV ENTRY,R0 ; GET ADDRESS OF ENTRY ADD #A.TERM,R0 ; UPDATE TO POINT AT TERMINAL # GLUN$S #LUN1,#GLNBUF ; GET TERMINAL UNIT NUMBER -,,/; JGD08/ CMP GLNBUF,#"VT ; IS USER TRYING TO LOG ONTO "VT" FOR BATCH BNE 101$ ; IF NE, NO, SO SKIP OVER INC VTFLG ; SET VIRTUAL TERMINAL FLAG BR 10$ ; AND SO DON'T FIDDLE WITH ACCOUNT FILE -,,/; JGD01/ 101$: TST (R0) ; IS USER IS STILL LOGGED ONTO SOME ; TERMINAL, BNE 20$ ; HE IS, SO DON'T FIDDLE WITH ACCOUNT MOV GLNBUF,(R0)+ ; HE ISN'T,INSERT 'TT' INTO FILE MOV GLNBUF+2,(R0) ; INSERT FLAG BYTE AND TERM.# INTO FILE -993,,/; JGD01/ 20$: MOV INDEX,R1 ; GET TERMINAL GROUP NUMBER SWAB R1 ; MOVE GROUP NUMBER TO LOWER BYTE CMPB R1,#10 ; IF THE USER IS NOT PRIVLEDGED, THEN LOGGING ; ON TO MULTIPLE TERMINALS IS ILLEGAL BHI 30$ ; NOT PRIVLEDGED, WARN AND LOG OFF MOV #MS7,R0 ; WARN USER HE IS LOGGED ONTO MULTIPLE CALL WRIT ; TERMINALS -,,/; JGD8/ 25$: RETURN ; LEAVE ACCOUNT FILE ALONE -,,/; JGD01/ 30$: JMP ERR12 ; REPORT ERROR AND LOG OFF -1140,,/; JGD10/ ; ; KEYWORDS MAY HAVE SYNONYMS IN THE HELP FILE. FOLLOWING A VALID KEYWORD ; AND LEVEL COMBINATION, ANY NUMBER OF LINES PRECEDED WITH A '$' IN PLACE OF ; THE LEVEL DIGIT, MAY BE PLACED, EACH HAVING A SYNONYM KEYWORD. ; 1 KEY1 ; $ SYNONYM1 ; $ SYNONYM2 ; $ SYNONYM3... ; AND SO ON. THIS ALLOWS THE SAME HELP INFORMATION TO BE DISPLAYED FOR A WIDER ; RANGE OF USER INPUTS. FOR EXAMPLE, HELP PIP DIRECTORY, HELP PIP /LI, AND ; HELP PIP /FU COULD ALL DISPLAY THE SAME INFORMATION. ; ; NORMALLY, VERY LITTLE INFORMATION IS KEPT IN HELP.TXT, EXCEPT FOR BRIEF ; QUICKIES. IF THE INITIAL KEYWORD IS NOT FOUND IN HELP.TXT , THEN ; KEYWORD.TXT IS SEARCHED(IF IT EXISTS, OR THE 'UNKNOWN QUALIFIER' MESSAGE IS ; PRODUCED. IF THE KEYWORDS CAN NOT BE FOUND IN KEYWORD.TXT THE OPTION ; EXISTS AT THIS POINT TO LET THE USER KNOW EXACTLY WHAT KEYWORDS ARE AVAILABLE ; IN KEYWORD.TXT. TO ACCOMPLISH THIS, A MATCHALL LEVEL IDENTIFIER HAS BEEN ; ADDED. A # IN COLLUM 1 WILL MATCH ANY AND ALL STRINGS OF KEYWORDS. TO ; BE USEFUL, THE MATCHALL LEVEL IDENTIFIER MUST BE THE LAST HELP SECTION OF ; OF THE SPECIFIED FILE. THIS SECTION OF THE FILE WILL THEN BE DISPLAYED IF THE ; KEYWORDS CAN NOT BE FOUND EARLIER. FOR EXAMPLE AN INDEX OF AVAILABLE KEYWORDS ; MAY BE DISPLAYED. -1178,,/; JGD09/ ; ; IF HELP.TXT BECOMES LENGTHY, THE SEARCH TIMES FOR A KEYWORD ARE LONG. ; TO SPEED UP PROCESSING, IF A KEYWORD IS NOT FOUND IN HELP.TXT, HELP.TXT IS ; CLOSED, AND A FILE WITH THE NAME 'KEYWORD1.TXT' IS OPENED FOR READ. IF ; 'KEYWORD1.TXT' IS SUCCESSFULLY OPENED, IT IS SEARCHED FOR KEYWORDS2.....8 ; IN AN IDENTICAL MANNER TO HELP.TXT. IF 'KEYWORD1.TXT' CAN NOT BE OPENED ; EITHER BECAUSE IT DOESN'T EXIST OR BECAUSE OF AN FCS ERROR, THE 'UNKNOWN ; QUALIFIER' ERROR MESSAGE IS DISPLAYED. IF HELP.TXT IS LENGTHY, ; HELP $KEYWORD1,KEYWORD2...., WILL FIND THE INFORMATION MORE SPEEDLY ; AS THE INITIAL OPENING, SEARCHING, AND CLOSING OF HELP.TXT IS NOT REQUIRED. ; -1194,1196,/; JGD09/ HELP2: MOV #$ACTFL,R0 ; POINT AT FDB WE WILL USE FOR HELP FILE; EB077 OPEN$R R0,,R1,#FD.PLC,#HLPBUF,#132. ; OPEN IT FOR READ ; EB077 BCC 10$ ; IF CC, NO ERROR TST PASFLG ; IF SECOND PASS THROUGH, AND CAN'T FIND FILE BGT 90$ ; REPORT OPEN ERROR AS UNKNOWN QUALIFIER JMP FILERR ; IF EQ 0, (1ST PASS) REPORT FCS ERROR ; THIS DIVISION OF ERRORS IS NOT QUIET RIGHT ; BUT IT IS SERVICIBLE ; BCS FILERR ; REPORT FILE SYSTEM PROBLEM ; EB077 10$: ; REF LABLE -1213,,/; JGD10/ 31$: CMPB #40,(R4) ; IS NEXT CHARACTER A SPACE? BNE 40$ ; IF NE, NO, SO ASSUME A VALID KEYWORD INC R4 ; BUMP TO NEXT CHARACTER BR 31$ ; AND LOOP -1224,1224,/; JGD10/ ; BCC 100$ ; YES, KEYWORD IS AMBIGUOUS ; EB077 BCS 60$ ; NO, KEYWORD NOT AMBIGUOUS ; JGD10 TST MTCHAL ; IS AMBIGUOUS, BUT IS IT THE MATCHALL ; JGD10 BEQ 100$ ; NO, IT IS AMBIGUOUS ; JGD10 -1234,1234,/; JGD09/ 90$: ; REF LABLE TST PASFLG ; IS THIS THE FIRST PASS THROUGH BGT 92$ ; IF GT, NO, REALY CAN'T FIND KEYWORD, EXIT INC PASFLG ; SET FLAG, AND LOOK FOR INFO IN NAME.TXT JMP HELP1 ; PARSE COMMAND LINE, AND SET UP FDB 92$: ; REF LABLE MOV #ER11,R0 ; UNKNOWN KEYWORD -1249,1249,/; EB077/ BCC 40$ ; YES, DONE COPYING RECORDS TO TI:(MAYBE) -1253,1253,/; JGD10/ ;40$: RETURN ; ; EB077 40$: ; REFERENCE LABLE TST SYNFLG ; COULD THE KEYWORD BE A SYNANYM BNE 10$ ; IF NE, YES, SO SKIP PRINTING IT AND CHECK NEXT RETURN ; ALL DONE PRINTING HELP -1257,,/; JGD09/ HELP1: CLOSE$ #$ACTFL ; MUST CLOSE OLD FILE BEFORE TRYING AGAIN MOV #BUF+4,R0 ; POINT TO 5TH PLACE IN COMMAND BUFFER 4050$: TSTB (R0)+ ; BUMP TO FIRST CHARACTER OF FILE NAME -,,/; JGD13/ CMPB #40,(R0) ; COULD IT BE A %? BEQ 4050$ ; IF EQ, KEEP LOOKING FOR FILE NAME -,,/; JGD09/ MOV #HLPNAM,R3 ; GET ADRESS OF PLACE TO PUT NAME CLR CHRNUM ; ASSUME ZERO LENGTH TO START WITH 4060$: MOV R0,R4 ; SAVE LOCATION IN BUFFER IN CASE OF CMPB (R0),#15 ; IS IT A RETURN? BEQ 4080$ ; YES, GO DISPLAY HELP FILE CMPB (R0),#40 ; IS IT A SPACE BEQ 4080$ ; YES, GO DISPLAY HELP FILE MOVB (R0)+,(R3)+ ; NO, MOVE IN FILE NAME(UP TO 9 CHARACTERS) INC CHRNUM ; AND INCREMENT CHARACTER COUNT CMP #9.,CHRNUM ; ARE WE AT 9 CHARACTERS YET? BNE 4060$ ; NO, WE DON'T HAVE FILE NAME ; SO BRANCH BACK AND LOOK FOR EOL, SP, OR CHAR. ; ; YES, WE HAVE FILE NAME ; HOWEVER, >9 CHAR. FILENAMES TRUNCATED AND ; KEYWORDS AFTER >9 CHAR FILE NAME WILL FAIL 4070$: MOV R0,R4 ; SAVE POINTER IN BUFFER AFTER FILE NAME 4080$: MOVB #'.,(R3)+ ; MOVE IN "." MOVB #'T,(R3)+ ; MOVE IN "T" MOVB #'X,(R3)+ ; MOVE IN "X" MOVB #'T,(R3) ; MOVE IN "T" ADD #4.,CHRNUM ; UPDATE THE CHARACTER COUNT IN THE FILE STRING MOV #HLPFIL,R1 ; POINT TO FILE DESCRIPTOR BLOCK MOV #1,FRCFLG ; FORCE FILE TO BE PRINTED JMP HELP2 ; CALL HELP PROCESSOR -1283,,/; JGD10/ TST MTCHAL ; IS IT THE ULTIMATE MATCH BGT 20$ ; IF GT 0, YES TST SYNFLG ; IS THIS A SYNONYM RECORD? BGT 20$ ; YES, SO TREAT IT AS RECORD WITH SAME DEPTH -1315,1315,/; JGD10/ COMPAR: ; REFERENCE LABLE TST MTCHAL ; IS IT A MATCHALL? BGT 70$ ; IF GT 0, YES A PERFECT MATCH MOV R4,-(SP) ; SAVE R4 ; EB077 -1344,1344,/; EB077/ 70$: RETURN ; -1459,1459,/; JGD10/ ISREC: ; REF LABLE CLR MTCHAL ; RESET MATCHALL FLAG CLR SYNFLG ; RESET SYNONYM FLAG CMPB (R0),#'$ ; IS IT A SYNONYM($ INSTEAD OF DIGIT) BNE 5$ ; NO, LOOK FOR MATCHALL INC SYNFLG ; YES, SET SYNONYM BR 20$ ; AND RETURN WITH CARRY CLEAR 5$: CMPB (R0),#'# ; IS IT THE MATCHALL BNE 10$ ; NO, LOOK FOR A DIGIT INC MTCHALL ; SO SET FLAG TO SHOW IT MATCHES EVERYTHING BR 20$ ; RETURN TO MAINLINE 10$: CMPB (R0),#'1 ; IS THE FIRST CHARACTER A DIGIT?; EB077 -1480,1481,/; JGD/ ; TST TXTFLG ; SEE IF COMMA OR SLASH LOGIN ;BLS010 ; BEQ 100$ ; IF EQ COMMA--TYPE THE FILE ; BLS010 -1599,,/; MRJ002/ ;+ ; *** - MAIL - CHECK FOR MAIL FOR THIS USER ; ; INPUT: ; MAIFIL - FILE NAME ENCODED AS GGGMMM.TXT ; ; THE PRESENCE OF MAIL IS INDICATED BY A FILE ; CONTAINING IT ON "MAIDEV"(LB1:) UNDER UIC ; "MAIDIR"([10,3]) ; ;- MAIL: FINIT$ CLR ODPB+Q.IOPL+4 ; SET CARRIAGE CONTROL MOV #MAIDSP,R1 ; SET UP MAIL FILE NAME TO LOOK FOR MOV #$ACTFL,R0 ; GET FDB OPEN$R R0,,R1,#0,#BUF,#80. ; TRY AND OPEN FILE FOR READ MOV F.ERR(R0),R0 ; SAVE ERROR BCS 1$ ; IF ERROR NO FILE MOV #MAIMSG,R0 ; GET READY TO PRINT MAIL AVAILABLE MESSAGE CALL WRIT ; AND PRINT IT 1$: CLOSE$ #$ACTFL ; CLOSE FILE NO MATTER WHAT RETURN /