Subversion Repositories Kolibri OS

Rev

Rev 403 | Rev 439 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
234 Lrz 1
;  09.08.2006 произведена оптимизация работы конпок DEL и Backspace? уменьшен размер выполняемого кода.
2
;Эффективное программирование в KOLIBRI
3
;Оптимизированный компонент EditBox (Исходный вариант от Maxxxx32)
4
;Оптимизация команд.
292 Lrz 5
;  - Теплов Алексей  www.lrz.land.ru
234 Lrz 6
 
7
;заголовок приложения
8
use32		; транслятор, использующий 32 разрядных команды
9
    org 0x0		; базовый адрес кода, всегда 0x0
10
    db 'MENUET01'	; идентификатор исполняемого файла (8 байт)
11
    dd 0x1		; версия формата заголовка исполняемого файла
12
    dd start		; адрес, на который система передаёт управление
13
	                ; после загрузки приложения в память
14
    dd i_end		; размер приложения
282 Lrz 15
    dd i_end and not 3	; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
16
    dd i_end and not 3	; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
234 Lrz 17
    dd 0x0,0x0		; указатель на строку с параметрами.
18
                 ;    если после запуска неравно нулю, приложение было
19
                 ;    запущено с параметрами из командной строки
20
 
21
		 ;    указатель на строку, в которую записан путь,
22
                 ;    откуда запущено приложение
23
 
24
	include 'editbox.inc'
25
	use_edit_box
26
;Область кода
27
start:				;Точка входа в программу
28
	mov	eax,40		;установить маску для ожидаемых событий
29
	mov 	ebx,0x27        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) и нажатие клавиши
30
        int	0x40
31
red_win:
32
    call draw_window  		;первоначально необходимо нарисовать окно
33
still:				;основной обработчик
34
     mov  eax,10 		;Ожидать события
35
     int  0x40      		;ожидать событие в течение 2 миллисекунд
36
 
37
    cmp al,0x1    ;если изменилось положение окна
38
    jz red_win
39
    cmp al,0x2    ;если нажата клавиша то перейти
40
    jz key
41
    cmp al,0x3    ;если нажата кнопка то перейти
42
    jz button
43
	mouse_edit_boxes editboxes,editboxes_end
44
	jmp still    ;если ничего из перечисленного то снова в цикл
45
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47
button:
48
mov eax,17		;получить идентификатор нажатой клавиши
49
    int 0x40
50
    test ah,ah		;если в ah 0, то перейти на обработчик событий still
51
    jz  still
52
    or eax,-1		;в eax,-1 - 5 ,байтов у нас же только 3  выйти
53
    int 0x40 		;далее выполняется выход из программы
54
 
55
key:
56
    mov eax,2		;загрузим значение 2 в регистор eax
57
    int 0x40            ;получим код нажатой клавиши
58
    key_edit_boxes editboxes,editboxes_end
59
    jmp still
60
 
61
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
62
draw_window:		;рисование окна приложения
63
    mov eax,12		;в регистр внести значение = 12
64
    mov ebx,1 		;присвоить 1
65
    int 0x40
66
 
67
    xor eax,eax			;обнулить eax
68
    mov ebx,50*65536+390	;[координата по оси x]*65536 + [размер по оси x]
69
    mov ecx,30*65536+200	;[координата по оси y]*65536 + [размер по оси y]
343 Lrz 70
    mov edx,0xb3AABBCC		;0xXYRRGGBB  Y =3 - вывод рамки, используя скрин
234 Lrz 71
    mov esi,0x805080DD		;0xXYRRGGBB - цвет заголовка
343 Lrz 72
    mov edi,hed			;Указатель на строку с заголовком
234 Lrz 73
    int 0x40			;нарисовать окно приложения
74
 
75
	draw_edit_boxes editboxes,editboxes_end  ;рисование edit box'ов
76
 
343 Lrz 77
    mov eax,12 			;Функция 12 - начать/закончить перерисовку окна.
234 Lrz 78
    mov ebx,2			;Подфункция 2 - закончить перерисовку окна.
79
    int 0x40
80
    ret
81
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
82
;DATA данные
83
editboxes:
396 Lrz 84
edit1 edit_box 168,5,10,0xffffff,0,0,0,99,ed_buffer.2,ed_figure_only
403 Lrz 85
edit2 edit_box 250,5,30,0xffffff,0,0,0,308,hed,ed_focus,53
343 Lrz 86
edit3 edit_box 35,5,50,0xffffff,0,0,0,9,ed_buffer.3,ed_figure_only
87
edit4 edit_box 16,5,70,0xffffff,0,0,0,1,ed_buffer.4,ed_figure_only
234 Lrz 88
editboxes_end:
396 Lrz 89
data_of_code dd 0
234 Lrz 90
ed_buffer:
404 Lrz 91
;.1: rb 514;256
396 Lrz 92
.2: rb 101
93
.3: rb 11
94
.4: rb 3
95
;два запасных байта необходимы для того что бы не пепереписать следующией байты, в конце буфера 0
234 Lrz 96
;text_b: db 'Кол-во символов'
97
;buffer: dd 0
98
buffer_end:
404 Lrz 99
hed db   'EDITBOX optimization and retype  date 09.03.2007',0
402 Lrz 100
rb  256
282 Lrz 101
i_end1:
343 Lrz 102
rb 1024
396 Lrz 103
i_end: