Subversion Repositories Kolibri OS

Rev

Rev 8236 | Details | Compare with Previous | Last modification | View Log | RSS feed

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