Subversion Repositories Kolibri OS

Rev

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