#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>

#include <egb.h>
#include <guidbg.h>

#include "ysmacro.h"
#include "ysgui.h"
#include "ysmalloc.h"
#include "ysrename.h"


extern int Ys11Id;
extern int pdSrcId;
extern int pdDstId;
extern int pdSrcScr;
extern int pdDstScr;
extern int curDirId;

int LmClearListMenu(void)
{
	/* —Ìˆæ‰ð•ú */
	MMI_SendMessage(pdSrcId,MM_SETMAXROWCOLUM,2,0,0);
	MMI_SendMessage(pdDstId,MM_SETMAXROWCOLUM,2,0,0);
	return YSTRUE;
}

static void LmSetScrollBarFunc(int hei);

int LmSetListMenu(void)
{
	int i,nFil,wid,hei;
	char *(*src),*(*dst);
	HYPER hyp;

	FlNumFiles(&nFil);
	if(nFil==0)
	{
		MMI_SendMessage(pdSrcId,MM_SETMAXROWCOLUM,2,0,0);
		MMI_SendMessage(pdDstId,MM_SETMAXROWCOLUM,2,0,0);
		YsRepaintWindow(pdSrcId);
		YsRepaintWindow(pdDstId);
		return YSTRUE;
	}

	src=(char *(*))MALLOCFUNC(sizeof(char *)*nFil);
	dst=(char *(*))MALLOCFUNC(sizeof(char *)*nFil);
	if(src==NULL || dst==NULL)
	{
		return YSFALSE;
	}

	FlGetFileList(src);
	FlGetNewFileList(dst);

	MMI_SendMessage(pdSrcId,MM_SETMAXROWCOLUM,2,0,0);
	MMI_SendMessage(pdDstId,MM_SETMAXROWCOLUM,2,0,0);
	MMI_SendMessage(pdSrcId,MM_SETMAXROWCOLUM,2,nFil+1,1);
	MMI_SendMessage(pdDstId,MM_SETMAXROWCOLUM,2,nFil+1,1);

	MMI_SendMessage(pdSrcId,MM_GETHYPER,1,&hyp);
	wid=  hyp.fr.rdwx-hyp.fr.lupx;
	hei=  hyp.fr.rdwy-hyp.fr.lupy;
	MMI_SendMessage(pdSrcId,MM_SETCOLUMLEN,2,0,wid/6);
	MMI_SendMessage(pdDstId,MM_SETCOLUMLEN,2,0,wid/6);
	LmSetScrollBarFunc(hei/12-1);

	for(i=0; i<nFil; i++)
	{
		MMI_SendMessage(pdSrcId,MM_SETROWCOLUM,4,i,0,src[i],0);
		MMI_SendMessage(pdDstId,MM_SETROWCOLUM,4,i,0,dst[i],0);
	}

	YsRepaintWindow(pdSrcId);
	YsRepaintWindow(pdDstId);

	FREEFUNC(src);
	FREEFUNC(dst);

	return YSTRUE;
}

static void LmSetScrollBarFunc(int hei)
{
	int n,m;
	int prt,min,max,len,pag;
	MMI_SendMessage(pdSrcScr,MM_GETSCROLL,5,&prt,&min,&max,&len,&pag);

	/* n:‘I‘ð€–Ú”  m:•\Ž¦” */
	FlNumFiles(&n);
	m=hei;
	min = m-1;
	max = ((n<m) ? (m-1) : (n-1));
	len = m;
	pag = 1;

	prt=YsLarger(min,prt);
	prt=YsSmaller(max,prt);

	MMI_SendMessage(pdSrcScr,MM_SETSCROLL,5,prt,min,max,len,pag);
	MMI_SendMessage(pdDstScr,MM_SETSCROLL,5,prt,min,max,len,pag);

	YsRepaintWindow(pdSrcScr);
	YsRepaintWindow(pdDstScr);
}

int LmSetScrollBarToTheEnd(void)
{
	int prt,min,max,len,pag;
	MMI_SendMessage(pdSrcScr,MM_GETSCROLL,5,&prt,&min,&max,&len,&pag);

	prt=max;

	MMI_SendMessage(pdSrcScr,MM_SETSCROLL,5,prt,min,max,len,pag);
	MMI_SendMessage(pdDstScr,MM_SETSCROLL,5,prt,min,max,len,pag);

	MMI_SendMessage(pdSrcId,MM_SETDSPROWCOLUM,2,prt-min,0);
	MMI_SendMessage(pdDstId,MM_SETDSPROWCOLUM,2,prt-min,0);

	YsRepaintWindow(pdSrcId);
	YsRepaintWindow(pdDstId);
	YsRepaintWindow(pdSrcScr);
	YsRepaintWindow(pdDstScr);

	return YSTRUE;
}


int LmCurrentDir(void)
{
	char *cur;
	static char str[80];

	FlGetCurrentDirPtr(&cur);
	sprintf(str,"%-32s",cur);
	str[32]=0;
	MMI_SendMessage(curDirId,MM_SETMSG,1,str);
	MMI_SendMessage(curDirId,MM_SHOW,0);

	return YSTRUE;
}


static void LmResetScrollFunc(int kobj);

int LmScrollBarFunc(int kobj)
{
	int prt,min,max,len,pag;

	LmResetScrollFunc(kobj);

	MMI_SendMessage(kobj,MM_GETSCROLL,5,&prt,&min,&max,&len,&pag);

	MMI_SendMessage(pdSrcId,MM_SETDSPROWCOLUM,2,prt-min,0);
	MMI_SendMessage(pdDstId,MM_SETDSPROWCOLUM,2,prt-min,0);

	YsRepaintWindow(pdSrcId);
	YsRepaintWindow(pdDstId);

	return NOERR;
}

static void LmResetScrollFunc(int kobj)
{
	int prt,min,max,len,pag;

	MMI_SendMessage(kobj,MM_GETSCROLL,5,&prt,&min,&max,&len,&pag);

	MMI_SendMessage(pdSrcScr,MM_SETSCROLL,5,prt,min,max,len,pag);
	MMI_SendMessage(pdDstScr,MM_SETSCROLL,5,prt,min,max,len,pag);

	YsRepaintWindow(pdSrcScr);
	YsRepaintWindow(pdDstScr);
}
