diff --git a/programs/system/mgb/trunk/build.bat b/programs/system/mgb/trunk/build.bat index fb77f0b43c..f957194c6b 100644 --- a/programs/system/mgb/trunk/build.bat +++ b/programs/system/mgb/trunk/build.bat @@ -1,2 +1,3 @@ @fasm mgb.asm mgb +@kpack mgb @pause \ No newline at end of file diff --git a/programs/system/mgb/trunk/build.sh b/programs/system/mgb/trunk/build.sh new file mode 100755 index 0000000000..9f3735c05f --- /dev/null +++ b/programs/system/mgb/trunk/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# This script does for linux the same as build.bat for DOS, +# it compiles the KoOS kernel, hopefully ;-) + + echo "lang fix en" + echo "lang fix en" > lang.inc + fasm -m 16384 mgb.asm mgb + rm -f lang.inc + exit 0 + + + + diff --git a/programs/system/mgb/trunk/mgb.asm b/programs/system/mgb/trunk/mgb.asm index 3753a2aed7..4c9829927d 100644 --- a/programs/system/mgb/trunk/mgb.asm +++ b/programs/system/mgb/trunk/mgb.asm @@ -1,10 +1,17 @@ ;============================================================================= -; +; Kolibri Graphics Benchmark 0.4 ; MGB - Menuet Graphics Benchmark 0.3 ; Compile with FASM ; ;============================================================================= -; +; version: 0.4 +; last update: 18/09//2010 +; written by: Marat Zakiyanov aka Mario79, aka Mario +; changes: select path with OpenDialog, +; use of Box_Lib and Proc_Lib, +; support start with path for *.mgb file +; optimization code and size of use memory +;--------------------------------------------------------------------- ; Original author and copyrights holder: ; Mikhail Lisovin a.k.a. Mihasik ; lisovin@26.ru @@ -26,1036 +33,504 @@ org 0x0 use32 - db 'MENUET01' - dd 1 - dd start - dd APP_MEM_END - dd 0x200000 - dd 0x07FFF0 - dd 0 - dd 0 + db 'MENUET01' + dd 1 + dd start + dd IM_END + dd I_END ;0x200000 + dd stacktop ;0x07FFF0 + dd fname_buf + dd cur_dir_path include '..\..\..\macros.inc' -;__CPU_type equ p6 ; charge it +include '..\..\..\proc32.inc' +include '../../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../../develop/libraries/box_lib/load_lib.mac' + @use_library +;--------------------------------------------------------------------- +start: + mcall 68,11 -include 'proc32.inc' +load_libraries l_libs_start,end_l_libs -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + cmp eax,-1 + jz close +;--------------------------------------------------------------------- + mov edi,filename_area + mov esi,start_temp_file_name + call copy_str_1 + mov edi,comment_string_1 + mov esi,aComment1 + call copy_str_1 -proc start ; DATA XREF: seg000:off_Co - -; FUNCTION CHUNK AT 000000CF SIZE 00000147 BYTES - - mov ecx, -1 - call subGetThreadInfo - mov edx, [dwMainPID] - mov ecx, eax - -loc_36: ; CODE XREF: start+20j - call subGetThreadInfo - -loc_3B: - cmp edx, [dwMainPID] - jz loc_46 - dec ecx - jnz loc_36 - -loc_46: ; CODE XREF: start+1Dj - mov [dwMainWndSlot], ecx - -locRedrawEvent: ; CODE XREF: start+3Cj - call subDrawMainWindow - -locWaitForEvent: ; CODE XREF: start+6Cj start:loc_B3j ... - mcall 23, 20 ; Kolibri - WAIT FOR EVENT WITH TIMEOUT - ; ebx = timeout - ; Return: eax = event - cmp eax, 1 - jz locRedrawEvent - -loc_62: - cmp eax, 2 - jz locKeyEvent - cmp eax, 3 - -loc_6A: - jz locButtonEvent - -loc_70: - ;btr word[wFlags], 2 - ;jnb loc_87 - ;mov eax, 58 - ;mov ebx, stFileInfoBlock - ;int 0x40 ; Kolibri - ACCESS TO FILE SYSTEM (obsolete) - ; ebx -> fileinfo struc - -loc_87: ; CODE XREF: start+55j - btr word[wFlags], 1 - jnb locWaitForEvent - call subDelay100ms - mcall 0x12, 3, [dwMainWndSlot] ; Kolibri - ACTIVATE WINDOW - ; ecx = slot - call subDelay100ms - -loc_AE: - call subDrawBars - -loc_B3: - jmp locWaitForEvent -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subGetThreadInfo ; CODE XREF: start+5p start:loc_36p - mcall 9, APP_MEM_END ; Kolibri - GET THREAD INFO - ; ebx -> buffer, ecx = slot (-1 for self) - ; Return: eax = maximum slot - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDelay100ms ; CODE XREF: start+6Ep start+85p - mcall 5, 0x0a ; Kolibri - DELAY - ; ebx = time (in 1/100th of second) - retn -endp - -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -; START OF FUNCTION CHUNK FOR start - -locKeyEvent: ; CODE XREF: start+41j - mcall 2 ; Kolibri - GET KEY CODE - ; Return: ah = keycode - cmp ah, 't' - jz locActionTest - cmp ah, 'c' - jz locActionComment - cmp ah, 'p' - jz locActionPattern - cmp ah, 'o' - jz locActionOpen - cmp ah, 's' - jz locActionSave - jmp locWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locButtonEvent: ; CODE XREF: start:loc_6Aj - mcall 0x11 ; Kolibri - GET PRESSED BUTTON - ; Return: ah = button ID - cmp ah, 1 - jnz locNotClose - mcall -1 ; Kolibri - FINISH EXECUTION - -locNotClose: ; CODE XREF: start+E6j - cmp ah, 2 - jnz locNotTest - -locActionTest: ; CODE XREF: start+B5j - bts [wFlags], 0 - jb locWaitForEvent - mcall 5, 50 ; Kolibri - DELAY - ; ebx = time (in 1/100th of second) - -loc_132: - mcall 51, 1, subTestWndProc, 0x17FFF0; Kolibri - CREATE THREAD - ; ebx = 1 - unique subfunction - ; ecx = starting eip - ; edx = starting esp - jmp locWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locNotTest: ; CODE XREF: start+F2j - cmp ah, 3 - jnz locNotComment - -locActionComment: ; CODE XREF: start+BAj - bts [wFlags], 0 - jb locWaitForEvent - mov [dwBufferPtr], aComment1 ; "Current "... - mov [dwEditLabel], aComment ; "Comment" - mov [dwEditLabelLen], 7 - call subCreateOpenSaveDlg - jmp locWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locNotComment: ; CODE XREF: start+12Cj - cmp ah, 4 - jnz locNotPattern - -locActionPattern: ; CODE XREF: start+BFj - call subSavePattern - call subDrawBars - jmp locWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locNotPattern: ; CODE XREF: start+167j - cmp ah, 5 - jnz locNotOpen - -locActionOpen: ; CODE XREF: start+C8j - bts [wFlags], 0 - jb locWaitForEvent - mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... - mov [dwEditLabel], aOpenFile ; "Open file" - mov [dwEditLabelLen], 9 - call subCreateOpenSaveDlg - jmp locWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locNotOpen: ; CODE XREF: start+17Bj - cmp ah, 6 - jnz locWaitForEvent - -locActionSave: ; CODE XREF: start+D1j - bts [wFlags], 0 - jb locWaitForEvent - mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... - mov [dwEditLabel], aSaveAs ; "Save as..." - mov [dwEditLabelLen], 0Ah - call subCreateOpenSaveDlg - jmp locWaitForEvent -; END OF FUNCTION CHUNK FOR start - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subCreateOpenSaveDlg ; CODE XREF: start+15Ap start+1A9p ... - mcall 51, 1, subOpenSaveDlgProc, 0x19FFF0; Kolibri - CREATE THREAD - ; ebx = 1 - unique subfunction - ; ecx = starting eip - ; edx = starting esp - retn -endp - -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -subTestWndProc: ; DATA XREF: start+118o - - mov esi,results_table+8 - .next_test: call subInitTestTimer + mov edi,comment_string_2 + mov esi,aComment2 + call copy_str_1 + mov edi,fname_buf + cmp [edi],byte 0 + jne @f + mov esi,path4 + call copy_str_1 + jmp .OpenDialog +@@: + call locLoadFile + xor dword [wFlags],1 +.OpenDialog: +;OpenDialog initialisation + push dword OpenDialog_data + call [OpenDialog_Init] +;--------------------------------------------------------------------- + mcall 40,0x27 +red: + call draw_window +still: + mcall 10 + cmp eax,1 + jz red + cmp eax,2 + jz key + cmp eax,3 + jz button + jmp still +;--------------------------------------------------------------------- +copy_str_1: + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @b + ret +;--------------------------------------------------------------------- +key: + mcall 2 + cmp ah,'t' + jz ActionTest + cmp ah,'c' + jz ActionComment + cmp ah,'p' + jz ActionPattern + cmp ah,'o' + jz ActionOpen + cmp ah,'s' + jz ActionSave + jmp still +;--------------------------------------------------------------------- +button: + mcall 17 + cmp ah,1 + jnz NotClose +close: + mcall -1 +NotClose: + cmp ah,2 + jnz locNotTest +ActionTest: + test dword [wFlags],1 + jnz still + mcall 51,1,TestWndProc,thread_stack1 + jmp still +;--------------------------------------------------------------------- +locNotTest: + cmp ah,3 + jnz NotComment +ActionComment: + test dword [wFlags],1 + jnz still + mcall 51,1,thread_comment,thread_stack2 + jmp still +;--------------------------------------------------------------------- +NotComment: + cmp ah,4 + jnz NotPattern +ActionPattern: + test dword [wFlags],1 + jnz still + mov esi,results_table + cld +@@: + lodsd + mov [esi],eax + add esi,TEST_REC_SIZE-4 + cmp dword [esi+TEST_REC_SIZE-4],0 + jne @b + mov esi,comment_string_1 + mov edi,comment_string_2 + call copy_str_1 + call DrawBars + jmp still +;--------------------------------------------------------------------- +NotPattern: + cmp ah,5 + jnz NotOpen +ActionOpen: + test dword [wFlags],1 + jnz still + mov [OpenDialog_data.type],0 ; open + call OpenDialog_Start_1 + jne .1 + call locLoadFile + call DrawBars +.1: + xor dword [wFlags],1 + jmp still +;--------------------------------------------------------------------- +OpenDialog_Start_1: + push dword OpenDialog_data + call [OpenDialog_Start] + cmp [OpenDialog_data.status],1 + ret +;--------------------------------------------------------------------- +NotOpen: + cmp ah,6 + jnz still +ActionSave: + test dword [wFlags],1 + jnz still + mov [OpenDialog_data.type],1 ; save + call OpenDialog_Start_1 + jne ActionOpen.1 + call locSaveFile + jmp ActionOpen.1 +;--------------------------------------------------------------------- +TestWndProc: + or dword [wFlags],1 + mov esi,results_table+8 align 4 - @@: push esi - call dword[esi] - pop esi - call subIfTimeElapsed - jb @b - mov [esi-8],edi - - add esi,TEST_REC_SIZE - cmp dword[esi],0 - jnz .next_test -macro unused { - call subInitTestTimer - -locDrawNextWindow: ; CODE XREF: seg000:00000241j - mov ecx, 4F0190h - call testDrawWindow - call subIfTimeElapsed - jb locDrawNextWindow - mov [results_table+TEST_REC_SIZE*0], edi - call subInitTestTimer - -locDrawNextBar: ; CODE XREF: seg000:00000269j - mcall 0x0d, 0x0A0064, 0x1E00FA, 0x6A73D0; Kolibri - DRAW RECTANGLE - ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] - ; edx = 0xRRGGBB or 0x80RRGGBB for gradient - call subIfTimeElapsed - jb locDrawNextBar - mov [results_table+TEST_REC_SIZE*1], edi - call subInitTestTimer - -locDrawNextLine: ; CODE XREF: seg000:00000291j - ; Kolibri - DRAW LINE - mcall 38, 0x8C008C, 0x1E017C, 0x1090207F - ; ebx = [xstart]*65536+[xend], ecx = [ystart]*65536+[yend] - ; edx = 0x00RRGGBB - color or 0x01****** - inversed line - call subIfTimeElapsed - jb locDrawNextLine - mov [results_table+TEST_REC_SIZE*2], edi - call subInitTestTimer - -locDrawNextText1: ; CODE XREF: seg000:000002BEj - ; Kolibri - DRAW STRING - mcall 4, 0x0A012C, 0x0AA66, aTestText, 34 - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - call subIfTimeElapsed - jb locDrawNextText1 - mov [results_table+TEST_REC_SIZE*3], edi - call subInitTestTimer - -locDrawNextText2: ; CODE XREF: seg000:000002EBj - ; Kolibri - DRAW STRING - mcall 4, 0x0A015E, 0x10E7B850, aTestText, 34 - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - call subIfTimeElapsed - jb locDrawNextText2 - mov [results_table+TEST_REC_SIZE*4], edi - call subInitTestTimer - -locDrawNextNumber: ; CODE XREF: seg000:00000318j - ; Kolibri - DRAW NUMBER - ; bl = 0/1 - ecx is number/pointer - ; bh = 0/1/2 - dec/hex/bin - ; highword(ebx) = number of digits - ; ecx = number/pointer - ; edx = [x]*65536+[y] - ; esi = 0xX0RRGGBB - mcall 47, 80000h, 12345678, 140172h, 0E0B27Bh - - - - call subIfTimeElapsed - jb locDrawNextNumber - mov [results_table+TEST_REC_SIZE*5], edi - call subInitTestTimer - -locDrawNextPixel: ; CODE XREF: seg000:00000340j - ; Kolibri - PUT PIXEL - ; ebx = x, ecx = y, edx = color - mcall 1, 100, 100, 0x0FFFFFF - call subIfTimeElapsed - jb locDrawNextPixel - mov [results_table+TEST_REC_SIZE*6], edi -} - bts word[wFlags], 1 - btr word[wFlags], 0 - ; Kolibri - FINISH EXECUTION - mcall -1 - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subInitTestTimer ; CODE XREF: seg000:subTestWndProcp - ; seg000:00000249p ... - xor edi, edi - mov eax, 26 - mov ebx, 9 - mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER - ; Return: eax = time counter - inc eax - mov ecx, eax - add eax, 100 - mov [dwTestEndTime], eax - -locWait10ms: ; CODE XREF: subInitTestTimer+22j - mov eax, 26 - mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER - ; Return: eax = time counter - cmp eax, ecx - jb locWait10ms - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subIfTimeElapsed ; CODE XREF: seg000:0000023Cp - ; seg000:00000264p ... - inc edi - mov eax, 26 - mov ebx, 9 - mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER - ; Return: eax = time counter - cmp eax, [dwTestEndTime] - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subSavePattern ; CODE XREF: start:locActionPatternp -; mov esi, dwDrawWindowTime -; mov edi, dwDrawWindowTime2 -; mov ecx, 18 -; cld -; rep movsd - mov esi,results_table - cld - @@: lodsd - mov [esi],eax - add esi,TEST_REC_SIZE-4 - cmp dword[esi+TEST_REC_SIZE-4],0 - jne @b - mov esi,aComment1 - mov edi,aComment2 - mov ecx,44/4 - rep movsd - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawMainWindow ; CODE XREF: start:locRedrawEventp - mov eax, 12 - mov ebx, 1 - mcall ; Kolibri - BEGIN WINDOW REDRAW - mov eax,48 - mov ebx,4 - mcall - mov ebx, 100*65536+72*5+14;640145h - mov ecx, 80*65536+TESTS_NUM*LINE_HEIGHT+15+20+35 - add cx, ax - mov edx, 34000000h - mov edi, aCaption - xor eax, eax - mcall - mov eax, 8 - mov ebx, 050036h+12 - mov ecx, 5*65536+20 - mov edx, 2 - mov esi, 0x00007F7F;702050h - -locDrawButtonsLoop: ; CODE XREF: subDrawMainWindow+3Bj - mcall ; Kolibri - DEFINE/DELETE BUTTON - ; ebx = [xstart]*65536+[xsize] - ; ecx = [ystart]*65536+[ysize] - ; edx = 0xXYnnnnnn, esi = color - add ebx, 72*65536 - inc edx - cmp edx, 7 - jb locDrawButtonsLoop - - mov ecx,31 - mov edx,0x00007F7F - mov esi,(72*5)/2 - call drawSeparator - - mov eax, 4 - mov ebx, 27*65536+12 - mov ecx, 0x80DDEEFF - mov edx, aButtonsText ; "Test Comment+ Pattern+ Open "... - mcall ; Kolibri - DRAW STRING - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - call subDrawBars - - mov ecx,TESTS_NUM*LINE_HEIGHT+15+21 - mov edx,0x00007F7F - mov esi,(72*5)/2 - call drawSeparator - - mov eax, 12 - mov ebx, 2 - mcall ; Kolibri - END WINDOW REDRAW - retn -endp - -proc drawSeparator - mov eax,1 - mov ebx,3 - @@: mcall - add ebx,2 - dec esi - jnz @b - retn -endp - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc testDrawWindow - xor eax, eax - mov ebx, 640145h - mov ecx, 4F0190h - mov edx, 3000000h - mcall - retn -endp - -proc testDrawBar - mov eax, 13 - mov ebx, 0A0064h - mov ecx, 1E00FAh - mov edx, 6A73D0h - mcall - retn -endp - -proc testDrawPicture - mov eax, 7 - mov ebx, 0 - mov ecx, 90*65536+123 - mov edx, 15*65536+33 - mcall - retn -endp - -proc testDrawVertLine - mov eax, 38 - mov ebx, 300*65536+300 ;8C008Ch - mov ecx, 30*65536+380 ;1E017Ch - mov edx, 1090207Fh - mcall - retn -endp - -proc testDrawHorzLine - mov eax, 38 - mov ebx, 30*65536+300 ;20008Ch - mov ecx, 380*65536+380 ;17C017Ch - mov edx, 1090207Fh - mcall - retn -endp - -proc testDrawFreeLine - mov eax, 38 - mov ebx, 30*65536+300 ;20008Ch - mov ecx, 380*65536+30 ;17C001Eh - mov edx, 1090207Fh - mcall - retn -endp - -proc testDrawText1 - mov eax, 4 - mov ebx, 0C012Ch - mov ecx, 0AA66h - mov edx, aTestText - mov esi, 34 - mcall - retn -endp - -proc testDrawText2 - mov eax, 4 - mov ebx, 1B013Bh - mov ecx, 10E7B850h - mov edx, aTestText - mov esi, 34 - mcall - retn -endp - -proc testDrawNumber - mov eax, 47 - mov ebx, 80000h - mov ecx, 12345678 - mov edx, 2A014Ah - mov esi, 0E0B27Bh - mcall - retn -endp - -proc testDrawPixel - mov eax, 1 - mov ebx, 100 - mov ecx, 100 - mov edx, 0FFFFFFh - mcall - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawBars ; CODE XREF: start:loc_AEp start+16Ep ... - mov edi,results_table - mov ebx,30+7 - .next_result: cmp dword[edi+TEST_REC_SIZE-4],0 - je .exit - - push ebx - mov eax,13 - movzx ecx,bx - add ecx,-2 - shl ecx,16 - mov cx,LINE_HEIGHT - mov ebx,0*65536+72*5+5 - xor edx,edx - mcall - pop ebx - - and ebx,0x0000FFFF - or ebx,5*65536 - mov edx,[edi+TEST_REC_SIZE-4] - mov ecx,0x8000CCCC ; 0x00E7E05A - mov eax,4 - mcall - - push '=' 0x00FFFF00 0x00FFFF7F 0x00FFFF7F - mov eax,[edi+0] - cmp eax,[edi+4] - je @f - jb .lp1 - mov dword[esp+0],0x007FFF7F - mov dword[esp+4],0x00FF7F7F - mov dword[esp+8],0x0000FF00 - mov byte[esp+12],'>' - .lp1: ja @f - mov dword[esp+0],0x00FF7F7F - mov dword[esp+4],0x007FFF7F - mov dword[esp+8],0x00FF0000 - mov byte[esp+12],'<' - @@: - pop ecx - call int2str - add ebx,(72*5-6*8*2-6-10-5)*65536 ; 196 - mov edx,APP_MEM_END - mov esi,8 - mov eax,4 - mcall - - pop ecx - mov eax,[edi+4] - call int2str - add ebx,(6*8+6+10)*65536 - mov eax,4 - mcall - - pop ecx - add ebx,(-6-5)*65536 - mov edx,esp - mov esi,1 - mcall - add esp,4 - - add edi,TEST_REC_SIZE - add bx,LINE_HEIGHT - jmp .next_result - .exit: - - mov eax, 13 - mov ebx, 0*65536+72*5+5 - mov ecx, (TESTS_NUM*LINE_HEIGHT+15+25)*65536+26 - xor edx, edx - mcall - - mov eax, 4 - mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27) - mov ecx, 0x8000CCCC - mov edx, aLeft - mcall ; Kolibri - DRAW STRING - - add ebx, (6*10)*65536 - mov ecx, 0x00FFFF00 - mov edx, aComment1 - mov esi, 42 - mcall ; Kolibri - DRAW STRING - - mov eax, 4 - mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27+12) - mov ecx, 0x8000CCCC - mov edx, aRight - mcall ; Kolibri - DRAW STRING - - add ebx, (6*10)*65536 - mov ecx, 0x00FFFF00 - mov edx, aComment2 - mov esi, 42 - mcall ; Kolibri - DRAW STRING - - retn -endp - -proc int2str - push eax ecx edx edi - mov edi,APP_MEM_END+7 - mov dword[APP_MEM_END+0],' ' - mov dword[APP_MEM_END+4],' ' - mov ecx,10 - @@: xor edx,edx - div ecx - add dl,'0' - mov [edi],dl - dec edi - or eax,eax - jnz @b - pop edi edx ecx eax - retn -endp - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawResultComments ; CODE XREF: subDrawBars+92p - ; subDrawBars+AFp ... - xor di, di - mov eax, 4 - -locDrawCommentsLoop: ; CODE XREF: subDrawResultComments+1Cj - mcall ; Kolibri - DRAW STRING - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - add bx, 13;55 - bt edi, 31 - jnb loc_52F - add edx, esi - -loc_52F: ; CODE XREF: subDrawResultComments+12j - inc di - cmp di, 7 - jb locDrawCommentsLoop - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawResultNumbers ; CODE XREF: subDrawBars+CDp - ; subDrawBars+DCp - xor edi, edi - mov eax, 47 - mov esi, 0DDEEFFh - -locDrawNumbersLoop: ; CODE XREF: subDrawResultNumbers+1Ej - call subGetDigitsCount - mcall ; Kolibri - - add dx, 13;55 - add ecx, 4 - inc edi - cmp edi, 7 - jb locDrawNumbersLoop - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subGetDigitsCount ; CODE XREF: subDrawResultNumbers:locDrawNumbersLoopp - xor ebx, ebx - mov bh, 6 - cmp dword[ecx], 99999 - ja loc_589 - dec bh - cmp dword[ecx], 9999 - ja loc_589 - dec bh - cmp dword[ecx], 999 - ja loc_589 - dec bh - cmp dword[ecx], 99 - ja loc_589 - dec bh - cmp dword[ecx], 9 - ja loc_589 - dec bh - -loc_589: ; CODE XREF: subGetDigitsCount+Aj - ; subGetDigitsCount+14j ... - bswap ebx - inc bl - retn -endp - -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -subOpenSaveDlgProc: ; CODE XREF: seg000:0000059Dj - ; DATA XREF: subCreateOpenSaveDlg+Ao - call subDrawOpenSaveDlg - -locOSDWaitForEvent: ; CODE XREF: seg000:000005ADj - ; seg000:000005C3j ... - mov eax, 10 - mcall ; Kolibri - - cmp eax, 1 - jz subOpenSaveDlgProc - cmp eax, 2 - jz locOSDKeyEvent - cmp eax, 3 - jz locOSDButtonEvent - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDKeyEvent: ; CODE XREF: seg000:000005A2j - mov eax, 2 - mcall ; Kolibri - GET KEY CODE - ; Return: ah = keycode - cmp ah, 0B3h - jnz locOSDNotRightKey - mov eax, [dwOSDCaretPos] - cmp eax, 41 - ja locOSDWaitForEvent - inc eax - mov [dwOSDCaretPos], eax - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDNotRightKey: ; CODE XREF: seg000:000005B9j - cmp ah, 0B0h - jnz locOSDNotLeftKey - mov eax, [dwOSDCaretPos] - test eax, eax - jz locOSDWaitForEvent - dec eax - mov [dwOSDCaretPos], eax - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDNotLeftKey: ; CODE XREF: seg000:000005D5j - cmp ah, 0B6h - jnz locOSDNotDeleteKey - call subOSDDeleteChar - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDNotDeleteKey: ; CODE XREF: seg000:000005F0j - cmp ah, 8 - jnz locOSDNotBackspaceKey - mov eax, [dwOSDCaretPos] - test eax, eax - jz locOSDWaitForEvent - dec eax - mov [dwOSDCaretPos], eax - call subOSDDeleteChar - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDNotBackspaceKey: ; CODE XREF: seg000:00000601j - cmp ah, 0Dh - jnz locOSDNotReturnKey - -locOSDReturnKey: ; CODE XREF: seg000:000006E1j - mov al, ' ' - mov edi, [dwBufferPtr] - add edi,43 - mov ecx,43 - std - repe scasb - cld - inc edi - mov byte[edi+1], 0 - cmp [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... - jnz locCloseOSD - cmp [dwEditLabel], aOpenFile ; "Open file" - jnz locSaveFile - mov [stFileInfoBlock], 0 - mov [dwDataSize], TESTS_NUM*4+44 - bts word[wFlags], 2 - mov eax,70 ; 58 - mov ebx,stFileInfoBlock - mcall - mov esi,APP_MEM_END+100 - mov edi,results_table+4 - cld - @@: cmp dword[edi+TEST_REC_SIZE-8],0 - je @f - movsd - add edi,TEST_REC_SIZE-4 - jmp @b - @@: - mov edi,aComment2 - mov ecx,44 - rep movsb - jmp locCloseOSD -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locSaveFile: ; CODE XREF: seg000:00000654j - mov [stFileInfoBlock], 2 ; 1 - mov [dwDataSize], TESTS_NUM*4+44 - bts word[wFlags], 2 - mov esi,results_table+4 - mov edi,APP_MEM_END+100 - cld - @@: cmp dword[esi+TEST_REC_SIZE-8],0 - je @f - movsd - add esi,TEST_REC_SIZE-4 - jmp @b - @@: mov esi,aComment2 - mov ecx,44 - rep movsb - mov eax,70 ; 58 - mov ebx,stFileInfoBlock - mcall - jmp locCloseOSD -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDNotReturnKey: ; CODE XREF: seg000:00000624j - cmp [dwOSDCaretPos], 42 - jnb locOSDWaitForEvent - mov edi, [dwBufferPtr] - add edi, 42 - mov esi, edi - dec esi - mov ecx, 42 - sub ecx, [dwOSDCaretPos] - std - rep movsb - shr eax, 8 - mov esi, [dwBufferPtr] - add esi, [dwOSDCaretPos] - mov [esi], al - inc [dwOSDCaretPos] - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locOSDButtonEvent: ; CODE XREF: seg000:000005A7j - mov eax, 17 - mcall ; Kolibri - GET PRESSED BUTTON - ; Return: ah = button ID - cmp ah, 1 - jnz locNotCloseOSD - jmp locOSDReturnKey -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locCloseOSD: ; CODE XREF: seg000:00000644j - ; seg000:0000066Cj ... - bts [wFlags], 1 - btr [wFlags], 0 - mov eax, -1 - mcall ; Kolibri - FINISH EXECUTION - -locNotCloseOSD: ; CODE XREF: seg000:000006DFj - cmp ah, 2 - jnz locNotSetCaretOSD - mov eax, 37 - mov ebx, 1 - mcall ; Kolibri - GET MOUSE COORDINATES, WINDOW-RELATIVE - ; Return: eax = [x]*65536 + [y] - shr eax, 16 - sub eax, 21 - xor edx, edx - mov ebx, 6 - div ebx - mov [dwOSDCaretPos], eax - call subDrawOpenSaveDlgControls - jmp locOSDWaitForEvent -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -locNotSetCaretOSD: ; CODE XREF: seg000:00000700j - jmp locOSDWaitForEvent - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subOSDDeleteChar ; CODE XREF: seg000:000005F2p - ; seg000:00000612p - mov edi, [dwBufferPtr] - add edi, [dwOSDCaretPos] - mov esi, edi - inc esi - mov ecx, 43 - sub ecx, [dwOSDCaretPos] - cld - rep movsb - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawOpenSaveDlg ; CODE XREF: seg000:subOpenSaveDlgProcp - mov eax, 12 - mov ebx, 1 - mcall ; Kolibri - BEGIN WINDOW REDRAW - xor eax, eax - mov ebx, 64012Ch - mov ecx, 640050h - mov edx, 3780078h - mcall ; Kolibri - DEFINE/DRAW WINDOW - ; ebx = [xstart]*65536+[xsize] - ; ecx = [ystart]*65536+[ysize] - mov eax, 4 - mov ebx, 80008h - mov ecx, 10DDEEFFh - mov edx, [dwEditLabel] - mov esi, [dwEditLabelLen] - mcall ; Kolibri - DRAW STRING - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - call subDrawOpenSaveDlgControls - mov eax, 12 - mov ebx, 2 - mcall ; Kolibri - END WINDOW REDRAW - retn -endp - - -; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ - - -proc subDrawOpenSaveDlgControls ; CODE XREF: seg000:000005CBp - ; seg000:000005E6p ... - pusha - mov eax, 8 - mov ebx, 150102h - mov ecx, 28000Fh - mov edx, 40000002h - mcall ; Kolibri - DEFINE/DELETE BUTTON - ; ebx = [xstart]*65536+[xsize] - ; ecx = [ystart]*65536+[ysize] - ; edx = 0xXYnnnnnn, esi = color - mov eax, 13 - mov edx, 0E0E0E0h - mcall ; Kolibri - DRAW RECTANGLE - ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] - ; edx = 0xRRGGBB or 0x80RRGGBB for gradient - push eax - mov eax, 60000h - mul [dwOSDCaretPos] - add eax, 150006h - mov ebx, eax - pop eax - mov edx, 6A73D0h - mcall ; Kolibri - - mov eax, 4 - mov ebx, 15002Ch - xor ecx, ecx - mov edx, [dwBufferPtr] - mov esi, 43 - mcall ; Kolibri - DRAW STRING - ; ebx = [xstart]*65536+[ystart] - ; ecx = 0xX0RRGGBB, edx -> string - popa - retn -endp - -; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - -dwMainWndSlot dd 0 ; DATA XREF: start:loc_46w start+7Dr -dwBufferPtr dd 0 ; DATA XREF: start+13Cw start+18Bw ... -dwEditLabel dd 0 ; DATA XREF: start+146w start+195w ... -dwEditLabelLen dd 0 ; DATA XREF: start+150w start+19Fw ... -aComment db 'Comment' ; DATA XREF: start+146o -aOpenFile db 'Open file' ; DATA XREF: start+195o - ; seg000:0000064Ao -aSaveAs db 'Save as...' ; DATA XREF: start+1D4o -dwOSDCaretPos dd 0 ; DATA XREF: seg000:000005BBr - ; seg000:000005C6w ... -macro unused { -stFileInfoBlock dd 0 ; DATA XREF: start+5Co - ; seg000:00000658w ... - dd 0 -dwDataSize dd 1 ; DATA XREF: seg000:0000065Ew - ; seg000:00000678w - dd APP_MEM_END+100 - dd APP_MEM_END -aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo -} +.next_test: + xor edi,edi + mcall 26,9 + inc eax + mov ecx,eax + add eax,100 + mov [dwTestEndTime],eax +align 4 +@@: + mcall 26 + cmp eax,ecx + jb @r +align 4 +@@: + push esi + call dword [esi] + pop esi + inc edi + mcall 26,9 + cmp eax,[dwTestEndTime] + jb @b + mov [esi-8],edi + + add esi,TEST_REC_SIZE + cmp dword [esi],0 + jnz .next_test + xor dword [wFlags],1 + mcall -1 +;--------------------------------------------------------------------- +draw_window: + mcall 12,1 + mcall 48,4 + mov ebx,100*65536+72*5+14 + mov ecx,80*65536+TESTS_NUM*LINE_HEIGHT+15+20+35 + add cx,ax + xor eax,eax + xor esi,esi + mcall ,,,34000000h,,aCaption + + mov eax,8 + mov ebx,050036h+12 + mov ecx,5*65536+20 + mov edx,2 + mov esi,0x00007F7F +@@: + mcall + add ebx,72*65536 + inc edx + cmp edx,7 + jb @r + + mov ecx,31 + mov edx,0x00007F7F + mov esi,(72*5)/2 + call drawSeparator + + mcall 4,<27,12>,0x80DDEEFF,aButtonsText + call DrawBars + + mov ecx,TESTS_NUM*LINE_HEIGHT+15+21 + mov edx,0x00007F7F + mov esi,(72*5)/2 + call drawSeparator + mcall 12,2 + ret +;--------------------------------------------------------------------- +drawSeparator: + mov eax,1 + mov ebx,3 +@@: + mcall + add ebx,2 + dec esi + jnz @b + ret +;--------------------------------------------------------------------- +align 4 +testDrawWindow: + xor eax,eax + mcall ,640145h,4F0190h,3000000h + ret +;--------------------------------------------------------------------- +align 4 +testDrawBar: + mcall 13,0A0064h,1E00FAh,6A73D0h + ret +;--------------------------------------------------------------------- +align 4 +testDrawPicture: + xor ebx,ebx + mcall 7,,<90,123>,<15,33> + ret +;--------------------------------------------------------------------- +align 4 +testDrawVertLine: + mcall 38,<300,300>,<30,380>,1090207Fh + ret +;--------------------------------------------------------------------- +align 4 +testDrawHorzLine: + mcall 38,<30,300>,<380,380>,1090207Fh + ret +;--------------------------------------------------------------------- +align 4 +testDrawFreeLine: + mcall 38,<30,300>,<380,30>,1090207Fh + ret +;--------------------------------------------------------------------- +align 4 +testDrawText1: + mcall 4,0C012Ch,0AA66h,aTestText,34 + ret +;--------------------------------------------------------------------- +align 4 +testDrawText2: + mcall 4,1B013Bh,10E7B850h,aTestText,34 + ret +;--------------------------------------------------------------------- +align 4 +testDrawNumber: + mcall 47,80000h,12345678,2A014Ah,0E0B27Bh + ret +;--------------------------------------------------------------------- +align 4 +testDrawPixel: + mcall 1,100,100,0FFFFFFh + ret +;--------------------------------------------------------------------- +DrawBars: + mov edi,results_table + mov ebx,30+7 +.next_result: + cmp dword[edi+TEST_REC_SIZE-4],0 + je .exit + + push ebx + movzx ecx,bx + add ecx,-2 + shl ecx,16 + mov cx,LINE_HEIGHT + mov ebx,0*65536+72*5+5 + xor edx,edx + mcall 13 + pop ebx + + and ebx,0x0000FFFF + or ebx,5*65536 + mov edx,[edi+TEST_REC_SIZE-4] + mcall 4,,0x8000CCCC + + push '=' 0x00FFFF00 0x00FFFF7F 0x00FFFF7F + mov eax,[edi+0] + cmp eax,[edi+4] + je @f + jb .lp1 + mov dword[esp+0],0x007FFF7F + mov dword[esp+4],0x00FF7F7F + mov dword[esp+8],0x0000FF00 + mov byte[esp+12],'>' +.lp1: + ja @f + mov dword[esp+0],0x00FF7F7F + mov dword[esp+4],0x007FFF7F + mov dword[esp+8],0x00FF0000 + mov byte[esp+12],'<' +@@: + pop ecx + call int2str + add ebx,(72*5-6*8*2-6-10-5)*65536 ; 196 + mcall 4,,,textarea,8 + + pop ecx + mov eax,[edi+4] + call int2str + add ebx,(6*8+6+10)*65536 + mcall 4 + + pop ecx + add ebx,(-6-5)*65536 + mov edx,esp + mov esi,1 + mcall + add esp,4 + + add edi,TEST_REC_SIZE + add bx,LINE_HEIGHT + jmp .next_result +.exit: + mov ebx, 0*65536+72*5+5 + mov ecx, (TESTS_NUM*LINE_HEIGHT+15+25)*65536+26 + xor edx, edx + mcall 13 + + mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27) + mcall 4,,0x8000CCCC,aLeft + + add ebx, (6*10)*65536 + mcall ,,0x80FFFF00,comment_string_1 + + mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27+12) + mcall ,,0x8000CCCC,aRight + + add ebx, (6*10)*65536 + mcall ,,0x80FFFF00,comment_string_2 + ret +;--------------------------------------------------------------------- +int2str: + push eax ecx edx edi + mov edi,textarea+7 + mov dword[textarea+0],' ' + mov dword[textarea+4],' ' + mov ecx,10 +@@: + xor edx,edx + div ecx + add dl,'0' + mov [edi],dl + dec edi + or eax,eax + jnz @b + pop edi edx ecx eax + ret +;--------------------------------------------------------------------- +thread_comment: + or dword [wFlags],1 + mcall 40,0x27 + mov esi,comment_string_1 + cld +@@: + lodsb + test al,al + jne @r + sub esi,comment_string_1 + mov eax,esi + dec eax + mov edi, edit1 + mov [edi+48], eax ;ed_size + mov [edi+52], eax ;ed_pos +;--------------------------------------------------------------------- +.red: + call .draw_window +.still: + mcall 10 ; wait here for event + cmp eax,1 ; redraw request ? + je .red + cmp eax,2 ; key in buffer ? + je .key + cmp eax,3 ; button in buffer ? + je .button + + push dword name_editboxes + call [edit_box_mouse] + jmp .still +;--------------------------------------------------------------------- +.key: ; key + mcall 2 + cmp ah,13 + je .close ;.close_with_open_file + cmp ah,27 + je .close + + push dword name_editboxes + call [edit_box_key] + jmp .still +;--------------------------------------------------------------------- +.button: ; button + mcall 17 + cmp ah,1 ; button id=1 ? + jne .still +.close: + xor dword [wFlags],1 + mcall -1 +;--------------------------------------------------------------------- +.draw_window: + mcall 12,1 + xor eax,eax + xor esi,esi + mcall ,<100,300>,<100,80>,0x34780078,,aComment + push dword name_editboxes + call [edit_box_draw] + mcall 12,2 + ret +;--------------------------------------------------------------------- +locLoadFile: + mov [stFileInfoBlock], 0 + or dword [wFlags],1 + mcall 70,stFileInfoBlock + mov esi,mgb_data + mov edi,results_table+4 + cld +@@: + cmp dword[edi+TEST_REC_SIZE-8],0 + je @f + movsd + add edi,TEST_REC_SIZE-4 + jmp @b +@@: + mov edi,comment_string_2 + mov ecx,44 + rep movsb + ret +;--------------------------------------------------------------------- +locSaveFile: + mov [stFileInfoBlock], 2 + or dword [wFlags],1 + mov esi,results_table+4 + mov edi,mgb_data + cld +@@: + cmp dword[esi+TEST_REC_SIZE-8],0 + je @f + movsd + add esi,TEST_REC_SIZE-4 + jmp @b +@@: + mov esi,comment_string_2 + mov ecx,44 + rep movsb + mcall 70,stFileInfoBlock + ret +;--------------------------------------------------------------------- align 4 stFileInfoBlock dd 0,0,0 -dwDataSize dd 1 - dd APP_MEM_END+100 -aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo - - ; start+1CAo ... -wFlags dd 0 ; DATA XREF: start:loc_70w - ; start:loc_87w ... -dwTestEndTime dd 0 ; DATA XREF: subInitTestTimer+14w - ; subIfTimeElapsed+Dr +dwDataSize dd TESTS_NUM*4+44 ;1 + dd mgb_data + db 0 + dd fname_buf +;--------------------------------------------------------------------- +wFlags dd 0 +;--------------------------------------------------------------------- +align 4 results_table dd \ ?,?,testDrawWindow,aDrawingWindow,\ ?,?,testDrawBar,aDrawingBar,\ @@ -1068,17 +543,11 @@ results_table dd \ ?,?,testDrawNumber,aDrawingNumber,\ ?,?,testDrawPixel,aDrawingPixel,\ 0,0,0,0 - +;--------------------------------------------------------------------- LINE_HEIGHT = 13 TEST_REC_SIZE = 16 TESTS_NUM = ($ - results_table) / TEST_REC_SIZE - 1 - -macro cstr name,str { - local ..end - name db ..end-name-1,str - ..end: -} - +;--------------------------------------------------------------------- aDrawingWindow db 'Window Of Type #3, 325x400 px',0 aDrawingBar db 'Filled Rectangle, 100x250 px',0 aDrawingPicture db 'Picture, 55x123, px',0 @@ -1090,28 +559,224 @@ aDrawingText2 db 'Proportional Text, 34 chars',0 aDrawingNumber db 'Decimal Number, 8 digits',0 aDrawingPixel db 'Single Pixel',0 -aTestText db 'This is a 34-charachters test text' ; DATA XREF: seg000:000002ADo - ; seg000:000002DAo +aTestText db 'This is a 34-charachters test text' aButtonsText db 'Test Comment+ Pattern+ Open Save',0 - ; DATA XREF: subDrawMainWindow+5Do -aCaption db 'Menuet Graphical Benchmark 0.3',0 ; DATA XREF: subDrawMainWindow+4Co +aCaption db 'Kolibri Graphical Benchmark 0.4',0 -aLeft db 'Left :',0 -aRight db 'Right :',0 +aLeft db 'Left :',0 +aRight db 'Right :',0 -aComment1 db 'current ' ; DATA XREF: start+13Co - ; subDrawBars+9Co -;dwDrawWindowTime2 dd 0 ; DATA XREF: subSubSavePattern+5o -; ; subDrawBars+18o ... -; dd 0 -; dd 0 -; dd 0 -; dd 0 -; dd 0 -; dd 0 -aComment2 db 'no pattern ' - ; DATA XREF: subDrawBars+72o - ; subDrawBars+B9o -APP_MEM_END: rb 30 ; ; DATA XREF: seg000:off_10o - ; subGetThreadInfo+5o ... -dwMainPID dd ? ; DATA XREF: start+Ar start:loc_3Br +aComment1 db 'current',0 +aComment2 db 'no pattern',0 +aComment db 'Comment',0 +;--------------------------------------------------------------------- +system_dir_Boxlib db '/sys/lib/box_lib.obj',0 +system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 +;--------------------------------------------------------------------- +head_f_i: +head_f_l db 'System error',0 + +err_message_found_lib1 db 'box_lib.obj - Not found!',0 +err_message_found_lib2 db 'proc_lib.obj - Not found!',0 + +err_message_import1 db 'box_lib.obj - Wrong import!',0 +err_message_import2 db 'proc_lib.obj - Wrong import!',0 +;--------------------------------------------------------------------- +align 4 +l_libs_start: + +library01 l_libs system_dir_Boxlib+9, cur_dir_path, library_path, system_dir_Boxlib, \ +err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i + +library02 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ +err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i + +end_l_libs: +;--------------------------------------------------------------------- +align 4 +OpenDialog_data: +.type dd 1 ; Save +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_pach dd temp_dir_pach ;+16 +.dir_default_pach dd communication_area_default_pach ;+20 +.start_path dd open_dialog_path ;+24 +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_pach dd fname_buf ;+36 +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 10 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 10 ;+54 ; Window Y position + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_path: + db '/sys/File Managers/opendial',0 +communication_area_default_pach: + db '/rd0/1/',0 + +Filter: +dd Filter.end - Filter +.1: +db 'MGB',0 +.end: +db 0 + +start_temp_file_name: db 'pattern.mgb',0 + +path4 db '/rd/1/pattern.mgb',0 +;--------------------------------------------------------------------- +align 4 +ProcLib_import: +OpenDialog_Init dd aOpenDialog_Init +OpenDialog_Start dd aOpenDialog_Start +;OpenDialog__Version dd aOpenDialog_Version + dd 0 + dd 0 +aOpenDialog_Init db 'OpenDialog_init',0 +aOpenDialog_Start db 'OpenDialog_start',0 +;aOpenDialog_Version db 'Version_OpenDialog',0 +;--------------------------------------------------------------------- +align 4 +Box_lib_import: +;init_lib dd a_init +;version_lib dd a_version + + +edit_box_draw dd aEdit_box_draw +edit_box_key dd aEdit_box_key +edit_box_mouse dd aEdit_box_mouse +;version_ed dd aVersion_ed + +;check_box_draw dd aCheck_box_draw +;check_box_mouse dd aCheck_box_mouse +;version_ch dd aVersion_ch + +;option_box_draw dd aOption_box_draw +;option_box_mouse dd aOption_box_mouse +;version_op dd aVersion_op + +;scrollbar_ver_draw dd aScrollbar_ver_draw +;scrollbar_ver_mouse dd aScrollbar_ver_mouse +;scrollbar_hor_draw dd aScrollbar_hor_draw +;scrollbar_hor_mouse dd aScrollbar_hor_mouse +;version_scrollbar dd aVersion_scrollbar + +;dinamic_button_draw dd aDbutton_draw +;dinamic_button_mouse dd aDbutton_mouse +;version_dbutton dd aVersion_dbutton + +;menu_bar_draw dd aMenu_bar_draw +;menu_bar_mouse dd aMenu_bar_mouse +;menu_bar_activate dd aMenu_bar_activate +;version_menu_bar dd aVersion_menu_bar + +;FileBrowser_draw dd aFileBrowser_draw +;FileBrowser_mouse dd aFileBrowser_mouse +;FileBrowser_key dd aFileBrowser_key +;Version_FileBrowser dd aVersion_FileBrowser + +;PathShow_prepare dd sz_PathShow_prepare +;PathShow_draw dd sz_PathShow_draw +;Version_path_show dd szVersion_path_show + dd 0 + dd 0 + +;a_init db 'lib_init',0 +;a_version db 'version',0 + +aEdit_box_draw db 'edit_box',0 +aEdit_box_key db 'edit_box_key',0 +aEdit_box_mouse db 'edit_box_mouse',0 +;aVersion_ed db 'version_ed',0 + +;aCheck_box_draw db 'check_box_draw',0 +;aCheck_box_mouse db 'check_box_mouse',0 +;aVersion_ch db 'version_ch',0 + +;aOption_box_draw db 'option_box_draw',0 +;aOption_box_mouse db 'option_box_mouse',0 +;aVersion_op db 'version_op',0 + +;aScrollbar_ver_draw db 'scrollbar_v_draw',0 +;aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 +;aScrollbar_hor_draw db 'scrollbar_h_draw',0 +;aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 +;aVersion_scrollbar db 'version_scrollbar',0 + +;aDbutton_draw db 'dbutton_draw',0 +;aDbutton_mouse db 'dbutton_mouse',0 +;aVersion_dbutton db 'version_dbutton',0 + +;aMenu_bar_draw db 'menu_bar_draw',0 +;aMenu_bar_mouse db 'menu_bar_mouse',0 +;aMenu_bar_activate db 'menu_bar_activate',0 +;aVersion_menu_bar db 'version_menu_bar',0 + +;aFileBrowser_draw db 'FileBrowser_draw',0 +;aFileBrowser_mouse db 'FileBrowser_mouse',0 +;aFileBrowser_key db 'FileBrowser_key',0 +;aVersion_FileBrowser db 'version_FileBrowser',0 + +;sz_PathShow_prepare db 'PathShow_prepare',0 +;sz_PathShow_draw db 'PathShow_draw',0 +;szVersion_path_show db 'version_PathShow',0 +;--------------------------------------------------------------------- +; for EDITBOX +align 4 +name_editboxes: +edit1 edit_box 200,10,30,0xffffff,0xbbddff,0,0,0,255,comment_string_1,mouse_dd,ed_focus+ed_always_focus,0 +name_editboxes_end: +;--------------------------------------------------------------------- + +IM_END: +mouse_dd rd 1 +align 4 +dwTestEndTime dd ? +dwMainPID dd ? +;--------------------------------------------------------------------- +textarea: + rb 8 +;--------------------------------------------------------------------- +comment_string_1: + rb 44 +;--------------------------------------------------------------------- +comment_string_2: + rb 44 +;--------------------------------------------------------------------- +mgb_data: + rb 100 +;--------------------------------------------------------------------- +procinfo: + rb 1024 +;--------------------------------------------------------------------- +cur_dir_path: + rb 4096 +;--------------------------------------------------------------------- +library_path: + rb 4096 +;--------------------------------------------------------------------- +temp_dir_pach: + rb 4096 +;--------------------------------------------------------------------- +fname_buf: + rb 4096 +;--------------------------------------------------------------------- +filename_area: + rb 256 +;--------------------------------------------------------------------- + rb 4096 +thread_stack2: +;--------------------------------------------------------------------- + rb 4096 +thread_stack1: +;--------------------------------------------------------------------- + rb 4096 +stacktop: +I_END: \ No newline at end of file diff --git a/programs/system/mgb/trunk/proc32.inc b/programs/system/mgb/trunk/proc32.inc deleted file mode 100644 index 98a1bd3342..0000000000 --- a/programs/system/mgb/trunk/proc32.inc +++ /dev/null @@ -1,268 +0,0 @@ - -; Macroinstructions for defining and calling procedures - -macro stdcall proc,[arg] ; directly call STDCALL procedure - { common - if ~ arg eq - reverse - pushd arg - common - end if - call proc } - -macro invoke proc,[arg] ; indirectly call STDCALL procedure - { common - if ~ arg eq - reverse - pushd arg - common - end if - call [proc] } - -macro ccall proc,[arg] ; directly call CDECL procedure - { common - size@ccall = 0 - if ~ arg eq - reverse - pushd arg - size@ccall = size@ccall+4 - common - end if - call proc - if size@ccall - add esp,size@ccall - end if } - -macro cinvoke proc,[arg] ; indirectly call CDECL procedure - { common - size@ccall = 0 - if ~ arg eq - reverse - pushd arg - size@ccall = size@ccall+4 - common - end if - call [proc] - if size@ccall - add esp,size@ccall - end if } - -macro proc [args] ; define procedure - { common - match name params, args> - \{ define@proc name, \{ prologue name,flag,parmbytes,localbytes,reglist \} - macro locals - \{ virtual at ebp-localbytes+current - macro label . \\{ deflocal@proc .,:, \\} - struc db [val] \\{ \common deflocal@proc .,db,val \\} - struc dw [val] \\{ \common deflocal@proc .,dw,val \\} - struc dp [val] \\{ \common deflocal@proc .,dp,val \\} - struc dd [val] \\{ \common deflocal@proc .,dd,val \\} - struc dt [val] \\{ \common deflocal@proc .,dt,val \\} - struc dq [val] \\{ \common deflocal@proc .,dq,val \\} - struc rb cnt \\{ deflocal@proc .,rb cnt, \\} - struc rw cnt \\{ deflocal@proc .,rw cnt, \\} - struc rp cnt \\{ deflocal@proc .,rp cnt, \\} - struc rd cnt \\{ deflocal@proc .,rd cnt, \\} - struc rt cnt \\{ deflocal@proc .,rt cnt, \\} - struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \} - macro endl - \{ purge label - restruc db,dw,dp,dd,dt,dq - restruc rb,rw,rp,rd,rt,rq - restruc byte,word,dword,pword,tword,qword - current = $-(ebp-localbytes) - end virtual \} - macro ret operand - \{ match any, operand \\{ retn operand \\} - match , operand \\{ match epilogue:reglist, epilogue@proc: - \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} - macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 - end if \} } - -macro defargs@proc [arg] - { common - if ~ arg eq - forward - local ..arg,current@arg - match argname:type, arg - \{ current@arg equ argname - label ..arg type - argname equ ..arg - if dqword eq type - dd ?,?,?,? - else if tbyte eq type - dd ?,?,? - else if qword eq type | pword eq type - dd ?,? - else - dd ? - end if \} - match =current@arg,current@arg - \{ current@arg equ arg - arg equ ..arg - ..arg dd ? \} - common - args@proc equ current@arg - forward - restore current@arg - common - end if } - -macro deflocal@proc name,def,[val] - { common - match vars, all@vars \{ all@vars equ all@vars, \} - all@vars equ all@vars name - forward - local ..var,..tmp - ..var def val - match =?, val \{ ..tmp equ \} - match any =dup (=?), val \{ ..tmp equ \} - match tmp : value, ..tmp : val - \{ tmp: end virtual - initlocal@proc ..var,def value - virtual at tmp\} - common - match first rest, ..var, \{ name equ first \} } - -macro initlocal@proc name,def - { virtual at name - def - size@initlocal = $ - name - end virtual - position@initlocal = 0 - while size@initlocal > position@initlocal - virtual at name - def - if size@initlocal - position@initlocal < 2 - current@initlocal = 1 - load byte@initlocal byte from name+position@initlocal - else if size@initlocal - position@initlocal < 4 - current@initlocal = 2 - load word@initlocal word from name+position@initlocal - else - current@initlocal = 4 - load dword@initlocal dword from name+position@initlocal - end if - end virtual - if current@initlocal = 1 - mov byte [name+position@initlocal],byte@initlocal - else if current@initlocal = 2 - mov word [name+position@initlocal],word@initlocal - else - mov dword [name+position@initlocal],dword@initlocal - end if - position@initlocal = position@initlocal + current@initlocal - end while } - -macro endp - { purge ret,locals,endl - finish@proc - purge finish@proc - restore regs@proc - match all,args@proc \{ restore all \} - restore args@proc - match all,all@vars \{ restore all \} } - -macro local [var] - { common - locals - forward done@local equ - match varname[count]:vartype, var - \{ match =BYTE, vartype \\{ varname rb count - restore done@local \\} - match =WORD, vartype \\{ varname rw count - restore done@local \\} - match =DWORD, vartype \\{ varname rd count - restore done@local \\} - match =PWORD, vartype \\{ varname rp count - restore done@local \\} - match =QWORD, vartype \\{ varname rq count - restore done@local \\} - match =TBYTE, vartype \\{ varname rt count - restore done@local \\} - match =DQWORD, vartype \\{ label varname dqword - rq count+count - restore done@local \\} - match , done@local \\{ virtual - varname vartype - end virtual - rb count*sizeof.\#vartype - restore done@local \\} \} - match :varname:vartype, done@local:var - \{ match =BYTE, vartype \\{ varname db ? - restore done@local \\} - match =WORD, vartype \\{ varname dw ? - restore done@local \\} - match =DWORD, vartype \\{ varname dd ? - restore done@local \\} - match =PWORD, vartype \\{ varname dp ? - restore done@local \\} - match =QWORD, vartype \\{ varname dq ? - restore done@local \\} - match =TBYTE, vartype \\{ varname dt ? - restore done@local \\} - match =DQWORD, vartype \\{ label varname dqword - dq ?,? - restore done@local \\} - match , done@local \\{ varname vartype - restore done@local \\} \} - match ,done@local - \{ var - restore done@local \} - common - endl }