*
* V 1.0 of Ami.lib
*
	SECTION Extra,CODE

	XDEF	_AbsExecBase
	XDEF	_CreatePort
	XDEF	_DeletePort
	XREF	_AllocMem
	XREF	_AllocSignal
	XREF	_FreeSignal
	XREF	_FindTask
	XREF	_AddPort
	XREF	_NewList
	XREF	_RemPort
	XREF	_FreeSignal
	XREF	_FreeMem

*
* For "run Ami.lib", return the version number. This module has to be
* the first one in the library for this to work, of course.
*
	moveq.l		#1,D0
	rts
*
* AbsExecBase:	tell where to find it.
*

_AbsExecBase	EQU	4

*
* CreatePort: not defined in the FD files.
* msgPort = CreatePort(msgPortName, msgport_priority)
*

_CreatePort:

	movem.l   D2-D7/A2,-(A7)
	move.l    32(A7),D4		; msgPortName
	move.b    39(A7),D3		; msgport_priority
	move.l    #-1,-(A7)
	jsr       _AllocSignal
	move.l    D0,D5
	move.l    D5,D6
	moveq.l   #-1,D2
	cmp.l     D5,D2
	addq.l    #4,A7
	bne.s     .$1
*
	moveq.l   #0,D0
	bra       CreatePortx
.$1
	move.l    #$00010001,-(A7)
	pea.l     $0022
	jsr       _AllocMem
	movea.l   D0,A2
	exg.l     D7,A2
	tst.l     D7
	exg.l     D7,A2
	addq.l    #8,A7
	bne.s     .$2
*
	move.l    D6,-(A7)
	jsr       _FreeSignal
	moveq.l   #0,D0
	addq.l    #4,A7
	bra.s     CreatePortx
.$2:
	move.l    D4,10(A2)
	move.b    D3,9(A2)
	move.b    #4,8(A2)
	clr.b     14(A2)
	move.b    D6,15(A2)
	clr.l     -(A7)
	jsr       _FindTask
	move.l    D0,16(A2)
	tst.l     D4
	addq.l    #4,A7
	beq.s     .$3
*
	move.l    A2,-(A7)
	jsr       _AddPort
	addq.l    #4,A7
	bra.s     .$4
.$3
	pea.l     20(A2)
	jsr       _NewList
	addq.l    #4,A7
.$4:
	move.l    A2,D0
CreatePortx:
	movem.l   (A7)+,D2-D7/A2
	rts       
*
* DeletePort(msgPort) : not included in the .FD files.
*

_DeletePort:
	movem.l   D2/A2,-(A7)
	movea.l   12(A7),A2
	tst.l     10(A2)
	beq.s     .$5
*
	move.l    A2,-(A7)
	jsr       _RemPort
	addq.l    #4,A7
.$5:
	move.b    #255,8(A2)
	moveq.l   #-1,D2
	move.l    D2,20(A2)
	moveq.l   #0,D2
	move.b    15(A2),D2
	move.l    D2,-(A7)
	jsr       _FreeSignal
	pea.l     $0022
	move.l    A2,-(A7)
	jsr       _FreeMem
	lea.l     12(A7),A7
	movem.l   (A7)+,D2/A2
	rts       

*
* NewList(list) - initialize a new list (actually a macro - NEWLIST).
*

_NewList:
    movea.l   4(A7),A0
    move.l    A0,(A0)
    addq.l    #4,(A0)
    clr.l     4(A0)
    move.l    A0,8(A0)
    rts       

	END
