home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
sound
/
midi
/
midilb20.lha
/
ht.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-10-23
|
2KB
|
77 lines
/* simplified Hex Transmit to midi */
/*
Shows usage of PutMidiStream() when buffer size is known and of managable
size.
*/
#include <midi/midi.h>
#include <functions.h>
void *MidiBase;
main (argc,argv)
char **argv;
{
struct MSource *source=0;
struct MRoute *route=0;
char buf[128]; /* buffer used for midi transfer */
long len;
extern int Enable_Abort;
Enable_Abort = 0; /* disable auto CTRL-C termination */
if (argc < 2) {
printf ("MIDI Hex Transmit\n");
printf ("usage: ht <hex byte>...\n");
exit (1);
}
if (!(MidiBase = OpenLibrary (MIDINAME,MIDIVERSION))) {
printf ("can't open midi.library\n");
goto clean;
}
/* create our Source node (private) */
if (!(source = CreateMSource (NULL,NULL))) {
printf ("can't create Source\n");
goto clean;
}
/* create out Route to MidiOut */
if (!(route = MRouteSource (source, "MidiOut", NULL))) { /* use default RouteInfo in MidiOut */
printf ("can't create Route (can't find MidiOut?)\n");
goto clean;
}
/* parse the command line for hex bytes, make into an array */
len = makestream (buf,argc-1,argv+1);
/* convert array to midi messages and send */
PutMidiStream (source,NULL,buf,len,len);
clean: /* clean up */
if (route) DeleteMRoute (route);
if (source) DeleteMSource (source);
if (MidiBase) CloseLibrary (MidiBase);
}
makestream (buf,argc,argv) /* convert args into an array of bytes, return length */
char *buf;
char **argv;
{
int len=0;
while (argc--) {
*buf++ = atox(*argv++);
len++;
}
return len;
}
atox(cp) /* like atoi() but read string as hex rather than decimal */
char *cp;
{
int x;
sscanf (cp,"%x",&x);
return x;
}