#include <clip.h>

#define APPNAME		"swfwin"

//#define FILENAME	"new1.swf"
//#define FILENAME	"test3.swf"
//#define FILENAME	"test5.swf"
//#define FILENAME	"font3.swf"
//#define FILENAME	"test1.swf"
#define FILENAME	"test4.swf"
//#define FILENAME	"mc1_1p.swf"

int main(int argc, char* argv[]) {
	FILE* fp;
	static unsigned char data[1024 * 1024];
	const SWF_INFO* info;
	int frame = 0;

	DEBUG_INIT();

	fp = fopen(FILENAME, "rb");
	if(!fp) {
		DIE();
	}
	fread(data, 1, sizeof data, fp);
	fclose(fp);

	swf_init(data);
	info = swf_info();
	printf("FrameSize.Xmin %f\n", info->FrameSize.Xmin);
	printf("FrameSize.Xmax %f\n", info->FrameSize.Xmax);
	printf("FrameSize.Ymin %f\n", info->FrameSize.Ymin);
	printf("FrameSize.Ymax %f\n", info->FrameSize.Ymax);
	printf("FrameRate      %f\n", info->FrameRate);
	printf("FrameCount     %d\n", info->FrameCount);

	/* Win32ではswf_draw()がコンパイルできないので、
	 * 毎フレームの実行だけを行なって、異常終了しないことと、
	 * 終了時にメモリリークしないことだけを確認します。
	 */
	for(;;) {
		if(_kbhit()) {
			break;
		}
		swf_exec();
		info = swf_info();
		printf("HIT KEY to EXIT, loop = %d, total frame = %d\n", info->loop_count, frame);
		frame++;
	}

	swf_free();

	return 0;
}

/*****************************************************************************
 *	Win32ではもうclipren2.c全体をコンパイルできないので、
 *	必要な関数だけをコピーして含めることにします。
 *****************************************************************************/

//{{clipren2.cより
void texture_copy(TEXTURE* texture, SURFACE* surface, int x, int y) {
	const unsigned char* vbuff = surface->vbuff + surface->w * y + x;
	unsigned char* buf = texture->buf;
	int gap = surface->w - texture->header.w;
	int bpp = texture->header.bpp;	/* 1,2,4 */
	int w = texture->header.w;	/* 8N */
	int i = texture->header.h;
	if(!texture->header.mask) {
		w *= bpp;		/* 8N * {1,2,4} */
		do {
			int j = w;
			do {
				//int c = -1U >> 8;
				//↓VC++6.0警告抑制
				int c = 0xFFFFFF;
				do {
					c = (c << bpp) | *vbuff++;
				} while(c >= 0);
				*buf++ = c;
			} while(j -= 8);
			vbuff += gap;
		} while(i -= 1);
	} else {
		unsigned char* mask = texture->mask;
		int trans = 1 << bpp;
		do {
			int j = w;
			do {
				//int m = -1U >> 8;
				//↓VC++6.0警告抑制
				int m = 0xFFFFFF;
				do {
					//int c = -1U >> 8;
					//↓VC++6.0警告抑制
					int c = 0xFFFFFF;
					do {
						int s = *vbuff++;
						c <<= bpp;
						m <<= 1;
						if(s < trans) {
							c |= s;
							m |= 1;
						}
					} while(c >= 0);
					*buf++ = c;
				} while(m >= 0);
				*mask++ = m;
			} while(j -= 8);
			vbuff += gap;
		} while(i -= 1);
	}
}
//}}clipren2.cより
