#include "addr.h"

#define	MMI_CEPID		0x4209
#define	KEY_UP			0x194
#define	LONG_PRESS		0x195

	RSEG	IME_HOOK
	CODE16
	LDR	R3, =IME_
	BX	R3
/*	
	RSEG	SELECT_HOOK
	CODE16
	LDR	R1, =SELECT_
	BX	R1
*/	
	RSEG	JAVA_BD_POP_HOOK
	CODE16
	LDR	R1, =JAVA_BD_POP_
	BLX	R1
	
	RSEG	SYS_BD_POP_HOOK
	CODE16
	NOP
	
	RSEG	DISABLE_REDICAL_HOOK:CODE(1)
	CODE16
	MOV	R2, #0x64
	
	RSEG	CODE
	CODE16
SEND_KEYUP_MSG
	PUSH	{R0-R7, LR}
	MOV	R2, R0
	LDR	R0, =MMI_CEPID
	LDR	R1, =KEY_UP
	LDR	R7, =GBS_SendMessage_adr
	BLX	R7
	POP	{R0-R7, PC}
	
SEND_LONGPRESS_MSG
	PUSH	{R0-R7, LR}
	MOV	R2, R0
	LDR	R0, =MMI_CEPID
	LDR	R1, =LONG_PRESS
	LDR	R7, =GBS_SendMessage_adr
	BLX	R7
	POP	{R0-R7, PC}

/*
WSET_KBS_OFF //关闭部首
	PUSH	{R0-R7, LR}
	LDR	R0, =WGET_KBS_KSTATE //获取部首功能开关状态
	BLX	R0
	CMP	R0, #0
	BEQ	EXIT_SET
	
	MOV	R2, #0x64
	LDR	R0, =UNK_RAM_adr //
	MOV	R1, #5
	LDR	R0, [R0, #0]
	LDR	R7, =WSET_KBS_KSTATE
	BLX	R7
EXIT_SET
	POP	{R0-R7, PC}
	*/
IME_
	//BL	WSET_KBS_OFF
	STR	R0, [SP,#0xB4]
	LDR	R0, [SP,#0xD8]
	MOV	R3, #2
	LDRSH	R0, [R0,R3]
	CMP	R0, #0
	BEQ	IME_START
	CMP	R0, #0x15
	BEQ	DO_KEY_JING
EX_BACK
	LDR	R3, =DO_EBACK
	BX	R3
	
DIRECT_SELECT
	LDR	R3, [SP,#0xB8] //获取输入状态
	CMP	R3, #1
	BNE	EX_BACK
	MOV	R0, R2
	LDR	R2, =JAVA_EDIT_KOP
	LDR	R3, [SP,#0xD8]
	CMP	R2, R3
	BEQ	IS_JAVA
	BL	SEND_KEYUP_MSG
	LDR	R3, =DO_DIRECT_SELECT
	BX	R3
IS_JAVA
	BL	SEND_LONGPRESS_MSG
	BL	SEND_KEYUP_MSG
DO_NOTHING_ALL
	LDR	R3, =DO_NOTHING
	BX	R3
/*
START_SELECT
	LDR	R3, =DO_START_SELECT
	BX	R3
*/	
IME_START
	LDR	R3, [SP,#0xBC] //按键
	CMP	R3, #'7'
	BEQ	DO_KEY7
	CMP	R3, #'8'
	BEQ	DO_KEY8
	CMP	R3, #'9'
	BEQ	DO_KEY9
	CMP	R3, #'*'
	BEQ	DO_KEY_XING
	CMP	R3, #'0'
	BEQ	DO_KEY0
	CMP	R3, #'2'
	BEQ	DO_KEY2_FIX
	B	EX_BACK
	
DO_KEY2_FIX //JAVA中长按#键弹出输入法菜单,按2选择笔画,会输入一次2,修正
	LDR	R2, =USE_RAM
	LDR	R3, [R2, #0]
	CMP	R3, #0
	BEQ	EX_BACK
	MOV	R3, #0
	STR	R3, [R2, #0]
	B	DO_NOTHING_ALL
	

DO_KEY_JING
	MOV	R2, #'6'
	B	DIRECT_SELECT
	
DO_KEY0
	MOV	R2, #'5'
	B	DIRECT_SELECT
	
DO_KEY_XING
	LDR	R3, [SP,#0xB8]
	CMP	R3, #0
	BEQ	DO_NOTHING_ALL
	MOV	R2, #'4'
	B	DIRECT_SELECT
	
DO_KEY9
	MOV	R2, #'3'
	B	DIRECT_SELECT
	
DO_KEY8
	MOV	R2, #'2'
	B	DIRECT_SELECT
	
DO_KEY7
	MOV	R2, #'1'
	B	DIRECT_SELECT

/*
SELECT_
	CMP	R0, #'8'
	BEQ	START_SELECT
	SUB	R0, #0x31
	CMP	R0, #5
	BHI     DO_NOTHING_ALL
	MOV	R0, R5
	LDR	R1, =DO_SELECT_EBACK
	BX	R1
*/	
	CODE32
JAVA_BD_POP_
	ADD	LR, LR, #4
	LDR	R1, =KDB_KPOP_FUNC1_RAM
	LDRB	R1, [R1, #0]
	CMP	R1, #0xA
	BXEQ	LR
	CMP	R1, #8
	BXEQ	LR
	ADD	LR, LR, #0x98
	BX	LR

#define	WITHOUT_PINYIN
#ifdef	WITHOUT_PINYIN
	
/* 以下部分和拼音输入法修改中的一样 */
	RSEG	INPUTER_SEL_JAVA_HOOK
	CODE16
	LDR	R3, =INPUTER_SEL_JAVA_
	BLX	R3
	
	RSEG	KEY0_JAVA_HOOK
	CODE16
	LDR	R3, =KEY0_JAVA_
	BX	R3
	
	RSEG	OTH_FIX_BODY
	CODE16
//用于存储JAVA中输入法选择菜单状态,1表示刚打开过
INPUTER_SEL_JAVA_
	STR	R4, [SP, #0x10]
	STR	R7, [SP, #0x18]
	MOV	R3, #1
	STRB	R3, [R0, #0]
	LDR	R0, =USE_RAM
	//MOV	R3, #1
	STR	R3, [R0, #0]
	MOV	R0, LR
	ADD	R0, #4
	BX	R0

//JAVA中的0键预处理,等待输入状态则输入标点,拼音输入或选字状态则进入拼音输入法统一处理
KEY0_JAVA_
	LDR	R0, =GET_INPUT_STATE  //获取输入状态
	BLX	R0
	CMP	R0, #0 //拼音输入或选字状态
	BEQ	GOTO_IME
	MOV	R3, #1
	STR	R3, [R1,#0x1C]
	LDR	R3, =KEY0_FUNC1
	BLX	R3
	LDR	R3, =KEY0_BACK
	BX	R3
GOTO_IME
	LDR	R0, =KEY0_GOTO_IME
	BX	R0
#endif		
	END