HELLO.MAC;4/AU/-BF=HELLO.MAC;3 \ -2,2 .IDENT "01.8X" -24,24 ; VERSION: 01.8X -27 ; MODIFIED: ; ; EB033 -- TREAT A GROUP NUMBER OF 10 AS PRIVILEGED ; AND PREVENT THE ABORTING OF HEL BY A PARTIALLY ; LOGGED IN USER.(23-MAR-77) ; ; EB056 -- ALLOW LOGIN .TXT LINES OF 132 CHARACTERS(29-MAY-77) ; ; BLS024 - PREVENT CONTROL-C BY PARTIALLY LOGGED IN USER(11-AUG-77) ; ; JGD -- MODIFIED HELP COMMAND TO ALLOW DISPLAYING OF ; 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) ; ; JGD02 -- PRINT TEXT FILE NOLOG.TXT IF LOGONS DISABLED ; ; JGD03 -- IF BIT 2 IN THE TERMINAL PRIVLEGE MASK IS SET ; (IN U2.CW3), 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 -- 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 4 IN THE PRIVLEGE MASK IS SET THE TERMINAL ; IS LOGGED ON AS SLAVE.(MAKES IT HARD TO LOG OFF). ; % -29,,/; JGD03/ .MCALL GLUN$S,RQST$S -35,,/; JGD03/ EFN2 = 2 ; EVENT FLAG FOR MARKTIME -41,,/; JGD03/ TSK: .ASCII / / TSK1: .BLKW 2 BYE: .RAD50 /...BYE/ -53,,/; JGD01/ 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 FILE SPACE/ .ASCIZ <15><12><7> -65,,/; JGD03/ ER9: .ASCIZ <15>/HEL -- MULTIPLE LOGINS ILLEGAL/ ER10: .ASCIZ <15>/HEL -- REQUESTED TASK NOT FOUND -- LOGGING OFF/ -91,,/; JGD02/ NLGDSP: .WORD 4. ; .WORD DEVNAM ; .WORD 5. ; .WORD DIRNAM ; .WORD 9. ; .WORD NLGNAM ; -96,97,/; JGD/ CHRNUM: .WORD 13. .WORD HLPNAM ; -101,101,/; JGD/ HLPNAM: .ASCII / / TYPNAM: .ASCII /.TXT/ NLGNAM: .ASCII /NOLOG.TXT/ -110,111,/; JGD0-4/ BLKFLG: .WORD 0 ; DISPLAY TOO MANY BLOCKS IN USE MESSAGE(IF SET) INDEX: .WORD 0 ; TEMP STORAGE BYEFLG: .WORD 0 ; IF =1, LOG OFF ON EXIT. USED ONLY IF A TASK ; REQUESTED TO RUN CAN NOT BE FOUND TIMBUF: .BLKW 8. ; TIME BUFFER GLNBUF: .BLKW 6. ; BUFFER FOR GET LUN DIRECTIVE -114,,/; EB056/ .BLKB 132.-80.+2 ; EXPAND BUFFER FOR 132. CHARACTER LINES -116,117,/; JGD03/ MKT: MRKT$ EFN2,100,1 ; WAIT ONE HUNDRED TICS ; SLP PATCH MADE NO PROVISION FOR CLOCKS ; WITH OTHER THAN 60 TICS/SECOND -132,,/; JGD/ ; HELP - PRINT TOPIC.TXT FILE -138,,/; JGD/ ; TOPIC - ANY SUBJECT A USER MIGHT NEED HELP ; WITH, IE EDI, PIP, BASIC, ETC. -162,,/; JGD/ MOV #HLPNAM,INDEX ;INDEX IS THE ADRESS OF THE NAME BUFFER MOV #BUF,R0 ;GET BUFFER ADRESS FOR USE WITH GNBLK CLR CHRNUM ;CLEAR THE CHARACTER COUNTER 425$: CALL $GNBLK ;GET THE NEXT NON BLANK CHARACTER IN THE BUFFER BCS 427$ ;WE MOVED PAST HELP INTO AN END OF LINE SO DISPLAY ;HELP.TXT TST R1 ;ANY BLANKS SEEN YET-WE MUST PASS OVER HELP FIRST BEQ 425$ ;NO,GET ANOTHER NON BLANK,STILL NOT PAST HELP BR 430$ ;JUMP OVER UNNEEDED CODE 427$: MOV #BUF,R0 ;THE COMMAND IS HELP, SO PUT COMMAND IN AS FILE NAME CALL $GNBLK ;GET THE H IN HELP 430$: MOVB R2,@INDEX ;WE'RE PAST HELP, SO PUT FIRST NON BLANK CHARACTER ;INTO AREA ESERVED IN HLPNAM INC CHRNUM ;ADD ONE TO CHARACTER COUNT INC INDEX ;UPDATE ADRESS CALL $GNBLK ;GET ANOTHER CHARACTER BCS 460$ ;END OF LINE FOUND SO PRINT HELP FILE CMP #9.,CHRNUM ;BE CAREFULL THAT NO MORE THAN 9 CHARACTERS BEQ 460$ ;ARE PART OF THE NAME PART OF FILESPECIFIER BR 430$ ;NOT FINISHED, GET ANOTHER CHARACTER 460$: MOVB TYPNAM,@INDEX ;NOW MOVE IN THE NAME .TXT . INC INDEX ;UPDATE ADRESS MOVB TYPNAM+1,@INDEX ; T INC INDEX ;UPDATE ADRESS MOVB TYPNAM+2,@INDEX ; X INC INDEX ;UPDATE ADRESS MOVB TYPNAM+3,@INDEX ; T ADD #4.,CHRNUM ;UPDATE CHARACTER COUNTER -165,165,/; JGD/ 495$: JMP EXIT ; DONE -180,180,/; JGD01-03/ MOV #ER7,R0 ; GET SET TO PRINT WARNING MESSAGE MOV #40,ODPB+Q.IOPL+4 ; SET NORMAL CARRIAGE RETURN CALL WRIT ; WRITE OUT THE LOGON DISABLED MESSAGE MOV #NLGDSP,R1 ; GET READY TO PRINT NOLOG.TXT CALL DSPFIL ; PRINT IT MOV #ODPB,R4 ; GET OUTPUT DPB ADRESS MOV #IO.DET,2(R4) ; SET FUNCTION TO DETACH CALL QIO ; DETACH TERMINAL JMP ERROR1 ; AND EXIT -227,,/;BLS024/ CALL $SWSTK,461$ ; SWITCH TO SYSTEM STATE MOV $TKTCB,R1 ; GET MY TCB ADDRES MOV T.UCB(R1),R1 ; PICKUP UCB ADDRESS BIS #U2.SLV,U.CW2(R1) ; SET TERMINAL AS SLAVED RETURN ; RETURN TO USER STATE 461$: ; REFERENCE LABEL -262,,/; JGD0-4/ 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 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 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 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 IN TASK NAME MOVB (R0)+,TSK+2 ; INSERT THIRD LETTER INTO TASK NAME 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$: ; BRANCH LABEL -266,267,/; EB033/ BIS #U2.PRV,U.CW2(R5) ; SET TERMINAL A PRIVILEGED ; (TEMPORARY) BIC #U2.LOG,U.CW2(R5) ; SET TERMINAL LOGGED ON -270,,/; JGD01/ MOV INDEX,U.CW3(R5) ; INSERT THE PROTECTION MASK INTO THE UNUSED ; CHARACTERISTICS WORD U.CW3 IN TERMINAL UCB MOV U.LUIC(R5),INDEX ; SAVE THE PROTECTION UIC FOR LATER -316,,/;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 -320,320,/; JGD04/ 100$: TST TXTFLG ; PRINT OUT LOGIN.TXT FILE? -343,343,/; JGD03/ 150$: MOV #10,MKT+M.KTMG ; CHANGE WAIT MAGNITUDE TO 10 TICS 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 SECOND BR 152$ ; AND TRY AGAIN 155$: MOV #ODPB,R4 ; GET TERMINAL DPB ADDRESS -347,,/; EB033/ ; MOV #10,MKT+M.KTMG ; CHANGE WAIT MAGNITUDE TO 10 TICS -350,350,/; JGD03/ DIR$ #MKT ; NO, WAIT ONE TENTH SECOND -356,356,/; JGD04/ BLOS 180$ ; YES BIT #100000,U.CW3(R1) ; IF BIT 15 IN THE PRIVLEGE MASK IS SET, ; LOG ON TERMINAL AS PRIVLEGED REGARDLESS OF UIC BNE 180$ ; TERMINAL SHOULD BE PRIVLEGED SO SKIP OVER -359,359,/; JGD03-5/ BIT #20,U.CW3(R1) ; SHOULD TI: BE SET SLAVE? BNE 182$ ; YES, LEAVE IT SLAVED, SKIP AROUND BIC #U2.SLV,U.CW2(R1) ; ALLOW TERMINAL INPUT AGAIN 182$: TST BYEFLG ; IF A REQUESTED TASK WAS NOT INSTALLED, THEN ; LOG OFF BEQ 190$ ; A TASK IF REQUESTED WAS INSTALLED RQST$S #BYE ; REQUESTED TASK NOT FOUND, LOG OFF BIS #U2.SLV,U.CW2(R1) ; SET TI SLAVE UNTIL BYE CAN RUN 190$: 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.CW3(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 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 SECOND HALF OF TASK NAME CALL $CAT5 ; CALL THE RAD50 SUBROUTINE MOV R1,TSK1+2 ; PUT THE SECOND HALF OF THE TASK NAME IN TSK1 RQST$S #TSK1 ; REQUEST THE TASK TO RUN BCS 7$ ; IF CARRY SET DIRECTIVE IS REJECTED RETURN ; 7$: BR ERR10 ; GO WARN THAT TASK WAS NOT FOUND -375,375,/; JGD02/ BR ERROUT ; -377,,/; JGD01/ ERR9: MOV #ER9,R0 ; MULTIPLE LOGINS FOR NON PRIVLEDGED USERS BR ERROR ; ARE ILLEGAL ERR10: MOV #ER10,R0 ; REQUESTED TASK NOT FOUND CALL WRIT ; WRITE OUT WARNING MESSAGE INC BYEFLG ; SET BYE FLAG SO TERMINAL WILL LOG OFF AT EXIT RETURN ; FINISH LOGGING ON -386,386,/; JGD02/ ERROR1: MOV $TKTCB,R0 ; GET OUR TCB ADDRESS -388,,/; JGD03/ BIC #U2.SLV,U.CW2(R0) ; BE SURE TO SET THE TERMINAL NON SLAVE -720,,/; JGD01/ MOV ENTRY,R0 ; GET ADRESS OF ENTRY ADD #A.TERM,R0 ; UPDATE TO POINT AT TERMINAL # GLUN$S #LUN1,#GLNBUF ; GET TERMINAL NUMBER 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 -730,730, /; JGD01/ MOV #FDPB,R4 ; GET FILE DPB ADRESS -737,737,/; 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 RETURN ; LEAVE ACCOUNT FILE ALONE 30$: JMP ERR9 ; REPORT ERROR AND LOG OFF -815,815,/; EB056/ OPEN$R R0,,R1,#0,#BUF,#132. ; OPEN TEXT FILE FOR READ -818,818,/; EB056/ 10$: GET$ #$ACTFL,#BUF,#132. ; READ A LINE FROM THE FILE /