
#include "quiz.h"

struct Window *window = NULL;

int file_changed = FALSE;
int scanning = -1;
char *wordptr = NULL;
int show_sentence = 0;
int show_word = 0;
int entry = -1;	/* TW_ENTRY or TS_ENTRY for thai text entry */

struct thai_phrase sentence_head =
	{ "" , "" , "" , 0 , 0 , NULL , NULL };

struct thai_phrase word_head =
	{ "" , "" , "" , 0 , 0 , NULL , NULL };

static char buf[9][MAX_STRING];		/* warning - also refered to by sinfo[] */

struct thai_phrase screen_sentence =
	{ &buf[0][0] , &buf[1][0] , &buf[2][0] , 0 , 0 , NULL , NULL };

struct thai_phrase screen_word =
	{ &buf[3][0] , &buf[4][0] , &buf[5][0] , 0 , 0 , NULL , NULL };

struct thai_phrase scan =
	{ &buf[6][0] , &buf[7][0] , &buf[8][0] , 0 , 0 , NULL , NULL };

struct thai_phrase *chosen_sentence = &sentence_head;

struct thai_phrase *chosen_word = &word_head;

static struct IntuiText CmdIntuiText[ NUM_CMDS ] = {
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Sentence" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Speak" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Thai" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Phonetic" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"English" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Right" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Wrong" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Add" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Delete" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Word" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Speak" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Thai" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Phonentic" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"English" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Right" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Wrong" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Add" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Delete" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Search" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Next" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Prev" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"TSEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"PSEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"ESEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"TWEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"PWEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"EWEntry" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Translate" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Translate" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Replace" , NULL } ,
	{ FP , BP , JAM1 , 4 , 2 , NULL , (UBYTE*)"Replace" , NULL }
};


static USHORT up_data[12*2] = {
	0x0000 , 0x0000 ,
	0x0001 , 0x0000 ,
	0x0003 , 0x8000 ,
	0x0007 , 0xC000 ,
	0x000F , 0xE000 ,
	0x001F , 0xF000 ,
	0x003F , 0xF800 ,
	0x007F , 0xFC00 ,
	0x00FF , 0xFE00 ,
	0x01FF , 0xFF00 ,
	0x03FF , 0xFF80 ,
	0x0000 , 0x0000
};

static USHORT down_data[12*2] = {
	0x0000 , 0x0000 ,
	0x03FF , 0xFF80 ,
	0x01FF , 0xFF00 ,
	0x00FF , 0xFE00 ,
	0x007F , 0xFC00 ,
	0x003F , 0xF800 ,
	0x001F , 0xF000 ,
	0x000F , 0xE000 ,
	0x0007 , 0xC000 ,
	0x0003 , 0x8000 ,
	0x0001 , 0x0000 ,
	0x0000 , 0x0000
};

static struct Image up_image =
	{ 0 , 0 , 31 , 12 , 1 , &up_data[0] , 1 , 0 , NULL };

static struct Image down_image =
	{ 0 , 0 , 31 , 12 , 1 , &down_data[0] , 1 , 0 , NULL };

static UBYTE undo[MAX_STRING];

static struct StringInfo sinfo[6] = {
	{ (UBYTE*)&buf[0][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL } ,
	{ (UBYTE*)&buf[1][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL } ,
	{ (UBYTE*)&buf[2][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL } ,
	{ (UBYTE*)&buf[3][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL } ,
	{ (UBYTE*)&buf[4][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL } ,
	{ (UBYTE*)&buf[5][0] , undo , 0 , MAX_STRING , 0 , 0 , 0 , 0 , 0 , 0 ,
		NULL , 0 , NULL }
};

#define NUM_PAIRS	5
static SHORT smallbox[ NUM_PAIRS*2 ] = {
	-4,-2,
	486,-2,
	486,10,
	-4,10,
	-4,-2
};

static SHORT bigbox[ NUM_PAIRS*2 ] = {
	-4,-2,
	486,-2,
	486,24,
	-4,24,
	-4,-2
};

static SHORT normbox[ NUM_PAIRS * 2 ] = {
	0,0,
	78,0,
	78,11,
	0,11,
	0,0
};

static SHORT searchbox[ NUM_PAIRS * 2 ] = {
	0,0,
	62,0,
	62,11,
	0,11,
	0,0
};

static struct Border smallborder =
	{ 0 , 0 , FP , BP , JAM1 , NUM_PAIRS , smallbox , NULL };

static struct Border bigborder =
	{ 0 , 0 , FP , BP , JAM1 , NUM_PAIRS , bigbox , NULL };

static struct Border normborder =
	{ 0 , 0 , 3 , 2 , JAM1 , NUM_PAIRS , normbox , NULL };

static struct Border searchborder =
	{ 0 , 0 , 3 , 2 , JAM1 , NUM_PAIRS , searchbox , NULL };

struct Gadget CmdGadget[ NUM_CMDS ] = {
	{ NULL , 2 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ CHOOSE_SENTENCE ] , 0 , NULL,
		CHOOSE_SENTENCE , NULL } ,
	{ NULL , 2 , 92 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ SPEAK_SENTENCE ] , 0 , NULL ,
		SPEAK_SENTENCE , NULL } ,
	{ NULL , 2 , 79 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ THAI_SENTENCE ] , 0 , NULL ,
		THAI_SENTENCE , NULL } ,
	{ NULL , 2 , 106 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ PHONETIC_SENTENCE ], 0, NULL,
		PHONETIC_SENTENCE , NULL } ,
	{ NULL , 2 , 119 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ ENGLISH_SENTENCE ] , 0, NULL,
		ENGLISH_SENTENCE , NULL } ,
	{ NULL , 84 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ RIGHT_SENTENCE ] , 0 , NULL ,
		RIGHT_SENTENCE , NULL } ,
	{ NULL , 166 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ WRONG_SENTENCE ] , 0 , NULL ,
		WRONG_SENTENCE , NULL } ,
	{ NULL , 248 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ ADD_SENTENCE ] , 0 , NULL ,
		ADD_SENTENCE , NULL } ,
	{ NULL , 330 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ DEL_SENTENCE ] , 0 , NULL ,
		DEL_SENTENCE , NULL } ,
	{ NULL , 574 , 79 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ TS_SEARCH ] , 0 , NULL ,
		TS_SEARCH , NULL } ,
	{ NULL , 574 , 106 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ PS_SEARCH ] , 0 , NULL ,
		PS_SEARCH , NULL } ,
	{ NULL , 574 , 119 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ ES_SEARCH ] , 0 , NULL ,
		ES_SEARCH , NULL } ,
	{ NULL , 2 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ CHOOSE_WORD ] , 0 , NULL ,
		CHOOSE_WORD , NULL } ,
	{ NULL , 2 , 159 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ SPEAK_WORD ] , 0 , NULL ,
		SPEAK_WORD , NULL } ,
	{ NULL , 2 , 146 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ THAI_WORD ] , 0 , NULL ,
		THAI_WORD , NULL } ,
	{ NULL , 2 , 173 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ PHONETIC_WORD ] , 0 , NULL ,
		PHONETIC_WORD , NULL } ,
	{ NULL , 2 , 186 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ ENGLISH_WORD ] , 0 , NULL ,
		ENGLISH_WORD , NULL } ,
	{ NULL , 84 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ RIGHT_WORD ] , 0 , NULL ,
		RIGHT_WORD , NULL } ,
	{ NULL , 166 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ WRONG_WORD ] , 0 , NULL ,
		WRONG_WORD , NULL } ,
	{ NULL , 248 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ ADD_WORD ] , 0 , NULL ,
		ADD_WORD , NULL } ,
	{ NULL , 330 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ DEL_WORD ] , 0 , NULL ,
		DEL_WORD , NULL } ,
	{ NULL , 574 , 146 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ TW_SEARCH ] , 0 , NULL ,
		TW_SEARCH , NULL } ,
	{ NULL , 574 , 173 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ PW_SEARCH ] , 0 , NULL ,
		PW_SEARCH , NULL } ,
	{ NULL , 574 , 186 , 63 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&searchborder , NULL , &CmdIntuiText[ EW_SEARCH ] , 0 , NULL ,
		EW_SEARCH , NULL } ,
	{ NULL , 607 , 133 , 31 , 12 , GADGHCOMP|GADGIMAGE
#ifdef USE_ON_OFF
		|GADGDISABLED
#endif
		,
		RELVERIFY , BOOLGADGET , (APTR)&down_image , NULL , NULL , 0 , NULL ,
		NEXT_ENTRY , NULL } ,
	{ NULL , 574 , 133 , 31 , 12 , GADGHCOMP|GADGIMAGE
#ifdef USE_ON_OFF
		|GADGDISABLED
#endif
		,
		RELVERIFY , BOOLGADGET , (APTR)&up_image , NULL , NULL , 0 , NULL ,
		PREV_ENTRY , NULL } ,
	{ NULL , TSBASEX , TSBASEY , TSWIDTH , 22 , GADGHCOMP , RELVERIFY ,
		BOOLGADGET , (APTR)&bigborder , NULL , NULL , 0 , NULL ,
		TS_ENTRY , NULL } ,
	{ NULL , 86 , 108 , 484 , 8 , GADGHCOMP , RELVERIFY , STRGADGET ,
		(APTR)&smallborder , NULL , NULL , 0 , (APTR)&sinfo[1] , PS_ENTRY ,
		NULL } ,
	{ NULL , 86 , 121 , 484 , 8 , GADGHCOMP , RELVERIFY , STRGADGET ,
		(APTR)&smallborder , NULL , NULL , 0 , (APTR)&sinfo[2] , ES_ENTRY ,
		NULL } ,
	{ NULL , TWBASEX , TWBASEY , TWWIDTH , 22 , GADGHCOMP , RELVERIFY ,
		BOOLGADGET , (APTR)&bigborder , NULL , NULL , 0 , NULL ,
		TW_ENTRY , NULL } ,
	{ NULL , 86 , 175 , 484 , 8 , GADGHCOMP , RELVERIFY , STRGADGET ,
		(APTR)&smallborder , NULL , NULL , 0 , (APTR)&sinfo[4] , PW_ENTRY ,
		NULL } ,
	{ NULL , 86 , 188 , 484 , 8 , GADGHCOMP , RELVERIFY , STRGADGET ,
		(APTR)&smallborder , NULL , NULL , 0 , (APTR)&sinfo[5] , EW_ENTRY ,
		NULL } ,
	{ NULL , 494 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ TRANSLATE_SENTENCE ] , 0 ,
		NULL , TRANSLATE_SENTENCE , NULL } ,
	{ NULL , 494 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ TRANSLATE_WORD ] , 0 ,
		NULL , TRANSLATE_WORD , NULL } ,
	{ NULL , 412 , 66 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ REPLACE_SENTENCE ] , 0 ,
		NULL , REPLACE_SENTENCE , NULL } ,
	{ NULL , 412 , 133 , 79 , 12 , GADGHCOMP , RELVERIFY , BOOLGADGET ,
		(APTR)&normborder , NULL , &CmdIntuiText[ REPLACE_WORD ] , 0 ,
		NULL , REPLACE_WORD , NULL }
};



init_globals ()
{
	int i;

	for ( i = 0; i < NUM_CMDS; i++ )
		AddGadget ( window , &CmdGadget[ i ] , (LONG)-1 );
	RefreshGadgets ( window->FirstGadget , window , (LONG)NULL );
}


refresh_gadget ( num )
int num;
{
	if ( num == TW_ENTRY || num == TS_ENTRY )
		redraw_thai ( num );
	RefreshGadgets ( &CmdGadget[ num ] , window , (LONG)NULL );
}


refresh_screen ()
{
	redraw_thai ( TW_ENTRY );
	redraw_thai ( TS_ENTRY );
	RefreshGadgets ( &CmdGadget[ TS_ENTRY ] , window , (LONG)NULL );
}


clr_screen ()
{
	screen_sentence.thai[0] = '\0';
	screen_sentence.phonetic[0] = '\0';
	screen_sentence.english[0] = '\0';
	screen_word.thai[0] = '\0';
	screen_word.phonetic[0] = '\0';
	screen_word.english[0] = '\0';
	refresh_screen ();
}


clr_word ()
{
	screen_word.thai[0] = '\0';
	screen_word.phonetic[0] = '\0';
	screen_word.english[0] = '\0';
	refresh_screen ();
}


clr_sentence ()
{
	screen_sentence.thai[0] = '\0';
	screen_sentence.phonetic[0] = '\0';
	screen_sentence.english[0] = '\0';
	refresh_screen ();
}
