phoned/lib/libpvf/linear.c

83 lines
1.5 KiB
C
Raw Normal View History

2005-06-13 22:11:33 -04:00
/*
* linear.c
*
* Converts pvf <--> linear.
*
* $Id: linear.c,v 1.5 1999/03/16 09:59:20 marcs Exp $
*
*/
#include "../include/voice.h"
int pvftolin (FILE *fd_in, FILE *fd_out, pvf_header *header_in, int is_signed,
int bits16, int intel)
{
int data;
while (1)
{
data = header_in->read_pvf_data(fd_in) >> 8;
if (feof(fd_in))
break;
if (data > 0x7fff)
data = 0x7fff;
if (data < -0x8000)
data = -0x8000;
if (!is_signed)
data += 0x8000;
if (bits16 && intel)
putc(data & 0xff, fd_out);
putc((data >> 8), fd_out);
if (bits16 && !intel)
putc(data & 0xff, fd_out);
}
return(OK);
}
int lintopvf (FILE *fd_in, FILE *fd_out, pvf_header *header_out,
int is_signed, int bits16, int intel)
{
int data;
while ((data = getc(fd_in)) != EOF)
{
if (bits16)
{
if (intel)
data |= (getc(fd_in) << 8);
else
{
data <<= 8;
data |= (getc(fd_in));
}
}
else
data = (data << 8);
if (is_signed)
{
if (data > 0x7fff)
data -= 0x10000;
}
else
data -= 0x8000;
header_out->write_pvf_data(fd_out, ((data) << 8));
}
return(OK);
}