Rev 4943 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4943 | Rev 6163 | ||
---|---|---|---|
1 | VERSION equ "0.5" |
1 | VERSION equ "0.5" |
2 | 2 | ||
3 | use32 |
3 | use32 |
4 | org 0 |
4 | org 0 |
5 | db 'MENUET01' |
5 | db 'MENUET01' |
6 | dd 1, main, dataend, memory, stacktop, 0, 0 |
6 | dd 1, main, dataend, memory, stacktop, 0, 0 |
7 | 7 | ||
8 | include "../../proc32.inc" |
8 | include "../../proc32.inc" |
9 | include "../../macros.inc" |
9 | include "../../macros.inc" |
10 | include "../../dll.inc" |
10 | include "../../dll.inc" |
11 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
11 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
12 | ; include "../../debug.inc" |
12 | ; include "../../debug.inc" |
13 | include "parser.inc" |
13 | include "parser.inc" |
14 | 14 | ||
15 | ;=============================== |
15 | ;=============================== |
16 | 16 | ||
17 | LIST_ITEM_SIZE equ 16 |
17 | LIST_ITEM_SIZE equ 16 |
18 | LIST_ITEM_COUNT equ 6 |
18 | LIST_ITEM_COUNT equ 6 |
19 | LIST_SIZE equ LIST_ITEM_SIZE * LIST_ITEM_COUNT |
19 | LIST_SIZE equ LIST_ITEM_SIZE * LIST_ITEM_COUNT |
20 | LIST_ITEM_COLOR1 equ dword [scn.btn_face] |
20 | LIST_ITEM_COLOR1 equ dword [scn.btn_face] |
21 | LIST_ITEM_COLOR2 equ dword [scn.win_face] |
21 | LIST_ITEM_COLOR2 equ dword [scn.win_face] |
22 | LIST_ITEM_TEXT1 equ dword [scn.btn_text] |
22 | LIST_ITEM_TEXT1 equ dword [scn.btn_text] |
23 | LIST_ITEM_TEXT2 equ dword [scn.win_text] |
23 | LIST_ITEM_TEXT2 equ dword [scn.win_text] |
24 | LIST_ITEM_Y equ LIST_ITEM_SIZE / 2 - 3 |
24 | LIST_ITEM_Y equ LIST_ITEM_SIZE / 2 - 3 |
25 | 25 | ||
26 | KEYB_SIZE equ 140 |
26 | KEYB_SIZE equ 140 |
27 | 27 | ||
28 | sz_cont db "Keyboard ", 0x10 |
28 | sz_cont db "Keyboard ", 0x10 |
29 | sz_head db "Calc+ [v", VERSION, "]", 0 |
29 | sz_head db "Calc+ v", VERSION, 0 |
30 | btn_clr db "" |
30 | btn_clr db "" |
31 | buttons db "|%^*/-+)(=7894561230" |
31 | buttons db "|%^*/-+)(=7894561230" |
32 | edb1 edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \ |
32 | edb1 edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \ |
33 | exp, group, ed_always_focus + ed_focus, 0, 0 |
33 | exp, group, ed_always_focus + ed_focus, 0, 0 |
34 | 34 | ||
35 | imports: |
35 | imports: |
36 | library gui, "box_lib.obj" |
36 | library gui, "box_lib.obj" |
37 | import gui, editbox.draw, "edit_box", \ |
37 | import gui, editbox.draw, "edit_box", \ |
38 | editbox.key, "edit_box_key", \ |
38 | editbox.key, "edit_box_key", \ |
39 | editbox.mouse, "edit_box_mouse" |
39 | editbox.mouse, "edit_box_mouse" |
40 | 40 | ||
41 | ;=============================== |
41 | ;=============================== |
42 | 42 | ||
43 | main: |
43 | main: |
44 | mov [ans.buffer], dword "= 0" |
44 | mov [ans.buffer], dword "= 0" |
45 | mov [ans.size], 3 * 6 + 9 |
45 | mov [ans.size], 3 * 6 + 9 |
46 | 46 | ||
47 | mcall 40, 100111b |
47 | mcall 40, 100111b |
48 | mcall 48, 3, scn, 192 |
48 | ; mcall 48, 3, scn, 192 |
49 | 49 | ||
50 | 50 | ||
51 | m2m [edb1.color], [scn.gui_face] |
51 | m2m [edb1.color], [scn.gui_face] |
52 | m2m [edb1.shift_color], [scn.gui_select] |
52 | m2m [edb1.shift_color], [scn.gui_select] |
53 | m2m [edb1.focus_border_color], [scn.gui_face] |
53 | m2m [edb1.focus_border_color], [scn.gui_face] |
54 | m2m [edb1.text_color], [scn.gui_text] |
54 | m2m [edb1.text_color], [scn.gui_text] |
55 | 55 | ||
56 | mcall 68, 11 |
56 | mcall 68, 11 |
57 | stdcall dll.Load, imports |
57 | stdcall dll.Load, imports |
58 | 58 | ||
59 | ;---------------------- |
59 | ;---------------------- |
60 | 60 | ||
61 | update: |
61 | update: |
62 | mcall 23, 5 |
62 | mcall 23, 5 |
63 | 63 | ||
64 | cmp eax, EV_REDRAW |
64 | cmp eax, EV_REDRAW |
65 | je ev_redraw |
65 | je ev_redraw |
66 | cmp eax, EV_KEY |
66 | cmp eax, EV_KEY |
67 | je ev_key |
67 | je ev_key |
68 | cmp eax, EV_BUTTON |
68 | cmp eax, EV_BUTTON |
69 | je ev_button |
69 | je ev_button |
70 | cmp eax, EV_MOUSE |
70 | cmp eax, EV_MOUSE |
71 | je ev_mouse |
71 | je ev_mouse |
72 | 72 | ||
73 | jmp update |
73 | jmp update |
74 | 74 | ||
75 | ;---------------------- |
75 | ;---------------------- |
76 | 76 | ||
77 | ev_redraw: |
77 | ev_redraw: |
78 | mcall 12, 1 |
78 | mcall 12, 1 |
79 | 79 | ||
80 | ; WINDOW |
80 | ; WINDOW |
81 | mov edx, [scn.win_face] |
81 | mov edx, [scn.win_face] |
82 | or edx, 0x34 shl 24 |
82 | or edx, 0x34 shl 24 |
83 | mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head |
83 | mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head |
84 | 84 | ||
85 | ; TOOLBAR |
85 | ; TOOLBAR |
86 | mov ebx, (275 - 50 - 25 - 50) shl 16 + 64 |
86 | mov ebx, 120 shl 16 + 64 |
87 | cmp [keyb], byte 1 |
- | |
88 | jne @f |
- | |
89 | add ebx, KEYB_SIZE shl 16 |
- | |
90 | @@: |
- | |
91 | mcall 8, , <-17, 12>, 2 + 1 shl 30 |
87 | mcall 8, , <-17, 12>, 2 + 1 shl 30 |
92 | add ebx, 4 shl 16 - (64 + 14) |
88 | add ebx, 4 shl 16 - (64 + 14) |
93 | mcall 4, , [scn.win_title], sz_cont, 10 |
89 | mcall 4, , [scn.win_title], sz_cont, 10 |
94 | 90 | ||
95 | ; CONTENT |
91 | ; CONTENT |
96 | call draw_textbox |
92 | call draw_textbox |
97 | call draw_keyb |
93 | call draw_keyb |
98 | call draw_list |
94 | call draw_list |
99 | 95 | ||
100 | mcall 12, 2 |
96 | mcall 12, 2 |
101 | 97 | ||
102 | jmp update |
98 | jmp update |
103 | 99 | ||
104 | ;---------------------- |
100 | ;---------------------- |
105 | 101 | ||
106 | ev_key: |
102 | ev_key: |
107 | mcall 2 |
103 | mcall 2 |
108 | cmp ah, 27 |
104 | cmp ah, 27 |
109 | je exit |
105 | je exit |
110 | cmp ah, 13 |
106 | cmp ah, 13 |
111 | je calc |
107 | je calc |
112 | invoke editbox.key, edb1 |
108 | invoke editbox.key, edb1 |
113 | jmp update |
109 | jmp update |
114 | 110 | ||
115 | ;---------------------- |
111 | ;---------------------- |
116 | 112 | ||
117 | ev_button: |
113 | ev_button: |
118 | mcall 17 |
114 | mcall 17 |
119 | 115 | ||
120 | ; EXIT |
116 | ; EXIT |
121 | cmp ah, 1 |
117 | cmp ah, 1 |
122 | je exit |
118 | je exit |
123 | 119 | ||
124 | ; DELETE |
120 | ; DELETE |
125 | cmp ah, 4 |
121 | cmp ah, 4 |
126 | jne .not_del |
122 | jne .not_del |
127 | cmp [edb1.pos], 0 |
123 | cmp [edb1.pos], 0 |
128 | je update |
124 | je update |
129 | mov eax, exp |
125 | mov eax, exp |
130 | add eax, [edb1.pos] |
126 | add eax, [edb1.pos] |
131 | dec eax |
127 | dec eax |
132 | mov ebx, exp |
128 | mov ebx, exp |
133 | add ebx, [edb1.size] |
129 | add ebx, [edb1.size] |
134 | inc ebx |
130 | inc ebx |
135 | @@: |
131 | @@: |
136 | cmp eax, ebx |
132 | cmp eax, ebx |
137 | je @f |
133 | je @f |
138 | mov cl, [eax + 1] |
134 | mov cl, [eax + 1] |
139 | mov [eax], cl |
135 | mov [eax], cl |
140 | inc eax |
136 | inc eax |
141 | jmp @b |
137 | jmp @b |
142 | @@: |
138 | @@: |
143 | dec [edb1.pos] |
139 | dec [edb1.pos] |
144 | dec [edb1.size] |
140 | dec [edb1.size] |
145 | m2m [edb1.shift], [edb1.pos] |
141 | m2m [edb1.shift], [edb1.pos] |
146 | jmp .redraw |
142 | jmp .redraw |
147 | .not_del: |
143 | .not_del: |
148 | 144 | ||
149 | ; SHOW/HIDE KEYBOARD |
145 | ; SHOW/HIDE KEYBOARD |
150 | cmp ah, 2 |
146 | cmp ah, 2 |
151 | jne .not_keyb |
147 | jne .not_keyb |
152 | 148 | ||
153 | cmp [keyb], byte 0 |
149 | cmp [keyb], byte 0 |
154 | je .open |
150 | je .open |
155 | - | ||
156 | mcall 67, -1, -1, 286 - 25, -1 |
151 | |
157 | mov [keyb], 0 |
152 | mov [keyb], 0 |
- | 153 | mov [sz_cont + 9], byte 0x10 |
|
158 | mov [sz_cont + 9], byte 0x10 |
154 | mcall 67, -1, -1, 286 - 25, -1 |
159 | jmp ev_redraw |
155 | jmp update |
160 | - | ||
161 | .open: |
156 | |
162 | mcall 67, -1, -1, 286 - 25 + KEYB_SIZE, -1 |
157 | .open: |
163 | mov [keyb], 1 |
158 | mov [keyb], 1 |
164 | mov [sz_cont + 9], byte 0x11 |
- | |
165 | jmp ev_redraw |
159 | mov [sz_cont + 9], byte 0x11 |
166 | 160 | mcall 67, -1, -1, 286 - 25 + KEYB_SIZE, -1 |
|
167 | jmp update |
161 | jmp update |
168 | .not_keyb: |
162 | .not_keyb: |
169 | 163 | ||
170 | ; CALCULATE |
164 | ; CALCULATE |
171 | cmp ah, 19 |
165 | cmp ah, 19 |
172 | je calc |
166 | je calc |
173 | 167 | ||
174 | ; LIST |
168 | ; LIST |
175 | cmp ah, 0x60 |
169 | cmp ah, 0x60 |
176 | jl .not_list |
170 | jl .not_list |
177 | 171 | ||
178 | sub ah, 0x60 |
172 | sub ah, 0x60 |
179 | movzx ebx, ah |
173 | movzx ebx, ah |
180 | imul ebx, 512 |
174 | imul ebx, 512 |
181 | add ebx, history |
175 | add ebx, history |
182 | add ebx, 482 |
176 | add ebx, 482 |
183 | stdcall str_len, ebx |
177 | stdcall str_len, ebx |
184 | 178 | ||
185 | mov edx, exp |
179 | mov edx, exp |
186 | add edx, [edb1.size] |
180 | add edx, [edb1.size] |
187 | add edx, eax |
181 | add edx, eax |
188 | mov edi, exp |
182 | mov edi, exp |
189 | add edi, [edb1.pos] |
183 | add edi, [edb1.pos] |
190 | @@: |
184 | @@: |
191 | cmp edx, edi |
185 | cmp edx, edi |
192 | je @f |
186 | je @f |
193 | mov esi, edx |
187 | mov esi, edx |
194 | sub esi, eax |
188 | sub esi, eax |
195 | push eax |
189 | push eax |
196 | mov al, [esi] |
190 | mov al, [esi] |
197 | mov [edx], al |
191 | mov [edx], al |
198 | pop eax |
192 | pop eax |
199 | dec edx |
193 | dec edx |
200 | jmp @b |
194 | jmp @b |
201 | @@: |
195 | @@: |
202 | add [edb1.size], eax |
196 | add [edb1.size], eax |
203 | 197 | ||
204 | @@: |
198 | @@: |
205 | cmp eax, 0 |
199 | cmp eax, 0 |
206 | je @f |
200 | je @f |
207 | mov cl, [ebx] |
201 | mov cl, [ebx] |
208 | mov [edi], cl |
202 | mov [edi], cl |
209 | inc edi |
203 | inc edi |
210 | inc ebx |
204 | inc ebx |
211 | dec eax |
205 | dec eax |
212 | inc [edb1.pos] |
206 | inc [edb1.pos] |
213 | jmp @b |
207 | jmp @b |
214 | @@: |
208 | @@: |
215 | 209 | ||
216 | jmp .redraw |
210 | jmp .redraw |
217 | .not_list: |
211 | .not_list: |
218 | 212 | ||
219 | ; KEYBOARD |
213 | ; KEYBOARD |
220 | cmp ah, 10 |
214 | cmp ah, 10 |
221 | jl update |
215 | jl update |
222 | cmp ah, 50 |
216 | cmp ah, 50 |
223 | jg update |
217 | jg update |
224 | mov dh, ah |
218 | mov dh, ah |
225 | 219 | ||
226 | mov ebx, exp |
220 | mov ebx, exp |
227 | add ebx, [edb1.size] |
221 | add ebx, [edb1.size] |
228 | mov ecx, exp |
222 | mov ecx, exp |
229 | add ecx, [edb1.pos] |
223 | add ecx, [edb1.pos] |
230 | cmp dh, 30 |
224 | cmp dh, 30 |
231 | jl @f |
225 | jl @f |
232 | add ebx, 2 |
226 | add ebx, 2 |
233 | @@: |
227 | @@: |
234 | cmp ebx, ecx |
228 | cmp ebx, ecx |
235 | je @f |
229 | je @f |
236 | mov dl, [ebx - 1] |
230 | mov dl, [ebx - 1] |
237 | mov [ebx], dl |
231 | mov [ebx], dl |
238 | dec ebx |
232 | dec ebx |
239 | jmp @b |
233 | jmp @b |
240 | @@: |
234 | @@: |
241 | 235 | ||
242 | movzx eax, dh |
236 | movzx eax, dh |
243 | add eax, buttons |
237 | add eax, buttons |
244 | sub eax, 10 |
238 | sub eax, 10 |
245 | mov al, [eax] |
239 | mov al, [eax] |
246 | 240 | ||
247 | mov [ebx], al |
241 | mov [ebx], al |
248 | inc [edb1.size] |
242 | inc [edb1.size] |
249 | inc [edb1.pos] |
243 | inc [edb1.pos] |
250 | cmp dh, 30 |
244 | cmp dh, 30 |
251 | jl @f |
245 | jl @f |
252 | add [edb1.size], 2 |
246 | add [edb1.size], 2 |
253 | add [edb1.pos], 2 |
247 | add [edb1.pos], 2 |
254 | @@: |
248 | @@: |
255 | .redraw: |
249 | .redraw: |
256 | call draw_textbox |
250 | call draw_textbox |
257 | jmp update |
251 | jmp update |
258 | 252 | ||
259 | ;---------------------- |
253 | ;---------------------- |
260 | 254 | ||
261 | ev_mouse: |
255 | ev_mouse: |
262 | mcall 2 |
256 | mcall 2 |
263 | 257 | ||
264 | invoke editbox.mouse, edb1 |
258 | invoke editbox.mouse, edb1 |
265 | jmp update |
259 | jmp update |
266 | 260 | ||
267 | ;---------------------- |
261 | ;---------------------- |
268 | 262 | ||
269 | exit: |
263 | exit: |
270 | mcall -1 |
264 | mcall -1 |
271 | 265 | ||
272 | ;---------------------- |
266 | ;---------------------- |
273 | 267 | ||
274 | calc: |
268 | calc: |
275 | stdcall parse |
269 | stdcall parse |
276 | cmp [error_n], 0 |
270 | cmp [error_n], 0 |
277 | jne .error |
271 | jne .error |
278 | 272 | ||
279 | mov [ans.buffer], word "= " |
273 | mov [ans.buffer], word "= " |
280 | 274 | ||
281 | stdcall convert_to_str, eax, ans.buffer + 2 |
275 | stdcall convert_to_str, eax, ans.buffer + 2 |
282 | add eax, 2 |
276 | add eax, 2 |
283 | mov edi, eax |
277 | mov edi, eax |
284 | imul eax, 6 |
278 | imul eax, 6 |
285 | add eax, 9 |
279 | add eax, 9 |
286 | mov [ans.size], eax |
280 | mov [ans.size], eax |
287 | 281 | ||
288 | ; HISTORY |
282 | ; HISTORY |
289 | mov ecx, LIST_ITEM_COUNT - 1 |
283 | mov ecx, LIST_ITEM_COUNT - 1 |
290 | mov eax, history |
284 | mov eax, history |
291 | add eax, (LIST_ITEM_COUNT - 1) * 512 |
285 | add eax, (LIST_ITEM_COUNT - 1) * 512 |
292 | @@: |
286 | @@: |
293 | mov ebx, eax |
287 | mov ebx, eax |
294 | sub ebx, 512 |
288 | sub ebx, 512 |
295 | stdcall str_cpy, ebx, eax |
289 | stdcall str_cpy, ebx, eax |
296 | add ebx, 480 |
290 | add ebx, 480 |
297 | add eax, 480 |
291 | add eax, 480 |
298 | stdcall str_cpy, ebx, eax |
292 | stdcall str_cpy, ebx, eax |
299 | sub ebx, 480 |
293 | sub ebx, 480 |
300 | sub eax, 480 |
294 | sub eax, 480 |
301 | mov esi, [ebx + 508] |
295 | mov esi, [ebx + 508] |
302 | mov [eax + 508], esi |
296 | mov [eax + 508], esi |
303 | sub eax, 512 |
297 | sub eax, 512 |
304 | loop @b |
298 | loop @b |
305 | 299 | ||
306 | stdcall str_cpy, exp, history |
300 | stdcall str_cpy, exp, history |
307 | stdcall str_cpy, ans.buffer, history + 480 |
301 | stdcall str_cpy, ans.buffer, history + 480 |
308 | mov esi, [ans.size] |
302 | mov esi, [ans.size] |
309 | mov dword[history + 508], esi |
303 | mov dword[history + 508], esi |
310 | not [his_even] |
304 | not [his_even] |
311 | 305 | ||
312 | ; Check length |
306 | ; Check length |
313 | mov esi, 37 |
307 | mov esi, 37 |
314 | sub esi, edi |
308 | sub esi, edi |
315 | stdcall str_len, exp |
309 | stdcall str_len, exp |
316 | sub esi, eax |
310 | sub esi, eax |
317 | cmp esi, 0 |
311 | cmp esi, 0 |
318 | jg .redraw |
312 | jg .redraw |
319 | 313 | ||
320 | mov ebx, history |
314 | mov ebx, history |
321 | add ebx, eax |
315 | add ebx, eax |
322 | add ebx, esi |
316 | add ebx, esi |
323 | mov [ebx], dword ".." |
317 | mov [ebx], dword ".." |
324 | 318 | ||
325 | jmp .redraw |
319 | jmp .redraw |
326 | 320 | ||
327 | ; ERRORS |
321 | ; ERRORS |
328 | 322 | ||
329 | .error: |
323 | .error: |
330 | cmp [error_n], 1 |
324 | cmp [error_n], 1 |
331 | je .err_1 |
325 | je .err_1 |
332 | cmp [error_n], 4 |
326 | cmp [error_n], 4 |
333 | je .err_4 |
327 | je .err_4 |
334 | 328 | ||
335 | mov [ans.buffer + 0], dword "Expe" |
329 | mov [ans.buffer + 0], dword "Expe" |
336 | mov [ans.buffer + 4], dword "cted" |
330 | mov [ans.buffer + 4], dword "cted" |
337 | mov [ans.buffer + 8], dword " ')'" |
331 | mov [ans.buffer + 8], dword " ')'" |
338 | mov [ans.buffer + 12], byte 0 |
332 | mov [ans.buffer + 12], byte 0 |
339 | mov [ans.size], 81 |
333 | mov [ans.size], 81 |
340 | 334 | ||
341 | cmp [error_n], 2 |
335 | cmp [error_n], 2 |
342 | je .redraw |
336 | je .redraw |
343 | cmp [error_n], 3 |
337 | cmp [error_n], 3 |
344 | je .err_3 |
338 | je .err_3 |
345 | cmp [error_n], 5 |
339 | cmp [error_n], 5 |
346 | je .err_5 |
340 | je .err_5 |
347 | .err_1: |
341 | .err_1: |
348 | mov [ans.buffer + 0], dword "Div." |
342 | mov [ans.buffer + 0], dword "Div." |
349 | mov [ans.buffer + 4], dword " by " |
343 | mov [ans.buffer + 4], dword " by " |
350 | mov [ans.buffer + 8], byte "0" |
344 | mov [ans.buffer + 8], byte "0" |
351 | mov [ans.buffer + 9], byte 0 |
345 | mov [ans.buffer + 9], byte 0 |
352 | mov [ans.size], 63 |
346 | mov [ans.size], 63 |
353 | jmp .redraw |
347 | jmp .redraw |
354 | .err_4: |
348 | .err_4: |
355 | mov [ans.buffer + 0], dword "Inpu" |
349 | mov [ans.buffer + 0], dword "Inpu" |
356 | mov [ans.buffer + 4], dword "t er" |
350 | mov [ans.buffer + 4], dword "t er" |
357 | mov [ans.buffer + 8], dword "rror" |
351 | mov [ans.buffer + 8], dword "rror" |
358 | mov [ans.buffer + 12], byte 0 |
352 | mov [ans.buffer + 12], byte 0 |
359 | mov [ans.size], 81 |
353 | mov [ans.size], 81 |
360 | jmp .redraw |
354 | jmp .redraw |
361 | .err_3: |
355 | .err_3: |
362 | mov [ans.buffer + 10], byte "(" |
356 | mov [ans.buffer + 10], byte "(" |
363 | jmp .redraw |
357 | jmp .redraw |
364 | .err_5: |
358 | .err_5: |
365 | mov [ans.buffer + 10], byte "|" |
359 | mov [ans.buffer + 10], byte "|" |
366 | jmp .redraw |
360 | jmp .redraw |
367 | 361 | ||
368 | .redraw: |
362 | .redraw: |
369 | call draw_textbox |
363 | call draw_textbox |
370 | call draw_list |
364 | call draw_list |
371 | jmp update |
365 | jmp update |
372 | 366 | ||
373 | ;---------------------- |
367 | ;---------------------- |
374 | 368 | ||
375 | proc draw_button, x, y |
369 | proc draw_button, x, y |
376 | mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c] |
370 | mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c] |
377 | 371 | ||
378 | mov ebx, [x] |
372 | mov ebx, [x] |
379 | mov esi, [txt_size] |
373 | mov esi, [txt_size] |
380 | imul esi, 3 |
374 | imul esi, 3 |
381 | mov edi, 16 |
375 | mov edi, 16 |
382 | sub edi, esi |
376 | sub edi, esi |
383 | add ebx, edi |
377 | add ebx, edi |
384 | shl ebx, 16 |
378 | shl ebx, 16 |
385 | add ebx, [y] |
379 | add ebx, [y] |
386 | add ebx, 7 |
380 | add ebx, 7 |
387 | mcall 4, , [but_tc], [txt_id], [txt_size] |
381 | mcall 4, , [but_tc], [txt_id], [txt_size] |
388 | 382 | ||
389 | mov eax, [txt_size] |
383 | mov eax, [txt_size] |
390 | add [txt_id], eax |
384 | add [txt_id], eax |
391 | inc dword [but_id] |
385 | inc dword [but_id] |
392 | 386 | ||
393 | ret |
387 | ret |
394 | endp |
388 | endp |
395 | 389 | ||
396 | ;---------------------- |
390 | ;---------------------- |
397 | 391 | ||
398 | proc draw_textbox |
392 | proc draw_textbox |
399 | mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame] |
393 | mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame] |
400 | mov edx, [scn.gui_face] |
394 | mov edx, [scn.gui_face] |
401 | cmp [error_n], 0 |
395 | cmp [error_n], 0 |
402 | je @f |
396 | je @f |
403 | mov edx, 0xFFAAAA |
397 | mov edx, 0xFFAAAA |
404 | @@: |
398 | @@: |
405 | mcall 13, < 5, 318 - 50 - 25>, < 9, 21> |
399 | mcall 13, < 5, 318 - 50 - 25>, < 9, 21> |
406 | mcall , < 5, 318 - 50 - 25>, < 9, 1>, [scn.3d_face] |
400 | mcall , < 5, 318 - 50 - 25>, < 9, 1>, [scn.3d_face] |
407 | mcall , < 5, 1>, < 10, 20> |
401 | mcall , < 5, 1>, < 10, 20> |
408 | mcall , < 5, 318 - 50 - 25>, < 31, 1>, [scn.3d_light] |
402 | mcall , < 5, 318 - 50 - 25>, < 31, 1>, [scn.3d_light] |
409 | 403 | ||
410 | mov ebx, 328 - 16 - 50 - 25 |
404 | mov ebx, 328 - 16 - 50 - 25 |
411 | sub ebx, [ans.size] |
405 | sub ebx, [ans.size] |
412 | shl ebx, 16 |
406 | shl ebx, 16 |
413 | add ebx, 16 |
407 | add ebx, 16 |
414 | mov ecx, [scn.gui_intext] |
408 | mov ecx, [scn.gui_intext] |
415 | or ecx, 1 shl 31 |
409 | or ecx, 1 shl 31 |
416 | mcall 4, , , ans.buffer |
410 | mcall 4, , , ans.buffer |
417 | 411 | ||
418 | mov ecx, [scn.gui_text] |
412 | mov ecx, [scn.gui_text] |
419 | mcall , <310 - 50 - 25, 16>, , btn_clr, 1 |
413 | mcall , <310 - 50 - 25, 16>, , btn_clr, 1 |
420 | add ebx, 1 shl 16 |
414 | add ebx, 1 shl 16 |
421 | mcall |
415 | mcall |
422 | 416 | ||
423 | mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004 |
417 | mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004 |
424 | 418 | ||
425 | mcall 1, 4, 8, [scn.win_body] |
419 | mcall 1, 4, 8, [scn.win_body] |
426 | mcall , 323 - 50 - 25 |
420 | mcall , 323 - 50 - 25 |
427 | mcall , , 30, [scn.3d_light] |
421 | mcall , , 30, [scn.3d_light] |
428 | mcall , 4 |
422 | mcall , 4 |
429 | 423 | ||
430 | mov ebx, 318 - 16 - 50 - 25 |
424 | mov ebx, 318 - 16 - 50 - 25 |
431 | sub ebx, [ans.size] |
425 | sub ebx, [ans.size] |
432 | cmp ebx, 24 |
426 | cmp ebx, 24 |
433 | jg @f |
427 | jg @f |
434 | mov ebx, 24 |
428 | mov ebx, 24 |
435 | @@: |
429 | @@: |
436 | mov [edb1.width], ebx |
430 | mov [edb1.width], ebx |
437 | m2m [edb1.color], [scn.gui_face] |
431 | m2m [edb1.color], [scn.gui_face] |
438 | m2m [edb1.focus_border_color], [scn.gui_face] |
432 | m2m [edb1.focus_border_color], [scn.gui_face] |
439 | cmp [error_n], 0 |
433 | cmp [error_n], 0 |
440 | je @f |
434 | je @f |
441 | mov [edb1.color], 0xFFAAAA |
435 | mov [edb1.color], 0xFFAAAA |
442 | mov [edb1.focus_border_color], 0xFFAAAA |
436 | mov [edb1.focus_border_color], 0xFFAAAA |
443 | @@: |
437 | @@: |
444 | invoke editbox.draw, edb1 |
438 | invoke editbox.draw, edb1 |
445 | 439 | ||
446 | ret |
440 | ret |
447 | endp |
441 | endp |
448 | 442 | ||
449 | ;---------------------- |
443 | ;---------------------- |
450 | 444 | ||
451 | proc draw_keyb |
445 | proc draw_keyb |
452 | cmp [keyb], byte 0 |
446 | cmp [keyb], byte 0 |
453 | je @f |
447 | je @f |
454 | 448 | ||
455 | mov [txt_size], 1 |
449 | mov [txt_size], 1 |
456 | mov [but_id], 0x0000000A |
450 | mov [but_id], 0x0000000A |
457 | mov [txt_id], buttons |
451 | mov [txt_id], buttons |
458 | 452 | ||
459 | mov eax, [scn.win_face] |
453 | mov eax, [scn.win_face] |
460 | mov [but_c], eax |
454 | mov [but_c], eax |
461 | mov eax, [scn.win_text] |
455 | mov eax, [scn.win_text] |
462 | mov [but_tc], eax |
456 | mov [but_tc], eax |
463 | stdcall draw_button, 4 + 278 - 25, 42 - 25 - 8 |
457 | stdcall draw_button, 4 + 278 - 25, 42 - 25 - 8 |
464 | stdcall draw_button, 37 + 278 - 25, 42 - 25 - 8 |
458 | stdcall draw_button, 37 + 278 - 25, 42 - 25 - 8 |
465 | stdcall draw_button, 70 + 278 - 25, 42 - 25 - 8 |
459 | stdcall draw_button, 70 + 278 - 25, 42 - 25 - 8 |
466 | stdcall draw_button, 103 + 278 - 25, 42 - 25 - 8 |
460 | stdcall draw_button, 103 + 278 - 25, 42 - 25 - 8 |
467 | stdcall draw_button, 103 + 278 - 25, 66 - 25 - 8 |
461 | stdcall draw_button, 103 + 278 - 25, 66 - 25 - 8 |
468 | stdcall draw_button, 103 + 278 - 25, 90 - 25 - 8 |
462 | stdcall draw_button, 103 + 278 - 25, 90 - 25 - 8 |
469 | stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8 |
463 | stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8 |
470 | stdcall draw_button, 70 + 278 - 25, 139 - 25 - 8 |
464 | stdcall draw_button, 70 + 278 - 25, 139 - 25 - 8 |
471 | stdcall draw_button, 37 + 278 - 25, 139 - 25 - 8 |
465 | stdcall draw_button, 37 + 278 - 25, 139 - 25 - 8 |
472 | 466 | ||
473 | mov eax, [scn.btn_inface] |
467 | mov eax, [scn.btn_inface] |
474 | mov [but_c], eax |
468 | mov [but_c], eax |
475 | mov eax, [scn.btn_intext] |
469 | mov eax, [scn.btn_intext] |
476 | mov [but_tc], eax |
470 | mov [but_tc], eax |
477 | stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8 |
471 | stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8 |
478 | 472 | ||
479 | mov eax, [scn.btn_face] |
473 | mov eax, [scn.btn_face] |
480 | mov [but_c], eax |
474 | mov [but_c], eax |
481 | mov eax, [scn.btn_text] |
475 | mov eax, [scn.btn_text] |
482 | mov [but_tc], eax |
476 | mov [but_tc], eax |
483 | stdcall draw_button, 4 + 278 - 25, 66 - 25 - 8 |
477 | stdcall draw_button, 4 + 278 - 25, 66 - 25 - 8 |
484 | stdcall draw_button, 37 + 278 - 25, 66 - 25 - 8 |
478 | stdcall draw_button, 37 + 278 - 25, 66 - 25 - 8 |
485 | stdcall draw_button, 70 + 278 - 25, 66 - 25 - 8 |
479 | stdcall draw_button, 70 + 278 - 25, 66 - 25 - 8 |
486 | stdcall draw_button, 4 + 278 - 25, 90 - 25 - 8 |
480 | stdcall draw_button, 4 + 278 - 25, 90 - 25 - 8 |
487 | stdcall draw_button, 37 + 278 - 25, 90 - 25 - 8 |
481 | stdcall draw_button, 37 + 278 - 25, 90 - 25 - 8 |
488 | stdcall draw_button, 70 + 278 - 25, 90 - 25 - 8 |
482 | stdcall draw_button, 70 + 278 - 25, 90 - 25 - 8 |
489 | stdcall draw_button, 4 + 278 - 25, 114 - 25 - 8 |
483 | stdcall draw_button, 4 + 278 - 25, 114 - 25 - 8 |
490 | stdcall draw_button, 37 + 278 - 25, 114 - 25 - 8 |
484 | stdcall draw_button, 37 + 278 - 25, 114 - 25 - 8 |
491 | stdcall draw_button, 70 + 278 - 25, 114 - 25 - 8 |
485 | stdcall draw_button, 70 + 278 - 25, 114 - 25 - 8 |
492 | stdcall draw_button, 4 + 278 - 25, 139 - 25 - 8 |
486 | stdcall draw_button, 4 + 278 - 25, 139 - 25 - 8 |
493 | 487 | ||
494 | @@: |
488 | @@: |
495 | ret |
489 | ret |
496 | endp |
490 | endp |
497 | 491 | ||
498 | ;---------------------- |
492 | ;---------------------- |
499 | 493 | ||
500 | proc draw_list |
494 | proc draw_list |
501 | ; BACKGROUND |
495 | ; BACKGROUND |
502 | mov edi, LIST_ITEM_COUNT |
496 | mov edi, LIST_ITEM_COUNT |
503 | mov eax, 13 |
497 | mov eax, 13 |
504 | mov ebx, 4 shl 16 + 320 - 50 - 25 |
498 | mov ebx, 4 shl 16 + 320 - 50 - 25 |
505 | mov ecx, 37 shl 16 + LIST_ITEM_SIZE |
499 | mov ecx, 37 shl 16 + LIST_ITEM_SIZE |
506 | mov edx, LIST_ITEM_COLOR1 |
500 | mov edx, LIST_ITEM_COLOR1 |
507 | cmp [his_even], byte 0 |
501 | cmp [his_even], byte 0 |
508 | je @f |
502 | je @f |
509 | mov edx, LIST_ITEM_COLOR2 |
503 | mov edx, LIST_ITEM_COLOR2 |
510 | @@: |
504 | @@: |
511 | mcall |
505 | mcall |
512 | add ecx, LIST_ITEM_SIZE shl 16 |
506 | add ecx, LIST_ITEM_SIZE shl 16 |
513 | cmp edx, LIST_ITEM_COLOR1 |
507 | cmp edx, LIST_ITEM_COLOR1 |
514 | je .set_color_to_2 |
508 | je .set_color_to_2 |
515 | mov edx, LIST_ITEM_COLOR1 |
509 | mov edx, LIST_ITEM_COLOR1 |
516 | jmp .next |
510 | jmp .next |
517 | .set_color_to_2: |
511 | .set_color_to_2: |
518 | mov edx, LIST_ITEM_COLOR2 |
512 | mov edx, LIST_ITEM_COLOR2 |
519 | .next: |
513 | .next: |
520 | dec edi |
514 | dec edi |
521 | cmp edi, 0 |
515 | cmp edi, 0 |
522 | jne @b |
516 | jne @b |
523 | 517 | ||
524 | ; BUTTONS |
518 | ; BUTTONS |
525 | mov edi, LIST_ITEM_COUNT |
519 | mov edi, LIST_ITEM_COUNT |
526 | mov eax, 8 |
520 | mov eax, 8 |
527 | mov ebx, 4 shl 16 + 320 - 50 - 25 |
521 | mov ebx, 4 shl 16 + 320 - 50 - 25 |
528 | mov ecx, 37 shl 16 + LIST_ITEM_SIZE |
522 | mov ecx, 37 shl 16 + LIST_ITEM_SIZE |
529 | mov edx, 0x40000060 |
523 | mov edx, 0x40000060 |
530 | @@: |
524 | @@: |
531 | mcall |
525 | mcall |
532 | add ecx, LIST_ITEM_SIZE shl 16 |
526 | add ecx, LIST_ITEM_SIZE shl 16 |
533 | inc edx |
527 | inc edx |
534 | dec edi |
528 | dec edi |
535 | cmp edi, 0 |
529 | cmp edi, 0 |
536 | jne @b |
530 | jne @b |
537 | 531 | ||
538 | ; TEXT |
532 | ; TEXT |
539 | mov edi, LIST_ITEM_COUNT |
533 | mov edi, LIST_ITEM_COUNT |
540 | mov eax, 4 |
534 | mov eax, 4 |
541 | mov ebx, 8 shl 16 + 37 + LIST_ITEM_Y |
535 | mov ebx, 8 shl 16 + 37 + LIST_ITEM_Y |
542 | mov ecx, LIST_ITEM_TEXT1 |
536 | mov ecx, LIST_ITEM_TEXT1 |
543 | cmp [his_even], byte 0 |
537 | cmp [his_even], byte 0 |
544 | je @f |
538 | je @f |
545 | mov ecx, LIST_ITEM_TEXT2 |
539 | mov ecx, LIST_ITEM_TEXT2 |
546 | @@: |
540 | @@: |
547 | or ecx, 1 shl 31 |
541 | or ecx, 1 shl 31 |
548 | mov edx, history |
542 | mov edx, history |
549 | @@: |
543 | @@: |
550 | mcall |
544 | mcall |
551 | 545 | ||
552 | push ebx |
546 | push ebx |
553 | add ebx, (320 - 50 - 25) shl 16 |
547 | add ebx, (320 - 50 - 25) shl 16 |
554 | mov esi, [edx + 508] |
548 | mov esi, [edx + 508] |
555 | shl esi, 16 |
549 | shl esi, 16 |
556 | sub ebx, esi |
550 | sub ebx, esi |
557 | add edx, 480 |
551 | add edx, 480 |
558 | mcall |
552 | mcall |
559 | pop ebx |
553 | pop ebx |
560 | 554 | ||
561 | add edx, 32 |
555 | add edx, 32 |
562 | add ebx, LIST_ITEM_SIZE |
556 | add ebx, LIST_ITEM_SIZE |
563 | 557 | ||
564 | and ecx, 0xFFFFFF |
558 | and ecx, 0xFFFFFF |
565 | cmp ecx, LIST_ITEM_TEXT2 |
559 | cmp ecx, LIST_ITEM_TEXT2 |
566 | je .set_color_to_2_txt |
560 | je .set_color_to_2_txt |
567 | mov ecx, LIST_ITEM_TEXT2 |
561 | mov ecx, LIST_ITEM_TEXT2 |
568 | jmp .next_txt |
562 | jmp .next_txt |
569 | .set_color_to_2_txt: |
563 | .set_color_to_2_txt: |
570 | mov ecx, LIST_ITEM_TEXT1 |
564 | mov ecx, LIST_ITEM_TEXT1 |
571 | .next_txt: |
565 | .next_txt: |
572 | or ecx, 1 shl 31 |
566 | or ecx, 1 shl 31 |
573 | 567 | ||
574 | dec edi |
568 | dec edi |
575 | cmp edi, 0 |
569 | cmp edi, 0 |
576 | jne @b |
570 | jne @b |
577 | 571 | ||
578 | ret |
572 | ret |
579 | endp |
573 | endp |
580 | 574 | ||
581 | ;---------------------- |
575 | ;---------------------- |
582 | 576 | ||
583 | proc str_len uses ebx, str |
577 | proc str_len uses ebx, str |
584 | xor eax, eax |
578 | xor eax, eax |
585 | mov ebx, [str] |
579 | mov ebx, [str] |
586 | @@: |
580 | @@: |
587 | cmp [ebx], byte 0 |
581 | cmp [ebx], byte 0 |
588 | je @f |
582 | je @f |
589 | inc eax |
583 | inc eax |
590 | inc ebx |
584 | inc ebx |
591 | jmp @b |
585 | jmp @b |
592 | @@: |
586 | @@: |
593 | 587 | ||
594 | ret |
588 | ret |
595 | endp |
589 | endp |
596 | 590 | ||
597 | ;---------------------- |
591 | ;---------------------- |
598 | 592 | ||
599 | proc str_cpy uses eax ebx ecx, from, to |
593 | proc str_cpy uses eax ebx ecx, from, to |
600 | mov eax, [from] |
594 | mov eax, [from] |
601 | mov ebx, [to] |
595 | mov ebx, [to] |
602 | @@: |
596 | @@: |
603 | cmp [eax], byte 0 |
597 | cmp [eax], byte 0 |
604 | je @f |
598 | je @f |
605 | mov cl, [eax] |
599 | mov cl, [eax] |
606 | mov [ebx], cl |
600 | mov [ebx], cl |
607 | inc eax |
601 | inc eax |
608 | inc ebx |
602 | inc ebx |
609 | jmp @b |
603 | jmp @b |
610 | @@: |
604 | @@: |
611 | mov [ebx], byte 0 |
605 | mov [ebx], byte 0 |
612 | ret |
606 | ret |
613 | endp |
607 | endp |
614 | 608 | ||
615 | ;---------------------- |
609 | ;---------------------- |
616 | 610 | ||
617 | dataend: |
611 | dataend: |
618 | 612 | ||
619 | ;=============================== |
613 | ;=============================== |
620 | 614 | ||
621 | rb 2048 |
615 | rb 2048 |
622 | stacktop: |
616 | stacktop: |
623 | 617 | ||
624 | exp rb 480 |
618 | exp rb 480 |
625 | exp_pos rd 1 |
619 | exp_pos rd 1 |
626 | exp_lvl rd 1 |
620 | exp_lvl rd 1 |
627 | abs_lvl rd 1 |
621 | abs_lvl rd 1 |
628 | group rd 1 |
622 | group rd 1 |
629 | 623 | ||
630 | ans.buffer:rb 480 |
624 | ans.buffer:rb 480 |
631 | ans.size rd 1 |
625 | ans.size rd 1 |
632 | error_n rd 1 |
626 | error_n rd 1 |
633 | - | ||
634 | scn sys_colors_new |
627 | |
635 | timer rd 1 |
628 | timer rd 1 |
636 | but_id rd 1 |
629 | but_id rd 1 |
637 | but_c rd 1 |
630 | but_c rd 1 |
638 | but_tc rd 1 |
631 | but_tc rd 1 |
639 | txt_id rd 1 |
632 | txt_id rd 1 |
640 | txt_size rd 1 |
633 | txt_size rd 1 |
641 | keyb rb 1 |
634 | keyb rb 1 |
642 | 635 | ||
643 | his_even rb 1 |
636 | his_even rb 1 |
644 | history rb 512 * LIST_ITEM_COUNT |
637 | history rb 512 * LIST_ITEM_COUNT |
645 | rb 512 |
638 | rb 512 |
- | 639 | ||
- | 640 | struc system_colors_internal { |
|
- | 641 | .3d_face dd 0xCED0D0 |
|
- | 642 | .3d_dark dd 0xD7D7D7 |
|
- | 643 | .3d_light dd 0xFEFEFE |
|
- | 644 | .win_title dd 0x2F2F2F |
|
- | 645 | .win_body dd 0xE4DFE1 |
|
- | 646 | .btn_face dd 0xEFEBEF |
|
- | 647 | .btn_text dd 0x373C42 |
|
- | 648 | .win_text dd 0x000000 |
|
- | 649 | .panel_frame dd 0x94AECE |
|
- | 650 | .win_face dd 0xE1E1E1 |
|
- | 651 | .win_inface dd 0xE1E1E1 |
|
- | 652 | .win_frame dd 0x204962 |
|
- | 653 | .btn_inface dd 0xEFEBEF |
|
- | 654 | .btn_intext dd 0xD0D9E8 |
|
- | 655 | .btn_fctext dd 0x2D3135 |
|
- | 656 | .gui_shadow dd 0xFFFFFF |
|
- | 657 | .gui_face dd 0xFAF8FA |
|
- | 658 | .gui_inface dd 0xF6F3F6 |
|
- | 659 | .gui_fcface dd 0xFAF8FA |
|
- | 660 | .gui_frame dd 0x7698C0 |
|
- | 661 | .gui_text dd 0x373C42 |
|
- | 662 | .gui_intext dd 0x5F5F5F |
|
- | 663 | .gui_select dd 0xC7C9C9 |
|
- | 664 | } |
|
- | 665 | ||
- | 666 | scn system_colors_internal |
|
646 | 667 | ||
647 | memory:9,>305>310>>>>>>>>>>4,>[y],>[x],>-17,>100,>100,> |
668 | memory:9,>305>310>>>>>>>>>>4,>[y],>[x],>-17,>100,>100,> |