/*
 * GLIB - a Generic LIBrarian and editor for synths
 *
 * The E array is the list of synths that can be handled.
 * GLIB is completely driven from the stuff in the editinfo structure.
 * To add/delete a synth, just add/delete an entry to the E array,
 * and provide the functions.  The #defines at the top provide a
 * convenient way of including/excluding synths that are already
 * supported.
 */

#ifdef KAWAIK1
#define K1multi
#define K1single
#define PATDATAID 0xf1
#define TONDATAID 0xf3
#endif

#ifdef ROLANDD10
#define D10pat
#define D10tim
#define D10wfg
#define D10tvf
#define D10tva
#define D10rsu
#define D10urp
#define D10tra
#define PATDATAID 0xf1
#define TIMDATAID 0xf2
#define TONDATAID 0xf3
#define RSUDATAID 0xf4
#define URPDATAID 0xf5
#define TRADATAID 0xf6
#endif

#include "glib.h"

#ifdef DX100
extern dxtxdin(), dxtxdout(), dx1snof(), dx1sbulk(), dx1gbulk(), dx1sedit();
extern char *dx1nof();
extern struct paraminfo Pdx100[];
extern struct labelinfo Ldx100[];
#endif

#ifdef TX81Z
extern dxtxdin(), dxtxdout(), dx1snof(), dx1sbulk(), dx1gbulk(), dx1sedit();
extern char *dx1nof();
extern struct paraminfo Ptx81z[];
extern struct labelinfo Ltx81z[];
#endif

#ifdef TX81ZPERF
extern tx8pdin(), tx8pdout(), tx8psedit(), tx8psbulk(), tx8pgbulk(), tx8psnof();
extern char *tx8pnof();
extern struct paraminfo Ptx81p[];
extern struct labelinfo Ltx81p[];
#endif

#ifdef DEP5
extern struct paraminfo Pdep5[];
extern struct labelinfo Ldep5[];
extern dep5din(), dep5dout(), dep5snof(), dep5sone(), dep5sedit();
extern char *dep5nof();
#endif

#ifdef DW8000
extern struct paraminfo Pdw800[];
extern struct labelinfo Ldw800[];
extern dw8din(), dw8dout(), dw8snof(), dw8sone(), dw8gbulk();
extern dw8numv(), dw8sedit();
extern char *dw8nof(), *dw8vnum();
#endif

#ifdef KAWAIK5
extern struct paraminfo Pk5sin[], Pk5mul[];
extern struct labelinfo Lk5sin[], Lk5mul[];
extern k5sindin(), k5sindout(), k5sinsnof(), k5sinsone();
extern k5muldin(), k5muldout(), k5mulsnof(), k5mulsone();
extern k5sinsbulk(), k5mulsbulk();
extern k5numv(), k5sinsedit(), k5mulsedit(), k5singbulk(), k5mulgbulk();
extern char *k5sinnof(), *k5mulnof(), *k5vnum();
#endif

#ifdef D10pat
extern struct paraminfo Pd10pat[];
extern struct labelinfo Ld10pat[];
extern d10patdin(), d10patdout(), d10patsnof(), d10patsone(), d10patgbulk();
extern d10numpat(), d10patsedit(), d10patsbulk();
extern char *d10patnof(), *d10patnum();
#endif

#ifdef D10tim
extern struct paraminfo Pd10tim[];
extern struct labelinfo Ld10tim[];
extern d10timdin(), d10timdout(), d10timsnof(), d10timsone(), d10timgbulk();
extern d10numtim(), d10timsedit(), d10timsbulk();
extern char *d10timnof(), *d10timnum();
#endif

#ifdef D10wfg
extern struct paraminfo Pd10wfg[];
extern struct labelinfo Ld10wfg[];
extern d10wfgdin(), d10wfgdout(), d10tonsnof(), d10tonsone(), d10tongbulk();
extern d10numton(), d10tonsedit(), d10tonsbulk();
extern char *d10tonnof(), *d10tonnum();
#endif

#ifdef D10tvf
extern struct paraminfo Pd10tvf[];
extern struct labelinfo Ld10tvf[];
extern d10tvfdin(), d10tvfdout(), d10tonsnof(), d10tonsone(), d10tongbulk();
extern d10numton(), d10tonsedit(), d10tonsbulk();
extern char *d10tonnof(), *d10tonnum();
#endif

#ifdef D10tva
extern struct paraminfo Pd10tva[];
extern struct labelinfo Ld10tva[];
extern d10tvadin(), d10tvadout(), d10tonsnof(), d10tonsone(), d10tongbulk();
extern d10numton(), d10tonsedit(), d10tonsbulk();
extern char *d10tonnof(), *d10tonnum();
#endif

#ifdef D10rsu
extern struct paraminfo Pd10rsu[];
extern struct labelinfo Ld10rsu[];
extern d10rsudin(), d10rsudout(), d10rsusnof(), d10rsusone(), d10rsugbulk();
extern d10numrsu(), d10rsusedit(), d10rsusbulk();
extern char *d10rsunof(), *d10rsunum();
#endif

#ifdef D10urp
extern struct paraminfo Pd10urp[];
extern struct labelinfo Ld10urp[];
extern d10urpdin(), d10urpdout(), d10urpsnof(), d10urpsone(), d10urpgbulk();
extern d10numurp(), d10urpsedit(), d10urpsbulk();
extern char *d10urpnof(), *d10urpnum();
#endif

#ifdef D10tra
extern struct paraminfo Pd10tra[];
extern struct labelinfo Ld10tra[];
extern d10tradin(), d10tradout(), d10trasnof(), d10trasone(), d10tragbulk();
extern d10numtra(), d10trasedit(), d10trasbulk();
extern char *d10tranof(), *d10tranum();
#endif

#ifdef K1multi
extern struct paraminfo Pk1mlt[];
extern struct labelinfo Lk1mlt[];
extern k1mltdin(), k1mltdout(), k1mltsnof(), k1mltsone(), k1mltgbulk();
extern k1nummlt(), k1mltsedit(), k1mltsbulk();
extern char *k1mltnof(), *k1mltnum();
#endif

#ifdef K1single
extern struct paraminfo Pk1sng[];
extern struct labelinfo Lk1sng[];
extern k1sngdin(), k1sngdout();
#ifndef K1multi
extern k1mltsnof(), k1mltsone(), k1mltgbulk();
extern k1nummlt(), k1mltsedit(), k1mltsbulk();
extern char *k1mltnof(), *k1mltnum();
#endif
#endif



struct editinfo E[] = {

#ifdef DX100
   {"DX-100", Pdx100, Ldx100, 24, 128, 17, 0xdd,
	dxtxdin, dxtxdout, dx1sedit, NULL, dx1sbulk, dx1gbulk, dx1nof, dx1snof,
	NULL, NULL, NULL},
#endif
#ifdef DEP5
   {"DEP-5", Pdep5, Ldep5, 99, 42, 16, 0xdd,
	dep5din, dep5dout, dep5sedit, dep5sone, NULL, NULL, dep5nof, dep5snof,
	NULL, NULL, NULL},
#endif
#ifdef TX81Z
   {"TX81Z", Ptx81z, Ltx81z, 32, 128, 17, 0xdd,
	dxtxdin, dxtxdout, dx1sedit, NULL, dx1sbulk, dx1gbulk, dx1nof, dx1snof,
	NULL, NULL, NULL},
#endif
#ifdef TX81ZPERF
   {"TX81Z Performance", Ptx81p, Ltx81p, 24, 76, 17, 0xdd,
	tx8pdin, tx8pdout, tx8psedit, NULL, tx8psbulk, tx8pgbulk, tx8pnof,
	tx8psnof, NULL, NULL, NULL},
#endif
#ifdef DW8000
   {"DW8000", Pdw800, Ldw800, 64, 72, 17, 0xdd,
	dw8din, dw8dout, dw8sedit, dw8sone, NULL, dw8gbulk, dw8nof, dw8snof,
	dw8vnum, dw8numv, NULL},
#endif
#ifdef KAWAIK5
   {"K-5 Single", Pk5sin, Lk5sin, 48, 984, 8, 0xdd,
	k5sindin, k5sindout, k5sinsedit, k5sinsone, k5sinsbulk, k5singbulk,
	k5sinnof, k5sinsnof, k5vnum, NULL, k5numv},
   {"K-5 Multi", Pk5mul, Lk5mul, 48, 352, 8, 0xdd,
	k5muldin, k5muldout, k5mulsedit, k5mulsone, k5mulsbulk, k5mulgbulk,
	k5mulnof, k5mulsnof, k5vnum, NULL, k5numv},
#endif
#ifdef D10pat
   {"Patches ", Pd10pat, Ld10pat, 128, 58, 16, PATDATAID,
	d10patdin, d10patdout, d10patsedit, d10patsone, d10patsbulk,
	d10patgbulk, d10patnof, d10patsnof, d10patnum, d10numpat, NULL},
#endif

#ifdef D10tim
   {"Timbres ", Pd10tim, Ld10tim, 128, 28, 1, TIMDATAID,
	d10timdin, d10timdout, d10timsedit, d10timsone, d10timsbulk,
	d10timgbulk, d10timnof, d10timsnof, d10timnum, d10numtim, NULL},
#endif

#ifdef D10wfg
   {"Tone WFG's", Pd10wfg, Ld10wfg, 64, 266, 10, TONDATAID,
	d10wfgdin, d10wfgdout, d10tonsedit, d10tonsone, d10tonsbulk,
	d10tongbulk, d10tonnof, d10tonsnof, d10tonnum, d10numton, NULL},
#endif

#ifdef D10tvf
   {"Tone TVF's", Pd10tvf, Ld10tvf, 64, 266, 10, TONDATAID,
	d10tvfdin, d10tvfdout, d10tonsedit, d10tonsone, d10tonsbulk,
	d10tongbulk, d10tonnof, d10tonsnof, d10tonnum, d10numton, NULL},
#endif

#ifdef D10tva
   {"Tone TVA's ", Pd10tva, Ld10tva, 64, 266, 10, TONDATAID,
	d10tvadin, d10tvadout, d10tonsedit, d10tonsone, d10tonsbulk,
	d10tongbulk, d10tonnof, d10tonsnof, d10tonnum, d10numton, NULL},
#endif

#ifdef D10rsu
   {"Rhythm Setup ", Pd10rsu, Ld10rsu, 85, 24, 1, RSUDATAID,
	d10rsudin, d10rsudout, d10rsusedit, d10rsusone, d10rsusbulk,
	d10rsugbulk, d10rsunof, d10rsusnof, d10rsunum, d10numrsu, NULL},
#endif

#ifdef D10urp
   {"Rhythm Patterns ", Pd10urp, Ld10urp, 32, 608, 1, URPDATAID,
	d10urpdin, d10urpdout, d10urpsedit, d10urpsone, d10urpsbulk,
	d10urpgbulk, d10urpnof, d10urpsnof, d10urpnum, d10numurp, NULL},
#endif

#ifdef D10tra
   {"Rhythm Track ", Pd10tra, Ld10tra, 1, 522, 1, TRADATAID,
	d10tradin, d10tradout, d10trasedit, d10trasone, d10trasbulk,
	d10tragbulk, d10tranof, d10trasnof, d10tranum, d10numtra, NULL},
#endif

#ifdef K1multi
   {"Multi Patches", Pk1mlt, Lk1mlt, 32, 75, 10, PATDATAID,
	k1mltdin, k1mltdout, k1mltsedit, k1mltsone, k1mltsbulk,
	k1mltgbulk, k1mltnof, k1mltsnof, k1mltnum, NULL, k1nummlt},
#endif

#ifdef K1single
   {"Single Patches", Pk1sng, Lk1sng, 64, 87, 10, TONDATAID,
	k1sngdin, k1sngdout, k1mltsedit, k1mltsone, k1mltsbulk,
	k1mltgbulk, k1mltnof, k1mltsnof, k1mltnum, NULL, k1nummlt},
#endif

   {NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
};
