
*	ReadArb.asm (of PCQ Pascal runtime library)
*	Copyright (c) 1989 Patrick Quaid

*	This just implements reading some data element into the
*	file buffer.  This is what is used for reading an integer from a
*	file of integer, for example, rather than a text file.  Of course
*	it can be used for any sort of data element.

	SECTION	ONE

	XREF	_p%readarbbuf

	XDEF	_p%readarb
_p%readarb
	move.l	a0,a1			; shift var address over
	move.l	4(sp),a0		; get address of file record
	tst.b	12(a0)			; are we at eof?
	bne	6$			; if so, skip this stuff
	move.l	8(a0),d1		; get buffer size
	cmp.l	#1,d1			; is it 1?
	bne.s	1$			; if not, go around
	move.b	4(a0),d0		; get the byte
	move.b	d0,(a1)			; and save it
	bra.s	5$			; and go
1$	cmp.l	#2,d1			; is it 2?
	bne.s	2$			; if not, split
	move.w	4(a0),d0		; get word
	move.w	d0,(a1)			; save it
	bra.s	5$			; and go
2$	cmp.l	#4,d1			; is it 4?
	bne.s	3$			; if not, skip ahead
	move.l	4(a0),d0		; get word
	move.l	d0,(a1)			; save it
	bra.s	5$			; and leave
3$	move.l	4(a0),a2		; get the buffer address
4$	move.b	(a2)+,d0		; get a byte
	move.b	d0,(a1)+		; and store it
	dbra	d1,4$			; and loop
5$	jsr	_p%readarbbuf		; get next item
6$	rts

	END
