Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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
  1156.