v06i106: glib part 5 of 15
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Mon May 15 13:39:08 AEST 1989
Posting-number: Volume 6, Issue 106
Submitted-by: lee at uhccux.uhcc.Hawaii.Edu (Greg Lee )
Archive-name: glib/part05
#! /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 5 (of 15)."
# Contents: d10tra.mnu dw8000.mnu k5single.mnu vis.c
# Wrapped by lee at uhccux on Sun May 7 00:40:12 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'd10tra.mnu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'d10tra.mnu'\"
else
echo shar: Extracting \"'d10tra.mnu'\" \(10615 characters\)
sed "s/^X//" >'d10tra.mnu' <<'END_OF_FILE'
X/* $Id: d10tra.mnu,v 1.6 89/05/06 17:13:17 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * D10 Rhythm Track Librarian
X *
X * Code started 2 FEB 89 -- Michael R. Kesti mrk at gvgspd.GVG.TEK.COM
X * modified by Greg Lee
X * $Log: d10tra.mnu,v $
X * Revision 1.6 89/05/06 17:13:17 lee
X * rel. to comp.sources.misc
X *
X */
X
X#include "glib.h"
X#include "vis.h"
X
X#define D10TRASIZE 502
X#define TRABASEADDR 0x0c0000
X#define RESERVESIZE 20
X
Xchar *visnum(), *visonoff();
X
X
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Ldtra[] = {
X#MENU
X
X
X
X
X
X
X
X
X
X
X
X
X No Rhythm Track editing is supported.
X
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 Pdtra[] = {
X/*
XNAME TYPE POS MAX OFFSET MASK SHIFT ADHOC
X */
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 * dtranum
X *
X * Convert a voice number (0) to the string displayed in the
X * librarian (ie. 1).
X */
X
Xchar *
Xdtranum(n)
X{
X if ( n != 0 )
X return("??");
X return("01");
X}
X
X/*
X * dnumtra
X *
X * Convert a display-style voice number (1) to internal
X * format (0).
X */
X
Xdnumtra(n)
Xint n;
X{
X if(n != 1) {
X return(-1);
X } else {
X return(0);
X }
X}
X
X/*
X * dtradin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xdtradin(data)
Xchar *data;
X{
X /* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */
X}
X
X/*
X * dtradout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xdtradout(data)
Xchar *data;
X{
X}
X
X/*
X * dtrasedit
X *
X * Send a single voice to the edit buffer of the D10. This will be whatever
X * voice is currently selected.
X */
X
Xdtrasedit(data)
Xchar *data;
X{
X}
X
X/*
X * dtranof
X *
X * Return a pointer to the voice name buried in library bank data.
X */
Xchar *
Xdtranof(data)
Xchar *data;
X{
X static char buf[12];
X int n;
X
X for(n = 0; n < D10TRASIZE; n++)
X if ( data[n + RESERVESIZE] != 0 ) break;
X if ( n != D10TRASIZE ) {
X n = data[RESERVESIZE + 0] + (data[RESERVESIZE + 1] << 7);
X sprintf(buf, "%d patterns", n);
X } else
X strcpy(buf, " ");
X return(buf);
X}
X
X/*
X * dtrasnof
X *
X * Set the voice name buried in data to name.
X */
Xdtrasnof(data,name)
Xchar *data;
Xchar *name;
X{
X}
X
X/* dtrasone - send a single voice to the D10 */
Xdtrasone(iv, data)
Xint iv;
Xchar *data;
X{
X int n;
X int cksum;
X long curadd;
X int addbyte;
X
X curadd = TRABASEADDR;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 0; n < 256; n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X curadd = 0x0c0200;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 256; n < 512; n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X curadd = 0x0c0400;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 512; n < (D10TRASIZE - 512); n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X return(0);
X}
X
X/* dtragbulk - Request and read a bulk dump from the D10 */
Xdtragbulk(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,"\n");
X windstr(Buff);
X
X curadd = TRABASEADDR;
X
X for(v = 0; v < Nvoices; v++) {
X
X flushmidi();
X
X if(v % 10 != 0) {
X sprintf(Buff, ".");
X } else {
X sprintf(Buff,"%d", (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(0x03); /* should be D10TRASIZE */
X cksum += 0x03;
X sendmidi(0x76); /* length lsb */
X cksum += 0x76;
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 < 256; ) {
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 timeout0;
X }
X }
X }
X
X timeout0:
X if ( n != 256 ) {
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 /* 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 < 246; ) {
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 + 256) = b2;
X n++;
X }
X } else {
X if ( milliclock() > toolong ) {
X Reason = "Timeout reading data";
X goto timeout1;
X }
X }
X }
X
X timeout1:
X if ( n != 246 ) {
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 += 0x376; /* D10TRASIZE */
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 } /* go back for another voice */
X
X Reason = "";
X ret = 0; /* all's well */
X
Xgetout:
X return(ret);
X}
X
X/* dtrasbulk - send a bulk dump to the D10 */
Xdtrasbulk(data)
Xchar *data;
X{
X int n;
X int cksum;
X long curadd;
X int addbyte;
X
X curadd = TRABASEADDR;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 0; n < 256; n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X curadd = 0x0c0200;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 256; n < 512; n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X curadd = 0x0c0400;
X
X sendmidi(0xf0);
X sendmidi(0x41);
X sendmidi(0x10);
X sendmidi(0x16);
X sendmidi(0x12); /* DT1 - Data set 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 for(n = 512; n < (D10TRASIZE - 512); n++) {
X sendmidi(data[n + RESERVESIZE] & 0x7f);
X cksum += data[n + RESERVESIZE] & 0x7f;
X }
X
X sendmidi((-cksum) & 0x7f); /* checksum */
X sendmidi(EOX);
X
X return(0);
X}
X
X/* end */
END_OF_FILE
if test 10615 -ne `wc -c <'d10tra.mnu'`; then
echo shar: \"'d10tra.mnu'\" unpacked with wrong size!
fi
# end of 'd10tra.mnu'
fi
if test -f 'dw8000.mnu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'dw8000.mnu'\"
else
echo shar: Extracting \"'dw8000.mnu'\" \(10982 characters\)
sed "s/^X//" >'dw8000.mnu' <<'END_OF_FILE'
X/* $Id: dw8000.mnu,v 1.6 89/05/06 17:13:21 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * DW8000 Librarian
X *
X * Code completed 8/24/87 -- Steven A. Falco moss!saf
X * modifications: Greg Lee
X * $Log: dw8000.mnu,v $
X * Revision 1.6 89/05/06 17:13:21 lee
X * rel. to comp.sources.misc
X *
X */
X
X#define OVERLAY2
X
X#include "glib.h"
X
X#define DW8VSIZE 51
X
Xchar *visnum(), *visd8wave(), *visd8oct(), *visd8trk();
Xchar *visd8ival(), *visd8detu(), *visdasel(), *dw8vnum(), *visdamod();
Xchar *visdmgw(), *visdmode(), *visd8pol(),*visd8sem(), *visonoff();
X
X#define RESERVESIZE 20
X
X#define visdw8vnum dw8vnum
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Ldw800[] = {
X#MENU
X
X
X+----------------------------------+----------------+------------------+------+
X| Osc 1 Osc 2 Noise| ModGen| AutoBend| Mode |
X|Octave % % |Waveform % |Select % |% |
X|Waveform % % |Frequency % |Mode % | |
X|Level % % % |Delay % |Time % | |
X|Interval % |Osc % |Intensity % | |
X|Detune % |VCF % | | |
X+------------------+---------------+----------------+------------------+------+
X| VCF VCA| Delay| Joystick | Portamento |Key |
X|Attack % % |Time % |Osc % |Time % |Param |
X|Decay % % |Factor % |VCF % | |% |
X|Break Pt. % % |Feedback % +----------------+------------------+------+
X|Slope % % |Frequency % |
X|Sustain % % |Intensity % | +-------------------------+--------------+
X|Release % % |Eff.Level % | |Space = Play Note | Auto-Note |
X|V.Sensitv % % +---------------+ | | |
X|Cutoff % | AftTouch| |h = left q = quit |Pitch % |
X|Resonance % |Osc.MG % | |j = down N = Set Name |Duration % |
X|Tracking % |VCF % | |k = up J = Decrement |Volume % |
X|Polarity % |VCA % | |l = right K = Increment |Channel % |
X|EG.Intens % | | | | |
X+------------------+---------------+ +-------------------------+--------------+
X#END
X-1,-1,NULL
X};
X
X/* This array defines all the editable parameters. */
Xstruct paraminfo Pdw800[] = {
X/*
XNAME TYPE POS MAX OFFSET MASK SHIFT ADHOC
X */
X#O o1oct d8oct %% 3 0
X#O o2oct d8oct %% 3 7
X#O mgwave dmgw %% 3 34
X#O abndsel dasel %% 3 3
X#O mode dmode %% 3 13
X#O o1wave d8wave %% 15 1
X#O o2wave d8wave %% 15 8
X#O mgfrew num %% 31 35
X#O abndmod damod %% 1 4
X#O o1lev num %% 31 2
X#O o2lev num %% 31 9
X#O noise num %% 31 12
X#O mgdela num %% 31 36
X#O abndtim num %% 31 5
X#O o2ival d8ival %% 7 10
X#O mgosc num %% 31 37
X#O abndins num %% 31 6
X#O o2detu d8detu %% 7 11
X#O mgvcf num %% 31 38
X#O fatt num %% 31 20
X#O aatt num %% 31 27
X#O dtim num %% 7 41
X#O joyosc d8sem %% 15 39
X#O portam num %% 31 47
X#O fdec num %% 31 21
X#O adec num %% 31 28
X#O dfact num %% 15 42
X#O joyvcf onoff %% 1 40
X#O vnumb dw8vnum %% 63 14
X#O fbrk num %% 31 22
X#O abrk num %% 31 29
X#O dfeed num %% 15 43
X#O fslp num %% 31 23
X#O aslp num %% 31 30
X#O dfreq num %% 31 44
X#O fsus num %% 31 24
X#O asus num %% 31 31
X#O dintns num %% 31 45
X#O frel num %% 31 25
X#O arel num %% 31 32
X#O deff num %% 15 46
X#O asens num %% 7 33
X#O fsens num %% 7 26
X#O fcut num %% 63 15
X#O autopitch num %% 127 -60
X#O fres num %% 31 16
X#O autovol num %% 127 -63
X#O atosc num %% 3 48
X#O ftrk d8trk %% 3 17
X#O autodur num %% 20 -5 *5
X#O atvcf num %% 3 49
X#O fpol d8pol %% 1 18
X#O autochan num %% 16 -1 *5
X#O atvca num %% 3 50
X#O fegi num %% 31 19
XNULL,NULL,-1,-1,-1,-1,visnum,0,0,0,0
X};
X
X
X/*
X * dw8vnum
X *
X * Convert a voice number (0 to 63) to the string displayed in the
X * librarian (ie. 11 to 88).
X */
X/* added vis to beginning of this name -- gl */
Xchar *
Xdw8vnum(n)
X{
X static char v[3];
X
X if ( n < 0 || n > 63 )
X return("??");
X
X v[0] = n/8 + '1';
X v[1] = n%8 + '1';
X v[2] = '\0';
X return(v);
X}
X
X/*
X * dw8numv
X *
X * Convert a display-style voice number (11 to 88) to internal
X * format (0 - 63).
X */
X
Xdw8numv(n)
Xint n;
X{
X int ld, rd;
X
X /* crack out the digits as octal codes */
X ld = (n / 10) - 1; /* left digit */
X rd = (n % 10) - 1; /* right digit */
X
X if(ld < 0 || ld > 7 || rd < 0 || rd > 7) {
X return(-1);
X } else {
X return(ld * 8 + rd); /* combine as octal */
X }
X}
X
X/*
X * dw8din
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xdw8din(data)
Xchar *data;
X{
X /* The first 20 bytes are reserved (arbitrarily) for the voice name */
X#SETVAL
X /* We set the 'auto-note' channel upon entry */
X setval("autochan",Channel);
X}
X
X/*
X * dw8dout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xdw8dout(data)
Xchar *data;
X{
X#GETVAL
X /* If the autochan parameter has changed, update Channel */
X Channel = getval("autochan");
X}
X
X/*
X * dw8sedit
X *
X * Send a single voice to the edit buffer of the DW8000. This will be whatever
X * voice is currently selected.
X */
X
Xdw8sedit(data)
Xchar *data;
X{
X int n;
X
X sendmidi(0xf0);
X sendmidi(0x42);
X sendmidi(0x30 | (Channel - 1));
X sendmidi(0x03);
X sendmidi(0x40);
X for(n = 0; n < DW8VSIZE; n++) {
X sendmidi(data[n + 20] & 0x7f);
X }
X sendmidi(EOX);
X}
X
X/*
X * dw8nof
X *
X * Return a pointer to the voice name buried in library bank data.
X */
Xchar *
Xdw8nof(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];
X *p = '\0';
X return(currbuff);
X}
X
X/*
X * dw8snof
X *
X * Set the voice name buried in data to name.
X */
Xdw8snof(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] = *p;
X for ( ; m<16; m++ )
X data[m] = ' ';
X}
X
X/* dw8sone - send a single voice to the DW8000 */
Xdw8sone(iv, data)
Xint iv;
Xchar *data;
X{
X int c, b2, ret = 1;
X long begin, toolong;
X
X /* select voice n */
X sendmidi(0xc0 | (Channel - 1));
X sendmidi(iv);
X
X /* send data */
X dw8sedit(data);
X
X /* request write */
X sendmidi(0xf0);
X sendmidi(0x42);
X sendmidi(0x30 | (Channel - 1));
X sendmidi(0x03);
X sendmidi(0x11); /* write request */
X sendmidi(iv); /* the now-current voice */
X sendmidi(EOX);
X
X /* read the ack/nack - set up for timeout */
X begin = milliclock();
X toolong = begin + 1000 * TIMEOUT;
X
X /* wait for the 0x03 byte (dw8000 ID byte) */
X while ( milliclock() < toolong ) {
X if ( STATMIDI && (c=(getmidi() & 0xff)) == 0x03 )
X break;
X }
X if ( c != 0x03 ) {
X Reason = "Timeout waiting for 0x03";
X goto getout;
X }
X
X /* next byte is the result code */
X while((b2 = getmidi() & 0xff) == 0xfe)
X ; /* burn active sensing */
X if(b2 != 0x21) {
X Reason = "Write failed - check protect switch!";
X goto getout;
X }
X
X while((b2 = getmidi() & 0xff) == 0xfe)
X ; /* want EOX - burn active sensing */
X if ( b2 != EOX )
X Reason = "EOX not received";
X else {
X Reason = "";
X ret = 0; /* all's well */
X }
X
Xgetout:
X return(ret);
X}
X
X/* dw8gbulk - Request and read a bulk dump from the DW8000 */
Xdw8gbulk(data)
Xchar *data;
X{
X int c, n, v, b2, ret = 1;
X long begin, toolong;
X
X flushmidi();
X
X for(v = 0; v < Nvoices; v++) {
X /* select voice */
X sendmidi(0xc0 | (Channel - 1));
X sendmidi(v);
X
X /* request the voice */
X sendmidi(0xf0);
X sendmidi(0x42);
X sendmidi(0x30 | (Channel-1)); /* Channel # */
X sendmidi(0x03);
X sendmidi(0x10);
X sendmidi(EOX);
X
X /* set up for timeout */
X begin = milliclock();
X toolong = begin + 1000 * TIMEOUT;
X
X /* wait for the x40 byte starting the dump */
X while ( milliclock() < toolong ) {
X if ( STATMIDI && (c=(getmidi() & 0xff)) == 0x40 )
X break;
X }
X if ( c != 0x40 ) {
X Reason = "Timeout waiting for 0x40";
X goto getout;
X }
X
X /* now read 51 bytes of voice data */
X for(n = 0; n < DW8VSIZE; n++) {
X /* twiddle your thumbs, but not forever */
X while ( ! STATMIDI ) {
X if ( milliclock() > toolong )
X goto timeout; /* the end of an era */
X }
X while((b2 = getmidi() & 0xff) == 0xfe)
X ; /* burn active sensing */
X VOICEBYTE(data,v,n + 20) = b2;
X }
X
X timeout:
X if ( n != DW8VSIZE ) {
X Reason = "Timeout while reading!";
X goto getout;
X }
X while((b2 = getmidi() & 0xff) == 0xfe)
X ; /* want EOX - burn active sensing */
X if ( b2 != EOX )
X Reason = "EOX not received";
X else {
X Reason = "";
X ret = 0; /* all's well */
X }
X } /* go back for another voice */
X
Xgetout:
X return(ret);
X}
X
X/*
X * Below are functions used for display of parameter values
X */
X
Xchar *
Xvisd8wave(v)
X{
X switch (v) {
X case 0: return("ramp");
X case 1: return("square");
X case 2: return("ac. piano");
X case 3: return("el. piano");
X case 4: return("hd. piano");
X case 5: return("clavinet");
X case 6: return("organ");
X case 7: return("brass");
X case 8: return("sax");
X case 9: return("violin");
X case 10: return("a. guitar");
X case 11: return("d. guitar");
X case 12: return("el. bass");
X case 13: return("dg. bass");
X case 14: return("bell");
X case 15: return("sine");
X }
X return("*");
X}
X
Xchar *
Xvisd8oct(v)
X{
X switch(v) {
X case 0: return("16");
X case 1: return("8");
X case 2: return("4");
X case 3: return("*");
X }
X return("*");
X}
X
Xchar *
Xvisd8ival(v)
X{
X switch(v) {
X case 0: return("unison");
X case 1: return("min 3rd");
X case 2: return("maj 3rd");
X case 3: return("4th");
X case 4: return("5th");
X case 5: case 6: case 7: return("*");
X }
X return("*");
X}
X
Xchar *
Xvisd8detu(v)
X{
X switch(v) {
X case 0: return("in tune");
X case 1: return("1 cent");
X case 2: return("2 cents");
X case 3: return("3 cents");
X case 4: return("4 cents");
X case 5: return("5 cents");
X case 6: return("6 cents");
X case 7: return("*");
X }
X return("*");
X}
X
Xchar *Semicode[] = {
X "none",
X "1 semitone",
X "2 semitones",
X "3 semitones",
X "4 semitones",
X "5 semitones",
X "6 semitones",
X "7 semitones",
X "8 semitones",
X "9 semitones",
X "10 semitones",
X "11 semitones",
X "1 octave"
X};
X
Xchar *
Xvisd8sem(v)
X{
X if(v >= 0 && v <= 12) {
X return(Semicode[v]);
X }
X return("*");
X}
X
Xchar *
Xvisdasel(v)
X{
X switch(v) {
X case 0: return("off");
X case 1: return("Osc 1");
X case 2: return("Osc 2");
X case 3: return("Osc 1+2");
X }
X return("*");
X}
X
Xchar *
Xvisdamod(v)
X{
X switch(v) {
X case 0: return("Up");
X case 1: return("Down");
X }
X return("*");
X}
X
Xchar *
Xvisd8pol(v)
X{
X switch(v) {
X case 0: return("/-\\");
X case 1: return("\\_/");
X }
X return("*");
X}
X
Xchar *
Xvisdmode(v)
X{
X switch(v) {
X case 0: return("Poly 1");
X case 1: return("Poly 2");
X case 2: return("Uni 1");
X case 3: return("Uni 2");
X }
X return("*");
X}
X
Xchar *
Xvisdmgw(v)
X{
X switch(v) {
X case 0: return("/\\");
X case 1: return("|\\");
X case 2: return("/|");
X case 3: return("_|-|");
X }
X return("*");
X}
X
Xchar *
Xvisd8trk(v)
X{
X switch(v) {
X case 0: return("0");
X case 1: return("1/4");
X case 2: return("1/2");
X case 3: return("1");
X }
X return("*");
X}
X
X/* end */
END_OF_FILE
if test 10982 -ne `wc -c <'dw8000.mnu'`; then
echo shar: \"'dw8000.mnu'\" unpacked with wrong size!
fi
# end of 'dw8000.mnu'
fi
if test -f 'k5single.mnu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'k5single.mnu'\"
else
echo shar: Extracting \"'k5single.mnu'\" \(10747 characters\)
sed "s/^X//" >'k5single.mnu' <<'END_OF_FILE'
X/* $Id: k5single.mnu,v 1.6 89/05/06 17:13:30 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * Kawai K-5 Librarian - handles SINGLE (and MULTI) patches.
X * Functions are annotated if they work for SINGLE, MULTI, or both kinds.
X * Full editing not implemented - there are zillions of parameters,
X * and the huge LCD on the K-5 is actually quite easy to read and use.
X *
X * Alan Bland - att!druwy!mab
X * mod. Greg Lee
X * $Log: k5single.mnu,v $
X * Revision 1.6 89/05/06 17:13:30 lee
X * rel. to comp.sources.misc
X *
X */
X
X#define OVERLAY2
X
X#include "glib.h"
X#ifdef BSD
X#include <ctype.h>
X#endif
X
X#define K5SINGLE 0
X#define K5MULTI 1
X#define K5MAGIC 0x5a3c
X
X#define NERRS 5
X#define RESERVESIZE 0
X
Xextern char *visnum();
X
X/* This array contains arbitrary screen labels (SINGLE) */
Xstruct labelinfo Lk5s[] = {
X#MENU
X
X
X
X Sorry, no edit capability implemented for the K-5 yet.
X
X
X
X
X
X
X
X
X
X
X
X +-------------------------+--------------+
X |Space = Play Note | Auto-Note |
X | | |
X |h = left q = quit |Pitch % |
X |j = down N = Set Name |Volume % |
X |k = up J = Decrement |Duration % |
X |l = right K = Increment |Channel % |
X | | |
X +-------------------------+--------------+
X#END
X-1,-1,NULL
X};
X
Xstruct paraminfo Pk5s[] = {
X/*
XNAME TYPE POS MAX OFFSET MASK SHIFT ADHOC
X */
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
X/*
X * k5vnum
X *
X * Convert a voice number (0 to 47) to the string displayed in the
X * librarian (A1-D12) (SINGLE and MULTI)
X */
Xchar *
Xk5vnum(n)
Xregister int n;
X{
X static char v[4];
X
X if ( n < 0 || n > 47 )
X return("??");
X
X sprintf(v, "%c%d", n/12 + 'A', n%12 + 1);
X return(v);
X}
X
X/*
X * k5numv
X *
X * Convert an alphanumeric voice number (A1-D12) to internal
X * format (0 - 47). (SINGLE and MULTI)
X */
Xk5numv(n)
Xregister char *n;
X{
X register int v,j;
X
X /* first better be [a-dA-D] */
X *n = toupper(*n);
X if (*n == 'A' || *n == 'B' || *n == 'C' || *n == 'D') {
X v = 12 * (*n - 'A');
X } else {
X return(-1);
X }
X
X /* followed by 1-12 */
X j = atoi(++n);
X if (j<1 || j>12) return(-1);
X return v + j - 1;
X}
X
X/*
X * k5sdin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
Xk5sdin(data)
Xchar *data;
X{
X /* We set the 'auto-note' channel upon entry */
X setval("autochan",Channel);
X}
X
X/*
X * k5sdout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
Xk5sdout(data)
Xchar *data;
X{
X /* If the autochan parameter has changed, update Channel */
X Channel = getval("autochan");
X}
X
X/*
X * k5mdin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
Xk5mdin(data)
Xchar *data;
X{
X /* We set the 'auto-note' channel upon entry */
X setval("autochan",Channel);
X}
X
X/*
X * k5mdout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
Xk5mdout(data)
Xchar *data;
X{
X /* If the autochan parameter has changed, update Channel */
X Channel = getval("autochan");
X}
X
X/*
X * k5snof
X *
X * Return a pointer to the voice name buried in library bank data. (SINGLE)
X */
Xchar *
Xk5snof(data)
Xregister char *data;
X{
X static char currbuff[9];
X register char *p;
X register int m;
X
X p = currbuff;
X for ( m=0; m<16; m+=2 )
X *p++ = (data[m]<<4) | data[m+1];
X *p = '\0';
X return(currbuff);
X}
X
X/*
X * k5nameok
X *
X * Convert an ascii string to the ascii subset used for K5 names.
X */
Xchar*
Xk5nameok(name)
Xchar *name;
X{
X static char okname[9];
X register int m;
X
X for (m=0; m<9 && name[m]; ++m) {
X okname[m] = toupper(name[m]);
X if (!isalnum(okname[m])) {
X switch (okname[m]) {
X case '-': case ':': case '/': case '*': case '?':
X case '!': case '#': case '&': case '(': case ')':
X case '"': case '+': case '.': case '=': case ' ':
X break;
X default:
X okname[m] = ' ';
X break;
X }
X }
X }
X okname[m] = '\0';
X return okname;
X}
X
X/*
X * k5ssnof
X *
X * Set the voice name buried in data to name. (SINGLE)
X */
Xk5ssnof(data,name)
Xchar *data;
Xchar *name;
X{
X register char *p;
X register int m;
X
X for ( p=k5nameok(name),m=0; *p!='\0' && m<17; p++,m+=2 ) {
X data[m] = (*p & 0xf0) >> 4;
X data[m+1] = *p & 0x0f;
X }
X for ( ; m<17; m+=2 ) {
X data[m] = (' ' & 0xf0) >> 4;
X data[m+1] = ' ' & 0x0f;
X }
X}
X/*
X * k5mnof
X *
X * Return a pointer to the voice name buried in library bank data. (MULTI)
X */
Xchar *
Xk5mnof(data)
Xchar *data;
X{
X static char currbuff[9];
X register char *p;
X register int m;
X
X p = currbuff;
X for ( m=0; m<16; m+=2 )
X *p++ = (data[m+330]<<4) | data[m+331];
X *p = '\0';
X return(currbuff);
X}
X
X/*
X * k5msnof
X *
X * Set the voice name buried in data to name. (MULTI)
X */
Xk5msnof(data,name)
Xchar *data;
Xchar *name;
X{
X char *p;
X int m;
X
X for ( p=k5nameok(name),m=0; *p!='\0' && m<17; p++,m+=2 ) {
X data[m+330] = (*p & 0xf0) >> 4;
X data[m+331] = *p & 0x0f;
X }
X for ( ; m<17; m+=2 ) {
X data[m+330] = (' ' & 0xf0) >> 4;
X data[m+331] = ' ' & 0x0f;
X }
X}
X
X/*
X * k5sbulk
X *
X * common function to send all voices to the K-5 (SINGLE and MULTI)
X */
Xk5sbulk(data, which)
Xchar *data;
Xint which; /* K5SINGLE or K5MULTI */
X{
X int n, err = 0;
X message("");
X for (n=0; n<Nvoices; ++n) {
X for (err=0; err<NERRS; ++err) {
X if (k5sone(n, &(VOICEBYTE(data,n,0)), which ) == 0 ) {
X windputc('+');
X windrefresh();
X break;
X }
X windputc('-');
X windrefresh();
X }
X if (err == NERRS) return(1);
X }
X return(0);
X}
X
X/*
X * k5ssbulk
X *
X * send all voices to the K-5 (SINGLE)
X */
Xk5ssbulk(data)
Xchar *data;
X{
X return k5sbulk(data, K5SINGLE);
X}
X
X/*
X * k5msbulk
X *
X * send all voices to the K-5 (MULTI)
X */
Xk5msbulk(data)
Xchar *data;
X{
X return k5sbulk(data, K5MULTI);
X}
X
X/*
X * k5ssone
X *
X * send one voice to the K-5 (SINGLE)
X */
Xk5ssone(iv, data)
Xint iv;
Xchar *data;
X{
X return k5sone(iv, data, K5SINGLE);
X}
X
X/*
X * k5msone
X *
X * send one voice to the K-5 (MULTI)
X */
Xk5msone(iv, data)
X{
X return k5sone(iv, data, K5MULTI);
X}
X
X/*
X * k5sone
X *
X * common function to send a SINGLE or MULTI voice to the K-5.
X */
Xk5sone(iv, data, which)
Xint iv;
Xregister char *data;
Xint which; /* K5SINGLE or K5MULTI */
X{
X register int i, sum;
X int length;
X int c = 0, ret = 1;
X long begin, toolong;
X
X flushmidi();
X
X length = (which == K5SINGLE) ? 984 : 352;
X
X /* calculate checksum */
X for (sum=0, i=0; i<length-4; ) {
X sum += data[i++] << 4;
X sum += data[i++];
X sum += data[i++] << 12;
X sum += data[i++] << 8;
X }
X
X sum = K5MAGIC - sum;
X data[length-4] = (sum & 0x00f0) >> 4;
X data[length-3] = (sum & 0x000f);
X data[length-2] = (sum & 0xf000) >> 12;
X data[length-1] = (sum & 0x0f00) >> 8;
X
X sendmidi(0xf0);
X sendmidi(0x40);
X sendmidi(Channel-1);
X sendmidi(0x20);
X sendmidi(0x00);
X sendmidi(0x02);
X sendmidi(which);
X sendmidi(iv);
X
X for (i=0; i<length; i++) sendmidi(data[i]);
X
X sendmidi(EOX);
X
X /* read the ack/nack - set up for timeout */
X begin = milliclock();
X toolong = begin + 1000 * TIMEOUT;
X
X /* wait for the acknowledgement */
X while ( milliclock() < toolong ) {
X if ( STATMIDI && (c=(getmidi() & 0xff)) == 0xf0 )
X break;
X }
X if ( c != 0xf0 ) {
X Reason = "Timeout waiting for K-5 response";
X goto getout;
X }
X
X /* third byte after the sysex begin is the result */
X for (i=0; i<3; ) {
X /* wait for midi byte or timeout */
X while ( ! STATMIDI ) {
X if ( milliclock() > toolong ) {
X Reason = "Timeout waiting for K-5 response";
X goto getout;
X }
X }
X /* ignore active sensing */
X if ((c = getmidi() & 0xff) != 0xfe) {
X ++i;
X }
X }
X
X /* check the result */
X switch (c) {
X case 0x40:
X ret = 0;
X Reason = "";
X break;
X case 0x41:
X Reason = "K-5 write error";
X break;
X case 0x42:
X Reason = "K-5 write error (protected)";
X break;
X case 0x43:
X Reason = "K-5 write error (no card)";
X break;
X default:
X Reason = "Wierd response (is that really a K-5 you have?)";
X break;
X }
X
Xgetout:
X return(ret);
X}
X
Xk5ssedit()
X{
X}
X
Xk5msedit()
X{
X}
X
X/*
X * k5sgbulk
X *
X * get all internal SINGLE voices from K-5.
X */
Xk5sgbulk(data)
Xchar *data;
X{
X return k5gbulk(data, K5SINGLE);
X}
X
X/*
X * k5mgbulk
X *
X * get all internal MULTI voices from K-5.
X */
Xk5mgbulk(data)
Xchar *data;
X{
X return k5gbulk(data, K5MULTI);
X}
X
X/*
X * k5gbulk
X *
X * common routine - get all SINGLE or MULTI voices from K-5.
X */
Xk5gbulk(data, which)
Xregister char *data;
Xint which; /* K5SINGLE or K5MULTI */
X{
X int c, v, sumerr = 0;
X register int n, i, sum;
X long begin, toolong;
X
X message("");
X flushmidi();
X
X for(v = 0; v < Nvoices; v++) {
X
Xretry:
X if (which == K5MULTI) {
X /* i don't know if this is a K-5 or Amiga problem */
X /* but multi patch download seems to need this delay */
X millisleep(500);
X }
X /* request the voice */
X sendmidi(0xf0);
X sendmidi(0x40);
X sendmidi(Channel-1);
X sendmidi(0x00);
X sendmidi(0x00);
X sendmidi(0x02);
X sendmidi(which);
X sendmidi(v);
X sendmidi(EOX);
X
X /* set up for timeout */
X begin = milliclock();
X toolong = begin + 1000 * TIMEOUT;
X
X /* wait for the xf0 byte starting the dump */
X while ( milliclock() < toolong ) {
X if ( STATMIDI && (c=(getmidi() & 0xff)) == 0xf0 )
X break;
X }
X if ( c != 0xf0 ) {
X Reason = "Timeout waiting for dump from K-5";
X return 1;
X }
X/*printf("%02x ", c);*/
X /* skip the next 7 bytes (remainder of sysex header) */
X for (i=0; i<7; ) {
X /* wait for midi byte or timeout */
X while ( ! STATMIDI ) {
X if ( milliclock() > toolong )
X goto timeout;
X }
X /* ignore active sensing */
X if ((c = getmidi() & 0xff) != 0xfe) {
X ++i;
X/*printf("%02x ", c);*/
X }
X }
X
X /* read voice data until EOX */
X n = 0;
X while (1) {
X /* wait for midi byte or timeout */
X while ( ! STATMIDI ) {
X if ( milliclock() > toolong )
X goto timeout;
X }
X if ((c = getmidi() & 0xff) == 0xfe) {
X /* ignore active sensing */
X continue;
X } else if (c == EOX) {
X /* finished */
X break;
X } else {
X /* got a data byte */
X VOICEBYTE(data,v,n) = c;
X ++n;
X }
X }
X/*printf("got block n=%d\n", n);*/
X /* verify the checksum */
X for (sum=0, i=0; i<n-4; ) {
X sum += data[i++] << 4;
X sum += data[i++];
X sum += data[i++] << 12;
X sum += data[i++] << 8;
X }
X
X sum = K5MAGIC - sum;
X if ((data[n-4] == (sum & 0x00f0) >> 4) &&
X (data[n-3] == (sum & 0x000f)) &&
X (data[n-2] == (sum & 0xf000) >> 12) &&
X (data[n-1] == (sum & 0x0f00) >> 8)) {
X sumerr = 0;
X windputc('+');
X } else {
X /* retry a few times if checksum failed */
X windputc('-');
X if (sumerr++ >= NERRS) {
X Reason = "Too many checksum errors!";
X return(1);
X }
X goto retry;
X }
X windrefresh();
X
X } /* go back for another voice */
X Reason = "";
X return(0);
X
Xtimeout:
X Reason = "Timeout while reading!";
X return(1);
X}
X
END_OF_FILE
if test 10747 -ne `wc -c <'k5single.mnu'`; then
echo shar: \"'k5single.mnu'\" unpacked with wrong size!
fi
# end of 'k5single.mnu'
fi
if test -f 'vis.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'vis.c'\"
else
echo shar: Extracting \"'vis.c'\" \(10248 characters\)
sed "s/^X//" >'vis.c' <<'END_OF_FILE'
X/* $Id: vis.c,v 1.6 89/05/06 17:13:46 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * Data Display Routines
X *
X * Code started 16 JAN 89 -- Michael R. Kesti mrk at gvgspd.GVG.TEK.COM
X * $Log: vis.c,v $
X * Revision 1.6 89/05/06 17:13:46 lee
X * rel. to comp.sources.misc
X *
X */
X
X#include <stdio.h>
X
X
Xchar *
Xvispan(v)
X{
X switch (v) {
X case 0: return("7>");
X case 1: return("6>");
X case 2: return("5>");
X case 3: return("4>");
X case 4: return("3>");
X case 5: return("2>");
X case 6: return("1>");
X case 7: return("><");
X case 8: return("<1");
X case 9: return("<2");
X case 10: return("<3");
X case 11: return("<4");
X case 12: return("<5");
X case 13: return("<6");
X case 14: return("<7");
X }
X return("*");
X}
X
Xchar *
Xvisreverbtype(v)
X{
X switch (v) {
X case 0: return("ROOM 1");
X case 1: return("ROOM 2");
X case 2: return("HALL 1");
X case 3: return("HALL 2");
X case 4: return("PLATE");
X case 5: return("DELAY 1");
X case 6: return("DELAY 2");
X case 7: return("DELAY 3");
X case 8: return("OFF");
X }
X return("*");
X}
X
Xchar *visreverbtime(v)
X{
Xstatic char visreverbtimebuf[2];
X
X if((v >= 0) && (v <= 7)) {
X sprintf(visreverbtimebuf,"%d",v + 1);
X return(visreverbtimebuf);
X } else {
X return("*");
X }
X}
X
Xchar *visreverblevel(v)
X{
Xstatic char visreverblevelbuf[2];
X
X if((v >= 0) && (v <= 7)) {
X sprintf(visreverblevelbuf,"%d",v);
X return(visreverblevelbuf);
X } else {
X return("*");
X }
X}
X
Xchar *vispatchlevel(v)
X{
Xstatic char vispatchlevelbuf[4];
X
X if((v >= 0) && (v <= 100)) {
X sprintf(vispatchlevelbuf,"%d",v);
X return(vispatchlevelbuf);
X } else {
X return("*");
X }
X}
X
Xchar *
Xviskeymode(v)
X{
X switch (v) {
X case 0: return("WHOLE");
X case 1: return("DUAL");
X case 2: return("SPLIT");
X }
X return("*");
X}
X
Xstatic char *split_table[] = {
X "C",
X "C#",
X "D",
X "D#",
X "E",
X "F",
X "F#",
X "G",
X "G#",
X "A",
X "A#",
X "B"
X};
X
Xchar *
Xvissplit(v)
X{
Xstatic char vissplitbuf[4];
X
X if((v >= 0) && (v <= 61)) {
X strcpy(vissplitbuf, split_table[v % 12]);
X if(strlen(vissplitbuf) == 1) {
X vissplitbuf[1] = (((v / 12) + 2) + '0');
X vissplitbuf[2] = 0;
X } else {
X vissplitbuf[2] = (((v / 12) + 2) + '0');
X vissplitbuf[3] = 0;
X }
X return(vissplitbuf);
X } else {
X return("*");
X }
X}
X
Xchar *
Xvistonegroup(v)
X{
X switch (v) {
X case 0: return("A");
X case 1: return("B");
X case 2: return("I");
X case 3: return("R");
X }
X return("*");
X}
X
Xchar *
Xvisrtone(v)
X{
Xstatic char visrtonebuf[4];
X if(v >= 0 && v <= 127) {
X if(v < 64) {
X sprintf(visrtonebuf,"% 02d",v + 1);
X visrtonebuf[0] = 'I';
X } else {
X if(v == 127) {
X strcpy(visrtonebuf, "OFF");
X } else {
X v -= 64;
X sprintf(visrtonebuf," %02d",v + 1);
X visrtonebuf[0] = 'R';
X }
X }
X return(visrtonebuf);
X }
X return("*");
X}
X
Xchar *vistonenum(v)
X{
Xstatic char vistonenumbuf[3];
X
X if((v >= 0) && (v <= 63)) {
X sprintf(vistonenumbuf,"%02d",v + 1);
X return(vistonenumbuf);
X } else {
X return("*");
X }
X}
X
Xchar *viskeyshift(v)
X{
Xstatic char viskeyshiftbuf[4];
X
X if((v >= 0) && (v <= 23)) {
X sprintf(viskeyshiftbuf,"-%d",abs(v - 24));
X return(viskeyshiftbuf);
X } else if(v == 24) {
X sprintf(viskeyshiftbuf,"0");
X return(viskeyshiftbuf);
X } else if((v >= 25) && (v <= 48)) {
X sprintf(viskeyshiftbuf,"+%d", (v - 24));
X return(viskeyshiftbuf);
X } else {
X return("*");
X }
X}
X
Xchar *visfinetune(v)
X{
Xstatic char visfinetunebuf[4];
X
X if((v >= 0) && (v <= 49)) {
X sprintf(visfinetunebuf,"-%d",abs(v - 50));
X return(visfinetunebuf);
X } else if(v == 50) {
X sprintf(visfinetunebuf,"0");
X return(visfinetunebuf);
X } else if((v >= 51) && (v <= 100)) {
X sprintf(visfinetunebuf,"+%d",(v - 50));
X return(visfinetunebuf);
X } else {
X return("*");
X }
X}
X
Xchar *visbendrange(v)
X{
Xstatic char visbendrangebuf[3];
X
X if((v >= 0) && (v <= 24)) {
X sprintf(visbendrangebuf,"%d",v);
X return(visbendrangebuf);
X } else {
X return("*");
X }
X}
X
Xchar *visassignmode(v)
X{
Xstatic char visassignmodebuf[2];
X
X if((v >= 0) && (v <= 3)) {
X sprintf(visassignmodebuf,"%d",v);
X return(visassignmodebuf);
X } else {
X return("*");
X }
X}
X
Xchar *vistonebal(v)
X{
Xstatic char vistonebalbuf[30];
Xstatic char vistonebalbuf1[30];
Xint n;
X
X if((v >= 0) && (v <= 100)) {
X sprintf(vistonebalbuf,"%d", v);
X for(n = 0 ; n < (30 - strlen(vistonebalbuf)) ; n++)
X strcat(vistonebalbuf, " ");
X sprintf(vistonebalbuf1,"%d", abs(v - 100));
X strcat(vistonebalbuf, vistonebalbuf1);
X return(vistonebalbuf);
X } else {
X return("*");
X }
X}
X
Xchar *
Xvisstruct(v)
X{
X if((v >= 0) && (v <= 12)) {
X switch(v) {
X case 0:
X return("~l~l~u~u~u __|_ ~d~l~l~l~l~l~l| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~lS 1 S");
X break;
X case 1:
X return("~l~l~u~u~u __| ~d~l~l~l~l~l~l| RM ~d~l~l~l~l~l~l|/ \\ ~d~l~l~l~l~l~lS 2 S");
X break;
X case 2:
X return("~l~l~u~u~u __|_ ~d~l~l~l~l~l~l| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~lP 3 S");
X break;
X case 3:
X return("~l~l~u~u~u __| ~d~l~l~l~l~l~l| RM ~d~l~l~l~l~l~l|/ \\ ~d~l~l~l~l~l~lP 4 S");
X break;
X case 4:
X return("~l~l~u~u~u __| ~d~l~l~l~l~l~l| RM ~d~l~l~l~l~l~l|/ \\ ~d~l~l~l~l~l~lS 5 P");
X break;
X case 5:
X return("~l~l~u~u~u __|_ ~d~l~l~l~l~l~l| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~lP 6 P");
X break;
X case 6:
X return("~l~l~u~u~u __| ~d~l~l~l~l~l~l| RM ~d~l~l~l~l~l~l|/ \\ ~d~l~l~l~l~l~lP 7 P");
X break;
X case 7:
X return("~l~l~u~u~u| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~lS 8 S");
X break;
X case 8:
X return("~l~l~u~u~u| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~l| |~d~l~l~l~l~l~lP 9 P");
X break;
X case 9:
X return("~l~l~u~u~u | ~d~l~l~l~l~l~l RM ~d~l~l~l~l~l~l / \\ ~d~l~l~l~l~l~lS 10 S");
X break;
X case 10:
X return("~l~l~u~u~u | ~d~l~l~l~l~l~l RM ~d~l~l~l~l~l~l / \\ ~d~l~l~l~l~l~lP 11 S");
X break;
X case 11:
X return("~l~l~u~u~u | ~d~l~l~l~l~l~l RM ~d~l~l~l~l~l~l / \\ ~d~l~l~l~l~l~lS 12 P");
X break;
X case 12:
X return("~l~l~u~u~u | ~d~l~l~l~l~l~l RM ~d~l~l~l~l~l~l / \\ ~d~l~l~l~l~l~lP 13 P");
X break;
X }
X } else {
X return("*");
X }
X}
X
Xchar *
Xvispmute(v)
X{
X switch (v) {
X case 0: return("_ _ _ _");
X case 1: return("1 _ _ _");
X case 2: return("_ 2 _ _");
X case 3: return("1 2 _ _");
X case 4: return("_ _ 3 _");
X case 5: return("1 _ 3 _");
X case 6: return("_ 2 3 _");
X case 7: return("1 2 3 _");
X case 8: return("_ _ _ 4");
X case 9: return("1 _ _ 4");
X case 10: return("_ 2 _ 4");
X case 11: return("1 2 _ 4");
X case 12: return("_ _ 3 4");
X case 13: return("1 _ 3 4");
X case 14: return("_ 2 3 4");
X case 15: return("1 2 3 4");
X }
X return("*");
X}
X
Xchar *
Xvisenvmode(v)
X{
X switch (v) {
X case 0: return("NORMAL");
X case 1: return("NO SUSTAIN");
X }
X return("*");
X}
X
Xstatic char *cpitch_table[] = {
X "C",
X "C#",
X "D",
X "D#",
X "E",
X "F",
X "F#",
X "G",
X "G#",
X "A",
X "A#",
X "B"
X};
X
Xchar *
Xviscpitch(v)
X{
Xstatic char viscpitchbuf[4];
X
X if((v >= 0) && (v <= 96)) {
X strcpy(viscpitchbuf, cpitch_table[v % 12]);
X if(strlen(viscpitchbuf) == 1) {
X viscpitchbuf[1] = (((v / 12) + 1) + '0');
X viscpitchbuf[2] = 0;
X } else {
X viscpitchbuf[2] = (((v / 12) + 1) + '0');
X viscpitchbuf[3] = 0;
X }
X return(viscpitchbuf);
X } else {
X return("*");
X }
X}
X
Xchar *
Xvispkeyfol(v)
X{
X switch (v) {
X case 0: return("-1");
X case 1: return("-1/2");
X case 2: return("-1/4");
X case 3: return("0");
X case 4: return("1/8");
X case 5: return("1/4");
X case 6: return("3/8");
X case 7: return("1/2");
X case 8: return("5/8");
X case 9: return("3/4");
X case 10: return("7/8");
X case 11: return("1");
X case 12: return("5/4");
X case 13: return("3/2");
X case 14: return("2");
X case 15: return("s1");
X case 16: return("s2");
X }
X return("*");
X}
X
Xchar *
Xvistkeyfol(v)
X{
X switch (v) {
X case 0: return("-1");
X case 1: return("-1/2");
X case 2: return("-1/4");
X case 3: return("0");
X case 4: return("1/8");
X case 5: return("1/4");
X case 6: return("3/8");
X case 7: return("1/2");
X case 8: return("5/8");
X case 9: return("3/4");
X case 10: return("7/8");
X case 11: return("1");
X case 12: return("5/4");
X case 13: return("3/2");
X case 14: return("2");
X }
X return("*");
X}
X
Xchar *viswavebank(v)
X{
X switch (v) {
X case 0: return("SQU1");
X case 1: return("SAW1");
X case 2: return("SQU2");
X case 3: return("SAW2");
X }
X return("*");
X}
X
Xchar *vispcmnum(v)
X{
Xstatic char vispcmnumbuf[3];
X
X if((v >= 0) && (v <= 127)) {
X sprintf(vispcmnumbuf,"%d",v + 1);
X return(vispcmnumbuf);
X } else {
X return("*");
X }
X}
X
Xchar *visvelsens(v)
X{
Xstatic char visvelsensbuf[3];
X
X if((v >= 0) && (v <= 6)) {
X sprintf(visvelsensbuf,"-%d",abs(v - 7));
X return(visvelsensbuf);
X } else if(v == 7) {
X sprintf(visvelsensbuf,"0");
X return(visvelsensbuf);
X } else if((v >= 8) && (v <= 14)) {
X sprintf(visvelsensbuf,"+%d",abs(v - 7));
X return(visvelsensbuf);
X } else {
X return("*");
X }
X}
X
Xchar *visenvlev(v)
X{
Xstatic char visenvlevbuf[4];
X
X if((v >= 0) && (v <= 49)) {
X sprintf(visenvlevbuf,"-%d",abs(v - 50));
X return(visenvlevbuf);
X } else if(v == 50) {
X sprintf(visenvlevbuf,"0");
X return(visenvlevbuf);
X } else if((v >= 51) && (v <= 100)) {
X sprintf(visenvlevbuf,"+%d",abs(v - 50));
X return(visenvlevbuf);
X } else {
X return("*");
X }
X}
X
Xchar *visbiaslev(v)
X{
Xstatic char visbiaslevbuf[3];
X
X if((v >= 0) && (v <= 6)) {
X sprintf(visbiaslevbuf,"-%d",abs(v - 7));
X return(visbiaslevbuf);
X } else if(v == 7) {
X sprintf(visbiaslevbuf,"0");
X return(visbiaslevbuf);
X } else if((v >= 8) && (v <= 14)) {
X sprintf(visbiaslevbuf,"+%d",abs(v - 7));
X return(visbiaslevbuf);
X } else {
X return("*");
X }
X}
X
Xstatic char *bpitch_table[] = {
X "A",
X "A#",
X "B",
X "C",
X "C#",
X "D",
X "D#",
X "E",
X "F",
X "F#",
X "G",
X "G#"
X};
X
Xchar *
Xvisbiaspd(v)
X{
Xstatic char visbiaspdbuf[5];
Xstatic char visbiaspdbuf1[2];
X
X if((v >= 0) && (v <= 127)) {
X if(v >= 64) {
X strcpy(visbiaspdbuf, ">");
X v -= 64;
X } else {
X strcpy(visbiaspdbuf, "<");
X }
X strcat(visbiaspdbuf, bpitch_table[v % 12]);
X v += 9;
X sprintf(visbiaspdbuf1, "%d", (v / 12) + 1);
X strcat(visbiaspdbuf, visbiaspdbuf1);
X return(visbiaspdbuf);
X } else {
X return("*");
X }
X}
X
Xchar *vistvablev(v)
X{
Xstatic char vistvablevbuf[4];
X
X if((v >= 0) && (v <= 12)) {
X if(v == 12) {
X return("0");
X } else {
X sprintf(vistvablevbuf,"-%d",abs(v - 12));
X return(vistvablevbuf);
X }
X } else {
X return("*");
X }
X}
X
X/* end */
END_OF_FILE
if test 10248 -ne `wc -c <'vis.c'`; then
echo shar: \"'vis.c'\" unpacked with wrong size!
fi
# end of 'vis.c'
fi
echo shar: End of archive 5 \(of 15\).
cp /dev/null ark5isdone
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
More information about the Comp.sources.misc
mailing list