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
/
Readers
/
readstring.asm
< prev
Wrap
Assembly Source File
|
1989-11-20
|
1KB
|
47 lines
* ReadString.asm (of PCQ Pascal runtime library)
* Copyright (c) 1989 Patrick Quaid
* This reads a string from a text file.
INCLUDE ":runtime/FileRec.i"
* Upon entry, a0 points to the string variable address. That
* variable is expected to point to a buffer big enough to hold
* the string. The longword on top of the stack holds the file
* record address
SECTION ReadString
XREF _p%ReadOneChar
XREF _p%GetThatChar
XREF _p%IOResult
XDEF _p%ReadString
_p%ReadString
tst.l _p%IOResult ; is IO safe?
bne 3$
move.l (a0),a1 ; get actual buffer address
move.l 4(sp),a0 ; get the file record address
move.l #0,d1 ; length so far
1$ movem.l a1/d1,-(sp) ; save buffer address
jsr _p%ReadOneChar ; get the next character
movem.l (sp)+,a1/d1 ; retrieve buffer and length
tst.l _p%IOResult ; was there an error?
bne 3$
move.b d0,0(a1,d1.l) ; save the character
addq.l #1,d1 ; increment the pointer
cmp.b #10,d0 ; was it a linefeed?
beq.s 2$ ; if so, leave
tst.b EOF(a0) ; or if it's at EOF
bne.s 2$ ; leave if true
movem.l a1/d1,-(sp) ; if not, save regs
jsr _p%GetThatChar ; and eat the current character
movem.l (sp)+,a1/d1 ; get the regs back
bra 1$ ; and loop
2$ move.b #0,-1(a1,d1.l) ; null-terminate the string
3$ rts ; and return
END