#ifndef lint
static char sccsid[] = "@(#)lintoulaw.c	1.2 (UKC) 12/3/89";
#endif
/* lintoulaw.c - convert linear to ulaw
**
** Copyright (C) 1989 by Jef Poskanzer.
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for any purpose and without fee is hereby granted, provided
** that the above copyright notice appear in all copies and that both that
** copyright notice and this permission notice appear in supporting
** documentation.  This software is provided "as is" without express or
** implied warranty.
*/

#include <stdio.h>
#include "libst.h"

#define MYBUFSIZ 256

/* Buffer for efficient reading - SBUFSIZ is number of elements */
#define SBUFSIZ (BUFSIZ/sizeof(short))
static short sbuf[SBUFSIZ];

main( argc, argv )
int argc;
char *argv[];
    {
    FILE *f;
    char mybuf[MYBUFSIZ];
    int nsamples;

    if ( argc == 1 )
	f = stdin;
    else if ( argc == 2 )
	{
	f = fopen( argv[1], "r" );
	if ( f == NULL )
	    {
	    perror( argv[1] );
	    exit( 1 );
	    }
	}
    else
	{
	fprintf( stderr, "usage:  %s [<file>]\n", argv[0] );
	exit( 1 );
	}
    setbuffer( stdout, mybuf, MYBUFSIZ );

    while ((nsamples = fread(sbuf, sizeof(sbuf[0]), SBUFSIZ, f)) > 0)
	{
	register int i;
	register int c;

	for (i=0; i<nsamples; i++)
	    {
	    c = st_linear_to_ulaw(sbuf[i]);
	    putchar( c );
	    }
	}

    exit( 0 );
    }
