Rev 4875 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4865 | eAndrew | 1 | VERSION equ "0.1Å" |
2 | |||
3 | use32 |
||
4 | org 0 |
||
5 | db 'MENUET01' |
||
6 | dd 1, main, dataend, memory, stacktop, 0, 0 |
||
7 | |||
8 | include "../../proc32.inc" |
||
9 | include "../../macros.inc" |
||
10 | include "../../dll.inc" |
||
11 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
||
12 | include "parser.inc" |
||
13 | |||
14 | ;=============================== |
||
15 | |||
16 | sz_head db "Calc+ [v", VERSION, "]", 0 |
||
17 | buttons db "1234567890.%-+*/()" |
||
18 | edb1 edit_box 184, 8, 12, 0, 0, 0, 0, 0, 500, \ |
||
19 | exp, group, ed_always_focus + ed_focus, 0, 0 |
||
20 | |||
21 | imports: |
||
22 | library gui, "box_lib.obj" |
||
23 | import gui, editbox.draw, "edit_box", \ |
||
24 | editbox.key, "edit_box_key", \ |
||
25 | editbox.mouse, "edit_box_mouse" |
||
26 | |||
27 | ;=============================== |
||
28 | |||
29 | main: |
||
30 | mov [ans.buffer], word "0" |
||
31 | mov [ans.size], 15 |
||
32 | |||
33 | mcall 40, 100111b |
||
34 | mcall 48, 3, scn, 192 |
||
35 | |||
36 | m2m [edb1.color], [scn.gui_face] |
||
37 | m2m [edb1.shift_color], [scn.gui_select] |
||
38 | m2m [edb1.focus_border_color], [scn.gui_face] |
||
39 | m2m [edb1.text_color], [scn.gui_fctext] |
||
40 | |||
41 | mcall 68, 11 |
||
42 | stdcall dll.Load, imports |
||
43 | |||
44 | ;---------------------- |
||
45 | |||
46 | update: |
||
47 | mcall 23, 50 |
||
48 | |||
49 | cmp eax, EV_REDRAW |
||
50 | je ev_redraw |
||
51 | cmp eax, EV_KEY |
||
52 | je ev_key |
||
53 | cmp eax, EV_BUTTON |
||
54 | je ev_button |
||
55 | cmp eax, EV_MOUSE |
||
56 | je ev_mouse |
||
57 | |||
58 | dec [timer] |
||
59 | cmp [timer], 0 |
||
60 | je calc |
||
61 | |||
62 | jmp update |
||
63 | |||
64 | ;---------------------- |
||
65 | |||
66 | ev_redraw: |
||
67 | mov edx, [scn.win_body] |
||
68 | or edx, 0x34 shl 24 |
||
69 | mcall 0, <100, 236>, <100, 164>, , , sz_head |
||
70 | |||
71 | mcall 13, < 4, 220>, < 8, 23>, [scn.gui_frame] |
||
72 | mov edx, [scn.gui_face] |
||
73 | cmp [error_n], 0 |
||
74 | je @f |
||
75 | mov edx, 0xFFAAAA |
||
76 | @@: |
||
77 | mcall 13, < 5, 218>, < 9, 21> |
||
78 | mcall , < 5, 218>, < 9, 1>, [scn.3d_face] |
||
79 | mcall , < 5, 1>, < 10, 20> |
||
80 | mcall , < 5, 218>, < 31, 1>, [scn.3d_light] |
||
81 | |||
82 | mov ebx, 224 |
||
83 | sub ebx, [ans.size] |
||
84 | shl ebx, 16 |
||
85 | inc ebx |
||
86 | mcall , , < 9, 21>, [scn.gui_frame] |
||
87 | add ebx, [ans.size] |
||
88 | add ebx, 1 shl 16 |
||
89 | sub ebx, 3 |
||
90 | mcall , , , [scn.3d_light] |
||
91 | add ebx, 1 shl 16 |
||
92 | add ecx, 1 shl 16 |
||
93 | dec ebx |
||
94 | dec ecx |
||
95 | mcall , , , [scn.win_face] |
||
96 | shr ecx, 16 |
||
97 | mov bx, cx |
||
98 | add ebx, 3 shl 16 + 6 |
||
99 | mov ecx, [scn.win_text] |
||
100 | or ecx, 1b shl 31 |
||
101 | mcall 4, , , ans.buffer |
||
102 | |||
103 | mcall 1, 4, 8, [scn.win_body] |
||
104 | mcall , 223 |
||
105 | mcall , , 30, [scn.3d_light] |
||
106 | mcall , 4 |
||
107 | |||
108 | mov ebx, 214 |
||
109 | sub ebx, [ans.size] |
||
110 | cmp ebx, 24 |
||
111 | jg @f |
||
112 | mov ebx, 24 |
||
113 | @@: |
||
114 | mov [edb1.width], ebx |
||
115 | m2m [edb1.color], [scn.gui_face] |
||
116 | m2m [edb1.focus_border_color], [scn.gui_face] |
||
117 | cmp [error_n], 0 |
||
118 | je @f |
||
119 | mov [edb1.color], 0xFFAAAA |
||
120 | mov [edb1.focus_border_color], 0xFFAAAA |
||
121 | @@: |
||
122 | invoke editbox.draw, edb1 |
||
123 | |||
124 | mov [but_id], 0x4000000A |
||
125 | stdcall draw_button, 4, 38, 42, buttons + 00, 15 |
||
126 | stdcall draw_button, 46, 38, 42, buttons + 01, 15 |
||
127 | stdcall draw_button, 88, 38, 42, buttons + 02, 15 |
||
128 | stdcall draw_button, 4, 38, 66, buttons + 03, 15 |
||
129 | stdcall draw_button, 46, 38, 66, buttons + 04, 15 |
||
130 | stdcall draw_button, 88, 38, 66, buttons + 05, 15 |
||
131 | stdcall draw_button, 4, 38, 90, buttons + 06, 15 |
||
132 | stdcall draw_button, 46, 38, 90, buttons + 07, 15 |
||
133 | stdcall draw_button, 88, 38, 90, buttons + 08, 15 |
||
134 | stdcall draw_button, 4, 80, 114, buttons + 09, 35 |
||
135 | stdcall draw_button, 88, 38, 114, buttons + 10, 15 |
||
136 | |||
137 | stdcall draw_button, 144, 38, 42, buttons + 11, 15 |
||
138 | stdcall draw_button, 186, 38, 42, buttons + 12, 15 |
||
139 | stdcall draw_button, 144, 38, 66, buttons + 13, 15 |
||
140 | stdcall draw_button, 186, 38, 66, buttons + 14, 15 |
||
141 | stdcall draw_button, 144, 38, 90, buttons + 15, 15 |
||
142 | stdcall draw_button, 186, 38, 90, buttons + 16, 15 |
||
143 | stdcall draw_button, 144, 38, 114, buttons + 17, 15 |
||
144 | stdcall draw_button, 186, 38, 114, buttons + 18, 15 |
||
145 | |||
146 | jmp update |
||
147 | |||
148 | ;---------------------- |
||
149 | |||
150 | ev_key: |
||
151 | mov [timer], 1 |
||
152 | |||
153 | mcall 2 |
||
154 | cmp ah, 27 |
||
155 | je exit |
||
156 | invoke editbox.key, edb1 |
||
157 | jmp update |
||
158 | |||
159 | ;---------------------- |
||
160 | |||
161 | ev_button: |
||
162 | mov [timer], 1 |
||
163 | |||
164 | mcall 17 |
||
165 | |||
166 | cmp ah, 1 |
||
167 | je exit |
||
168 | |||
169 | cmp ah, 22 |
||
170 | jne .not_del |
||
171 | |||
172 | cmp [edb1.pos], 0 |
||
173 | je update |
||
174 | mov eax, exp |
||
175 | add eax, [edb1.pos] |
||
176 | dec eax |
||
177 | mov ebx, exp |
||
178 | add ebx, [edb1.size] |
||
179 | inc ebx |
||
180 | @@: |
||
181 | cmp eax, ebx |
||
182 | je @f |
||
183 | mov cl, [eax + 1] |
||
184 | mov [eax], cl |
||
185 | inc eax |
||
186 | jmp @b |
||
187 | @@: |
||
188 | dec [edb1.pos] |
||
189 | dec [edb1.size] |
||
190 | m2m [edb1.shift], [edb1.pos] |
||
191 | jmp ev_redraw |
||
192 | |||
193 | .not_del: |
||
194 | |||
195 | cmp ah, 10 |
||
196 | jl update |
||
197 | cmp ah, 50 |
||
198 | jg update |
||
199 | |||
200 | movzx eax, ah |
||
201 | add eax, buttons |
||
202 | sub eax, 10 |
||
203 | mov al, [eax] |
||
204 | |||
205 | mov ebx, exp |
||
206 | add ebx, [edb1.size] |
||
207 | mov ecx, exp |
||
208 | add ecx, [edb1.pos] |
||
209 | @@: |
||
210 | cmp ebx, ecx |
||
211 | je @f |
||
212 | mov dl, [ebx - 1] |
||
213 | mov [ebx], dl |
||
214 | dec ebx |
||
215 | jmp @b |
||
216 | @@: |
||
217 | |||
218 | mov [ebx], al |
||
219 | inc [edb1.size] |
||
220 | inc [edb1.pos] |
||
221 | |||
222 | jmp ev_redraw |
||
223 | |||
224 | ;---------------------- |
||
225 | |||
226 | ev_mouse: |
||
227 | mcall 2 |
||
228 | |||
229 | invoke editbox.mouse, edb1 |
||
230 | jmp update |
||
231 | |||
232 | ;---------------------- |
||
233 | |||
234 | exit: |
||
235 | mcall -1 |
||
236 | |||
237 | ;---------------------- |
||
238 | |||
239 | calc: |
||
240 | stdcall parse |
||
241 | cmp [error_n], 0 |
||
242 | jne .error |
||
243 | |||
244 | stdcall convert_to_str, eax, ans.buffer |
||
245 | imul eax, 6 |
||
246 | add eax, 9 |
||
247 | mov [ans.size], eax |
||
248 | jmp ev_redraw |
||
249 | |||
250 | .error: |
||
251 | cmp [error_n], 1 |
||
252 | je .err_1 |
||
253 | jmp ev_redraw |
||
254 | .err_1: |
||
255 | mov [ans.buffer + 0], dword "Div." |
||
256 | mov [ans.buffer + 4], dword " by " |
||
257 | mov [ans.buffer + 8], dword "zero" |
||
258 | mov [ans.buffer + 12], byte 0 |
||
259 | mov [ans.size], 81 |
||
260 | jmp ev_redraw |
||
261 | |||
262 | ;---------------------- |
||
263 | |||
264 | proc draw_button, x, w, y, txt, txtx |
||
265 | mcall 13, <[x], [w]>, <[y], 20>, [scn.gui_frame] |
||
266 | |||
267 | add ebx, 1 shl 16 |
||
268 | add ecx, 1 shl 16 |
||
269 | sub ebx, 2 |
||
270 | sub ecx, 2 |
||
271 | mcall , , , [scn.3d_light] |
||
272 | |||
273 | add ebx, 1 shl 16 |
||
274 | add ecx, 1 shl 16 |
||
275 | dec ebx |
||
276 | dec ecx |
||
277 | mcall , , , [scn.3d_dark] |
||
278 | |||
279 | dec ebx |
||
280 | dec ecx |
||
281 | mcall , , , [scn.win_face] |
||
282 | |||
283 | mcall 1, [x], [y], [scn.win_body] |
||
284 | |||
285 | add ebx, [w] |
||
286 | dec ebx |
||
287 | mcall |
||
288 | |||
289 | add ecx, 20 |
||
290 | dec ecx |
||
291 | mcall |
||
292 | |||
293 | sub ebx, [w] |
||
294 | inc ebx |
||
295 | mcall |
||
296 | |||
297 | mov ebx, [x] |
||
298 | inc ebx |
||
299 | shl ebx, 16 |
||
300 | add ebx, [w] |
||
301 | sub ebx, 3 |
||
302 | mov ecx, [y] |
||
303 | inc ecx |
||
304 | shl ecx, 16 |
||
305 | add ecx, 20 |
||
306 | sub ecx, 3 |
||
307 | mov edx, [but_id] |
||
308 | mcall 8 |
||
309 | inc dword[but_id] |
||
310 | |||
311 | mov ebx, [x] |
||
312 | add ebx, [txtx] |
||
313 | shl ebx, 16 |
||
314 | add ebx, [y] |
||
315 | add ebx, 7 |
||
316 | mcall 4, , [scn.win_text], [txt], 1 |
||
317 | |||
318 | ret |
||
319 | endp |
||
320 | |||
321 | ;---------------------- |
||
322 | |||
323 | dataend: |
||
324 | |||
325 | ;=============================== |
||
326 | |||
327 | rb 2048 |
||
328 | stacktop: |
||
329 | |||
330 | exp rb 512 |
||
331 | exp_pos rd 1 |
||
332 | exp_lvl rd 1 |
||
333 | group rd 1 |
||
334 | |||
335 | ans.buffer:rb 512 |
||
336 | ans.size rd 1 |
||
337 | error_n rd 1 |
||
338 | |||
339 | scn sys_colors_new |
||
340 | timer rd 1 |
||
341 | but_id rd 1 |
||
342 | |||
343 | memory:[y],>[x],>>>>>>>>>>>>100,>100,> |