home *** CD-ROM | disk | FTP | other *** search
- include compiler.inc
-
- ttl FRDWR, 1.06, 11-20-86, cr
-
- ;stream read
-
- dseg
- cseg
- xtfs <write,read,$strhand>
-
- procdef fread, <<bfadr, ptr>, <elsiz, word>, <elcount, word>, <strm, ptr>>
- mov si,1 ;set READ flag
- jmp short start
-
- entrdef fwrite
- xor si,si ;set WRITE flag
-
- start:
- pushreg
- pushds
-
- push si ;save flag
- mov si, elcount ;nbr elements
- mov ax, elsiz ;element size
- cwd
- mul si
- mov di, ax ;save bytes to read or write
- pop si ;restore flag
-
- callit $strhand <<strm, ptr>>
- inc ax
- jz nodv2
- dec ax
- mov dl, 10h ;error code
-
- or si,si
- jnz rd
-
- wr:
- test bl, 2 ;open for writing?
- jz seterr
- callit write,<<di,reg>,<bfadr,ptr>,<ax,reg>>
- jmp short back
-
- rd:
- test bl, 1 ;open for reading?
- jz seterr
- callit read,<<di,reg>,<bfadr,ptr>,<ax,reg>>
-
- back:
-
- mov dl, 08h
- or ax, ax ;if zero, EOF
- jz seterr
- inc ax ; if -1, ERROR
- or dl, 10h
- or ax, ax
- jz seterr
- dec ax
- ;
- mov si, elsiz ;element size
- cmp si, 1
- jbe nodv2
- cwd
- idiv si
- jmp short nodv2
-
- seterr:
- ldptr si, strm
- or byte ptr 2[si], dl ; set error or EOF code
- mov ax, -1
- nodv2:
- pret ;return # of elements
- pend fread
- finish
-