Subversion Repositories Kolibri OS

Rev

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