.TITLE CLI - MAIN "ROOT" SECTION FOR "CLI" TASK .IDENT /020584/ .ENABL GBL .ENABL LC .NLIST BEX ; ;+ ;***** ; ; CLICLI.MAC forms the program entry point and command ; dispatcher for the "CLI" task. CLI allows user's ; to display, change, initialize and eliminate alternate ; CLI's from RSX-11M v3.2 and RSX-11Mplus V1.0 systems. ; ; All command line parsing is handled by ".CIPRS" (see CLIPRS.MAC). ; All CLI task manipulations are performed by the routines ; in CLISUB.MAC. Error reporting and the task exit point is ; consolidated in CLIERR.MAC. Global impure/pure data ; is defined in CLIDAT.MAC. ; ; CLI uses the following naming convention for global symbols: ; "$CI" prefix is used for all global locations ; "CI." prefix is used for all global bit-patterns/offsets ; ".CI" prefis is used for all global module entry points ; ; Privileged users are allowed to execute all command keywords. ; Non-privileged users are allowed to execute the "/SHOW" ; keyword and the "/SET" keyword (only for their own terminal). ; ;***** ; ; Update 2/5/84 - PRS; original edit ; ;***** ;- ; .MCALL DIR$,QIOW$,CCBDF$,UCBDF$,TCBDF$ CCBDF$ ; DEFINE CLI CONTROL BLOCK OFFSETS UCBDF$ ; DEFINE UCB OFFSETS TCBDF$ ; DEFINE TCB OFFSETS ; .PSECT $IDATA,RW,D,LCL,CON,REL SHWMSG: .BLKB 40. ; BUFFER FOR /SHOW OUTPUT SHWQIO: QIOW$ IO.WVB,TI$LUN,TI$EFN,,,, ; /SHOW QIO .PSECT $PCODE,RO,I,LCL,CON,REL CLICLI:: ; PROGRAM ENTRY POINT MOV #EX$SUC,$CIEXS ; ANTICIPATE SUCCESS MOV $CIDIC,$CIMCR ; SETUP GMCR$ DIR. ID. CODE DIR$ #$CIMCR ; GET MCR COMMAND LINE BCS 100$ ; BRANCH IF FAILS 5$: MOV @#$DSW,$CIMCR ; SAVE COMMAND LINE LENGTH CALL .CIPRS ; PARSE LINE BCS 100$ ; BRANCH ON BAD LINE CALL $LOCKL ; LOCK SYSTEM LISTS MOV $CIFLG,R0 ; PICKUP KEYWORD DEFN ; ; *** PROCESS "SHOW" ; 10$: ASR R0 ; IS IT "/SHOW" BCC 50$ ; BRANCH IF NO CALL .CILOC ; FIND ALL CLI'S CALL $UNLKL ; UNLOCK LISTS...SO CTRL-S WON'T ; BLOCK CLI/INS, ETC. PROBLEMS WILL ; APPEAR IF CLI'S STATUS CHANGES ; DURING LISTING INTERVAL !!! MOV #$CILST,R5 ; GET START OF CLI LIST 15$: MOV #SHWMSG,R0 ; POINT TO PLACE TO BUILD TEXT MOV (R5)+,R4 ; GET POINTER TO CLI'S NAME BEQ 101$ ; BRANCH ON END-OF-LIST MOV (R4)+,R1 ; GET 1ST HALF OF CLI NAME CALL $C5TA ; CONVERT RAD50 TO ASCII MOV (R4),R1 ; GET 2ND HALF CALL $C5TA ; CONVERT IT TOO MOVB #40,(R0)+ ; INSERT SPACERS MOVB #40,(R0)+ MOV (R5)+,R4 ; GET ADDRESS OF CLI'S TCB POINTER MOV (R4),R3 ; GET CLI'S TCB ADDRESS ADD #T.NAM,R3 ; POINT TO TASK NAME MOV (R3)+,R1 ; GET 1ST HALF OF TASK NAME CALL $C5TA ; CONVERT RAD50 TO ASCII MOV (R4),R1 ; GET 2ND HALF CALL $C5TA ; CONVERT IT TOO CMP #$POOL,R4 ; TCB POINTER IN POOL ?? BHI 40$ ; BRANCH IF NO, DEC'S CLI MOVB #40,(R0)+ ; INSERT SPACERS MOVB #40,(R0)+ MOVB #'(,(R0)+ ; START OF NEW FIELD MOV C.LINT-C.LITA(R4),R1 ; GET # TT'S USING CLI CLR R2 ; SUPPRESS 0'S CALL $CBDMG ; CONVERT TO ASCII MOVB #'.,(R0)+ ; SHOW ITS DECIMAL MOVB #'),(R0)+ ; INSERT TRAILER 40$: SUB #SHWMSG,R0 ; COMPUTE BYTE COUNT OF TEXT MOV R0,SHWQIO+Q.IOPL+2 ; SAVE IT IN QIO DPB DIR$ #SHWQIO ; SEND IT TO TI: BR 15$ ; LOOP TIL DONE ; ; *** TIME TO DO SOME PRIVILEGE CHECKING ; 50$: MOV $TKTCB,R5 ; PICKUP OUR TCB ADDRESS MOV T.UCB(R5),R5 ; GET TO TI:'S UCB 52$: MOV U.RED(R5),R5 ; FOLLOW ANY REDIRECT CMP U.RED(R5),R5 BNE 52$ MOV U.CW2(R5),R5 ; GET 2ND STATUS WORD BIT #U2.PRV,R5 ; PRIVILEGED TI: ?? BNE 60$ ; BRANCH IF YES ASR R0 ; DOING /SET ?? BCC 92$ ; BRANCH IF NO, PRIV VIOLATION CMP $CIDEV,#"TI ; /SET FOR TI: ?? BNE 92$ ; BRANCH IF NO, PRIV VIOLATION BR 62$ ; YES, PICKUP WITH NORMAL FLOW ; ; *** HANDLE /SET KEYWORD ; 60$: ASR R0 ; DOING /SET ?? BCC 70$ ; BRANCH IF NO 62$: CALL .CISET ; DO SET OPERATION BR 100$ ; ; *** HANDLE /INI KEYWORD ; 70$: ASR R0 ; DOING /INI ?? BCC 80$ ; BRANCH IF NO CALL .CIINI ; INITIALIZE CLI BR 100$ ; ; *** HANDLE /ELI KEYWORD ; 80$: ASR R0 ; DOING /ELI ?? BCC 90$ ; BRANCH IF NO CALL .CIELI ; ELIMINATE CLI BR 100$ ; ; *** ERROR TRAP ; 90$: MOV #IE.AST,@#$DSW ; "INVALID COMMAND LINE" BR 100$ 92$: MOV #IE.PRI,@#$DSW ; "PRIVILEGE VIOLATION" ; BR 100$ ; ; *** COMMON EXIT/ERROR POINT ; 100$: CALL $UNLKL ; MAKE SURE LISTS ARE FREE 101$: JMP .CIERR ; HANDLE EXIT/ERROR PROCESSING ; .END CLICLI