home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
TIERRA40.ZIP
/
BEAGLE
/
TSCRAMBL.TXT
< prev
Wrap
Text File
|
1992-05-30
|
4KB
|
177 lines
/*-----------------------------------------------------------------------*/
extern void PrintInstDist P_((I32s n));
extern void Scramble P_((void));
extern void ScanSoup P_((void));
/*-----------------------------------------------------------------------*/
void ScanSoup()
{
I32s si ,p;
for(si = 0; si < INSTNUM; InstD[si++]=0); /* clean struct bzero ? */
InstD[INSTNUM] = -1; /* max hits */
for(si = 0; si < SoupSize; si++)
{
#if PLOIDY == 1
if((InstD[soup[si].inst]++) > InstD[INSTNUM]);
InstD[INSTNUM] = InstD[soup[si].inst];
#else /* PLOIDY > 1 */
for(p = 0; p < PLOIDY; p++)
{
if((InstD[soup[si][p].inst]++) > InstD[INSTNUM]);
InstD[INSTNUM] = InstD[soup[si][p].inst];
}
#endif /* PLOIDY > 1 */
}
}
/*-----------------------------------------------------------------------*/
void PrintInstDist(n)
I32s n; /* number of lines to print */
{
I32s di,siz,ci,y,total,n_star;
total = 0;
siz = ( n > INSTNUM ) ? INSTNUM : n ;
siz = ( siz > fe_lines-2 ) ? fe_lines-2 : siz ;
for (y = MSG_Y,di = 0; di < INSTNUM; di++)
{
if (InstD[di] < 0) break;
if ((di > 0) && !(di % siz) )
{
y=MSG_Y;
FEPrintf(HLP_X,HLP_Y,1,"Press any key for more ...\n");
FEGetc();
}
total += InstD[di];
y = MSG_Y + (di % siz);
n_star = 1 + (I32s) ((fe_width-15) *
( (float)(InstD[di])
/(float)(InstD[INSTNUM]))); /* max count */
FEPrintf(MSG_X,y,0,"%7.7s %2.2x %6d|",
id[di].mn, id[di].op, InstD[di]);
for (ci = 0; ci < n_star; ci++)
FEPrintf(MSG_X+18+ci,y,0,"*");
FEPrintf(MSG_X+18+ci,y,0,"\n");
}
FEPrintf(MSG_X,y+1 ,0,"Total --> %6ld\n",total);
FEClrmsg(y+2);
}
/*-----------------------------------------------------------------------*/
void Scramble()
{
/* things to do:
make sure dropdead = 0 -> ignore ...
turn genebanker off ...
find prop of SoupSize (remember ploidy )
for each soup[] place down a piece
*/
I32s si,i,p,tssiz;
float rr,id_prop[INSTNUM];
if (GeneBnker)
{
FEError(-110,NOEXIT,NOWRITE,"Can't Scramble soup with GeneBnker on !");
return;
}
sprintf(mes[0],
"About to Scramble Soup - are you willing to exercise this control ?"
);
FEMessage(1,mes);
if (FEGetc() != 'y') return;
DropDead = 0;
sprintf(mes[0],
"Scrambling Soup - come on!, baby needs a new pair of shoes !..."
);
FEMessage(1,mes);
tssiz = PLOIDY * SoupSize;
/* calc proportions for redistribution ... */
for(p = 0; p < INSTNUM ; p++)
{
id_prop[p] = ((float) InstD[p]) / ( (float )tssiz); /* anal ... */
if(p) id_prop[p] += id_prop[p - 1];
}
for(si = 0; si < SoupSize; si++)
{
soup[si].write = tlrand() % 2;
}
for(si = 0; si < SoupSize; si++)
{
#if PLOIDY > 1
for(p = 0; p < PLOIDY; p++)
{
#endif /* PLOIDY > 1 */
rr = (float)tdrand();
for(i = 0; i < INSTNUM; i++)
{ if(rr < id_prop[i]) break;
}
#if PLOIDY == 1
soup[si].inst = (int) i;
#else
soup[si][p].inst = (int) i;
}
#endif /* PLOIDY > 1 */
}
}
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
void query_bits(bstr)
I8s bstr[32];
{
I32s si,gi,num_hits;
if(!GeneBnker) return;
if ((Bits = (BitsType *) thcalloc((NumGenotype+1) , sizeof(BitsType) ))
== (BitsType *) NULL)
{
FEError(-170,NOEXIT,NOWRITE,
"Not enough memory to create bits table");
return;
}
for(num_hits=0,si=0;si < siz_sl; si++) /* for all sizes */
{
if ((I32s)sl[si]->g < 4) continue;
for(gi=0;si < sl[si]->num_c; gi++) /* for all geneotypes */
{
if ((I32s)sl[si]->g[gi] < 4) continue;
if (IsInBitSet(bstr,sl[si]->g[gi]->bits))
{
Bits[num_hits].size = si;
Bits[num_hits].lbl = gi;
Bits[num_hits].bits = sl[si]->g[gi]->bits;
num_hits++;
}
}
}
}
/*-----------------------------------------------------------------------*/
void IsInBitSet(bstr,bits)
I8s bstr[32];
I32s bits;
{
I32s b,p;
/* WARNING first 2 bits are not watch bits! */
for(b=1,p=0; p < 32;p++, b = b >> 1;)
{
if ((bstr[p] == '?') ||
(bstr[p] == '1' && (b&bits)) ||
(bstr[p] == '0' && !(b&bits)) )
continue;
return 0;
}
return 1;
}
/*-----------------------------------------------------------------------*/