#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tiff.c"

#define MAGIC 1200000
#define CMPBUFFERLEN 16

int isgraphicsobject=0,isstream=0;
char graphicsobject[] = "/Image";
char stream[] = "stream\n";
char swidth[] = "/Width";
char slength[] = "/Height";
char name[13];
int width, length;
char line[MAGIC];
int imageptr = 0;
int imagecounter = 0;
long charcounter = 0;
char cmpbuffer[CMPBUFFERLEN];
char c;

long scanint() {
	char c = getc(stdin);
	while (c == ' ') {
		c = getc(stdin); }
	long i = 0;
	while (c>=48 && c<=57) {
		i=i*10;
		i=i+(c-48);
		c = getc(stdin);
	}
	ungetc(c,stdin);
	return i;
}

int ainb(char* a, char*b, int charcounter) {
	int alen = strlen(a)-1;
	int i;
	for (i=alen; i>=0; i--) {
			if (b[(charcounter-alen+i)%CMPBUFFERLEN] != a[i])
				return 0;
	}
	return 1;
}	

int main () {

	memset(line,0,MAGIC);
	c=0;
	while (!feof(stdin)) {
		cmpbuffer[++charcounter%CMPBUFFERLEN] = getc(stdin);

		if (isgraphicsobject==0 && ainb(graphicsobject,cmpbuffer,charcounter)) {
			isgraphicsobject = 1;
			printf ("image!\n");
			length = 0; width = 0; isstream = 0;
		}
		if (isgraphicsobject==1 && ainb(slength,cmpbuffer,charcounter)) {
			length = scanint(); isstream = 0;
			printf ("length %d \n", length); 
		}
		if (isgraphicsobject==1 && ainb(swidth,cmpbuffer,charcounter)) {
			width = scanint();	 isstream = 0;
			printf ("width %d\n", width); 
		}
		if (isgraphicsobject==1 && ainb(stream,cmpbuffer,charcounter)) {
			printf ("stream\n"); isstream=1; imageptr=0; 
		}
		while (isstream==1 && imageptr<MAGIC && length>0 && width>0) {
			c = getchar();
			line[imageptr++] = c;
			if (c == 'e') {
			 c = getchar();
		   	 line[imageptr++] = c;
			 if (c == 'n') {
			  c = getchar();
			  line[imageptr++] = c;
			  if (c == 'd') {
			   c = getchar();
			   line[imageptr++] = c;
			   if (c == 's') {
				c = getchar();
				line[imageptr++] = c;
				if (c == 't') {
				 c = getchar();
				 line[imageptr++] = c;
				 if (c == 'r') {
				  c = getchar();
				  line[imageptr++] = c;
				  if (c == 'e') {
				   c = getchar();
				   line[imageptr++] = c;
				   if (c == 'a') {
					c = getchar();
					line[imageptr++] = c;
					if (c == 'm') {
					 c = getchar();
				     line[imageptr++] = c;
					 if (c == '\n') {
					  isstream = 2;
		}}}}}}}}}}}
		if (isstream == 2) {
			isstream = 0; isgraphicsobject = 0;
			sprintf (name, "out-%03d.tif", imagecounter++);
			imageptr -= 10; //skip endstream
			tiff_write_raw (width, length, name, line, imageptr);
		}
	}
	return 0;
}
