ahi.device For Low-level Access
Not too hard. Just open ahi.device unit AHI_NO_UNIT and
initialize AHIBase. After that you can access all the functions of
the device just as if you had opened a standard shared library.
Assembler
For the assembler programmer there are two handy macros: OPENAHI
and CLOSEAHI. Here is a small example how to use them:
OPENAHI 4 ;Open at least version 4.
lea _AHIBase(pc),a0
move.l d0,(a0)
beq error
; AHI's functions can now be called as normal library functions:
move.l _AHIBase(pc),a6
moveq #AHI_INVALID_ID,d0
jsr _LVOAHI_NextAudioID(a6)
error:
CLOSEAHI
rts
Note that you have to execute the CLOSEAHI macro even if
OPENAHI failed!
CFor the C programmer, here is how it should be done:
struct Library *AHIBase;
struct MsgPort *AHImp=NULL;
struct AHIRequest *AHIio=NULL;
BYTE AHIDevice=-1;
if(AHImp = CreateMsgPort())
{
if(AHIio = (struct AHIRequest *) CreateIORequest(
AHImp, sizeof(struct AHIRequest)))
{
AHIio->ahir_Version = 4; /* Open at least version 4. */
if(!(AHIDevice = OpenDevice(AHINAME, AHI_NO_UNIT,
(struct IORequest *) AHIio, NULL)))
{
AHIBase = (struct Library *) AHIio->ahir_Std.io_Device;
// AHI's functions can now be called as normal library functions:
AHI_NextAudioID(AHI_INVALID_ID);
CloseDevice((struct IORequest *) AHIio);
AHIDevice = -1;
}
DeleteIORequest((struct IORequest *) AHIio);
AHIio = NULL;
}
DeleteMsgPort(AHImp);
AHImp = NULL;
}
Go to the first, previous, next, last section, table of contents.