This function connects a file to a logical disk:
Method 1 (old):
Function: IO$_LD_CONTROL
P1 = address of SBK block (Attributes Statistics Block) returned
by XQP IO$_ACCESS!IO$M_ACCESS function used to open the file
to connect.
P2 = logical disk size. If 0, the allocated size will be used
P3 = Number of tracks (optional)
P4 = Number of sectors (optional)
P5 = Number of cylinders (optional)
P6 = Subfunction: LDIO$K_CONNECT
Method 2 (new, preferred):
Function: IO$_LD_CONTROL
P1 = address of itemlist describing the connection
P6 = Subfunction: LDIO$K_CONNECT | LDIO$M_ITEMLIST
The P6 argument may also contain the following sub-flags:
LDIO$M_LOCK Will lock the container file
LDIO$M_NOFE Will set the NOFE bit to prevent handling
forced errors.
The itemlist consist of entries like this:
BUFLEN (word) - Length of buffer
ITEM (word) - Item description:
LDITM$K_CHANNEL
LDITM$K_EXTENDSIZE
LDITM$K_EXTENDLIMIT
LDITM$K_DEVICENAME
LDITM$K_FILEID
LDITM$K_STARTLBN
LDITM$K_ENDLBN
LDITM$K_FLAGS
LDITM$K_TRACKS
LDITM$K_CYLINDERS
LDITM$K_SECTORS
LDITM$K_MAXBLOCKS
ADDR (longword) - Pointer to buffer
RLENGTH (longword) - Returned data length
The following flags are for tape use only:
LDIO$M_INIT Will init the tape metadata
LDIO$M_NOLOAD Will create the unit without an attached containerfile
LDIO$M_LOADONLY Will load a containerfile to an existing unit
LDIO$M_EXTEND Extend containerfile on demand
This function connects a complete physical disk to a logical disk:
Function: IO$_LD_CONTROL
P1 = descriptor of buffer which contains device name of
physical device
P6 = Subfunction: LDIO$K_CONNECT | LDIO$M_REPLACE
This function connects a partial physical disk to a logical disk:
Function: IO$_LD_CONTROL
P1 = descriptor of buffer which contains device name of
physical device
P2 = Starting LBN (logical block number)
P3 = Ending LBN
P4 = Number of LBN's
P6 = Subfunction: LDIO$K_CONNECT | LDIO$M_LBN
Either P3 or P4 must be specified.
IOSB word 0 = status
Errors returned:
SS$_DEVACTIVE Device already connected
SS$_FORMAT FCB specified in SBK is invalid or file not opened
SS$_ACCVIO One of the parameters cannot be read/written
SS$_IVDEVNAM Attempt to connect to devicetype other than a disk
SS$_FILNOTCNTG Logical disk file not contiguous
SS$_DATAOVERUN Filename of file to connect too long
SS$_FILALRACC File already in use (may be on other cluster nodes)
SS$_ILLKLKNUM Disk size specified in P2 past end of file
SS$_IVADDR Disk bigger than 2097151 blocks
SS$_NORMAL Successful completion
SS$_BADPARAM Invalid geometry information specified
SS$_NOSUCHNODE Shared access was specified while no cluster code
is loaded
SS$_ACCONFLICT Shared access was specified while the device is
not cluster-wide visible
SS$_WRONGACP Container file is not on ODS-2 or ODS-5 disk
SS$_WRONGSTATE Container file is not opened without caching (V8.2 and up)
SS$_BADFILESIZE Container file too small (needs at least 5000 blocks) (Only for tape)
The following errors are returned for LDIO$M_REPLACE or
LDIO$M_LBN only:
SS$_DEVFOREIGN Device foreign mounted
SS$_DEVMOUNT Device mounted
SS$_DEVALLOC Device already allocated
Other possible errors are errors returned by the lockmanager
and errors returned by IOC$SEARCH.