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

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

/* OUTbox unit generator */

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

out

UGHEAD{
    UGINIT;
    register float *Out = Outblock;
    switch (narg) {
	case 1: switch ( INC(0) ) {
	    case 0: UGLOOP{ register float val = VAL(0) ;
		*Out++ += val ;
	    } return ;
	    case 1: UGLOOP{
		*Out++ += VAL(0)++ ;
	    } return ;
	}
	case 2: switch ( (INC(0)<<1)+INC(1) ) {
	    case 0: UGLOOP{ register float val0 = VAL(0), val1 = VAL(1) ;
		*Out++ += val0 ; *Out++ += val1 ;
	    } return ;
	    case 1: UGLOOP{ register float val0 = VAL(0) ;
		*Out++ += val0 ; *Out++ += VAL(1)++ ;
	    } return ;
	    case 2: UGLOOP{ register float val1 = VAL(1) ;
		*Out++ += VAL(0)++ ; *Out++ += val1 ;
	    } return ;
	    case 3: UGLOOP{
		*Out++ += VAL(0)++ ; *Out++ += VAL(1)++ ;
	    } return ;
	}
	case 4: switch ( (INC(0)<<3)+(INC(1)<<2)+(INC(2)<<1)+INC(3) ) {
	    case 0: UGLOOP{ register float 
		   val0 = VAL(0), val1 =  VAL(1), val2 = VAL(2), val3 = VAL(3) ;
		*Out++ += val0 ; *Out++ += val1 ; 
		*Out++ += val2 ; *Out++ += val3 ;
	    } return ;
	    case 1: UGLOOP{ register float 
		   val0 =  VAL(0), val1 = VAL(1), val2 = VAL(2) ;
		*Out++ += val0 ; *Out++ += val1 ; 
		*Out++ += val2 ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 2: UGLOOP{ register float 
		   val0 =  VAL(0), val1 = VAL(1), val3 = VAL(3) ;
		*Out++ += val0 ; *Out++ += val1 ; 
		*Out++ += VAL(2)++ ; *Out++ += val3 ;
	    } return ;
	    case 3: UGLOOP{ register float 
		   val0 =  VAL(0), val1 = VAL(1) ;
		*Out++ += val0 ; *Out++ += val1 ; 
		*Out++ += VAL(2)++ ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 4: UGLOOP{ register float 
		   val0 =  VAL(0), val2 = VAL(2), val3 = VAL(3) ;
		*Out++ += val0 ; *Out++ += VAL(1)++ ; 
		*Out++ += val2 ; *Out++ += val3 ;
	    } return ;
	    case 5: UGLOOP{ register float 
		   val0 = VAL(0), val2 = VAL(2) ;
		*Out++ += val0 ; *Out++ += VAL(1)++ ; 
		*Out++ += val2 ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 6: UGLOOP{ register float 
		   val0 = VAL(0), val3 = VAL(3) ;
		*Out++ += val0 ; *Out++ += VAL(1)++ ; 
		*Out++ += VAL(2)++ ; *Out++ += val3 ;
	    } return ;
	    case 7: UGLOOP{ register float 
		   val0 = VAL(0) ;
		*Out++ += val0 ; *Out++ += VAL(1)++ ; 
		*Out++ += VAL(2)++ ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 8: UGLOOP{ register float 
		   val1 =  VAL(1), val2 = VAL(2), val3 = VAL(3) ;
		*Out++ += VAL(0)++ ; *Out++ += val1 ; 
		*Out++ += val2 ; *Out++ += val3 ;
	    } return ;
	    case 9: UGLOOP{ register float 
		   val1 =  VAL(1), val2 = VAL(2)  ;
		*Out++ += VAL(0)++ ; *Out++ += val1 ; 
		*Out++ += val2 ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 10: UGLOOP{ register float 
		   val1 =  VAL(1), val3 = VAL(3) ;
		*Out++ += VAL(0)++ ; *Out++ += val1 ; 
		*Out++ += VAL(2)++ ; *Out++ += val3 ;
	    } return ;
	    case 11: UGLOOP{ register float 
		   val1 = VAL(1) ;
		*Out++ += VAL(0)++ ; *Out++ += val1 ; 
		*Out++ += VAL(2)++ ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 12: UGLOOP{ register float 
		   val2 = VAL(2), val3 = VAL(3) ;
		*Out++ += VAL(0)++ ; *Out++ += VAL(1)++ ; 
		*Out++ += val2 ; *Out++ += val3 ;
	    } return ;
	    case 13: UGLOOP{ register float 
		   val2 = VAL(2) ;
		*Out++ += VAL(0)++ ; *Out++ += VAL(1)++ ; 
		*Out++ += val2 ; *Out++ += VAL(3)++ ;
	    } return ;
	    case 14: UGLOOP{ register float 
		   val3 = VAL(3) ;
		*Out++ += VAL(0)++ ; *Out++ += VAL(1)++ ; 
		*Out++ += VAL(2)++ ; *Out++ += val3 ;
	    } return ;
	    case 15: UGLOOP{ 
		*Out++ += VAL(0)++ ; *Out++ += VAL(1)++ ; 
		*Out++ += VAL(2)++ ; *Out++ += VAL(3)++ ;
	    } return ;
	}
	default: UGLOOP{
	    for ( arg = 0 ; arg < narg ; arg++ ) *Out++ += VAL(arg) ;
	    UGEND(0) ;
	}
    }
}

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