/*
 * Sample program to generate a small test PNG image.
 */

#include <stdio.h>
#include <err.h>
#include <string.h>
#include <unistd.h>

#include "png.h"

int
main(argc, argv)
	int argc;
	char *argv[];
{
	FILE *out = stdout;
	png_structp png_ptr;
	png_infop info_ptr;
	png_text text[] = {
#define TEXT(k,t) { PNG_TEXT_COMPRESSION_NONE, k, t, strlen(t) }
		TEXT("Title",		"Sample image"),
		TEXT("Author",		getlogin()),
		TEXT("Description",	"A sample image"),
		TEXT("Copyright",	"Public domain"),
/*		TEXT("Creation Time",	png_convert_to_rfc1123(time(0))), */
		TEXT("Software",	argv[0]),
		TEXT("Disclaimer",	""),
		TEXT("Warning",		"Just an example"),
		TEXT("Source",		"my arse"),
		TEXT("Comment",		"It's a bit nippy today."),
	};
	png_byte line[32];
	int i, j;

	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
		(png_voidp)NULL, NULL, NULL);
	if (!png_ptr)
		errx(1, "png_create_write_struct");

	info_ptr = png_create_info_struct(png_ptr);
	if (!info_ptr) 
		errx(1, "png_create_info_struct");

	if (setjmp(png_jmpbuf(png_ptr)))
		/* All future errors jump here */
		errx(1, "png error");

	png_init_io(png_ptr, out);
/*	png_set_write_status_fn(png_ptr, NULL);	*/
/*	png_set_filter(png_ptr, 0, ...); */
	png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
	png_set_IHDR(png_ptr, info_ptr,
		32,	/* width */
		32,	/* height */
		8,	/* bit depth */
		PNG_COLOR_TYPE_GRAY,
		PNG_INTERLACE_NONE,
		PNG_COMPRESSION_TYPE_DEFAULT,
		PNG_FILTER_TYPE_DEFAULT);
/*	png_set_sBIT(png_ptr, info_ptr, 8); */

#if 0
	png_set_text(png_ptr, info_ptr, text, sizeof text / sizeof text[0]);
#endif

#if 0
	png_set_pHYs(png_ptr, info_ptr, 
		1,	/* horiz pixels/unit  */
		1,	/* vert pixels/unit */
		PNG_RESOLUTION_UNKNOWN);
	png_set_oFFs(png_ptr, info_ptr, 
		0,	/* x offset */
		0,	/* y offset */
		PNG_OFFSET_PIXEL);
	png_set_sCAL(png_ptr, info_ptr,
		1,	/* unit */
		1,	/* width in units */
		1);	/* height */
#endif

/*	png_set_rows(png_ptr, info_ptr, imgrows);
	png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
*/

	png_write_info(png_ptr, info_ptr);

	for (i = 0; i < 32; i++) {
		for (j = 0; j < 32; j++)
			line[j] = (i + j) * 4;
		png_write_row(png_ptr, line);
	}
	png_write_end(png_ptr, info_ptr);

	png_destroy_write_struct(&png_ptr, &info_ptr);
	fclose(out);

	exit(0);
}

