Subversion Repositories Kolibri OS

Rev

Rev 551 | Rev 833 | 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
 
605 kaitz 28
include '..\..\..\develop\examples\editbox\trunk\editbox.inc'
502 heavyiron 29
use_edit_box procinfo,22,5
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
 
532 diamond 173
draw_edit_box editbox,use_f9,procinfo   ;рисование 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
I_END:                             ; метка конца программы
320
 
321
rb 514
322
 
323
sc     system_colors
324
 
502 heavyiron 325
procinfo process_information
341 heavyiron 326