This is ug.illus.c in view mode; [Download] [Up]
/* Illusion Control Function Generator */
#include "ug.head.h"
#include "mm.head.h"
#include <stdio.h>
#define AMPOUT 0
#define FREQOUT 1
#define AMPIN 2
#define FREQIN 3
#define WHICH 4
#define RATIO 5
#define TABLE 6
#define FMIN 7
#define FMAX 8
illus
UGHEAD{
UGINIT;
if(TYPE(TABLE) != 'f'){ /* Find start of function if number given */
FORLIST(fp, next_fp, fplist) if(fp->f_index == (int) VAL(TABLE))break;
if(!fp){
Error++;
PROUT("ILLUS: Function %.0f undefined\n",VAL(TABLE));
SEMIC; return;
}
LOC(TABLE) = fp->f_vals;
LEN(TABLE) = fp->f_len;
TYPE(TABLE) = 'f';
}
{
float f, ratio, fmin, fmax, flower, fraise, lfmin=0, lfmax=0, fac;
int j, which;
UGLOOP{
which = VAL(WHICH);
ratio = VAL(RATIO);
fmin = VAL(FMIN);
fmax = VAL(FMAX);
f = VAL(FREQIN);
if (ratio != 1.){
for( j = 1; j < which; j++)
f *= ratio ;
}
else {
for( j = 1; j < which; j++)
f += VAL(FREQIN) ;
}
if( f > fmax ){
flower = fmin/fmax;
while( f > fmax ) f *= flower ;
}
if( f < fmin ){
fraise = fmax/fmin;
while( f < fmin ) f *= fraise ;
}
if( f < fmin || f > fmax )
VAL(AMPOUT) = 0.0 ;
else {
if(fmin != lfmin || fmax != lfmax)
fac = LEN(TABLE)/(fmax - fmin) ;
VAL(AMPOUT) = VAL(AMPIN) *
*( LOC(TABLE) + (int) ( ( f - fmin )*fac ) );
}
lfmin = fmin;
lfmax = fmax;
VAL(FREQOUT) = f ;
UGEND(0)
}
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.