This is unfloat.c in view mode; [Download] [Up]
/*
* Generated by the NeXT Interface Builder.
*/
#import <stdio.h>
#import <fcntl.h>
#import <string.h>
#import <math.h>
#import <sound/sound.h>
struct headerform {
char pref[4];
int hdr_length;
int file_length;
int mode;
int samp_rate;
int num_channels;
char comment[8];
};
main(ac,av)
int ac;
char *av[];
{
char *file_name_in,*file_name_out;
char mode[4],file_name[100];
short data[5000];
unsigned char codec_data[5000];
float float_data[5000],gain=1.0,max = 0.0;
struct headerform hdr = {".snd",32,0,3,44100,1,"HDRHack"};
int i,j,fd,fd2,n_read,n_write;
if (ac>=3) {
if (ac==3) {
file_name_in = av[1];
file_name_out = av[2];
}
if (ac>=5) {
if (!strcmp(av[1],"-s")) {
hdr.samp_rate = atoi(av[2]);
}
if (!strcmp(av[1],"-g")) {
gain = atof(av[2]);
}
file_name_in = av[3];
file_name_out = av[4];
}
if (ac==7) {
if (!strcmp(av[3],"-s")) {
hdr.samp_rate = atoi(av[4]);
}
if (!strcmp(av[3],"-g")) {
gain = atof(av[4]);
}
file_name_in = av[5];
file_name_out = av[6];
}
fd = open(file_name_in,0);
if (fd!=-1) {
if (!strcmp(file_name_in,file_name_out)) {
fprintf(stderr,"Input and output files can't have same name!!\n");
exit(0);
}
fd2 = creat(&file_name_out[0], 0644);
i = 0;
n_read = 10000;
while (n_read>0) {
n_read = read(fd,&float_data[0],10000);
if (gain==0.0) for (j=0;j<n_read/4;j++) if (fabs((double)float_data[j])>max) max = fabs((double)float_data[j]);
i += n_read/2;
}
if (gain==0.0) gain = 32000.0 / max;
hdr.file_length = i;
if (hdr.samp_rate==8012) {
hdr.mode = 1;
hdr.file_length /= 2;
}
close(fd);
fd = open(file_name_in,0);
n_write = write(fd2,&hdr,hdr.hdr_length);
n_read = 10000;
while (n_read>0) {
if (hdr.samp_rate==8012) {
n_read = read(fd,float_data,20000);
for (i=0;i<n_read/4;i++) codec_data[i] = SNDMulaw((short) (float_data[i] * gain));
n_write = write(fd2,&codec_data,n_read/4);
}
else {
n_read = read(fd,float_data,20000);
for (i=0;i<n_read/4;i++) data[i] = (short) (float_data[i] * gain);
n_write = write(fd2,&data,n_read/2);
}
}
close(fd);
close(fd2);
}
else
printf("I couldn't find your input file!!!\n");
}
else
printf("Format is unfloat [-g gain] [-s samplingrate] infile.snd outfile.snd\n");
return;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.