Subversion Repositories Kolibri OS

Rev

Rev 2197 | Rev 3941 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2139 IgorA 1
;;      h2d2b v0.4 use editbox by IgorA     ;;
2
;;      30.08.2011                          ;;
3
 
2091 leency 4
;;      h2d2b v0.3 system colors by Leency  ;;
5
;;      21.08.2011                          ;;
6
 
317 heavyiron 7
;;      hex2dec2bin 0.2 by Alexei Ershov    ;;
8
;;      16.11.2006                          ;;
9
 
2091 leency 10
use32
11
    org 0x0
12
    db  'MENUET01'
2139 IgorA 13
    dd  0x01,start,i_end,e_end,e_end,0,sys_path
31 halyavin 14
 
2091 leency 15
include '../../../proc32.inc'
2139 IgorA 16
include '../../../macros.inc' ; макросы облегчают жизнь ассемблерщиков!
17
include '../../../develop/libraries/box_lib/load_lib.mac'
18
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
19
include 'lang.inc'
31 halyavin 20
 
2139 IgorA 21
@use_library
31 halyavin 22
 
2091 leency 23
start:
2139 IgorA 24
	load_libraries l_libs_start,l_libs_end
25
	;проверка на сколько удачно загузилась наша библиотека
26
	mov	ebp,lib_0
27
	cmp	dword [ebp+ll_struc_size-4],0
28
	jz	@f
29
		mcall -1 ;exit not correct
30
	@@:
31
	mcall 40,0x27
32
	mcall 48, 3, sys_colors, 40
33
	edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
34
 
31 halyavin 35
red:
36
    call draw_window
37
 
38
still:
2139 IgorA 39
    mcall 10		; функция 10 - ждать события
31 halyavin 40
 
2139 IgorA 41
    cmp  eax,1		; перерисовать окно ?
42
    je	 red		; если да - на метку red
43
    cmp  eax,2		; нажата клавиша ?
44
    je	 key		; если да - на key
45
    cmp  eax,3		; нажата кнопка ?
46
    je	 button 	; если да - на button
47
    cmp  eax,6
48
    je	 mouse
31 halyavin 49
 
2139 IgorA 50
    jmp  still		; если другое событие - в начало цикла
31 halyavin 51
 
52
;---------------------------------------------------------------------
53
 
2139 IgorA 54
key:		       ; нажата клавиша на клавиатуре
55
    mcall 2
2201 IgorA 56
	cmp ah,13 ;обработка кнопки Enter
57
	je @f
58
		stdcall [edit_box_key], dword edit1
59
		jmp still
60
	@@:
61
	mov edi,string1
62
	add edi,[edit1.size] ;устанавливаем в edi конец строки
63
	jmp read_str
64
    jmp still		; вернуться к началу цикла
31 halyavin 65
 
66
read_str:
67
    dec   edi
68
    mov   esi, string1
69
 
70
    call  GetBase
71
 
72
    xor   ecx, ecx
73
    inc   ecx		; ecx = 1
74
 
75
make_bin:
76
    xor   eax, eax
77
 
78
next_digit:
79
    xor   edx, edx
80
    cmp   edi, esi
81
    jb	  .done
82
 
83
    mov   dl, [edi]
84
    cmp   dl, '-'
85
    jne   @f
86
    neg   eax
87
    jmp   .done
88
@@:
89
    cmp   dl, 'F'
90
    jbe   @f
91
    and   dl, 11011111b
92
@@:
93
    sub   dl, '0'
94
    cmp   dl, 9
95
    jbe   @f
96
    sub   dl, 'A'-'9'-1
97
@@:
98
    cmp   dl, bl
99
    jb	  @f
2139 IgorA 100
    ; Здесь обработать ошибку
31 halyavin 101
 
102
    jmp   .done
103
@@:
104
    push  ecx
105
    xchg  eax, ecx
106
    mul   edx ;        edx:eax = eax * edx
107
    add   ecx, eax
108
    pop   eax
109
    mul   ebx
110
    xchg  eax, ecx
111
    dec   edi
112
    jmp   next_digit
113
 
114
.done:
2139 IgorA 115
   mov	  [num], eax	; сохраняем введенное число
31 halyavin 116
   jmp	  red
117
 
118
;---------------------------------------------------------------------
119
 
2139 IgorA 120
button:
121
	mcall 17		; 17 - получить идентификатор нажатой кнопки
122
	cmp   ah, 1 	; если НЕ нажата кнопка с номером 1,
123
	jne   @f
124
		mcall -1
125
	@@:
126
	cmp ah, 2
127
	jne @f
128
		shl [num], 1
129
		jmp red
130
	@@:
131
	cmp ah, 3
132
	jne @f
133
		shr [num], 1
134
		jmp red
135
	@@:
136
	cmp ah, 4
137
	jne @f
138
		sar [num], 1
139
		jmp red
140
	@@:
141
	cmp ah, 5
142
	jne @f
143
		mov edi,string1
144
		add edi,[edit1.size] ;устанавливаем в edi конец строки
145
		jmp read_str
146
		;jmp red
147
	@@:
148
	jmp still
31 halyavin 149
 
2139 IgorA 150
mouse:
151
	stdcall [edit_box_mouse], edit1
152
	jmp still
153
 
317 heavyiron 154
;------------------------------------------------
155
    draw_window:
156
;------------------------------------------------
2091 leency 157
	mcall	48, 3, sys_colors, 40
158
 
31 halyavin 159
    mcall 12, 1
2091 leency 160
	mov	edx, 0x14000000
161
	or	edx, [sys_colors.work]
162
	;mov	esi, 0x80000000
163
	;or	esi, [sys_colors.grab_text]
164
    mcall 0, 200*65536+300, 200*65536+175, ,,title
31 halyavin 165
 
2091 leency 166
 
2139 IgorA 167
    mcall  8, 15      *65536+ 38, 90*65536+ 15, 2, [sys_colors.work_button] ; кнопка shl
168
    mcall  ,		       ,110*65536+ 15,	,	   ; кнопка sal
169
    mcall  , (300-53)*65536+ 38, 90*65536+ 15, 3,	   ; кнопка shr
170
    mcall  ,		       ,110*65536+ 15, 4,	   ; кнопка sar
171
    mcall  ,		       ,145*65536+ 15, 5,	   ; кнопка Ok
31 halyavin 172
 
2091 leency 173
	mov	ecx, 0x80000000
174
	or	ecx, [sys_colors.work_text]
175
    mcall  4, 15*65536+30,   , binstr,
317 heavyiron 176
    mcall  , 15*65536+44,   , decstr,
177
    mcall  , 15*65536+58,   ,sdecstr,
178
    mcall  , 15*65536+72,   , hexstr,
179
    mcall  , 15*65536+150,  , numstr,
31 halyavin 180
 
2091 leency 181
	mov	ecx, 0x80000000
182
	or	ecx, [sys_colors.work_button_text]
183
    mcall  ,	   26*65536+94, 	, shlstr,3
184
    mcall  , (300-42)*65536+94, 	, shrstr,
185
    mcall  ,	   26*65536+114,	, salstr,
186
    mcall  , (300-42)*65536+114,	, sarstr,
2197 leency 187
	mcall  , (300-42-3)*65536+149,	, Okstr,
31 halyavin 188
    mov    ecx, [num]
189
 
2091 leency 190
 
2139 IgorA 191
    mcall  47, 8*65536+256,,240*65536+72,[sys_colors.work_text]    ; 16-ная
192
    mcall    , 10*65536,   ,228*65536+44,     ; 10-ная
193
    mcall    , 8*65536+512,,240*65536+30,     ; 2-ная
31 halyavin 194
    ror    ecx, 8
317 heavyiron 195
    mcall    ,		  ,,(240-56)*65536+30,
31 halyavin 196
    ror    ecx, 8
317 heavyiron 197
    mcall    ,		  ,,(240-56*2)*65536+30,
31 halyavin 198
    ror    ecx, 8
317 heavyiron 199
    mcall    ,		  ,,(240-56*3)*65536+30,
31 halyavin 200
    ror    ecx, 8
317 heavyiron 201
    mov    [minus], '+'
31 halyavin 202
    jnc    @f
317 heavyiron 203
    mov    [minus], '-'
31 halyavin 204
    neg    ecx
205
@@:
2139 IgorA 206
    mcall   ,  10*65536,,228*65536+58,	      ; 10-ная со знаком
31 halyavin 207
    mcall  4, 222*65536+58, 0, minus, 1
2091 leency 208
    mcall 38, 15*65536+300-15, 137*65536+137, [sys_colors.work_graph]
2139 IgorA 209
	stdcall [edit_box_draw], edit1
210
    mcall 12, 2 		   ; функция 12: сообщить ОС об отрисовке окна
31 halyavin 211
 
212
ret
213
 
214
 
215
;-------------------------------------------------
216
    GetBase:
217
;-------------------------------------------------
218
    mov   ebx, 10
219
    cmp   edi, esi
220
    jb	  .done
221
 
222
    mov   al, [edi]
223
    cmp   al, 'H'
224
    jbe   @f
225
    and   al, 11011111b
226
@@:
227
    cmp   al, 'H'
228
    jne   @f
229
    mov   ebx, 16
230
    dec   edi
231
    jmp   .done
232
 
233
@@:
234
    cmp   al, 'D'
235
    jne   @f
236
    mov   ebx, 10
237
    dec   edi
238
    jmp   .done
239
 
240
@@:
241
    cmp   al, 'B'
242
    jne   .done
243
    mov   ebx, 2
244
    dec   edi
245
 
246
.done:
247
ret
248
 
249
;-------------------------------------------------
250
string1:
251
  db  34 dup(' ')
252
string1_end:
317 heavyiron 253
  num	dd  0
31 halyavin 254
 
255
 
2139 IgorA 256
 title db 'hex2dec2bin 0.4',0
2091 leency 257
 minus	db '-',0
317 heavyiron 258
 hexstr db 'hex:',0
259
 binstr db 'bin:',0
260
 decstr db 'dec:',0
2139 IgorA 261
 sdecstr db 'signed dec:',0
2091 leency 262
 shlstr db 'shl',0
263
 salstr db 'sal',0
264
 shrstr db 'shr',0
265
 sarstr db 'sar',0
31 halyavin 266
 
2139 IgorA 267
if lang eq ru
268
	numstr db 'Число:',0
269
	Okstr db 'Ввод',0
270
	head_f_i:
271
	head_f_l db 'Системная ошибка',0
272
else
273
	numstr db 'Number:',0
274
	Okstr db 'Ok',0
275
	head_f_i:
276
	head_f_l db 'System error',0
277
end if
278
 
279
mouse_dd dd 0
280
edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
281
editboxes_end:
282
 
283
system_dir_0 db '/sys/lib/'
284
lib_name_0 db 'box_lib.obj',0
285
err_msg_found_lib_0 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
286
err_msg_import_0 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0
287
 
288
l_libs_start:
289
	lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
290
		err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
291
l_libs_end:
292
 
293
align 4
294
import_box_lib:
295
	;dd sz_init1
296
	edit_box_draw dd sz_edit_box_draw
297
	edit_box_key dd sz_edit_box_key
298
	edit_box_mouse dd sz_edit_box_mouse
299
	;edit_box_set_text dd sz_edit_box_set_text
300
dd 0,0
301
	;sz_init1 db 'lib_init',0
302
	sz_edit_box_draw db 'edit_box',0
303
	sz_edit_box_key db 'edit_box_key',0
304
	sz_edit_box_mouse db 'edit_box_mouse',0
305
	;sz_edit_box_set_text db 'edit_box_set_text',0
306
 
2091 leency 307
i_end:
308
 sys_colors		system_colors
309
 rb 0x400					;stack
2139 IgorA 310
 sys_path rb 4096
311
 library_path rb 4096
312
e_end:				   ; метка конца программы