HELLO.MAC;2=[12,10]HELLO.VGN;1/AU \ -2,2 .IDENT /1.24XF/ -95,, ; ; 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 ; ; JGD10 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 HELP FILE , AS AN INDEX TO ; REMIND THE USER AS TO WHAT KEYWORDS ARE AVAILABLE. ; ; JGD11 CHANGES SO WILL WORK WITH BATCH. DON'T PRINT OUT LOGIN ; MESSAGE IF ON VT. DON'T EXECUTE LOGIN.CMD ; ; JGD12 FIX 2 BUGS AT LOGCMD:. 1) CHANGE U.PRV1(R2) TO U.PRV1(R1). ; RUNCHK CLOBBERED R2. ; ; JGD13 ADD SUPPORT FOR GENERALIZED ACCOUNTING IN RSX11M. THESE ; MODIFICATIONS INCLUDE. ; 1) KEEP TRACK OF INVALID LOGIN ATTEMPTS(BUMP COUNTER IN ; U.ACN). ; 2) AT VALID LOGIN, SEND OFF DATA PACKET SAYING TERMINAL TYPE, ; NUMBER, ACCOUNT NUMBER, # PRIOR INVALID LOGIN ATTEMPTS,UIC, ; AND LOGIN TIME. RESET THE QIO, RUN COUNTERS, AND CPU TIME ; COUNTERS. ; 3) EXTENSIVE CHANGES RELATED TO MAKING IT ALL WORK WITH BATCH ; SO THAT BATCH CPU TIME WOULD GET ADDED IN AND LOGGED. ; ; JGD14 BLANK OUT PASSWORD IF LOGIN OF FORM NAME/PASSWORD IS USED. ; ; JGD15 ADD DECNET SUPPORT FOR ACCOUNTING ENHANCEMENTS. IF M$$CLI ; IS DEFINED, AN ADDITIONAL WORD(U.CLI) EXISTS ABOVE U.LUIC. ; THE KMS UCB OFFSETS ARE CONDITIONALIZED TO REFLECT THIS ; POSSIBILITY. ; ; 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. ; ; MRJ002 23-MAR-78 NOTIFY USER IF MAIL WAITING FOR HIM. MAIL UTILITY ; COURTISY OF MARK JOHNSON, ALBERTA HAIL PROJECT ; ; % -98,102, .MCALL QIO$,DIR$,GMCR$,WTSE$S,OPEN$U,CLOSE$,READ$,GLUN$S,QIOW$ .MCALL EXIT$S,GTIM$S,MRKT$,GET$,OPEN$R,FINIT$ -,,/; SR001/ .MCALL CSI$,CSI$1,CSI$2,NMBLK$ -,,/; JGD/ .MCALL RQST$S,UCBDF$,RQST$ -,,/; JGD13/ .MCALL USTP$,SDAT$ -,,/;MLG006/ .MCALL ALTP$ -,,/;EAF003/ .MCALL SPWN$,STSE$ UCBDF$ -,,/; JGD01/ .IFNDF D$$H11&D$$J11&D$$M11&D$$ZMD&D$$Z11 U.PRV1=U.CW3 ; FOR SYSTEMS WITH ONLY DL11'S .IFF -,,/; JGD15/ .IFNDF M$$CLI ; IF NO SUPPORT FOR MULTIPLE CLI'S U.PRV1=U.LUIC-2 ; FOR SYSTEMS WITH MULTIPLEXERS .ENDC ; END CONDITIONAL - M$$CLI .IFDF M$$CLI ; IF SUPPORT FOR MULTIPLE CLI'S U.PRV1=U.CLI-2 ; THEN U.PRV1 SITS ABOVE IT .ENDC ; END CONDITIONAL - M$$CLI .ENDC ; END - D$$H11..ETC -,,/; JGD15/ .IF DF M$$MUP ; MULTI USER PROTECTION BETTER BE PRESENT FOR ; THE OFFSETS TO WORK .IF DF R$$PRV ; IF KMS DATA STRUCTRURE ADDED TO UCB .IFNDF M$$CLI ; IF MULTIPLE CLI SUPPORT NOT PRESENT U.ACN=U.LUIC-4 ; OFFSET INTO EXPANDED UCB FOR ACCOUNT NUMBER .IFF ; IF M$$CLI IS DEFINED U.ACN=U.LUIC-6 ; IF M$$CLI THEN U.ACN BUMPED UP ONE .ENDC ; END CONDITIONAL M$$CLI .ENDC ; R$$PRV -,,/; JGD13/ .IF DF T$$CPU ; IF CPU TIME ACCOUNTING DEFINED U.TIC2=U.ACN-2 ; HIGH ORDER CPU TIME IN TICS U.TIC1=U.TIC2-2 ; LOW ORDER CPU TIME IN TICS U.RNCT=U.TIC1-2 ; NUMBER OF TASK RUN U.INCT=U.RNCT-2 ; NUMBER OF TIMES INS IS USED U.ATCT=U.INCT-2 ; NUMBER OF TIME @ IS RUN .ENDC ; T$$CPU .IF DF Q$$CNT ; IF QIO ACCOUNTING IS DEFINED U.QIO2=U.ATCT-2 ; QIO COUNTER HIGH VAL U.QIO1=U.QIO2-2 ; QIO COUNTER LO VAL .ENDC ; Q$$CNT .ENDC ; M$$MUP -116,,/; JGD03/ TSK: .ASCII / / TSK1: .BLKW 2 BYE: .RAD50 /...BYE/ -150,,/; 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 / .ASCIZ /MORE STORAGE SPACE/<15><12><7> BATMSG: .ASCIZ <15><12>/$SOJ/ -,,/; JGD14/ COVRUP: .ASCII /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/<15> .ASCIZ /OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO/ -184,,/;MRJ002/ MAIMSG: .ASCII <15><12><7>/>>>>YOU HAVE MAIL<<<<12><7><0> ; ; ERROR MESSAGES ; -196,,/; JGD01/ ER12: .ASCIZ <15>/HEL -- MULTIPLE LOGINS ILLEGAL/ -,,/; JGD03/ ER13: .ASCIZ <15>/HEL -- REQURESTED TASK NOT FOUND -- LOGGING OFF/ -202,,/; JGD13/ ER30: .ASCIZ <15>/HEL -- SEND DATA ERROR TO SYSTEM LOGGING TASK LOG.../ -227,,/;MRJ002/ MAIDSP: .WORD 4 .WORD MAIDEV .WORD 6 .WORD MAIDIR .WORD 10. .WORD MAIFIL MAIDEV: .ASCII /LB1:/ MAIDIR: .ASCII /[10,3]/ MAIFIL: .ASCII /000000.TXT/ ; ; LOGIN MESSAGE FILE DESCRIPTOR ; -234,,/; JGD02/ NLGDSP: .WORD 4. ; .WORD DEVNAM ; .WORD 5. ; .WORD DIRNAM ; .WORD 9. ; .WORD NLGNAM ; -241,,/; JGD07/ HLPFIL: .WORD 4 .WORD DEVNAM .WORD 5 .WORD DIRNAM CHRNUM: .WORD 13. .WORD HLPNAM HLPNAM: .ASCII / / .EVEN -285,287,/; JGD/ DEVNAM: .ASCII /LB1:/ ; DEVICE FOR [1,2]HELP.TXT AND LOGIN.TXT -,,/;EAF003/ DIRNAM: .ASCII /[1,2]/ FILNAM: .ASCII /LOGIN.TXT/ ; -,,/; JGD12/ NLGNAM: .ASCII /NOLOG.TXT/ -301,,/; 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 -,,/; JGD10/ MTCHAL: .WORD 0 ; IF =1, MATCHES ALL KEYWORDS,ALL LEVELS ENDFLG: .WORD 0 ; IF =0 MAKE ONE VALIENT TRY TO FIND MATCHAL ; SEARCHING TO END OF FILE, =1, PRINT UNKNOWN ; QUALIFIER MESSAGE(NO MATCHAL AT END OF FILE) -,,/; JGD16/ WAIT: .WORD 0 ; IF = 0, DO NOT WAIT 2 SEC BEFORE PRINTING ; IF > 0, WAIT 2 SEC BEFORE PRINTING CRT: .WORD 0 ; IF = 0, TERMINAL NOT CRT ; IF > 0, TERMINAL IS A CRT -,,/; JGD01/ GLNBUF: .BLKW 6. ; BUFFER FOR GETLUN DIRECTIVE -,,/; JGD13/ ACNTNM: .WORD 0 ; STORAGE FOR ACCOUNT NUMBER -/MKT:/,,/; JGD13/ RQSTLG: RQST$ LOG... ; REQUEST THE LOGGING TASK TO RUN AGAIN USTPLG: USTP$ LOG... ; UNSTOP THE LOGGING TASK SENDAT: SDAT$ LOG...,SNDBUF ; SEND DATA TO LOGGING TASK SNDBUF: .WORD 5. ; SHOW DATA PACKET IS FROM HELLO .BLKW 12. ; SNDBUF+2 - HOUR ; SNDBUF+4 - MIN ; SNDBUF+6 - SEC ; SNDBUF+10 - TERMINAL NUMBER(LOW BYTE) ; SNDBUF+11 - TERMINAL TYPE(T=TT, V=VT) ; SNDBUF+12 - ACCOUNT NUMBER ; SNDBUF+14 - UIC(BINARY) ; SNDBUF+16 - NUMBER OF INVALID LOGIN ATTEMPTS SINCE LAST LOGOFF -389,,/; JGD13/ ; FIND OUT ONCE AND FOR ALL IF TI: IS A VT: GLUN$S #LUN1,#GLNBUF ; IS USER TRYING TO LOG ONTO "VT" FOR BATCH CMP GLNBUF,#"VT ; TO FIND OUT WE CHECK DEVICE NAME BNE 301$ ; IF NE, NO HE/SHE IS NOT INC VTFLG ; WHY YES, SO LEAVE A CANDLE LIT FOR LATER 301$: ; REF LABLE -394,,/; JGD16/ BIT #U2.CRT,U.CW2(R1); IS TERMINAL A CRT BNE 302$ ; IF NE, NO IT IS NOT INC CRT ; SHOW IT IS A CRT 302$: ; REF LABLE -436,,/; JGD13/ TST VTFLG ; IS THIS A VT BNE 7$ ; GO AHEAD ANY WAY, WE MUST HAVE HAD A CRASH -444,444,/; 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 -472,,/; JGD14/ MOV #53,ODPB+Q.IOPL+4 ; DON'T SPACE A LINE(OVERPRINT) MOV #COVRUP,R0 ; COVER UP PASSWORD CALL WRIT ; WITH MASS OF GARBAGE MOV #40,ODPB+Q.IOPL+4 ; LF BEFORE, CR AFTER -561,562,/;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) -579,,/; 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 -,,/; JGD13/ MOV ENTRY,R0 ; RESTORE POINTER ADD #A.ACN,R0 ; GET ACCOUNT NUMBER ADDRESS MOV (R0),ACNTNM ; STORE ACCOUNT NUMBER FOR LATER -,,/; 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 ; (TEMPORARY)TI: SLAVED EARLIER -588,,/; 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 -,,/; JGD13/ .IF DF R$$PRV ; IF KMS ACCOUNTING STRUCTURE ADDED TO UCB MOV U.ACN(R5),SNDBUF+16 ; PUT # OF INVALID LOGIN ATTEMPTS IN SEND BUFFER MOV U.LUIC(R5),SNDBUF+14 ; ALSO PUT IN THE LOGIN UIC .ENDC ; ENDC R$$PRV .IF DF T$$CPU ; IF CPU TIME ACCOUNTING SELECTED .IF DF Q$$CNT ; IF QIO ACCOUNTING DEFINED CLR U.QIO1(R5) ; RESET TO ZERO AT START OF SESSION CLR U.QIO2(R5) ; RESET HI ORDER PART OF DOUBLE WORD .ENDC ; ENDC Q$$CNT CLR U.ATCT(R5) ; RESET # OF TIME ...AT. RUN CLR U.INCT(R5) ; RESET # OF TIMES ...INS USED CLR U.RNCT(R5) ; RESET # OF TASKS RUN CLR U.TIC1(R5) ; RESET NUMBER OF CLOCK TICS CLR U.TIC2(R5) ; RESET HIGH ORDER VALUE OF DOUBLE WORD .ENDC ; ENDC T$$CPU .IF DF R$$PRV ; IF KMS STRUCTURE ADDED TO ACCOUNT BLOCK MOV ACNTNM,U.ACN(R5); SET ACCOUNT NUMBER IN UCB MOV ACNTNM,SNDBUF+12; SET IT ALSO IN SEND BUFFER .ENDC ; ENDC T$$CPU -590,,/; JGD13/ MOVB GLNBUF,SNDBUF+10; SET 'V' OR 'T' (V IF VT:, T IF TT:) MOVB GLNBUF+2,SNDBUF+11; SET IN TERMINAL UNIT NUMBER(HI BYTE) MOV TIMBUF+6,SNDBUF+2 ; GET LOGIN TIME - HOUR MOV TIMBUF+10,SNDBUF+4 ; MINUTE MOV TIMBUF+12,SNDBUF+6 ; SECOND -600,,/; 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 -686,,/; 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 ; LOG THIS LOGIN ON CO: ; -727,,/; JGD04/ 100$: ; REF LABLE -735,735,/; JGD03/ 120$: ; REF LABLE ; MOV $TKPS,MKT+M.KTMG ; SET ONE SECOND WORTH OF TICS FOR LATER -,,/; JGD13/ BIT #200,$ACMSK ; IS ACCOUNTING ENABLED BEQ 1210$ ; IF EQ , NO, SO SKIP SENDING DATA DIR$ #SENDAT ; YES, SEND IT BCC 1207$ ; ALL IS OK SO SKIP OVER MOV #ER30,R0 ; WARN USER THAT LOG... NEVER GOT DATA CALL WRIT ; WRITE OUT MESSAGE 1207$: DIR$ #USTPLG ; UNSTOP LOG..., IF THIS FAILS, ???? BCC 1210$ ; IF CC, NO ERROR DIR$ #RQSTLG ; LOG... MUST HAVE EXITED, RESTART IT 1210$: ; REF LABLE -,,/; JGD03/ MOV #ODPB,R4 ; GET TERMIAL DBP ADDRESS -748,,/; JGD13/ TST VTFLG ; IS THIS A VIRTUAL TERMINAL BNE 125$ ; IF NE, YES, SKIP SPAWN -783,788,/; 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$: DIR$ #SLVDPB ;TRY QIO$ TO UNSLAVE TI: ; BIC #U2.SLV,U.CW2(R1) ;MAKE SURE TI: IS UNSLAVED (QIO MIGHT FAIL) 180$: BIC #T3.MCR,T.ST3(R0) ; INHIBIT MCR PROMPT BIT #10,U.PRV1(R1) ; SHOULD TERMINAL BE LEFT SLAVED AT LOGON BNE 182$ ; YES, LEAVE IT SLAVED DIR$ #SLVDPB ; TRY QIO TO UNSLAVE TI: USE QIO TO FLUSH BUFFER BIC #U2.SLV,U.CW2(R1) ; ALLOW TERMINAL INPUT AGAIN ; ROR (SP)+ ; SHOULD WE WAIT FOR CO: TO FINISH? ; BCS 185$ ; IF CS NO ; CALL $COWAT ; YES--WAIT NOW -838,,/; JGD03/ 182$: CALL RUNCK ; SHOULD WE RUN TASK AT LOGON TST BYEFLG ; IF A REQUESTED TASK WAS NOT INSTALLED, THEN ; LOG OFF, IF IT WAS, DON'T PROCESS CMD FILE BMI 1821$ ; IF <0, TASK FOUND, EXIT POST HASTE BEQ LOGCMD ; NO TASK WAS REQUESTED ; SO CONTINUE WITH LOGIN BIS #U2.SLV,U.CW2(R2) ; SET TI SLAVE UNTIL BYE CAN RUN 1820$: RQST$S #BYE ; REQUESTED TASK NOT FOUND, LOG OFF BCC 1821$ ; WE SUCESSFULLY REQUESTED BYE DIR$ #MKT ; WE DID NOT GET IT, MUST BE BUSY WTSE$S #1 ; SO WAIT 1 SECOND BR 1820$ ; AND TRY AGAIN,AND AGAIN, AND...... 1821$: 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$: 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 DEC BYEFLG ; SHOW WE GOT IT RETURN ; 7$: MOV #ODPB,R4 ; GET OUTPUT DPB ADDRESS MOV #IO.WVB,ODPB+2 ; SET FOR WRITE JMP ERR13 ; GO WARN THAT TASK WAS NOT FOUND ; ; EXECUTE USER'S LOGIN.CMD IF IT EXISTS ; -,,/; JGD07/ LOGCMD: BIT #4,U.PRV1(R2) ; 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 -873,873,/; JGD13/ ERR2: ; REF LABLE .IF DF R$$PRV ; IF IF KMS ACCOUNTING MODS MADE TO UCB MOV $TKTCB,R0 ; GET OUR TASK HEADER MOV T.UCB(R0),R0 ; GET UCB ADDRESS INC U.ACN(R0) ; BUMP INVALID LOGIN COUNTER .ENDC ; ENDC T$$CPU MOV #ER2,R0 ; INVALID ACCOUNT -889,893,/;MLG080/ MOV #EX$SEV,EXSTAT ; SET EXIT STATUS -,,/; JGD02/ BR ERROUT ; ERR8: MOV #ER8,R0 ; LOGIN MESSAGE FILE ERROR -,,/;MLG080/ MOV #EX$WAR,EXSTAT ; SET EXIT STATUS BR ERROUT ; -,,/; JGD01/ ERR12: MOV #ER12,R0 ; MULTIPLE LOGINS FOR NON PRIVLEDGED USERS MOV #EX$SEV,EXSTAT ; SHOW SEVERE ERRR BR ERROR ; ARE ILLEGAL -,,/; JGD13/ ERR13: MOV #ER13,R0 ; REQUESTED TASK NOT FOUND MOV #EX$SEV,EXSTAT ; SHOW SEVERE ERROR CALL WRIT ; WRITE OUT WARNING MESAGE INC BYEFLG ; SET BYE FLAG SO TERMINAL WILL LOG OFF AT EXIT RETURN ; FINISH LOGGING ON -905,,/; JGD13/ TST VTFLG ; IS THIS VIRTUAL TERMINAL VT:? BEQ 10$ ; IF EQ, NO MOV #BATMSG,R0 ; YES, PRINT $SOJ TO VT: CALL WRIT ; WRITE IT OUT CLR VTFLG ; RESET FLAG SO EXIT WON'T DO IT TWICE 10$: ; REF LABLE -910,910,/; JGD/ ERROR1: MOV $TKTCB,R0 ; GET OUR TCB ADDRESS -919,919,/; JGD13/ EXIT2: TST VTFLG ; ARE WE LOGGING ONTO VT: BEQ 20$ ; IF EQ, NO MOV #IO.WVB,ODPB+2 ; RESTORE WRITE FUNCTION TO DPB MOV #BATMSG,R0 ; WRITE A $SOJ AS EXIT FLAG TO BATCH CALL WRIT ; AND OUT IT GOES 20$: MOV EXSTAT,R0 ; GET EXIT STATUS -1316,,/; JGD01/ ADD #A.TERM,R0 ; UPDATE TO POINT AT TERMINAL # -,,/; JGD08/ TST VTFLG ; IS THIS A VIRTUAL TERMINAL? BEQ 101$ ; IF EQ, NO, SO SKIP OVER -,,/; JGD13/ MOV ENTRY,R0 ; RESTORE POINTER ADD #A.VTRM,R0 ; POINT TO VT: IN USE FLAG WORD MOVB #'V,(R0)+ ; FIRST BYTE GETS A 'V' MOVB GLNBUF+2,(R0) ; SECOND BYTE GETS NUMBER -,,/; JGD08/ BR 9$ ; AND SO DON'T FIDDLE WITH ACCOUNT FILE -,,/; JGD01/ 101$: TST (R0) ; IS USER IS STILL LOGGED ONTO SOME ; TERMINAL, BNE 20$ ; HE IS, ONLY SET VTFLAG, NOTHING ELSE MOV GLNBUF,(R0)+ ; HE ISN'T,INSERT 'TT' INTO FILE MOV GLNBUF+2,(R0) ; INSERT FLAG BYTE AND TERM.# INTO FILE MOV ENTRY,R0 ; GET ADDRESS OF ENTRY -1339,,/; JGD13/ 9$: ; REF LABLE -1357,,/; JGD10/ 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 25$: RETURN ; LEAVE ACCOUNT FILE ALONE 30$: JMP ERR12 ; REPORT ERROR AND LOG OFF -1626,,/; JGD16/ MOV $TKPS,MKT+M.KTMG; SET WAIT FOR 1 SEC ADD $TKPS,MKT+M.KTMG; MAKE IT 2 SEC -1647,1647,/; JGD10/ BCC 45$ ; MAYBE, LET'S COMPARE STRINGS TST ENDFLG ; ONLY LOOK FOR MATCHAL ONE TIME BGT 90$ ; WE'VE BEEN THIS WAY BEFORE, TELL USER NO MATCH INC ENDFLG ; IF EQ 0 WE'LL TRY JUST ONCE TO FIND MATCHAL MOV #10.,DEPTH ; ABSOLUTELY NOT, SO CHECK IF MATCHALL AT END BR 40$ ; GO GET NEXT RECORD, SEE IF FIND MATCHAL 45$: ; REF LABLE -1667,1667,/; JGD10/ BCS 55$ ; NO, KEYWORD IS NOT AMBIGUOUS TST MTCHAL ; IS IT AMBIGUOUS BUT NOT MATCHALL? BEQ 100$ ; IF EQ 0, JUST AMBIGUOUS 55$: ; REF LABLE -1704,,/; JGD16/ CLR WAIT ; DON'T WAIT ON ENTRY -/10$:/,.,/; JGD16/ 10$: TST WAIT ; SHOULD WE WRITE OUT A CR LF BNE 20$ ; IF NE, NO MOV #MS1,R0 ; IF EQ, YES , PRINT OUT A CR LF -/30$:/,.,/; JGD16/ TST WAIT ; DID WE FIND A '~' BEQ 31$ ; NO, JUST PRINT , DON'T WAIT FIRST TST CRT ; IS THIS A SCOPE BNE 301$ ; IF NE YES, DON'T WAIT DIR$ #MKT ; MARK TIME FOR 2 SEC WTSE$S #1 ; AND WAIT FOR MARKTIME TO END 301$: CLR WAIT ; AS IF WE HAD NEVER BEEN WAIING BR 20$ ; DON'T PRINT OUT THE '~' 31$: CALL WRIT2 ; WRITE OUT THE LINE -1758,,/; JGD10/ TST MTCHAL ; IS IT THE ULTIMATE MATCH? BGT 20$ ; IF GT 0, YES -1796,1796,/; JGD10/ COMPAR: ; REF LABLE TST MTCHAL ; IS IT THE ULTIMATE MATCH? BEQ 25$ ; IF EQ 0, NO, CONTINUE INC INDFLG ; ASSUME INDIRECT FILE BR 70$ ; AND EXIT 25$: MOV R4,-(SP) ; SAVE R4 -1828,1829,/; JGD10/ 70$: RETURN ; -1943,1943,/; JGD10/ ISREC: ; REF LABLE CMPB (R0),#'# ; IS IT A MATCHALL BNE 9$ ; IF NE, NO INC MTCHAL ; SHOW A MATCH BR 20$ ; AND EXIT 9$: ; REF LABLE CMPB (R0),#'~ ; IS IT A '~' BNE 10$ ; NO INC WAIT ; SHOW WE HIT A WAIT FLAG 10$: ; REF LABLE CMPB (R0),#'1 ; IS THE FIRST CHARACTER A DIGIT? -2034,,/; JGD09/ CLR MTCHAL ; RESET MATCHAL -2138,2139 -2257,,/;MRJ002/ 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 /