/* KillClick */
/* Written by Brian Gontowski */

#include "exec/types.h"
#include "exec/ports.h"
#include "exec/io.h"
#include "devices/trackdisk.h"
#include "libraries/dos.h"
#include "libraries/dosextens.h"
#include "stdio.h"
#include "proto/exec.h"
#include "proto/dos.h"

extern struct Library *SysBase;
struct MsgPort *DiskPort=NULL;
struct IOExtTD *DiskReq=NULL;
UBYTE DiskDev=FALSE;
struct TDU_PublicUnit *DiskUnit;
ULONG ChangeCount;

void Finish (msg,r)
UBYTE *msg;
int r;
{
 if (DiskDev)
    CloseDevice ((struct IORequest *)DiskReq);
 if (DiskReq)
    DeleteIORequest ((struct IORequest *)DiskReq);
 if (DiskPort)
    DeleteMsgPort (DiskPort);
 if (msg)
    Write (Output (),msg,strlen (msg));
 _exit (r);
}

void _main ()
{
 if (SysBase->lib_Version<36)
    Finish ("ERROR: KillClick requires KickStart V2.0!\n",RETURN_FAIL);
 if (!(DiskPort=CreateMsgPort ()))
    Finish ("ERROR: Unable to create a message port!\n",RETURN_FAIL);
 if (!(DiskReq=(struct IOExtTD *)
     CreateIORequest (DiskPort,sizeof (struct IOExtTD))))
    Finish ("ERROR: Unable to create an IO request!\n",RETURN_FAIL);
 if (OpenDevice ("trackdisk.device",0,(struct IORequest *)DiskReq,0))
    Finish ("ERROR: Unable to open the \"trackdisk.device\"!",RETURN_FAIL);
 DiskDev=TRUE;
 DiskUnit=(struct TDU_PublicUnit *)DiskReq->iotd_Req.io_Unit;
 DiskUnit->tdu_PubFlags|=TDPF_NOCLICK;
 Finish (NULL,RETURN_OK);
}
