.TITLE MVI MOUNTED VOLUME INFORMATION .IDENT /01.00/ ; ; COPYRIGHT (C) 1978 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC. ; ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; VERSION: 01.0 ; DATE: 12/25/78 ; ; ; THIS MODULE PROCESSES THE MCR PROCESS COMMAND ; .MCALL EXIT$S .SBTTL LOCAL DATA ; ; THE FOLLOWING CELLS IN THE ROOT SEGMENT ARE SET TO ; PARAMETERS OBTAINED FROM THE COMMAND LINE. ; ; $DEV - NAME OF THE DEVICE TO BE PROCESSED DDN: ; $UNIT - UNIT NUMBER OF THE DEVICE TO BE PROCESSED ; ; $DTERM - TERMINAL OF USER TO BE PRINTED /TERM= ; $DUSER - PRINT ALL USER ON ALL DEVICE /USER ; ; $DUCB - UCB ADDRESS OF THE SPECIFIC DEVICE BEING PRINTED ; $UUCB - UCB ADDRESS OF THE SPECIFIC USER BEING PRINTED ; ;- ; $DEV:: .WORD 0 ; DEVICE NAME $UNIT:: .WORD 0 ; UNIT NUMBER $DTERM: .WORD 0,0 ; TERMINAL NAME & NUMBER TO BE MVI'D $DUCB: .WORD 0 ; UCB ADDRESS OF DEVICE SPECIFIED BY USER $UUCB: .WORD 0 ; UCB ADDRESS OF TI: SPECIFIED BY USE $UCB: .WORD 0 ; UCB ADDRESS OF DEVICE BEING PROCESSED ; $STRST::.WORD 0 ; ADDRESS OF "/" FOR SYNTAX ERROR EX.STS: .WORD EX$SUC ; EXIT STATUS - DEFAULT TO SUCCESS $INSTA::.WORD 0,0 ; TWO WORDS FOR INIGCL $DFNAM::.RAD50 /MVI/ ; DEFAULT TASK NAME FOR PROMPT MVICNT: .WORD 50. ; NUMBER OF MOUNTERS FOUND MVILST: .BLKW 100. ; LIST OF MOUNTERS TO PRINT ; ; ; ERROR MESSAGES ; ; .NLIST BEX ERR70: .ASCIZ /SORRY . . . NO MOUNTERS FOUND/ ERR72: .ASCII /DEVICE / ERR72A: .ASCII /DDNN: / .ASCII /MOUNTED BY / ERR72C: .ASCIZ /TTNN: / .LIST BEX .EVEN .SBTTL PARSE COMMAND ;+ ; THE FORMAT OF THE COMMAND IS: ; MVI DEV: ; OR ; MVI DEV:[/TERM=TTNN:] ; OR ; MVI /TERM=TTNN: ; OR ; MVI /ALL ; ; ; MVI - COMMAND VERB ; DEV: - DEVICE MNEMONIC AND UNIT NUMBER ; /ALL - SWITCH TO PRINT EVERYTHING ON MOUNT LIST ; /TERM=TTNN: - TERMINAL NUMBER OF USER TO BE PRINTED ; ; ;- $MVIEP:: ; ENTRY POINT MOV $TKTCB,R3 ; GET OUR TCB ADDRESS MOV T.UCB(R3),R3 ; GET "TI" UCB ADDRESS CALL $SWSTK,10$ ;; SWITCH TO SYSTEM STATE 20$: MOV U.RED(R3),R3 ;; FOLLOW THE REDIRECT POINTER CMP R3,U.RED(R3) ;; TEST FOR THE END BNE 20$ ;; LOOP IF NOT END MOV R3,$UUCB ;; SAVE THE USERS UCB ADDRESS RETURN ;; RETURN TO USER STATE 10$: CALL .GTCML ; GET COMMAND LINE FROM INIGCL CLR R1 ; SET SPACE FLUSH OPTION MOV #MVIKTB,R2 ; GET KEYWORD TABLE ADDRESS MOV #MVIPRS,R5 ; GET STARTING STATE ADDRESS CALL .TPARS ; GO PARSE THE INPUT LINE BCC 50$ ; BRANCH IF NO ERROR FROM TPARS JMP $QR2 ; PRINT OUT SYNTAX ERROR 50$: CLR $STRST ; CLEAR "/" ADDRESS .SBTTL MOUNTED VOLUME LIST PROCESSING ; MOULST: MOV #$MOULS,R5 ; POINT TO BEGINNING OF MOUNTED VOLUME LIST MOV $DUCB,R1 ; GET THE DEVICE UCB MOV $UUCB,R2 ; AND USER'S UCB MOV #MVILST,R3 ; POINT TO LIST OF MOUNTERS TO PRINT MOV MVICNT,R4 ; INITIALIZE R4 TO SIZE OF LIST CALL $SWSTK,100$ ;; SWITCH TO SYSTEM STATE TO LOCK LIST 30$: MOV (R5),R5 ;; LINK TO NEXT ENTRY BEQ 90$ ;; BRANCH ON END OF LIST CMP 2(R5),#004001 ;; TEST FOR DESIRED TYPE & SIZE BNE 30$ ;; LOOP IF MISMATCH TST R1 ;; WAS DEVICE UCB GIVEN? BEQ 40$ ;; BRANCH IF NOT CMP 4(R5),R1 ;; TEST FOR SAVE DEVICE BNE 30$ ;; IF NOT LOOP TO NEXT BLOCK 40$: TST R2 ;; WAS TI: UCB GIVEN? BEQ 50$ ;; BRANCH IF NOT CMP 6(R5),R2 ;; TEST FOR SAME USER BEQ 50$ ;; BRANCH IF SAME USER TST 6(R5) ;; TEST FOR SYSTEM MOUNT BNE 30$ ;; BRANCH IF NOT SYSTEM MOUNT BIT #1,R2 ;; WAS SYSTEM REQUESTED? BEQ 30$ ;; BRANCH IF NOT 50$: MOV 4(R5),(R3)+ ;; MOVE DEVICE AND TERMINAL MOV 6(R5),(R3)+ ;; UCB'S TO PRINT LIST DEC R4 ;; DECRIMENT COUNT BNE 30$ ;; AND LOOP 90$: SUB R4,MVICNT ;; SAVE COUNT OF ENTRIES IN LIST RETURN ;; RETURN TO USER STATE 100$: MOV #MVILST,R5 ; POINT R5 TO PRINT LIST MOV MVICNT,R4 ; GET NUMBER OF LIST ENTRIES BNE MVIPRT ; BRANCH IF SOMETHING FOUND MOV #ERR70,R0 ; PRINT NOT FOUND MESSAGE JMP $QERR ; ; ; PRINT A MESSAGE THAT CONTAINS THE DEVICE NAME ; MVIPRT: MOV #ERR72A,R0 ; GET ADDRESS FOR DEVICE NAME MOV (R5)+,R3 ; R3 = UCB ADDRESS OF DEVICE CALL $FMTDV ; FORMAT THE DEVICE NAME MOVB #40,(R0) ; ADD TRAILING BLANK MOV #ERR72C,R0 ; GET ADDRESS FOR TERMINAL NAME MOV (R5)+,R3 ; R3 = UCB ADDRESS TO TERMINAL BNE 20$ ; BRANCH IF NOT VIRTUAL TERMINAL MOUNT MOVB #'S,(R0)+ ; MOVE IN THE MOVB #'Y,(R0)+ ; CONSTANT SYSTEM MOVB #'S,(R0)+ MOVB #'T,(R0)+ MOVB #'E,(R0)+ MOVB #'M,(R0)+ BR 40$ 20$: CALL $FMTDV ; FORMAT TERMINAL NAME 40$: CLRB (R0)+ ; ADD A TRAILING NULL CLRB (R0)+ ; OR TWO CLRB (R0)+ MOV #ERR72,R0 ; GET ADDRESS OF MESSAGE CALL $ERRM ; PRINT THE MESSAGE DEC R4 ; DECRIMENT ENTRY COUNT BNE MVIPRT ; AND LOOP BR MVIXIT ; ALL DONE, EXIT $QUIT:: MOV #EX$ERR,EX.STS ; SET RETURN STATUS TO ERROR ; MVIXIT: MOV EX.STS,R0 ; GET RETURN STATUS JMP $EXST ; AND EXIT WITH STATUS .SBTTL STATE TABLE FOR TPARS .MCALL ISTAT$,STATE$,TRAN$ ISTAT$ MVISTB,MVIKTB STATE$ MVIPRS TRAN$ $STRNG,COLON,SETDEV ; PROCESS DEVICE NAME TRAN$ $LAMDA,MVIOPT ; PROCESS OPTIONS STATE$ COLON TRAN$ ': ; DROP THE ":" STATE$ MVIOP TRAN$ $EOS,$EXIT TRAN$ '/,,SAVLOC ; SAVE ADDRESS OF "/" STATE$ TRAN$ "DEV",MVIEOS ; BASICALLY IGNORE THIS TRAN$ "TERM",TERM ; PROCESS THIS TERMINAL STATE$ TERM TRAN$ '= STATE$ TRAN$ "SYSTEM",MVIEOS,,1,$UUCB ; SPECIAL CASE SYSTEM MOUNTS TRAN$ $STRNG,COLON,SETTRM STATE$ MVIOPT TRAN$ '/,,SAVLOC ; SAVE ADDRESS OF "/" STATE$ TRAN$ "ALL",MVIEOS,PROALL ; PROCESS EVERYTHING TRAN$ "TERM",TERM ; PROCESS THIS TERMINAL TRAN$ "USER",MVIOP ; IGNORE THIS WORD STATE$ MVIEOS TRAN$ $EOS,$EXIT STATE$ ; DUMMY TERMINATING STATE .PAGE .SBTTL ACTION ROUTINES .PSECT ; SETDEV: MOV #$DEV,R2 ; PLACE TO STORE DEV NAME & NUMBER CALL PROCDV ; GO PROCESS THE DEVICE MOV $UUCB,$DUCB ; MOVE UCB ADDRESS TO RIGHT PLACE PROALL: CLR $UUCB ; CLEAR TI: UCB ADDRESS RETURN ; SETTRM: MOV #$DTERM,R2 ; PLACE TO STORE TI: NAME & NUMBER PROCDV: ; PROCESS THE DEVICE MOV .PSTPT,R0 ; GET THE ADDRESS OF THE STRING MOV R3,-(SP) ; SAVE R3 MOV R2,R3 ; LOAD R3 FOR CALL CALL $FDLOG ; MOVE DEVICE NAME AND FIND UCB ADDR. BCS 90$ ; BRANCH IF ERROR CALL $SWSTK,60$ ;; SWITCH TO SYSTEM STATE 50$: MOV U.RED(R1),R1 ;; FOLLOW REDIRECT POINTER CMP U.RED(R1),R1 ;; TEST FOR END OF REDIRECT BNE 50$ ;; BRANCH IF NOT MOV R1,$UUCB ;; SAVE UUCB FOR NOW RETURN ;; RETURN TO USER STATE 60$: MOV (SP)+,R3 ; RESTORE R3 RETURN ; RETURN TO CALLER ; 90$: TST R3 ; WAS IT A SYNTAX ERROR? BEQ SYNERR ; BRANCH IF IT WAS JMP $QR3 ; DEVICE NOT IN SYSTEM ; ; SYNERR: JMP $QR2 ; SYNTAX ERROR ; ; SAVLOC: MOV .PSTPT,$STRST ; SAVE LOCATION OF "/" RETURN ; .END $MVIEP