#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>

#include "inc/ysmalloc.h"
#include "inc/ysmacro.h"
#include "inc/strvalue.h"

#include "inc/pixdata.h"
#include "inc/ysansi.h"
#include "inc/ysgui.h"
#include "inc/main.h"

#include "inc/filter.h"


extern int Ys11Id;   /* 使わないけど一応 ^_^;  */

static int UserFilterUpsideDownFunc();
static int UserFilterRighthandLeftFunc();


void UserFilterUpsideDown()
{
	UserFilterUpsideDownFunc();
}

int UserFilterUpsideDownCmd(int ac,char *av[])
{
	return UserFilterUpsideDownFunc();
}

static int UserFilterUpsideDownFunc()
{
	int x,y,wid,hei;
	PIXEL p1,p2;
	char str[128];

	/* カレント画像の存在のチェック & 解像度取得 */
	if(PxGetResolution(&wid,&hei)!=PX_NOERR)
	{
		return FLT_NOCURRENT;
	}

	/* 上下反転のループ */
	for(y=0; y<hei/2; y++)
	{
		sprintf(str,"%d / %d",y,hei/2);
		PrintSystemMessage(str);
		for(x=0; x<wid; x++)
		{
			PxGetOnePix(&p1,x,    y);
			PxGetOnePix(&p2,x,hei-y);
			PxSetOnePix(x,hei-y,&p1);
			PxSetOnePix(x,    y,&p2);
		}
	}
	return FLT_NOERR;
}


void UserFilterRighthandLeft()
{
	UserFilterRighthandLeftFunc();
}

int UserFilterRighthandLeftCmd(int ac,char *av[])
{
	return UserFilterRighthandLeftFunc();
}

static int UserFilterRighthandLeftFunc()
{
	int x,y,wid,hei;
	PIXEL p1,p2;
	char str[128];

	/* カレント画像の存在のチェック & 解像度取得 */
	if(PxGetResolution(&wid,&hei)!=PX_NOERR)
	{
		return FLT_NOCURRENT;
	}

	/* 左右反転のループ */
	for(y=0; y<hei; y++)
	{
		sprintf(str,"%d / %d",y,hei);
		PrintSystemMessage(str);
		for(x=0; x<wid/2; x++)
		{
			PxGetOnePix(&p1,    x,y);
			PxGetOnePix(&p2,wid-x,y);
			PxSetOnePix(wid-x,y,&p1);
			PxSetOnePix(    x,y,&p2);
		}
	}
	return FLT_NOERR;
}
