/kernel/trunk/core/sys32.inc |
---|
581,7 → 581,7 |
mov [esi+WDATA.cl_workarea], eax |
mov [esi+WDATA.cl_titlebar], eax |
mov [esi+WDATA.cl_frames], eax |
mov dword [esi+WDATA.reserved], eax; clear all flags: wstate, redraw, wdrawn |
mov dword [esi+WDATA.z_modif], eax; clear all flags: z_modif, wstate, redraw, wdrawn |
lea edi, [esi-window_data+draw_data] |
mov ecx, 32/4 |
rep stosd |
/kernel/trunk/docs/sysfuncr.txt |
---|
1145,6 → 1145,37 |
видеорежима, иначе функция ничего не изменит. |
====================================================================== |
===================== Функция 18, подфункция 25 ====================== |
======== Управление положением окна относительно других окон. ======== |
====================================================================== |
------------- Подподфункция 1 - получить положение ------------------ |
Параметры: |
* eax = 18 - номер функции |
* ebx = 25 - номер подфункции |
* ecx = 1 - номер подподфункции |
* edx = -1(для текущего окна) или PID приложения |
Возвращаемое значение: |
* eax = одна из констант положения окна |
------------- Подподфункция 2 - установить положение ---------------- |
Параметры: |
* eax = 18 - номер функции |
* ebx = 25 - номер подфункции |
* ecx = 2 - номер подподфункции |
* edx = -1(для текущего окна) или PID приложения |
* esi = новое положение окна (одна из констант ниже) |
Возвращаемое значение: |
* eax = 0 - неудача |
* eax = 1 - успех |
Константы положения окна относительно других окон: |
ZPOS_NORMAL = 0 - обычное |
ZPOS_ALWAYS_BACK = 1 - позади всех окон |
ZPOS_DESKTOP = 2 - на самом заднем плане |
ZPOS_ALWAYS_TOP = 3 - поверх всех окон |
====================================================================== |
==================== Функция 20 - интерфейс MIDI. ==================== |
====================================================================== |
/kernel/trunk/docs/sysfuncs.txt |
---|
1145,6 → 1145,37 |
anything. |
====================================================================== |
===================== Function 18, subfunction 25 ==================== |
===== Control position of the window relative to other windows. ====== |
====================================================================== |
------------- Subsubfunction 1 - get position ----------------------- |
Parameters: |
* eax = 18 - function number |
* ebx = 25 - subfunction number |
* ecx = 1 - subsubfunction number |
* edx = -1(for current window) or PID application |
Returned value: |
* eax = one of the constants window position |
------------- Subsubfunction 2 - set position ----------------------- |
Parameters: |
* eax = 18 - function number |
* ebx = 25 - subfunction number |
* ecx = 2 - subsubfunction number |
* edx = -1(for current window) or PID application |
* esi = new window position (one of the constants below) |
Returned value: |
* eax = 0 - error |
* eax = 1 - success |
Constant position of the window relative to other windows: |
ZPOS_NORMAL = 0 - normal |
ZPOS_ALWAYS_BACK = 1 - behind all the windows |
ZPOS_DESKTOP = 2 - on the background |
ZPOS_ALWAYS_TOP = 3 - on top of all windows |
====================================================================== |
==================== Function 20 - MIDI interface. =================== |
====================================================================== |
/kernel/trunk/gui/window.inc |
---|
486,6 → 486,12 |
pop ecx eax |
ret |
;------------------------------------------------------------------------------ |
iglobal |
win_zmodi db ZPOS_DESKTOP,\ |
ZPOS_ALWAYS_BACK,\ |
ZPOS_NORMAL,\ |
ZPOS_ALWAYS_TOP |
endg |
align 4 |
;------------------------------------------------------------------------------ |
calculatescreen: ;///////////////////////////////////////////////////////////// |
511,12 → 517,21 |
cmp ebp, 1 |
jbe .exit |
push eax ;for num layout |
push edx ecx ebx eax |
mov dword[esp+14], 0 |
;-------------------------------------- |
align 4 |
.layout: |
mov esi, 1 ; = num in window stack |
mov ebp, [TASK_COUNT] |
;-------------------------------------- |
align 4 |
.next_window: |
movzx edi, word[WIN_POS + esi * 2] |
shl edi, 5 |
shl edi, 5 ;size of TASKDATA and WDATA = 32 bytes |
cmp [CURRENT_TASK + edi + TASKDATA.state], TSTATE_FREE |
je .skip_window |
525,6 → 540,11 |
test [edi + WDATA.fl_wstate], WSTATE_MINIMIZED |
jnz .skip_window |
mov eax, [esp+14] |
mov al, [eax+win_zmodi] |
cmp [edi + WDATA.z_modif], al |
jne .skip_window |
mov eax, [edi + WDATA.box.left] |
cmp eax, [esp + RECT.right] |
jg .skip_window |
574,8 → 594,18 |
inc esi |
dec ebp |
jnz .next_window |
;--------------------------------------------- |
inc dword[esp+14] |
cmp dword[esp+14], ZPOS_ALWAYS_TOP |
jbe .layout |
;--------------------------------------------- |
mov esi, [TASK_COUNT] |
movzx edi, word[WIN_POS + esi * 2] |
shl edi, 5 |
add edi, window_data |
pop eax ebx ecx edx |
pop ebp ;del num layout |
;-------------------------------------- |
align 4 |
.exit: |
1028,6 → 1058,9 |
mov edi, [TASK_COUNT] |
movzx esi, word[WIN_POS + edi * 2] |
call window._.set_screen |
call window._.set_top_wnd ;Fantomer |
inc [_display.mask_seqno] |
popad |
1197,6 → 1230,11 |
add ecx, eax |
add edx, ebx |
call ebp |
cmp ebp, window._.set_screen |
jne @f |
call window._.set_top_wnd |
@@: |
inc [_display.mask_seqno] |
;-------------------------------------- |
align 4 |
1379,6 → 1417,9 |
; mov edi, ebx |
; call window._.end_moving__box |
mov edi, ebx |
call window._.draw_negative_box |
mov edi, esi |
shl edi, 5 |
add edi, window_data |
2435,3 → 2476,132 |
mov [ecx+RECT.bottom], edx |
ret |
;------------------------------------------------------------------------------ |
align 4 |
;------------------------------------------------------------------------------ |
window._.set_top_wnd: ;//////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
;? updates all windows one above the window |
;------------------------------------------------------------------------------ |
;> eax = left |
;> ebx = top |
;> ecx = right |
;> edx = bottom |
;> esi = process number |
;! corrupted edi |
;------------------------------------------------------------------------------ |
movzx edi, word[WIN_POS + esi * 2] |
shl edi, 5 |
cmp [edi + window_data + WDATA.z_modif], ZPOS_ALWAYS_TOP |
jne @f |
ret |
@@: |
push esi |
pushfd |
cli |
push ebp |
mov ebp, [TASK_COUNT] |
cmp ebp, 1 |
jbe .exit |
push eax ;for num layout |
push edx ecx ebx eax |
movzx eax, byte [edi + window_data + WDATA.z_modif] |
inc eax |
mov dword[esp+14], eax |
;-------------------------------------- |
align 4 |
.layout: |
mov esi, 1 ; = num in window stack |
mov ebp, [TASK_COUNT] |
;-------------------------------------- |
align 4 |
.next_window: |
movzx edi, word[WIN_POS + esi * 2] |
shl edi, 5 ;size of TASKDATA and WDATA = 32 bytes |
cmp [CURRENT_TASK + edi + TASKDATA.state], TSTATE_FREE |
je .skip_window |
add edi, window_data |
test [edi + WDATA.fl_wstate], WSTATE_MINIMIZED |
jnz .skip_window |
mov eax, [esp+14] |
mov al, [eax+win_zmodi] |
cmp [edi + WDATA.z_modif], al |
jne .skip_window |
mov eax, [edi + WDATA.box.left] |
cmp eax, [esp + RECT.right] |
jg .skip_window |
mov ebx, [edi + WDATA.box.top] |
cmp ebx, [esp + RECT.bottom] |
jg .skip_window |
mov ecx, [edi + WDATA.box.width] |
add ecx, eax |
cmp ecx, [esp + RECT.left] |
jl .skip_window |
mov edx, [edi + WDATA.box.height] |
add edx, ebx |
cmp edx, [esp + RECT.top] |
jl .skip_window |
cmp eax, [esp + RECT.left] |
jae @f |
mov eax, [esp + RECT.left] |
;-------------------------------------- |
align 4 |
@@: |
cmp ebx, [esp + RECT.top] |
jae @f |
mov ebx, [esp + RECT.top] |
;-------------------------------------- |
align 4 |
@@: |
cmp ecx, [esp + RECT.right] |
jbe @f |
mov ecx, [esp + RECT.right] |
;-------------------------------------- |
align 4 |
@@: |
cmp edx, [esp + RECT.bottom] |
jbe @f |
mov edx, [esp + RECT.bottom] |
;-------------------------------------- |
align 4 |
@@: |
push esi |
movzx esi, word[WIN_POS + esi * 2] |
call window._.set_screen |
pop esi |
mov [edi + WDATA.fl_redraw], 1 ;set redraw flag |
;-------------------------------------- |
align 4 |
.skip_window: |
inc esi |
dec ebp |
jnz .next_window |
;-------------------------------------- |
inc dword[esp+14] |
cmp dword[esp+14], ZPOS_ALWAYS_TOP |
jbe .layout |
;------------------------------------- |
pop eax ebx ecx edx |
pop ebp ;del num layout |
;------------------------------------- |
align 4 |
.exit: |
pop ebp |
popfd |
pop esi |
ret |
/kernel/trunk/kernel.asm |
---|
2231,6 → 2231,8 |
dd sysfn_min_rest_window ; 22 = minimize and restore any window |
dd sysfn_min_windows ; 23 = minimize all windows |
dd sysfn_set_screen_sizes ; 24 = set screen sizes for Vesa |
dd sysfn_zmodif ; 25 = get/set window z modifier ;Fantomer |
sysfn_num = ($ - sys_system_table)/4 |
endg |
;------------------------------------------------------------------------------ |
2390,6 → 2392,67 |
.nowindowactivate: |
ret |
;------------------------------------------------------------------------------ |
align 4 ;Fantomer |
sysfn_zmodif: |
;18,25,1 - get z_modif |
;18,25,2 - set z_modif |
;edx = -1(for current task) or TID |
;esi(for 2) = new value z_modif |
;return: |
;1: eax = z_modif |
;2: eax=0(fail),1(success) for set z_modif |
xor eax, eax |
cmp edx, -1 |
jne @f |
mov edx, [CURRENT_TASK] |
@@: |
cmp edx, [TASK_COUNT] |
ja .exit |
cmp edx, 1 |
je .exit |
shl edx, 5 |
cmp [edx + CURRENT_TASK + TASKDATA.state], 9 |
je .exit |
cmp ecx, 1 |
jnz .set_zmod |
mov al, [edx + window_data + WDATA.z_modif] |
jmp .exit |
align 4 |
.set_zmod: |
cmp ecx, 2 |
jnz .exit |
mov eax, esi |
mov esi, edx |
cmp al, ZPOS_ALWAYS_TOP |
ja .exit |
mov [edx + window_data + WDATA.z_modif], al |
mov eax, [edx + window_data + WDATA.box.left] |
mov ebx, [edx + window_data + WDATA.box.top] |
mov ecx, [edx + window_data + WDATA.box.width] |
mov edx, [edx + window_data + WDATA.box.height] |
add ecx, eax |
add edx, ebx |
call window._.set_top_wnd |
mov eax, 1 |
align 4 |
.exit: |
mov [esp+32], eax |
ret |
;------------------------------------------------------------------------------ |
sysfn_getidletime: ; 18.4 = GET IDLETIME |
mov eax, [CURRENT_TASK+32+TASKDATA.cpu_usage] |
mov [esp+32], eax |
/kernel/trunk/kernel32.inc |
---|
76,6 → 76,10 |
TSTATE_WAITING = 5 |
TSTATE_FREE = 9 |
ZPOS_NORMAL = 0 |
ZPOS_ALWAYS_BACK = 1 |
ZPOS_DESKTOP = 2 |
ZPOS_ALWAYS_TOP = 3 ;ZPOS_ALWAYS_TOP is always last and has max number! |
; structures definition |
struct WDATA |
box BOX |
82,7 → 86,7 |
cl_workarea dd ? |
cl_titlebar dd ? |
cl_frames dd ? |
reserved db ? |
z_modif db ? |
fl_wstate db ? |
fl_wdrawn db ? |
fl_redraw db ? |