Rev 1228 | Rev 1608 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
205 | heavyiron | 1 | ; |
341 | heavyiron | 2 | ; RDsave для Kolibri (0.6.5.0 и старше) |
3 | ; |
||
205 | heavyiron | 4 | ; Mario79 2005 |
341 | heavyiron | 5 | ; Heavyiron 12.02.2007 |
1070 | Lrz | 6 | ; |
341 | heavyiron | 7 | ; Компилировать FASM'ом |
8 | ; |
||
9 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 10 | include 'lang.inc' |
485 | heavyiron | 11 | include '..\..\..\macros.inc' |
205 | heavyiron | 12 | |
13 | appname equ 'RDsave ' |
||
341 | heavyiron | 14 | version equ '1.2' |
15 | |||
1373 | IgorA | 16 | use32 ; включить 32-битный режим ассемблера |
17 | org 0x0 ; адресация с нуля |
||
205 | heavyiron | 18 | |
1373 | IgorA | 19 | db 'MENUET01' ; 8-байтный идентификатор MenuetOS |
20 | dd 0x01 ; версия заголовка (всегда 1) |
||
21 | dd START ; адрес первой команды |
||
22 | dd I_END ; размер программы |
||
23 | dd I_END ; количество памяти |
||
24 | dd I_END ; адрес вершины стэка |
||
25 | dd 0x0 ; адрес буфера для параметров (не используется) |
||
1070 | Lrz | 26 | dd cur_dir_path |
205 | heavyiron | 27 | |
1070 | Lrz | 28 | ;include '..\..\..\develop\examples\editbox\trunk\editbox.inc' |
1111 | Lrz | 29 | include '../../../develop/libraries/box_lib/load_lib.mac' |
1373 | IgorA | 30 | include '../../../develop/libraries/box_lib/trunk/box_lib.mac' |
1070 | Lrz | 31 | @use_library |
32 | |||
33 | ;use_edit_box |
||
1228 | Lrz | 34 | ;al equ eax ; \ decrease kpack'ed size |
35 | ;purge mov ; / |
||
205 | heavyiron | 36 | |
341 | heavyiron | 37 | ;--------------------------------------------------------------------- |
38 | ;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- |
||
39 | ;--------------------------------------------------------------------- |
||
1070 | Lrz | 40 | align 4 |
41 | START: |
||
42 | sys_load_library library_name, cur_dir_path, library_path, system_path, \ |
||
43 | err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i |
||
1373 | IgorA | 44 | cmp eax,-1 |
45 | jz close |
||
205 | heavyiron | 46 | |
1228 | Lrz | 47 | |
341 | heavyiron | 48 | mov eax, 40 |
49 | mov ebx, 100111b |
||
485 | heavyiron | 50 | mcall |
1373 | IgorA | 51 | red: ; перерисовать окно |
52 | mov eax,48 |
||
53 | mov ebx,3 |
||
54 | mov ecx,sc |
||
55 | mov edx,sizeof.system_colors |
||
1228 | Lrz | 56 | mcall |
1373 | IgorA | 57 | edit_boxes_set_sys_color editbox,editbox_end,sc |
58 | call draw_window ; вызываем процедуру отрисовки окна |
||
205 | heavyiron | 59 | |
341 | heavyiron | 60 | ;--------------------------------------------------------------------- |
61 | ;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- |
||
62 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 63 | |
341 | heavyiron | 64 | still: |
532 | diamond | 65 | mcall 10 |
205 | heavyiron | 66 | |
1373 | IgorA | 67 | dec eax ; перерисовать окно? |
68 | jz red ; если да - на метку red |
||
341 | heavyiron | 69 | dec eax |
1373 | IgorA | 70 | jz key |
341 | heavyiron | 71 | dec eax |
1373 | IgorA | 72 | jz button |
205 | heavyiron | 73 | |
341 | heavyiron | 74 | mouse: |
1070 | Lrz | 75 | ; mouse_edit_box editbox |
1373 | IgorA | 76 | push dword editbox |
77 | call [edit_box_mouse] |
||
1070 | Lrz | 78 | |
1373 | IgorA | 79 | jmp still |
341 | heavyiron | 80 | |
81 | button: |
||
1373 | IgorA | 82 | mov al,17 ; получить идентификатор нажатой кнопки |
485 | heavyiron | 83 | mcall |
205 | heavyiron | 84 | |
1373 | IgorA | 85 | cmp ah,1 ; кнопка с id=1("закрыть")? |
341 | heavyiron | 86 | jne noclose |
1070 | Lrz | 87 | close: |
1373 | IgorA | 88 | or eax,-1 ; функция -1: завершить программу |
485 | heavyiron | 89 | mcall |
205 | heavyiron | 90 | |
341 | heavyiron | 91 | noclose: |
1373 | IgorA | 92 | push eax |
93 | call clear_err |
||
94 | pop eax |
||
95 | push 16 |
||
96 | xor ebx, ebx |
||
97 | inc ebx ; 16.1 = save to /FD/1 |
||
98 | cmp ah, 2 |
||
99 | je doit |
||
100 | inc ebx ; 16.2 = save to /FD/2 |
||
101 | cmp ah, 3 |
||
102 | je doit |
||
103 | pop ebx |
||
104 | push 18 |
||
105 | mov bl, 6 ; 18.6 = save to specified folder |
||
106 | mov ecx, path3 |
||
107 | cmp ah, 4 |
||
108 | je doit |
||
109 | mov ecx, path4 |
||
532 | diamond | 110 | doit: |
1373 | IgorA | 111 | pop eax |
112 | mcall |
||
113 | call check_for_error |
||
114 | jmp still |
||
205 | heavyiron | 115 | |
1373 | IgorA | 116 | key: |
341 | heavyiron | 117 | mov al,2 |
485 | heavyiron | 118 | mcall |
1070 | Lrz | 119 | ; key_edit_box editbox |
1373 | IgorA | 120 | push dword editbox |
121 | call [edit_box_key] |
||
1070 | Lrz | 122 | |
341 | heavyiron | 123 | jmp still |
205 | heavyiron | 124 | |
125 | |||
1373 | IgorA | 126 | check_for_error: ;Обработчик ошибок |
127 | mov ecx, [sc.work_text] |
||
128 | mov edx, ok |
||
129 | test eax, eax |
||
130 | jz print |
||
131 | mov ecx, 0xdd2222 |
||
132 | add edx, error3 - ok |
||
133 | dec eax |
||
134 | dec eax |
||
135 | jz print |
||
136 | add edx, error5 - error3 |
||
137 | dec eax |
||
138 | dec eax |
||
139 | jz print |
||
140 | add edx, error8 - error5 |
||
141 | dec eax |
||
142 | dec eax |
||
143 | dec eax |
||
144 | jz print |
||
145 | add edx, error9 - error8 |
||
146 | dec eax |
||
147 | jz print |
||
148 | add edx, error10 - error9 |
||
149 | dec eax |
||
150 | jz print |
||
151 | add edx, error11 - error10 |
||
152 | dec eax |
||
153 | jz print |
||
154 | add edx, aUnknownError - error11 |
||
205 | heavyiron | 155 | |
341 | heavyiron | 156 | print: |
1373 | IgorA | 157 | mov eax,4 ;надписи |
341 | heavyiron | 158 | mov ebx,20 shl 16 + 148 |
1373 | IgorA | 159 | or ecx,0x80000000 |
485 | heavyiron | 160 | mcall |
341 | heavyiron | 161 | ret |
162 | |||
163 | clear_err: |
||
532 | diamond | 164 | mov eax,13 |
341 | heavyiron | 165 | mov ebx,15 shl 16 + 240 |
166 | mov ecx,145 shl 16 +15 |
||
167 | mov edx,[sc.work] |
||
485 | heavyiron | 168 | mcall |
341 | heavyiron | 169 | ret |
170 | |||
171 | ;--------------------------------------------------------------------- |
||
172 | ;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- |
||
173 | ;--------------------------------------------------------------------- |
||
174 | |||
205 | heavyiron | 175 | draw_window: |
176 | |||
1373 | IgorA | 177 | mov eax,12 ; функция 12: сообщить ОС об отрисовке окна |
178 | mov bl,1 ; 1 - начинаем рисовать |
||
485 | heavyiron | 179 | mcall |
205 | heavyiron | 180 | |
1373 | IgorA | 181 | ; СОЗДАЁМ ОКНО |
182 | xor eax,eax ; функция 0 : определить и отрисовать окно |
||
183 | mov ebx,200 shl 16 + 270 ; [x старт] *65536 + [x размер] |
||
184 | mov ecx,200 shl 16 + 190 ; [y старт] *65536 + [y размер] |
||
185 | mov edx,[sc.work] ; цвет рабочей области RRGGBB,8->color gl |
||
551 | spraid | 186 | or edx,0x34000000 |
1373 | IgorA | 187 | mov edi,title ; ЗАГОЛОВОК ОКНА |
485 | heavyiron | 188 | mcall |
205 | heavyiron | 189 | |
1373 | IgorA | 190 | push dword editbox |
191 | call [edit_box_draw] |
||
205 | heavyiron | 192 | |
1070 | Lrz | 193 | ;draw_edit_box editbox ;рисование edit box |
194 | |||
1373 | IgorA | 195 | mov al,13 ;отрисовка теней кнопок |
341 | heavyiron | 196 | mov ebx,194 shl 16 + 60 |
197 | mov ecx,34 shl 16 +15 |
||
198 | mov edx,0x444444 |
||
485 | heavyiron | 199 | mcall |
205 | heavyiron | 200 | |
341 | heavyiron | 201 | add ecx,20 shl 16 |
485 | heavyiron | 202 | mcall |
205 | heavyiron | 203 | |
341 | heavyiron | 204 | add ecx,20 shl 16 |
485 | heavyiron | 205 | mcall |
205 | heavyiron | 206 | |
341 | heavyiron | 207 | add ecx,40 shl 16 |
485 | heavyiron | 208 | mcall |
205 | heavyiron | 209 | |
1373 | IgorA | 210 | mov eax,8 ;отрисовка кнопок |
341 | heavyiron | 211 | sub ebx,4 shl 16 |
212 | sub ecx,4 shl 16 |
||
213 | mov edx,5 |
||
214 | mov esi,[sc.work_button] |
||
485 | heavyiron | 215 | mcall |
205 | heavyiron | 216 | |
341 | heavyiron | 217 | sub ecx,40 shl 16 |
218 | dec edx |
||
485 | heavyiron | 219 | mcall |
205 | heavyiron | 220 | |
341 | heavyiron | 221 | sub ecx,20 shl 16 |
222 | dec edx |
||
485 | heavyiron | 223 | mcall |
341 | heavyiron | 224 | |
225 | sub ecx,20 shl 16 |
||
226 | dec edx |
||
485 | heavyiron | 227 | mcall |
341 | heavyiron | 228 | |
1373 | IgorA | 229 | mov al,4 ;надписи |
341 | heavyiron | 230 | mov ebx,45 shl 16 + 12 |
231 | mov ecx,[sc.work_text] |
||
232 | or ecx,0x80000000 |
||
233 | mov edx,label1 |
||
485 | heavyiron | 234 | mcall |
341 | heavyiron | 235 | |
236 | mov ebx,150 shl 16 + 35 |
||
237 | mov edx,path1 |
||
485 | heavyiron | 238 | mcall |
341 | heavyiron | 239 | |
240 | add ebx,20 |
||
241 | mov edx,path2 |
||
485 | heavyiron | 242 | mcall |
341 | heavyiron | 243 | |
244 | mov ebx,75 shl 16 + 75 |
||
245 | mov edx,path3 |
||
485 | heavyiron | 246 | mcall |
341 | heavyiron | 247 | |
248 | mov ebx,30 shl 16 + 97 |
||
249 | mov edx,label2 |
||
485 | heavyiron | 250 | mcall |
341 | heavyiron | 251 | |
252 | mov ebx,40 shl 16 + 135 |
||
253 | mov edx,label3 |
||
485 | heavyiron | 254 | mcall |
341 | heavyiron | 255 | |
256 | mov ecx,[sc.work_button_text] |
||
257 | or ecx,0x80000000 |
||
258 | mov ebx,195 shl 16 + 35 |
||
259 | mov edx,save |
||
485 | heavyiron | 260 | mcall |
341 | heavyiron | 261 | |
262 | add ebx,20 |
||
485 | heavyiron | 263 | mcall |
341 | heavyiron | 264 | |
265 | add ebx,20 |
||
485 | heavyiron | 266 | mcall |
341 | heavyiron | 267 | |
268 | add ebx,40 |
||
485 | heavyiron | 269 | mcall |
341 | heavyiron | 270 | |
1373 | IgorA | 271 | mov al,12 ; функция 12: сообщить ОС об отрисовке окна |
272 | mov ebx,2 ; 2, закончили рисовать |
||
485 | heavyiron | 273 | mcall |
341 | heavyiron | 274 | |
1373 | IgorA | 275 | ret ; выходим из процедуры |
341 | heavyiron | 276 | |
277 | |||
278 | ;--------------------------------------------------------------------- |
||
279 | ;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- |
||
280 | ;--------------------------------------------------------------------- |
||
281 | |||
485 | heavyiron | 282 | title db appname,version,0 |
341 | heavyiron | 283 | |
284 | editbox: |
||
1214 | Lrz | 285 | edit1 edit_box 170,10,113,0xffffff,0xaabbcc,0,0,0,512,path4,mouse_dd,ed_focus,26,26 |
341 | heavyiron | 286 | editbox_end: |
287 | |||
205 | heavyiron | 288 | if lang eq ru |
1373 | IgorA | 289 | save db 'Сохранить',0 |
290 | label1 db 'Выберите один из вариантов:',0 |
||
291 | label2 db 'Или введите полный путь к файлу:',0 |
||
292 | label3 db 'Все папки должны существовать',0 |
||
293 | ok db 'RAM-диск сохранен успешно',0 |
||
294 | error3 db 'Неизвестная файловая система',0 |
||
295 | error5 db 'Несуществующий путь',0 |
||
296 | error8 db 'Нет места на диске',0 |
||
297 | error9 db 'Таблица FAT разрушена',0 |
||
341 | heavyiron | 298 | error10 db 'Доступ запрещен',0 |
299 | error11 db 'Ошибка устройства',0 |
||
532 | diamond | 300 | aUnknownError db 'Неизвестная ошибка',0 |
605 | kaitz | 301 | else if lang eq et |
1373 | IgorA | 302 | save db 'Salvesta',0 |
303 | label1 db 'Vali №ks variantidest:',0 |
||
304 | label2 db 'Vїi sisesta teekond failinimeni:',0 |
||
305 | label3 db 'Kїik kataloogid peavad eksisteerima',0 |
||
306 | ok db 'RAM-ketas salvestatud edukalt',0 |
||
307 | error3 db 'Tundmatu failis№steem',0 |
||
308 | error5 db 'Vigane teekond',0 |
||
309 | error8 db 'Ketas tфis',0 |
||
310 | error9 db 'FAT tabel vigane',0 |
||
605 | kaitz | 311 | error10 db 'Juurdepффs keelatud',0 |
312 | error11 db 'Seadme viga',0 |
||
313 | aUnknownError db 'Tundmatu viga',0 |
||
205 | heavyiron | 314 | |
315 | else |
||
1373 | IgorA | 316 | save db ' Save',0 |
317 | label1 db 'Select one of the variants:',0 |
||
318 | label2 db ' Or enter full path to file:',0 |
||
319 | label3 db ' All folders must exist',0 |
||
320 | ok db 'RAM-drive was saved successfully',0 |
||
321 | error3 db 'Unknown file system',0 |
||
322 | error5 db 'Incorrect path',0 |
||
323 | error8 db 'Disk is full',0 |
||
324 | error9 db 'FAT table corrupted',0 |
||
341 | heavyiron | 325 | error10 db 'Access denied',0 |
326 | error11 db 'Device error',0 |
||
532 | diamond | 327 | aUnknownError db 'Unknown error',0 |
205 | heavyiron | 328 | |
329 | end if |
||
1070 | Lrz | 330 | ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
331 | ;DATA данные |
||
332 | ;Всегда соблюдать последовательность в имени. |
||
1373 | IgorA | 333 | system_path db '/sys/lib/' |
334 | library_name db 'box_lib.obj',0 |
||
1070 | Lrz | 335 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
205 | heavyiron | 336 | |
1373 | IgorA | 337 | err_message_found_lib db 'Sorry I cannot load library box_lib.obj',0 |
1070 | Lrz | 338 | head_f_i: |
1373 | IgorA | 339 | head_f_l db 'System error',0 |
340 | err_message_import db 'Error on load import library box_lib.obj',0 |
||
1070 | Lrz | 341 | align 4 |
342 | myimport: |
||
485 | heavyiron | 343 | |
1373 | IgorA | 344 | edit_box_draw dd aEdit_box_draw |
345 | edit_box_key dd aEdit_box_key |
||
346 | edit_box_mouse dd aEdit_box_mouse |
||
1228 | Lrz | 347 | ;version_ed dd aVersion_ed |
1070 | Lrz | 348 | |
1373 | IgorA | 349 | dd 0 |
350 | dd 0 |
||
1070 | Lrz | 351 | |
1373 | IgorA | 352 | aEdit_box_draw db 'edit_box',0 |
353 | aEdit_box_key db 'edit_box_key',0 |
||
1070 | Lrz | 354 | aEdit_box_mouse db 'edit_box_mouse',0 |
1228 | Lrz | 355 | ;aVersion_ed db 'version_ed',0 |
1070 | Lrz | 356 | |
357 | |||
358 | ;mouse_flag: dd 0x0 |
||
359 | |||
1373 | IgorA | 360 | path1 db '/fd/1/',0 |
361 | path2 db '/fd/2/',0 |
||
362 | path3 db '/hd0/1/kolibri.img',0 |
||
363 | path4 db '/hd0/1/kolibri/kolibri.img',0 ;для резервного сохранения |
||
485 | heavyiron | 364 | |
365 | ;--------------------------------------------------------------------- |
||
366 | |||
367 | rb 514 |
||
368 | |||
369 | sc system_colors |
||
1214 | Lrz | 370 | mouse_dd rd 1 |
1373 | IgorA | 371 | cur_dir_path rb 1096 |
372 | library_path rb 1096 |
||
833 | Lrz | 373 | align 4 |
1373 | IgorA | 374 | rb 0x100 ; for stack |
375 | I_END: ; метка конца программы |