This is sfextend.c in view mode; [Download] [Up]
#include "../H/sfheader.h"
#include <stdio.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include <errno.h>
static SFCODE ampcode = {
SF_MAXAMP,
sizeof(SFMAXAMP) + sizeof(SFCODE)
};
main(argc,argv)
int argc;
char **argv;
{
int i,sf,result;
struct stat sfst;
long dur;
SFHEADER sfh;
char *sfname;
double atof(),amount;
long position,frame;
char zero[16]; /* assuming a channel block contains 4*4bytes at most*/
if(argc != 3) {
printf("format: sfextend amount_to_add_to_duration filename\n");
exit(-1);
}
amount = atof(*++argv);
sfname = *++argv;
drwopensf(sfname,sf,sfh,sfst,"sfprint",result,2)
if(result < 0) exit(-1);
dur = amount * sfsrate(&sfh) * sfclass(&sfh) * sfchans(&sfh);
frame = sfclass(&sfh) * sfchans(&sfh);
dur -= dur % frame;
for(i=0; i<frame; i++) zero[i] = 0;
if((position = lseek(sf,dur,2)) < 0)
printf("Bad lseek on file\n");
if(write(sf,(char *)zero,frame) <= 0)
printf("Bad write on end of file\n");
putlength(sfname,sf,&sfh);
close(sf);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.