Subversion Repositories Kolibri OS

Rev

Rev 371 | Rev 485 | 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'
11
include 'macros.inc'
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       ; размер программы
23
  dd     0x1000      ; количество памяти
24
  dd     0x1000      ; адрес вершины стэка
25
  dd     0x0         ; адрес буфера для параметров (не используется)
26
  dd     0x0         ; зарезервировано
205 heavyiron 27
 
353 heavyiron 28
include '..\..\..\develop\examples\editbox\trunk\editbox.inc'
341 heavyiron 29
use_edit_box
205 heavyiron 30
 
341 heavyiron 31
;---------------------------------------------------------------------
32
;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
33
;---------------------------------------------------------------------
205 heavyiron 34
 
341 heavyiron 35
START:
36
   mov eax, 40
37
   mov ebx, 100111b
38
   int 0x40
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
49
    int 40h
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           ; получить идентификатор нажатой кнопки
205 heavyiron 64
    int  0x40
65
 
341 heavyiron 66
    cmp  ah,1            ; кнопка с id=1("закрыть")?
67
    jne  noclose
68
    or   eax,-1          ; функция -1: завершить программу
205 heavyiron 69
    int  0x40
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
205 heavyiron 77
    int  0x40
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
86
    int  0x40
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
96
    int  0x40
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
104
    int  0x40
105
    call check_for_error
106
    jmp  still
205 heavyiron 107
 
341 heavyiron 108
key:
109
    mov  al,2
205 heavyiron 110
    int  0x40
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
166
    int 0x40
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]
174
    int 0x40
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
187
   int  0x40
205 heavyiron 188
 
341 heavyiron 189
   mov eax,12                            ; функция 12: сообщить ОС об отрисовке окна
190
   mov bl,1                              ; 1 - начинаем рисовать
191
   int 0x40
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
199
   mov edi,header                        ; ЗАГОЛОВОК ОКНА
200
   int 0x40
205 heavyiron 201
 
341 heavyiron 202
draw_edit_boxes editbox,editbox_end      ;рисование 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
208
   int 0x40
205 heavyiron 209
 
341 heavyiron 210
   add ecx,20 shl 16
211
   int 0x40
205 heavyiron 212
 
341 heavyiron 213
   add ecx,20 shl 16
214
   int 0x40
205 heavyiron 215
 
341 heavyiron 216
   add ecx,40 shl 16
217
   int 0x40
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]
224
   int 0x40
205 heavyiron 225
 
341 heavyiron 226
   sub ecx,40 shl 16
227
   dec edx
228
   int 0x40
205 heavyiron 229
 
341 heavyiron 230
   sub ecx,20 shl 16
231
   dec edx
232
   int 0x40
233
 
234
   sub ecx,20 shl 16
235
   dec edx
236
   int 0x40
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
243
   int 0x40
244
 
245
   mov ebx,150 shl 16 + 35
246
   mov edx,path1
247
   int 0x40
248
 
249
   add ebx,20
250
   mov edx,path2
251
   int 0x40
252
 
253
   mov ebx,75 shl 16 + 75
254
   mov edx,path3
255
   int 0x40
256
 
257
   mov ebx,30 shl 16 + 97
258
   mov edx,label2
259
   int 0x40
260
 
261
   mov ebx,40 shl 16 + 135
262
   mov edx,label3
263
   int 0x40
264
 
265
   mov ecx,[sc.work_button_text]
266
   or  ecx,0x80000000
267
   mov ebx,195 shl 16 + 35
268
   mov edx,save
269
   int 0x40
270
 
271
   add ebx,20
272
   int 0x40
273
 
274
   add ebx,20
275
   int 0x40
276
 
277
   add ebx,40
278
   int 0x40
279
 
280
   mov al,12                            ; функция 12: сообщить ОС об отрисовке окна
281
   mov ebx,2                            ; 2, закончили рисовать
282
   int 0x40
283
 
284
   ret                                  ; выходим из процедуры
285
 
286
 
287
;---------------------------------------------------------------------
288
;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
289
;---------------------------------------------------------------------
290
 
291
header db appname,version,0
292
 
293
editbox:
371 heavyiron 294
edit1 edit_box 170,10,113,0xffffff,0,0,0,512,path4,ed_focus,26
341 heavyiron 295
editbox_end:
296
 
297
path1   db '/fd/1/',0
298
path2   db '/fd/2/',0
299
path3   db '/hd0/1/kolibri.img',0
371 heavyiron 300
path4   db '/hd0/1/kolibri/kolibri.img',0  ;для резервного сохранения
301
rb 513
341 heavyiron 302
 
205 heavyiron 303
if lang eq ru
341 heavyiron 304
save    db 'Сохранить',0
305
label1  db 'Выберите один из вариантов:',0
306
label2  db 'Или введите полный путь к файлу:',0
307
label3  db 'Все папки должны существовать',0
308
ok      db 'RAM-диск сохранен успешно',0
309
error3  db 'Неизвестная файловая система',0
310
error5  db 'Несуществующий путь',0
311
error8  db 'Нет места на диске',0
312
error9  db 'Таблица FAT разрушена',0
313
error10 db 'Доступ запрещен',0
314
error11 db 'Ошибка устройства',0
205 heavyiron 315
 
316
else
341 heavyiron 317
save    db '  Save',0
318
label1  db 'Select one of the variants:',0
319
label2  db '   Or enter full path to file:',0
320
label3  db '    All folders must exist',0
321
ok      db 'RAM-drive was saved successfully',0
322
error3  db 'Unknown file system',0
323
error5  db 'Incorrect path',0
324
error8  db 'Disk is full',0
325
error9  db 'FAT table corrupted',0
326
error10 db 'Access denied',0
327
error11 db 'Device error',0
205 heavyiron 328
 
329
end if
330
 
451 heavyiron 331
mouse_flag: dd 0x0
332
structure_of_potock:
333
rb 100
341 heavyiron 334
;---------------------------------------------------------------------
335
 
336
I_END:                             ; метка конца программы
337
 
338
sc     system_colors