Subversion Repositories Kolibri OS

Rev

Rev 6693 | Details | Compare with Previous | Last modification | View Log | RSS feed

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