/* CZGET.C

	Program zum einlesen von Sounddaten
	von Casio CZ-Synthesizern über die
	Midi-Schnittstelle

	Written by O.Wagner
	(C) 1988 Kickstart

	Version für Aztec C 3.4 oder 3.6
	CC czget
	CC midi
	LN czget.o midi.o -lc

*/

#include "midi.h"
#include <libraries/dos.h>

/* Send-Request 1 */
static unsigned char sr1[] = {
 BSYSTEM_EXCLUSIVE,ID_CASIO,
 0x00,0x00,
 0x6f, /* Channel */
 0x10,
 0x00 /* Sound-Nr */
};
static unsigned char buff[256];

main(argc,argv)
register int argc;
char **argv;
{
 register int ch=1,sn=96,c;
 register long *f,*Open();

 puts("\x9b1mCASIO CZ-SERIES SOUND GET UTILITY  Written 1988 by O.Wagner\x9b0m");
 if(argc<2 || argc>4 || *argv[1]=='?') {
  puts("Usage: CZGET filename [midichannel(1-16,def 1) [soundnr(0-96,def 96)] ]\n\
Soundnr. assignment:\n\
CZ 101/1000 : 0-15 Preset / 32-47 Internal / 64-79 Cartridge / 96 Buffer\n\
CZ 5000		: 0-31 Preset / 32-63 Memory / 96 Buffer");
  exit(20);
 }
 if(argc>2) {
  if((ch=atoi(argv[2]))<1 || ch>16) {
	puts("Illegal Midi channel"); exit(20L);
  }
 }
 if(argc==4) {
  if((sn=atoi(argv[3]))<0 || sn>96) {
	puts("Illegal sound number"); exit(20L);
  }
 }
 if(midiopen()) {
  puts("Can't open serial device");
  exit(20); }
 sr1[4]+=ch;
 sr1[6]=sn;
/* Send	"SEND REQUEST 1" */
 midiwrite(sr1,7);
/* auf richtige antwort prüfen */
 if(midiget()!=BSYSTEM_EXCLUSIVE
 || midiget()!=ID_CASIO
 || midiget()
 || midiget()
 || midiget()!=0x6f+ch /* Channel */
 || midiget()!=0x30) {
	puts("Incorrect Request answer (perhaps wrong keyboard)");
	midiclose();
	exit(20);
 }
 midiput(0x6f+ch);
 midiput(0x31);
/* daten einlesen */
 for(c=0; c<256; c++) 
  buff[c]=midiget();
 END_OF_EXCLUSIVE;
 midiclose();
/* auf disk schreiben */
 if(!(f=Open(argv[1],MODE_NEWFILE))) {
  puts("Can't open file");
  exit(20);
 }
 Write(f,buff,256L);
 Close(f);
 exit(0);
}
