Subversion Repositories Kolibri OS

Rev

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