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