#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <libps/pslib.h>
#ifdef MEMORY_DEBUGGING
#include <libps/pslib-mp.h>
#endif

#define LEFT_BORDER 50

void errorhandler(PSDoc *p, int error, const char *str, void *data) {
	fprintf(stderr, "PSLib: %s\n", str);
}

size_t writeproc(PSDoc *p, void *data, size_t size) {
	return fwrite(data, 1, size, stdout);
}

void footer(PSDoc *p, const char *text) {
	int psfont;
	char buffer[100];
	psfont = PS_findfont(p, "Helvetica", "", 0);
	PS_setfont(p, psfont, 8.0);
	sprintf(buffer, "This file has been created with pslib %s", PS_get_parameter(p, "dottedversion", 0.0));
	PS_show_xy(p, buffer, LEFT_BORDER, 25);
}

void output_page(PSDoc *ps, int color) {
	int psfont, i;
	PS_set_value(ps, "separationcolor", (float) color);
	PS_begin_page(ps, 596, 842);
	PS_setcolor(ps, "stroke", "cmyk", 0.0, 0.0, 0.0, 1.0);

	footer(ps, "");

	psfont = PS_findfont(ps, "Helvetica", "", 0);
	PS_setfont(ps, psfont, 7.0);
	for(i=1; i<=10; i++) {
		char buffer[10];
		sprintf(buffer, "%d %%", i*10);
		PS_show_xy(ps, buffer, 60, 55+i*65);
	}

	for(i=1; i<=10; i++) {
		PS_setcolor(ps, "fill", "cmyk", i*0.1, 0.0, 0.0, 0.0);
		PS_rect(ps, 100, 35+i*65, 50, 50);
		PS_fill(ps);
	}

	for(i=1; i<=10; i++) {
		PS_setcolor(ps, "fill", "cmyk", 0.0, i*0.1, 0.0, 0.0);
		PS_rect(ps, 220, 35+i*65, 50, 50);
		PS_fill(ps);
	}

	for(i=1; i<=10; i++) {
		PS_setcolor(ps, "fill", "cmyk", 0.0, 0.0, i*0.1, 0.0);
		PS_rect(ps, 340, 35+i*65, 50, 50);
		PS_fill(ps);
	}

	for(i=1; i<=10; i++) {
		PS_setcolor(ps, "fill", "cmyk", 0.0, 0.0, 0.0, i*0.1);
		PS_rect(ps, 460, 35+i*65, 50, 50);
		PS_fill(ps);
	}

	PS_end_page(ps);
}

int main() {
	PSDoc *ps;

	PS_boot();
#ifdef MEMORY_DEBUGGING
	PS_mp_init();
#endif

#ifdef MEMORY_DEBUGGING
	ps = PS_new2(errorhandler, PS_mp_malloc, PS_mp_realloc, PS_mp_free, NULL);
#else
	ps = PS_new();
#endif

	if (0 > PS_open_file(ps, "cmyk.ps")) {
		printf("Cannot open PostScript file\n");
		exit(1);
	}

	PS_set_parameter(ps, "warning", "true");

	PS_set_info(ps, "Creator", __FILE__);
	PS_set_info(ps, "Author", "Uwe Steinmann");
	PS_set_info(ps, "Title", "CMYK and color separation");
	PS_set_info(ps, "Keywords", "CMYK Separation");

	output_page(ps, 1);
	output_page(ps, 2);
	output_page(ps, 3);
	output_page(ps, 4);

	PS_close(ps);
	PS_delete(ps);

#ifdef MEMORY_DEBUGGING 
	PS_mp_list_unfreed();
#endif  
	PS_shutdown();

	exit(0);
}

