#include "../H/ugens.h"
#include "../H/sfheader.h"

extern int NBYTES;           /* size of buffer to allocate */

extern int  sfd[NFILES];            /* soundfile descriptors */
extern int  pointer[NFILES];	     /* to be used as pointer within sound buffer */
extern int  bufsize[NFILES];        /* word length of buffer */

extern char *sndbuf[NFILES];        /* address of buffer */
			   
extern double starttime[NFILES];    /* to save starting time of note */
extern long  originalsize[NFILES];  /* to save byte length of file */
extern long  filepointer[NFILES];   /* to save current pointer in file */

extern SFHEADER      sfdesc[NFILES];
 
extern float SR;   /* now declared here rather than in the profile */

xgetin(input,fno,size)
register float *input;   
{
	register int i;
	register short *ibuf;
	register float *fbuf;
	register int todo,remains;
	int n;
	int len = bufsize[fno]; 
	
refill:	todo = ((pointer[fno] + size) > len) 
				? len - pointer[fno] : size;

	if(sfclass(&sfdesc[fno]) == SHORT) 
		for(i=0,ibuf = (short *)sndbuf[fno] + pointer[fno];i<todo;i++) 
			*(input++) = (float) *(ibuf++);
	else 
		for(i=0,fbuf = (float *)sndbuf[fno] + pointer[fno];i<todo;i++) 
			*(input++) =  *(fbuf++);

	pointer[fno] += todo;
printf("fno %d x %f %f %f %f %f %f\n",fno,input[0],input[1],input[10],fbuf[0],fbuf[1],fbuf[10]);
	if(pointer[fno] == len) {
		n = _readit(fno);
		pointer[fno] = 0;
printf("n=%d fno %dy %f %f %f %f %f %f\n",n,fno,input[0],input[1],input[10],fbuf[0],fbuf[1],fbuf[10]);
	}
	if(size -= todo) goto refill;
	return(i);
}
