.TITLE UIC -- UIC PROCEDURE FOR RSX11D .IDENT /JRBARR/ .MCALL SMACIT SMACIT ;SET UP SUPERMAC MACROS .MCALL QIOW$,DIR$,EXIT$S,GMCR$,CALL,RETURN .MCALL GCMLD$,GCMLB$,GCML$,MRKT$,CMKT$ .MCALL RQST$,GTIM$,VSDR$ ; ; EQUATED SYMBOLS ; SPACE=40 TILUN=5 ; ; LOCAL PURE DATA ; .PSECT PURE,RW SYNMSG: .ASCII /UIC -- SYNTAX ERROR/ SYNLN=.-SYNMSG PRIV: .ASCII /UIC -- YOU MUST BE PRIVILEDGED/ PRIVL=.-PRIV .EVEN SYNERR: QIOW$ IO.WVB,TILUN,1,,IOSB,, PRIVER: QIOW$ IO.WVB,TILUN,1,,IOSB,, CANMKT: CMKT$ KILQIO: QIOW$ IO.KIL,TILUN,2,,KIIOSB RQSTD: RQST$ ...MCR GTIM: GTIM$ TIME SNDRR: VSDR$ LOGGER,,,1,1,SNDBUF,12. ; ; LOCAL IMPURE DATA ; SNDBUF: ACTION: .RAD50 /UIC/ SETUIC: .WORD 0 ;HOLDS LOGON PPN DEVICE: .WORD 0 ;ASCII DEVICE NAME OF TERMINAL UNIT: .WORD 0 ;BINARY UNIT NUMBER OF TERMINAL TIME: .BLKW 8. ;GET TIME PARAMETERS OLDUIC: .WORD 0 ;OLD UIC DECNUM: .WORD 0 IOSB: .WORD 0,0 KIIOSB: .WORD 0,0 MRKTIM: MRKT$ 2,10.,2,KILRQT CMDBLK: GCMLB$ ,UIC,MCRLN,TILUN MCRLN: .BLKW 41. .PAGE .PSECT PURE,RW UIC: REPEAT LET MRKTIM+M.KTMG := #10. ;SET TIMEOUT VALUE IN SECONDS DIR$ #MRKTIM ;ISSUE MARK TIME ON.NOERROR GCML$ #CMDBLK ;GET MCR LINE ON.NOERROR DIR$ #CANMKT ;GET RID OF MARKTIME ON.NOERROR LET R2 := G.CMLD(R0) ;MCR COMMAND LINE LENGTH ELSE JUMPTO CALMCR END ELSE JUMPTO CALMCR END ELSE JUMPTO CALMCR END UNTIL R2 NE #0 ;WE GOT A COMMAND LINE LET R2 := G.CMLD+2(R0) ;STARTING ADDRESS OF COMMAND LINE IFB (R2)+ NE #'[ THEN JUMPTO SYN LET DECNUM := #8. CALL GETNUM ;CONVERT OCTAL GROUP NUMBER TO BINARY IF R1 EQ #0 OR #177400 SET.IN R1 THEN JUMPTO SYN FI LET SETUIC+1 :B= R1 ;SAVE BINARY GROUP CODE IFB R5 NE #54 THEN JUMPTO SYN CALL GETNUM ;CONVERT OCTAL PROGRAMMER CODE TO BINARY IF R1 EQ #0 OR #177400 SET.IN R1 THEN JUMPTO SYN FI LET SETUIC :B= R1 ;SAVE BINARY PROGRAMMER CODE IFB R5 NE #'] THEN JUMPTO SYN LET R5 := .CRTSK ;ATTEMPT TO PUT LET R5 := A.TI(R5) ;UIC INTO TI PUD ASSOCIATED IF #UT.PR SET.IN U.TF(R5) THEN LET OLDUIC := U.UI(R5);SAVE OLD UIC LET U.UI(R5) := SETUIC;WITH THIS TI CALL LOGIT ;INFORM LOGGER TASK OF LOGON ELSE DIR$ #PRIVER ;PRIVILEDGE ERROR FI CALMCR: LET R5 := .CRTSK LET R5 := A.RQ(R5) IF S.TN+2(R5) NE RQSTD+R.QSTN+2 THEN DIR$ #RQSTD FI GOTO EXIT .PAGE SYN: DIR$ #SYNERR GOTO CALMCR EXIT: EXIT$S KILRQT: DIR$ #KILQIO GOTO CALMCR .PAGE ; GETNUM ; ; ; ROUTINE TO DECODE A NUMBER ; ; CALLING SEQUENCE: ; 'DECNUM' -- 8. (IF OCTAL) OR 10. (IF DECIMAL) ; R2 -- BUFFER POINTER ; CALL GETNUM ; ; ; ERROR RETURN GOES DIRECTLY TO 'SYNERR' ; ; OUTPUT: ; R1 -- RETURNED VALUE ; R5 -- TERMINATOR ; ; PROCEDURE GETNUM LET R4 := #6 LET R1 := #0 THRU R4 LET R5 :B= (R2)+ ;PICK UP A CHARACTER IF R5 LE #57 THEN RETURN FI IF R5 GT #67 THEN IF DECNUM NE #10. OR R5 GT #70 THEN RETURN FI FI CLC LET R1 := R1 * DECNUM ;COMPUTE NEW NUMBER ON.ERROR TST (SP)+ GOTO SYN END LET R5 := R5 OFF.BY #177760 ;MAKE OCTAL OR DECIMAL NUMBER LET R1 := R1 + R5 ;AND ADD IT IN TO SUM END ENDPROCEDURE GETNUM .PAGE ; ; LOGIT ; ; ROUTINE TO REQUEST LOGGER TO RECORD LOGON ; ; PROCEDURE LOGIT DIR$ #GTIM ;GET TIME DATA LET R0 := .CRTSK ;OUR ATL POINTER LET R0 := A.TI(R0) ;PUD POINTER LET DEVICE := U.DN(R0);ASCII DEVICE NAME LET UNIT :B= U.UN(R0) ;BINARY UNIT NUMBER LET TIME+14 := OLDUIC ;OLD USERS UIC DIR$ #SNDRR ;SEND LOGGER A PACKET ENDPROCEDURE LOGIT ; ; .END UIC