home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio Version 4.94
/
audioversion4.94knowledgemediaresourcelibraryoctober1994.iso
/
amiga
/
midi
/
midilib.lzh
/
MIDILIB
/
EXAMPLES
/
HR.C
next >
Wrap
C/C++ Source or Header
|
1991-08-16
|
3KB
|
110 lines
/* hex receive from midi.library */
/*
display incoming MIDI messages in Hex to the console.
Shows proper method of waiting for, receiving, processing, and
disposing of MidiPackets.
*/
#include <libraries/dos.h>
#include <clib/macros.h>
#include <midi/midi.h>
#include <functions.h>
#include <stdio.h>
void *MidiBase;
struct MDest *dest;
struct MRoute *route;
struct MidiPacket *packet; /* buffer this in case we get shut down before freeing the current message */
main(argc,argv)
char **argv;
{
char *sname = "MidiIn";
printf ("MIDI Hex Display\n");
if (argc > 1 && *argv[1] == '?') {
printf ("usage: hr [source]\n");
exit (1);
}
if (!(MidiBase = OpenLibrary (MIDINAME,MIDIVERSION))) {
printf ("can't open midi.library\n");
goto clean;
}
if (argc > 1) { /* if there's an argument, use it as an alt. source name */
sname = argv[1];
}
/* create out dest node (private) */
if (!(dest = CreateMDest (NULL,NULL))) {
printf ("can't create Dest\n");
goto clean;
}
/* create out route to MidiIn or whatever the user specified */
if (!(route = MRouteDest (sname, dest, NULL))) { /* use default route on our MDest (defaults to everything) */
printf ("can't create Route (can't find source \"%s\"?)\n",sname);
goto clean;
}
process(dest); /* process until shutdown */
clean:
cleanup();
}
_abort() /* abort routine called when CTRL-C is hit (Aztec) */
{
fflush(stdout);
cleanup();
exit (1);
}
cleanup()
{
if (packet) FreeMidiPacket (packet);
if (route) DeleteMRoute (route);
if (dest) DeleteMDest (dest);
if (MidiBase) CloseLibrary (MidiBase);
}
process (dest)
struct MDest *dest;
{
ULONG flags = SIGBREAKF_CTRL_C | (1L << dest->DestPort->mp_SigBit);
while (!(Wait(flags) & SIGBREAKF_CTRL_C)) { /* wait until we get a message or CTRL-C is hit, quit on CTRL-C */
while (packet = GetMidiPacket (dest)) { /* get a packet */
dumppacket (packet); /* print it */
FreeMidiPacket (packet); /* free it */
}
}
}
dumppacket (packet)
struct MidiPacket *packet;
{
if (packet->Type == MMF_SYSEX) { /* if it's a System Exclusive message... */
dump (packet->MidiMsg,MIN(packet->Length,8)); /* only print the first 8 bytes */
printf ("... (%d bytes)\n",packet->Length);
}
else { /* otherwise */
dump (packet->MidiMsg,packet->Length); /* print the whole message */
printf ("\n");
}
}
dump (s,len) /* print len bytes in hex */
UBYTE *s;
int len;
{
while (len--) printf ("%02x ",*s++);
}