OU:HELLO.MAC;2=IN:[15,10]HELLO.VGN;1/AU \ -3,3 .IDENT /02.3XD/ -/SA450/+1,, ; ; 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. ; ; ; 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 ; ; 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 ; ; 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. ; ; ; JGD17 ADD AN ADDITIONAL PRIVILEGE CLASS. IF BIT 14 IN U.PRV1 IS SET ; THE USER IS ALLOWED TO DIAL IN ON A REMOTE LINE. ; ; JGD18 CONDITIONALIZE THE U.PRV1 STUFF SO THAT USER'S MAY STILL HAVE ; LEVELS OF LOGON PRIVLEGE WITHOUT HAVING PRVMSK SHOVED INTO A ; WORD IN THE UCB ; ; ; MRJ002 23-MAR-78 NOTIFY USER IF MAIL WAITING FOR HIM. MAIL UTILITY ; COURTISY OF MARK JOHNSON, ALBERTA HAIL PROJECT ; ; JGD20 The extensive changes to HELLO/HELP for RSX11M V4.0 required ; changes to the various enhancements. Because DEC has it ; own priv. mask word, where DEC uses it, our previous use ; of another word is dropped. ; ; JGD29 Allow VT's to be logged in. (Let KMS batch work). ; Allow KMS version of ACTFIL to work. ; ; JGD30 Force a Silent Login to occur if PM.SIL in PRVMSK is set ; ; JGD31 Force nobroadcast bit in U.MUP to be set if PM.NBR set ; in PRVMSK ; ; JGD32 Request task to run under login UIC if PM.TSK set ; ; JGD33 Seperate remote access privileges for remote dial-ins ; and DECnet tie-ins. ; ; JGD34 Fix bug with logon time not being set properly if ; silent logon or task startup. ; ; JGD35 V4.0 use of RP01 in HELLO to set off LOGIN.CMD causes ; exit status syncronization to be lost with BATCH. As ; a workaround, force all VT: logons to be silent. ; % -/SPWN$,STSE$/,,/; JGD/ .MCALL RQST$S,UCBDF$,RQST$,STSE$ .MCALL USTP$,SDAT$,UCBDF$ -,,/; JGD/ UCBDF$ -/OPEN$U/,,/; JGD01/ ; ESTABLISH OFFSETS REQUIRED FOR KMS ENHANCEMENTS ; .IFNDF D$$H11&D$$J11&D$$M11&D$$ZMD&D$$Z11&D$$V11$D$$VMD U.PRV1=U.CW3 ; FOR SYSTEMS WITH ONLY DL11'S .IFF -,,/; JGD15/ .IFDF M$$CLI!A$$CLI ; IF SUPPORT FOR MULTIPLE CLI'S U.PRV1=U.CLI-2 ; THEN U.PRV1 SITS ABOVE U.CLI(U.MUP) .IFF ; ELSE U.PRV1=U.LUIC-2 ; OFFSET FROM U.LUIC .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 T$$CPU ; IF KMS CPU TIME DATA STRUCTRURE ADDED TO UCB .IFDF M$$CLI!A$$CLI ; IF MULTIPLE CLI SUPPORT PRESENT U.ACN=U.LUIC-6 ; OFFSET INTO EXPANDED UCB FOR ACCOUNT NUMBER .IFF ; IF NO MULTIPLE CLI SUPPORT U.ACN=U.LUIC-4 ; OFFSET UP ONE LESS .ENDC ; END CONDITIONAL M$$CLI .ENDC ; T$$CPU -,,/; 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 -,,/; JGD17/ ; ; DEFINE THE PRIVILEGE MASK WORD BITS FOR U.PRV1 ; PM.RUN = 1 ; USER MAY NOT USE THE RUN COMMAND PM.OWN = 2 ; USER MAY ONLY RUN TASKS OWNED BY HIM/HER PM.TSK = 4 ; RUN A TASK SPECIFIED IN ACNT FILE ON EXIT ;PM.SLV = 10 ; LOG USERS TERMINAL ON AS SLAVED -,,/; JGD30/ PM.SIL = 10 ; Force a silent login -,,/; JGD17/ PM.ABO = 20 ; DO NOT ABORT USERS NON-PRIV TASKS AT LOGOFF -,,/; JGD31/ PM.NBR = 40 ; Set terminal to NOBROADCAST at login -,,/; JGD17/ PM.DSK = 100 ; AT LOGOFF, ACCOUNT FOR USER'S DISK BLOCKS PM.GRP = 200 ; USER HAS GROUP MANAGER PRIVILEGES PM.USR = 400 ; USER IS NON-PRIVILEGED USER MANAGER -,,/; JGD33/ PM.NET = 20000 ; User may remote-in via DECnet virtual term. -,,/; JGD17/ PM.RMT = 40000 ; USER MAY DIAL IN ON A REMOTE PHONE LINE PM.PRV = 100000 ; USER IS PRIVILEGED REGARDLESS OF UIC -/.NLIST BEX/+1,,/; JGD03/ .EVEN TSK: .ASCII / / .EVEN TSK1: .BLKW 2 ;BYE: .RAD50 /...BYE/ -/MS5:/,,/; JGD04/ MS7: .ASCIZ <15><12>/HEL -- Logged onto other terminal also?/<15><12><7> MS8: .ASCII <15><12>/>> You are exceeding your allocated disk space./ .ASCII <15><12>/>> Please remove files from your UIC or request / .ASCIZ /more storage space/<15><12><7> -/LGNMSG:/,,/; JGD14/ COVRUP: .ASCII /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/<15> .ASCIZ /OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO/ CVRUP2: .ASCIZ / /<15> -,,/;MRJ002/ MAIMSG: .ASCII <15><12><7>/>>>>YOU HAVE MAIL<<<<12><7><0> -/ER19:/+1,,/; JGD13/ ER30: .ASCIZ <15>/HEL -- Send data error to system logging task LOG.../ -,,/; JGD17/ ER31: .ASCIZ <15>/HEL -- Privilege violation. Dial in not authorized./ ER32: .ASCIZ <15>/HEL -- Multiple logins illegal/ -,,/; JGD30/ ER33: .ASCIZ <15>/HEL -- Requrested task not found/<15><12> -,,/; JGD33/ ER34: .ASCIZ <15>/HEL -- User not authorized for DECnet command terminal./ -/IOSB:/,,/;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/ -/DEVNAM:/,.,/; JGD/ DEVNAM: .ASCII /LB1:/ ; DEVICE FOR [1,2]HELP.TXT AND LOGIN.TXT -/TXTFLG:/,,/; JGD04/ BLKFLG: .WORD 0 ; PRINT 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 -,,/; JGD01/ GLNBUF: .BLKW 6. ; BUFFER FOR GETLUN DIRECTIVE -,,/; JGD13/ ACNTNM: .WORD 0 ; STORAGE FOR ACCOUNT NUMBER -,,/; JGD18/ PRVMSK: .WORD 0 ; STORAGE FOR PRIVILEGE MASK WORD -,,/; JGD19/ CVRADR: .WORD COVRUP ; ADDRESS OF COVERUP MESSAGE -/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 - # OF INVALID LOGIN ATTEMPTS ; SINCE LAST LOGOFF -/$HEL::/ GLUN$S #LUN1,#GLNBUF ; GET LUN INFO, SAVE FOR LATER CMP GLNBUF,#"VT ; IS THIS A VT? BEQ 3$ ; TRY LOGON, SOMETIMES BATCH CRASHES -/T.UCB/,,/; JGD19/ TST CRT ; IS TI: A CRT BEQ 302$ ; IF EQ, NO IT IS NOT MOV #CVRUP2,CVRADR ; SET COVERUP MESSAGE ADDRESS 302$: ; REF LABLE -/6$:/ -/701$/,,/; JGD19/ CALL OVRPNT ; OVER PRINT THE PASSWORD -/100000/,.,/; JGD/ MOV #1,FRCFLG ; FORCE FIRST MESSAGE -/41$:/ -/PSWDBF/,,/; JGD19/ CALL OVRPNT ; OVER PRINT THE PASSWORD -,,/; JGD35/ MOV $TKTCB,R0 ; Get our TCB address MOV T.UCB(R0),R1 ; Get TI UCB address MOV U.DCB(R1),R2 ; Get DCB address CMP D.NAM(R2),#"VT ; Is this a Virtual terminal? BNE 4101$ ; no CLR WHAT ; Show we have a VT INC SILENT ; Force a silent logon 4101$: ; Jump label ;-/467$:/+1,,/; JGD29/ ; MOV F.DSPT+$ACTFL,R1; ADDRESS OF DATA SET DESCRIPTOR ; MOV 2(R1),R1 ; POINT AT VALUE ; CLR (R1)+ ; NULL OUT VALUE ; CLR (R1) ; OF BOTH DEVICE AND UNIT # -/4815$:/ -/#6/,/482$:/,/;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) -/484$/ -/MOVB R1,GRP/,,/; 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 4839$ ; YES, SKIP SETTING WARNING FLAG INC BLKFLG ; NO, SET FLAG -,,/; JGD01/ 4839$: MOV ENTRY,R0 ; GET ADDRESS OF ACCOUNT ENTRY AGAIN ADD #A.PRIV,R0 ; POINT TO ADDRESS OF PRIVLEDGE MASK WORD MOV (R0),PRVMSK ; 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 #PM.TSK,PRVMSK ; CHECK TO SEE IF TASK TO BE RUN ON EXIT BEQ 4842$ ; NO, ITS OK TO PRINT LOGIN.TXT INC SILENT ; 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 4842$: ; BRANCHING LABEL -,,/; JGD17/ MOV $TKTCB,R5 ; GET TASK HEADER MOV T.UCB(R5),R5 ; AN OUR UCB ADDRESS BIT #U2.RMT,U.CW2(R5); IS THE TERMINAL SET REMOTE BEQ 4843$ ; IF EQ NO, SKIP -,,/; JGD33/ CMP GLNBUF,#"HT ; Real terminal or DECnet command terminal? BEQ 48422$ ; If EQ, a DECnet command terminal -,,/; JGD17/ BIT #PM.RMT,PRVMSK ; IS USER ALLOWED TO DIAL IN, BNE 4843$ ; IF NE,YES JMP ERR31 ; SHOW FATEL ERROR -,,/; JGD33/ 48422$: BIT #PM.NET,PRVMSK ; May user log onto DECnet command terminal BNE 4843$ ; If NE, Yes JMP ERR34 ; If EQ, show fatal error -,,/; JGD17/ 4843$: ; REF LABLE -,,/; JGD30/ BIT #PM.SIL,PRVMSK ; Is this to be a silent logon? BEQ 4844$ ; If EQ, NO, skip over INC SILENT ; Fake a silent logon 4844$: ; Ref lable -/486$:/ -/TST SILENT/,/BNE 489$/,/; JGD30/ ; TST SILENT ;; SILENT LOGIN? ; BNE 489$ ;; BR IF YES -/489$:/ -/; SET LOGIN PROTECTION UIC/,,/; JGD01/ .IFDF R$$PRV ;; IF USER WANTS PRIV MASK WORD PLACED IN UCB MOV PRVMSK,U.PRV1(R5);; INSERT THE PROTECTION MASK INTO THE UNUSED ;; CHARACTERISTICS WORD U.PRV1 IN TERMINAL UCB .ENDC ;; .ENDC R$$PRV MOV U.LUIC(R5),INDEX ;; SAVE THE PROTECTION UIC FOR LATER -,,/; JGD13/ .IF DF T$$CPU ;; IF KMS ACCOUNTING STRUCTURE ADDED TO UCB MOV U.ACN(R5),SNDBUF+16 ;; # OF INVALID LOGIN ATTEMPTS IN SEND BFR .ENDC ;; ENDC T$$CPU MOV U.LUIC(R5),SNDBUF+14 ;; ALSO PUT IN THE LOGIN UIC .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 T$$CPU ;; 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 -/70$:/,,/; JGD13/ .IF DF T$$CPU ; If KMS structure added to account block MOV $TKTCB,R5 ; Get TCB address MOV T.UCB(R5),R5 ; Get UCB address MOV ACNTNM,U.ACN(R5); Set account number in UCB .ENDC ; .Endc T$$CPU .IF DF M$$MUP ; Only if multi-user protection BIT #PM.NBR,PRVMSK ; Should terminal be logged on with nobroadcast? BEQ 71$ ; If EQ, no, skip setting UM.NBR BIS #UM.NBR,U.MUP(R5); Make this terminal no-broadcast 71$: ; Ref lable .ENDC ; .endc M$$MUP ;-/CALL DATTIM/,,/; JGD13/ ; MOVB GLNBUF,SNDBUF+10; SET 'V' FOR VT, 'T' FOR 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 -/LOG THIS LOGIN ON CO:/+1,,/; MRJ002/ CALL MAIL ; NOTIFY USER IF THERE IS MAIL FOR HIM/HER -,,/; JGD04/ TST BLKFLG ; IS THE USER USING TOO MANY BLOCKS BEQ 75$ ; NO , SKIP OVER MOV #MS8,R0 ; YES, PRINT WARNING MESSAGE CALL WRIT ; AT TERMINAL JMP 75$ ; SKIP OVER PRINTING JUNK TO CO: -/75$:/,,/; JGD34/ CALL DATTIM ; Get today's date and time (part of JGD13) MOVB GLNBUF,SNDBUF+10; SET 'V' FOR VT, 'T' FOR 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 -,,/; JGD30/ JMP HEL3 ; >>>***DON'T LOG TO CO: EVER***<<< -/60$:/,.,/; JGD13/ 60$: ; REF LABLE BIT #200,$ACMSK ; IS ACCOUNTING ENABLED BEQ 64$ ; IF EQ , NO, SO SKIP SENDING DATA DIR$ #SENDAT ; YES, SEND IT BCC 62$ ; ALL IS OK SO SKIP OVER MOV #ER30,R0 ; WARN USER THAT LOG... NEVER GOT DATA CALL WRIT ; WRITE OUT MESSAGE 62$: DIR$ #USTPLG ; UNSTOP LOG..., IF THIS FAILS, ???? BCC 64$ ; IF CC, NO ERROR DIR$ #RQSTLG ; LOG... MUST HAVE EXITED, RESTART IT 64$: ; REF LABLE MOV #ODPB,R4 ; GET TERMIAL DBP ADDRESS -/CALL $COWAT/,.,/; JGD18/ ; CALL $COWAT ; YES--WAIT NOW -/175$:/ -/180$/,/220$/,/; JGD20/ BNE 180$ ; Branch if not [1,2] TST SILENT ; SILENT LOGIN? BNE 180$ ; IF NE YES MOV $TKTCB,R0 ; GET TCB ADDR ***BUG FIX MOV T.UCB(R0),R1 ; get UCB address ***BUG FIX BIT #PM.PRV,PRVMSK ; SHOULD TI:BE PRIVILEGED BNE 178$ ; IF EQ YES ; MOV $TKTCB,R0 ; GET TCB ADDR ***BUG FIX ; MOV T.UCB(R0),R1 ; get UCB address ***BUG FIX CMPB U.LUIC+1(R1),#10 ; IS UIC PRIVILEGED? BLOS 178$ ; YES BIC #U2.PRV,U.CW2(R1) ; NO, CLEAR PRIV FLAG 178$: BIT #AL.SLV,LPRV ;LEAVE TI: SLAVED? BNE 220$ ;NE- YES. DIR$ #SLVDPB ;TRY QIO$ TO UNSLAVE TI: BIC #U2.SLV,U.CW2(R1) ;MAKE SURE TI: IS BR 220$ ; SKIP THE REST -/180$:/,, -/190$:/,,/; JGD18/ BIT #PM.PRV,PRVMSK ; IS BIT 15 SET, IF YES SET TI: PRIVLEGED BNE 200$ ; YES, TI: SHOULB BE PRIVLEGED -/TST WHAT/,.+1,/,; JGD29/ ; TST WHAT ; IS THIS A VT ; BGE 210$ ; BR IF YES TO EXIT..NO LOGIN ON VT -/210$:/,,/; JGD30/ TST SILENT ; IS THIS A SILENT LOGON BNE 213$ ; IF NE, YES, SHOW PROMPT -/#T3.MCR/,,/; JGD30/ 213$: BIT #PM.TSK,PRVMSK ; Run task at login BEQ 215$ ; If EQ, no, just exit JMP RUNCK ; If NE, yes, request task before exiting 215$: ; Ref Lable -/290$:/,,/; JGD30/ -/310$:/,, -/180$/,,/; JGD30/ ; START UP A USER SPECIFIED TASK ; RUNCK: 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 -,,/; JGD31/ RQST$S #TSK1,,,GRP,MEM ; REQUEST THE TASK TO RUN -,,/;JGD30/ BCS 7$ ; IF CARRY SET DIRECTIVE IS REJECTED JMP $EXIT1 ; 7$: MOV #ODPB,R4 ; GET OUTPUT DPB ADDRESS MOV #IO.WVB,ODPB+2 ; SET FOR WRITE JMP ERR33 ; GO WARN THAT TASK WAS NOT FOUND -/ERR2:/,,/; JGD13/ ERR2: ; REF LABLE .IF DF T$$CPU ; 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 -/ERR16:/+2,,/; JGD13/ .IFTF ERR31: MOV #ER31,R0 ; PRIV VIOALTION,DIAL IN NOT ALLOWED MOV #EX$SEV,$EXSTA ; SET EXIT STATUS JMP ERROR ; AND EXIT -,,/; JGD01/ ERR32: MOV #ER32,R0 ; MULTIPLE LOGINS FOR NON PRIVLEDGED USERS MOV #EX$SEV,$EXSTA ; SHOW SEVERE ERRR JMP ERROR ; ARE ILLEGAL -,,/; JGD13/ ERR33: MOV #ER33,R0 ; REQUESTED TASK NOT FOUND MOV #EX$SEV,$EXSTA ; SHOW SEVERE ERROR CALL WRIT ; WRITE OUT WARNING MESAGE JMP $EXIT1 ; FINISH LOGGING ON -,,/; JGD33/ ERR34: MOV #ER34,R0 ; DECnet command terminal not authorized MOV #EX$SEV,$EXSTA ; SHOW SEVERE ERROR CALL WRIT ; WRITE OUT WARNING MESAGE JMP $EXIT1 ; FINISH LOGGING ON -/LOGON:/ -/ENTRY/,,/; JGD01/ ADD #A.TERM,R0 ; UPDATE TO POINT AT TERMINAL # -,,/; JGD08/ TST WHAT ; IS THIS A VIRTUAL TERMINAL? BNE 101$ ; IF NE, 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 -/FIRSTF/+1,,/; JGD13/ 9$: ; REF LABLE -/10$:/,,/; 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 ERR32 ; REPORT ERROR AND LOG OFF -/DATCHK:/ -/TXTFLG/,.+1 ; DELETED TWO LINES OF CODE SO THAT ; LOGIN MESSAGES ARE DISPLAYED IDENTICALLY ; AS IF GRP/MEM FORM OF LOGIN USED -/CVBMON:/ -/.END/,.,/;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 -,,/; JGD/ ; ; OVRPNT -- OVERPRINT THE PASSWORD ; OVRPNT: MOV #53,ODPB+Q.IOPL+4 ; DON'T SPACE A LINE(OVERPRINT) MOV CVRADR,R0 ; COVER UP PASSWORD CALL WRIT ; WITH MASS OF GARBAGE MOV #44,ODPB+Q.IOPL+4; RESTORE CARRIAGE CONTROL RETURN .END /