home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Jason Aller Floppy Collection
/
181.img
/
TASM-101.ZIP
/
OFILWRIT.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-05-02
|
2KB
|
92 lines
; FILENAME: OFILWRIT.ASM
; Copyright (c) 1988, 1989 by Borland International, Inc.
;
; Description: This module implements the routine FileWrite. FileWrite
; writes to a file.
;
; ASSEMBLY INSTRUCTIONS: To assemble this module use the following
; TASM command line.
;
; TASM ofilwrit
include globals.inc
_TEXT segment
FileWrite proc
; Input
; bx - file record offset
; cx - number of bytes
; si - location of bytes
; Output
; cf - set if error occurred
; ax - error code
; (cf set and ax = 0 if EOF)
; 0 - if EOF and 0 bytes are read
; Registers modified
; None
pushf
push cx
push dx
push di
push si
cld
mov dx, [bx+6] ;buffer segment
;--- copy bytes to buffer
filwrt1:
mov ax, [bx+2] ;buffer size
mov di, [bx+4] ;data pointer
sub ax, di ;buffer space available
jz filwrt3 ;jump if none, must flush first
push es
push cx
cmp ax, cx ;check if all bytes fit
jae filwrt2
mov cx, ax ;set to maximum
filwrt2:
push cx
mov es, dx
rep movsb
pop ax
pop cx
pop es
mov [bx+4], di ;save data pointer
sub cx, ax ;get bytes not yet written
jz filwrt4 ;jump if finished
;--- write buffer
filwrt3:
call FileFlush ;flush buffer first
jnc filwrt1 ;loop back if no error
;--- finished
filwrt4:
pop si
pop di
pop dx
pop cx
jc filwrt5
popf
clc
ret
filwrt5:
popf
stc
ret
FileWrite endp
_TEXT ends
end