ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/cmusic/ug.lookup.c

This is ug.lookup.c in view mode; [Download] [Up]

/* Table Lookup */

#include "mm.head.h"
#include "ug.head.h"

#define	TABLE	1
#define	IN	2
#define	MIN	3
#define	MAX	4

lookup

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("LOOKUP: Function %.0f undefined\n",VAL(TABLE));
	    SEMIC; return;
	}
	LOC(TABLE) = fp->f_vals;
	LEN(TABLE) = fp->f_len;
	TYPE(TABLE) = 'f';
    }
    {
	register int offset ;
	register float x, frac ;
	register float in, max = VAL(MAX), min = VAL(MIN) ;
	register float invrange = ( LEN(TABLE) - 1.)/( max - min ) ;
	UGLOOP{ 
	    in = VAL(IN) ;
	    if( in > max ) in = max ;
	    if( in < min ) in = min ;
	    x = (in - min)*invrange ;
	    offset = x ;
	    VAL(OUT) = *(LOC(TABLE) + offset) ;
	    if( (frac = x - offset) > 0.0 )
		VAL(OUT) += ( *(LOC(TABLE) + ++offset) - VAL(OUT) )*frac ;
	    UGEND(0)
	}
    }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.