
	NOLIST
	INCLUDE	"exec/types.i"
	INCLUDE	"exec/alerts.i"
	INCLUDE	"exec/libraries.i"
	INCLUDE	"libraries/dos.i"
	LIST

	XREF	_cLibInit
	XREF	_cOpen
	XREF	_cClose
	XREF	_cExpunge
	XREF	_cAbortIO
	XREF	_cBeginIO
	XREF	_SysBase
	XREF	_DOSBase
	XREF	_LVOOpenLibrary
	XREF	_LVOAlert

all		reg		d0/d1/a0/a1/a4/a6
most	reg		d1/a0/a1/a4/a6


; This routine gets called after the device has been allocated.
; The device pointer is in d0. The segment list is in a0. If it
; returns non-zero, the device will be linked into the device list.

dosName	DOSNAME

	XDEF	_aLibInit
_aLibInit
	movem.l	a4/a6,-(sp)		; save registers that Aztec doesnt
	move.l	a0,-(sp)		; push segment list pointer
	move.l	d0,-(sp)		; push dev_ptr
	move.l	a6,_SysBase		; save pointer to exec
	lea 	dosName(pc),a1	; open DOS library
	clr.l	d0				; library version number
	CALLLIB	_LVOOpenLibrary	
	move.l	d0,_DOSBase		; save pointer to DOS
	bne.s	init_DosOK
	ALERT	AG_OpenLib!AO_DOSLib
	clr.l	d0				; NULL means failed
	bra.s	init_end

init_DosOK
	jsr 	_cLibInit		; cLibInit(dev_ptr,seg_list)

init_end
	addq.l	#4,sp			; dev_ptr in d0 if cLibInit() ok
	move.l	(sp)+,a0		; get back seg_list
	movem.l	(sp)+,a4/a6		; restore registers
	rts


;
; Ok, now these are all simple little routines that save registers
; that may be damaged by the compiler then pushes the parameters onto
; the stack
;

	XDEF	_aOpen
_aOpen:
	movem.l	most,-(sp)
	move.l	d1,-(sp)	; push flags
	move.l	d0,-(sp)	; push unit number
	move.l	a1,-(sp)	; push request
	move.l	a6,-(sp)	; push device
	jsr 	_cOpen
	add.l	#16,a7		; remove parameters
	movem.l	(sp)+,most
	rts

	XDEF	_aClose
_aClose:
	movem.l	most,-(sp)
	move.l	a1,-(sp)	; push request
	move.l	a6,-(sp)	; push device
	jsr 	_cClose
	addq.l	#8,a7		; remove parameters
	movem.l	(sp)+,most
	rts

	XDEF	_aExpunge
_aExpunge:
	movem.l	most,-(sp)
	move.l	a6,-(sp)	; push device
	jsr 	_cExpunge
	addq.l	#4,a7		; remove parameters
	movem.l	(sp)+,most
	rts

	XDEF	_aNull
_aNull:
	clr 	d0
	rts

	XDEF	_aBeginIO
_aBeginIO:
	movem.l	all,-(sp)
	move.l	a1,-(sp)	; push request
	move.l	a6,-(sp)	; push device
	jsr 	_cBeginIO
	addq.l	#8,a7		; remove parameters
	movem.l	(sp)+,all
	rts

	XDEF	_aAbortIO
_aAbortIO:
	movem.l	all,-(sp)
	move.l	a1,-(sp)	; push request
	move.l	a6,-(sp)	; push device
	jsr 	_cAbortIO
	addq.l	#8,a7		; remove parameters
	movem.l	(sp)+,all
	rts

