Rev 2201 | Rev 6697 | 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 |
||
2837 | leency | 280 | edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1 , mouse_dd, ed_focus+ed_always_focus |
281 | |||
2139 | IgorA | 282 | editboxes_end: |
283 | |||
284 | system_dir_0 db '/sys/lib/' |
||
285 | lib_name_0 db 'box_lib.obj',0 |
||
286 | err_msg_found_lib_0 db 'Не найдена библиотека ',39,'box_lib.obj',39,0 |
||
287 | err_msg_import_0 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0 |
||
288 | |||
289 | l_libs_start: |
||
290 | lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\ |
||
291 | err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i |
||
292 | l_libs_end: |
||
293 | |||
294 | align 4 |
||
295 | import_box_lib: |
||
296 | ;dd sz_init1 |
||
297 | edit_box_draw dd sz_edit_box_draw |
||
298 | edit_box_key dd sz_edit_box_key |
||
299 | edit_box_mouse dd sz_edit_box_mouse |
||
300 | ;edit_box_set_text dd sz_edit_box_set_text |
||
301 | dd 0,0 |
||
302 | ;sz_init1 db 'lib_init',0 |
||
303 | sz_edit_box_draw db 'edit_box',0 |
||
304 | sz_edit_box_key db 'edit_box_key',0 |
||
305 | sz_edit_box_mouse db 'edit_box_mouse',0 |
||
306 | ;sz_edit_box_set_text db 'edit_box_set_text',0 |
||
307 | |||
2091 | leency | 308 | i_end: |
309 | sys_colors system_colors |
||
310 | rb 0x400 ;stack |
||
2139 | IgorA | 311 | sys_path rb 4096 |
312 | library_path rb 4096 |
||
313 | e_end: ; метка конца программы |