#include <resources/disk.h>

struct DiscResource *DiskResource;
struct DiscResourceUnit DiskResourceUnit;
struct MsgPort *replyport;

#asm

_AllocUnit:
	move.l	4(sp),d0
	movea.l	_DiskResource,a6
	jmp		-6(a6)

_FreeUnit:
	move.l	4(sp),d0
	movea.l	_DiskResource,a6
	jmp		-12(a6)

_GetUnit:
	movea.l	4(sp),a1
	movea.l	_DiskResource,a6
	jmp		-18(a6)

_GiveUnit:
	movea.l	_DiskResource,a6
	jmp		-24(a6)

_GetUnitId:
	move.l	4(sp),d0
	movea.l	_DiskResource,a6
	jmp		-30(a6)

	public	_DummyInterrupt
	public	_AllocUnit
	public	_FreeUnit
	public	_GetUnit
	public	_GiveUnit
	public	_GetUnitId

#endasm

Dummy()
{
#asm
_DummyInterrupt:
	movem.l	d0-d7/a0-a6,-(sp)
#endasm
	kprintf("hallo\n");
#asm
	movem.l	(sp)+,d0-d7/a0-a6
	rts
#endasm
}

struct MsgPort *CreatePort();
struct DiscResource *OpenResource();
extern void DummyInterrupt();
extern struct DiscResourceUnit *GetUnit();
struct DiscResourceUnit *FormerUnit;

InitDiskRes()
{
 replyport=CreatePort("replyport",0);
 DiskResourceUnit.dru_Message.mn_Node.ln_Type=NT_MESSAGE;
 DiskResourceUnit.dru_Message.mn_ReplyPort=replyport;
 DiskResourceUnit.dru_DiscBlock.is_Code=DummyInterrupt;
 DiskResourceUnit.dru_DiscSync.is_Code=DummyInterrupt;
 DiskResourceUnit.dru_Index.is_Code=DummyInterrupt;
 DiskResource=OpenResource(DISKNAME,0);
}

FinishDiskRes()
{
 if (replyport) DeletePort(replyport);
}

GiveMeTheDisks()
{
 do
 {
 FormerUnit=GetUnit(&DiskResourceUnit);
 if (FormerUnit==0) 
  {WaitPort(replyport);
   GetMsg(replyport);}
 }
 while (FormerUnit==0);
}

GiveBackTheDisks()
{
 Disable();
 GiveUnit();
 Enable();
}

