Rev 451 | Rev 502 | 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 |
205 | heavyiron | 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 | |||
16 | use32 ; включить 32-битный режим ассемблера |
||
17 | org 0x0 ; адресация с нуля |
||
205 | heavyiron | 18 | |
341 | heavyiron | 19 | db 'MENUET01' ; 8-байтный идентификатор MenuetOS |
20 | dd 0x01 ; версия заголовка (всегда 1) |
||
21 | dd START ; адрес первой команды |
||
22 | dd I_END ; размер программы |
||
485 | heavyiron | 23 | dd 0x2000 ; количество памяти |
24 | dd 0x2000 ; адрес вершины стэка |
||
341 | heavyiron | 25 | dd 0x0 ; адрес буфера для параметров (не используется) |
26 | dd 0x0 ; зарезервировано |
||
205 | heavyiron | 27 | |
353 | heavyiron | 28 | include '..\..\..\develop\examples\editbox\trunk\editbox.inc' |
485 | heavyiron | 29 | use_edit_box structure_of_potock,22,5 |
205 | heavyiron | 30 | |
341 | heavyiron | 31 | ;--------------------------------------------------------------------- |
32 | ;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- |
||
33 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 34 | |
341 | heavyiron | 35 | START: |
36 | mov eax, 40 |
||
37 | mov ebx, 100111b |
||
485 | heavyiron | 38 | mcall |
341 | heavyiron | 39 | red: ; перерисовать окно |
40 | call draw_window ; вызываем процедуру отрисовки окна |
||
205 | heavyiron | 41 | |
341 | heavyiron | 42 | ;--------------------------------------------------------------------- |
43 | ;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- |
||
44 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 45 | |
341 | heavyiron | 46 | still: |
47 | push 10 |
||
48 | pop eax |
||
485 | heavyiron | 49 | mcall |
205 | heavyiron | 50 | |
341 | heavyiron | 51 | dec eax ; перерисовать окно? |
52 | jz red ; если да - на метку red |
||
53 | dec eax |
||
54 | jz key |
||
55 | dec eax |
||
56 | jz button |
||
205 | heavyiron | 57 | |
341 | heavyiron | 58 | mouse: |
59 | mouse_edit_boxes editbox,editbox_end |
||
60 | jmp still |
||
61 | |||
62 | button: |
||
63 | mov al,17 ; получить идентификатор нажатой кнопки |
||
485 | heavyiron | 64 | mcall |
205 | heavyiron | 65 | |
341 | heavyiron | 66 | cmp ah,1 ; кнопка с id=1("закрыть")? |
67 | jne noclose |
||
68 | or eax,-1 ; функция -1: завершить программу |
||
485 | heavyiron | 69 | mcall |
205 | heavyiron | 70 | |
341 | heavyiron | 71 | noclose: |
72 | cmp ah,2 |
||
73 | jne path_2 |
||
74 | call clear_err |
||
75 | mov al,16 |
||
76 | mov ebx,1 |
||
485 | heavyiron | 77 | mcall |
341 | heavyiron | 78 | call check_for_error |
79 | jmp still |
||
80 | path_2: |
||
205 | heavyiron | 81 | cmp ah,3 |
341 | heavyiron | 82 | jne path_3 |
83 | call clear_err |
||
84 | mov al,16 |
||
85 | mov ebx,2 |
||
485 | heavyiron | 86 | mcall |
341 | heavyiron | 87 | call check_for_error |
88 | jmp still |
||
89 | path_3: |
||
205 | heavyiron | 90 | cmp ah,4 |
341 | heavyiron | 91 | jne path_4 |
92 | call clear_err |
||
93 | mov al,18 |
||
94 | mov ebx,6 |
||
95 | mov ecx,path3 |
||
485 | heavyiron | 96 | mcall |
341 | heavyiron | 97 | call check_for_error |
205 | heavyiron | 98 | jmp still |
341 | heavyiron | 99 | path_4: |
100 | call clear_err |
||
101 | mov eax,18 |
||
102 | mov ebx,6 |
||
103 | mov ecx,path4 |
||
485 | heavyiron | 104 | mcall |
341 | heavyiron | 105 | call check_for_error |
106 | jmp still |
||
205 | heavyiron | 107 | |
341 | heavyiron | 108 | key: |
109 | mov al,2 |
||
485 | heavyiron | 110 | mcall |
341 | heavyiron | 111 | key_edit_boxes editbox,editbox_end |
112 | jmp still |
||
205 | heavyiron | 113 | |
114 | |||
341 | heavyiron | 115 | check_for_error: ;Обработчик ошибок |
116 | cmp eax,0 |
||
117 | jne err1 |
||
118 | mov ecx,[sc.work_text] |
||
119 | mov edx,ok |
||
120 | jmp print |
||
121 | err1: |
||
122 | cmp eax,1 |
||
123 | jne err3 |
||
124 | mov ecx,0xdd2222 |
||
125 | mov edx,error11 |
||
126 | jmp print |
||
127 | err3: |
||
128 | cmp eax,3 |
||
129 | jne err5 |
||
130 | mov ecx,0xdd2222 |
||
131 | mov edx,error3 |
||
132 | jmp print |
||
133 | err5: |
||
134 | cmp eax,5 |
||
135 | jne err8 |
||
136 | mov ecx,0xdd2222 |
||
137 | mov edx,error5 |
||
138 | jmp print |
||
139 | err8: |
||
140 | cmp eax,8 |
||
141 | jne err9 |
||
142 | mov ecx,0xdd2222 |
||
143 | mov edx,error8 |
||
144 | jmp print |
||
145 | err9: |
||
146 | cmp eax,9 |
||
147 | jne err10 |
||
148 | mov ecx,0xdd2222 |
||
149 | mov edx,error9 |
||
150 | jmp print |
||
151 | err10: |
||
152 | cmp eax,10 |
||
153 | jne err11 |
||
154 | mov ecx,0xdd2222 |
||
155 | mov edx,error10 |
||
156 | jmp print |
||
157 | err11: |
||
158 | mov ecx,0xdd2222 |
||
159 | mov edx,error11 |
||
160 | jmp print |
||
205 | heavyiron | 161 | |
341 | heavyiron | 162 | print: |
163 | mov eax,4 ;надписи |
||
164 | mov ebx,20 shl 16 + 148 |
||
165 | or ecx,0x80000000 |
||
485 | heavyiron | 166 | mcall |
341 | heavyiron | 167 | ret |
168 | |||
169 | clear_err: |
||
170 | mov al,13 |
||
171 | mov ebx,15 shl 16 + 240 |
||
172 | mov ecx,145 shl 16 +15 |
||
173 | mov edx,[sc.work] |
||
485 | heavyiron | 174 | mcall |
341 | heavyiron | 175 | ret |
176 | |||
177 | ;--------------------------------------------------------------------- |
||
178 | ;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- |
||
179 | ;--------------------------------------------------------------------- |
||
180 | |||
205 | heavyiron | 181 | draw_window: |
182 | |||
341 | heavyiron | 183 | mov eax,48 |
184 | mov ebx,3 |
||
185 | mov ecx,sc |
||
186 | mov edx,sizeof.system_colors |
||
485 | heavyiron | 187 | mcall |
205 | heavyiron | 188 | |
341 | heavyiron | 189 | mov eax,12 ; функция 12: сообщить ОС об отрисовке окна |
190 | mov bl,1 ; 1 - начинаем рисовать |
||
485 | heavyiron | 191 | mcall |
205 | heavyiron | 192 | |
341 | heavyiron | 193 | ; СОЗДАЁМ ОКНО |
194 | xor eax,eax ; функция 0 : определить и отрисовать окно |
||
195 | mov ebx,200 shl 16 + 270 ; [x старт] *65536 + [x размер] |
||
196 | mov ecx,200 shl 16 + 190 ; [y старт] *65536 + [y размер] |
||
197 | mov edx,[sc.work] ; цвет рабочей области RRGGBB,8->color gl |
||
198 | or edx,0x33000000 |
||
485 | heavyiron | 199 | mov edi,title ; ЗАГОЛОВОК ОКНА |
200 | mcall |
||
205 | heavyiron | 201 | |
485 | heavyiron | 202 | draw_edit_boxes editbox,editbox_end,use_f9,structure_of_potock ;рисование edit box'ов |
205 | heavyiron | 203 | |
341 | heavyiron | 204 | mov al,13 ;отрисовка теней кнопок |
205 | mov ebx,194 shl 16 + 60 |
||
206 | mov ecx,34 shl 16 +15 |
||
207 | mov edx,0x444444 |
||
485 | heavyiron | 208 | mcall |
205 | heavyiron | 209 | |
341 | heavyiron | 210 | add ecx,20 shl 16 |
485 | heavyiron | 211 | mcall |
205 | heavyiron | 212 | |
341 | heavyiron | 213 | add ecx,20 shl 16 |
485 | heavyiron | 214 | mcall |
205 | heavyiron | 215 | |
341 | heavyiron | 216 | add ecx,40 shl 16 |
485 | heavyiron | 217 | mcall |
205 | heavyiron | 218 | |
341 | heavyiron | 219 | mov eax,8 ;отрисовка кнопок |
220 | sub ebx,4 shl 16 |
||
221 | sub ecx,4 shl 16 |
||
222 | mov edx,5 |
||
223 | mov esi,[sc.work_button] |
||
485 | heavyiron | 224 | mcall |
205 | heavyiron | 225 | |
341 | heavyiron | 226 | sub ecx,40 shl 16 |
227 | dec edx |
||
485 | heavyiron | 228 | mcall |
205 | heavyiron | 229 | |
341 | heavyiron | 230 | sub ecx,20 shl 16 |
231 | dec edx |
||
485 | heavyiron | 232 | mcall |
341 | heavyiron | 233 | |
234 | sub ecx,20 shl 16 |
||
235 | dec edx |
||
485 | heavyiron | 236 | mcall |
341 | heavyiron | 237 | |
238 | mov al,4 ;надписи |
||
239 | mov ebx,45 shl 16 + 12 |
||
240 | mov ecx,[sc.work_text] |
||
241 | or ecx,0x80000000 |
||
242 | mov edx,label1 |
||
485 | heavyiron | 243 | mcall |
341 | heavyiron | 244 | |
245 | mov ebx,150 shl 16 + 35 |
||
246 | mov edx,path1 |
||
485 | heavyiron | 247 | mcall |
341 | heavyiron | 248 | |
249 | add ebx,20 |
||
250 | mov edx,path2 |
||
485 | heavyiron | 251 | mcall |
341 | heavyiron | 252 | |
253 | mov ebx,75 shl 16 + 75 |
||
254 | mov edx,path3 |
||
485 | heavyiron | 255 | mcall |
341 | heavyiron | 256 | |
257 | mov ebx,30 shl 16 + 97 |
||
258 | mov edx,label2 |
||
485 | heavyiron | 259 | mcall |
341 | heavyiron | 260 | |
261 | mov ebx,40 shl 16 + 135 |
||
262 | mov edx,label3 |
||
485 | heavyiron | 263 | mcall |
341 | heavyiron | 264 | |
265 | mov ecx,[sc.work_button_text] |
||
266 | or ecx,0x80000000 |
||
267 | mov ebx,195 shl 16 + 35 |
||
268 | mov edx,save |
||
485 | heavyiron | 269 | mcall |
341 | heavyiron | 270 | |
271 | add ebx,20 |
||
485 | heavyiron | 272 | mcall |
341 | heavyiron | 273 | |
274 | add ebx,20 |
||
485 | heavyiron | 275 | mcall |
341 | heavyiron | 276 | |
277 | add ebx,40 |
||
485 | heavyiron | 278 | mcall |
341 | heavyiron | 279 | |
280 | mov al,12 ; функция 12: сообщить ОС об отрисовке окна |
||
281 | mov ebx,2 ; 2, закончили рисовать |
||
485 | heavyiron | 282 | mcall |
341 | heavyiron | 283 | |
284 | ret ; выходим из процедуры |
||
285 | |||
286 | |||
287 | ;--------------------------------------------------------------------- |
||
288 | ;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- |
||
289 | ;--------------------------------------------------------------------- |
||
290 | |||
485 | heavyiron | 291 | title db appname,version,0 |
341 | heavyiron | 292 | |
293 | editbox: |
||
485 | heavyiron | 294 | edit1 edit_box 170,10,113,0xffffff,0xaabbcc,0,0,0,512,path4,ed_focus,26,26 |
341 | heavyiron | 295 | editbox_end: |
296 | |||
205 | heavyiron | 297 | if lang eq ru |
341 | heavyiron | 298 | save db 'Сохранить',0 |
299 | label1 db 'Выберите один из вариантов:',0 |
||
300 | label2 db 'Или введите полный путь к файлу:',0 |
||
301 | label3 db 'Все папки должны существовать',0 |
||
302 | ok db 'RAM-диск сохранен успешно',0 |
||
303 | error3 db 'Неизвестная файловая система',0 |
||
304 | error5 db 'Несуществующий путь',0 |
||
305 | error8 db 'Нет места на диске',0 |
||
306 | error9 db 'Таблица FAT разрушена',0 |
||
307 | error10 db 'Доступ запрещен',0 |
||
308 | error11 db 'Ошибка устройства',0 |
||
205 | heavyiron | 309 | |
310 | else |
||
341 | heavyiron | 311 | save db ' Save',0 |
312 | label1 db 'Select one of the variants:',0 |
||
313 | label2 db ' Or enter full path to file:',0 |
||
314 | label3 db ' All folders must exist',0 |
||
315 | ok db 'RAM-drive was saved successfully',0 |
||
316 | error3 db 'Unknown file system',0 |
||
317 | error5 db 'Incorrect path',0 |
||
318 | error8 db 'Disk is full',0 |
||
319 | error9 db 'FAT table corrupted',0 |
||
320 | error10 db 'Access denied',0 |
||
321 | error11 db 'Device error',0 |
||
205 | heavyiron | 322 | |
323 | end if |
||
324 | |||
451 | heavyiron | 325 | mouse_flag: dd 0x0 |
485 | heavyiron | 326 | |
327 | path1 db '/fd/1/',0 |
||
328 | path2 db '/fd/2/',0 |
||
329 | path3 db '/hd0/1/kolibri.img',0 |
||
330 | path4 db '/hd0/1/kolibri/kolibri.img',0 ;для резервного сохранения |
||
331 | |||
332 | ;--------------------------------------------------------------------- |
||
333 | I_END: ; метка конца программы |
||
334 | |||
335 | rb 514 |
||
336 | |||
337 | sc system_colors |
||
338 | |||
451 | heavyiron | 339 | structure_of_potock: |
340 | rb 100 |
||
341 | heavyiron | 341 |