ftp.nice.ch/pub/next/unix/audio/Cmix.N.s.tar.gz#/cmix/sys/sfcopy.c

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

/* fast file-to-file copy */
/* p0=input fno, p1=output fno, p2=inputskip, p3=output skip, p4=dur */

#include "../H/ugens.h"
#include "../H/sfheader.h"
#include <stdio.h>

extern int  sfd[NFILES];            /* soundfile descriptors */
extern char *sndbuf[NFILES];        /* address of buffer */
extern long  filepointer[NFILES];   /* to save current pointer in file */
extern int   NBYTES;

SFHEADER      sfdesc[NFILES];

sfcopy(p,n_args)
float *p;
{
	int maxread,n,input,output,nbytes,jj;

	if(!n_args) fprintf(stderr,"(sfcopy(input_fno,output_fno,input_skip,output_skip,dur)\n");
	input = (int)p[0];
	output = (int)p[1];
	if((sfclass(&sfdesc[input]) != sfclass(&sfdesc[output])) ||
	   (sfchans(&sfdesc[input]) != sfchans(&sfdesc[output]))) {
		fprintf(stderr,
		 "Input and output specifications do not match. Canot copy.\n");
		closesf();
	}
	nbytes = setnote(p[2],p[4],input) * 
		 sfchans(&sfdesc[input]) * sfclass(&sfdesc[input]);

	setnote(p[3],p[4],output);
	_backup(input);
	_backup(output);

	fprintf(stderr,"Copy %d bytes\n",nbytes);

	while(nbytes) {
		maxread = (nbytes > NBYTES) ? NBYTES : nbytes;
		if((n = read(sfd[input],sndbuf[input],maxread)) <= 0) {
			fprintf(stderr,"Apparent eof on input\n");
			return;
		}
		if((jj = write(sfd[output],sndbuf[input],n)) <= 0) {
			fprintf(stderr,"Trouble writing output file\n");
			closesf();
		}
		nbytes -= n;
		filepointer[input] += n;
		filepointer[output] += n;
	}
	if(fsync(sfd[output]) < 0 ) {
		fprintf(stderr,"trouble fsyncing file");
		closesf();
	}
	fprintf(stderr,"Copy completed\n");
}

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