[comp.sources.misc] v06i103: glib part 2 of 15

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (05/15/89)

Posting-number: Volume 6, Issue 103
Submitted-by: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee )
Archive-name: glib/part02

#! /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 2 (of 15)."
# Contents:  CHANGES DX-README ctomenu.l cz.h d10tva.mnu d10tvf.mnu
#   d10wfg.mnu k1single.mnu pc-mach.h st-mach.c
# Wrapped by lee@uhccux on Sun May  7 00:40:09 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'CHANGES'\"
else
echo shar: Extracting \"'CHANGES'\" \(4379 characters\)
sed "s/^X//" >'CHANGES' <<'END_OF_FILE'
X
X3/15/89 Makefile	changed K5 to KAWAIK5 (fix from Jessica Koeppel)
X	list.c		changed K5 to KAWAIK5; restored cvtanum() value
X			to editinfo arrays
X	glib.h		restored cvtanum() to editinfo declaration
X	glib.c		restored cvtanum() use (for Kawai K1 and K5 now);
X			restored some other things from Thompson's more
X			recent version
X	k1multi.mnu	now number of single patch is always shown, even
X			when the name is shown
X	glib.1		added paragraph about display of single names
X			when editing multi patches for the K1
X----------------------------
Xabove changes posted as patch1.
X----------------------------
X3/16/89	glib.c		mistake in last patch lost code in gotoparm()
X			required for arrow key use -- put it back;
X			remove "Voices" from screen title of synth bank
X	glib.1		documented `N' command for entering voice name.
X	glib.h,
X	unix-mach.c	revised ctl() macro and calls as suggested by
X			Mac Michaels for sake of Turbo C
X	amigmach.c	Alan Bland's comp.sources.amiga distribution
X			increases a buffer size -- made that change here
X----------------------------
Xabove changes posted as patch2.
X----------------------------
X3/20/89	glib.man	now corresponds with glib.1
X	patchlevel.h	new, to keep track of patchlevel
X	CHANGES		new, this file
X	MANIFEST	includes above, and this changes file
X3/30/89 k1multi.mnu	changed data from row order to column order
X	k1vis.c		in vismute() changed sense of 'mute' and 'on'
X----------------------------
Xabove changes posted as patch3.
X----------------------------
Xchanges of 4/19/89 by Scott Snyder:
X4/19/89	glib.c		enhance showstr(); pass the 'eras' parameter
X			to the vis routine in showparam(); speed up
X			paramat() and parmindex(); added special
X			processing in readall() for DX7 and DX7s
X			banks.
X	list.c		added DX7 and DX7s.
X	pc-mach.h	added definitions for graphics chars.
X	pc-tcc.mak	revised along the lines of the unix makefile.
X	menutoc.l	expanded the number of acceptable %'s and #'s;
X			changed the type of the temp vars it generates
X			from 'unsigned char' to 'unsigned'; allowed
X			specification of input and output files as
X			parameters in order to work with TMAKE.
X			fixed bug with zero offsets.
X	menutoc.c	see menutoc.l
X	patchlevel.h	keep track of revisions.
X4/22/89 Makefile	updated for dx7; change to prevent deleting
X			menutoc.c automatically by make
X	MANIFEST	reflects new dx7 files
X	dx7.mnu		joined 2 quotes split across lines not accepted
X			by pcc; had to comment out #pragma dir. in 2 places
X	dx7s.mnu	added #define of SEEK_CUR
X	list.c		termination of editinfo was missing a 0
X	glib.1,glib.man,README
X			minor changes
X----------------------------
Xabove changes made in patch4 (3 parts)
X----------------------------
X4/23/89	glib.c,glib.h,unix-mach.c
X			new U and D commands for unix: upload and download
X			file instead of synth
X	glib.1,glib.man	document above
X	k1multi.mnu	disabled k1sedit proc (don't know how to do this)
X	k1multi.mnu,k1single.mnu
X			should not include machdep.h
X	yama_com.c,tx81p.mnu
X			gbulk: read and discard 0xf0 when download from file;
X			sbulk: returns 0
X	patchlevel.h	now level 5
X----------------------------
Xabove changes posted as patch5
X----------------------------
X4/24/89	k1multi.mnu	upload and download multi-voice dumps instead of
X			doing one voice at a time
X4/25/89
X -- started to use RCS; add $Id: CHANGES,v 1.6 89/05/06 17:13:05 lee Exp $, $Author: lee $, $Log:	CHANGES,v $
X# Revision 1.6  89/05/06  17:13:05  lee
X# rel. to comp.sources.misc
X# 
X# Revision 1.6  89/04/26  10:34:18  lee
X# none
X#  to most files ---
X4/25/89	   merging in Mark Rinfret's CZ1 support
X	Makefile	version for CZ1
X	list.c		ditto
X	cz.h		MR file
X	cz1.mnu		derived from MR cz1.c; removed '&' 2nd arg
X			to getwaveform call; stuck in some conditionals
X			for up/download file; compacted menu spec
X	amigadir.c,amigadir.h,AmiAztec-make,ReadMe.CZ1
X			MR files
X	amigmach.c	incorporated all of MR's changes
X	glib.c		must not reset 8th bit for CZ file data
X	glib.1,glib.man	note MR did CZ1
X4/28/89	glib.c		MR change makes nested ifdef's ok for Aztec C
X	ReadMe.CZ1	MR change
X	AmiAztec-make	MR update
X	pc-tcc.mak	added defs for CZ1
X4/30/89	menutoc.l,menutoc.c
X			MR changes: subst. for strtol and remove vmin decl.
X	glib.1,glib.man	rewrite
X5/5/89	amigmach.c	use arp file requester, Dave Weiler, sent by Ed Wilts
X	README.arp	doc on Dave Weiler's arp modification
X5/7/89	[many]		tried to get rid of lint -- some is left
END_OF_FILE
if test 4379 -ne `wc -c <'CHANGES'`; then
    echo shar: \"'CHANGES'\" unpacked with wrong size!
fi
# end of 'CHANGES'
fi
if test -f 'DX-README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'DX-README'\"
else
echo shar: Extracting \"'DX-README'\" \(4285 characters\)
sed "s/^X//" >'DX-README' <<'END_OF_FILE'
X$Id: DX-README,v 1.6 89/05/06 17:13:05 lee Exp $
XScott Snyder
X$Log:	DX-README,v $
X# Revision 1.6  89/05/06  17:13:05  lee
X# rel. to comp.sources.misc
X# 
X
X  This posting adds support for the Yamaha DX7 and DX7s synths to the glib
Xpatch editor. The generic glib code is not included, so you'll need a copy
Xof the earlier glib posting. I have only tested the code on a PC using
XTurbo C V2.0; however, it shouldn't be hard to make it work in other
Xenvironments. I have also sped up glib in a couple of places, in order
Xto make it work tolerably fast on a PC.
X
X  The following files are included:
X
X	DX-README	this file
X	dx7.mnu		DX7 synth module
X	dx7s.mnu	DX7s synth module (requires dx7.mnu)
X	pc-tcc.mak	makefile for Turbo C
X	n001.dx7	sample DX7 bank (from Glenn Scott's DX7 patch archive)
X	rom1.d7s	sample DX7s bank (downloaded from the Yamaha ROM
X			  cartridge)
X	patches		patches to the existing glib code
X
X[Notes (gl): file patches is not here -- the changes are incorporated;
X For the TURBO-C and the DX7 version, one must uncomment #pragma
X directives in two places in file dx7.mnu.]
X
XCompiling the editor:
X
X  Mess-Dos/Turbo C: feed 'patches' into patch, rename 'pc-tcc.mak' to
X    'makefile', and type 'make'. This will produce a version of glib which
X    recognizes the DX7 and DX7s. To enable support for other synths, uncomment
X    the appropriate lines in the makefile.
X
X  Other systems: feed 'patches' into patch. Then adjust your makefile
X    appropriately: 'dx7.mnu' and 'dx7s.mnu' should be passed through
X    menutoc and linked in with glib. glib.c and list.c should be compiled
X    with the preprossesor symbols 'DX7' and 'DX7S' defined. To enable the
X    faster code in glib.c, define the symbol 'SSS'.
X
XUsing the editors:
X
X    The DX7 editor works just like other glib-based editors, and shouldn't
X  present any problems. However, I was unable to fit all the DX7s parameters
X  on one screen, so I used a trick: some of the parameters are 'multiplexed'.
X  On the DX7s screen, move the cursor to the 'Modulation Wheel' legend, then
X  'increment' and 'decrement' this field: the fields below it will cycle
X  through the 'Modulation Wheel', 'Aftertouch', 'Breath Control', 'Foot
X  Control', and 'MIDI Control' parameters.
X
X    Since the DX7 banks are exactly 4096 bytes long, I chose not to add
X  a DataID byte to the front, to avoid wasting disk space. glib will
X  identify a DX7 bank by examining the file length. DX7 banks can be read
X  in DX7s mode and vice versa; the additional DX7s data will be discarded
X  or replaced with appropriate defaults.
X
XImplementation notes:
X
X    In order to draw the pictures for the DX7 algorithms, I modified the
X  showstr() function to use the PC line-drawing characters. If you are
X  using another system which has such special characters, you should tell
X  glib about them by adding the appropriate definitions to your machdep.h
X  file (see the definitions at the end of pc-mach.h for an example of
X  how this should be done). If this is not done, the graphics characaters
X  will be approximated (badly) by standard ASCII characters.
X
X    In addition to the basic cursor motion escapes (~u, ~d, ~r, ~l), showstr()
X  now recognizes the following additional escapes:
X
X	~| : a vertical line
X	~- : a horizontal line
X	~+ : a vertical line crossing a horizontal line
X	~T : a 'T'
X	~^ : an upside-down 'T'
X	~< : a 'T' on its right side
X	~> : a 'T' on its left side
X	~{ : the upper-left corner of a box
X	~} : the upper-right corner of a box
X	~[ : the lower-left corner of a box
X	~] : the lower-right corner of a box
X	~r : 'carriage return' - the cursor returns to the leftmost column
X               it has been in in this call to showstr()
X
X    In addition, a repeat count can be specified with an escape in the form
X  '~nc', where n is a sequence of digits and c is a character.
X
XCaveats:
X
X    Again, this code has only been tested on a PC-clone using TC V2.0.
X  In addition, I don't have a Roland MPU; I tested the MIDI I/O using
X  a BYTE MIDI board. The high-level interface is the same though, so it
X  should work with the MPU. (By the way, if anyone is interested in BYTE
X  board support for glib or the CMT, drop me a line.)
X
X        Scott Snyder - ssnyder@citjulie.bitnet, ssnyder@juliet.caltech.edu
X			(addresses valid until mid-June)
END_OF_FILE
if test 4285 -ne `wc -c <'DX-README'`; then
    echo shar: \"'DX-README'\" unpacked with wrong size!
fi
# end of 'DX-README'
fi
if test -f 'ctomenu.l' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ctomenu.l'\"
else
echo shar: Extracting \"'ctomenu.l'\" \(5609 characters\)
sed "s/^X//" >'ctomenu.l' <<'END_OF_FILE'
X%{
X/* $Id: ctomenu.l,v 1.6 89/05/06 17:13:13 lee Exp $
X * Greg Lee, lee@uhccux.uhcc.hawaii.edu, 3/7/89
X *
X * Ctomenu helps translate a synthesizer-specific C file into .menu
X * form by generating the '#MENU ... #END' part for the labelinfo
X * array and the '#O' lines for the paraminfo array.
X *
X * $Log:	ctomenu.l,v $
X * Revision 1.6  89/05/06  17:13:13  lee
X * rel. to comp.sources.misc
X * 
X */
X#include <string.h>
X
X#define SCOLS 81
X#define SROWS 24
X#define MAXPARAM 300
X
X	int i, j, offset, reservesize = 20;
X	int row = -2, col = -2 , coord;
X	char labelname[30];
X	char paramname[30];
X	char temps[30];
X	char *screen;
X	char paraml[MAXPARAM][30];
X	char paramv[MAXPARAM][20];
X	int paramcoord[MAXPARAM][6];
X	int paramno = 0, pcount = 0;
X	int havename = 0;
X	char paramtemps[80];
X	int paramtemplen;
X%}
X
X%s A B C D E
Xwh [ \t\n]*
X
X%%
X
X<A>^"#define"[ \t]+"RESERVESIZE"[ \t]*[0-9]+ {
X		for (i=0; yytext[i] != 'Z'; i++) ;
X		reservesize = atoi(yytext+i+2);
X};
X
X<A>^"struct labelinfo".*\n  {
X		for (i=0; i < 30 && yytext[i+16] != '{'; i++)
X			labelname[i] = yytext[i+16];
X		labelname[i] = 0;
X		BEGIN(B);
X};
X
X<C>^"struct paraminfo".*\n  {
X		for (i=0; i < 30 && yytext[i+16] != '{'; i++)
X			paramname[i] = yytext[i+16];
X		paramname[i] = 0;
X		havename = 0;
X		BEGIN(D);
X};
X
X<B,D>{wh}		;
X<B,D>","		;
X<D>"-1"			;
X<D>"NULL"		;
X
X<B,D>[0-9]+	{
X		coord = atoi(yytext);
X		if (row == -2) row = coord;
X		else if (col == -2) col = coord;
X		else {
X			fprintf(stderr, "coordinate mixup\n");
X			exit(1);
X		}
X
X		if (havename == 2 && row != -2 && col != -2) {
X			strncpy(screen+(row*SCOLS)+col,paramtemps,paramtemplen);
X			row = col = -2;
X			havename = 0;
X		}
X};
X
X<B>\"[^\"\n]*\"  {
X		if (row == -2 || col == -2) {
X			fprintf(stderr, "missing coord before %s\n", yytext);
X			exit(1);
X		}
X
X		strncpy(screen+(row*SCOLS)+col, yytext+1, yyleng-2);
X		row = col = -2;
X};
X
X<D>\"[^\"\n]*\"  {
X		if (!havename) {
X			strncpy(paraml[paramno], yytext+1, yyleng-2);
X			paraml[paramno][yyleng-2] = 0;
X			havename = 1;
X		} else {
X			strncpy(paramtemps, yytext+1, yyleng-2);
X			paramtemplen = yyleng - 2;
X			havename = 2;
X		}
X};
X
X<D>"vis"[0-9A-Za-z_]+  {
X		if (row == -2 || col == -2) {
X			fprintf(stderr, "missing coord before %s\n", yytext);
X			fprintf(stderr, "param no. %d, havename %d\n",
X				paramno, havename);
X			exit(1);
X		}
X		strncpy(paramv[paramno], yytext+3, yyleng-3);
X		paramcoord[paramno][0] = row;
X		paramcoord[paramno][1] = col;
X		row = col = -2;
X		BEGIN(E);
X};
X
X<D>^"NULL".*\n		;
X
X<E>[ \t,]		;
X
X<E>[0-9]+	{
X		if (pcount > 3) {
X			fprintf(stderr, "extra value\n");
X			exit(1);
X		}
X		paramcoord[paramno][2 + pcount++] = atoi(yytext);
X};
X
X<E>\n  {
X		pcount = 0;
X		paramno++;
X		if (paramno > MAXPARAM) {
X			fprintf(stderr, "too many parameters\n");
X			exit(1);
X		}
X		havename = 0;
X		BEGIN(D);
X};
X
X<B>.*"NULL".*\n 	;
X
X<B,D>^"};"  {
X		BEGIN(C);
X};
X
X<C>^[ \t]*"data[RESERVESIZE"[ \+]*[0-9]+"]"[ \t]*"="[ \t]*"getval(".*\n  {
X		for (i=0; yytext[i] != '+'; i++) ;
X		offset = atoi(yytext+i+1);
X		while (yytext[i++] != '"')  ;
X		for (j=0; yytext[i] != '"'; i++,j++)
X			temps[j] = yytext[i];
X		temps[j] = 0;
X		for (i=0; i<paramno; i++)
X			if (strcmp(temps, paraml[i]) == 0) break;
X		if (i < paramno)
X			paramcoord[i][5] = offset + reservesize;
X		/* else error ? */
X};
X
X
X<C>^[ \t]*"data["[0-9]+"]"[ \t]*"="[ \t]*"getval(".*\n  {
X		for (i=0; yytext[i] != '['; i++) ;
X		offset = atoi(yytext+i+1);
X		if (offset < reservesize) {
X			fprintf(stderr, "offset < RESERVESIZE\n");
X			exit(1);
X		}
X		while (yytext[i++] != '"')  ;
X		for (j=0; yytext[i] != '"'; i++,j++)
X			temps[j] = yytext[i];
X		temps[j] = 0;
X		for (i=0; i<paramno; i++)
X			if (strcmp(temps, paraml[i]) == 0) break;
X		if (i < paramno)
X			paramcoord[i][5] = offset;
X		/* else error ? */
X};
X
X<A,C>.|\n	;
X
X%%
Xmain()
X{	int i;
X	char *s;
X	char *malloc();
X
X	if ( (screen = malloc(SROWS * SCOLS)) == NULL) {
X		fprintf(stderr, "not enough memory\n");
X		exit(1);
X	}
X	s = screen;
X	for (i=0; i < SROWS*SCOLS; i++) *s++ = ' ';
X
X	BEGIN(A);
X	yylex();
X
X	printf("\n#define RESERVESIZE %d\n\n", reservesize);
X	menudump();
X	paramdump();
X}
X
Xmenudump()
X{	int i, j;
X
X	for (i=0; i<paramno; i++) {
X		row = paramcoord[i][0];
X		col = paramcoord[i][1];
X		if (row >= SROWS || col >= SCOLS) {
X			fprintf(stderr, "bad coords\n");
X			exit(1);
X		}
X		screen[row*SCOLS + col] = '%';
X	}
X
X	printf("struct labelinfo %s {\n", labelname);
X	printf("#MENU\n");
X	for (i=0; i<SROWS; i++) {
X		for (j=SCOLS-1; j>=0 && screen[i*SCOLS+j] == ' '; j--)
X			screen[i*SCOLS+j] = 0;
X		printf("%s\n", screen+i*SCOLS);
X	}
X	printf("#END\n");
X	printf("-1,-1,NULL\n};\n\n");
X}
X
Xparamdump()
X{	int i, j, notdone, colmin, rowmin;
X	char *fmt;
X
X	printf("struct paraminfo %s {\n", paramname);
X	printf("/*\nNAME\t\tTYPE\t\tPOS\tMAX\tOFFSET\tMASK\tSHIFT\tADHOC\n");
X	printf(" */\n");
X
X	notdone = 1;
X	while (notdone) {
X		colmin = rowmin = 1000;
X		for (i = 0; i < paramno; i++)
X			if (paramcoord[i][0] < rowmin)
X				rowmin = paramcoord[i][0];
X		if (rowmin < 1000) {
X		    for (i = 0; i < paramno; i++)
X			if (paramcoord[i][0] == rowmin) {
X				if (paramcoord[i][1] < colmin) {
X				    colmin = paramcoord[i][0];
X				    j = i;
X				}
X			}
X		    if (colmin < 1000) {
X			fmt = "#O %s\t%s\t%%%%\t%d\t%d";
X			if (strlen(paraml[j]) < 5)
X				fmt = "#O %s\t\t%s\t%%%%\t%d\t%d";
X			if (paramcoord[j][4])
X				paramcoord[j][5] = reservesize-paramcoord[j][4];
X			printf(fmt,
X				paraml[j], paramv[j],
X				paramcoord[j][3],
X				paramcoord[j][5] - reservesize);
X			if (paramcoord[j][2] == 1)
X				printf("\t*5");
X			printf("\n");
X			paramcoord[j][0] = 1000;
X			paramcoord[j][1] = 1000;
X		    }
X		} else notdone = 0;
X	}
X
X	printf("NULL,NULL,-1,-1,-1,-1,visnum,0,0,0,0\n};\n\n");
X}
END_OF_FILE
if test 5609 -ne `wc -c <'ctomenu.l'`; then
    echo shar: \"'ctomenu.l'\" unpacked with wrong size!
fi
# end of 'ctomenu.l'
fi
if test -f 'cz.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cz.h'\"
else
echo shar: Extracting \"'cz.h'\" \(4332 characters\)
sed "s/^X//" >'cz.h' <<'END_OF_FILE'
X/* $Id: cz.h,v 1.6 89/05/06 17:13:13 lee Exp $
X * CZ Synthesizer Family Parameter Definitions
X *
X *  Filename:   cz.h
X *  Date:       03/25/89, Mark R. Rinfret
X * 
X *
X *  Note:   One of the preprocessor flags, CZ1 or CZ101, must be defined
X *          by the source file including this package.
X * $Log:	cz.h,v $
X * Revision 1.6  89/05/06  17:13:13  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#ifdef CZ101
X#define CZ_NAME "CZ-101"
X#endif
X
X
X#ifdef CZ1
X#ifdef CZ_NAME
X#include "You may not define CZ1 and CZ101 in the same compile!"
X#endif
X#define CZ_NAME "CZ-1"
X#endif
X
X#ifndef CZ_NAME
X#include "You MUST define either CZ1 or CZ101!"
X#endif
X
X#ifndef UBYTE
X#define UBYTE   unsigned char
X#define USHORT  unsigned short
X#endif
X
X#define ENVELOPESIZE            16      /* 8 rate/level pairs */
X#define END_SYSTEM_EXCLUSIVE    0xF7
X
X/* MIDI note-on and note-off commands */
X
X#define MIDI_NOTE_ON            0x90
X#define MIDI_NOTE_OFF           0x80
X
X#define MIDI_STATUS_MASK        0x80
X
X
X#ifdef CZ101
Xstruct ToneData {
X    UBYTE lineselect_octave;
X
X    UBYTE detune_sign;
X    UBYTE detune_fine;
X    UBYTE detune_course;
X
X    UBYTE vibrato_wave;
X    UBYTE vibrato_time[3];
X    UBYTE vibrato_rate[3];
X    UBYTE vibrato_depth[3];
X
X    UBYTE DCO1_wave_form[2];
X    UBYTE DCA1_key_follow[2];
X    UBYTE DCW1_key_follow[2];
X    UBYTE DCA1_end_step;
X    UBYTE DCA1_envelope[ENVELOPESIZE];
X    UBYTE DCW1_end_step;
X    UBYTE DCW1_envelope[ENVELOPESIZE];
X    UBYTE DCO1_end_step;
X    UBYTE DCO1_envelope[ENVELOPESIZE];
X
X    UBYTE DCO2_wave_form[2];
X    UBYTE DCA2_key_follow[2];
X    UBYTE DCW2_Key_follow[2];
X    UBYTE DCA2_end_step;
X    UBYTE DCA2_envelope[ENVELOPESIZE];
X    UBYTE DWA2_end_step;
X    UBYTE DWA2_envelope[ENVELOPESIZE];
X    UBYTE DCO2_end_step;
X    UBYTE DCO2_envelope[ENVELOPESIZE];
X};
X#endif
X
X#ifdef CZ1
X
X#define MIDI_CHANNEL_MASK       0x0f
X#define MIDI_FUNCTION_MASK      0xf0
X
X/* Misc. MIDI status definitions */
X
X#define MIDI_PITCH_BEND         0xe0
X
X/* MIDI note-on and note-off commands */
X
X#define MIDI_NOTE_ON            0x90
X#define MIDI_NOTE_OFF           0x80
X
X#define MIDI_STATUS_MASK        0x80
X
X#define FIRST_INTERNAL          0x00
X#define LAST_INTERNAL           0x3F
X#define FIRST_CARTRIDGE         0x40
X#define LAST_CARTRIDGE          0x4F
X#define SOUND_DATA              0x60
X
X/* CZ-1 Tone Data Structure.
X * The only major difference between this and CZ101 is the addition of
X * the "name" field.
X */
X
Xstruct ToneData {
X    UBYTE lineAndOctave;
X
X    UBYTE detuneSign;
X    UBYTE detuneFine;
X    UBYTE detuneCoarse;
X
X    UBYTE vibratoWave;
X    UBYTE vibratoTime[3];
X    UBYTE vibratoRate[3];
X    UBYTE vibratoDepth[3];
X
X/* What follows is a very unfortunate KLUDGE!  Though we would like to
X * represent the two sets of waveform data as a two-item array, the MANX
X * compiler forces word alignment (somewhere), giving us a total structure
X * size of 146 bytes when what we really want is 144 bytes.  ARGH!
X */
X
X    UBYTE waveForms1[2];                  /* ugly, packed format */
X
X    /* NOTE: The key follow entries actually comprise a two-byte
X       word but, again, the compiler won't let us do that.  The
X       top 4 bits of the first byte (d) represents the level value,
X       using the formula d = 15 - level. The bottom 4 bits of the
X       first byte represents the "visual" key follow value, in the
X       range 0 - 9.  The second byte is some magic mapping of the
X       visual value to an internal value.                           */
X    UBYTE DCA1_KeyFollow[2];
X    UBYTE DCW1_KeyFollow[2];
X    UBYTE DCA_EndStep1;                         /* DCA velocity */
X    UBYTE DCA_Envelope1[ENVELOPESIZE];
X    UBYTE DCW_EndStep1;                         /* DCW velocity */
X    UBYTE DCW_Envelope1[ENVELOPESIZE];
X    UBYTE DCO_EndStep1;                         /* DCO1 velocity */
X    UBYTE DCO_Envelope1[ENVELOPESIZE];
X
X    UBYTE waveForms2[2];           /* slightly different than waveForms1! */
X    UBYTE DCA2_KeyFollow[2];
X    UBYTE DCW2_KeyFollow[2];
X    UBYTE DCA_EndStep2;                         /* DCA velocity */
X    UBYTE DCA_Envelope2[ENVELOPESIZE];
X    UBYTE DCW_EndStep2;                         /* DCW velocity */
X    UBYTE DCW_Envelope2[ENVELOPESIZE];
X    UBYTE DCO_EndStep2;                         /* DCO1 velocity */
X    UBYTE DCO_Envelope2[ENVELOPESIZE];
X
X    UBYTE name[16];
X};
X#endif
X
END_OF_FILE
if test 4332 -ne `wc -c <'cz.h'`; then
    echo shar: \"'cz.h'\" unpacked with wrong size!
fi
# end of 'cz.h'
fi
if test -f 'd10tva.mnu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'d10tva.mnu'\"
else
echo shar: Extracting \"'d10tva.mnu'\" \(4686 characters\)
sed "s/^X//" >'d10tva.mnu' <<'END_OF_FILE'
X/* $Id: d10tva.mnu,v 1.6 89/05/06 17:13:18 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * D10 Tone Amplifier Librarian
X *
X * Code started 24 JAN 89 --  Michael R. Kesti mrk@gvgspd.GVG.TEK.COM
X * modified by Greg Lee
X * $Log:	d10tva.mnu,v $
X * Revision 1.6  89/05/06  17:13:18  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#include "glib.h"
X#include "vis.h"
X
X#define D10TONSIZE 246
X#define RESERVESIZE 20
X
Xchar *visnum();
X
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Ldtva[] = {
X#MENU
X
X
X
XCOMMON                                   AMPLIFIER         1    2    3    4
X-----------------                        -------------------------------------
X                                            Level         %    %    %    %
X   Structures       %         %             Vel Sens      %    %    %    %
X   Partial Ena    %                         Bias Pnt 1    %    %    %    %
X   Env Mode       %                         Bias Lev 1    %    %    %    %
X                                            Bias Pnt 2    %    %    %    %
X                                            Bias Lev 2    %    %    %    %
X                                            Time KF       %    %    %    %
X                                            Time Vel Fol  %    %    %    %
X                                            Attack        %    %    %    %
X                                            Decay         %    %    %    %
X                                            Recover       %    %    %    %
X                                            Release       %    %    %    %
X                                            Attack Lev    %    %    %    %
X                                            Decay Lev     %    %    %    %
X                                            Sustain Lev   %    %    %    %
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  Pdtva[] =  {
X/*
XNAME		TYPE		POS	MAX	OFFSET	MASK	SHIFT	ADHOC
X */
X#O tva_level1		num	%%	100	55
X#O tva_level2		num	%%	100	113
X#O tva_level3		num	%%	100	171
X#O tva_level4		num	%%	100	229
X#O struct12		struct	%%	12	10
X#O struct34		struct	%%	12	11
X#O tva_vel_sens1	envlev	%%	100	56
X#O tva_vel_sens2	envlev	%%	100	114
X#O tva_vel_sens3	envlev	%%	100	172
X#O tva_vel_sens4	envlev	%%	100	230
X#O parmute		pmute	%%	15	12
X#O tva_bias_pnt_11	biaspd	%%	127	57
X#O tva_bias_pnt_12	biaspd	%%	127	115
X#O tva_bias_pnt_13	biaspd	%%	127	173
X#O tva_bias_pnt_14	biaspd	%%	127	231
X#O envmode		envmode	%%	1	13
X#O tva_bias_lev_11	tvablev	%%	12	58
X#O tva_bias_lev_12	tvablev	%%	12	116
X#O tva_bias_lev_13	tvablev	%%	12	174
X#O tva_bias_lev_14	tvablev	%%	12	232
X#O tva_bias_pnt_21	biaspd	%%	127	59
X#O tva_bias_pnt_22	biaspd	%%	127	117
X#O tva_bias_pnt_23	biaspd	%%	127	175
X#O tva_bias_pnt_24	biaspd	%%	127	233
X#O tva_bias_lev_21	tvablev	%%	12	60
X#O tva_bias_lev_22	tvablev	%%	12	118
X#O tva_bias_lev_23	tvablev	%%	12	176
X#O tva_bias_lev_24	tvablev	%%	12	234
X#O tva_time_kf1		num	%%	4	61
X#O tva_time_kf2		num	%%	4	119
X#O tva_time_kf3		num	%%	4	177
X#O tva_time_kf4		num	%%	4	235
X#O tva_time_vel_fol1	num	%%	4	62
X#O tva_time_vel_fol2	num	%%	4	120
X#O tva_time_vel_fol3	num	%%	4	178
X#O tva_time_vel_fol4	num	%%	4	236
X#O tva_attack1		num	%%	100	63
X#O tva_attack2		num	%%	100	121
X#O tva_attack3		num	%%	100	179
X#O tva_attack4		num	%%	100	237
X#O tva_decay1		num	%%	100	64
X#O tva_decay2		num	%%	100	122
X#O tva_decay3		num	%%	100	180
X#O tva_decay4		num	%%	100	238
X#O tva_recover1		num	%%	100	65
X#O tva_recover2		num	%%	100	123
X#O tva_recover3		num	%%	100	181
X#O tva_recover4		num	%%	100	239
X#O tva_release1		num	%%	100	67
X#O tva_release2		num	%%	100	125
X#O tva_release3		num	%%	100	183
X#O tva_release4		num	%%	100	241
X#O tva_attack_lev1	num	%%	100	68
X#O tva_attack_lev2	num	%%	100	126
X#O tva_attack_lev3	num	%%	100	184
X#O tva_attack_lev4	num	%%	100	242
X#O tva_decay_lev1	num	%%	100	69
X#O tva_decay_lev2	num	%%	100	127
X#O tva_decay_lev3	num	%%	100	185
X#O tva_decay_lev4	num	%%	100	243
X#O tva_sustain_lev1	num	%%	100	71
X#O tva_sustain_lev2	num	%%	100	129
X#O tva_sustain_lev3	num	%%	100	187
X#O tva_sustain_lev4	num	%%	100	245
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 * dtvadin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xdtvadin(data)
Xchar *data;
X{
X	/* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */
X#SETVAL
X}
X
X/*
X * dtvadout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xdtvadout(data)
Xchar *data;
X{
X#GETVAL
X}
X
X/* end */
END_OF_FILE
if test 4686 -ne `wc -c <'d10tva.mnu'`; then
    echo shar: \"'d10tva.mnu'\" unpacked with wrong size!
fi
# end of 'd10tva.mnu'
fi
if test -f 'd10tvf.mnu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'d10tvf.mnu'\"
else
echo shar: Extracting \"'d10tvf.mnu'\" \(4831 characters\)
sed "s/^X//" >'d10tvf.mnu' <<'END_OF_FILE'
X/* $Id: d10tvf.mnu,v 1.6 89/05/06 17:13:18 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * D10 Tone Filter Librarian
X *
X * Code started 24 JAN 89 --  Michael R. Kesti mrk@gvgspd.GVG.TEK.COM
X * modified by Greg Lee
X * $Log:	d10tvf.mnu,v $
X * Revision 1.6  89/05/06  17:13:18  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#include "glib.h"
X#include "vis.h"
X
X#define D10TONSIZE 246
X#define RESERVESIZE 20
X
Xchar *visnum();
X
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Ldtvf[] = {
X#MENU
X
X
X
XCOMMON                                   FILTER            1    2    3    4
X-----------------                        -------------------------------------
X                                            Cutoff Freq   %    %    %    %
X   Structures       %         %             Resonance     %    %    %    %
X   Partial Ena    %                         Freq KF       %    %    %    %
X   Env Mode       %                         Bias Pnt/Dir  %    %    %    %
X                                            Bias Lev      %    %    %    %
X                                            Depth         %    %    %    %
X                                            Vel Sens      %    %    %    %
X                                            Depth KF      %    %    %    %
X                                            Time KF       %    %    %    %
X                                            Attack        %    %    %    %
X                                            Decay         %    %    %    %
X                                            Recover       %    %    %    %
X                                            Release       %    %    %    %
X                                            Attack Lev    %    %    %    %
X                                            Decay Lev     %    %    %    %
X                                            Sustain Lev   %    %    %    %
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  Pdtvf[] =  {
X/*
XNAME		TYPE		POS	MAX	OFFSET	MASK	SHIFT	ADHOC
X */
X#O tvf_cutoff_freq1	num	%%	100	37
X#O tvf_cutoff_freq2	num	%%	100	95
X#O tvf_cutoff_freq3	num	%%	100	153
X#O tvf_cutoff_freq4	num	%%	100	211
X#O struct12		struct	%%	12	10
X#O struct34		struct	%%	12	11
X#O tvf_resonance1	num	%%	30	38
X#O tvf_resonance2	num	%%	30	96
X#O tvf_resonance3	num	%%	30	154
X#O tvf_resonance4	num	%%	30	212
X#O parmute		pmute	%%	15	12
X#O tvf_freq_kf1		tkeyfol	%%	14	39
X#O tvf_freq_kf2		tkeyfol	%%	14	97
X#O tvf_freq_kf3		tkeyfol	%%	14	155
X#O tvf_freq_kf4		tkeyfol	%%	14	213
X#O envmode		envmode	%%	1	13
X#O tvf_bias_pntdir1	biaspd	%%	127	40
X#O tvf_bias_pntdir2	biaspd	%%	127	98
X#O tvf_bias_pntdir3	biaspd	%%	127	156
X#O tvf_bias_pntdir4	biaspd	%%	127	214
X#O tvf_bias_lev1	biaslev	%%	14	41
X#O tvf_bias_lev2	biaslev	%%	14	99
X#O tvf_bias_lev3	biaslev	%%	14	157
X#O tvf_bias_lev4	biaslev	%%	14	215
X#O tvf_depth1		num	%%	100	42
X#O tvf_depth2		num	%%	100	100
X#O tvf_depth3		num	%%	100	158
X#O tvf_depth4		num	%%	100	216
X#O tvf_vel_sens1	num	%%	100	43
X#O tvf_vel_sens2	num	%%	100	101
X#O tvf_vel_sens3	num	%%	100	159
X#O tvf_vel_sens4	num	%%	100	217
X#O tvf_depth_kf1	num	%%	4	44
X#O tvf_depth_kf2	num	%%	4	102
X#O tvf_depth_kf3	num	%%	4	160
X#O tvf_depth_kf4	num	%%	4	218
X#O tvf_time_kf1		num	%%	4	45
X#O tvf_time_kf2		num	%%	4	103
X#O tvf_time_kf3		num	%%	4	161
X#O tvf_time_kf4		num	%%	4	219
X#O tvf_attack1		num	%%	100	46
X#O tvf_attack2		num	%%	100	104
X#O tvf_attack3		num	%%	100	162
X#O tvf_attack4		num	%%	100	219
X#O tvf_decay1		num	%%	100	47
X#O tvf_decay2		num	%%	100	105
X#O tvf_decay3		num	%%	100	163
X#O tvf_decay4		num	%%	100	220
X#O tvf_recover1		num	%%	100	48
X#O tvf_recover2		num	%%	100	106
X#O tvf_recover3		num	%%	100	164
X#O tvf_recover4		num	%%	100	221
X#O tvf_release1		num	%%	100	50
X#O tvf_release2		num	%%	100	108
X#O tvf_release3		num	%%	100	166
X#O tvf_release4		num	%%	100	223
X#O tvf_attack_lev1	num	%%	100	51
X#O tvf_attack_lev2	num	%%	100	109
X#O tvf_attack_lev3	num	%%	100	167
X#O tvf_attack_lev4	num	%%	100	224
X#O tvf_decay_lev1	num	%%	100	52
X#O tvf_decay_lev2	num	%%	100	110
X#O tvf_decay_lev3	num	%%	100	168
X#O tvf_decay_lev4	num	%%	100	225
X#O tvf_sustain_lev1	num	%%	100	54
X#O tvf_sustain_lev2	num	%%	100	112
X#O tvf_sustain_lev3	num	%%	100	170
X#O tvf_sustain_lev4	num	%%	100	227
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 * dtvfdin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xdtvfdin(data)
Xchar *data;
X{
X	/* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */
X#SETVAL
X}
X
X/*
X * dtvfdout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xdtvfdout(data)
Xchar *data;
X{
X#GETVAL
X}
X
X/* end */
END_OF_FILE
if test 4831 -ne `wc -c <'d10tvf.mnu'`; then
    echo shar: \"'d10tvf.mnu'\" unpacked with wrong size!
fi
# end of 'd10tvf.mnu'
fi
if test -f 'd10wfg.mnu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'d10wfg.mnu'\"
else
echo shar: Extracting \"'d10wfg.mnu'\" \(5670 characters\)
sed "s/^X//" >'d10wfg.mnu' <<'END_OF_FILE'
X/* $Id: d10wfg.mnu,v 1.6 89/05/06 17:13:19 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * D10 Tone Waveform Generator Librarian
X *
X * Code started 24 JAN 89 --  Michael R. Kesti mrk@gvgspd.GVG.TEK.COM
X * modified by Greg Lee
X * $Log:	d10wfg.mnu,v $
X * Revision 1.6  89/05/06  17:13:19  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#include "glib.h"
X#include "vis.h"
X
X#define D10TONSIZE 246
X#define RESERVESIZE 20
X
Xchar *visnum(), *visonoff();
X
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Ldwfg[] = {
X
X#MENU for wfg
X
X
X
XCOMMON                                   PITCH ENV         1    2    3    4
X-----------------                        -------------------------------------
X                                            Depth	  @    @    @    @ 
X   Structures       %         %		    Vel Sens	  @    @    @    @ 
X   Partial Ena    %			    Time KF	  @    @    @    @ 
X   Env Mode	  %			    Attack	  @    @    @    @ 
X					    Decay	  @    @    @    @ 
XWAVEFORM GEN      1    2    3    4	    Recover	  @    @    @    @ 
X-------------------------------------	    Release	  @    @    @    @ 
X   Coarse Pitch	 %    %    %    %	    Start Lev	  @    @    @    @ 
X   Fine Pitch    %    %    %    %	    Attack Lev	  @    @    @    @ 
X   Pitch KF	 %    %    %    %	    Decay Lev	  @    @    @    @ 
X   Bend Switch	 %    %    %    %	    End Lev	  @    @    @    @ 
X   Wave/PCMBank	 %    %    %    %	    LFO Rate	  @    @    @    @ 
X   PCM Number	 %    %    %    %	    LFO Depth	  @    @    @    @ 
X   Pulse Width	 %    %    %    %	    Mod Sens	  @    @    @    @ 
X   PW Vel Sens	 %    %    %    %
X
X
X
X Press SPACE BAR to sound note @   at volume @   for duration @  on channel @ .
X#END wfg menu
X
X-1,-1,NULL
X};
X
Xstruct paraminfo Pdwfg[] = {
X
X/*NAME			TYPE		POS	MAX	OFFSET MASK SHIFT ADHOC
X*/
X
X#O struct12		struct		%%	12	10
X#O struct34		struct		%%	12	11
X#O parmute		pmute		%%	15	12
X#O envmode		envmode		%%	1	13
X
X#O wg_coarse_pitch1	cpitch		%%	96	14
X#O wg_coarse_pitch2	cpitch		%%	96	72
X#O wg_coarse_pitch3	cpitch		%%	96	130
X#O wg_coarse_pitch4	cpitch		%%	96	188
X#O wg_fine_pitch1	finetune	%%	100	15
X#O wg_fine_pitch2	finetune	%%	100	73
X#O wg_fine_pitch3	finetune	%%	100	131
X#O wg_fine_pitch4	finetune	%%	100	189
X#O wg_pitch_kf1		pkeyfol		%%	16	16
X#O wg_pitch_kf2		pkeyfol		%%	16	74
X#O wg_pitch_kf3		pkeyfol		%%	16	132
X#O wg_pitch_kf4		pkeyfol		%%	16	190
X#O wg_bend_switch1	onoff		%%	1	17
X#O wg_bend_switch2	onoff		%%	1	75
X#O wg_bend_switch3	onoff		%%	1	133
X#O wg_bend_switch4	onoff		%%	1	191
X#O wg_wave_bank1	wavebank	%%	3	18
X#O wg_wave_bank2	wavebank	%%	3	76
X#O wg_wave_bank3	wavebank	%%	3	134
X#O wg_wave_bank4	wavebank	%%	3	192
X#O wg_pcm_number1	pcmnum		%%	127	19
X#O wg_pcm_number2	pcmnum		%%	127	77
X#O wg_pcm_number3	pcmnum		%%	127	135
X#O wg_pcm_number4	pcmnum		%%	127	193
X#O wg_pulse_width1	num		%%	100	20
X#O wg_pulse_width2	num		%%	100	78
X#O wg_pulse_width3	num		%%	100	136
X#O wg_pulse_width4	num		%%	100	194
X#O wg_pw_vel_sens1	velsens		%%	14	21
X#O wg_pw_vel_sens2	velsens		%%	14	79
X#O wg_pw_vel_sens3	velsens		%%	14	137
X#O wg_pw_vel_sens4	velsens		%%	14	195
X
X#O penv_depth1		num		@@	10	22
X#O penv_depth2		num		@@	10	80
X#O penv_depth3		num		@@	10	138
X#O penv_depth4		num		@@	10	196
X#O penv_vel_sens1	num		@@	3	23
X#O penv_vel_sens2	num		@@	3	81
X#O penv_vel_sens3	num		@@	3	139
X#O penv_vel_sens4	num		@@	3	197
X#O penv_time_kf1	num		@@	4	24
X#O penv_time_kf2	num		@@	4	82
X#O penv_time_kf3	num		@@	4	140
X#O penv_time_kf4	num		@@	4	198
X#O penv_attack1		num		@@	100	25
X#O penv_attack2		num		@@	100	83
X#O penv_attack3		num		@@	100	141
X#O penv_attack4		num		@@	100	199
X#O penv_decay1		num		@@	100	26
X#O penv_decay2		num		@@	100	83
X#O penv_decay3		num		@@	100	142
X#O penv_decay4		num		@@	100	200
X#O penv_recover1	num		@@	100	27
X#O penv_recover2	num		@@	100	85
X#O penv_recover3	num		@@	100	143
X#O penv_recover4	num		@@	100	201
X#O penv_release1	num		@@	100	28
X#O penv_release2	num		@@	100	86
X#O penv_release3	num		@@	100	144
X#O penv_release4	num		@@	100	202
X#O penv_start_lev1	envlev		@@	100	29
X#O penv_start_lev2	envlev		@@	100	87
X#O penv_start_lev3	envlev		@@	100	145
X#O penv_start_lev4	envlev		@@	100	203
X#O penv_attack_lev1	envlev		@@	100	30
X#O penv_attack_lev2	envlev		@@	100	88
X#O penv_attack_lev3	envlev		@@	100	146
X#O penv_attack_lev4	envlev		@@	100	206
X#O penv_decay_lev1	envlev		@@	100	31
X#O penv_decay_lev2	envlev		@@	100	89
X#O penv_decay_lev3	envlev		@@	100	147
X#O penv_decay_lev4	envlev		@@	100	205
X
X#O penv_end_lev1	envlev		@@	100	33
X#O penv_end_lev2	envlev		@@	100	91
X#O penv_end_lev3	envlev		@@	100	149
X#O penv_end_lev4	envlev		@@	100	207
X#O penv_lfo_rate1	num		@@	100	34
X#O penv_lfo_rate2	num		@@	100	92
X#O penv_lfo_rate3	num		@@	100	150
X#O penv_lfo_rate4	num		@@	100	208
X#O penv_lfo_depth1	num		@@	100	35
X#O penv_lfo_depth2	num		@@	100	93
X#O penv_lfo_depth3	num		@@	100	151
X#O penv_lfo_depth4	num		@@	100	209
X#O penv_mod_sens1	num		@@	100	36
X#O penv_mod_sens2	num		@@	100	94
X#O penv_mod_sens3	num		@@	100	152
X#O penv_mod_sens4	num		@@	100	210
X
X
X"autopitch",	NULL,	-1,-1, @@, visnum, 	0, 127, 60, 0,
X"autovol",	NULL,	-1,-1, @@, visnum, 	0, 127, 63, 0,
X"autodur",	NULL,	-1,-1, @@, visnum, 	1,  20,  5, 0,
X"autochan",	NULL,	-1,-1, @@, visnum, 	1,  16,  1, 0,
X
XNULL,		NULL,	-1,-1, -1, -1, visnum, 	0,   0, 0, 0
X};
X
X
X/*
X * dwfgdin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xdwfgdin(data)
Xchar *data;
X{
X	/* The first RESERVESIZE bytes are reserved (arbitrarily) for the voice name */
X#SETVAL
X}
X
X/*
X * dwfgdout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xdwfgdout(data)
Xchar *data;
X{
X#GETVAL
X}
X
X/* end */
END_OF_FILE
if test 5670 -ne `wc -c <'d10wfg.mnu'`; then
    echo shar: \"'d10wfg.mnu'\" unpacked with wrong size!
fi
# end of 'd10wfg.mnu'
fi
if test -f 'k1single.mnu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'k1single.mnu'\"
else
echo shar: Extracting \"'k1single.mnu'\" \(4279 characters\)
sed "s/^X//" >'k1single.mnu' <<'END_OF_FILE'
X/* $Id: k1single.mnu,v 1.6 89/05/06 17:13:28 lee Exp $
X * GLIB - a Generic LIBrarian and editor for synths
X *
X * K1 Tone Waveform Generator Librarian
X *
X * Adapted for K1 from Kesti's D10 version by Greg Lee
X * $Log:	k1single.mnu,v $
X * Revision 1.6  89/05/06  17:13:28  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#include "glib.h"
X#include "k1vis.h"
X
X#define RESERVESIZE 0
X
X/* This array contains arbitrary screen labels */
Xstruct labelinfo Lk1sng[] = {
X
X#MENU for single
X			volume  %
X					 WAVE
X					 ---mute--select------------------am--
XCOMMON                                   1  @     @
X-----------------                        2  @	  @			  @
X source       %    a.bend time   %       3  @     @
X vibr depth   %    a.bend vel>dp %	 4  @     @			  @
X vibr speed   %    a.bend ks>tm  %
X vibr shape   %    prs->freq	 %	 ENVELOPE	   1    2    3    4
X prs->depth   %    pitch bend    %	 -------------------------------------
X vibr wheel   %    ks curve	 %	    level	  @    @    @    @
X a.bend depth %    poly mode	 %	    delay	  @    @    @    @
X					    attack	  @    @    @    @
XFREQUENCY         1    2    3    4	    decay	  @    @    @    @ 
X-------------------------------------	    sustain	  @    @    @    @ 
X   key track   	 %    %    %    %	    release	  @    @    @    @
X   fcoarse/fixk  %    %    %    %	    vel curve	  @    @    @    @
X   fine pitch	 %    %    %    %	    level mod vel @    @    @    @
X   fm vib/a.bend %    %    %    %	    level mod prs @    @    @    @ 
X   fm md prs>fq  %    %    %    %	    level mod ks  @    @    @    @ 
X   ks->freq   	 %    %    %    %	    time mod vel  @    @    @    @ 
X					    time mod ks	  @    @    @    @ 
X
X Press SPACE BAR to sound note @   at volume @   for duration @  on channel @ .
X#END single menu
X
X-1,-1,NULL
X};
X
Xstruct paraminfo Pk1sng[] = {
X
X/*NAME		TYPE		POS	MAX	OFFSET	MASK	SHIFT	ADHOC*/
X 
X#O volume	pnum		%%	99	10
X
X#O src_24	twofour		%%	1	11	0x4	2
X#O ab_tim	num		%%	100	19
X#O vb_dep	finetune	%%	100	13
X#O abveld	finetune	%%	100	20
X#O ifo_sp	num		%%	100	16
X#O abksti	finetune	%%	100	21
X#O ifo_sh	ifosh		%%	3	17	0x3
X#O prs_fq	finetune	%%	100	12
X#O vb_prs	finetune	%%	100	14
X#O p_bend	num		%%	12	15
X#O vb_whl	vbwh		%%	1	17	0x60	5
X#O ks_crv	crv		%%	4	17	0x1C	2
X#O ab_dep	finetune	%%	100	18
X#O poly_m	polym		%%	2	11	0x3
X
X#O ky_tk1	onoffk1		%%	1	35	0x2	1
X#O ky_tk2	onoffk2		%%	1	36	0x2	1
X#O ky_tk3	onoffk3		%%	1	37	0x2	1
X#O ky_tk4	onoffk4		%%	1	38	0x2	1
X#O csfn1	csfnk1		%%	127	27
X#O csfn2	csfnk2		%%	127	28
X#O csfn3	csfnk3		%%	127	29
X#O csfn4	csfnk4		%%	127	30
X#O 4fine	finetune	%%	100	23
X#O vb_ab1	onoff		%%	1	35	0x4	2
X#O vb_ab2	onoff		%%	1	36	0x4	2
X#O vb_ab3	onoff		%%	1	37	0x4	2
X#O vb_ab4	onoff		%%	1	38	0x4	2
X#O prsfq1	onoff		%%	1	35	0x8	3
X#O prsfq2	onoff		%%	1	36	0x8	3
X#O prsfq3	onoff		%%	1	37	0x8	3
X#O prsfq4	onoff		%%	1	38	0x8	3
X#O 4fksfq	finetune	%%	100	83
X
X#O s1mute	mute		@@	1	22	0x1
X#O wave1	wave		@@	255	31			*3
X#O wvmsb1	num		--	1	35	0x1		*4
X#O s2mute	mute		@@	1	22	0x2	1
X#O wave2	wave		@@	255	32			*3
X#O wvmsb2	num		--	1	36	0x1		*4
X#O am_12	am1		@@	2	11	0x18	3
X#O s3mute	mute		@@	1	22	0x4	2
X#O wave3	wave		@@	255	33			*3
X#O wvmsb3	num		--	1	37	0x1		*4
X#O s4mute	mute		@@	1	22	0x8	3
X#O wave4	wave		@@	255	34			*3
X#O wvmsb4	num		--	1	38	0x1		*4
X#O am_34	am3		@@	2	11	0x60	5
X
X#O 4envlv	num		@@	100	39
X#O 4envdl	num		@@	100	43
X#O 4envat	num		@@	100	47
X#O 4envdc	num		@@	100	51
X#O 4envsu	num		@@	100	55
X#O 4envre	num		@@	100	59
X#O vlcrv1	pnum		@@	7	35	0x70	4
X#O vlcrv2	pnum		@@	7	36	0x70	4
X#O vlcrv3	pnum		@@	7	37	0x70	4
X#O vlcrv4	pnum		@@	7	38	0x70	4
X#O 4lmvel	finetune	@@	100	63
X#O 4lmprs	finetune	@@	100	67
X#O 4lm_ks	finetune	@@	100	71
X#O 4tmvel	finetune	@@	100	75
X#O 4tm_ks	finetune	@@	100	79
X
X"autopitch",	NULL,	-1,-1, @@, visnum, 	0, 127, 60, 0,
X"autovol",	NULL,	-1,-1, @@, visnum, 	0, 127, 63, 0,
X"autodur",	NULL,	-1,-1, @@, visnum, 	1,  20,  5, 0,
X"autochan",	NULL,	-1,-1, @@, visnum, 	1,  16,  1, 0,
X
XNULL,		NULL,	-1,-1, -1, -1, visnum, 	0,   0, 0, 0
X};
X
X
X/*
X * k1sdin
X *
X * Take library bank 'data' and stuff values in the P array, by using
X * the setval function.
X */
X
Xk1sdin(data)
Xchar *data;
X{
X#SETVAL
X}
X
X/*
X * k1sdout
X *
X * Take (possibly changed) parameters values out of the P array and
X * put them back into the library bank 'data'.
X */
X
Xk1sdout(data)
Xchar *data;
X{
X#GETVAL
X}
X
X/* end */
END_OF_FILE
if test 4279 -ne `wc -c <'k1single.mnu'`; then
    echo shar: \"'k1single.mnu'\" unpacked with wrong size!
fi
# end of 'k1single.mnu'
fi
if test -f 'pc-mach.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pc-mach.h'\"
else
echo shar: Extracting \"'pc-mach.h'\" \(4748 characters\)
sed "s/^X//" >'pc-mach.h' <<'END_OF_FILE'
X/* $Id: pc-mach.h,v 1.6 89/05/06 17:13:40 lee Exp $
X *
X * Machine-dependent stuff for DOS.  Has only been tested with Turbo C 2.0.
X * $Log:	pc-mach.h,v $
X * Revision 1.6  89/05/06  17:13:40  lee
X * rel. to comp.sources.misc
X * 
X */
X
X#include <dos.h>
X#include <dir.h>
X#include <stdio.h>
X#include <ctype.h>
X#include <fcntl.h>
X#include <errno.h>
X#include <sys/stat.h>
X
X#define TURBOC
X
X#define MIDIABLE
X
X#define OPENBINFILE(f,name,mode) f=fopen(name,mode[0]=='r'?"rb":"wb")
X#define OPENTEXTFILE(f,name,mode) f=fopen(name,mode[0]=='r'?"rt":"wt")
X
Xextern unsigned long hzcount;
Xextern int wrt_index, rd_index;
Xextern int Nextpcchar;
X
X#define INT16 int
X
X#define STATMIDI (wrt_index==rd_index?0:1)
X#define STATCONSOLE (Nextpcchar!=EOF?1:(kbhit()?(Nextpcchar=getch(),1):0))
X#define RTSTART rtstart()
X#define RTEND rtend()
X#define KEYCHECK keycheck()
X#define TTYISRAW
X#define NEEDSECHO
X
X#define SEPARATOR "\\"
X#define CORELEFT coreleft
X/* fake ones for a fake signal() */
X#define SIGINT 1
X#define SIG_IGN 0
X
X/* CLOCK DEFINES */
X
X#define MASTER_CLOCK_RATE	96		/* 96 CLOCKS PER BEAT */
X#define MIDI_CLOCKS_PER_BEAT	24
X
X/* MISC INTERNAL DEFINES */
X
X#define REC_CTRL_ALL	  1
X#define REC_CTRL_NO_BEND  0	
X#define REC_CTRL_NO_PRESS 2
X
X#define COMMAND_MSG 	0
X#define READ_MSG 	1
X#define WRITE_MSG	2
X
X#define SHELL_USE_INTERNAL_CLOCK 0
X#define SHELL_USE_TAPE_CLOCK 1
X#define SHELL_USE_MIDI_CLOCK 2
X
X/* CODES FOR THE COMMANDS THAT ARE SENT TO THE MIC */
X
X#define PLAY_STOP		0x05
X#define PLAY_START		0x0A
X#define REC_STOP		0x11
X#define OVERDUB_STOP		0x15
X#define RECORD_STANDBY		0x20
X#define REC_START		0x22
X#define OVERDUB_START		0x2A
X#define NO_ALL_NOTES_OFF	0x30
X#define NO_REAL_TIME		0x32
X#define THRU_DEAD		0x33
X#define COMMON_TO_HOST		0x38
X#define REAL_TIME_IN		0x39
X#define UART			0x3f
X#define SET_REFA		0x40
X#define USE_INTERNAL_CLOCK	0x80
X#define USE_TAPE_CLOCK		0x81
X#define USE_MIDI_CLOCK		0x82
X#define METRONOME_ON_NORMAL	0x83
X#define METRONOME_OFF		0x84
X#define METRONOME_ON_DOUBLE	0x85
X#define BENDER_OFF		0x86
X#define BENDER_ON		0x87
X#define THRU_OFF 		0x88
X#define THRU_ON			0x89
X#define INHIBIT_MEASURE_END	0x8C
X#define REQUEST_MEASURE_END	0x8D
X#define CONDUCTOR_OFF		0x8e
X#define CONDUCTOR_ON		0x8f
X#define RTM_AFFECT_OFF		0x90
X#define RTM_AFFECT_ON		0x91
X#define FSK_TO_INT		0x92
X#define FSK_TO_MIDI		0x93
X#define CLOCK_TO_HOST_OFF	0x94
X#define CLOCK_TO_HOST_ON	0x95
X#define CREFA_OFF		0x98
X#define READ_RESET_RECORD_CTR	0xAB
X#define TEMPO_REQUEST		0xAF
X#define CLEAR_PLAY_COUNTERS	0xB8
X#define CLEAR_PLY		0xb9
X#define SET_CLOCK_RES		0xc2
X#define SEND_DATA		(0xd0 + 7)	/* send on track 7 */
X#define SEND_SYSTEM		0xdf
X#define SET_TEMPO		0xE0
X#define CLOCKS_PER_BEAT		0xE4
X#define BEATS_PER_MEASURE	0xE6
X#define CLOCK_TO_HOST_RATE	0xe7
X#define ACTIVE_TRACKS		0xEC
X#define ACCEPT_CHANNELS_LOW	0xEE
X#define ACCEPT_CHANNELS_HIGH	0xEF
X#define TIMING_OVERFLOW		0xF8
X#define SEND_NULL		0xF8
X#define MEASURE_END		0xf9
X#define DATA_END		0xfc
X#define RESET			0xFF
X
X/* CODES FOR THE MESSAGES THAT ARE READ FROM THE MIC */
X
X#define REQUEST_PLAY_DATA	0xF0
X#define TIMING_OVERFLOW		0xF8
X#define DATA_END_MARK		0xFC
X#define ALL_END			0xFC
X/* #define MEASURE_END		0xF9  avoid redefinition */
X#define CONDUCT_REQ		0xf9
X#define CLOCK_TO_HOST		0xFD
X#define ACK			0Xfe
X#define SYSTEM_MSG		0xff
X
X/* HARDWARE LEVEL ACCESS TO THE MIC, FROM 'C' */
X
X#define BASE_ADDRESS_MIC	0X0330
X#define STATUS_PORT_MIC		BASE_ADDRESS_MIC + 1
X#define COMMAND_PORT_MIC	BASE_ADDRESS_MIC + 1
X#define DATA_OUT_PORT_MIC	BASE_ADDRESS_MIC + 0
X#define DATA_IN_PORT_MIC	BASE_ADDRESS_MIC + 0
X#define INT_MIC			2
X#define INT2 			10
X#define DATA_READY_MIC_MASK	0x40
X#define DATA_AVAILABLE_MIC_MASK 0x80
X#define INT_RESET_PORT		0x20
X#define INT_RESET_CODE		0x20
X#define PC_INTERRUPT_MASK_REGISTER 0x21
X
X
X/* INPUT/OUTPUT LOW LEVEL MACROS */
X
X#define NOT_READY_FOR_DATA_MIC() (inportb(STATUS_PORT_MIC) & \
X				    DATA_READY_MIC_MASK)
X#define NOT_DATA_AVAILABLE_MIC() (inportb(STATUS_PORT_MIC) & \
X				    DATA_AVAILABLE_MIC_MASK)
X#define COMMAND_OUT_MIC(com) 	X	Ioptr->ibuf = alloc(MIDIBUFSIZ);