home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff339.lzh
/
PCQ
/
Runtime.lzh
/
Runtime
/
Writers
/
writetext.asm
< prev
Wrap
Assembly Source File
|
1989-11-20
|
1KB
|
54 lines
*
* WriteText.asm (of the PCQ Pascal runtime library)
* Copyright (c) 1989 Patrick Quaid
*
* Writes some bytes to a file record's buffer, flushing the
* buffer if necessary.
* On entry, a0 holds the address of the file record
* a1 holds the address of the bytes to write
* d3 holds the number of bytes to write
INCLUDE ":runtime/FileRec.i"
XREF _p%FlushBuffer
XREF _p%IOResult
SECTION WriteText,CODE
XDEF _p%WriteText
_p%WriteText
tst.l _p%IOResult ; is IO system OK?
bne Leave ; if not, go
tst.l d3
beq Leave ; if nothing to write, leave
move.l BUFFER(a0),d0 ; check actual buffer
bne.s 4$ ; if allocated, it's OK
move.l #56,_p%IOResult ; set Output not open
rts ; split
4$ subq.l #1,d3 ; for dbra below
move.l a2,-(sp) ; save a2
move.l CURRENT(a0),a2 ; get current position
1$ move.b (a1)+,d0 ; get byte
move.b d0,(a2)+ ; write into buffer
cmpa.l MAX(a0),a2 ; are we at MAX ?
blt.s 2$ ; if not, skip
move.l a2,CURRENT(a0) ; save new current pointer
movem.l a1/d3,-(sp) ; save regs for call
jsr _p%FlushBuffer ; write buffer contents
movem.l (sp)+,a1/d3 ; restore regs
tst.l _p%IOResult ; were there errors?
bne.s 3$ ; if so, leave this loop
move.l CURRENT(a0),a2 ; get new CURRENT ptr
2$ dbra d3,1$ ; loop
move.l a2,CURRENT(a0) ; save correct value
tst.b INTERACTIVE(a0) ; is it interactive?
beq.s 3$ ; if not, skip
jsr _p%FlushBuffer ; if so, flush it immediately
3$ move.l (sp)+,a2
Leave rts
END