;
; Christian Groessler, Apr-2000
;
; int __fastcall__ read(int fd,void *buf,int count)
;

	.include "atari.inc"
	.import __rwsetup,__do_oserror,__inviocb,__oserror
	.export	_read

_read:	jsr	__rwsetup	; do common setup for read and write
	beq	done		; if size 0, it's a no-op
	cpx	#$FF		; invalid iocb?
	beq	_inviocb
	lda	#GETCHR		; iocb command code
	sta	ICCOM,x
	jsr	CIOV		; read it
	bpl	done
	cpy	#EOFERR		; eof is treated specially
	beq	done
	jmp	__do_oserror	; update errno

done:	lda	ICBLL,x		; buf len lo
	pha			; save
	lda	ICBLH,x		; get buf len hi
	tax			; to X
	lda	#0
	sta	__oserror	; clear system dependend error code
	pla			; get buf len lo
	rts

_inviocb:
	jmp	__inviocb