home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
cdrom
/
Misc
/
nectools
/
eject.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-11
|
1KB
|
71 lines
/*
NEC-CDR-210 Eject
by dbalster@uni-paderborn.de
*/
#include <exec/exec.h>
#include <dos/dos.h>
#include <devices/scsidisk.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <string.h>
UBYTE version[] = "$VER: eject 1.0 for the NEC CDR-210 drive";
ULONG sense [5];
UBYTE buffer [10];
UBYTE cmd_eject[] = { 0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
#define TEMPLATE "DEVICE/A,UNIT/N/A,OPEN/S,CLOSE/S"
struct {
STRPTR device;
ULONG unit;
BOOL open;
BOOL close;
} args;
ULONG main (VOID)
{
struct MsgPort *mp;
struct SCSICmd scsi;
struct RDArgs *rdargs;
struct IOStdReq *ior;
if (rdargs = ReadArgs(TEMPLATE,(LONG*)&args,NULL))
{
if(mp=CreateMsgPort())
{
if(ior=(struct IOStdReq*)CreateIORequest(mp,sizeof(struct IOStdReq)))
{
if(!OpenDevice(args.device,*(ULONG*)args.unit,ior,0))
{
ior->io_Command = HD_SCSICMD;
ior->io_Data = (APTR) &scsi;
ior->io_Length = sizeof(struct SCSICmd);
scsi.scsi_Data = (UWORD*) buffer;
scsi.scsi_Length = 0;
scsi.scsi_CmdLength = 10;
scsi.scsi_Flags = SCSIF_AUTOSENSE|SCSIF_WRITE;
scsi.scsi_SenseData = (UBYTE*) sense;
scsi.scsi_SenseLength = 20;
scsi.scsi_Command = cmd_eject;
DoIO(ior);
CloseDevice((struct IORequest*)ior);
}
DeleteIORequest((struct IORequest*)ior);
}
DeleteMsgPort(mp);
}
FreeArgs(rdargs);
}
else PrintFault(IoErr(),0);
return RETURN_OK;
}