#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>

int	DB_typeAlert = -1 ;
int	DB_typeBtn = -1 ;
int	DB_typesub = -1 ;
int	DB_typetytle = -1 ;
int	DB_typeText = -1 ;
int	DB_typeText_sc = -1 ;

#define TYPESIZE (16*1024-1)   /* 読み込むファイルの最大バイト数   */
                               /* ファイルの読み込み領域はスタック */

/*	initDataTYPED:DB_typeBtn:MJ_DBUTTONL40の呼び出し関数	*/
int	DB_typeFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	MMI_SendMessage( DB_typeAlert, MM_ERASE, 0);
	MMI_SendMessage( DB_typeAlert, MM_DETACH, 0);
	MMI_SetHaltFlag(True);
	return NOERR ;
}

/*	initDataTYPED:DB_typeText_sc:MJ_SCRLL40の呼び出し関数	*/
int	DB_type_scFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	TEHandle	*textPtr;
	int		prt , max , min , len , page ;
	int		oprt ;

	MG_mosDisp( 2 );
	MMI_SendMessage( DB_typeText_sc, MM_GETSCROLL,
								 5, &prt, &min, &max, &len, &page) ;
	MMI_SendMessage( DB_typeText, MM_GETTEHANDLE, 1, &textPtr );

	/*	スクロールバーの現在値は prt-min であり,スクロールバーが押される
	前と後の prt-min を比べることによりスクロールバーの動いた量を知る	*/

	/*	textPrt->dspline : 
		表示開始行(スクロールバーを動かす前の prt-min の値と同じ)	*/

	oprt = textPtr->dspline ;
	/*	スクロールバーの動いた値だけテキストをスクロール	*/
	TE_Activate( textPtr, 0 ,0 );
	TE_Scroll( ( (prt - min) >= oprt )? 1 : 0, abs( prt - min - oprt ) );
	/*	マウス表示	*/
	MG_mosDisp( 3 );
	return NOERR ;
}

int DB_typeAlertCall( char *title, char *fname )
{
	extern int DB_base;
	char buf[TYPESIZE+1];
	FILE *fp;
	TEHandle *th;
	HYPER hyp;
	int line, textlen, prt, min, max, len, page, sz=0, mos;
	
	MG_PushPtr( 64 , &mos ) ;
	fp=fopen( fname, "rb");
	if( fp ) {
		sz=fread( buf, 1, TYPESIZE, fp);
		fclose(fp);
	} else {
		sprintf(buf,"ファイル(%s)のオープンができませんでした\n",fname); 
		sz=strlen(buf);
	}
	if(sz<0) sz=0;
	buf[sz]=0;
	MMI_SendMessage( DB_typetytle, MM_SETMSG, 1, title );
	MMI_SendMessage( DB_typeText,  MM_SETTEXT, 3, buf, sz, FALSE);
	MMI_SendMessage( DB_typeText, MM_GETTEHANDLE, 1, &th );
	MMI_SendMessage( DB_typeText, MM_GETHYPER, 1, &hyp );
	TE_Activate( th, 0, 0);
	TE_dsplineJump( 0 ) ;
	TE_GetTextLine( &line );
	textlen= (hyp.fr.rdwy-hyp.fr.lupy+1)/(th->txFont.sizeY + th->lineHeight);
	prt=textlen-1;
	min=textlen-1;
	max=( (line>textlen)?line:textlen )-1;
	len=textlen;
	page=textlen-1;
	MMI_SendMessage( DB_typeText_sc,MM_SETSCROLL,5,prt,min,max,len, page );
	MMI_SendMessage( DB_typeAlert, MM_ATTACH, 1, DB_base);
	MMI_SendMessage( DB_typeAlert, MM_SHOW, 0);
	MG_PopPtr( mos ) ;
	MMI_ExecSystem();
	MMI_SendMessage( DB_typeText,  MM_SETTEXT, 3, NULL, 0, FALSE);
	return 0;
}

