allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (05/15/89)
Posting-number: Volume 6, Issue 105 Submitted-by: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee ) Archive-name: glib/part04 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 4 (of 15)." # Contents: d10pat.mnu d10tim.mnu glib.man glibinit.dp5 list.c # Wrapped by lee@uhccux on Sun May 7 00:40:11 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'd10pat.mnu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'d10pat.mnu'\" else echo shar: Extracting \"'d10pat.mnu'\" \(10002 characters\) sed "s/^X//" >'d10pat.mnu' <<'END_OF_FILE' X/* $Id: d10pat.mnu,v 1.6 89/05/06 17:13:14 lee Exp $ X * GLIB - a Generic LIBrarian and editor for synths X * X * D10 Patch Librarian X * X * Code started 19 JAN 89 -- Michael R. Kesti mrk@gvgspd.GVG.TEK.COM X * modified by Greg Lee X * $Log: d10pat.mnu,v $ X * Revision 1.6 89/05/06 17:13:14 lee X * rel. to comp.sources.misc X * X */ X X#include "glib.h" X#include "vis.h" X X#define D10PATSIZE 38 X#define PATBASEADDR 0x070000 X#define RESERVESIZE 20 X Xchar *visnum(), *visonoff(); X X X/* This array contains arbitrary screen labels */ Xstruct labelinfo Ldpat[] = { X#MENU X X X Reverb Type % X Reverb Time % X Reverb Level % X X Patch Level % X X Key Mode % X Split Point % X X X LOWER UPPER X ----- ----- X Tone Select %% %% X Key Shift % % X Fine Tune % % X Bender Range % % X Assign Mode % % X Reverb Switch % % X Tone Balance % X X X Press SPACE BAR to sound note % at volume % for duration % on channel % . X#END X-1,-1,NULL X}; X Xstruct paraminfo Pdpat[] = { X/* XNAME TYPE POS MAX OFFSET MASK SHIFT ADHOC X */ X#O reverbtype reverbtype %% 8 16 X#O reverbtime reverbtime %% 7 17 X#O reverblevel reverblevel %% 7 18 X#O patchlevel patchlevel %% 100 20 X#O keymode keymode %% 2 0 X#O splitpoint split %% 61 1 X#O ltonegroup tonegroup %% 3 2 X#O ltonenum tonenum %% 63 3 X#O utonegroup tonegroup %% 3 4 X#O utonenum tonenum %% 63 5 X#O lkeyshift keyshift %% 48 6 X#O ukeyshift keyshift %% 48 7 X#O lfinetune finetune %% 100 8 X#O ufinetune finetune %% 100 9 X#O lbendrange bendrange %% 24 10 X#O ubendrange bendrange %% 24 11 X#O lassignmode assignmode %% 3 12 X#O uassignmode assignmode %% 3 13 X#O lreverbsw onoff %% 1 14 X#O ureverbsw onoff %% 1 15 X#O tonebal tonebal %% 100 19 X#O autopitch num %% 127 -60 X#O autovol num %% 127 -63 X#O autodur num %% 20 -5 *5 X#O autochan num %% 16 -1 *5 XNULL,NULL,-1,-1,-1,-1,visnum,0,0,0,0 X}; X X/* X * dpatnum X * X * Convert a voice number (0 to 127) to the string displayed in the X * librarian (ie. 011 to 188). X */ X Xchar * Xdpatnum(n) X{ X static char v[4]; X X if ( n < 0 || n > 188 ) X return("???"); X X if(n < 64) { X v[0] = '0'; X } else { X v[0] = '1'; X n -= 64; X } X v[1] = n/8 + '1'; X v[2] = n%8 + '1'; X v[3] = '\0'; X return(v); X} X X/* X * dnumpat X * X * Convert a display-style voice number (011 to 188) to internal X * format (0 to 127). X */ X Xdnumpat(n) Xint n; X{ X int ld, md, rd; X X /* crack out the digits as octal codes */ X ld = (n / 100); /* left digit */ X n %= 100; X md = (n / 10) - 1; /* middle digit */ X rd = (n % 10) - 1; /* right digit */ X X if(ld < 0 || ld > 1 || md < 0 || md > 7 || rd < 0 || rd > 7) { X return(-1); X } else { X return((ld * 64) + (md * 8) + rd); /* combine as octal */ X } X} X X/* X * dpatdin X * X * Take library bank 'data' and stuff values in the P array, by using X * the setval function. X */ X Xdpatdin(data) Xchar *data; X{ X /* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */ X#SETVAL X} X X/* X * dpatdout X * X * Take (possibly changed) parameters values out of the P array and X * put them back into the library bank 'data'. X */ X Xdpatdout(data) Xchar *data; X{ X#GETVAL X} X X/* X * dpatsedit X * X * Send a single voice to the edit buffer of the D10. This will be whatever X * voice is currently selected. X */ X Xdpatsedit(data) Xchar *data; X{ X int n; X int cksum; X X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X sendmidi(0x03); /* address msb */ X cksum = 0x03; X sendmidi(0x04); X cksum += 0x04; X sendmidi(0x00); /* address lsb */ X cksum += 0x00; X for(n = 0; n < D10PATSIZE; n++) { X sendmidi(data[n + RESERVESIZE] & 0x7f); X cksum += data[n + RESERVESIZE] & 0x7f; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X} X X/* X * dpatnof X * X * Return a pointer to the voice name buried in library bank data. X */ Xchar * Xdpatnof(data) Xchar *data; X{ X static char currbuff[17]; X char *p; X int m; X X p = currbuff; X for ( m = 0 ; m < 16 ; m++ ) X *p++ = data[m + 41]; X *p = '\0'; X return(currbuff); X} X X/* X * dpatsnof X * X * Set the voice name buried in data to name. X */ Xdpatsnof(data,name) Xchar *data; Xchar *name; X{ X char *p; X int m; X X for ( p = name, m = 0 ; *p != '\0' && m < 16 ; p++, m++ ) X data[m + 41] = *p; X for ( ; m < 16 ; m++ ) X data[m + 41] = ' '; X} X X/* dpatsone - send a single voice to the D10 */ Xdpatsone(iv, data) Xint iv; Xchar *data; X{ X int n; X int cksum; X long curadd; X int addbyte; X X curadd = PATBASEADDR; X X for(n = 0; n < iv; n++) { X curadd += D10PATSIZE; X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X } X X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X for(n = 0; n < D10PATSIZE; n++) { X sendmidi(data[n + RESERVESIZE] & 0x7f); X cksum += data[n + RESERVESIZE] & 0x7f; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X return(0); X} X X/* dpatgbulk - Request and read a bulk dump from the D10 */ Xdpatgbulk(data) Xchar *data; X{ X static char Buff[BUFSIZ]; X int n, v, b2, ret = 1; X long begin, toolong; X long curadd; X int addbyte; X int cksum; X X sprintf(Buff,"\nA: "); X windstr(Buff); X X curadd = PATBASEADDR; X X for(v = 0; v < Nvoices; v++) { X X flushmidi(); X X if(v == 64) { X sprintf(Buff,"\nB: "); X windstr(Buff); X } X if((((v > 63) ? (v - 64) : v) % 10) != 0) { X sprintf(Buff, "."); X } else { X sprintf(Buff,"%d", (((v > 63) ? (v - 64) : v) / 10)); X } X windstr(Buff); X X /* request the voice */ X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x11); /* RQ1 - Data request 1 command */ X X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X X sendmidi(0x00); /* length msb */ X cksum += 0x00; X sendmidi(0x00); X cksum += 0x00; X sendmidi(D10PATSIZE); /* length lsb */ X cksum += D10PATSIZE; X X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X /* set up timeout */ X begin = milliclock(); X toolong = begin + (1000 * TIMEOUT); X X /* read header */ X for(n = 0; n < 8; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout waiting for header"; X goto getout; X } X } X } X X /* read data */ X for(n = 0; n < D10PATSIZE; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) { X VOICEBYTE(data,v,n + RESERVESIZE) = b2; X n++; X } X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading data"; X goto timeout; X } X } X } X X timeout: X if ( n != D10PATSIZE ) { X Reason = "Timeout reading data!"; X goto getout; X } X X /* read checksum */ X for(n = 0; n < 1; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading checksum"; X goto getout; X } X } X } X X /* read EOX */ X for(n = 0; n < 1; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X if ( b2 != EOX ) { X sprintf(Buff,"EOX not received (%X)\n", b2); X Reason = Buff; X goto getout; X } X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading EOX"; X goto getout; X } X } X } X X curadd += D10PATSIZE; X X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X X } /* go back for another voice */ X X Reason = ""; X ret = 0; /* all's well */ X Xgetout: X return(ret); X} X X/* dpatsbulk - send a bulk dump to the D10 */ Xdpatsbulk(data) Xchar *data; X{ X static char Buff[BUFSIZ]; X int v, n; X int cksum; X long curadd; X int addbyte, databyte; X int curoff; X X curadd = PATBASEADDR; X curoff = 0; X sprintf(Buff,"\nA: "); X windstr(Buff); X X for(v = 0; v <Nvoices ; v++) { X if(v == 64) { X sprintf(Buff,"\nB: "); X windstr(Buff); X } X if((((v > 63) ? (v - 64) : v) % 10) != 0) { X sprintf(Buff, "."); X } else { X sprintf(Buff,"%d", (((v > 63) ? (v - 64) : v) / 10)); X } X X windstr(Buff); X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X X for(n = 0; n < D10PATSIZE; n++) { X databyte = data[curoff + n + RESERVESIZE] & 0x7f; X sendmidi(databyte); X cksum += databyte; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X curadd += D10PATSIZE; X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X curoff += (D10PATSIZE + RESERVESIZE); X } X return(0); X} X X/* end */ END_OF_FILE if test 10002 -ne `wc -c <'d10pat.mnu'`; then echo shar: \"'d10pat.mnu'\" unpacked with wrong size! fi # end of 'd10pat.mnu' fi if test -f 'd10tim.mnu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'d10tim.mnu'\" else echo shar: Extracting \"'d10tim.mnu'\" \(9098 characters\) sed "s/^X//" >'d10tim.mnu' <<'END_OF_FILE' X/* $Id: d10tim.mnu,v 1.6 89/05/06 17:13:16 lee Exp $ X * GLIB - a Generic LIBrarian and editor for synths X * X * D10 Timbre Librarian X * X * Code started 23 JAN 89 -- Michael R. Kesti mrk@gvgspd.GVG.TEK.COM X * modified by Greg Lee X * $Log: d10tim.mnu,v $ X * Revision 1.6 89/05/06 17:13:16 lee X * rel. to comp.sources.misc X * X */ X X#include "glib.h" X#include "vis.h" X X#define D10TIMSIZE 8 X#define TIMBASEADDR 0x050000 X#define RESERVESIZE 20 X Xchar *visnum(), *visonoff(); X X/* This array contains arbitrary screen labels */ Xstruct labelinfo Ldtim[] = { X#MENU X X X X X X X X X Tone Select %% X Key Shift % X Fine Tune % X Bender Range % X Assign Mode % X Reverb Switch % X X X X X X X X X X Press SPACE BAR to sound note % at volume % for duration % on channel % . X#END X-1,-1,NULL X}; X Xstruct paraminfo Pdtim[] = { X/* XNAME TYPE POS MAX OFFSET MASK SHIFT ADHOC X */ X#O tonegroup tonegroup %% 3 0 X#O tonenum tonenum %% 63 1 X#O keyshift keyshift %% 48 2 X#O finetune finetune %% 100 3 X#O bendrange bendrange %% 24 4 X#O assignmode assignmode %% 3 5 X#O reverbsw onoff %% 1 6 X#O autopitch num %% 127 -60 X#O autovol num %% 127 -63 X#O autodur num %% 20 -5 *5 X#O autochan num %% 16 -1 *5 XNULL,NULL,-1,-1,-1,-1,visnum,0,0,0,0 X}; X X/* X * dtimnum X * X * Convert a voice number (0 to 127) to the string displayed in the X * librarian (ie. 011 to 188). X */ X Xchar * Xdtimnum(n) X{ X static char v[4]; X X if ( n < 0 || n > 188 ) X return("???"); X X if(n < 64) { X v[0] = '0'; X } else { X v[0] = '1'; X n -= 64; X } X v[1] = n/8 + '1'; X v[2] = n%8 + '1'; X v[3] = '\0'; X return(v); X} X X/* X * dnumtim X * X * Convert a display-style voice number (011 to 188) to internal X * format (0 to 127). X */ X Xdnumtim(n) Xint n; X{ X int ld, md, rd; X X /* crack out the digits as octal codes */ X ld = (n / 100); /* left digit */ X n %= 100; X md = (n / 10) - 1; /* middle digit */ X rd = (n % 10) - 1; /* right digit */ X X if(ld < 0 || ld > 1 || md < 0 || md > 7 || rd < 0 || rd > 7) { X return(-1); X } else { X return((ld * 64) + (md * 8) + rd); /* combine as octal */ X } X} X X/* X * dtimdin X * X * Take library bank 'data' and stuff values in the P array, by using X * the setval function. X */ X Xdtimdin(data) Xchar *data; X{ X /* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */ X#SETVAL X} X X/* X * dtimdout X * X * Take (possibly changed) parameters values out of the P array and X * put them back into the library bank 'data'. X */ X Xdtimdout(data) Xchar *data; X{ X#GETVAL X} X X/* X * dtimsedit X * X * Send a single voice to the edit buffer of the D10. This will be whatever X * voice is currently selected. X */ X Xdtimsedit(data) Xchar *data; X{ X int n; X int cksum; X X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X sendmidi(0x03); /* address msb */ X cksum = 0x03; X sendmidi(0x00); X cksum += 0x00; X sendmidi(0x00); /* address lsb */ X cksum += 0x00; X for(n = 0; n < D10TIMSIZE; n++) { X sendmidi(data[n + RESERVESIZE] & 0x7f); X cksum += data[n + RESERVESIZE] & 0x7f; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X} X X/* X * dtimnof X * X * Return a pointer to the voice name buried in library bank data. X */ Xchar * Xdtimnof(data) Xchar *data; X{ X X static char buf[4]; X int n; X X for(n = 0; n < D10TIMSIZE; n++) X if ( data[n + RESERVESIZE] != 0 ) break; X if ( n != D10TIMSIZE ) { X strcpy(buf, vistonegroup(data[RESERVESIZE + 0])); X strcat(buf, vistonenum(data[RESERVESIZE + 1])); X } else X strcpy(buf, " "); X X return(buf); X} X X/* X * dtimsnof X * X * Set the voice name buried in data to name. X */ Xdtimsnof(data,name) Xchar *data; Xchar *name; X{ X} X X/* dtimsone - send a single voice to the D10 */ Xdtimsone(iv, data) Xint iv; Xchar *data; X{ X int n; X int cksum; X long curadd; X int addbyte; X X curadd = TIMBASEADDR; X X for(n = 0; n < iv; n++) { X curadd += D10TIMSIZE; X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X } X X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X for(n = 0; n < D10TIMSIZE; n++) { X sendmidi(data[n + RESERVESIZE] & 0x7f); X cksum += data[n + RESERVESIZE] & 0x7f; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X return(0); X} X X/* dtimgbulk - Request and read a bulk dump from the D10 */ Xdtimgbulk(data) Xchar *data; X{ X static char Buff[BUFSIZ]; X int n, v, b2, ret = 1; X long begin, toolong; X long curadd; X int addbyte; X int cksum; X X sprintf(Buff,"\nA: "); X windstr(Buff); X X curadd = TIMBASEADDR; X X for(v = 0; v < Nvoices; v++) { X X flushmidi(); X X if(v == 64) { X sprintf(Buff,"\nB: "); X windstr(Buff); X } X if((((v > 63) ? (v - 64) : v) % 10) != 0) { X sprintf(Buff, "."); X } else { X sprintf(Buff,"%d", (((v > 63) ? (v - 64) : v) / 10)); X } X windstr(Buff); X X /* request the voice */ X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x11); /* RQ1 - Data request 1 command */ X X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X X sendmidi(0x00); /* length msb */ X cksum += 0x00; X sendmidi(0x00); X cksum += 0x00; X sendmidi(D10TIMSIZE); /* length lsb */ X cksum += D10TIMSIZE; X X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X /* set up timeout */ X begin = milliclock(); X toolong = begin + (1000 * TIMEOUT); X X /* read header */ X for(n = 0; n < 8; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout waiting for header"; X goto getout; X } X } X } X X /* read data */ X for(n = 0; n < D10TIMSIZE; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) { X VOICEBYTE(data,v,n + RESERVESIZE) = b2; X n++; X } X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading data"; X goto timeout; X } X } X } X X timeout: X if ( n != D10TIMSIZE ) { X Reason = "Timeout reading data!"; X goto getout; X } X X /* read checksum */ X for(n = 0; n < 1; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading checksum"; X goto getout; X } X } X } X X /* read EOX */ X for(n = 0; n < 1; ) { X if ( STATMIDI ) { X b2 = (getmidi() & 0xff); X /* burn active sensing and timing clock */ X if((b2 != 0xfe) && (b2 != 0xf8)) X if ( b2 != EOX ) { X sprintf(Buff,"EOX not received (%X)\n", b2); X Reason = Buff; X goto getout; X } X n++; X } else { X if ( milliclock() > toolong ) { X Reason = "Timeout reading EOX"; X goto getout; X } X } X } X curadd += D10TIMSIZE; X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X X X } /* go back for another voice */ X X Reason = ""; X ret = 0; /* all's well */ X Xgetout: X return(ret); X} X X/* dtimsbulk - send a bulk dump to the D10 */ Xdtimsbulk(data) Xchar *data; X{ X static char Buff[BUFSIZ]; X int v, n; X int cksum; X long curadd; X int addbyte, databyte; X int curoff; X X curadd = TIMBASEADDR; X curoff = 0; X sprintf(Buff,"\nA: "); X windstr(Buff); X X for(v = 0; v <Nvoices ; v++) { X if(v == 64) { X sprintf(Buff,"\nB: "); X windstr(Buff); X } X if((((v > 63) ? (v - 64) : v) % 10) != 0) { X sprintf(Buff, "."); X } else { X sprintf(Buff,"%d", (((v > 63) ? (v - 64) : v) / 10)); X } X X windstr(Buff); X sendmidi(0xf0); X sendmidi(0x41); X sendmidi(0x10); X sendmidi(0x16); X sendmidi(0x12); /* DT1 - Data set 1 command */ X addbyte = ((curadd >> 16) & 0x7f); /* address msb */ X sendmidi(addbyte); X cksum = addbyte; X addbyte = ((curadd >> 8) & 0x7f); X sendmidi(addbyte); X cksum += addbyte; X addbyte = (curadd & 0x7f); /* address lsb */ X sendmidi(addbyte); X cksum += addbyte; X X for(n = 0; n < D10TIMSIZE; n++) { X databyte = data[curoff + n + RESERVESIZE] & 0x7f; X sendmidi(databyte); X cksum += databyte; X } X sendmidi((-cksum) & 0x7f); /* checksum */ X sendmidi(EOX); X X curadd += D10TIMSIZE; X if((curadd & 0x80) != 0) { X curadd &= 0x7fff7f; X curadd += 0x100; X } X if((curadd & 0x8000) != 0) { X curadd &= 0x7f7f7f; X curadd += 0x10000; X } X curoff += (D10TIMSIZE + RESERVESIZE); X } X return(0); X} X X/* end */ END_OF_FILE if test 9098 -ne `wc -c <'d10tim.mnu'`; then echo shar: \"'d10tim.mnu'\" unpacked with wrong size! fi # end of 'd10tim.mnu' fi if test -f 'glib.man' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'glib.man'\" else echo shar: Extracting \"'glib.man'\" \(8556 characters\) sed "s/^X//" >'glib.man' <<'END_OF_FILE' X X GLIB(1) LOCAL X X X XNAME X glib - patch editor and librarian for synthesizers X XSYNOPSIS X glib X XDESCRIPTION X Glib (one syllable) is a text-screen-oriented librarian and patch X editor for electronic synthesizers. It is structured in an attempt X to make it easy to add support for new synthesizers. Glib presents X three types of menu screens: synthesizer selection, patch X librarian, and patch editor. However, depending on choices made X when glib was compiled, there may be no synthesizer selection menu, X or it may be used to select different sub-parts of a single synth, X rather than among different synths. From the outermost selection X menu you descend to the librarian. If there is no synth selection X menu, you see the librarian screen immediately after invoking glib. X X The librarian part of the program manipulates 1 synth bank of X voices (which can be uploaded to or downloaded from the synth), and X 3 banks of library voices (which can be read/written to disk). X When you exit the librarian and select a different synth, the X contents of the library banks and other settings (e.g. midi X channel) for each are retained. X X From the librarian screen you can descend to the patch editor X screen to change or create an individual patch for a given X synthesizer. Details about using the librarian and the patch X editor are given below. X X The glib distribution includes support files for various PCs -- X IBM, Atari ST, Macintosh, Amiga. And you can run glib on Unix (it X uses curses), although obviously most Unix machines don't have midi X I/O. Trying it out on Unix will give you a feel for what the X program does, so you can decide whether or not it's worth the X trouble to port it to your midi-capable PC. Or your could edit X patch files on a Unix system and download them to a PC. X X The current version of glib, version 1.6, supports the X synthesizers: DX100, TX81, DEP5, DW8000, Roland D-10, Kawaii K1 X K5, DX7, and Casio CZ1. X XUsing glib - Moving around X Both the librarian and editor parts of glib make use of arrow keys, X <CTRL/B> <CTRL/N> <CTRL/P> <CTRL/F> or h j k l to move the cursor X around. (The arrow keys may not work on non-Unix versions, X though.) <CTRL/L> redraws the screen. These keys are #defined in X glib.h, so you can change them if you want. To quit from any mode, X use q. In the librarian screen, ? gives a command summary. Esc or X grave accent key sends an all-notes-off (though the support for X arrow keys may interfere with this use of esc ). X X XUsing glib - The librarian X The screen shows the synth bank on the left, and the current (1 of X 3) library bank on the right. A * identifies the `current' voice, X and you use the arrow keys to move it around. As soon as you move X to a different voice, it is sent to the `edit buffer' of the synth, X so it is very easy to roam around and see what each voice sounds X like. Commands: X X b - Cycle through the (3) library banks, displayed on the right X side of the screen. X X c - Set the midi channel for sending/receiving voices. X X d - Download from the (real) synthesizer, replacing the current X contents of the synth bank. X X D - Download from a file, replacing the current contents of the X synth bank. Same as above, except input comes from file X instead of the synth. (Implemented only for Unix version.) X X e - Edit the current voice (see editor description below). X X f - List the files on the disk. X X p - Put the yank buffer, replacing the contents of the current X voice. X X q - Quit, going back to `choose a synth'. X X r - Read a bank of voices from a file, replacing entirely the X current library bank. X X R - Read a bank of voices from a text file (created with the W X command). X X s - Swap the current voice with the yank buffer. 2 swaps is a X no-op. X X t - Transfer all voices, either from the current library bank to X the synth bank, or vice versa. X X u - Upload the current contents of the synth bank to the synth. X You are given a choice of sending the entire bank or just the X current voice. X X U - Upload the current contents of the synth bank to a file. Same X as above, except output goes to file instead of the synth. X (Implemented only for Unix version.) X X w - Write the current library bank to a file. X X W - Write the current library bank to an editable text file. This X is slow, and is meant for use in some special circumstance - X for instance if you changed the binary format of files, you X might want to convert your old patches. X X y - Yank the current voice into the yank buffer, shown in the X middle of the screen. X X XUsing glib - The editor X In the editor part, arrow keys move the cursor among the parameter X values. The cursor will only land on parameter values. Once on a X parameter value, the following keys will affect it: X X K - increase value by 1 X X J - decrease value by 1 X X I - increase value by 4 X X M - decrease value by 4 X X < - decrease value to its minimum X X > - increase value to its maximum X X S - assign same value as last assigned X X These keys are defined in glib.h, and should be changed to suit X your own tastes. I'm not thrilled with these choices, myself, but X I had to use something, and at least the hand may stay in one X place. X X To change the name of a voice, use `N'. X X The `auto-note' is played whenever you press the space bar. This X is a convenient way of playing a note as soon as you make a change X (ie. you can do everything from the computer keyboard). You can X change the auto-note parameters (pitch, duration, volume, channel) X the same way as all the other parameters. X XSynthesizers X Here is a list of the sample patch files for each synthesizer in X the 1.6 release of glib, together with occasional notes on the X current implementation. X X DX100 X Sample patches: fact1.dx1 X X TX81 Sample patches: fact1.t8p fact1.tx8 X X DEP5 Sample patches: fact1.dp5 X X DW8000 X Sample patches: fact1.dw8 X X Roland D-10 X Sample patches: d10fact.pat d10fact.rsu d10fact.tim X d10fact.ton d10fact.tra d10fact.urp X X Kawaii K1 X Sample patches: k1fact.mlt k1fact.sgl X X Voices are not sent to the K1's edit buffer. X For Kawai K1 multi patches, names of single patches referred X to are displayed when they can be found in the synth voice X bank of the single patches module. The names are updated X whenever a new bank of voices is transferred into this bank. X X Kawaii K5 X Sample patches: card1.k5m card1.k5s X Editing of voices is not implemented. X X DX7 Sample patches: n001.dx7 rom1.d7s X X Some of the parameters on the DX7s editing screen are X `multiplexed'. Move the cursor to the `Modulation Wheel' X legend, then `increment' and `decrement' this field: the X fields below it will cycle through the `Modulation Wheel', X `Aftertouch', `Breath Control', `Foot Control', and `MIDI X Control' parameters. X X Casio CZ1 X Sample patches: bank1.cz1 X X The performance parameters given on the lower part of the X editing screen, Glib, Portamento, etc., are just there pro X forma. In the current version, setting them doesn't X accomplish anything. X XAUTHORS X X original version for dx100, tx81z, dep5: Tim Thompson, X ...twitch!glimmer!tjt X X Macintosh and dw1000 support: Steve Falco. X X d10 support: Michael Kesti, mrk@gvgspd.GVG.TEK.COM X X Amiga and k5 support: Alan Bland, mab@druwy.ATT.COM X or att!druwy!mab X X K1 support and menu mods: Greg Lee, lee@uhccux.uhcc.hawaii.edu X X DX7 support: Scott Snyder, ssnyder@citjulie.bitnet, X ssnyder@juliet.caltech.edu (addresses valid until mid-June) X X CZ1 support: Mark R. Rinfret, mrr@amanpt1.Newport.RI.US, X ...!rayssd!galaxia!amanpt1!mrr X X arp file requester, Amiga version: Dave Weiler X X Some of the code was originally written by Steve Frysinger X (moss!spf), John Helton, and James Gosling. END_OF_FILE if test 8556 -ne `wc -c <'glib.man'`; then echo shar: \"'glib.man'\" unpacked with wrong size! fi # end of 'glib.man' fi if test -f 'glibinit.dp5' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'glibinit.dp5'\" else echo shar: Extracting \"'glibinit.dp5'\" \(9806 characters\) sed "s/^X//" >'glibinit.dp5' <<'END_OF_FILE' X#-This-is-the-Chdepth-data X0,0 7,1 14,2 18,3 21,4 X24,5 27,6 29,7 31,8 33,9 X35,10 37,11 39,12 40,13 42,14 X44,15 45,16 47,17 48,18 49,19 X51,20 52,21 53,22 54,23 56,24 X57,25 58,26 59,27 60,28 61,29 X62,30 63,31 64,32 65,33 66,34 X67,35 68,36 69,37 70,38 71,39 X72,40 74,42 75,43 76,45 77,46 X78,47 79,48 80,49 81,51 82,52 X83,53 84,54 85,56 86,57 87,58 X88,60 89,61 90,62 91,64 92,65 X93,67 94,68 95,70 96,71 97,73 X98,74 99,76 100,77 101,79 102,80 X103,82 104,83 105,85 106,87 107,88 X108,90 109,92 110,93 111,95 112,97 X113,98 114,100 115,102 116,104 117,105 X118,107 119,109 120,111 121,113 122,115 X123,117 124,118 125,120 126,122 127,124 X128,126 129,128 130,130 131,132 132,134 X133,136 134,138 135,140 136,142 137,145 X138,147 139,149 140,151 141,153 142,155 X143,157 144,160 145,162 146,164 147,166 X148,169 149,171 150,173 151,176 152,178 X153,180 154,183 155,185 156,187 157,190 X158,192 159,195 160,197 161,200 162,202 X163,204 164,207 165,210 166,212 167,215 X168,217 169,220 170,222 171,225 172,228 X173,230 174,233 175,236 176,238 177,241 X178,244 179,247 180,249 181,252 182,255 X183,258 184,261 185,263 186,266 187,269 X188,272 189,275 190,278 191,281 192,284 X193,287 194,290 195,293 196,296 197,299 X198,302 199,305 200,308 201,311 202,314 X203,317 204,320 205,323 206,327 207,330 X208,333 209,336 210,339 211,343 212,346 X213,349 214,352 215,356 216,359 217,362 X218,366 219,369 220,372 221,376 222,379 X223,383 224,386 225,389 226,393 227,396 X228,400 229,403 230,407 231,411 232,414 X233,418 234,421 235,425 236,428 237,432 X238,436 239,439 240,443 241,447 242,451 X243,454 244,458 245,462 246,466 247,469 X248,473 249,477 250,481 251,485 252,489 X253,492 254,496 255,500 X#-This-is-the-freq-data X30 31 32 33 34 35 36 37 38 39 X40 41 42 43 44 45 46 47 48 49 X51 53 55 57 59 61 63 65 67 69 X71 73 75 77 79 81 83 86 89 92 X95 98 101 104 107 110 113 116 119 123 X127 131 135 139 143 147 151 155 160 165 X170 175 180 185 191 197 203 209 215 221 X228 235 242 249 256 264 272 280 288 297 X306 315 324 334 344 354 364 375 386 397 X409 421 433 446 459 473 487 501 516 531 X547 563 580 597 615 633 652 671 691 711 X732 754 776 799 823 847 872 898 824 851 X979 1010 1040 1070 1100 1130 1160 1200 X#-This-is-the-Hf-data X0,100 1,99 4,98 6,97 9,96 X12,95 14,94 17,93 20,92 22,91 X25,90 28,89 30,88 33,87 36,86 X39,85 41,84 44,83 47,82 49,81 X52,80 55,79 57,78 60,77 63,76 X66,75 68,74 71,73 74,72 76,71 X79,70 82,69 84,68 87,67 90,66 X92,65 95,64 98,63 101,62 103,61 X106,60 109,59 111,58 114,57 117,56 X119,55 122,54 125,53 128,52 130,51 X133,50 136,49 138,48 141,47 144,46 X146,45 149,44 152,43 154,42 157,41 X160,40 163,39 165,38 168,37 171,36 X173,35 176,34 179,33 181,32 184,31 X187,30 189,29 192,28 195,27 198,26 X200,25 203,24 206,23 208,22 211,21 X214,20 216,19 219,18 222,17 225,16 X227,15 230,14 233,13 235,12 238,11 X241,10 243,9 246,8 249,7 251,6 X254,5 X#-This-is-the-Gate-time X10 11 11 12 13 14 14 15 16 17 X18 19 20 21 22 23 24 25 26 28 X29 30 31 33 34 35 36 38 39 41 X42 43 45 46 48 50 51 53 54 56 X58 59 61 63 65 67 68 70 72 74 X76 78 80 82 84 86 88 90 92 95 X97 99 101 103 106 108 110 113 115 117 X120 122 125 127 130 132 135 138 140 143 X146 148 151 154 157 159 162 165 168 171 X174 177 180 183 186 189 192 195 198 201 X205 208 211 214 217 221 224 227 231 234 X238 241 245 248 252 255 259 262 266 270 X273 277 281 285 288 292 296 300 304 308 X312 316 319 323 328 332 336 340 344 348 X352 356 361 365 369 373 378 382 387 391 X395 400 404 409 413 418 422 427 432 436 X441 446 450 455 460 465 470 474 479 484 X489 494 499 504 509 514 519 524 530 535 X540 545 550 556 561 566 571 577 582 588 X593 598 604 609 615 621 626 632 637 643 X649 654 660 666 672 677 683 689 695 701 X707 713 719 725 731 737 743 749 755 761 X767 774 780 786 792 799 805 811 818 824 X831 837 843 850 856 863 870 876 883 889 X896 903 910 916 923 930 937 944 950 957 X964 971 978 985 992 999 X#-This-is-the-Chrate X0,3 21,4 32,5 41,6 48,7 X54,8 60,9 65,10 70,11 74,12 X79,13 83,14 87,15 90,16 94,17 X98,18 101,19 104,20 107,21 110,22 X113,23 116,24 119,25 122,26 125,27 X130,29 132,30 135,31 137,32 140,33 X142,34 145,35 147,36 149,37 152,38 X154,39 156,40 158,41 160,42 162,43 X164,44 166,45 168,46 170,47 172,48 X174,49 176,50 178,51 180,52 182,53 X184,54 186,55 188,56 190,57 191,58 X193,59 195,60 196,61 198,62 200,63 X202,64 203,65 205,66 207,67 208,68 X210,69 211,70 213,71 215,72 216,73 X218,74 219,75 221,76 222,77 224,78 X226,79 227,80 229,81 230,82 232,83 X233,84 234,85 236,86 237,87 239,88 X240,89 242,90 243,91 244,92 246,93 X247,94 249,95 250,96 251,97 253,98 X254,99 155,100 X#-This-is-Nlrevtime X0,-9 3,-8 7,-7 11,-6 15,-5 X19,-4 23,-3 27,-2 31,-1 35,0 X38,1 42,2 46,3 50,4 54,5 X58,6 62,7 66,8 70,9 74,10 X78,11 82,12 86,13 90,14 94,15 X97,16 99,17 101,18 102,19 103,20 X104,21 105,22 106,23 107,24 108,26 X109,27 110,28 111,30 112,31 113,33 X114,35 115,36 116,38 117,40 118,42 X119,44 120,46 121,48 122,51 123,53 X124,55 125,58 126,60 127,63 128,66 X129,69 130,71 131,74 132,77 133,80 X134,83 135,87 136,90 137,93 138,97 X139,100 142,110 145,120 147,130 150,140 X152,150 154,160 156,170 158,180 160,190 X162,200 164,210 166,220 168,230 170,240 X172,250 173,260 175,270 177,280 180,300 X181,310 183,320 184,330 186,340 187,350 X189,360 190,370 191,380 193,390 194,400 X196,410 197,420 198,430 199,440 201,450 X202,460 203,470 204,480 206,490 207,500 X208,510 209,520 210,530 212,540 213,550 X214,560 215,570 216,580 217,590 218,600 X219,610 220,620 222,630 223,640 224,650 X225,660 226,670 227,680 228,690 229,700 X230,710 231,720 232,730 233,740 234,750 X235,760 236,770 237,780 238,790 239,810 X240,820 241,830 242,840 243,850 244,860 X245,870 246,880 247,890 248,900 249,920 X250,930 251,940 252,950 253,960 254,970 X255,990 X#-This-is-the-Chfeed X0 63 89 108 125 X140 153 166 177 188 X198 208 217 226 234 X243 250 258 266 273 X280 287 294 300 307 X313 319 325 331 337 X343 349 354 360 365 X370 376 381 386 391 X396 401 406 411 415 X420 425 429 434 438 X443 447 452 456 460 X464 469 473 477 481 X485 489 493 497 501 X505 509 513 516 520 X524 528 531 535 539 X542 546 550 553 557 X560 564 567 571 574 X577 581 584 587 591 X594 597 601 604 607 X610 614 617 620 623 X626 629 632 636 639 X642 645 648 651 654 X657 660 663 666 669 X672 674 677 680 683 X686 689 692 695 697 X700 703 706 708 711 X714 717 719 722 725 X728 730 733 736 738 X741 744 746 749 751 X754 757 759 762 764 X767 770 772 775 777 X780 782 785 787 790 X792 795 797 800 802 X804 807 809 812 814 X816 819 821 824 826 X828 831 833 835 838 X840 842 845 847 849 X852 854 856 859 861 X863 865 868 870 872 X874 877 879 881 883 X886 888 890 892 894 X897 899 901 903 905 X907 910 912 914 916 X918 920 922 925 927 X929 931 933 935 937 X939 941 944 946 948 X950 952 954 956 958 X960 962 964 966 968 X970 972 974 976 978 X980 982 984 986 988 X990 992 994 996 998 X1000 X#-this-is-the-Revtime X0,1 3,2 7,3 11,4 15,5 19,6 X23,7 27,8 31,9 35,10 39,11 X43,12 46,13 49,14 52,15 55,16 X58,17 61,18 64,19 67,20 70,21 X73,22 75,23 78,24 80,25 83,26 X85,27 87,28 89,29 91,30 93,31 X95,32 97,33 98,34 100,35 102,36 X103,37 105,38 107,39 108,40 109,41 X111,42 112,43 114,44 115,45 116,46 X117,47 119,48 120,49 121,50 122,51 X123,52 124,53 125,54 126,55 127,56 X128,57 129,58 130,59 131,60 132,61 X133,62 134,63 135,65 136,66 137,67 X138,68 139,70 140,71 141,72 142,74 X143,75 144,77 145,78 146,80 147,81 X148,83 149,85 150,86 151,88 152,90 X153,92 154,94 155,95 156,97 157,99 X158,100 160,110 165,120 168,130 172,140 X175,150 178,160 181,170 184,180 186,190 X189,200 191,210 193,220 195,230 197,240 X199,250 200,260 202,270 204,280 205,290 X206,300 208,310 209,320 211,330 212,340 X213,350 214,360 215,370 216,380 218,390 X219,400 220,410 221,420 222,430 223,450 X224,460 225,470 226,480 227,490 228,500 X229,520 230,530 231,540 232,560 233,570 X234,590 235,600 236,620 237,630 238,650 X239,660 240,680 241,700 242,720 243,740 X244,750 245,770 246,790 247,810 248,840 X249,860 250,880 251,900 252,920 253,950 X254,970 255,990 X#-This-is-the-Dtime X0 0 1 1 1 2 2 3 3 4 X5 6 6 7 8 9 10 12 13 14 X15 17 18 20 21 23 25 26 28 30 X32 34 36 38 40 43 45 47 50 52 X55 57 60 63 65 68 71 74 77 80 X83 86 90 93 96 100 103 107 111 114 X118 122 126 130 134 138 142 146 150 154 X159 163 168 172 177 181 186 191 196 201 X206 211 216 221 226 231 236 242 247 253 X258 264 270 275 281 287 293 299 305 311 X317 323 330 336 342 349 355 362 369 375 X382 389 396 403 410 417 424 431 438 446 X453 460 468 475 483 491 498 506 514 522 X530 538 546 554 562 571 579 587 596 604 X613 621 630 639 648 657 665 674 684 693 X702 711 720 730 739 749 758 768 777 787 X797 807 817 827 837 847 857 867 877 888 X898 908 919 929 940 951 961 972 983 994 X1000 1010 1020 1030 1050 1060 1070 1080 1090 1100 X1110 1130 1140 1150 1160 1170 1180 1200 1210 1220 X1230 1250 1260 1270 1280 1290 1310 1320 1330 1350 X1360 1370 1380 1400 1410 1420 1440 1450 1460 1480 X1490 1500 1520 1530 1540 1560 1570 1580 1600 1610 X1630 1640 1650 1670 1680 1700 1710 1730 1740 1760 X1770 1780 1800 1810 1830 1840 1860 1870 1890 1900 X1920 1930 1950 1960 1980 2000 X#-This-is-the-Predly X0 0 0 0 0 0 0 0 0 1 X1 1 1 1 2 2 2 2 2 3 X3 3 4 4 4 5 5 6 6 6 X7 7 8 8 9 9 10 11 11 12 X12 13 14 14 15 16 16 17 18 18 X19 20 21 22 22 23 24 25 26 27 X28 29 30 31 31 32 33 35 36 37 X38 39 40 41 42 43 44 46 47 48 X49 50 52 53 54 56 57 58 60 61 X62 64 65 67 68 69 71 72 74 75 X77 78 80 82 83 85 86 88 90 91 X93 95 96 98 100 102 103 105 107 109 X111 113 114 116 118 120 122 124 126 128 X130 132 134 136 138 140 142 144 146 149 X151 153 155 157 159 162 164 166 168 171 X173 175 178 180 182 185 187 190 192 194 X197 199 202 204 207 209 212 214 217 220 X222 225 227 230 233 235 238 241 244 246 X249 252 255 258 260 263 266 269 272 275 X278 281 283 286 289 292 295 298 301 305 X308 311 314 317 320 323 326 329 333 336 X339 342 346 349 352 355 359 362 365 369 X372 376 379 382 386 389 393 396 400 403 X407 410 414 417 421 425 428 432 436 439 X443 447 450 454 458 462 465 469 473 477 X481 484 488 492 496 500 X#-This-is-the-end END_OF_FILE if test 9806 -ne `wc -c <'glibinit.dp5'`; then echo shar: \"'glibinit.dp5'\" unpacked with wrong size! fi # end of 'glibinit.dp5' fi if test -f 'list.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'list.c'\" else echo shar: Extracting \"'list.c'\" \(8986 characters\) sed "s/^X//" >'list.c' <<'END_OF_FILE' X/* $Id: list.c,v 1.6 89/05/06 17:13:31 lee Exp $ X * GLIB - a Generic LIBrarian and editor for synths X * Tim Thompson X * modified by everyone X * X * The E array is the list of synths that can be handled. X * GLIB is completely driven from the stuff in the editinfo structure. X * To add/delete a synth, just add/delete an entry to the E array, X * and provide the functions. The #defines at the top provide a X * convenient way of including/excluding synths that are already X * supported. X * $Log: list.c,v $ X * Revision 1.6 89/05/06 17:13:31 lee X * rel. to comp.sources.misc X * X */ X X#ifdef KAWAIK1 X#define K1multi X#define K1single X#define PATDATAID 0xf1 X#define TONDATAID 0xf3 X#endif X X#ifdef ROLANDD10 X#define D10pat X#define D10tim X#define D10wfg X#define D10tvf X#define D10tva X#define D10rsu X#define D10urp X#define D10tra X#define PATDATAID 0xf1 X#define TIMDATAID 0xf2 X#define TONDATAID 0xf3 X#define RSUDATAID 0xf4 X#define URPDATAID 0xf5 X#define TRADATAID 0xf6 X#endif X X#include "glib.h" X X#ifdef DX100 Xextern dxtxdin(), dxtxdout(), dx1snof(), dx1sbulk(), dx1gbulk(), dx1sedit(); Xextern char *dx1nof(); Xextern struct paraminfo Pdx100[]; Xextern struct labelinfo Ldx100[]; X#endif X X#ifdef TX81Z Xextern dxtxdin(), dxtxdout(), dx1snof(), dx1sbulk(), dx1gbulk(), dx1sedit(); Xextern char *dx1nof(); Xextern struct paraminfo Ptx81z[]; Xextern struct labelinfo Ltx81z[]; X#endif X X#ifdef TX81ZPERF Xextern tx8pdin(), tx8pdout(), tx8psedit(), tx8psbulk(), tx8pgbulk(), tx8psnof(); Xextern char *tx8pnof(); Xextern struct paraminfo Ptx81p[]; Xextern struct labelinfo Ltx81p[]; X#endif X X#ifdef DEP5 Xextern struct paraminfo Pdep5[]; Xextern struct labelinfo Ldep5[]; Xextern dep5din(), dep5dout(), dep5snof(), dep5sone(), dep5sedit(); Xextern char *dep5nof(); X#endif X X#ifdef DW8000 Xextern struct paraminfo Pdw800[]; Xextern struct labelinfo Ldw800[]; Xextern dw8din(), dw8dout(), dw8snof(), dw8sone(), dw8gbulk(); Xextern dw8numv(), dw8sedit(); Xextern char *dw8nof(), *dw8vnum(); X#endif X X#ifdef KAWAIK5 Xextern struct paraminfo Pk5s[], Pk5m[]; Xextern struct labelinfo Lk5s[], Lk5m[]; Xextern k5sdin(), k5sdout(), k5ssnof(), k5ssone(); Xextern k5mdin(), k5mdout(), k5msnof(), k5msone(); Xextern k5ssbulk(), k5msbulk(); Xextern k5numv(), k5ssedit(), k5msedit(), k5sgbulk(), k5mgbulk(); Xextern char *k5snof(), *k5mnof(), *k5vnum(); X#endif X X#ifdef D10pat Xextern struct paraminfo Pdpat[]; Xextern struct labelinfo Ldpat[]; Xextern dpatdin(), dpatdout(), dpatsnof(), dpatsone(), dpatgbulk(); Xextern dnumpat(), dpatsedit(), dpatsbulk(); Xextern char *dpatnof(), *dpatnum(); X#endif X X#ifdef D10tim Xextern struct paraminfo Pdtim[]; Xextern struct labelinfo Ldtim[]; Xextern dtimdin(), dtimdout(), dtimsnof(), dtimsone(), dtimgbulk(); Xextern dnumtim(), dtimsedit(), dtimsbulk(); Xextern char *dtimnof(), *dtimnum(); X#endif X X#ifdef D10wfg Xextern struct paraminfo Pdwfg[]; Xextern struct labelinfo Ldwfg[]; Xextern dwfgdin(), dwfgdout(), dtonsnof(), dtonsone(), dtongbulk(); Xextern dnumton(), dtonsedit(), dtonsbulk(); Xextern char *dtonnof(), *dtonnum(); X#endif X X#ifdef D10tvf Xextern struct paraminfo Pdtvf[]; Xextern struct labelinfo Ldtvf[]; Xextern dtvfdin(), dtvfdout(), dtonsnof(), dtonsone(), dtongbulk(); Xextern dnumton(), dtonsedit(), dtonsbulk(); Xextern char *dtonnof(), *dtonnum(); X#endif X X#ifdef D10tva Xextern struct paraminfo Pdtva[]; Xextern struct labelinfo Ldtva[]; Xextern dtvadin(), dtvadout(), dtonsnof(), dtonsone(), dtongbulk(); Xextern dnumton(), dtonsedit(), dtonsbulk(); Xextern char *dtonnof(), *dtonnum(); X#endif X X#ifdef D10rsu Xextern struct paraminfo Pdrsu[]; Xextern struct labelinfo Ldrsu[]; Xextern drsudin(), drsudout(), drsusnof(), drsusone(), drsugbulk(); Xextern dnumrsu(), drsusedit(), drsusbulk(); Xextern char *drsunof(), *drsunum(); X#endif X X#ifdef D10urp Xextern struct paraminfo Pdurp[]; Xextern struct labelinfo Ldurp[]; Xextern durpdin(), durpdout(), durpsnof(), durpsone(), durpgbulk(); Xextern dnumurp(), durpsedit(), durpsbulk(); Xextern char *durpnof(), *durpnum(); X#endif X X#ifdef D10tra Xextern struct paraminfo Pdtra[]; Xextern struct labelinfo Ldtra[]; Xextern dtradin(), dtradout(), dtrasnof(), dtrasone(), dtragbulk(); Xextern dnumtra(), dtrasedit(), dtrasbulk(); Xextern char *dtranof(), *dtranum(); X#endif X X#ifdef K1multi Xextern struct paraminfo Pk1m[]; Xextern struct labelinfo Lk1m[]; Xextern k1mdin(), k1mdout(), k1msnof(), k1msone(), k1mgbulk(); Xextern k1nummlt(), k1msedit(), k1msbulk(); Xextern char *k1mnof(), *k1mnum(); X#endif X X#ifdef K1single Xextern struct paraminfo Pk1sng[]; Xextern struct labelinfo Lk1sng[]; Xextern k1sdin(), k1sdout(); X#ifndef K1multi Xextern k1msnof(), k1msone(), k1mgbulk(); Xextern k1nummlt(), k1msedit(), k1msbulk(); Xextern char *k1mnof(), *k1mnum(); X#endif X#endif X X#ifdef DX7 Xextern struct paraminfo Pdx7[]; Xextern struct labelinfo Ldx7[]; Xextern dx7din(), dx7dout(), dx7snof(), dx7sedit(), dx7sbulk(), dx7gbulk(); Xextern char *dx7nof(); X#endif X X#ifdef DX7S Xextern struct paraminfo Pdx7S[]; Xextern struct labelinfo Ldx7S[]; Xextern dx7Sdin(), dx7Sdout(), dx7snof(), dx7Ssedit(), dx7Ssbulk(), dx7Sgbulk(); Xextern char *dx7nof(); X X/* if the DX7s dataID is changed, it must be changed in readall() as well. */ X X#define DX7S_DATAID 0xd7 X#endif X X#ifdef CZ1 Xextern cz1din(), cz1dout(), cz1snof(), cz1sbulk(), cz1gbulk(), X cz1sedit(), cz1sone(); Xextern char *cz1nof(); Xextern struct paraminfo Pcz1[]; Xextern struct labelinfo Lcz1[]; X#endif X X Xstruct editinfo E[] = { X X#ifdef DX100 X {"DX-100", Pdx100, Ldx100, 24, 128, 17, 0xdd, X dxtxdin, dxtxdout, dx1sedit, NULL, dx1sbulk, dx1gbulk, dx1nof, dx1snof, X NULL, NULL, NULL}, X#endif X#ifdef DEP5 X {"DEP-5", Pdep5, Ldep5, 99, 42, 16, 0xdd, X dep5din, dep5dout, dep5sedit, dep5sone, NULL, NULL, dep5nof, dep5snof, X NULL, NULL, NULL}, X#endif X#ifdef TX81Z X {"TX81Z", Ptx81z, Ltx81z, 32, 128, 17, 0xdd, X dxtxdin, dxtxdout, dx1sedit, NULL, dx1sbulk, dx1gbulk, dx1nof, dx1snof, X NULL, NULL, NULL}, X#endif X#ifdef TX81ZPERF X {"TX81Z Performance", Ptx81p, Ltx81p, 24, 76, 17, 0xdd, X tx8pdin, tx8pdout, tx8psedit, NULL, tx8psbulk, tx8pgbulk, tx8pnof, X tx8psnof, NULL, NULL, NULL}, X#endif X#ifdef DW8000 X {"DW8000", Pdw800, Ldw800, 64, 72, 17, 0xdd, X dw8din, dw8dout, dw8sedit, dw8sone, NULL, dw8gbulk, dw8nof, dw8snof, X dw8vnum, dw8numv, NULL}, X#endif X#ifdef KAWAIK5 X {"K-5 Single", Pk5s, Lk5s, 48, 984, 8, 0xdd, X k5sdin, k5sdout, k5ssedit, k5ssone, k5ssbulk, k5sgbulk, X k5snof, k5ssnof, k5vnum, NULL, k5numv}, X {"K-5 Multi", Pk5m, Lk5m, 48, 352, 8, 0xdd, X k5mdin, k5mdout, k5msedit, k5msone, k5msbulk, k5mgbulk, X k5mnof, k5msnof, k5vnum, NULL, k5numv}, X#endif X#ifdef D10pat X {"Patches ", Pdpat, Ldpat, 128, 58, 16, PATDATAID, X dpatdin, dpatdout, dpatsedit, dpatsone, dpatsbulk, X dpatgbulk, dpatnof, dpatsnof, dpatnum, dnumpat, NULL}, X#endif X X#ifdef D10tim X {"Timbres ", Pdtim, Ldtim, 128, 28, 1, TIMDATAID, X dtimdin, dtimdout, dtimsedit, dtimsone, dtimsbulk, X dtimgbulk, dtimnof, dtimsnof, dtimnum, dnumtim, NULL}, X#endif X X#ifdef D10wfg X {"Tone WFG's", Pdwfg, Ldwfg, 64, 266, 10, TONDATAID, X dwfgdin, dwfgdout, dtonsedit, dtonsone, dtonsbulk, X dtongbulk, dtonnof, dtonsnof, dtonnum, dnumton, NULL}, X#endif X X#ifdef D10tvf X {"Tone TVF's", Pdtvf, Ldtvf, 64, 266, 10, TONDATAID, X dtvfdin, dtvfdout, dtonsedit, dtonsone, dtonsbulk, X dtongbulk, dtonnof, dtonsnof, dtonnum, dnumton, NULL}, X#endif X X#ifdef D10tva X {"Tone TVA's ", Pdtva, Ldtva, 64, 266, 10, TONDATAID, X dtvadin, dtvadout, dtonsedit, dtonsone, dtonsbulk, X dtongbulk, dtonnof, dtonsnof, dtonnum, dnumton, NULL}, X#endif X X#ifdef D10rsu X {"Rhythm Setup ", Pdrsu, Ldrsu, 85, 24, 1, RSUDATAID, X drsudin, drsudout, drsusedit, drsusone, drsusbulk, X drsugbulk, drsunof, drsusnof, drsunum, dnumrsu, NULL}, X#endif X X#ifdef D10urp X {"Rhythm Patterns ", Pdurp, Ldurp, 32, 608, 1, URPDATAID, X durpdin, durpdout, durpsedit, durpsone, durpsbulk, X durpgbulk, durpnof, durpsnof, durpnum, dnumurp, NULL}, X#endif X X#ifdef D10tra X {"Rhythm Track ", Pdtra, Ldtra, 1, 522, 1, TRADATAID, X dtradin, dtradout, dtrasedit, dtrasone, dtrasbulk, X dtragbulk, dtranof, dtrasnof, dtranum, dnumtra, NULL}, X#endif X X#ifdef K1multi X {"Multi Patches", Pk1m, Lk1m, 32, 75, 10, PATDATAID, X k1mdin, k1mdout, k1msedit, k1msone, k1msbulk, X k1mgbulk, k1mnof, k1msnof, k1mnum, NULL, k1nummlt}, X#endif X X#ifdef K1single X {"Single Patches", Pk1sng, Lk1sng, 64, 87, 10, TONDATAID, X k1sdin, k1sdout, k1msedit, k1msone, k1msbulk, X k1mgbulk, k1mnof, k1msnof, k1mnum, NULL, k1nummlt}, X#endif X X#ifdef DX7 X {"DX7", Pdx7, Ldx7, 32, 128, 10, 0, X dx7din, dx7dout, dx7sedit, NULL, dx7sbulk, dx7gbulk, dx7nof, dx7snof, X NULL, NULL, NULL}, X#endif X#ifdef DX7S X {"DX7s", Pdx7S, Ldx7S, 32, 163, 10, DX7S_DATAID, X dx7Sdin, dx7Sdout, dx7Ssedit, NULL, dx7Ssbulk, dx7Sgbulk, dx7nof, X dx7snof, X NULL, NULL, NULL}, X#endif X X#ifdef CZ1 X {"CZ1", Pcz1, Lcz1, 64, 144, 16, 0xdd, X cz1din, cz1dout, cz1sedit, cz1sone, NULL, cz1gbulk, cz1nof, cz1snof, X /* cz1sbulk() is defined, but we use cz1sone(). */ X NULL, NULL, NULL}, X#endif X X X {NULL,NULL,NULL,0,0,0,0, X NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL} X}; END_OF_FILE if test 8986 -ne `wc -c <'list.c'`; then echo shar: \"'list.c'\" unpacked with wrong size! fi # end of 'list.c' fi echo shar: End of archive 4 \(of 15\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 15 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0