This is ug.blp.c in view mode; [Download] [Up]
/* Bandlimited Pulse Generator */
#include "mm.head.h"
#include "ug.head.h"
#define AMP 1
#define INCR1 2
#define INCR2 3
#define N 4
#define SUM1 5
#define SUM2 6
blp
UGHEAD{
UGINIT;
int L, L2, isum, insum, n ;
float out, lout, inc1, inc2 ;
static float *sintab = NULL, *csctab = NULL ;
L = Lfuncs ;
L2 = L/2 ;
if ( sintab == NULL ) {
sintab = (float *) malloc( L*sizeof( float ) ) ;
csctab = (float *) malloc( L*sizeof( float ) ) ;
for ( n = 0 ; n < L ; n++ ) {
sintab[n] = sin( Pi2*n/L ) ;
if ( sintab[n] != 0. )
csctab[n] = 1./sintab[n] ;
else
csctab[n] = 0.0 ;
}
}
if ( STARTNOTE ) lout = 1. ;
UGLOOP{
n = VAL(N) ;
inc2 = VAL(INCR2)*.5 ;
inc1 = VAL(INCR1) + (n - 1)*inc2 ;
while ( VAL(SUM1) >= L ) VAL(SUM1) -= L ;
while ( VAL(SUM1) < 0. ) VAL(SUM1) += L ;
while ( VAL(SUM2) >= L ) VAL(SUM2) -= L ;
while ( VAL(SUM2) < 0. ) VAL(SUM2) += L ;
isum = VAL(SUM2) ;
if ( isum == 0 || isum == L2 ) {
if ( lout < 0. ) out = -1. ;
if ( lout > 0. ) out = 1. ;
} else {
insum = ( n*isum )%L ;
out = sintab[ insum ] * csctab[ isum ] ;
out /= n ;
}
lout = out ;
VAL(OUT)++ = VAL(AMP)*out* sintab[ (int) VAL(SUM1) ] ;
VAL(SUM1) += inc1 ;
VAL(SUM2) += inc2 ;
UGEND(1) ;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.