Subversion Repositories Kolibri OS

Rev

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