/*
	 CZPUT.C

	 Program zum senden von Sound-Daten
	 an Casio CZ Synthesizer.

	 Written by O.Wagner
	 (C) 1988 Kickstart

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

*/

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

unsigned char buff[256];
unsigned char rr1[] = {
 BSYSTEM_EXCLUSIVE,ID_CASIO,
 0x00,0x00,
 0x6f, /* channel */
 0x20,
 0x00
};

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

 puts("\x9b1mCASIO CZ-SERIES SOUND PUT UTILITY  Written 1988 by O.Wagner © Kickstart\x9b0m");
 if(argc<2 || argc>4 || *argv[1]=='?') {
  puts("Usage: CZPUT filename [midichannel(1-16,def 1) [soundnr(32-96,def 96)] ]\n\
Soundnr. assignment:\n\
CZ 101/1000 : 32-47 Internal / 64-79 Cartridge / 96 Buffer\n\
CZ 5000		: 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]))<32 || sn>96) {
	puts("Illegal sound number"); exit(20L);
  }
 }
 if(!(f=Open(argv[1],MODE_OLDFILE))) {
  puts("Can't open file"); exit(20);
 }
 Read(f,buff,256L);
 Close(f);
 if(midiopen()) {
  puts("Can't open file");
  exit(20);
 }
 rr1[4]+=ch; /* channel */
 rr1[6]=sn; /* sound nr */
/* Send	"RECEIVE REQUEST 1" */
 midiwrite(rr1,7);
/* auf korrekte antwort prüfen */
 if(midiget()!=BSYSTEM_EXCLUSIVE
 || midiget()!=ID_CASIO
 || midiget()
 || midiget()
 || midiget()!=0x6f+ch
 || midiget()!=0x30) {
	puts("Incorrect Request answer (perhaps wrong keyboard)");
	midiclose(); exit(20);
 }
/* daten senden data */
 midiwrite(buff,256);
/* end of transmission */
 END_OF_EXCLUSIVE;
 midiclose();
 exit(0);
}

