.TITLE GETPAGE ;GETPAGE.MAR - Program to read virtual block 1 of a file using only ; the $QIO system service - given the UFD name and the ; file name in that UFD ; $FIBDEF ;Define offsets into File Information Block ; ;Macro to check $QIO system service status return and IOSB completion status ; .MACRO CHECK_STATUS BLBS R0,.+10 PUSHL R0 CALLS #1,LIB$STOP CMPW #SS$_NORMAL,L^IOSB BEQL .+15 MOVZWL L^IOSB,-(SP) CALLS #1,LIB$STOP .ENDM CHECK_STATUS ; .PSECT DATA PIC,NOEXE,LONG,NOSHR,WRT ; UFD_FIB_DESC: .LONG 16 .LONG UFD_FIB FILE_FIB_DESC: .LONG 16 .LONG FILE_FIB ; UFD_FIB: .LONG ;FIB$L_ACCTL - Read only .BLKW 3 ;FIB$W_FID - Filled at run time .WORD 4,4,0 ;FIB$W_DID - for MFD = (4,4,0) ; FILE_FIB: .LONG ;FIB$L_ACCTL - Read only .BLKW 3 ;FIB$W_FID .BLKW 3 ;FIB$W_DID - File ID for UFD ; IOSB: .BLKL 2 CHAN: .WORD BUF_DESC: .LONG 70 .LONG BUF BUF: .BLKL 128 DEVNAM: .ASCID /DRA0:/ UFDNAM: .ASCID /GAR.DIR;1/ FILNAM: .ASCID /TEST.FIL;*/ ; .PSECT CODE PIC,EXE,LONG,SHR,NOWRT ; GETPAGE: .WORD ; ;Assign a channel number to the disk ; $ASSIGN_S CHAN=CHAN,DEVNAM=DEVNAM BLBS R0,.+10 PUSHL R0 CALLS #1,LIB$STOP ; ;Obtain the file ID of the UFD by accessing it in the MFD ; $QIOW_S CHAN=CHAN,FUNC=#IO$_ACCESS!IO$M_ACCESS,IOSB=IOSB,- P1=UFD_FIB_DESC,P2=#UFDNAM CHECK_STATUS ; ;Move the file ID of the UFD into the DID file of the file FIB ; MOVL UFD_FIB+FIB$W_FID,FILE_FIB+FIB$W_DID ; ;Now deaccess the UFD ; $QIOW_S CHAN=CHAN,FUNC=#IO$_DEACCESS,IOSB=IOSB,P1=UFD_FIB_DESC CHECK_STATUS ; ;Access the file using the UFD file ID from above ; $QIOW_S CHAN=CHAN,FUNC=#IO$_ACCESS!IO$M_ACCESS,IOSB=IOSB,- P1=FILE_FIB_DESC,P2=#FILNAM CHECK_STATUS ; ;Read virtual block #1 of the accessed file ; $QIOW_S CHAN=CHAN,FUNC=#IO$_READVBLK,IOSB=IOSB,P1=BUF,P2=#512,P3=#1 CHECK_STATUS ; ;Write the first line of the block to the terminal ; PUSHAL BUF_DESC CALLS #1,LIB$PUT_OUTPUT ; ;Deaccess the file - we are finished ; $QIOW_S CHAN=CHAN,FUNC=#IO$_DEACCESS,IOSB=IOSB,P1=FILE_FIB_DESC CHECK_STATUS ; MOVL #SS$_NORMAL,R0 ;Status return ERR: RET ;Exit main routine ; .END GETPAGE