Subversion Repositories Kolibri OS

Rev

Rev 1214 | Rev 1373 | 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'
1111 Lrz 29
include '../../../develop/libraries/box_lib/load_lib.mac'
30
include '../../../develop/libraries/box_lib/asm/trunk/editbox_ex.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
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
341 heavyiron 51
red:                    ; перерисовать окно
1228 Lrz 52
   mov  eax,48
53
   mov  ebx,3
54
   mov  ecx,sc
55
   mov  edx,sizeof.system_colors
56
   mcall
57
        edit_boxes_set_sys_color editbox,editbox_end,sc
341 heavyiron 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
 
341 heavyiron 67
    dec  eax             ; перерисовать окно?
68
    jz   red             ; если да - на метку red
69
    dec  eax
70
    jz   key
71
    dec  eax
72
    jz   button
205 heavyiron 73
 
341 heavyiron 74
mouse:
1070 Lrz 75
;        mouse_edit_box editbox
76
        push    dword editbox
77
        call    [edit_box_mouse]
78
 
532 diamond 79
        jmp     still
341 heavyiron 80
 
81
button:
82
    mov  al,17           ; получить идентификатор нажатой кнопки
485 heavyiron 83
    mcall
205 heavyiron 84
 
341 heavyiron 85
    cmp  ah,1            ; кнопка с id=1("закрыть")?
86
    jne  noclose
1070 Lrz 87
close:
341 heavyiron 88
    or   eax,-1          ; функция -1: завершить программу
485 heavyiron 89
    mcall
205 heavyiron 90
 
341 heavyiron 91
noclose:
532 diamond 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
110
doit:
111
        pop     eax
112
        mcall
113
        call    check_for_error
114
        jmp     still
205 heavyiron 115
 
341 heavyiron 116
key:
117
    mov  al,2
485 heavyiron 118
    mcall
1070 Lrz 119
;    key_edit_box editbox
120
        push    dword editbox
121
        call    [edit_box_key]
122
 
341 heavyiron 123
    jmp  still
205 heavyiron 124
 
125
 
341 heavyiron 126
check_for_error:                      ;Обработчик ошибок
532 diamond 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:
157
    mov eax,4                              ;надписи
158
    mov ebx,20 shl 16 + 148
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
 
341 heavyiron 177
   mov eax,12                            ; функция 12: сообщить ОС об отрисовке окна
178
   mov bl,1                              ; 1 - начинаем рисовать
485 heavyiron 179
   mcall
205 heavyiron 180
 
341 heavyiron 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
485 heavyiron 187
   mov edi,title                        ; ЗАГОЛОВОК ОКНА
188
   mcall
205 heavyiron 189
 
1070 Lrz 190
        push    dword editbox
191
        call    [edit_box_draw]
205 heavyiron 192
 
1070 Lrz 193
;draw_edit_box editbox                   ;рисование edit box
194
 
532 diamond 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
 
341 heavyiron 210
   mov eax,8                             ;отрисовка кнопок
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
 
229
   mov al,4                              ;надписи
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
 
271
   mov al,12                            ; функция 12: сообщить ОС об отрисовке окна
272
   mov ebx,2                            ; 2, закончили рисовать
485 heavyiron 273
   mcall
341 heavyiron 274
 
275
   ret                                  ; выходим из процедуры
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
341 heavyiron 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
298
error10 db 'Доступ запрещен',0
299
error11 db 'Ошибка устройства',0
532 diamond 300
aUnknownError db 'Неизвестная ошибка',0
605 kaitz 301
else if lang eq et
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
311
error10 db 'Juurdepффs keelatud',0
312
error11 db 'Seadme viga',0
313
aUnknownError db 'Tundmatu viga',0
205 heavyiron 314
 
315
else
341 heavyiron 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
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
;Всегда соблюдать последовательность в имени.
333
system_path      db '/sys/lib/'
334
library_name     db 'box_lib.obj',0
335
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
205 heavyiron 336
 
1070 Lrz 337
err_message_found_lib   db 'Sorry I cannot load library box_lib.obj',0
338
head_f_i:
339
head_f_l        db 'System error',0
340
err_message_import      db 'Error on load import library box_lib.obj',0
341
align 4
342
myimport:
485 heavyiron 343
 
1070 Lrz 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
 
349
                dd      0
350
                dd      0
351
 
352
aEdit_box_draw  db 'edit_box',0
353
aEdit_box_key   db 'edit_box_key',0
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
 
485 heavyiron 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  ;для резервного сохранения
364
 
365
;---------------------------------------------------------------------
366
 
367
rb 514
368
 
369
sc     system_colors
1214 Lrz 370
mouse_dd	rd 1
1228 Lrz 371
cur_dir_path    rb 1096
372
library_path    rb 1096
833 Lrz 373
align 4
374
rb 0x100        ; for stack
375
I_END:                             ; метка конца программы