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: ; метка конца программы |