;Русский ввод в Java v.3 By Javer(c), NeO_2kX(c)
;X700XEFC3
.binid X700XEFC3
.little
.require ADF1FC80
.group "Java"
.patchname "Русский ввод в Java"
.ver 3
.patchinfo "Патч добавляет возможность ввода текста на русском языке в Java, что необходимо, например, для ICQ-клиентов.
.patchinfo "После установки патча необходимо в мидлет, в котором нужен русский ввод, добавить папку com с необходимым классом."
.patchinfo "Требует установки патча 'Перенос заставок браузера'!"
.patchinfo ""
.patchinfo "Отдельная благодарность SergeyL за помощь в раскрытии загадок самсунга касательно Java MIDP 2.0"
.patchinfo "P.S. В основе патча лежит идея, придуманная dan_av еще для X100, за что ему тоже выражается благодарность."
.patchinfo ""
.patchinfo "Версия 3:"
.patchinfo "1)Добавлен показ текущего языка;"
.patchinfo "2)Исправлен глюк Samsung с начальным выводом режима ввода в Java;"
.patchinfo "3)Исправлены координаты иконок ввода;
.patchinfo "4)Убрана полоса софт-клавиш при вводе символа."

.Include "C:\\Users_Settings\\NeO_2kX\\Мои документы\\Исходники патчей\\X700XEFC3_Api.h"
.equ JavaSoftkeyDisplay		0x116BC1F0
.equ is_full_screen_mode	0x184C074B
.equ lk_GetImageInfo 		0x112E9AE8
.equ gv_ColorSotfkeyBG		0x1834CC4C
.equ Iy_pos					0x18455DB6
.equ Iwidth 				0x18455DB8
.equ Iheight 				0x18455DBA
.equ IconTimerId 			0x18455DB2
.equ inputMode 				0x184C446C
.equ Isize 					0x18455DBC
.equ Ibit_size 				0x18455DAD
.equ Iversion				0x18455DAE
.equ IGraphic				0x18455DD0

;Main
.start 0x11ACCD0A
.hex 0C
.string "com/sun/cldc"
.hex 00 00 00 00 00

.start 0x1037B8E9
.string "ru"
.hex 00 00

.start 0x11AFB9F0
.hex 0A 00 00 00 E9 B8 37 10

.start 0x1037B62E
.setbyte 0x1037B680

;Soft
.start 0x1095A3C8
	NOP

;NumOfLang
.start 0x104F0EB0
	CMP		R4, #6
	
.start 0x104F0E94
LCDUIsetInputMode:
PUSH	{R7,LR}
	CMP		R0, #0
	BLE		Exit_LCDUIsetInputMode
	
	LDR		R2, =inputMode
	MOV		R1, #1
	STR 	R1, [R2]
	STR 	R0, [R2, #4]
	
	BL		displayJavaT9Mode

Exit_LCDUIsetInputMode:
POP		{R7,PC}
.data
;.setbyte 0x104F0ED0

;void displayJavaT9Mode()
.start 0x010997ED8
displayJavaT9Mode:
PUSH	{R4-R7,LR}
SUB		SP, SP, #28
	LDR		R5, =Iversion
	LDR		R6, =Ibit_size
	LDR		R7, =Isize
	
	MOV		R4, #0		;Down
	LDR		R0, =inputMode
	LDR 	R0, [R0, #4]
	
.caseb R0,Exit_displayJavaT9Mode,Exit_displayJavaT9Mode,DJTM_EnglishUp,DJTM_EnglishDown,DJTM_Num,DJTM_Sym,DJTM_RussianUp,DJTM_RussianDown
;7D00 C900 1000 1000 00030000050B0000 58C99511 FFFF
;x=125, y=201, w=16, h=16, *gr=1195C958	
DJTM_Sym:
	LDR		R0, =0x1195C958
	B		DJTM_Mode
	
DJTM_Num:
;7D00 C900 1000 1000 00030000050B0000 E0791011 FFFF
;x=125, y=201, w=16, h=16, *gr=111079E0
	LDR		R0, =0x111079E0
	B		DJTM_Mode

DJTM_RussianUp:
	MOV		R4, #1
DJTM_RussianDown:
	LDR		R0, =Icon_Ru
	B		DJTM_Mode
	
DJTM_EnglishUp:
;7D00 C900 1000 1000 00030000050B0000 0F1F5211 FFFF
;x=125, y=201, w=16, h=16,
	MOV		R4, #1	;Up
DJTM_EnglishDown:
	LDR		R0, =Icon_En
	B		DJTM_Mode

DJTM_Unk:
	MOV		R0, #0

DJTM_Mode:
	STR		R0, [SP, #16]

;Фон
	MOV		R0, #0
	STR		R0, [SP, #4]
	
	LDR		R0, =gv_ColorSotfkeyBG
	LDR		R0, [R0]
	STR		R0, [SP]
	
	MOV		R3, #16
	MOV		R2, #31
	MOV		R1, #201
	MOV		R0, #57
	BL		DrawHLine			;void DrawHLine(int x, int y, int w. int h, int Color, int CurScreen)

;Режим	
	MOV		R2, #0
	STR		R2, [SP, #24]
	MOV		R1, #33				;33 - прозрачность
	STR		R1, [SP, #20]
	MOV		R0, #11
	STR		R0, [SP, #12]
	MOV		R0, #5
	STR		R0, [SP, #8]
	MOV		R0, #1
	STR		R0, [SP, #4]
	MOV		R0, #16
	STR		R0, [SP]
	MOV		R3, #16
	MOV		R2, #201
	MOV		R1, #72
	MOV		R0, #0
	BL		lk4_8GraphicWindow	;void lk4_8GraphicWindow(int CurScreen, int x, int y, int w, int h, int size, int bit_size, int version, *graphic, int rop,  int UpdateFlag)

	CMP		R4, #1
	BNE		DJTM_Refresh

;Иконка Up/Down
;6A00 C900 1000 1000 00030000050B0000 5C92C110 FFFF
;x=106, y=201, w=16, h=16
	LDR		R0, =0x000080F0
	ADD		R0, #1
	BL		lk_GetImageInfo
	
	MOV		R2, #0
	STR		R2, [SP, #24]
	
	MOV		R1, #33
	STR		R1, [SP, #20]
	
	LDR		R0, =IGraphic
	LDR 	R0, [R0]
	STR		R0, [SP, #16]
	
	LDRB	R2, [R5]
	STR		R2, [SP, #12]
	
	LDRB	R1, [R6]
	STR		R1, [SP, #8]
	
	LDRH	R0, [R7]
	STR		R0, [SP, #4]
	
	LDR		R0, =Iheight
	LDRH	R2, [R0]
	STR		R2, [SP]

	LDR		R0, =Iwidth
	LDRH	R3, [R0]
	
	LDR		R0, =Iy_pos
	LDRH	R2, [R0]
	
	MOV		R1, #57
	MOV		R0, #0
	BL		lk4_8GraphicWindow	;void lk4_8GraphicWindow(int CurScreen, int x, int y, int w, int h, int size, int bit_size, int version, *graphic, int rop,  int UpdateFlag)

DJTM_Refresh:
	MOV		R2, #0
	STR		R2, [SP]
	STR		R2, [SP, #4]
	MOV		R3, #23
	MOV		R2, #176
	MOV		R1, #197
	MOV		R0, #0
	BL		lk4_9LcdInvalidate

Exit_displayJavaT9Mode:	
ADD		SP, SP, #28
POP		{R4-R7,PC}
.data

.align 1
Include:
	LDR		R0, =is_full_screen_mode
	LDRB	R0, [R0]
	CMP		R0, #0
	BNE		Include_FullExit

	MOV		R1, R5
	MOV		R0, R7
	BL		JavaSoftkeyDisplay
	
	LDR		R0, =inputMode
	MOV		R5, #0
	STR 	R5, [R0]
	
	LDR		R0, =0x1095A45C+1
	BX		R0

Include_FullExit:
POP		{R1-R7,PC}
.data
	
j__rt_memcpy: bpc __rt_memcpy
;.setbyte 0x10998020

;Java_javax_microedition_lcdui_Display_refreshList
.start 0x10064036
	STRB	R6, [R0]
	B		ClearInputMode

;Отключение трассировки
.start 0x10064050
	B		0x10064070
ClearInputMode:
	LDR		R0, =inputMode
	STR 	R6, [R0]
	STR		R6, [R0, #4]
	B		0x1006403E
.data
;.setbyte 0x10064070

;Исправление глюка с отображением начального режима ввода
.start 0x1095A454
	LDR		R0, =Include+1
	BX		R0
.data
	
.start 0x10F56A1E
Icon_En:
.insertdata "C:\\Users_Settings\\NeO_2kX\\Рабочий стол\\Иконки_режима_ввода_En.icn"
Icon_Ru:
.insertdata "C:\\Users_Settings\\NeO_2kX\\Рабочий стол\\Иконки_режима_ввода_Ru.icn"

.pathres  "  <resmap>
.pathres  "   <img offset="%Icon_En%" title="Английский" width="16" height="16" bpp="18">
.pathres  "   <img offset="%Icon_Ru%" title="Русский" width="16" height="16" bpp="18">
.pathres  "  </resmap>
