Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
386 | mikedld | 1 | ;============================================================================= |
2 | ; |
||
3 | ; MGB - Menuet Graphics Benchmark 0.3 |
||
4 | ; Compile with FASM |
||
5 | ; |
||
6 | ;============================================================================= |
||
7 | ; |
||
8 | ; Original author and copyrights holder: |
||
9 | ; Mikhail Lisovin a.k.a. Mihasik |
||
10 | ; lisovin@26.ru |
||
11 | ; |
||
12 | ; Disassembled with IDA 5.0.0.879: |
||
13 | ; http://www.datarescue.com/ |
||
14 | ; With use of 'ida.int' and 'kloader.ldw': |
||
15 | ; Eugene Grechnikov a.k.a. diamond |
||
16 | ; diamondz@land.ru |
||
17 | ; http://diamondz.land.ru/ |
||
18 | ; |
||
19 | ; Modified for version 0.3: |
||
20 | ; Mike Semenako a.k.a mike.dld |
||
21 | ; mike.dld@gmail.com |
||
22 | ; http://www.mikedld.com/ |
||
23 | ; |
||
24 | ;============================================================================= |
||
25 | |||
26 | org 0x0 |
||
27 | use32 |
||
28 | |||
29 | db 'MENUET01' |
||
30 | dd 1 |
||
31 | dd start |
||
32 | dd APP_MEM_END |
||
33 | dd 0x200000 |
||
34 | dd 0x07FFF0 |
||
35 | dd 0 |
||
36 | dd 0 |
||
37 | |||
38 | include 'proc32.inc' |
||
39 | |||
40 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
41 | |||
42 | |||
43 | proc start ; DATA XREF: seg000:off_Co |
||
44 | |||
45 | ; FUNCTION CHUNK AT 000000CF SIZE 00000147 BYTES |
||
46 | |||
47 | mov ecx, -1 |
||
48 | call subGetThreadInfo |
||
49 | mov edx, [dwMainPID] |
||
50 | mov ecx, eax |
||
51 | |||
52 | loc_36: ; CODE XREF: start+20j |
||
53 | call subGetThreadInfo |
||
54 | |||
55 | loc_3B: |
||
56 | cmp edx, [dwMainPID] |
||
57 | jz loc_46 |
||
58 | dec ecx |
||
59 | jnz loc_36 |
||
60 | |||
61 | loc_46: ; CODE XREF: start+1Dj |
||
62 | mov [dwMainWndSlot], ecx |
||
63 | |||
64 | locRedrawEvent: ; CODE XREF: start+3Cj |
||
65 | call subDrawMainWindow |
||
66 | |||
67 | locWaitForEvent: ; CODE XREF: start+6Cj start:loc_B3j ... |
||
68 | mov eax, 23 |
||
69 | mov ebx, 20 |
||
70 | int 0x40 ; Kolibri - WAIT FOR EVENT WITH TIMEOUT |
||
71 | ; ebx = timeout |
||
72 | ; Return: eax = event |
||
73 | cmp eax, 1 |
||
74 | jz locRedrawEvent |
||
75 | |||
76 | loc_62: |
||
77 | cmp eax, 2 |
||
78 | jz locKeyEvent |
||
79 | cmp eax, 3 |
||
80 | |||
81 | loc_6A: |
||
82 | jz locButtonEvent |
||
83 | |||
84 | loc_70: |
||
85 | ;btr word[wFlags], 2 |
||
86 | ;jnb loc_87 |
||
87 | ;mov eax, 58 |
||
88 | ;mov ebx, stFileInfoBlock |
||
89 | ;int 0x40 ; Kolibri - ACCESS TO FILE SYSTEM (obsolete) |
||
90 | ; ebx -> fileinfo struc |
||
91 | |||
92 | loc_87: ; CODE XREF: start+55j |
||
93 | btr word[wFlags], 1 |
||
94 | jnb locWaitForEvent |
||
95 | call subDelay100ms |
||
96 | mov eax, 12h |
||
97 | mov ebx, 3 |
||
98 | mov ecx, [dwMainWndSlot] |
||
99 | int 0x40 ; Kolibri - ACTIVATE WINDOW |
||
100 | ; ecx = slot |
||
101 | call subDelay100ms |
||
102 | |||
103 | loc_AE: |
||
104 | call subDrawBars |
||
105 | |||
106 | loc_B3: |
||
107 | jmp locWaitForEvent |
||
108 | endp |
||
109 | |||
110 | |||
111 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
112 | |||
113 | |||
114 | proc subGetThreadInfo ; CODE XREF: start+5p start:loc_36p |
||
115 | mov eax, 9 |
||
116 | mov ebx, APP_MEM_END |
||
117 | int 0x40 ; Kolibri - GET THREAD INFO |
||
118 | ; ebx -> buffer, ecx = slot (-1 for self) |
||
119 | ; Return: eax = maximum slot |
||
120 | retn |
||
121 | endp |
||
122 | |||
123 | |||
124 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
125 | |||
126 | |||
127 | proc subDelay100ms ; CODE XREF: start+6Ep start+85p |
||
128 | mov eax, 5 |
||
129 | mov ebx, 0Ah |
||
130 | int 0x40 ; Kolibri - DELAY |
||
131 | ; ebx = time (in 1/100th of second) |
||
132 | retn |
||
133 | endp |
||
134 | |||
135 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
136 | ; START OF FUNCTION CHUNK FOR start |
||
137 | |||
138 | locKeyEvent: ; CODE XREF: start+41j |
||
139 | mov eax, 2 |
||
140 | int 0x40 ; Kolibri - GET KEY CODE |
||
141 | ; Return: ah = keycode |
||
142 | cmp ah, 't' |
||
143 | jz locActionTest |
||
144 | cmp ah, 'c' |
||
145 | jz locActionComment |
||
146 | cmp ah, 'p' |
||
147 | jz locActionPattern |
||
148 | cmp ah, 'o' |
||
149 | jz locActionOpen |
||
150 | cmp ah, 's' |
||
151 | jz locActionSave |
||
152 | jmp locWaitForEvent |
||
153 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
154 | |||
155 | locButtonEvent: ; CODE XREF: start:loc_6Aj |
||
156 | mov eax, 11h |
||
157 | int 0x40 ; Kolibri - GET PRESSED BUTTON |
||
158 | ; Return: ah = button ID |
||
159 | cmp ah, 1 |
||
160 | jnz locNotClose |
||
161 | mov eax, -1 |
||
162 | int 0x40 ; Kolibri - FINISH EXECUTION |
||
163 | |||
164 | locNotClose: ; CODE XREF: start+E6j |
||
165 | cmp ah, 2 |
||
166 | jnz locNotTest |
||
167 | |||
168 | locActionTest: ; CODE XREF: start+B5j |
||
169 | bts [wFlags], 0 |
||
170 | jb locWaitForEvent |
||
171 | mov eax, 5 |
||
172 | mov ebx, 50 |
||
173 | int 0x40 ; Kolibri - DELAY |
||
174 | ; ebx = time (in 1/100th of second) |
||
175 | |||
176 | loc_132: |
||
177 | mov eax, 51 |
||
178 | mov ebx, 1 |
||
179 | mov ecx, subTestWndProc |
||
180 | mov edx, 0x17FFF0 |
||
181 | int 0x40 ; Kolibri - CREATE THREAD |
||
182 | ; ebx = 1 - unique subfunction |
||
183 | ; ecx = starting eip |
||
184 | ; edx = starting esp |
||
185 | jmp locWaitForEvent |
||
186 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
187 | |||
188 | locNotTest: ; CODE XREF: start+F2j |
||
189 | cmp ah, 3 |
||
190 | jnz locNotComment |
||
191 | |||
192 | locActionComment: ; CODE XREF: start+BAj |
||
193 | bts [wFlags], 0 |
||
194 | jb locWaitForEvent |
||
195 | mov [dwBufferPtr], aComment1 ; "Current "... |
||
196 | mov [dwEditLabel], aComment ; "Comment" |
||
197 | mov [dwEditLabelLen], 7 |
||
198 | call subCreateOpenSaveDlg |
||
199 | jmp locWaitForEvent |
||
200 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
201 | |||
202 | locNotComment: ; CODE XREF: start+12Cj |
||
203 | cmp ah, 4 |
||
204 | jnz locNotPattern |
||
205 | |||
206 | locActionPattern: ; CODE XREF: start+BFj |
||
207 | call subSavePattern |
||
208 | call subDrawBars |
||
209 | jmp locWaitForEvent |
||
210 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
211 | |||
212 | locNotPattern: ; CODE XREF: start+167j |
||
213 | cmp ah, 5 |
||
214 | jnz locNotOpen |
||
215 | |||
216 | locActionOpen: ; CODE XREF: start+C8j |
||
217 | bts [wFlags], 0 |
||
218 | jb locWaitForEvent |
||
219 | mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... |
||
220 | mov [dwEditLabel], aOpenFile ; "Open file" |
||
221 | mov [dwEditLabelLen], 9 |
||
222 | call subCreateOpenSaveDlg |
||
223 | jmp locWaitForEvent |
||
224 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
225 | |||
226 | locNotOpen: ; CODE XREF: start+17Bj |
||
227 | cmp ah, 6 |
||
228 | jnz locWaitForEvent |
||
229 | |||
230 | locActionSave: ; CODE XREF: start+D1j |
||
231 | bts [wFlags], 0 |
||
232 | jb locWaitForEvent |
||
233 | mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... |
||
234 | mov [dwEditLabel], aSaveAs ; "Save as..." |
||
235 | mov [dwEditLabelLen], 0Ah |
||
236 | call subCreateOpenSaveDlg |
||
237 | jmp locWaitForEvent |
||
238 | ; END OF FUNCTION CHUNK FOR start |
||
239 | |||
240 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
241 | |||
242 | |||
243 | proc subCreateOpenSaveDlg ; CODE XREF: start+15Ap start+1A9p ... |
||
244 | mov eax, 51 |
||
245 | mov ebx, 1 |
||
246 | mov ecx, subOpenSaveDlgProc |
||
247 | mov edx, 0x19FFF0 |
||
248 | int 0x40 ; Kolibri - CREATE THREAD |
||
249 | ; ebx = 1 - unique subfunction |
||
250 | ; ecx = starting eip |
||
251 | ; edx = starting esp |
||
252 | retn |
||
253 | endp |
||
254 | |||
255 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
256 | |||
257 | subTestWndProc: ; DATA XREF: start+118o |
||
258 | |||
259 | mov esi,results_table+8 |
||
260 | .next_test: call subInitTestTimer |
||
261 | |||
262 | align 4 |
||
263 | @@: push esi |
||
264 | call dword[esi] |
||
265 | pop esi |
||
266 | call subIfTimeElapsed |
||
267 | jb @b |
||
268 | mov [esi-8],edi |
||
269 | |||
270 | add esi,TEST_REC_SIZE |
||
271 | cmp dword[esi],0 |
||
272 | jnz .next_test |
||
273 | macro unused { |
||
274 | call subInitTestTimer |
||
275 | |||
276 | locDrawNextWindow: ; CODE XREF: seg000:00000241j |
||
277 | mov ecx, 4F0190h |
||
278 | call testDrawWindow |
||
279 | call subIfTimeElapsed |
||
280 | jb locDrawNextWindow |
||
281 | mov [results_table+TEST_REC_SIZE*0], edi |
||
282 | call subInitTestTimer |
||
283 | |||
284 | locDrawNextBar: ; CODE XREF: seg000:00000269j |
||
285 | mov eax, 0Dh |
||
286 | mov ebx, 0A0064h |
||
287 | mov ecx, 1E00FAh |
||
288 | mov edx, 6A73D0h |
||
289 | int 0x40 ; Kolibri - DRAW RECTANGLE |
||
290 | ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] |
||
291 | ; edx = 0xRRGGBB or 0x80RRGGBB for gradient |
||
292 | call subIfTimeElapsed |
||
293 | jb locDrawNextBar |
||
294 | mov [results_table+TEST_REC_SIZE*1], edi |
||
295 | call subInitTestTimer |
||
296 | |||
297 | locDrawNextLine: ; CODE XREF: seg000:00000291j |
||
298 | mov eax, 38 |
||
299 | mov ebx, 8C008Ch |
||
300 | mov ecx, 1E017Ch |
||
301 | mov edx, 1090207Fh |
||
302 | int 0x40 ; Kolibri - DRAW LINE |
||
303 | ; ebx = [xstart]*65536+[xend], ecx = [ystart]*65536+[yend] |
||
304 | ; edx = 0x00RRGGBB - color or 0x01****** - inversed line |
||
305 | call subIfTimeElapsed |
||
306 | jb locDrawNextLine |
||
307 | mov [results_table+TEST_REC_SIZE*2], edi |
||
308 | call subInitTestTimer |
||
309 | |||
310 | locDrawNextText1: ; CODE XREF: seg000:000002BEj |
||
311 | mov eax, 4 |
||
312 | mov ebx, 0A012Ch |
||
313 | mov ecx, 0AA66h |
||
314 | mov edx, aTestText ; "This is a 34-charachters test text" |
||
315 | mov esi, 34 |
||
316 | int 0x40 ; Kolibri - DRAW STRING |
||
317 | ; ebx = [xstart]*65536+[ystart] |
||
318 | ; ecx = 0xX0RRGGBB, edx -> string |
||
319 | call subIfTimeElapsed |
||
320 | jb locDrawNextText1 |
||
321 | mov [results_table+TEST_REC_SIZE*3], edi |
||
322 | call subInitTestTimer |
||
323 | |||
324 | locDrawNextText2: ; CODE XREF: seg000:000002EBj |
||
325 | mov eax, 4 |
||
326 | mov ebx, 0A015Eh |
||
327 | mov ecx, 10E7B850h |
||
328 | mov edx, aTestText ; "This is a 34-charachters test text" |
||
329 | mov esi, 34 |
||
330 | int 0x40 ; Kolibri - DRAW STRING |
||
331 | ; ebx = [xstart]*65536+[ystart] |
||
332 | ; ecx = 0xX0RRGGBB, edx -> string |
||
333 | call subIfTimeElapsed |
||
334 | jb locDrawNextText2 |
||
335 | mov [results_table+TEST_REC_SIZE*4], edi |
||
336 | call subInitTestTimer |
||
337 | |||
338 | locDrawNextNumber: ; CODE XREF: seg000:00000318j |
||
339 | mov eax, 47 |
||
340 | mov ebx, 80000h |
||
341 | mov ecx, 12345678 |
||
342 | mov edx, 140172h |
||
343 | mov esi, 0E0B27Bh |
||
344 | int 0x40 ; Kolibri - DRAW NUMBER |
||
345 | ; bl = 0/1 - ecx is number/pointer |
||
346 | ; bh = 0/1/2 - dec/hex/bin |
||
347 | ; highword(ebx) = number of digits |
||
348 | ; ecx = number/pointer |
||
349 | ; edx = [x]*65536+[y] |
||
350 | ; esi = 0xX0RRGGBB |
||
351 | call subIfTimeElapsed |
||
352 | jb locDrawNextNumber |
||
353 | mov [results_table+TEST_REC_SIZE*5], edi |
||
354 | call subInitTestTimer |
||
355 | |||
356 | locDrawNextPixel: ; CODE XREF: seg000:00000340j |
||
357 | mov eax, 1 |
||
358 | mov ebx, 100 |
||
359 | mov ecx, 100 |
||
360 | mov edx, 0FFFFFFh |
||
361 | int 0x40 ; Kolibri - PUT PIXEL |
||
362 | ; ebx = x, ecx = y, edx = color |
||
363 | call subIfTimeElapsed |
||
364 | jb locDrawNextPixel |
||
365 | mov [results_table+TEST_REC_SIZE*6], edi |
||
366 | } |
||
367 | bts word[wFlags], 1 |
||
368 | btr word[wFlags], 0 |
||
369 | mov eax, -1 |
||
370 | int 0x40 ; Kolibri - FINISH EXECUTION |
||
371 | |||
372 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
373 | |||
374 | |||
375 | proc subInitTestTimer ; CODE XREF: seg000:subTestWndProcp |
||
376 | ; seg000:00000249p ... |
||
377 | xor edi, edi |
||
378 | mov eax, 26 |
||
379 | mov ebx, 9 |
||
380 | int 0x40 ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER |
||
381 | ; Return: eax = time counter |
||
382 | inc eax |
||
383 | mov ecx, eax |
||
384 | add eax, 100 |
||
385 | mov [dwTestEndTime], eax |
||
386 | |||
387 | locWait10ms: ; CODE XREF: subInitTestTimer+22j |
||
388 | mov eax, 26 |
||
389 | int 0x40 ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER |
||
390 | ; Return: eax = time counter |
||
391 | cmp eax, ecx |
||
392 | jb locWait10ms |
||
393 | retn |
||
394 | endp |
||
395 | |||
396 | |||
397 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
398 | |||
399 | |||
400 | proc subIfTimeElapsed ; CODE XREF: seg000:0000023Cp |
||
401 | ; seg000:00000264p ... |
||
402 | inc edi |
||
403 | mov eax, 26 |
||
404 | mov ebx, 9 |
||
405 | int 0x40 ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER |
||
406 | ; Return: eax = time counter |
||
407 | cmp eax, [dwTestEndTime] |
||
408 | retn |
||
409 | endp |
||
410 | |||
411 | |||
412 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
413 | |||
414 | |||
415 | proc subSavePattern ; CODE XREF: start:locActionPatternp |
||
416 | ; mov esi, dwDrawWindowTime |
||
417 | ; mov edi, dwDrawWindowTime2 |
||
418 | ; mov ecx, 18 |
||
419 | ; cld |
||
420 | ; rep movsd |
||
421 | mov esi,results_table |
||
422 | cld |
||
423 | @@: lodsd |
||
424 | mov [esi],eax |
||
425 | add esi,TEST_REC_SIZE-4 |
||
426 | cmp dword[esi+TEST_REC_SIZE-4],0 |
||
427 | jne @b |
||
428 | mov esi,aComment1 |
||
429 | mov edi,aComment2 |
||
430 | mov ecx,44/4 |
||
431 | rep movsd |
||
432 | retn |
||
433 | endp |
||
434 | |||
435 | |||
436 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
437 | |||
438 | |||
439 | proc subDrawMainWindow ; CODE XREF: start:locRedrawEventp |
||
440 | mov eax, 12 |
||
441 | mov ebx, 1 |
||
442 | int 0x40 ; Kolibri - BEGIN WINDOW REDRAW |
||
443 | mov eax,48 |
||
444 | mov ebx,4 |
||
445 | int 0x40 |
||
446 | mov ebx, 100*65536+72*5+14;640145h |
||
447 | mov ecx, 80*65536+TESTS_NUM*LINE_HEIGHT+15+20+35 |
||
448 | add cx, ax |
||
449 | mov edx, 33000000h |
||
450 | mov edi, aCaption |
||
451 | xor eax, eax |
||
452 | int 0x40 |
||
453 | mov eax, 8 |
||
454 | mov ebx, 050036h+12 |
||
455 | mov ecx, 5*65536+20 |
||
456 | mov edx, 2 |
||
457 | mov esi, 0x00007F7F;702050h |
||
458 | |||
459 | locDrawButtonsLoop: ; CODE XREF: subDrawMainWindow+3Bj |
||
460 | int 0x40 ; Kolibri - DEFINE/DELETE BUTTON |
||
461 | ; ebx = [xstart]*65536+[xsize] |
||
462 | ; ecx = [ystart]*65536+[ysize] |
||
463 | ; edx = 0xXYnnnnnn, esi = color |
||
464 | add ebx, 72*65536 |
||
465 | inc edx |
||
466 | cmp edx, 7 |
||
467 | jb locDrawButtonsLoop |
||
468 | |||
469 | mov ecx,31 |
||
470 | mov edx,0x00007F7F |
||
471 | mov esi,(72*5)/2 |
||
472 | call drawSeparator |
||
473 | |||
474 | mov eax, 4 |
||
475 | mov ebx, 27*65536+12 |
||
476 | mov ecx, 0x80DDEEFF |
||
477 | mov edx, aButtonsText ; "Test Comment+ Pattern+ Open "... |
||
478 | int 0x40 ; Kolibri - DRAW STRING |
||
479 | ; ebx = [xstart]*65536+[ystart] |
||
480 | ; ecx = 0xX0RRGGBB, edx -> string |
||
481 | call subDrawBars |
||
482 | |||
483 | mov ecx,TESTS_NUM*LINE_HEIGHT+15+21 |
||
484 | mov edx,0x00007F7F |
||
485 | mov esi,(72*5)/2 |
||
486 | call drawSeparator |
||
487 | |||
488 | mov eax, 12 |
||
489 | mov ebx, 2 |
||
490 | int 0x40 ; Kolibri - END WINDOW REDRAW |
||
491 | retn |
||
492 | endp |
||
493 | |||
494 | proc drawSeparator |
||
495 | mov eax,1 |
||
496 | mov ebx,3 |
||
497 | @@: int 0x40 |
||
498 | add ebx,2 |
||
499 | dec esi |
||
500 | jnz @b |
||
501 | retn |
||
502 | endp |
||
503 | |||
504 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
505 | |||
506 | |||
507 | proc testDrawWindow |
||
508 | xor eax, eax |
||
509 | mov ebx, 640145h |
||
510 | mov ecx, 4F0190h |
||
511 | mov edx, 3000000h |
||
512 | int 0x40 |
||
513 | retn |
||
514 | endp |
||
515 | |||
516 | proc testDrawBar |
||
517 | mov eax, 13 |
||
518 | mov ebx, 0A0064h |
||
519 | mov ecx, 1E00FAh |
||
520 | mov edx, 6A73D0h |
||
521 | int 0x40 |
||
522 | retn |
||
523 | endp |
||
524 | |||
525 | proc testDrawPicture |
||
526 | mov eax, 7 |
||
527 | mov ebx, 0 |
||
528 | mov ecx, 90*65536+123 |
||
529 | mov edx, 15*65536+33 |
||
530 | int 0x40 |
||
531 | retn |
||
532 | endp |
||
533 | |||
534 | proc testDrawVertLine |
||
535 | mov eax, 38 |
||
536 | mov ebx, 300*65536+300 ;8C008Ch |
||
537 | mov ecx, 30*65536+380 ;1E017Ch |
||
538 | mov edx, 1090207Fh |
||
539 | int 0x40 |
||
540 | retn |
||
541 | endp |
||
542 | |||
543 | proc testDrawHorzLine |
||
544 | mov eax, 38 |
||
545 | mov ebx, 30*65536+300 ;20008Ch |
||
546 | mov ecx, 380*65536+380 ;17C017Ch |
||
547 | mov edx, 1090207Fh |
||
548 | int 0x40 |
||
549 | retn |
||
550 | endp |
||
551 | |||
552 | proc testDrawFreeLine |
||
553 | mov eax, 38 |
||
554 | mov ebx, 30*65536+300 ;20008Ch |
||
555 | mov ecx, 380*65536+30 ;17C001Eh |
||
556 | mov edx, 1090207Fh |
||
557 | int 0x40 |
||
558 | retn |
||
559 | endp |
||
560 | |||
561 | proc testDrawText1 |
||
562 | mov eax, 4 |
||
563 | mov ebx, 0C012Ch |
||
564 | mov ecx, 0AA66h |
||
565 | mov edx, aTestText |
||
566 | mov esi, 34 |
||
567 | int 0x40 |
||
568 | retn |
||
569 | endp |
||
570 | |||
571 | proc testDrawText2 |
||
572 | mov eax, 4 |
||
573 | mov ebx, 1B013Bh |
||
574 | mov ecx, 10E7B850h |
||
575 | mov edx, aTestText |
||
576 | mov esi, 34 |
||
577 | int 0x40 |
||
578 | retn |
||
579 | endp |
||
580 | |||
581 | proc testDrawNumber |
||
582 | mov eax, 47 |
||
583 | mov ebx, 80000h |
||
584 | mov ecx, 12345678 |
||
585 | mov edx, 2A014Ah |
||
586 | mov esi, 0E0B27Bh |
||
587 | int 0x40 |
||
588 | retn |
||
589 | endp |
||
590 | |||
591 | proc testDrawPixel |
||
592 | mov eax, 1 |
||
593 | mov ebx, 100 |
||
594 | mov ecx, 100 |
||
595 | mov edx, 0FFFFFFh |
||
596 | int 0x40 |
||
597 | retn |
||
598 | endp |
||
599 | |||
600 | |||
601 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
602 | |||
603 | |||
604 | proc subDrawBars ; CODE XREF: start:loc_AEp start+16Ep ... |
||
605 | mov edi,results_table |
||
606 | mov ebx,30+7 |
||
607 | .next_result: cmp dword[edi+TEST_REC_SIZE-4],0 |
||
608 | je .exit |
||
609 | |||
610 | push ebx |
||
611 | mov eax,13 |
||
612 | movzx ecx,bx |
||
613 | add ecx,-2 |
||
614 | shl ecx,16 |
||
615 | mov cx,LINE_HEIGHT |
||
616 | mov ebx,0*65536+72*5+5 |
||
617 | xor edx,edx |
||
618 | int 0x40 |
||
619 | pop ebx |
||
620 | |||
621 | and ebx,0x0000FFFF |
||
622 | or ebx,5*65536 |
||
623 | mov edx,[edi+TEST_REC_SIZE-4] |
||
624 | mov ecx,0x8000CCCC ; 0x00E7E05A |
||
625 | mov eax,4 |
||
626 | int 0x40 |
||
627 | |||
628 | push '=' 0x00FFFF00 0x00FFFF7F 0x00FFFF7F |
||
629 | mov eax,[edi+0] |
||
630 | cmp eax,[edi+4] |
||
631 | je @f |
||
632 | jb .lp1 |
||
633 | mov dword[esp+0],0x007FFF7F |
||
634 | mov dword[esp+4],0x00FF7F7F |
||
635 | mov dword[esp+8],0x0000FF00 |
||
636 | mov byte[esp+12],'>' |
||
637 | .lp1: ja @f |
||
638 | mov dword[esp+0],0x00FF7F7F |
||
639 | mov dword[esp+4],0x007FFF7F |
||
640 | mov dword[esp+8],0x00FF0000 |
||
641 | mov byte[esp+12],'<' |
||
642 | @@: |
||
643 | pop ecx |
||
644 | call int2str |
||
645 | add ebx,(72*5-6*8*2-6-10-5)*65536 ; 196 |
||
646 | mov edx,APP_MEM_END |
||
647 | mov esi,8 |
||
648 | mov eax,4 |
||
649 | int 0x40 |
||
650 | |||
651 | pop ecx |
||
652 | mov eax,[edi+4] |
||
653 | call int2str |
||
654 | add ebx,(6*8+6+10)*65536 |
||
655 | mov eax,4 |
||
656 | int 0x40 |
||
657 | |||
658 | pop ecx |
||
659 | add ebx,(-6-5)*65536 |
||
660 | mov edx,esp |
||
661 | mov esi,1 |
||
662 | int 0x40 |
||
663 | add esp,4 |
||
664 | |||
665 | add edi,TEST_REC_SIZE |
||
666 | add bx,LINE_HEIGHT |
||
667 | jmp .next_result |
||
668 | .exit: |
||
669 | |||
670 | mov eax, 13 |
||
671 | mov ebx, 0*65536+72*5+5 |
||
672 | mov ecx, (TESTS_NUM*LINE_HEIGHT+15+25)*65536+26 |
||
673 | xor edx, edx |
||
674 | int 0x40 |
||
675 | |||
676 | mov eax, 4 |
||
677 | mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27) |
||
678 | mov ecx, 0x8000CCCC |
||
679 | mov edx, aLeft |
||
680 | int 0x40 ; Kolibri - DRAW STRING |
||
681 | |||
682 | add ebx, (6*10)*65536 |
||
683 | mov ecx, 0x00FFFF00 |
||
684 | mov edx, aComment1 |
||
685 | mov esi, 42 |
||
686 | int 0x40 ; Kolibri - DRAW STRING |
||
687 | |||
688 | mov eax, 4 |
||
689 | mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27+12) |
||
690 | mov ecx, 0x8000CCCC |
||
691 | mov edx, aRight |
||
692 | int 0x40 ; Kolibri - DRAW STRING |
||
693 | |||
694 | add ebx, (6*10)*65536 |
||
695 | mov ecx, 0x00FFFF00 |
||
696 | mov edx, aComment2 |
||
697 | mov esi, 42 |
||
698 | int 0x40 ; Kolibri - DRAW STRING |
||
699 | |||
700 | retn |
||
701 | endp |
||
702 | |||
703 | proc int2str |
||
704 | push eax ecx edx edi |
||
705 | mov edi,APP_MEM_END+7 |
||
706 | mov dword[APP_MEM_END+0],' ' |
||
707 | mov dword[APP_MEM_END+4],' ' |
||
708 | mov ecx,10 |
||
709 | @@: xor edx,edx |
||
710 | div ecx |
||
711 | add dl,'0' |
||
712 | mov [edi],dl |
||
713 | dec edi |
||
714 | or eax,eax |
||
715 | jnz @b |
||
716 | pop edi edx ecx eax |
||
717 | retn |
||
718 | endp |
||
719 | |||
720 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
721 | |||
722 | |||
723 | proc subDrawResultComments ; CODE XREF: subDrawBars+92p |
||
724 | ; subDrawBars+AFp ... |
||
725 | xor di, di |
||
726 | mov eax, 4 |
||
727 | |||
728 | locDrawCommentsLoop: ; CODE XREF: subDrawResultComments+1Cj |
||
729 | int 0x40 ; Kolibri - DRAW STRING |
||
730 | ; ebx = [xstart]*65536+[ystart] |
||
731 | ; ecx = 0xX0RRGGBB, edx -> string |
||
732 | add bx, 13;55 |
||
733 | bt edi, 31 |
||
734 | jnb loc_52F |
||
735 | add edx, esi |
||
736 | |||
737 | loc_52F: ; CODE XREF: subDrawResultComments+12j |
||
738 | inc di |
||
739 | cmp di, 7 |
||
740 | jb locDrawCommentsLoop |
||
741 | retn |
||
742 | endp |
||
743 | |||
744 | |||
745 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
746 | |||
747 | |||
748 | proc subDrawResultNumbers ; CODE XREF: subDrawBars+CDp |
||
749 | ; subDrawBars+DCp |
||
750 | xor edi, edi |
||
751 | mov eax, 47 |
||
752 | mov esi, 0DDEEFFh |
||
753 | |||
754 | locDrawNumbersLoop: ; CODE XREF: subDrawResultNumbers+1Ej |
||
755 | call subGetDigitsCount |
||
756 | int 0x40 ; Kolibri - |
||
757 | add dx, 13;55 |
||
758 | add ecx, 4 |
||
759 | inc edi |
||
760 | cmp edi, 7 |
||
761 | jb locDrawNumbersLoop |
||
762 | retn |
||
763 | endp |
||
764 | |||
765 | |||
766 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
767 | |||
768 | |||
769 | proc subGetDigitsCount ; CODE XREF: subDrawResultNumbers:locDrawNumbersLoopp |
||
770 | xor ebx, ebx |
||
771 | mov bh, 6 |
||
772 | cmp dword[ecx], 99999 |
||
773 | ja loc_589 |
||
774 | dec bh |
||
775 | cmp dword[ecx], 9999 |
||
776 | ja loc_589 |
||
777 | dec bh |
||
778 | cmp dword[ecx], 999 |
||
779 | ja loc_589 |
||
780 | dec bh |
||
781 | cmp dword[ecx], 99 |
||
782 | ja loc_589 |
||
783 | dec bh |
||
784 | cmp dword[ecx], 9 |
||
785 | ja loc_589 |
||
786 | dec bh |
||
787 | |||
788 | loc_589: ; CODE XREF: subGetDigitsCount+Aj |
||
789 | ; subGetDigitsCount+14j ... |
||
790 | bswap ebx |
||
791 | inc bl |
||
792 | retn |
||
793 | endp |
||
794 | |||
795 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
796 | |||
797 | subOpenSaveDlgProc: ; CODE XREF: seg000:0000059Dj |
||
798 | ; DATA XREF: subCreateOpenSaveDlg+Ao |
||
799 | call subDrawOpenSaveDlg |
||
800 | |||
801 | locOSDWaitForEvent: ; CODE XREF: seg000:000005ADj |
||
802 | ; seg000:000005C3j ... |
||
803 | mov eax, 10 |
||
804 | int 0x40 ; Kolibri - |
||
805 | cmp eax, 1 |
||
806 | jz subOpenSaveDlgProc |
||
807 | cmp eax, 2 |
||
808 | jz locOSDKeyEvent |
||
809 | cmp eax, 3 |
||
810 | jz locOSDButtonEvent |
||
811 | jmp locOSDWaitForEvent |
||
812 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
813 | |||
814 | locOSDKeyEvent: ; CODE XREF: seg000:000005A2j |
||
815 | mov eax, 2 |
||
816 | int 0x40 ; Kolibri - GET KEY CODE |
||
817 | ; Return: ah = keycode |
||
818 | cmp ah, 0B3h |
||
819 | jnz locOSDNotRightKey |
||
820 | mov eax, [dwOSDCaretPos] |
||
821 | cmp eax, 41 |
||
822 | ja locOSDWaitForEvent |
||
823 | inc eax |
||
824 | mov [dwOSDCaretPos], eax |
||
825 | call subDrawOpenSaveDlgControls |
||
826 | jmp locOSDWaitForEvent |
||
827 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
828 | |||
829 | locOSDNotRightKey: ; CODE XREF: seg000:000005B9j |
||
830 | cmp ah, 0B0h |
||
831 | jnz locOSDNotLeftKey |
||
832 | mov eax, [dwOSDCaretPos] |
||
833 | test eax, eax |
||
834 | jz locOSDWaitForEvent |
||
835 | dec eax |
||
836 | mov [dwOSDCaretPos], eax |
||
837 | call subDrawOpenSaveDlgControls |
||
838 | jmp locOSDWaitForEvent |
||
839 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
840 | |||
841 | locOSDNotLeftKey: ; CODE XREF: seg000:000005D5j |
||
842 | cmp ah, 0B6h |
||
843 | jnz locOSDNotDeleteKey |
||
844 | call subOSDDeleteChar |
||
845 | call subDrawOpenSaveDlgControls |
||
846 | jmp locOSDWaitForEvent |
||
847 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
848 | |||
849 | locOSDNotDeleteKey: ; CODE XREF: seg000:000005F0j |
||
850 | cmp ah, 8 |
||
851 | jnz locOSDNotBackspaceKey |
||
852 | mov eax, [dwOSDCaretPos] |
||
853 | test eax, eax |
||
854 | jz locOSDWaitForEvent |
||
855 | dec eax |
||
856 | mov [dwOSDCaretPos], eax |
||
857 | call subOSDDeleteChar |
||
858 | call subDrawOpenSaveDlgControls |
||
859 | jmp locOSDWaitForEvent |
||
860 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
861 | |||
862 | locOSDNotBackspaceKey: ; CODE XREF: seg000:00000601j |
||
863 | cmp ah, 0Dh |
||
864 | jnz locOSDNotReturnKey |
||
865 | |||
866 | locOSDReturnKey: ; CODE XREF: seg000:000006E1j |
||
867 | mov al, ' ' |
||
868 | mov edi, [dwBufferPtr] |
||
869 | add edi,43 |
||
870 | mov ecx,43 |
||
871 | std |
||
872 | repe scasb |
||
873 | cld |
||
874 | inc edi |
||
875 | mov byte[edi+1], 0 |
||
876 | cmp [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... |
||
877 | jnz locCloseOSD |
||
878 | cmp [dwEditLabel], aOpenFile ; "Open file" |
||
879 | jnz locSaveFile |
||
880 | mov [stFileInfoBlock], 0 |
||
881 | mov [dwDataSize], TESTS_NUM*4+44 |
||
882 | bts word[wFlags], 2 |
||
883 | mov eax,70 ; 58 |
||
884 | mov ebx,stFileInfoBlock |
||
885 | int 0x40 |
||
886 | mov esi,APP_MEM_END+100 |
||
887 | mov edi,results_table+4 |
||
888 | cld |
||
889 | @@: cmp dword[edi+TEST_REC_SIZE-8],0 |
||
890 | je @f |
||
891 | movsd |
||
892 | add edi,TEST_REC_SIZE-4 |
||
893 | jmp @b |
||
894 | @@: |
||
895 | mov edi,aComment2 |
||
896 | mov ecx,44 |
||
897 | rep movsb |
||
898 | jmp locCloseOSD |
||
899 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
900 | |||
901 | locSaveFile: ; CODE XREF: seg000:00000654j |
||
902 | mov [stFileInfoBlock], 2 ; 1 |
||
903 | mov [dwDataSize], TESTS_NUM*4+44 |
||
904 | bts word[wFlags], 2 |
||
905 | mov esi,results_table+4 |
||
906 | mov edi,APP_MEM_END+100 |
||
907 | cld |
||
908 | @@: cmp dword[esi+TEST_REC_SIZE-8],0 |
||
909 | je @f |
||
910 | movsd |
||
911 | add esi,TEST_REC_SIZE-4 |
||
912 | jmp @b |
||
913 | @@: mov esi,aComment2 |
||
914 | mov ecx,44 |
||
915 | rep movsb |
||
916 | mov eax,70 ; 58 |
||
917 | mov ebx,stFileInfoBlock |
||
918 | int 0x40 |
||
919 | jmp locCloseOSD |
||
920 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
921 | |||
922 | locOSDNotReturnKey: ; CODE XREF: seg000:00000624j |
||
923 | cmp [dwOSDCaretPos], 42 |
||
924 | jnb locOSDWaitForEvent |
||
925 | mov edi, [dwBufferPtr] |
||
926 | add edi, 42 |
||
927 | mov esi, edi |
||
928 | dec esi |
||
929 | mov ecx, 42 |
||
930 | sub ecx, [dwOSDCaretPos] |
||
931 | std |
||
932 | rep movsb |
||
933 | shr eax, 8 |
||
934 | mov esi, [dwBufferPtr] |
||
935 | add esi, [dwOSDCaretPos] |
||
936 | mov [esi], al |
||
937 | inc [dwOSDCaretPos] |
||
938 | call subDrawOpenSaveDlgControls |
||
939 | jmp locOSDWaitForEvent |
||
940 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
941 | |||
942 | locOSDButtonEvent: ; CODE XREF: seg000:000005A7j |
||
943 | mov eax, 17 |
||
944 | int 0x40 ; Kolibri - GET PRESSED BUTTON |
||
945 | ; Return: ah = button ID |
||
946 | cmp ah, 1 |
||
947 | jnz locNotCloseOSD |
||
948 | jmp locOSDReturnKey |
||
949 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
950 | |||
951 | locCloseOSD: ; CODE XREF: seg000:00000644j |
||
952 | ; seg000:0000066Cj ... |
||
953 | bts [wFlags], 1 |
||
954 | btr [wFlags], 0 |
||
955 | mov eax, -1 |
||
956 | int 0x40 ; Kolibri - FINISH EXECUTION |
||
957 | |||
958 | locNotCloseOSD: ; CODE XREF: seg000:000006DFj |
||
959 | cmp ah, 2 |
||
960 | jnz locNotSetCaretOSD |
||
961 | mov eax, 37 |
||
962 | mov ebx, 1 |
||
963 | int 0x40 ; Kolibri - GET MOUSE COORDINATES, WINDOW-RELATIVE |
||
964 | ; Return: eax = [x]*65536 + [y] |
||
965 | shr eax, 16 |
||
966 | sub eax, 21 |
||
967 | xor edx, edx |
||
968 | mov ebx, 6 |
||
969 | div ebx |
||
970 | mov [dwOSDCaretPos], eax |
||
971 | call subDrawOpenSaveDlgControls |
||
972 | jmp locOSDWaitForEvent |
||
973 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
974 | |||
975 | locNotSetCaretOSD: ; CODE XREF: seg000:00000700j |
||
976 | jmp locOSDWaitForEvent |
||
977 | |||
978 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
979 | |||
980 | |||
981 | proc subOSDDeleteChar ; CODE XREF: seg000:000005F2p |
||
982 | ; seg000:00000612p |
||
983 | mov edi, [dwBufferPtr] |
||
984 | add edi, [dwOSDCaretPos] |
||
985 | mov esi, edi |
||
986 | inc esi |
||
987 | mov ecx, 43 |
||
988 | sub ecx, [dwOSDCaretPos] |
||
989 | cld |
||
990 | rep movsb |
||
991 | retn |
||
992 | endp |
||
993 | |||
994 | |||
995 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
996 | |||
997 | |||
998 | proc subDrawOpenSaveDlg ; CODE XREF: seg000:subOpenSaveDlgProcp |
||
999 | mov eax, 12 |
||
1000 | mov ebx, 1 |
||
1001 | int 0x40 ; Kolibri - BEGIN WINDOW REDRAW |
||
1002 | xor eax, eax |
||
1003 | mov ebx, 64012Ch |
||
1004 | mov ecx, 640050h |
||
1005 | mov edx, 3780078h |
||
1006 | int 0x40 ; Kolibri - DEFINE/DRAW WINDOW |
||
1007 | ; ebx = [xstart]*65536+[xsize] |
||
1008 | ; ecx = [ystart]*65536+[ysize] |
||
1009 | mov eax, 4 |
||
1010 | mov ebx, 80008h |
||
1011 | mov ecx, 10DDEEFFh |
||
1012 | mov edx, [dwEditLabel] |
||
1013 | mov esi, [dwEditLabelLen] |
||
1014 | int 0x40 ; Kolibri - DRAW STRING |
||
1015 | ; ebx = [xstart]*65536+[ystart] |
||
1016 | ; ecx = 0xX0RRGGBB, edx -> string |
||
1017 | call subDrawOpenSaveDlgControls |
||
1018 | mov eax, 12 |
||
1019 | mov ebx, 2 |
||
1020 | int 0x40 ; Kolibri - END WINDOW REDRAW |
||
1021 | retn |
||
1022 | endp |
||
1023 | |||
1024 | |||
1025 | ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ |
||
1026 | |||
1027 | |||
1028 | proc subDrawOpenSaveDlgControls ; CODE XREF: seg000:000005CBp |
||
1029 | ; seg000:000005E6p ... |
||
1030 | pusha |
||
1031 | mov eax, 8 |
||
1032 | mov ebx, 150102h |
||
1033 | mov ecx, 28000Fh |
||
1034 | mov edx, 40000002h |
||
1035 | int 0x40 ; Kolibri - DEFINE/DELETE BUTTON |
||
1036 | ; ebx = [xstart]*65536+[xsize] |
||
1037 | ; ecx = [ystart]*65536+[ysize] |
||
1038 | ; edx = 0xXYnnnnnn, esi = color |
||
1039 | mov eax, 13 |
||
1040 | mov edx, 0E0E0E0h |
||
1041 | int 0x40 ; Kolibri - DRAW RECTANGLE |
||
1042 | ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] |
||
1043 | ; edx = 0xRRGGBB or 0x80RRGGBB for gradient |
||
1044 | push eax |
||
1045 | mov eax, 60000h |
||
1046 | mul [dwOSDCaretPos] |
||
1047 | add eax, 150006h |
||
1048 | mov ebx, eax |
||
1049 | pop eax |
||
1050 | mov edx, 6A73D0h |
||
1051 | int 0x40 ; Kolibri - |
||
1052 | mov eax, 4 |
||
1053 | mov ebx, 15002Ch |
||
1054 | xor ecx, ecx |
||
1055 | mov edx, [dwBufferPtr] |
||
1056 | mov esi, 43 |
||
1057 | int 0x40 ; Kolibri - DRAW STRING |
||
1058 | ; ebx = [xstart]*65536+[ystart] |
||
1059 | ; ecx = 0xX0RRGGBB, edx -> string |
||
1060 | popa |
||
1061 | retn |
||
1062 | endp |
||
1063 | |||
1064 | ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
||
1065 | |||
1066 | dwMainWndSlot dd 0 ; DATA XREF: start:loc_46w start+7Dr |
||
1067 | dwBufferPtr dd 0 ; DATA XREF: start+13Cw start+18Bw ... |
||
1068 | dwEditLabel dd 0 ; DATA XREF: start+146w start+195w ... |
||
1069 | dwEditLabelLen dd 0 ; DATA XREF: start+150w start+19Fw ... |
||
1070 | aComment db 'Comment' ; DATA XREF: start+146o |
||
1071 | aOpenFile db 'Open file' ; DATA XREF: start+195o |
||
1072 | ; seg000:0000064Ao |
||
1073 | aSaveAs db 'Save as...' ; DATA XREF: start+1D4o |
||
1074 | dwOSDCaretPos dd 0 ; DATA XREF: seg000:000005BBr |
||
1075 | ; seg000:000005C6w ... |
||
1076 | macro unused { |
||
1077 | stFileInfoBlock dd 0 ; DATA XREF: start+5Co |
||
1078 | ; seg000:00000658w ... |
||
1079 | dd 0 |
||
1080 | dwDataSize dd 1 ; DATA XREF: seg000:0000065Ew |
||
1081 | ; seg000:00000678w |
||
1082 | dd APP_MEM_END+100 |
||
1083 | dd APP_MEM_END |
||
1084 | aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo |
||
1085 | } |
||
1086 | align 4 |
||
1087 | stFileInfoBlock dd 0,0,0 |
||
1088 | dwDataSize dd 1 |
||
1089 | dd APP_MEM_END+100 |
||
1090 | aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo |
||
1091 | |||
1092 | ; start+1CAo ... |
||
1093 | wFlags dd 0 ; DATA XREF: start:loc_70w |
||
1094 | ; start:loc_87w ... |
||
1095 | dwTestEndTime dd 0 ; DATA XREF: subInitTestTimer+14w |
||
1096 | ; subIfTimeElapsed+Dr |
||
1097 | results_table dd \ |
||
1098 | ?,?,testDrawWindow,aDrawingWindow,\ |
||
1099 | ?,?,testDrawBar,aDrawingBar,\ |
||
1100 | ?,?,testDrawPicture,aDrawingPicture,\ |
||
1101 | ?,?,testDrawVertLine,aDrawingVLine,\ |
||
1102 | ?,?,testDrawHorzLine,aDrawingHLine,\ |
||
1103 | ?,?,testDrawFreeLine,aDrawingFLine,\ |
||
1104 | ?,?,testDrawText1,aDrawingText1,\ |
||
1105 | ?,?,testDrawText2,aDrawingText2,\ |
||
1106 | ?,?,testDrawNumber,aDrawingNumber,\ |
||
1107 | ?,?,testDrawPixel,aDrawingPixel,\ |
||
1108 | 0,0,0,0 |
||
1109 | |||
1110 | LINE_HEIGHT = 13 |
||
1111 | TEST_REC_SIZE = 16 |
||
1112 | TESTS_NUM = ($ - results_table) / TEST_REC_SIZE - 1 |
||
1113 | |||
1114 | macro cstr name,str { |
||
1115 | local ..end |
||
1116 | name db ..end-name-1,str |
||
1117 | ..end: |
||
1118 | } |
||
1119 | |||
1120 | aDrawingWindow db 'Window Of Type #3, 325x400 px',0 |
||
1121 | aDrawingBar db 'Filled Rectangle, 100x250 px',0 |
||
1122 | aDrawingPicture db 'Picture, 55x123, px',0 |
||
1123 | aDrawingVLine db 'Vertical Line, 350 px',0 |
||
1124 | aDrawingHLine db 'Horizontal Line, 270 px',0 |
||
1125 | aDrawingFLine db 'Free-angled Line, 350 px',0 |
||
1126 | aDrawingText1 db 'Fixed-width Text, 34 chars',0 |
||
1127 | aDrawingText2 db 'Proportional Text, 34 chars',0 |
||
1128 | aDrawingNumber db 'Decimal Number, 8 digits',0 |
||
1129 | aDrawingPixel db 'Single Pixel',0 |
||
1130 | |||
1131 | aTestText db 'This is a 34-charachters test text' ; DATA XREF: seg000:000002ADo |
||
1132 | ; seg000:000002DAo |
||
1133 | aButtonsText db 'Test Comment+ Pattern+ Open Save',0 |
||
1134 | ; DATA XREF: subDrawMainWindow+5Do |
||
1135 | aCaption db 'Menuet Graphical Benchmark 0.3',0 ; DATA XREF: subDrawMainWindow+4Co |
||
1136 | |||
1137 | aLeft db 'Left :',0 |
||
1138 | aRight db 'Right :',0 |
||
1139 | |||
1140 | aComment1 db 'current ' ; DATA XREF: start+13Co |
||
1141 | ; subDrawBars+9Co |
||
1142 | ;dwDrawWindowTime2 dd 0 ; DATA XREF: subSubSavePattern+5o |
||
1143 | ; ; subDrawBars+18o ... |
||
1144 | ; dd 0 |
||
1145 | ; dd 0 |
||
1146 | ; dd 0 |
||
1147 | ; dd 0 |
||
1148 | ; dd 0 |
||
1149 | ; dd 0 |
||
1150 | aComment2 db 'no pattern ' |
||
1151 | ; DATA XREF: subDrawBars+72o |
||
1152 | ; subDrawBars+B9o |
||
1153 | APP_MEM_END: rb 30 ; ; DATA XREF: seg000:off_10o |
||
1154 | ; subGetThreadInfo+5o ... |
||
1155 | dwMainPID dd ? ; DATA XREF: start+Ar start:loc_3Br' |