Initial
This commit is contained in:
214
fileio/CFILE.ASM
Normal file
214
fileio/CFILE.ASM
Normal file
@@ -0,0 +1,214 @@
|
||||
;*************************************************************************************
|
||||
; MODULE: CFILE.ASM DATE: APRIL 27,1997
|
||||
; AUTHOR: SEAN M. KESSLER
|
||||
; TARGET: 32 BIT LAT MODEL
|
||||
; FUNCTION : BUFFERED FILE FUNCTIONS
|
||||
;*************************************************************************************
|
||||
.386
|
||||
.MODEL FLAT
|
||||
INCLUDE devioctl.inc
|
||||
INCLUDE string.inc
|
||||
INCLUDE openfile.inc
|
||||
.DATA
|
||||
crlf DB 0Dh,0Ah,00h
|
||||
.CODE
|
||||
_FileOpen proc near ; int FileOpen(char *pathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes)
|
||||
push ebp ; save stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
xor eax,eax ; clear eax register
|
||||
cmp byte ptr[ebp+08h],0000h ; is pathFileName NULL
|
||||
je @@FileOpenEnd ; if it is then we've got an error
|
||||
push esi ; save source index
|
||||
CREATEFILE [ebp+08h],[ebp+10h],[ebp+14h],[ebp+18h],[ebp+1Ch] ; call create file
|
||||
mov esi,[ebp+0Ch] ; move FileInfo ptr to esi
|
||||
mov [FileInfo ptr [esi]].FileInfo@@mhFileHandle,eax ; store handle
|
||||
pop esi ; restore source index
|
||||
@@FileOpenEnd:
|
||||
pop ebp ; restore previous frame
|
||||
retn ; return near to caller
|
||||
_FileOpen endp
|
||||
|
||||
_FileClose proc near ; int CloseFile(FileInfo *pFileInfo);
|
||||
push ebp ; save prior frame
|
||||
mov ebp,esp ; create new stack frame
|
||||
push esi ; save source index register
|
||||
mov esi,[ebp+08h] ; move FileInfo * into esi
|
||||
cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle
|
||||
je @@FileCloseEnd ; handle is not valid
|
||||
CLOSEHANDLE [FileInfo ptr[esi]].FileInfo@@mhFileHandle ; close handle
|
||||
mov [FileInfo ptr[esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; set handle to invalid state
|
||||
@@FileCloseEnd: ; end sync address
|
||||
pop esi ; restore source index
|
||||
pop ebp ; restore prior stack frame
|
||||
retn ; return near to caller
|
||||
_FileClose endp
|
||||
|
||||
_FileSize proc near ; DWORD GetFileSize(FileInfo *pFileInfo)
|
||||
push ebp ; save previous stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
mov esi,[ebp+08h] ; move (FileInfo *) into source index register
|
||||
cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle
|
||||
je @@FileSizeError ; handle is not valid
|
||||
GETFILESIZE [FileInfo ptr [esi]].FileInfo@@mhFileHandle ; get size of file
|
||||
jmp @@FileSizeEnd ; jump to exit code
|
||||
@@FileSizeError: ; handle error(s)
|
||||
xor eax,eax ; by clearing eax register
|
||||
@@FileSizeEnd: ; FileSizeEnd sync address
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileSize endp ; end procedure
|
||||
|
||||
_FileRead proc near ; FileRead(FileInfo *pFileInfo,BYTE *ptrByte);
|
||||
push ebp ; save stack frame
|
||||
mov ebp,esp ; create new stack frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
mov esi,[ebp+08h] ; move pFileInfo to esi register
|
||||
mov edi,[ebp+0Ch] ; move ptrByte to destination index register
|
||||
FREAD esi,edi ; perform read from disk, or cache
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore stack frame
|
||||
retn ; return near to caller
|
||||
_FileRead endp
|
||||
|
||||
_FileReadLength proc near ; FileRead(FileInfo *pFileInfo,BYTE *ptrByte,int length);
|
||||
push ebp ; save stack frame
|
||||
mov ebp,esp ; create new stack frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
push ebx ; save ebx register
|
||||
mov esi,[ebp+08h] ; move pFileInfo to esi register
|
||||
mov edi,[ebp+0Ch] ; move ptrByte to destination index register
|
||||
mov ebx,[ebp+10h] ; move length into ebx register
|
||||
cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle
|
||||
je @@FileReadLengthError
|
||||
@@FileReadLengthContinue: ; continue sync address
|
||||
FREAD esi,edi ; perform read from disk, or cache
|
||||
inc edi ; increment pointer index
|
||||
dec ebx ; decrement counter
|
||||
cmp ebx,0000h ; is counter zero
|
||||
jne @@FileReadLengthContinue ; if not then keep going
|
||||
jmp @@FileReadLengthEnd ; otherwise we're done
|
||||
@@FileReadLengthError: ; error sync address
|
||||
xor eax,eax ; clear eax register on error
|
||||
@@FileReadLengthEnd: ; end sync address
|
||||
pop ebx ; restore ebx register
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore stack frame
|
||||
retn ; return near to caller
|
||||
_FileReadLength endp
|
||||
|
||||
_FileWriteLength proc near ; int FileWriteLength(FileInfo *pFileInfo,char *ptrByte,int length)
|
||||
push ebp ; save previous stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
push ebx ; save ebx register (counter)
|
||||
mov ebx,[ebp+10h] ; move length into ebx register
|
||||
mov esi,[ebp+08h] ; move (pFileInfo*) to edi register
|
||||
mov edi,[ebp+0Ch] ; move ptrByte to source index register
|
||||
cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle
|
||||
je @@FileWriteLengthEnd
|
||||
@@FileWriteLengthContinue: ; continue sync address
|
||||
FWRITE esi,edi ; perform write
|
||||
inc edi ; decrement source index
|
||||
dec ebx ; decrement counter
|
||||
cmp ebx,0000h ; is counter zero
|
||||
jne @@FileWriteLengthContinue ; if not then keep going
|
||||
jmp @@FileWriteLengthEnd ; otherwise we're done
|
||||
@@FileWriteLengthError: ; error sync address
|
||||
xor eax,eax ; clear eax register on error
|
||||
@@FileWriteLengthEnd: ; end sync address
|
||||
pop ebx ; restore ecx register
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileWriteLength endp
|
||||
|
||||
_FileWrite proc near ; int FileWrite(FileInfo *pFileInfo,char *ptrByte)
|
||||
push ebp ; save previous stack frame
|
||||
mov ebp,esp ; create new stack frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
mov esi,[ebp+08h] ; move (pFileInfo*) to source index register
|
||||
mov edi,[ebp+0Ch] ; move ptrByte to destination index register
|
||||
FWRITE esi,edi ; perform write
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileWrite endp
|
||||
|
||||
_FileSeek proc near ; int FileSeek(FileInfo *pFileInfo,int offset,int whence)
|
||||
push ebp ; save stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
push ebx ; save ebx register
|
||||
mov esi,[ebp+08h] ; move pFileInfo into source index register
|
||||
mov eax,[ebp+0Ch] ; move offset into eax register
|
||||
mov ebx,[ebp+10h] ; move whence into ebx register
|
||||
FSEEK esi,eax,ebx ; perform the seek
|
||||
pop ebx ; restore ebx register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous frame
|
||||
retn ; return near to caller
|
||||
_FileSeek endp
|
||||
|
||||
_FileReadLine proc near ; int FileReadLine(FileInfo *pFileInfo,char *strLine)
|
||||
push ebp ; save stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
mov esi,[ebp+08h] ; move (pFileInfo *) to source index register
|
||||
mov edi,[ebp+0Ch] ; move strLine to destination index register
|
||||
FREADLINE esi,edi ; perform getLine
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileReadLine endp
|
||||
|
||||
_FileWriteLine proc near ; int FileWrite(FileInfo *pFileInfo,char *strLine,int length);
|
||||
push ebp ; save previous stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
push edi ; save destination index register
|
||||
mov esi,[ebp+08h] ; move pFileInfo to source index register
|
||||
mov edi,[ebp+0Ch] ; move strLine to destination index register
|
||||
FWRITELINE esi,edi ; write string to file
|
||||
lea edi,crlf ; get crlf address to edi register
|
||||
FWRITELINE esi,edi ; write string to file
|
||||
pop edi ; restore destination index register
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileWriteLine endp
|
||||
|
||||
_FileFlush proc near
|
||||
push ebp ; save previous stack frame
|
||||
mov ebp,esp ; create new frame
|
||||
push esi ; save source index register
|
||||
mov esi,[ebp+08h] ; move pFileInfo to source index register
|
||||
FFLUSH esi ; flush cache
|
||||
pop esi ; restore source index register
|
||||
pop ebp ; restore previous stack frame
|
||||
retn ; return near to caller
|
||||
_FileFlush endp
|
||||
|
||||
public _FileOpen
|
||||
public _FileClose
|
||||
public _FileRead
|
||||
public _FileReadLength
|
||||
public _FileWrite
|
||||
public _FileWriteLength
|
||||
public _FileReadLine
|
||||
public _FileWriteLine
|
||||
public _FileFlush
|
||||
public _FileSize
|
||||
public _FileSeek
|
||||
END
|
||||
Reference in New Issue
Block a user