home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume6
/
glib
/
part08
/
dep5.mnu
next >
Wrap
Text File
|
1989-05-14
|
19KB
|
911 lines
/* $Id: dep5.mnu,v 1.6 89/05/06 17:13:20 lee Exp $
* GLIB - a Generic LIBrarian and editor for synths
*
* DEP-5 routines.
* Tim Thompson
*
* The DEP-5 is a mess, the code below is likewise. There are only 12
* parameters or so, but there are 11 algorithms, and different parameters
* have different meanings and ranges in each algorithm. Also, the displayed
* values have NO regular relationship to the byte values of the parameters,
* hence the need for all the huge tables.
*
* modifications: Greg Lee
* $Log: dep5.mnu,v $
* Revision 1.6 89/05/06 17:13:20 lee
* rel. to comp.sources.misc
*
*
*/
#define OVERLAY2
#include "glib.h"
#include <ctype.h>
#define DEP5VSIZE 42
#define DEP5NSIZE 16
#define DEP5NVOICES 99
#define RESERVESIZE 0
char D5buff[16];
int Alg; /* current algorithm, 0-10 */
char *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
char *visd5alg(), *visdcr(), *visdcd(), *visdcf(), *visdrs(), *visd5pd();
char *visd5rt(), *visd5hf(), *visd5no(), *visd5q(), *visd5fm(), *visd5bc();
struct numpair {
int np_byte;
int np_val;
};
struct hfpair {
short hf_byte;
short hf_val;
};
#define NUMHF 96
#define NUMCD 223
#define NUMFREQ 128
#define NUMGATE 256
#define NUMCF 256
#define NUMCR 97
#define NUMNLRT 151
#define NUMRT 153
#define NUMDT 256
#define NUMPD 256
struct numpair *Revtime;
struct numpair *Nlrevtime;
struct hfpair *Hf;
struct numpair *Chdepth;
struct numpair *Chrate;
int *Predly;
int *Chfeed;
int *Dtime;
int *Freqmid;
int *Gatetime;
/* This array contains arbitrary screen labels */
struct labelinfo Ldep5[] = {
#MENU
Algorithm %
===========
<Equalizer> <Chorus>
Output Level % Feedback of Chorus %
Boost/Cut of Low % Rate of Chorus %
Boost/Cut of Mid % Depth of Chorus %
Boost/Cut of High % <Reverb>
Q of Mid % Pre-Delay %
Freq (KHz) of Mid % Reverb Time %
HF Damping %
-------------------------+ Reverb Selection %
N - set name q - quit | <Non-Linear>
h - left j - down |
k - up l - right |
J - decr K - incr |
space = play auto-note |
| <Delay>
Auto-Note: |
Pitch % Vol % |
Dur % Chan % |
|
#END
-1,-1,NULL
};
struct paraminfo Pdep5[] = {
/*
NAME TYPE POS MAX OFFSET MASK SHIFT ADHOC
*/
#O algorithm d5alg %% 10 0
#O chorfeed dcf %% 255 0
#O outlev num %% 99 1
#O chorrate dcr %% 96 0
#O lowfilt d5bc %% 24 0
#O chordepth dcd %% 222 0
#O midfilt d5bc %% 24 0
#O highfilt d5bc %% 24 0
#O predelay d5pd %% 255 0
#O q d5q %% 90 2
#O reverbtime d5rt %% 152 0
#O freqmid d5fm %% 127 3
#O hfdamp d5hf %% 95 0
#O reverbsel drs %% 21 0
#O autovol num %% 127 -63
#O autopitch num %% 127 -60
#O autochan num %% 16 -1 *5
#O autodur num %% 20 -5 *5
NULL,NULL,-1,-1,-1,-1,visnum,0,0,0,0
};
/*
* dep5din
*
* Take info from 'data' and stuff values in the P array, by using
* the setval functionms.
*/
dep5din(data)
char *data;
{
initdp5();
Alg = d5algin(data[16] | ((data[17]&0xf)<<4));
setval("algorithm", Alg);
setval("reverbsel",data[0]);
setval("outlev",data[1]);
setval("q",data[2]);
setval("freqmid",data[3]);
/* these parameters take up 2 bytes (4bits in each) */
setval("lowfilt", d5bcin(data[4] | ((data[5]&0xf)<<4)) );
setval("midfilt", d5bcin(data[6] | ((data[7]&0xf)<<4)) );
setval("highfilt", d5bcin(data[8] | ((data[9]&0xf)<<4)) );
setval("chorfeed", data[10] | ((data[11]&0xf)<<4) );
setval("chorrate",d5vin(Chrate,data[12] | ((data[13]&0xf)<<4)));
setval("chordepth",d5vin(Chdepth,data[14] | ((data[15]&0xf)<<4)));
setval("predelay", data[18] | ((data[19]&0xf)<<4) );
setval("reverbtime", d5rtin(data[20] | ((data[21]&0xf)<<4)) );
setval("hfdamp", d5hfin(data[22] | ((data[23]&0xf)<<4)) );
setval("autochan",Channel);
}
/*
* dep5dout
*
* Take (possibly changed) parameters values out of the P array and
* put them back into 'data'.
*/
dep5dout(data)
char *data;
{
int n, alg;
alg = d5algout(getval("algorithm"));
data[16] = alg & 0xf;
data[17] = (alg >> 4) & 0xf;
data[0] = getval("reverbsel");
data[1] = getval("outlev");
data[2] = getval("q");
data[3] = getval("freqmid");
/* these parameters take up 2 bytes (4bits in each) */
n = d5bcout(getval("lowfilt"));
data[4] = n & 0xf;
data[5] = (n >> 4) & 0xf;
n = d5bcout(getval("midfilt"));
data[6] = n & 0xf;
data[7] = (n >> 4) & 0xf;
n = d5bcout(getval("highfilt"));
data[8] = n & 0xf;
data[9] = (n >> 4) & 0xf;
n = getval("chorfeed");
data[10] = n & 0xf;
data[11] = (n >> 4) & 0xf;
n = d5crout(getval("chorrate"));
data[12] = n & 0xf;
data[13] = (n >> 4) & 0xf;
n = d5cdout(getval("chordepth"));
data[14] = n & 0xf;
data[15] = (n >> 4) & 0xf;
n = getval("predelay");
data[18] = n & 0xf;
data[19] = (n >> 4) & 0xf;
n = d5rtout(getval("reverbtime"));
data[20] = n & 0xf;
data[21] = (n >> 4) & 0xf;
n = d5hfout(getval("hfdamp"));
data[22] = n & 0xf;
data[23] = (n >> 4) & 0xf;
Channel = getval("autochan");
}
/*
* dep5sedit
*
* Send a single voice to the edit buffer of the dep5.
*/
dep5sedit(data)
char *data;
{
dep5parms(data);
}
dep5parms(data)
char *data;
{
int n;
sendmidi(0xf0);
sendmidi(0x41); /* Roland */
sendmidi(0x35); /* operation code = APR (all parameters) */
sendmidi(Channel-1); /* MIDI channel */
sendmidi(0x52); /* format type */
sendmidi(0x20); /* level # = 1 */
sendmidi(0x01); /* group # = 1 */
/* send 24 bytes of parameter info */
for ( n=0; n<24; n++ ) {
sendmidi((int)(data[n]));
}
sendmidi(EOX);
}
/* dep5nof - return a pointer to the voice name buried in data */
char *
dep5nof(data)
char *data;
{
static char currbuff[DEP5NSIZE+1];
char *p;
int m;
p = currbuff;
for ( m=0; m<DEP5NSIZE; m++ )
*p++ = data[24+m];
*p = '\0';
return(currbuff);
}
/* setnameof - set the voice name buried in data to name */
dep5snof(data,name)
char *data;
char *name;
{
char *p;
int m;
for ( p=name,m=0; *p!='\0' && m<DEP5NSIZE; p++,m++ )
data[24+m] = *p;
for ( ; m<DEP5NSIZE; m++ )
data[24+m] = '\0';
}
/* dep5sone - send and store one voice */
dep5sone(voicenum,data)
char *data;
{
/* Send the parameters for this voice. */
dep5parms(data);
/* now ask it to be stored into memory */
sendmidi(0xf0);
sendmidi(0x41); /* Roland */
sendmidi(0x34); /* operation code = PGR (program #) */
sendmidi(Channel-1); /* MIDI channel */
sendmidi(0x52); /* format type */
sendmidi(0x20); /* level # = 1 */
sendmidi(0x00); /* group # = 0 */
sendmidi(0x00); /* extension = 0 */
sendmidi(voicenum & 0x7f); /* memory number (minus 1) */
sendmidi(0x02); /* writing data to memory */
sendmidi(EOX);
Reason = "";
return(0); /* can't fail */
}
char *D5alg[] = {
"1 ---EQ---Chorus---<~u/----~d~d~l~l~l~l~l\\----",
"2 ---EQ---Reverb---<~u/----~d~d~l~l~l~l~l\\----",
"3 ---EQ---Reverb(Mod)---<~u/----~d~d~l~l~l~l~l\\----",
"4 ---EQ---Reverb(Mod)---Chorus---<~u/----~d~d~l~l~l~l~l\\----",
"5 ---EQ-+-Reverb--< +-Chorus---<~u/~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l\
/~u/--------------+---~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~d~d~d~\
l~l~l~l~l~l~l~l~l|__________\\__|~l~l~l~d\\--------------~l~u\\~d+---",
"6 ---EQ---Reverb--<--Chorus---<~u/~l~l~l~l~l~l~l~l~l~l~l~l~l\
/~u/-----------+---~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~d~d~d~\
l\\~d\\-----------~l~u\\~d+---",
"7 ---EQ---NLR---<~u/----~d~d~l~l~l~l~l\\----",
"8 ---EQ---NLR(Mod)---<~u/----~d~d~l~l~l~l~l\\----",
"9 ---EQ---NLR--<--Chorus---<~u/~l~l~l~l~l~l~l~l~l~l~l~l~l\
/~u/-----------+---~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~d~d~d~\
l\\~d\\-----------~l~u\\~d+---",
"10 ---EQ---Delay--<--Chorus---<~u/~l~l~l~l~l~l~l~l~l~l~l~l~l\
/~u/-----------+---~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~d~d~d~\
l\\~d\\-----------~l~u\\~d+---",
"11 ---EQ---NLR(Mod)---<~u/----~d~d~l~l~l~l~l\\----",
};
#define NPARM 12
char Algparms[][NPARM] = {
1,1,1,0,0,0,0,1,1,1,1,1, /* alg 1 */
0,0,0,1,1,1,1,1,1,1,1,1, /* alg 2 */
0,1,1,1,1,1,1,1,1,1,1,1, /* alg 3 */
1,1,1,1,1,1,1,1,1,1,1,1, /* alg 4 */
1,1,1,1,1,1,1,1,1,1,1,1, /* alg 5 */
1,1,1,1,1,1,1,1,1,1,1,1, /* alg 6 */
0,0,0,1,1,1,1,1,1,1,1,1, /* alg 7 */
0,1,1,1,1,1,1,1,1,1,1,1, /* alg 8 */
1,1,1,1,1,1,1,1,1,1,1,1, /* alg 9 */
1,1,1,1,1,1,1,1,1,1,1,1, /* alg 10 */
0,1,1,1,1,1,1,1,1,1,1,1 /* alg 11 */
};
/* for the parameters in the array above, Algmap gives the index in P */
int Algmap[] = {1,2,3,4,5,6,7,8,9,10,11,12};
/*
* visd5alg
*
* Whenever the algorithm is changed, we have to change the
* meanings/locations/ranges of various parameters.
*/
char *
visd5alg(v)
{
static int rt = -1, pd, hf, rs;
int n;
if ( rt == -1 ) {
pd = parmindex("predelay");
hf = parmindex("hfdamp");
rt = parmindex("reverbtime");
rs = parmindex("reverbsel");
}
if ( v >= 0 && v <= 10 ){
Alg = v;
/* Enable the parameters that this algorithm uses */
for ( n=0; n<NPARM; n++ ) {
if ( Algparms[v][n] == 1 )
enableparm(Algmap[n]);
else
disableparm(Algmap[n]);
}
if ( v == 9 ) {
P[pd].p_vrow=P[pd].p_lrow=20;
P[pd].p_label = "Delay Time";
P[rt].p_vrow=P[rt].p_lrow=21;
P[rt].p_label = "Delay Feedback";
P[rt].p_max = 255;
P[hf].p_vrow=P[hf].p_lrow=22;
P[hf].p_label = "HF Damp";
P[hf].p_max = 95;
P[rs].p_vrow=P[rs].p_lrow=23;
P[rs].p_label = "Delay Output";
P[rs].p_max = 2;
}
else if ( v<6 ) {
P[pd].p_vrow=P[pd].p_lrow=10;
P[pd].p_label = "Pre-Delay";
P[rt].p_vrow=P[rt].p_lrow=11;
P[rt].p_label = "Reverb Time";
P[rt].p_max = 152;
P[hf].p_vrow=P[hf].p_lrow=12;
P[hf].p_label = "HF Damp";
P[hf].p_max = 95;
P[rs].p_vrow=P[rs].p_lrow=13;
P[rs].p_label = "Reverb Selection";
P[rs].p_max = 21;
}
else {
P[pd].p_vrow=P[pd].p_lrow=15;
P[pd].p_label = "NL Pre-Delay";
P[rt].p_vrow=P[rt].p_lrow=16;
P[rt].p_label = "NL Reverb Time";
P[rt].p_max = 150;
P[hf].p_vrow=P[hf].p_lrow=17;
P[hf].p_label = "NL Gate Time";
P[hf].p_max = 255;
P[rs].p_vrow=P[rs].p_lrow=18;
P[rs].p_label = "NL Output";
P[rs].p_max = 2;
}
Redraw = 1;
return(D5alg[v]);
}
else
return("????");
}
int Algval[] = { 0, 3, 31, 59, 87, 115, 143, 171, 199, 227, 255 };
d5algin(d)
{
int n = 0;
while ( d >= Algval[n] && n <= 10 )
n++;
return(n-1);
}
d5algout(v)
{
return(Algval[v]);
}
d5vin(nparr,v)
struct numpair *nparr;
{
int n;
for ( n=0; nparr[n].np_val >= 0; n++ ) {
if ( v <= nparr[n].np_byte )
return(n);
}
return(0);
}
char *
visdcr(v)
{
if ( v >= 0 && v< NUMCR ) {
v = Chrate[v].np_val;
sprintf(D5buff,"%d.%d",v/10,v%10);
return(D5buff);
}
else
return("??");
}
d5crout(v)
{
if ( v >= 0 && v< NUMCR )
return(Chrate[v].np_byte);
else
return(0);
}
char *
visdcd(v)
{
if ( v >= 0 && v< NUMCD ) {
v = Chdepth[v].np_val;
sprintf(D5buff,"%d.%d",v/10,v%10);
return(D5buff);
}
else
return("??");
}
d5cdout(v)
{
if ( v >= 0 && v< NUMCD )
return(Chdepth[v].np_byte);
else
return(0);
}
char *
visdcf(v)
{
if ( v >= 0 && v< 256 ) {
v = Chfeed[v];
sprintf(D5buff,"%d.%d",v/10,v%10);
return(D5buff);
}
else
return("??");
}
char *
visd5no(v)
{
char *p;
switch (v) {
case 0: p = "Normal"; break;
case 1: p = "Pan B to A"; break;
case 2: p = "Pan A to B"; break;
}
return(p);
}
char *
visddo(v)
{
char *p;
switch (v) {
case 0: p = "Normal"; break;
case 1: p = "Invert Phase"; break;
case 2: p = "Pan A to B"; break;
}
return(p);
}
char *Revsel[] = { "Special 1", "Special 2", "Plate 1", "Plate 2",
"Hall 14'","Hall 20'","Hall 27'","Hall 36'","Hall 48'","Hall 61'","Hall 76'",
"Room 0.3'","Room 1.4'","Room 3.1'","Room 8.2'","Room 14'","Room 20'",
"Room 27'","Room 36'","Room 48'","Room 61'","Room 76'"
};
char *
visdrs(v)
{
/* For algorithms 6,7,8,10, the reverb select parameter */
/* is the NL output */
if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 )
return(visd5no(v));
if ( Alg == 9 )
return(visddo(v));
if ( v>=0 && v<22 ) {
rtclip();
return(Revsel[v]);
}
return("??");
}
char *
visddt(v)
{
int rem;
if ( v < 0 || v >= NUMDT )
return("??");
v = Dtime[v];
if ( v < 1000 )
sprintf(D5buff,"%d",v);
else {
rem = (v%1000)/10;
sprintf(D5buff,(rem<10)?"%d.0%d":"%d.%d",v/1000,rem);
}
return(D5buff);
}
char *
visd5pd(v)
{
if ( v < 0 || v >= NUMPD )
return("??");
/* For algorithm 9 (aka 10), the predelay parameter is the delay time*/
if ( Alg == 9 )
return(visddt(v));
else
sprintf(D5buff,"%d",(int)Predly[v]);
return(D5buff);
}
d5rtin(v)
{
register int n;
if ( Alg==9 )
return(v);
else if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 ) {
for ( n=0; n<NUMNLRT; n++ ) {
if ( v < Nlrevtime[n].np_byte )
break;
}
return(n-1);
}
else {
for ( n=0; n<NUMRT; n++ ) {
if ( v < Revtime[n].np_byte )
break;
}
return(n-1);
}
}
d5rtout(v)
{
if ( Alg==9 )
return(v);
else if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 )
return(Nlrevtime[v].np_byte);
else
return(Revtime[v].np_byte);
}
char *
visd5rt(v)
{
/* In algorithm 9 (aka 10), the reverb time parameter is */
/* the delay feedback. */
if ( Alg == 9 ) {
if ( v<0 || v>=NUMCF )
return("??");
else
return(visdcf(v));
}
else if ( Alg==6 || Alg==7 || Alg==8 || Alg == 10 ) {
if ( v<0 || v>=NUMNLRT )
return("??");
v = Nlrevtime[v].np_val;
if ( v < 0 )
sprintf(D5buff,"-0.%d",-v);
else if ( v < 10 )
sprintf(D5buff,"0.%d",v);
else if ( v < 100 )
sprintf(D5buff,"%d.%d",v/10,v%10);
else
sprintf(D5buff,"%d",v/10);
return(D5buff);
}
else if ( v >= 0 && v < NUMRT ) {
v = rtclip();
v = Revtime[v].np_val;
if ( v < 100 )
sprintf(D5buff,"%d.%d ",v/10,v%10);
else
sprintf(D5buff,"%d ",v/10);
return(D5buff);
}
else
return("?? ");
}
char *
visd5gt(v)
{
if ( v >=0 && v < NUMGATE ) {
sprintf(D5buff,"%d",Gatetime[v]);
return(D5buff);
}
else
return("??");
}
char *
visd5hf(v)
{
if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 ) {
return(visd5gt(v));
}
else if ( v >= 0 && v < NUMHF ) {
v = Hf[v].hf_val;
if ( v >= 10 )
sprintf(D5buff,"%d.%d",v/100,v%100);
else
sprintf(D5buff,"0.0%d",v%100);
return(D5buff);
}
else
return("??");
}
d5hfout(v)
{
if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 )
return(v);
else
return(Hf[v].hf_byte);
}
d5hfin(d)
{
register int n;
if ( Alg==6 || Alg==7 || Alg==8 || Alg==10 )
return(d);
for ( n=0; Hf[n].hf_byte >= 0 ; n++ ) {
if ( d < Hf[n].hf_byte )
break;
}
return(n-1);
}
int Revmin[] = { 10,10,7,7,1,2,3,4,5,6,7,1,1,1,1,1,2,3,4,5,6,7 };
int Revmax[] = { 990,990,990,990,200,400,720,990,990,990,990,
5,15,35,75,200,400,720,990,990,990,990
};
rtclip()
{
int rtval, rtype, origrtval;
origrtval = rtval = getval("reverbtime");
rtype = getval("reverbsel");
while ( Revtime[rtval].np_val < Revmin[rtype] )
rtval++;
while ( Revtime[rtval].np_val > Revmax[rtype] )
rtval--;
if ( rtval != origrtval ) {
setval("reverbtime",rtval);
showparam(parmindex("reverbtime"),0);
}
return(rtval);
}
#define NUMBOOST 25
struct numpair Boost[] = {
0,-12, 11,-11, 21,-10, 31,-9, 41,-8,
52,-7, 62,-6, 72,-5, 82,-4, 92,-3,
103,-2, 113,-1, 123,0, 133,1, 143,2,
153,3, 164,4, 174,5, 184,6, 194,7,
204,8, 215,9, 225,10, 235,11, 245,12,
-1, -1
};
d5bcin(v)
{
register int n;
for ( n=0; Boost[n].np_byte >= 0 ; n++ ) {
if ( v < Boost[n].np_byte )
break;
}
return(n-1);
}
d5bcout(v)
{
return(Boost[v].np_byte);
}
char *
visd5bc(v)
{
if ( v >= 0 && v < NUMBOOST ) {
sprintf(D5buff,"%d",Boost[v].np_val);
return(D5buff);
}
else
return("??");
}
char *
visd5q(v)
{
if ( v==0 )
return("0.2");
else if ( v <= 3 )
return("0.3");
else if ( v <= 90 ) {
sprintf(D5buff,"%d.%d",v/10,v%10);
return(D5buff);
}
else
return("??");
}
char *
visd5fm(v)
{
int rem;
if ( v < 0 || v > 127 )
return("??");
v = Freqmid[v];
if ( v < 100 )
sprintf(D5buff,"0.%d",v);
else if ( v < 1000 ) {
rem = v%100;
sprintf(D5buff,(rem<10)?"%d.0%d":"%d.%d",v/100,rem);
}
else
sprintf(D5buff,"%d.%d",v/100,(v/10)%10);
return(D5buff);
}
initdp5()
{
static int initdone = 0;
int n1, n2, n;
FILE *f;
if ( initdone )
return;
initdone = 1;
printf("Reading data from 'glibinit.dp5' ...\n");
Chdepth = (struct numpair *) alloc(NUMCD * sizeof(struct numpair));
Chrate = (struct numpair *) alloc(NUMCR * sizeof(struct numpair));
Chfeed = (int *) alloc(NUMCF * sizeof(int));
Nlrevtime = (struct numpair *) alloc(NUMNLRT * sizeof(struct numpair));
Revtime = (struct numpair *) alloc(NUMRT * sizeof(struct numpair));
Freqmid = (int *) alloc(NUMFREQ * sizeof(int));
Gatetime = (int *) alloc(NUMGATE * sizeof(int));
Hf = (struct hfpair *) alloc(NUMHF * sizeof(struct hfpair));
Dtime = (int *) alloc(NUMDT * sizeof(int));
Predly = (int *) alloc(NUMPD * sizeof(int));
OPENTEXTFILE(f,"glibinit.dp5","r");
if ( f == NULL ) {
fprintf(stderr,"Hey, 'initdata.dp5' can't be opened!\n");
millisleep(2000);
return;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMCD; n++ ) {
if ( fscanf(f,"%d,%d",&n1,&n2) != 2 )
goto err;
Chdepth[n].np_byte = n1;
Chdepth[n].np_val = n2;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMFREQ; n++ ) {
if ( fscanf(f,"%d",&n1) != 1 )
goto err;
Freqmid[n] = n1;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMHF; n++ ) {
if ( fscanf(f,"%d,%d",&n1,&n2) != 2 )
goto err;
Hf[n].hf_byte = n1;
Hf[n].hf_val = n2;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMGATE; n++ ) {
if ( fscanf(f,"%d",&n1) != 1 )
goto err;
Gatetime[n] = n1;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMCR; n++ ) {
if ( fscanf(f,"%d,%d",&n1,&n2) != 2 )
goto err;
Chrate[n].np_byte = n1;
Chrate[n].np_val = n2;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMNLRT; n++ ) {
if ( fscanf(f,"%d,%d",&n1,&n2) != 2 )
goto err;
Nlrevtime[n].np_byte = n1;
Nlrevtime[n].np_val = n2;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMCF; n++ ) {
if ( fscanf(f,"%d",&n1) != 1 )
goto err;
Chfeed[n] = n1;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMRT; n++ ) {
if ( fscanf(f,"%d,%d",&n1,&n2) != 2 )
goto err;
Revtime[n].np_byte = n1;
Revtime[n].np_val = n2;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMDT; n++ ) {
if ( fscanf(f,"%d",&n1) != 1 )
goto err;
Dtime[n] = n1;
}
if ( getcomment(f) )
goto err;
for ( n=0; n<NUMPD; n++ ) {
if ( fscanf(f,"%d",&n1) != 1 )
goto err;
Predly[n] = n1;
}
if ( getcomment(f) )
goto err;
return;
err:
fprintf(stderr,"Hey, something's wrong with initdata.dp5!\n");
millisleep(2000);
return;
}
getcomment(f)
FILE *f;
{
char buff[BUFSIZ];
if ( fscanf(f,"%s",buff) != 1 || *buff != '#' )
return(1);
return(0);
}