const char * UsageLines [] = {
	"swpeaks: Display positive and negative peaks of specified",
	"signed 16-bit PCM sound files.",
	"Usage: swpeaks (input files)",
	"Uses standard input if no input files specified.",
	"Reads each sample as two bytes, least significant byte first.",
	"For the purposes of this program:",
	"   MS       LS",
	"01111111 11111111 = +32767",
	"        .",
	"        .",
	"00000000 00000000 = +0",
	"11111111 11111111 = -0",
	"        .",
	"        .",
	"10000000 00000000 = -32767",
	"Only displays + peak if there are + values.  Only displays - peak if",
	"there are - values.  If only one peak is shown, or if the peaks",
	"aren't reasonably symmetrical, check if input really is",
	"PCM signed ls-first.",
	"If no peaks are displayed then the input contains no samples.",
	"May 16, 2011.  Newest is at gopher -p users/julianbr sdf.org",
	};
const int NumUsageLines = sizeof (UsageLines)/sizeof (UsageLines [0] );

#include <stdio.h>


void Peaks (void)
	{
	unsigned long int value, peak, PositivePeak, NegativePeak;
	int positive, negative;
	int ls, ms;

	positive = 0;
	negative = 0;
	PositivePeak = 0;
	NegativePeak = 0;
	ms = EOF;
	ls = getchar ();
	if (ls != EOF)
		ms = getchar ();
	while (ms != EOF) {
		value = 256*(ms ^ 128) + ls;
		if (value < 32768) {
			negative = 1;
			peak = 32767 - value;
			if (NegativePeak < peak)
				NegativePeak = peak;
			}
		else {
			positive = 1;
			peak = value - 32768;
			if (PositivePeak < peak)
				PositivePeak = peak;
			}
		ms = EOF;
		ls = getchar ();
		if (ls != EOF)
			ms = getchar ();
		}
	if (negative)
		printf ("-%lu", NegativePeak);
	if (positive)
		printf (",+%lu", PositivePeak);
	putchar ('\n');
	}


int main (int argc, char * argv [] )
	{
	int i;

	if (argc > 1) {
		fprintf (stderr, "***swpeaks: Unrecognized");
		fprintf (stderr, " \"%s\".\n", argv [1] );
		for (i = 0; i < NumUsageLines; i++)
			printf ("%s\n", UsageLines [i] );
		}
	else
		Peaks ();
	return 0;
	}