const char * UsageLines [] = {
	"Usage: p4show",
	"Reads P4 PBM image from standard input.",
	"Writes text representation to standard output.",
	"For an input pixel of '1', writes '*'.",
	"For an input pixel of '0', writes '-', '+', or '|' along outside",
	"edges, and (space) otherwise.",
	"May 20, 2020.  Newest is at gopher -p users/julianbr sdf.org",
	"(Use 'p4paint' with a key of \"*\" for the opposite of 'p4show'.)",
	};
const int NumUsageLines = sizeof (UsageLines)/sizeof (UsageLines [0] );

#include <stdio.h>


void Show (int width, int height)
	{
	int across, down, InputValue, InputWeight;

	for (down = 0; down < height; down++) {
		InputWeight = 128;
		InputValue = 0; /* Just to make it != EOF */
		for (across = 0; across < width; across++) {
			if (InputWeight == 128 && InputValue != EOF)
				InputValue = getchar ();
			if (InputValue != EOF && InputValue >= InputWeight)
				putchar ('*');
			else if (down > 0 && down + 1 < height
			&& (across == 0 || across + 1 == width) )
				putchar ('|');
			else if (across > 0  && across + 1 < width
			&& (down == 0 || down + 1 == height) )
				putchar ('-');
			else if ((down == 0 || down + 1 == height)
			&& (across == 0 || across + 1 == width) )
				putchar ('+');
			else
				putchar (' ');
			if (InputValue != EOF && InputValue >= InputWeight)
				InputValue -= InputWeight;
			InputWeight /= 2;
			if (InputWeight == 0)
				InputWeight = 128;
			}
		putchar ('\n');
		}
	if (InputValue == EOF) {
		fprintf (stderr, "***p4show: Premature end of");
		fprintf (stderr, " input image data.\n");
		}
	else if (getchar () != EOF) {
		fprintf (stderr, "***p4show: Extra image data");
		fprintf (stderr, " in input PBM.\n");
		}
	}


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

	if (argc > 1) {
		fprintf (stderr, "***p4show: Unrecognized");
		fprintf (stderr, " \"%s\".\n", argv [1] );
		for (i = 0; i < NumUsageLines; i++)
			printf ("%s\n", UsageLines [i] );
		}
	else {
		if (getchar () != 'P' || getchar () != '4'
				|| scanf ("%d", & width) != 1
				|| width < 1
				|| scanf ("%d", & height) != 1
				|| height < 1
				|| getchar () == EOF) {
			fprintf (stderr, "***p4show: Wrong input type,");
			fprintf (stderr, " must be P4 PBM.\n");
			}
		else
			Show (width, height);
		}
	return 0;
	}