;Настройка времени окон информации By dimastyj(c), NeO_2kX(c)
;X700XEFC3
.patchname "Настройка времени окон информации"
.ver 1.0
.require ADF1FC80,71BDD8B5
.group "Интерфейс"
.patchinfo "Теперь в дополнительных настройках телефона (Меню-9-2-6) можно устанавливать время отображения окон информации. Возможные варианты: 250, 500, 750, 1000, 1250, 1500, 1750 и 2000 мс."
.patchinfo ""
.patchinfo "Перед установкой удалить все альтернативные патчи."
.patchinfo "Необходима установка патча '-=Мастер патч=-', 'Перенос заставок браузера'!"


.Include "C:\\Users_Settings\\NeO_2kX\\Мои документы\\Исходники патчей\\X700XEFC3_Api.h"
.equ lk_GetFocusCheckboxState	0x10E563D0
.equ lk_GetCurSpinIndex			0x112E9840
.equ cfg_image					0x18FC0000
.equ gv_WinTime					0x18FFFFF5	;byte
;lk_CreateFocus(*DspFocus, *Struct, int NumOfItems)
;lk_AddFocus(*DspFocus, int NumOfFocuses, int Type, int Height, int NULL)
;lk_AddFocusItem(*DspFocus, int NumOfItem, int ?, 

;Type of Focus :
;2 - SpinBox, 3 - CheckBox, 7 - ScrollBox

;Врезка для инициализации
.start 0x10E98354
	LDR		R2, =ExtendedInit+1
	BX		R2
.data

;Врезки для подмены времени
.start 0x10960BA8
	LDR 	R0, =Extended_Time1+1
	BX		R0
.data

.start 0x104F7D36
	LDR		R0, =Extended_Time+1
	BLX		R0
	
	B		0x104F7D40
.data

.start 0x10960BFE
	LDR		R0, =Extended_Time+1
	BLX		R0
	
	B		0x10960C08
.data
	
.start 0x10E9960C
	MOV		R2, #5				;NumOfFocuses
	
;Исправление номеров фокусов
.start 0x10E99620
	MOV		R1, #1
	
.start 0x10E99638
	MOV		R1, #1
	
.start 0x10E99644
	MOV		R1, #1
	
.start 0x10E99656
	MOV		R1, #2
	
.start 0x10E9966C
	MOV		R1, #2
	
.start 0x10E99678
	MOV		R1, #2	
	
.start 0x10E9968A
	MOV		R1, #3
	
.start 0x10E9969E
	MOV		R1, #3
	
.start 0x10E996AA
	MOV		R1, #3
	
.start 0x10E996BC
	MOV		R1, #4
	
.start 0x10E996D2
	MOV		R1, #4
	
.start 0x10E996DC
	MOV		R1, #4
	
;Правка сохранения
.start 0x10E99040
	LDR		R1, =ExtendedSave+1
	BX		R1
.data
	
.start 0x10E99066
	MOV		R1, #2
	
.start 0x10E990C4
	MOV		R1, #3
	
.start 0x10E9908C
	MOV		R1, #4

;Врезка для расширения меню
.start 0x10E99616
	LDR		R2, =ExtendedFocus+1
	BX		R2
.data

;========= Main Body ==================================================================== 
.start 0x10F57020
ExtendedFocus:
	MOV		R2, #8				;NumOfValues
	STR		R2, [SP]
	MOV		R3, #50				;int Height
	MOV		R2, #2				;int Type(SpinBox)
	MOV		R1, #0				;NumOfFocus
	MOV		R0, R4				;*DspFocus
	BL		lk_AddFocus			;lk_AddFocus(*DspFocus, int NumOfFocuses, int Type, int Height, int NULL)
	
	BL		lk_get_my_str
	
	MOV		R2, #0
	STR		R2, [SP, #4]
	
	STR		R0, [SP]			;*str
	MOV		R3, #10				;SpinBox(Title)
	MOV		R1, #0				;NumOfFocus
	MOV		R0, R4				;*DspFocus
	BL		lk_AddFocusItem
	
	MOV		R6, #0
	MOV		R7, #0

loc_21076652:	
	ADR		R0, =Strings
	ADD		R0, R0, R6
	
	MOV		R1, #0				;NumOfFocus
	STR		R1, [SP, #4]
	
	STR		R0, [SP]			;*str
	MOV		R3, #17				;SpinBox(Value)
	MOV		R2, R7				;NumOfValue
	MOV		R0, R4				;*DspFocus
	BL		lk_AddFocusItem
	
	ADD		R6, #4
	ADD		R7, #1
	IF		R7 < 4 loc_21076670
	
	ADD		R6, #1

loc_21076670:	
	IF		R7 < 8 loc_21076652
	
	LDR		R0, =gv_WinTime
	LDRB	R2, [R0]			;Value
	MOV		R1, #0				;NumOfFocus
	MOV		R0, R4				;*DspFocus
	BL		lk_SetCurSpinIndex	;void lk_SetCurSpinIndex(*DspFocus, NumOfFocus, int Value)
	
	MOV		R6, #25				;int Height
	
	MOV		R2, #0
	STR		R2, [SP]			;NULL
	MOV		R3, R6				;int Height
	MOV 	R2, #3				;int Type(CheckBox)
	
	LDR		R1, =0x10E99620+1
	BX		R1
.data

.align 2
Strings:
.string "250"
.string "500"
.string "750"
.string "1000"
.string "1250"
.string "1500"
.string "1750"
.string "2000"

.align 1
ExtendedSave:
	MOV		R4, R0
	MOV		R1, #0
	BL		lk_GetCurSpinIndex

	BLX		j_ReadCFG				;void ReadCFG()
	
	LDR		R2, =gv_WinTime
	LDR		R1, =cfg_image
	STRB	R0, [R1]
	STRB	R0, [R2]
	BLX		j_SaveCFG				;void SaveCFG()
	
	MOV		R1, #1
	MOV		R0, R4
	BL		lk_GetFocusCheckboxState
	
	LDR		R1, =0x18458290
	
	LDR		R3, =0x10E99048+1
	BX		R3
.data

.align 1
ExtendedInit:
	LDR 	R0, [R0]
	LDR		R2, [SP, #0xF8]
	LSL		R0, R0, #15	
	LSR		R0, R0, #30
	STRB	R0, [R2, #0xD]
	
	BLX		j_ReadCFG
	
	LDR		R1, =gv_WinTime
	LDR		R0, =cfg_image
	LDRB	R0, [R0]
	STRB	R0, [R1]
	
ADD		SP, SP, #0x13C
POP		{R4-R7,PC}
.data

.equ gv_TextLanguage 0x184582BC
.align 1
lk_get_my_str:
PUSH	{LR}
	LDR		R0, =gv_TextLanguage
	LDRB	R0, [R0]
	
	CMP		R0, #3
	BNE		lgmt_n1
	
	ADR		R0, =WinTime_Ru
	B		Exit_lk_get_my_text
	
lgmt_n1:
	CMP		R0, #8
	BNE		lgmt_n2
	
	ADR		R0, =WinTime_Ua
	B		Exit_lk_get_my_text

lgmt_n2:
	ADR		R0, =WinTime_En

Exit_lk_get_my_text:	
POP		{PC}
.data

.align 1
Extended_Time:
PUSH	{LR}
	MOV		R1, #250
	LDR		R0, =gv_WinTime
	LDRB	R0, [R0]
	ADD		R0, #1
	MUL		R1, R0
POP		{PC}

.align 1
Extended_Time1:
	MOV		R1, #250
	LDR		R0, =gv_WinTime
	LDRB	R0, [R0]
	ADD		R0, #1
	MUL		R1, R0
	
	LDR		R2, =0x10960BB2+1
	BX		R2
.data


.align 2
WinTime_Ru:
.string "Время окон информации (мс.)"
.align 2
WinTime_Ua:
.string "Час інформаційних вікон (мх.)"
.align 2
WinTime_En:
.string "Windows time (ms.)"

j_ReadCFG: blxx ReadCFG+1
j_SaveCFG: blxx SaveCFG+1