RCS_ID_C "$Id: beep.c,v 1.5 1993/07/12 22:50:24 ppessi Exp $";
/* Most of this was stolen from the "beep" program from the Manx 3.6a
 * distribution.
 * 
 * $Author: ppessi $ $Revision: 1.5 $ $Date: 1993/07/12 22:50:24 $
*/

#include "amiga.h"
#include "display.h"

#include <devices/audio.h>

UBYTE allocmap[] = { 1, 8, 2, 4 };
UBYTE bwave[] = { 69, 116, 126, 96, 36, 220, 160, 130, 140, 0 };

void
audiobell()
{
    struct MsgPort *mp = NULL;
    struct IOAudio *ar = NULL;
    UBYTE *wave = NULL;

    if(!(mp = CreateMsgPort()) ||
       !(wave = (UBYTE *)AllocMem(10, MEMF_CHIP)) ||
       !(ar = (struct IOAudio *)CreateIORequest(mp, sizeof(*ar)))) {
        dsinvert(VISUAL_BELL);
	goto CleanReturn;
    }
    strcpy(wave, bwave);
    ar->ioa_Request.io_Message.mn_Node.ln_Pri = 20;
    ar->ioa_Data = allocmap;
    ar->ioa_Length = sizeof(allocmap);
    if(OpenDevice(AUDIONAME, 0, (struct IORequest *)ar, 0) == 0) {
        ar->ioa_Request.io_Command = CMD_WRITE;
	ar->ioa_Request.io_Flags = ADIOF_PERVOL;
	ar->ioa_Data = wave;
        ar->ioa_Length = 10;
	ar->ioa_Period = 421;
        ar->ioa_Volume = 64;
	ar->ioa_Cycles = 100;

	BeginIO((struct IORequest *)ar);
	WaitIO((struct IORequest *)ar);
	CloseDevice((struct IORequest *)ar);
    } else dsinvert(VISUAL_BELL);

 CleanReturn:
    if (wave) FreeMem(wave, 10);
    if (ar) DeleteIORequest((struct IORequest *)ar);
    if (mp) DeleteMsgPort(mp);
}


