Subversion Repositories Kolibri OS

Rev

Rev 6693 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6689 siemargl 1
; Простой пример программы для KolibriOS
2
; озвучивает код нажатой клавиши
3
; - переделан как пример использования tooltip
4
 
5
use32 ; включить 32-битный режим ассемблера
6
org 0x0 ; адресация с нуля
7
 
8
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
9
dd 0x01 ; версия заголовка (всегда 1)
10
dd START ; адрес первой команды
11
dd CODE_END ; размер программы
12
dd DATA_END ; количество памяти
13
dd STACK_END ; адрес вершины стэка
14
dd 0x0 ; адрес буфера для параметров
15
dd cur_dir_path      ; указатель на адрес, куда помещается строка, содержащая путь до программы в момент запуска.
16
 
17
include '../../../../../proc32.inc'
18
include '../../../../../macros.inc'
19
include '../../../../../KOSfuncs.inc'
20
include '../../../../../Dll.inc'	; malloc fn
21
include '../../trunk/box_lib.mac'
22
include '../../load_lib.mac'
23
;include 'proc32.inc'
24
;include 'macros.inc'
25
;include 'KOSfuncs.inc'
26
 
27
;---------------------------------------------------------------------
28
;--- НАЧАЛО ПРОГРАММЫ ----------------------------------------------
29
;---------------------------------------------------------------------
30
; этот макрос обязателен для всех компонетов, использующих heap
31
; кроме того, обязательно имортировать lib_init - при импорте определяются
32
; функции хипа для библиотеки
33
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
34
 
35
START:
36
;---------------------------------------------------------------------
37
;--- ИНИЦИАЛИЗАЦИЯ ----------------------------------------
38
;---------------------------------------------------------------------
39
;mov eax, mem_alloc
40
;mov [mem.alloc], eax
41
;mov eax, mem_realloc
42
;mov [mem.realloc], eax
43
;mov eax, mem_free
44
;mov [mem.free], eax
45
mcall	68, 11
46
 
47
mcall 40, $C0000027 ; маска событий - мышь только в активном окне
48
 
49
sys_load_library  lib_name, cur_dir_path, lib_path, sys_path, \
50
	e_notfound_lib, head_f_l, myimport, e_import, head_f_i
51
test eax,eax
52
jz	@f
53
	mcall -1 ; alarm exit
54
@@:
55
 
56
 
57
invoke tooltip_init, redbox_tt 	; only begin of list
58
 
59
red: ; перерисовать окно
60
 
61
call draw_window ; вызываем процедуру отрисовки окна
62
 
63
;---------------------------------------------------------------------
64
;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ----------------------------------------
65
;---------------------------------------------------------------------
66
 
67
still:
68
mcall 23, 5 ; функция 23 - ждать события Не более чем 0.05с
69
test eax, eax ; нет событий - проверить рисование тултипов по таймеру
70
je yield
71
cmp eax,1 ; перерисовать окно ?
72
je red ; если да - на метку red
73
cmp eax,2 ; нажата клавиша ?
74
je key ; если да - на key
75
cmp eax,3 ; нажата кнопка ?
76
je button ; если да - на button
77
cmp eax,6 ; событие мыши
78
je mouse ; если да - на mouse
79
 
80
jmp still ; если другое событие - в начало цикла
81
 
82
 
83
;---------------------------------------------------------------------
84
yield:
85
invoke tooltip_test_show, redbox_tt
86
jmp still ; вернуться к началу цикла
87
 
88
mouse:
89
invoke tooltip_mouse, redbox_tt
90
jmp still ; вернуться к началу цикла
91
 
92
key: ; нажата клавиша на клавиатуре
93
mcall 2 ; функция 2 - считать код символа (в ah)
94
 
95
jmp still ; вернуться к началу цикла
96
 
97
;---------------------------------------------------------------------
98
 
99
button:
100
mcall 17 ; 17 - получить идентификатор нажатой кнопки
101
 
102
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
103
jne still ; вернуться
104
 
105
pexit:
106
invoke tooltip_delete, redbox_tt	; освобождаем память
107
mcall -1 ; иначе конец программы
108
 
109
 
110
;---------------------------------------------------------------------
111
;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ----------------------------------
112
;---------------------------------------------------------------------
113
 
114
draw_window:
115
 
116
mcall 12, 1 ; функция 12: сообщить ОС о начале отрисовки
117
 
118
mcall 48, 3, sc,sizeof.system_colors
119
 
120
mov edx, [sc.work] ; цвет фона
121
or edx, 0x33000000 ; и тип окна 3
122
mcall 0, <200,300>, <200,150>, , ,title
123
 
124
; вывод квадратиков
125
mcall 13, <60,50>, <50,50>, $FF0000
126
mcall 13, <140,50>, <50,50>, $FF
127
 
128
 
129
mcall 12, 2 ; функция 12.2, закончили рисовать
130
 
131
ret ; выходим из процедуры
132
 
133
 
134
CODE_END: ; метка конца программы; --------------------------------------------;
135
 
136
; ---------------------------------------------------------------------------- ;
137
;---------------------------------------------------------------------
138
;--- ДАННЫЕ ПРОГРАММЫ ----------------------------------------------
139
;---------------------------------------------------------------------
140
 
141
sys_path	db '/sys/lib/'
142
;sys_path	db '/tmp0/1/'
143
lib_name    db 'box_lib.obj',0
144
cur_dir_path    rb 4096
145
lib_path    rb 4096
146
 
147
e_notfound_lib    db 'Sorry I cannot load library box_lib.obj',0
148
 
149
head_f_i:
150
head_f_l    db 'System error',0
151
e_import    db 'Error on load import library box_lib.obj',0
152
 
153
myimport:
154
				dd sz_lib_init ;функция запускается макросом 1 раз при подключении
155
;библиотеки, потому в программе метка на нее не нужна
156
tooltip_init  	dd sz_tooltip_init
157
tooltip_delete	dd sz_tooltip_delete
158
tooltip_test_show	dd sz_tooltip_test_show
159
tooltip_mouse	dd sz_tooltip_mouse
160
get_font_size	dd sz_get_font_size
161
    dd    0
162
    dd    0
163
 
164
sz_lib_init 			db 'lib_init',0
165
sz_tooltip_init			db 'tooltip_init', 0
166
sz_tooltip_delete		db 'tooltip_delete', 0
167
sz_tooltip_test_show	db 'tooltip_test_show', 0
168
sz_tooltip_mouse		db 'tooltip_mouse', 0
169
sz_get_font_size		db 'get_font_size', 0
170
 
171
 
172
;tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait
173
redbox_tt    tooltip redboxtxt, blubox_tt, 60, 50, 50, 50, 0, $FFF473, 100
174
blubox_tt    tooltip bluboxtxt, 0, 140, 50, 50, 50, $110000FF, $FFF473, 100
175
 
176
redboxtxt	db 'Red Box Tooltip', 13, 'May be multilined', 13, 13, 'Even with empty lines', 0
177
bluboxtxt	db 'Blue Box Tooltip', 0
178
 
179
sc system_colors
180
 
181
title db 'Toooltip demo',0
182
 
183
; stack----------------------------------------------------------------------- ;
184
	   rb 4096
185
STACK_END  dd ?
186
 
187
DATA_END: ; метка конца данных программы; ------------------------------------ ;