{{page>en:templates:fapiint}} ====== DosChgFilePtr ====== This call moves the read/write pointer in accordance with the type of move specified. ===== Syntax ===== DosChgFilePtr (FileHandle, Distance, MoveType, NewPointer) ===== Parameters ===== * FileHandle ([[HFILE]]) - input : Handle returned by a previous [[DosOpen]] call. * Distance ([[LONG]]) - input : The offset to move, in bytes. * MoveType ([[USHORT]]) - input : Method of moving. Specifies a location in the file from where Distance to move the read/write pointer starts. Values and their meanings are: ^ Value ^ Definition ^ | 0 | Beginning of the file. | | 1 | Current location of the read/write pointer. | | 2 | End of the file. Use this method to determine a file's size. | * NewPointer ([[PULONG]]) - output : Address of the new pointer location. ===== Return Code ===== rc ([[USHORT]]) - return Return code descriptions are: * 0 NO_ERROR * 1 ERROR_INVALID_FUNCTION * 6 ERROR_INVALID_HANDLE ===== Remarks ===== The read/write pointer in a file is a signed 32-bit number. A negative value moves the pointer backward in the file. A positive value moves the pointer forward. DosChgFilePtr cannot be used to seek to a negative position in the file. This call may not be used for a character device or pipe. ===== Example Code ===== ==== C Binding ==== #define INCL_DOSFILEMGR USHORT rc = DosChgFilePtr(FileHandle, Distance, MoveType, NewPointer); HFILE FileHandle; /* File handle */ LONG Distance; /* Distance to move in bytes */ USHORT MoveType; /* Method of moving (0, 1, 2) */ PULONG NewPointer; /* New Pointer Location */ USHORT rc; /* return code */ This example opens file test.dat, writes some data, and resets the file pointer to the beginning of the file. #define INCL_DOSFILEMGR #define OPEN_FILE 0x01 #define CREATE_FILE 0x10 #define FILE_ARCHIVE 0x20 #define FILE_EXISTS OPEN_FILE #define FILE_NOEXISTS CREATE_FILE #define DASD_FLAG 0 #define INHERIT 0x80 #define WRITE_THRU 0 #define FAIL_FLAG 0 #define SHARE_FLAG 0x10 #define ACCESS_FLAG 0x02 #define FILE_NAME "test.dat" #define FILE_SIZE 800L #define FILE_ATTRIBUTE FILE_ARCHIVE #define RESERVED 0L HFILE FileHandle; USHORT Wrote; USHORT Action; PUSHORT Local PSZ FileData[100]; USHORT rc; Action = 2; strcpy(FileData, "Data..."); if(!DosOpen(FILE_NAME, /* File path name */ &FileHandle, /* File handle */ &Action, /* Action taken */ FILE_SIZE, /* File primary allocation */ FILE_ATTRIBUTE, /* File attribute */ FILE_EXISTS | FILE_NOEXISTS, /* Open function type */ DASD_FLAG | INHERIT | /* Open mode of the file */ WRITE_THRU | FAIL_FLAG | SHARE_FLAG | ACCESS_FLAG, RESERVED)) /* Reserved (must be zero) */ if(!DosWrite(FileHandle, /* File handle */ (PVOID) FileData, /* User buffer */ sizeof(FileData), /* Buffer length */ &Wrote)) /* Bytes written */ rc = DosChgFilePtr(FileHandle, /* File handle */ MOVE_DIST, /* Distance to move in bytes */ FILE_BEG, /* Method of moving */ &Local); /* New pointer location */ ==== MASM Binding ==== EXTRN DosChgFilePtr:FAR INCL_DOSFILEMGR EQU 1 PUSH WORD FileHandle ;File handle PUSH DWORD Distance ;Distance to move in bytes PUSH WORD MoveType ;Method of moving (0, 1, 2) PUSH@ DWORD NewPointer ;New Pointer Location (returned) CALL DosChgFilePtr Returns WORD ===== Note ===== Text based on http://www.edm2.com/index.php/DosChgFilePtr {{page>en:templates:fapi}}