This is ug.iosc.c in view mode; [Download] [Up]
/* Table Lookup Interpolating Oscillator */ #include "mm.head.h" #include "ug.head.h" #define AMP 1 #define INCR 2 #define TABLE 3 #define SUM 4 iosc UGHEAD{ UGINIT ; register float output ; float current ; int isum, isumn ; float frac ; 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("IOSC: Function %.0f undefined\n",VAL(TABLE)) ; SEMIC ; return; } LOC(TABLE) = fp->f_vals ; LEN(TABLE) = fp->f_len ; TYPE(TABLE) = 'f' ; } { double sum = VAL(SUM) ; long length = LEN(TABLE) ; float *tab = LOC(TABLE) ; UGLOOP{ while ( sum >= length ) sum -= length ; while ( sum < 0.0 ) sum += length ; isum = (long) sum ; if(isum < length - 1) isumn = isum + 1 ; else isumn = 0 ; current = *(tab + isum) ; VAL(OUT)++ = VAL(AMP) * (current + (sum - isum)*(*(tab + isumn) - current)) ; sum += VAL(INCR) ; UGEND(1) } VAL(SUM) = sum ; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.