.TITLE PREFER .IDENT /V2.0-8/ ; ;**************************************************************************** ;* * ;* COPYRIGHT (c) 1990, 1991 BY * ;* DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. * ;* ALL RIGHTS RESERVED. * ;* * ;* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ;* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND 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. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ;* TRANSFERRED. * ;* * ;* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ;* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ;* CORPORATION. * ;* * ;* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ;* * ;* * ;**************************************************************************** ; ; ; OVERVIEW: ; ; This MACRO program provides a DCL command line interface to the preferred ; path QIO function. ; ; To use it, place the executable in SYS$SYSTEM and issue the command ; SET COMMAND PREFER.CLD ; ; Issue the command "PREFER device/HOST=hsc[/FORCE]" where "hsc" is name of the ; HSC that is the prefered path, e.g. $10$DUA10: has a primary path HSC015 and ; secondary path HSC014. To select HSC014, use : ; ; $PREFER $10$DUA10:/HOST=HSC014 ; ; For information on the use of preferred path, please refer to the VMS I/O ; User's Guide. ; ; MACRO LIBRARY CALLS ; .LIBRARY /SYS$LIBRARY:LIB/ $SSDEF $ASSIGNDEF $QIODEF $IODEF $EXITDEF .PSECT RWDATA,WRT,NOEXE,QUAD DEV_LABEL: .ASCID "disk_name" .ALIGN LONG DEV_DESC: .WORD 32 ; Fixed length string descriptor .BYTE DSC$K_DTYPE_T .BYTE DSC$K_CLASS_S .ADDRESS DEV_NAME DEV_NAME: .BLKB 32 ; Device to change the path on DEV_LEN: .LONG 0 ; Returned actual length HOST_LABEL: .ASCID "host_name" .ALIGN LONG HOST_DESC: .WORD 31 ; Fixed length string descriptor .BYTE DSC$K_DTYPE_T .BYTE DSC$K_CLASS_S .ADDRESS HOST_NAME HOST_COUNT: .BLKB 1 HOST_NAME: .BLKB 31 ; Device to change the path on HOST_LEN: .LONG 0 ; Returned actual length FORCE_LABEL: .ASCID "force" .ALIGN LONG FORCE_SWITCH: .LONG 0 CHNL: .WORD 0 ; Channel IOSB: .BLKW 4 ; I/O Status Block .PSECT CODE,NOWRT,EXE,LONG .ENTRY PREFER,^M<> ; To test for global presence this ; must be the first CLI$ call PUSHAL FORCE_LABEL ; Switch to test CALLS #1,CLI$PRESENT ; Is it present globally? MOVL R0,FORCE_SWITCH ; Save status for later PUSHAL DEV_DESC ; Address of string descriptor PUSHAL DEV_LABEL ; Want device name CALLS #2,G^CLI$GET_VALUE ; From the command line BLBS R0,1$ ; Success BRW 10$ 1$: $ASSIGN_S - ; Assign an I/O channel DEVNAM=DEV_DESC,- CHAN=CHNL BLBS R0,2$ BRW 10$ ; Branch if error occured 2$: PUSHAL HOST_LEN PUSHAL HOST_DESC PUSHAL HOST_LABEL ; Get host name CALLS #3,G^CLI$GET_VALUE ; From the command line BLBS R0,3$ ; Success CMPL #CLI$_ABSENT,R0 BEQL 21$ ; No Host specified, should be a /FORCE BRW 10$ 21$: BRW 7$ 3$: MOVB HOST_LEN,HOST_COUNT ; Create .ASCIC string $QIOW_S - ; Issue QIO to set prefered path CHAN=CHNL,- FUNC=#IO$_SETPRFPATH,- IOSB=IOSB,- P1=HOST_COUNT ; .ASCIC Node name BLBS R0,6$ ; Success BRW 10$ 6$: BLBS IOSB,7$ MOVW IOSB,R0 BRW 10$ 7$: CMPL #CLI$_PRESENT,FORCE_SWITCH BEQL 13$ ; Issue QIO to force the path 10$: $EXIT_S R0 ;+ ; Need to switch Primary and Secondary Hosts ;- 13$: $QIOW_S - CHAN=CHNL,- FUNC=#,- IOSB=IOSB BLBC R0,10$ MOVW IOSB,R0 BRB 10$ .END PREFER