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