home *** CD-ROM | disk | FTP | other *** search
- /* $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);
- }
-