Subversion Repositories Kolibri OS

Rev

Rev 292 | Rev 306 | 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]
70
    mov edx,0x03AABBCC		;0xXYRRGGBB  Y =3 - вывод рамки, используя скрин
71
    mov esi,0x805080DD		;0xXYRRGGBB - цвет заголовка
72
    mov edi,0x005080DD		;0x00RRGGBB - цвет рамки
73
    int 0x40			;нарисовать окно приложения
74
 
75
    add eax,4  			;если предполагается использовать скалярный процессор, то можно использовать данню инструкцию
76
    mov ebx,8*65536+8		; [координата по оси x]*65536 + [координата по оси y]  mov ecx,0x10DDEEFF		; 0xX0RRGGBB, где RR, GG, BB задают цвет текста
77
    mov edx,hed			; указатель на начало строки
282 Lrz 78
    mov esi,i_end1 - hed	; длина строки, должна быть не больше 255
234 Lrz 79
    int 0x40			;вывести текст
80
 
81
	draw_edit_boxes editboxes,editboxes_end  ;рисование edit box'ов
82
 
83
    add eax,8 			;Функция 12 - начать/закончить перерисовку окна.
84
    mov ebx,2			;Подфункция 2 - закончить перерисовку окна.
85
    int 0x40
86
    ret
87
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
88
;DATA данные
89
editboxes:
292 Lrz 90
edit1 edit_box 168,10,50,0xffffff,0,0,0,512,ed_buffer.1,ed_focus
234 Lrz 91
edit2 edit_box 168,10,30,0xffffff,0,0,0,99,ed_buffer.2,ed_figure_only
92
edit3 edit_box 35,10,70,0xffffff,0,0,0,9,ed_buffer.3,ed_figure_only
93
edit4 edit_box 16,10,90,0xffffff,0,0,0,1,ed_buffer.4,ed_figure_only
94
editboxes_end:
295 Lrz 95
;data_of_code dd 0
234 Lrz 96
ed_buffer:
292 Lrz 97
.1: rb 513;256
234 Lrz 98
.2: rb 100
99
.3: rb 10
100
.4: rb 2
101
;text_b: db 'Кол-во символов'
102
;buffer: dd 0
103
buffer_end:
295 Lrz 104
hed db   'EDITBOX optimization and retype  date 26.01.2007'
282 Lrz 105
i_end1:
106
rb 2048
107
i_end:
108
keymap: