Subversion Repositories Kolibri OS

Rev

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