Jump to content

DevHlp_ReadFile

From EDM2
Revision as of 15:30, 18 May 2025 by Martini (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

DevHlp_ReadFile is used by base device drivers to read a file previously opened using DevHlp_OpenFile.

Syntax

C

DevHelp_ReadFile ( PFILEIOINFO pfileread)

Assembler

Calling Sequence in Assembler

LES DI, ReadFile
MOV DL, DevHlp_ReadFile

CALL [Device_Help]

Parameters

C

Pointer to the FILEIOINFO structure defined as follows

typedef struct FOPEN {
PSZ FileName; /* (input) pointer to file name */
ULONG FileSize; /* (output) size of file returned by FileOpen */
} FILEOPEN;

typedef struct FCLOSE {
USHORT reserved /* reserved */
} FILECLOSE;

typedef struct FREAD {
PBYTE Buffer; /* (input) pointer to input buffer */
ULONG ReadSize; /* (input) number of bytes to read fromfile */
} FILEREAD;

typedef struct FREADAT {
PBYTE Buffer; /* (input) pointer to input buffer */
ULONG ReadSize; /* (input) number of bytes to read from file */
ULONG StartPosition /* (input) starting file position relative to
the beginning of the file */
} FILEREADAT;

typedef union FILEIOOP {
struct FOPEN FileOpen;
struct FCLOSE FileClose;
struct FREAD FileRead;
struct FREADAT FileReadAt;
} FILEIOOP;

typedef struc _DDFileIo {
USHORT Length; /* (input) length of imbedded structure */
FILEIOOP Data; /* (input) imbedded file system operation structure */
} FILEIOINFO, FAR * PFILEIOINFO

Assembler

ES DI points to a FILEIOINFO structure defined as follows

FILEIOINFO struc
length          dw      8        ; length of imbedded fle system operation structure / length of structure (must be 8)
;
FREAD struc
Buffer          dd      ?        ; 1616 pointer to the input buffer / 16:16 address of a read buffer
ReadSize        dd      ?        ; length of data to read / number of bytes to read
FREAD ends
;
FILEIOINFO ends

Return Code

C

  • Success Indicator 0 if file was read.
  • 24 ERROR_BAD_LENGTH Length in the FILEIOINFO structure is invalid.

Assembler

  • C Clear if the file is closed. AX = zero.
  • C Set if error.

Possible errors

  • 24 ERROR_BAD_LENGTH The length in the FILEIOINFO structure is invalid.


Remarks

DevHlp_FileRead may be called at initialization time only. It provides a primitive interface to the mini-IFS or micro_IFS at initialization time.

The file is read from the current file position. After a successful read, the current file position is updated.

Using this interface only one file may be opened at a time. No handle is assigned by open. The file read is assumed to be the most recent opened using DevHlp_OpenFile.

Restriction

Valid at INIT time only. Although the size argument of the data structure implies, I'd recommend to better not read more than 32K at a time. Note that the buffer itself is segmented, so DMA overrun and other effects might apply, depending on the quality of the miniIFS in use.

Bugs

Holger Veit's opinion is that the length of structure should be 10, not 8.

Example Code

C

Assembler

Related Functions