Rev 605 | Rev 1070 | 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 ; размер программы |
||
833 | Lrz | 23 | dd I_END ; количество памяти |
24 | dd I_END ; адрес вершины стэка |
||
341 | heavyiron | 25 | dd 0x0 ; адрес буфера для параметров (не используется) |
26 | dd 0x0 ; зарезервировано |
||
205 | heavyiron | 27 | |
605 | kaitz | 28 | include '..\..\..\develop\examples\editbox\trunk\editbox.inc' |
833 | Lrz | 29 | use_edit_box |
532 | diamond | 30 | al equ eax ; \ decrease kpack'ed size |
31 | purge mov ; / |
||
205 | heavyiron | 32 | |
341 | heavyiron | 33 | ;--------------------------------------------------------------------- |
34 | ;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- |
||
35 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 36 | |
341 | heavyiron | 37 | START: |
38 | mov eax, 40 |
||
39 | mov ebx, 100111b |
||
485 | heavyiron | 40 | mcall |
341 | heavyiron | 41 | red: ; перерисовать окно |
42 | call draw_window ; вызываем процедуру отрисовки окна |
||
205 | heavyiron | 43 | |
341 | heavyiron | 44 | ;--------------------------------------------------------------------- |
45 | ;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- |
||
46 | ;--------------------------------------------------------------------- |
||
205 | heavyiron | 47 | |
341 | heavyiron | 48 | still: |
532 | diamond | 49 | mcall 10 |
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: |
532 | diamond | 59 | mouse_edit_box editbox |
60 | jmp still |
||
341 | heavyiron | 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: |
532 | diamond | 72 | push eax |
73 | call clear_err |
||
74 | pop eax |
||
75 | push 16 |
||
76 | xor ebx, ebx |
||
77 | inc ebx ; 16.1 = save to /FD/1 |
||
78 | cmp ah, 2 |
||
79 | je doit |
||
80 | inc ebx ; 16.2 = save to /FD/2 |
||
81 | cmp ah, 3 |
||
82 | je doit |
||
83 | pop ebx |
||
84 | push 18 |
||
85 | mov bl, 6 ; 18.6 = save to specified folder |
||
86 | mov ecx, path3 |
||
87 | cmp ah, 4 |
||
88 | je doit |
||
89 | mov ecx, path4 |
||
90 | doit: |
||
91 | pop eax |
||
92 | mcall |
||
93 | call check_for_error |
||
94 | jmp still |
||
205 | heavyiron | 95 | |
341 | heavyiron | 96 | key: |
97 | mov al,2 |
||
485 | heavyiron | 98 | mcall |
532 | diamond | 99 | key_edit_box editbox |
341 | heavyiron | 100 | jmp still |
205 | heavyiron | 101 | |
102 | |||
341 | heavyiron | 103 | check_for_error: ;Обработчик ошибок |
532 | diamond | 104 | mov ecx, [sc.work_text] |
105 | mov edx, ok |
||
106 | test eax, eax |
||
107 | jz print |
||
108 | mov ecx, 0xdd2222 |
||
109 | add edx, error3 - ok |
||
110 | dec eax |
||
111 | dec eax |
||
112 | jz print |
||
113 | add edx, error5 - error3 |
||
114 | dec eax |
||
115 | dec eax |
||
116 | jz print |
||
117 | add edx, error8 - error5 |
||
118 | dec eax |
||
119 | dec eax |
||
120 | dec eax |
||
121 | jz print |
||
122 | add edx, error9 - error8 |
||
123 | dec eax |
||
124 | jz print |
||
125 | add edx, error10 - error9 |
||
126 | dec eax |
||
127 | jz print |
||
128 | add edx, error11 - error10 |
||
129 | dec eax |
||
130 | jz print |
||
131 | add edx, aUnknownError - error11 |
||
205 | heavyiron | 132 | |
341 | heavyiron | 133 | print: |
134 | mov eax,4 ;надписи |
||
135 | mov ebx,20 shl 16 + 148 |
||
136 | or ecx,0x80000000 |
||
485 | heavyiron | 137 | mcall |
341 | heavyiron | 138 | ret |
139 | |||
140 | clear_err: |
||
532 | diamond | 141 | mov eax,13 |
341 | heavyiron | 142 | mov ebx,15 shl 16 + 240 |
143 | mov ecx,145 shl 16 +15 |
||
144 | mov edx,[sc.work] |
||
485 | heavyiron | 145 | mcall |
341 | heavyiron | 146 | ret |
147 | |||
148 | ;--------------------------------------------------------------------- |
||
149 | ;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- |
||
150 | ;--------------------------------------------------------------------- |
||
151 | |||
205 | heavyiron | 152 | draw_window: |
153 | |||
341 | heavyiron | 154 | mov eax,48 |
155 | mov ebx,3 |
||
156 | mov ecx,sc |
||
157 | mov edx,sizeof.system_colors |
||
485 | heavyiron | 158 | mcall |
205 | heavyiron | 159 | |
341 | heavyiron | 160 | mov eax,12 ; функция 12: сообщить ОС об отрисовке окна |
161 | mov bl,1 ; 1 - начинаем рисовать |
||
485 | heavyiron | 162 | mcall |
205 | heavyiron | 163 | |
341 | heavyiron | 164 | ; СОЗДАЁМ ОКНО |
165 | xor eax,eax ; функция 0 : определить и отрисовать окно |
||
166 | mov ebx,200 shl 16 + 270 ; [x старт] *65536 + [x размер] |
||
167 | mov ecx,200 shl 16 + 190 ; [y старт] *65536 + [y размер] |
||
168 | mov edx,[sc.work] ; цвет рабочей области RRGGBB,8->color gl |
||
551 | spraid | 169 | or edx,0x34000000 |
485 | heavyiron | 170 | mov edi,title ; ЗАГОЛОВОК ОКНА |
171 | mcall |
||
205 | heavyiron | 172 | |
833 | Lrz | 173 | draw_edit_box editbox ;рисование edit box |
205 | heavyiron | 174 | |
532 | diamond | 175 | mov al,13 ;отрисовка теней кнопок |
341 | heavyiron | 176 | mov ebx,194 shl 16 + 60 |
177 | mov ecx,34 shl 16 +15 |
||
178 | mov edx,0x444444 |
||
485 | heavyiron | 179 | mcall |
205 | heavyiron | 180 | |
341 | heavyiron | 181 | add ecx,20 shl 16 |
485 | heavyiron | 182 | mcall |
205 | heavyiron | 183 | |
341 | heavyiron | 184 | add ecx,20 shl 16 |
485 | heavyiron | 185 | mcall |
205 | heavyiron | 186 | |
341 | heavyiron | 187 | add ecx,40 shl 16 |
485 | heavyiron | 188 | mcall |
205 | heavyiron | 189 | |
341 | heavyiron | 190 | mov eax,8 ;отрисовка кнопок |
191 | sub ebx,4 shl 16 |
||
192 | sub ecx,4 shl 16 |
||
193 | mov edx,5 |
||
194 | mov esi,[sc.work_button] |
||
485 | heavyiron | 195 | mcall |
205 | heavyiron | 196 | |
341 | heavyiron | 197 | sub ecx,40 shl 16 |
198 | dec edx |
||
485 | heavyiron | 199 | mcall |
205 | heavyiron | 200 | |
341 | heavyiron | 201 | sub ecx,20 shl 16 |
202 | dec edx |
||
485 | heavyiron | 203 | mcall |
341 | heavyiron | 204 | |
205 | sub ecx,20 shl 16 |
||
206 | dec edx |
||
485 | heavyiron | 207 | mcall |
341 | heavyiron | 208 | |
209 | mov al,4 ;надписи |
||
210 | mov ebx,45 shl 16 + 12 |
||
211 | mov ecx,[sc.work_text] |
||
212 | or ecx,0x80000000 |
||
213 | mov edx,label1 |
||
485 | heavyiron | 214 | mcall |
341 | heavyiron | 215 | |
216 | mov ebx,150 shl 16 + 35 |
||
217 | mov edx,path1 |
||
485 | heavyiron | 218 | mcall |
341 | heavyiron | 219 | |
220 | add ebx,20 |
||
221 | mov edx,path2 |
||
485 | heavyiron | 222 | mcall |
341 | heavyiron | 223 | |
224 | mov ebx,75 shl 16 + 75 |
||
225 | mov edx,path3 |
||
485 | heavyiron | 226 | mcall |
341 | heavyiron | 227 | |
228 | mov ebx,30 shl 16 + 97 |
||
229 | mov edx,label2 |
||
485 | heavyiron | 230 | mcall |
341 | heavyiron | 231 | |
232 | mov ebx,40 shl 16 + 135 |
||
233 | mov edx,label3 |
||
485 | heavyiron | 234 | mcall |
341 | heavyiron | 235 | |
236 | mov ecx,[sc.work_button_text] |
||
237 | or ecx,0x80000000 |
||
238 | mov ebx,195 shl 16 + 35 |
||
239 | mov edx,save |
||
485 | heavyiron | 240 | mcall |
341 | heavyiron | 241 | |
242 | add ebx,20 |
||
485 | heavyiron | 243 | mcall |
341 | heavyiron | 244 | |
245 | add ebx,20 |
||
485 | heavyiron | 246 | mcall |
341 | heavyiron | 247 | |
248 | add ebx,40 |
||
485 | heavyiron | 249 | mcall |
341 | heavyiron | 250 | |
251 | mov al,12 ; функция 12: сообщить ОС об отрисовке окна |
||
252 | mov ebx,2 ; 2, закончили рисовать |
||
485 | heavyiron | 253 | mcall |
341 | heavyiron | 254 | |
255 | ret ; выходим из процедуры |
||
256 | |||
257 | |||
258 | ;--------------------------------------------------------------------- |
||
259 | ;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- |
||
260 | ;--------------------------------------------------------------------- |
||
261 | |||
485 | heavyiron | 262 | title db appname,version,0 |
341 | heavyiron | 263 | |
264 | editbox: |
||
485 | heavyiron | 265 | edit1 edit_box 170,10,113,0xffffff,0xaabbcc,0,0,0,512,path4,ed_focus,26,26 |
341 | heavyiron | 266 | editbox_end: |
267 | |||
205 | heavyiron | 268 | if lang eq ru |
341 | heavyiron | 269 | save db 'Сохранить',0 |
270 | label1 db 'Выберите один из вариантов:',0 |
||
271 | label2 db 'Или введите полный путь к файлу:',0 |
||
272 | label3 db 'Все папки должны существовать',0 |
||
273 | ok db 'RAM-диск сохранен успешно',0 |
||
274 | error3 db 'Неизвестная файловая система',0 |
||
275 | error5 db 'Несуществующий путь',0 |
||
276 | error8 db 'Нет места на диске',0 |
||
277 | error9 db 'Таблица FAT разрушена',0 |
||
278 | error10 db 'Доступ запрещен',0 |
||
279 | error11 db 'Ошибка устройства',0 |
||
532 | diamond | 280 | aUnknownError db 'Неизвестная ошибка',0 |
605 | kaitz | 281 | else if lang eq et |
282 | save db 'Salvesta',0 |
||
283 | label1 db 'Vali №ks variantidest:',0 |
||
284 | label2 db 'Vїi sisesta teekond failinimeni:',0 |
||
285 | label3 db 'Kїik kataloogid peavad eksisteerima',0 |
||
286 | ok db 'RAM-ketas salvestatud edukalt',0 |
||
287 | error3 db 'Tundmatu failis№steem',0 |
||
288 | error5 db 'Vigane teekond',0 |
||
289 | error8 db 'Ketas tфis',0 |
||
290 | error9 db 'FAT tabel vigane',0 |
||
291 | error10 db 'Juurdepффs keelatud',0 |
||
292 | error11 db 'Seadme viga',0 |
||
293 | aUnknownError db 'Tundmatu viga',0 |
||
205 | heavyiron | 294 | |
295 | else |
||
341 | heavyiron | 296 | save db ' Save',0 |
297 | label1 db 'Select one of the variants:',0 |
||
298 | label2 db ' Or enter full path to file:',0 |
||
299 | label3 db ' All folders must exist',0 |
||
300 | ok db 'RAM-drive was saved successfully',0 |
||
301 | error3 db 'Unknown file system',0 |
||
302 | error5 db 'Incorrect path',0 |
||
303 | error8 db 'Disk is full',0 |
||
304 | error9 db 'FAT table corrupted',0 |
||
305 | error10 db 'Access denied',0 |
||
306 | error11 db 'Device error',0 |
||
532 | diamond | 307 | aUnknownError db 'Unknown error',0 |
205 | heavyiron | 308 | |
309 | end if |
||
310 | |||
451 | heavyiron | 311 | mouse_flag: dd 0x0 |
485 | heavyiron | 312 | |
313 | path1 db '/fd/1/',0 |
||
314 | path2 db '/fd/2/',0 |
||
315 | path3 db '/hd0/1/kolibri.img',0 |
||
316 | path4 db '/hd0/1/kolibri/kolibri.img',0 ;для резервного сохранения |
||
317 | |||
318 | ;--------------------------------------------------------------------- |
||
319 | |||
320 | rb 514 |
||
321 | |||
322 | sc system_colors |
||
323 | |||
833 | Lrz | 324 | align 4 |
325 | rb 0x100 ; for stack |
||
326 | I_END: ; метка конца программы |