From 44429327120420fc2197cb5feaa5576a70d02816 Mon Sep 17 00:00:00 2001 From: "Mihail Semenyako (mike.dld)" Date: Wed, 1 Feb 2006 06:07:36 +0000 Subject: [PATCH] changes/improvements in maximize/minimize/rollup windows functionality added functions: 48/5 - get screen workarea 48/6 - set screen workarea git-svn-id: svn://kolibrios.org@41 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/newproce.inc | 2 + kernel/trunk/gui/button.inc | 4 + kernel/trunk/gui/window.inc | 308 +++++++++++++++++++++------------ kernel/trunk/kernel.asm | 131 +++++++------- kernel/trunk/kernel32.inc | 90 ++++++++++ kernel/trunk/video/vesa20.inc | 3 + 6 files changed, 362 insertions(+), 176 deletions(-) diff --git a/kernel/trunk/core/newproce.inc b/kernel/trunk/core/newproce.inc index ee1d856415..4070e80e1f 100644 --- a/kernel/trunk/core/newproce.inc +++ b/kernel/trunk/core/newproce.inc @@ -469,6 +469,8 @@ new_start_application_fl: mov [ecx+8],eax mov eax,[0xfe04] mov [ecx+12],eax +;set window state to 'normal' (non-minimized/maximized/rolled-up) state + mov [ecx+WDATA.fl_wstate],WSTATE_NORMAL ;set cr3 register in TSS of application mov ecx,[new_process_place] shl ecx,8 diff --git a/kernel/trunk/gui/button.inc b/kernel/trunk/gui/button.inc index d0bd2c0938..19007614b1 100644 --- a/kernel/trunk/gui/button.inc +++ b/kernel/trunk/gui/button.inc @@ -501,6 +501,10 @@ checkbuttons: movzx ebx,word [eax+0] shl ebx,5 + + test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED + jnz buttonnewcheck + ; add ebx,window_data ; mov ecx,[window_data+ebx+8] ; window end X movzx edx,word [eax+4] ; button start X diff --git a/kernel/trunk/gui/window.inc b/kernel/trunk/gui/window.inc index f03d3fa30f..67adc20481 100644 --- a/kernel/trunk/gui/window.inc +++ b/kernel/trunk/gui/window.inc @@ -1,3 +1,29 @@ +get_titlebar_height: ; edi = window draw_data pointer + mov al,[edi+WDATA.fl_wstyle] + and al,0x0F + cmp al,0x03 + jne @f + mov eax,[_skinh] + ret + @@: mov eax,21 + ret + +get_rolledup_height: ; edi = window draw_data pointer + mov al,[edi+WDATA.fl_wstyle] + and al,0x0F + cmp al,0x03 + jne @f + mov eax,[_skinh] + add eax,3 + ret + @@: or al,al + jnz @f + mov eax,21 + ret + @@: mov eax,21+2 + ret + + setwindowdefaults: pushad @@ -42,14 +68,14 @@ calculatescreen: movzx edi, word [0xC400 + esi * 2] shl edi, 5 add edi, window_data - mov eax, [edi+0] - mov ebx, [edi+4] - mov ecx, [edi+8] - test ecx, ecx - jz .not_wnd - add ecx, eax - mov edx, [edi+12] - add edx, ebx + test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED + jnz .not_wnd + mov eax,[edi+WDATA.left] + mov ebx,[edi+WDATA.top] + mov ecx,[edi+WDATA.width] + add ecx,eax + mov edx,[edi+WDATA.height] + add edx,ebx push esi movzx esi, word [0xC400 + esi * 2] call setscreen @@ -234,6 +260,14 @@ display_settings: ; eax = 4 ; get skin height ; input : nothing ; output : eax = skin height in pixel +; eax = 5 ; get screen workarea +; input : nothing +; output : eax = [left]*65536+[right] +; ebx = [top]*65536+[bottom] +; eax = 6 ; set screen workarea +; input : ecx = [left]*65536+[right] +; edx = [top]*65536+[bottom] +; output : nothing pushad @@ -245,6 +279,7 @@ display_settings: cmp [windowtypechanged],dword 1 jne dspl00 mov [windowtypechanged],dword 0 + redraw_screen_direct: mov [dlx],dword 0 mov [dly],dword 0 mov eax,[0xfe00] @@ -307,6 +342,67 @@ display_settings: ret no_skin_height: + cmp eax,5 ; get screen workarea + jne no_get_workarea + popad + mov eax,[screen_workarea.left-2] + mov ax,word[screen_workarea.right] + mov [esp+36],eax + mov eax,[screen_workarea.top-2] + mov ax,word[screen_workarea.bottom] + mov [esp+24],eax + ret + no_get_workarea: + + cmp eax,6 ; set screen workarea + jne no_set_workarea + movzx eax,word[esp+16+2] + movzx ebx,word[esp+16] + cmp eax,[0xFE00] + jae .exit + cmp ebx,[0xFE00] + ja .exit + cmp eax,ebx + jae .exit + mov [screen_workarea.left],eax + mov [screen_workarea.right],ebx + movzx eax,word[esp+24+2] + movzx ebx,word[esp+24] + cmp eax,[0xFE04] + jae .exit + cmp ebx,[0xFE04] + ja .exit + cmp eax,ebx + jae .exit + mov [screen_workarea.top],eax + mov [screen_workarea.bottom],ebx + + mov ecx,[0x3004] + mov esi,0x20*2 + dec ecx + @@: test [esi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jz .lp1 + mov eax,[screen_workarea.left] + mov [esi+WDATA.left],eax + sub eax,[screen_workarea.right] + neg eax + mov [esi+WDATA.width],eax + mov eax,[screen_workarea.top] + mov [esi+WDATA.top],eax + test [esi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jnz .lp1 + sub eax,[screen_workarea.bottom] + neg eax + mov [esi+WDATA.height],eax + .lp1: add esi,0x20 + loop @b + call calculatescreen + jmp redraw_screen_direct + .exit: + popad + ret + no_set_workarea: + popad ret @@ -327,6 +423,9 @@ check_window_move_request: shl edi,5 add edi,window_data + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz window_move_return + push dword [edi+0] ; save old coordinates push dword [edi+4] push dword [edi+8] @@ -345,6 +444,10 @@ check_window_move_request: je no_y_reposition mov [edi+4],ebx no_y_reposition: + + test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jnz no_y_resizing + cmp ecx,-1 je no_x_resizing mov [edi+8],ecx @@ -984,8 +1087,8 @@ checkwindows: movzx edi, word [0xC400 + esi * 2] shl edi, 5 add edi, window_data - cmp [edi+12],dword 0 - je .mouse_buttons_pressed + test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED + jnz .mouse_buttons_pressed ; jne .no_activate_request_2 ; .no_activate_request_1: ; cmp [window_minimize],1 @@ -1017,6 +1120,8 @@ checkwindows: mov ebx,edx cmp [window_minimize],1 jge .window_minimize_no_check_mouse + test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED + jnz cwloop movzx eax, word [0xfb0a] movzx ebx, word [0xfb0c] @@ -1063,6 +1168,9 @@ checkwindows: ret .window_move_enabled_for_user: + test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jnz .no_resize_2 + mov [do_resize_from_corner],byte 0 ; resize for skinned window mov edx, [edi+0x10] and edx, 0x0f000000 @@ -1078,23 +1186,12 @@ checkwindows: jmp .continue .no_resize_2: -;// mike.dld [ - mov dl,[edi+0x10+3] - and dl,0x0F - cmp dl,0x03 - jne @f - mov edx, [edi+4] ; check if touch on bar - add edx, [_skinh] - cmp ebx, edx - jae .exit - jmp .continue - @@: -;// mike.dld ] - - mov edx, [edi+4] ; check if touch on bar - add edx, 21 - cmp ebx, edx - jae .exit + push eax + call get_titlebar_height + add eax,[edi+4] + cmp ebx,eax + pop eax + jae .exit .continue: @@ -1111,9 +1208,6 @@ checkwindows: mov cl, [0xfb40] ; save for shade check mov [do_resize], cl - cmp [window_minimize],0 - je no_emulation_righ_button - mov [do_resize], byte 2 no_emulation_righ_button: mov ecx, [edi+0] mov edx, [edi+4] @@ -1157,7 +1251,10 @@ checkwindows: mov word [npye],ax pop eax + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz @f call drawwindowframes + @@: mov [reposition],0 mov [0xfb44],byte 1 ; no reaction to mouse up/down @@ -1192,7 +1289,10 @@ checkwindows: push ax push bx + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz @f call drawwindowframes + @@: mov ax,[0xfe00] mov bx,[0xfe04] @@ -1245,13 +1345,15 @@ checkwindows: mov [npxe],eax nnepx: + call get_titlebar_height + mov ebx,eax movzx eax,word [0xfb0c] cmp eax,[edi+4] jb nnepy sub eax,[edi+4] - cmp eax,23 ; [edx+0x90+12] - jge nnepy2 - mov eax,23 ; [edx+0x90+12] + cmp eax,ebx ; [edx+0x90+12] + jge nnepy2 + mov eax,ebx ; [edx+0x90+12] nnepy2: mov [npye],eax nnepy: @@ -1263,7 +1365,10 @@ checkwindows: pop bx pop ax + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz @f call drawwindowframes + @@: mov esi,[0xfb0a] mov [0xf300],esi @@ -1272,8 +1377,12 @@ checkwindows: cmp [0xfb40],byte 0 jne newchm ; new position done - call drawwindowframes - mov [0xfff5],byte 1 + mov [0xfff5],byte 1 + mov cl,0 + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz @f + mov cl,[reposition] + call drawwindowframes mov eax,[npx] mov [edi+0],eax @@ -1284,6 +1393,8 @@ checkwindows: mov eax,[npye] mov [edi+12],eax + @@: mov [reposition],cl + cmp [reposition],1 ; save new X and Y start jne no_xy_save ; @@ -1310,67 +1421,40 @@ checkwindows: shl edx,8 add edx,0x80000 ; process base at 0x80000+ + cmp [window_minimize],0 + je no_wnd_minimize_restore + mov [reposition],1 + wnd_minimize: + cmp [window_minimize],1 + jne wnd_restore + or [edi+WDATA.fl_wstate],WSTATE_MINIMIZED + jmp no_wnd_minimize_restore + wnd_restore: + cmp [window_minimize],2 + jne no_wnd_minimize_restore + and [edi+WDATA.fl_wstate],not WSTATE_MINIMIZED + no_wnd_minimize_restore: + + cmp [do_resize],2 ; window shade ? - jb no_window_shade + jne no_window_shade mov [reposition],1 - cmp [window_minimize],1 - jge for_window_minimize - cmp [edi+12],dword 23 - jle window_shade_up - jmp for_window_shade - for_window_minimize: - cmp [edi+12],dword 0 - je window_shade_up - for_window_shade: - cmp [window_minimize],0 - je no_window_minimize - cmp [window_minimize],2 - je window_minimize_no_shade_full ;window_shade_up - mov [edi+8],dword 0 ;66 - mov [edi+12],dword 0 ;279 ; on - jmp no_window_shade - no_window_minimize: - mov [edi+12],dword 23 ; on - jmp no_window_shade - window_shade_up: - cmp [window_minimize],1 - jge window_minimize_no_shade_full - mov eax,[edi+0] - add eax,[edi+4] - test eax, eax - je shade_full - push edi - lea esi, [edx + 0x90] - mov ecx,4 - cld - rep movsd - pop edi + test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jnz wnd_rolldown + wnd_rollup: + or [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + call get_rolledup_height + jmp @f + wnd_rolldown: + and [edi+WDATA.fl_wstate],not WSTATE_ROLLEDUP + mov eax,[edx+0x90+BOX.height] + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jz @f + mov eax,[screen_workarea.bottom] + sub eax,[screen_workarea.top] + @@: mov [edi+WDATA.height],eax - window_minimize_no_shade_full: -; mov eax,[edx+0x90] ; off -; mov [edi+0],eax -; mov eax,[edx+0x94] ; off -; mov [edi+4],eax -; mov eax,[edx+0x98] ; off -; mov [edi+8],eax -; mov eax,[edx+0x9C] ; off -; mov [edi+12],eax - - push edi - lea esi, [edx + 0x90] - mov ecx,4 - cld - rep movsd - pop edi - jmp no_window_shade - - shade_full: -; mov eax,[0xfe00] -; mov [edi+8],eax - mov eax,[0xfe04] - sub eax,19 - mov [edi+12],eax no_window_shade: cmp [do_resize],1 ; fullscreen/restore ? @@ -1378,27 +1462,37 @@ checkwindows: cmp [latest_window_touch_delta],dword 50 jg no_fullscreen_restore mov [reposition],1 - mov eax,[edi+12] - add eax,19 - cmp eax,[0xfe04] - je restore_from_fullscreen - mov [edi+0],dword 0 ; set fullscreen - mov [edi+4],dword 0 - mov eax,[0xfe00] - mov [edi+8],eax - mov eax,[0xfe04] - sub eax,19 - mov [edi+12],eax + test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + jnz restore_from_fullscreen + or [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED + mov eax,[screen_workarea.left] + mov [edi+WDATA.left],eax + sub eax,[screen_workarea.right] + neg eax + mov [edi+WDATA.width],eax + mov eax,[screen_workarea.top] + mov [edi+WDATA.top],eax + test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jnz @f + sub eax,[screen_workarea.bottom] + neg eax + mov [edi+WDATA.height],eax + @@: jmp no_fullscreen_restore restore_from_fullscreen: + and [edi+WDATA.fl_wstate],not WSTATE_MAXIMIZED + push [edi+WDATA.height] push edi ; restore -; mov esi,edx -; add esi,0x90 lea esi, [edx + 0x90] mov ecx,4 cld rep movsd pop edi + pop eax + test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP + jz @f + mov [edi+WDATA.height],eax + @@: no_fullscreen_restore: @@ -1452,7 +1546,7 @@ checkwindows: popad - mov [edi+31],byte 1 ; mark first as redraw + mov [edi+WDATA.fl_redraw],1 mov [0xfff5],byte 1 ; no mouse push eax ebx ecx edx @@ -1472,7 +1566,7 @@ checkwindows: waitre2: mov [0xfff5],byte 1 call checkidle - cmp [edi+31],byte 0 + cmp [edi+WDATA.fl_redraw],0 jz retwm loop waitre2 diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 59c05e6152..1cb465c97a 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -60,20 +60,6 @@ twdw equ (0x3000-window_data) use16 org 0x10000 -macro diff16 title,l2 - { - local s,d,l1 - s = l2 - display title,': 0x' - repeat 8 - d = 48 + s shr ((8-%) shl 2) and $0F - if d > 57 - d = d + 65-57-1 - end if - display d - end repeat - display 13,10 - } jmp start_of_code ; mike.dld { @@ -227,7 +213,7 @@ boot_log: ; begin ealex 04.08.05 ; in al,0x61 ; and al,01111111b -; out 0x61,al +; out 0x61,al ; end ealex 04.08.05 .bll1: in al,0x60 ; wait for ESC key press cmp al,129 @@ -275,7 +261,7 @@ B32: ; xor eax,eax mov edi,0x80000 mov ecx,(0x90000-0x80000)/4 -; cld +; cld rep stosd ; CLEAR KERNEL UNDEFINED GLOBALS @@ -304,9 +290,11 @@ B32: movzx eax,word [0x2f0000+0x900A] ; X max dec eax mov [0xfe00],eax + mov [screen_workarea.right],eax movzx eax,word [0x2f0000+0x900C] ; Y max dec eax mov [0xfe04],eax + mov [screen_workarea.bottom],eax movzx eax,word [0x2f0000+0x9008] ; screen mode mov [0xFE0C],eax mov eax,[0x2f0000+0x9014] ; Vesa 1.2 bnk sw add @@ -404,25 +392,25 @@ B32: mov dword [0xFE84], 0xD80000 ; =0x100000*13.5 @@: mov dword [0xFE8C], edi - + ;!!!!!!!!!!!!!!!!!!!!!!!!!! include 'detect/disks.inc' ;!!!!!!!!!!!!!!!!!!!!!!!!!! - + ; CHECK EXTRA REGION ; ENABLE PAGING mov eax,cr0 or eax,0x80000000 mov cr0,eax jmp $+2 - mov dword [0xfe80],0x800000 - -;Set base of graphic segment to linear address of LFB + mov dword [0xfe80],0x800000 + +;Set base of graphic segment to linear address of LFB mov eax,[0xfe80] ; set for gs mov [graph_data_l+2],ax shr eax,16 mov [graph_data_l+4],al - mov [graph_data_l+7],ah + mov [graph_data_l+7],ah ; READ RAMDISK IMAGE FROM HD @@ -476,7 +464,7 @@ include 'vmodeld.inc' mov edi, 1 mov eax, 0x00040000 call display_number - + ; CHECK EXTENDED REGION ; mov dword [0x80000000],0x12345678 ; cmp dword [0x80000000],0x12345678 @@ -485,9 +473,9 @@ include 'vmodeld.inc' ; call boot_log ; jmp $ ;extended_region_found: - + call MEM_Init -;add 0x800000-0xc00000 area +;add 0x800000-0xc00000 area cmp word [0xfe0c],0x13 jle .less_memory mov eax,0x80000000 ;linear address @@ -498,7 +486,7 @@ include 'vmodeld.inc' mov eax,0x80180000 ;linear address mov ebx,0x280000 shr 12 ;size in pages (2.5Mb) mov ecx,0x980000 ;physical address -.end_first_block: +.end_first_block: call MEM_Add_Heap ;nobody can lock mutex yet call create_general_page_table @@ -512,7 +500,7 @@ include 'vmodeld.inc' call MEM_Add_Heap ;init physical memory manager. call Init_Physical_Memory_Manager - + ; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f mov esi,boot_irqs @@ -582,12 +570,12 @@ include 'vmodeld.inc' ; mov cr4,eax ; fail_fpu: -;The CPU to this moment should be already in PM, -;and bit MP of the register cr0 should be installed in 1. -finit ;reset of the FPU (finit, instead of fninit) -fsetpm ;enable PM of the FPU -finit ;reset the registers, contents which are still equal RM -;Now FPU too in PM +;The CPU to this moment should be already in PM, +;and bit MP of the register cr0 should be installed in 1. +finit ;reset of the FPU (finit, instead of fninit) +fsetpm ;enable PM of the FPU +finit ;reset the registers, contents which are still equal RM +;Now FPU too in PM ; DETECT DEVICES mov esi,boot_devices @@ -728,12 +716,12 @@ finit ;reset the registers, contents which are still equal RM cmp al,1 jne no_load_vrr_m mov eax,vrr_m - xor ebx,ebx ; no parameters + xor ebx,ebx ; no parameters xor edx,edx ; no flags call start_application_fl cmp eax,2 ; if vrr_m app found (PID=2) je first_app_found - + no_load_vrr_m: mov eax,firstapp xor ebx,ebx ; no parameters @@ -758,7 +746,7 @@ finit ;reset the registers, contents which are still equal RM ; wait until 8042 is ready ; xor ecx,ecx ; @@: -; in al,64h +; in al,64h ; and al,00000010b ; loopnz @b call Wait8042BufferEmpty @@ -769,7 +757,7 @@ finit ;reset the registers, contents which are still equal RM ; mov al, 111b ; call kb_write ; call kb_read - + mov al, 0xF3 ; set repeat rate & delay call kb_write call kb_read @@ -791,7 +779,7 @@ finit ;reset the registers, contents which are still equal RM mov esi,boot_allirqs call boot_log - + cli ;guarantee forbidance of interrupts. mov al,0 ; unmask all irq's out 0xA1,al @@ -1181,7 +1169,7 @@ set_variables: shr ax,1 mov [0xfb0a],eax pop eax - + mov byte [SB16_Status],0 ; Minazzi Paolo mov [display_data-12],dword 1 ; tiled background mov [0xfe88],dword 0x2C0000 ; address of button list @@ -2064,7 +2052,7 @@ sys_end: mov eax,[0x3010] add eax,0xa mov [eax],byte 3 ; terminate this program - + waitterm: ; wait here for termination mov eax,5 call delay_hs @@ -2075,7 +2063,7 @@ sys_system: cmp eax,1 ; BOOT jnz nosystemboot mov [0x2f0000+0x9030],byte 0 - for_shutdown_parameter: + for_shutdown_parameter: mov eax,[0x3004] add eax,2 mov [shutdown_processes],eax @@ -2098,7 +2086,7 @@ sys_system: shl ebx,5 mov edx,[ebx+0x3000+4] add ebx,0x3000+0xa - + ;call MEM_Heap_Lock ;guarantee that process isn't working with heap mov [ebx],byte 3 ; clear possible i40's ;call MEM_Heap_UnLock @@ -2138,7 +2126,7 @@ sys_system: mov [0xff01],edi ; activate xor eax, eax ret - + nowindowactivate: cmp eax,4 ; GET IDLETIME @@ -2161,7 +2149,7 @@ sys_system: jnz nogetactiveprocess mov eax,[active_process] ret - nogetactiveprocess: + nogetactiveprocess: cmp eax,8 jnz nosoundflag cmp ebx,1 @@ -2173,7 +2161,7 @@ sys_system: jnz nosoundflag inc byte [sound_flag] ; set sound_flag and byte [sound_flag],1 ; - ret + ret nosoundflag: cmp eax,9 ; system shutdown with param jnz noshutdownsystem @@ -2238,14 +2226,14 @@ nogetkey: nogetkernel_id: cmp eax,14 ; sys wait retrace jnz nosys_wait_retrace - ;wait retrace functions - sys_wait_retrace: - mov edx,0x3da - WaitRetrace_loop: - in al,dx - test al,1000b - jz WaitRetrace_loop - mov [esp+36],dword 0 + ;wait retrace functions + sys_wait_retrace: + mov edx,0x3da + WaitRetrace_loop: + in al,dx + test al,1000b + jz WaitRetrace_loop + mov [esp+36],dword 0 ret nosys_wait_retrace: cmp eax,15 ; mouse centered @@ -2259,7 +2247,7 @@ no_mouse_centered: mov eax,[MEM_FreeSpace] shl eax,2 ret -no_get_free_space: +no_get_free_space: cmp eax,17 jnz no_get_all_space mov eax,[0xFE8C] @@ -2267,23 +2255,28 @@ no_get_free_space: ; mov eax,[MEM_AllSpace] ; shl eax,2 ret -no_get_all_space: +no_get_all_space: ret +uglobal +;// mike.dld, 2006-29-01 [ +screen_workarea RECT +;// mike.dld, 2006-29-01 ] window_minimize db 0 sound_flag db 0 last_key_press dd 0 keyboard_mode_sys db 0 +endg -iglobal -version_inf: +iglobal +version_inf: db 0,5,2,9 ; version 0.5.2.9 - db UID_KOLIBRI - db 'Kolibri',0 -version_end: -endg + db UID_KOLIBRI + db 'Kolibri',0 +version_end: +endg -UID_NONE=0 +UID_NONE=0 UID_MENUETOS=1 ;official UID_KOLIBRI=2 ;russian @@ -2337,7 +2330,7 @@ sys_cachetodiskette: call save_image mov [esp+36],dword 0 cmp [FDC_Status],0 - je yes_floppy_save + je yes_floppy_save no_floppy_b_save: mov [esp+36],dword 1 yes_floppy_save: @@ -2965,7 +2958,7 @@ type_background_1: mov [0xfff4],byte 0 temp_nobackgr: ret - + uglobal window_move_pr dd 0x0 window_move_eax dd 0x0 @@ -3112,7 +3105,7 @@ checkmisc: cmp [ctrl_alt_del], 1 jne nocpustart mov eax, cpustring - xor ebx,ebx ; no parameters + xor ebx,ebx ; no parameters xor edx,edx ; no flags call start_application_fl mov [ctrl_alt_del], 0 @@ -4576,11 +4569,11 @@ syscall_startapp: ; StartApp add ebx,[edi] noapppar: ; call start_application_fl - xor edx,edx ; compatibility - flags=0 + xor edx,edx ; compatibility - flags=0 call new_start_application_fl mov [esp+36],eax ret - + align 4 @@ -4612,7 +4605,7 @@ syscall_starthdapp: ; StartHdApp add eax,[edi] add ecx,[edi] xor ebp,ebp - xor edx,edx ; compatibility - flags=0 + xor edx,edx ; compatibility - flags=0 call start_application_hd mov [esp+36],eax ret @@ -4951,5 +4944,5 @@ IncludeIGlobals endofcode: IncludeUGlobals uglobals_size = $ - endofcode -diff16 "end of kernel code",$ +diff16 "end of kernel code",0,$ diff --git a/kernel/trunk/kernel32.inc b/kernel/trunk/kernel32.inc index a042b5511c..38872acabb 100644 --- a/kernel/trunk/kernel32.inc +++ b/kernel/trunk/kernel32.inc @@ -29,6 +29,96 @@ macro struct_helper name ends fix } struct_helper name@struct +;// mike.dld, 2006-29-01 [ + +; macros definition +macro diff16 title,l1,l2 +{ + local s,d + s = l2-l1 + display title,': 0x' + repeat 8 + d = 48 + s shr ((8-%) shl 2) and $0F + if d > 57 + d = d + 65-57-1 + end if + display d + end repeat + display 13,10 +} + +struc db [a] { common . db a + if ~used . + display 'not used db: ',`.,13,10 + end if } +struc dw [a] { common . dw a + if ~used . + display 'not used dw: ',`.,13,10 + end if } +struc dd [a] { common . dd a + if ~used . + display 'not used dd: ',`.,13,10 + end if } +struc dp [a] { common . dp a + if ~used . + display 'not used dp: ',`.,13,10 + end if } +struc dq [a] { common . dq a + if ~used . + display 'not used dq: ',`.,13,10 + end if } +struc dt [a] { common . dt a + if ~used . + display 'not used dt: ',`.,13,10 + end if } + +; constants definition +WSTATE_NORMAL = 00000000b +WSTATE_MAXIMIZED = 00000001b +WSTATE_MINIMIZED = 00000010b +WSTATE_ROLLEDUP = 00000100b + +; structures definition +struc WDATA { + .left dd ? + .top dd ? + .width dd ? + .height dd ? + .cl_workarea dd ? + .cl_titlebar dd ? + .cl_frames dd ? + .reserved db ? + .fl_wstate db ? + .fl_wdrawn db ? + .fl_redraw db ? +} +virtual at 0 + WDATA WDATA +end virtual +label WDATA.fl_wstyle byte at 0x13 ; WDATA.cl_workarea+3 + +struc RECT { + .left dd ? + .top dd ? + .right dd ? + .bottom dd ? +} +virtual at 0 + RECT RECT +end virtual + +struc BOX { + .left dd ? + .top dd ? + .width dd ? + .height dd ? +} +virtual at 0 + BOX BOX +end virtual + +;// mike.dld, 2006-29-01 ] + ; Core functions include "core/sync.inc" diff --git a/kernel/trunk/video/vesa20.inc b/kernel/trunk/video/vesa20.inc index b81ac0be2b..74ecd94be9 100644 --- a/kernel/trunk/video/vesa20.inc +++ b/kernel/trunk/video/vesa20.inc @@ -599,7 +599,9 @@ vesa20_drawbar: mov [drbar.color], edi sub edx, ebx + jle .exit ;// mike.dld, 2005-01-29 sub ecx, eax + jle .exit ;// mike.dld, 2005-01-29 mov [drbar.bar_sy], edx mov [drbar.bar_sx], ecx @@ -616,6 +618,7 @@ vesa20_drawbar: mov ebx, [edi-twdw + 8] ; ebx = wnd_sx sub ebx, [drbar.bar_cx] ja @f + .exit: ;// mike.dld, 2005-01-29 add esp, drbar.stack_data popad xor eax, eax