.TITLE ZFDISMOUNT - Dismount Image for ZFACP .IDENT /X01-000/ ;++ ; ZFDISMOUNT - Dismount Image for ZFACP ; ; ABSTRACT: ; ; This program requests that the ZF device be dismounted. ; ; The user must have at least MOUNT and CMKRNL privileges. ;-- .PAGE .SBTTL External and local symbol definitions .LIBRARY \SYS$LIBRARY:LIB\ $CCBDEF ; Channel control block $DEVDEF ; Device characteristics $IODEF ; I/O function codes $PSLDEF ; Processor status longword $SSDEF ; System status codes $UCBDEF ; Unit control block .PAGE .SBTTL Local storage .PSECT LOCAL_DATA NOEXE, PIC, LONG ZF_CHN: .BLKW 1 ; channel to ZF device ZF_DVC: .ASCID /ZFA0/ ; ZF device name .PAGE .SBTTL DMT_START, Main Program .PSECT CODE SHR, NOWRT, PIC, LONG .ENTRY DMT_START, ^M<> $CMKRNL_S B^BEGIN ; change mode to kernel RET ; all done .ENTRY BEGIN, ^M<> ; assign a channel to the device; if successful, ; get its UCB address $ASSIGN_S DEVNAM=ZF_DVC, CHAN=ZF_CHN,- ; assign channel to PCA1 ACMODE=#PSL$C_USER ; at USER level BLBS R0, 10$ ; check for error RET ; return if n.g. 10$: MOVZWL ZF_CHN, R0 ; obtain channel number JSB G^IOC$VERIFYCHAN ; get CCB addr in R1 BLBS R0, 20$ ; check for error RET ; else return 20$: MOVL CCB$L_UCB(R1), R5 ; get UCB address BBS #DEV$V_MNT,UCB$L_DEVCHAR(R5),30$; is unit mounted? $DASSGN_S CHAN=ZF_CHN ; fall through if not MOVL #SS$_DEVNOTMOUNT, R0 ; set error code RET ; and return 30$: BISL2 #DEV$M_DMT, UCB$L_DEVCHAR(R5) ; mark unit for dismount $QIOW_S CHAN=ZF_CHN,FUNC=#IO$_ACPCONTROL; wake the ACP $DASSGN_S CHAN=ZF_CHN ; deassign the channel MOVZWL #SS$_NORMAL, R0 ; and RET ; EXIT .END DMT_START