ftp.nice.ch/pub/next/unix/communication/newam.0.1.s.tar.gz#/newam-0.1/src/zyxel.c

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

/*********************************************************************/
/*                                                                   */
/* Programmer:                                                       */
/*   Olaf Mueller <olaf@orest.escape.de>                             */
/*                                                                   */
/* Purpose:                                                          */
/*   Answering Machine                                               */
/*       read and convert a zyxel voice file                         */
/*                                                                   */
/* History:                                                          */
/*   29-08-96   Initial Release           Olaf Mueller               */
/*                                                                   */
/* Notes:                                                            */
/*                                                                   */
/*********************************************************************/

#include <stdio.h>
#include <stdlib.h>

#include "zyxel.h"
#include "const.h"


int ZSNDread (char *filename,ZyxelSND *zsnd)
{
	FILE			*fpzsnd ;

	if ((fpzsnd = fopen(filename,"r")) == NULL)
		return  -1 ;
	fseek (fpzsnd,0L,SEEK_END) ;
	if ((zsnd->voicelen = ftell (fpzsnd) - sizeof (ZyxelHeader)) < 0)
	{
		fclose (fpzsnd) ;
		return  -1 ;
	}
	if ((zsnd->voice = (char*)malloc (zsnd->voicelen)) == NULL)
	{
		fclose (fpzsnd) ;
		return  -1 ;
	}
	rewind (fpzsnd) ;
	if (fread(&zsnd->zyxel,sizeof(ZyxelHeader),1,fpzsnd) != 1  ||
										fread(zsnd->voice,zsnd->voicelen,1,fpzsnd) != 1)
	{
		fclose (fpzsnd) ;
		free (zsnd->voice) ;
		return  ZYX_NOZYXELSTRUCT ;
	}
	fclose (fpzsnd) ;
	if (memcmp(zsnd->zyxel.title,ZYX_TITLE,strlen(ZYX_TITLE)))
	{
		free (zsnd->voice) ;
		return  ZYX_NOZYXELSTRUCT ;
	}
	if (zsnd->zyxel.mode != ZYX_VOC)
	{
		free (zsnd->voice) ;
		return  ZYX_NOMODE ;
	}
	if (zsnd->zyxel.voice > 2)
	{
		free (zsnd->voice) ;
		return  ZYX_NOVOICE ;
	}
	zsnd->play = NULL ;
	return  0 ;
}


int ZSNDmakePlayable (ZyxelSND *zsnd)
{
	int		ii ;
	char	*vp , *pp ;

	if (zsnd->play)
		return  1 ;
	zsnd->playlen = zsnd->voicelen ;
	for (ii = 0 , vp = zsnd->voice ; ii < zsnd->voicelen ; ii++)
		if (*vp++ == DLE)
			zsnd->playlen++ ;
	if ((zsnd->play = (char*)malloc (zsnd->playlen)) == NULL)
		return  -1 ;
	for (ii = 0 , vp = zsnd->voice , pp = zsnd->play ; ii < zsnd->voicelen ; ii++)
		if ((*pp++ = *vp++) == DLE)
			*pp++ = DLE ;
	return  0 ;
}


void ZSNDfree (ZyxelSND *zsnd)
{
	if (zsnd->voice)
		free (zsnd->voice) ;
	if (zsnd->play)
		free (zsnd->play) ;
}

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