52,18 → 52,16 |
; type I - original style |
call drawwindow_I |
jmp window._.draw_window_caption.2 |
;-------------------------------------- |
align 4 |
|
@@: |
dec al |
jnz @f |
|
; type II - only reserve area, no draw |
; call sys_window_mouse |
call sys_window_mouse |
call [draw_pointer] |
jmp .exit |
;-------------------------------------- |
align 4 |
|
@@: |
dec al |
jnz @f |
73,8 → 71,6 |
jmp window._.draw_window_caption.2 |
|
; type IV & V - skinned window (resizable & not) |
;-------------------------------------- |
align 4 |
@@: |
mov eax, [TASK_COUNT] |
movzx eax, word[WIN_POS + eax * 2] |
84,11 → 80,10 |
push eax |
call drawwindow_IV |
jmp window._.draw_window_caption.2 |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
syscall_display_settings: ;///// system function 48 /////////////////////////// |
137,11 → 132,10 |
cmp ebx, .sizeof.ftable / 4 |
ja @f |
jmp [.ftable + ebx * 4] |
;-------------------------------------- |
align 4 |
@@: |
ret |
;------------------------------------------------------------------------------ |
|
|
align 4 |
syscall_display_settings.00: |
xor eax, eax |
151,11 → 145,10 |
mov [windowtypechanged], eax |
|
jmp syscall_display_settings._.redraw_whole_screen |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.01: |
and ecx, 1 |
163,11 → 156,10 |
je .exit |
mov [buttontype], ecx |
mov [windowtypechanged], ebx |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.02: |
dec ebx |
178,7 → 170,7 |
rep movsb |
mov [windowtypechanged], ebx |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.03: |
mov edi, ecx |
187,13 → 179,13 |
mov ecx, edx |
rep movsb |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.04: |
mov eax, [_skinh] |
mov [esp + 32], eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.05: |
mov eax, [screen_workarea.left - 2] |
203,7 → 195,7 |
mov ax, word[screen_workarea.bottom] |
mov [esp + 20], eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.06: |
xor esi, esi |
218,19 → 210,14 |
or eax, eax |
jge @f |
xor eax, eax |
;-------------------------------------- |
align 4 |
@@: |
mov [screen_workarea.left], eax |
cmp ebx, edi |
jle @f |
mov ebx, edi |
;-------------------------------------- |
align 4 |
@@: |
mov [screen_workarea.right], ebx |
;-------------------------------------- |
align 4 |
|
.check_horizontal: |
mov edi, [Screen_Max_Y] |
mov eax, edx |
242,19 → 229,14 |
or eax, eax |
jge @f |
xor eax, eax |
;-------------------------------------- |
align 4 |
@@: |
mov [screen_workarea.top], eax |
cmp ebx, edi |
jle @f |
mov ebx, edi |
;-------------------------------------- |
align 4 |
@@: |
mov [screen_workarea.bottom], ebx |
;-------------------------------------- |
align 4 |
|
.check_if_redraw_needed: |
or esi, esi |
jz .exit |
261,11 → 243,10 |
|
call repos_windows |
jmp syscall_display_settings._.calculate_whole_screen |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.07: |
mov eax, [_skinmargins + 0] |
273,7 → 254,7 |
mov eax, [_skinmargins + 4] |
mov [esp + 20], eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
syscall_display_settings.08: |
mov ebx, ecx |
284,12 → 265,10 |
|
call syscall_display_settings._.calculate_whole_screen |
jmp syscall_display_settings._.redraw_whole_screen |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
align 4 |
|
syscall_display_settings._.calculate_whole_screen: |
xor eax, eax |
xor ebx, ebx |
296,8 → 275,7 |
mov ecx, [Screen_Max_X] |
mov edx, [Screen_Max_Y] |
jmp calculatescreen |
;------------------------------------------------------------------------------ |
align 4 |
|
syscall_display_settings._.redraw_whole_screen: |
xor eax, eax |
mov [draw_limits.left], eax |
308,7 → 286,7 |
mov [draw_limits.bottom], eax |
mov eax, window_data |
jmp redrawscreen |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
syscall_set_window_shape: ;///// system function 50 /////////////////////////// |
326,17 → 304,15 |
test ebx, ebx |
jne .shape_scale |
mov [edi + APPDATA.wnd_shape], ecx |
;-------------------------------------- |
align 4 |
|
.shape_scale: |
dec ebx |
jnz .exit |
mov [edi + APPDATA.wnd_shape_scale], ecx |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
syscall_move_window: ;///// system function 67 //////////////////////////////// |
356,26 → 332,19 |
cmp ebx, -1 |
jne @f |
mov ebx, [edi + WDATA.box.left] |
;-------------------------------------- |
align 4 |
@@: |
cmp ecx, -1 |
jne @f |
mov ecx, [edi + WDATA.box.top] |
;-------------------------------------- |
align 4 |
@@: |
cmp edx, -1 |
jne @f |
mov edx, [edi + WDATA.box.width] |
;-------------------------------------- |
align 4 |
@@: |
cmp esi, -1 |
jne @f |
mov esi, [edi + WDATA.box.height] |
;-------------------------------------- |
align 4 |
|
@@: |
push esi edx ecx ebx |
mov eax, esp |
390,11 → 359,10 |
|
; NOTE: do we really need this? to be reworked |
; call [draw_pointer] |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
syscall_window_settings: ;///// system function 71 ///////////////////////////// |
423,13 → 391,12 |
; jnz .exit_fail |
|
; not implemented yet |
;-------------------------------------- |
align 4 |
|
.exit_fail: |
xor eax, eax |
inc eax ; eax = 1 (fail) |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
set_window_defaults: ;///////////////////////////////////////////////////////// |
440,8 → 407,6 |
push eax ecx |
xor eax, eax |
mov ecx, WIN_STACK |
;-------------------------------------- |
align 4 |
@@: |
inc eax |
add ecx, 2 |
453,7 → 418,7 |
jne @b |
pop ecx eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
calculatescreen: ;///////////////////////////////////////////////////////////// |
480,8 → 445,7 |
jbe .exit |
|
push edx ecx ebx eax |
;-------------------------------------- |
align 4 |
|
.next_window: |
movzx edi, word[WIN_POS + esi * 2] |
shl edi, 5 |
511,33 → 475,25 |
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 |
;-------------------------------------- |
align 4 |
|
.skip_window: |
inc esi |
dec ebp |
544,14 → 500,13 |
jnz .next_window |
|
pop eax ebx ecx edx |
;-------------------------------------- |
align 4 |
|
.exit: |
pop ebp |
popfd |
pop esi |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
repos_windows: ;/////////////////////////////////////////////////////////////// |
563,8 → 518,7 |
call force_redraw_background |
dec ecx |
jle .exit |
;-------------------------------------- |
align 4 |
|
.next_window: |
mov [edi + WDATA.fl_redraw], 1 |
test [edi + WDATA.fl_wstate], WSTATE_MAXIMIZED |
579,13 → 533,10 |
sub eax, ebx |
jle @f |
mov [edi + WDATA.box.width], ebx |
;-------------------------------------- |
align 4 |
@@: |
sub ebx, [edi + WDATA.box.width] |
mov [edi + WDATA.box.left], ebx |
;-------------------------------------- |
align 4 |
|
.fix_vertical: |
mov eax, [edi + WDATA.box.top] |
add eax, [edi + WDATA.box.height] |
596,23 → 547,11 |
sub eax, ebx |
jle @f |
mov [edi + WDATA.box.height], ebx |
;-------------------------------------- |
align 4 |
@@: |
sub ebx, [edi + WDATA.box.height] |
mov [edi + WDATA.box.top], ebx |
;-------------------------------------- |
align 4 |
.fix_client_box: |
call window._.set_window_clientbox |
add edi, sizeof.WDATA |
loop .next_window |
;-------------------------------------- |
align 4 |
.exit: |
ret |
;-------------------------------------- |
align 4 |
jmp .fix_client_box |
|
.fix_maximized: |
mov eax, [screen_workarea.left] |
mov [edi + WDATA.box.left], eax |
626,12 → 565,20 |
sub eax, [screen_workarea.bottom] |
neg eax |
mov [edi + WDATA.box.height], eax |
jmp .fix_client_box |
|
.fix_client_box: |
call window._.set_window_clientbox |
|
add edi, sizeof.WDATA |
loop .next_window |
|
.exit: |
ret |
|
align 4 |
;------------------------------------------------------------------------------ |
;align 4 |
sys_window_mouse: ;//////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
;sys_window_mouse: ;//////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
;? <description> |
;------------------------------------------------------------------------------ |
; NOTE: commented out since doesn't provide necessary functionality |
649,8 → 596,8 |
; |
; .exit: |
; pop eax |
; ret |
;------------------------------------------------------------------------------ |
ret |
|
align 4 |
;------------------------------------------------------------------------------ |
draw_rectangle: ;////////////////////////////////////////////////////////////// |
665,13 → 612,13 |
push eax ebx ecx edi |
|
xor edi, edi |
;-------------------------------------- |
align 4 |
|
.flags_set: |
push ebx |
|
; set line color |
mov ecx, esi |
; sub esi, 1 shl 25 |
; draw top border |
rol ebx, 16 |
push ebx |
681,8 → 628,6 |
jnz @f |
sub ecx, 1 shl 25 |
call [draw_line] |
;-------------------------------------- |
align 4 |
@@: |
; draw bottom border |
mov ebx, [esp - 2] |
706,14 → 651,13 |
|
pop edi ecx ebx eax |
ret |
;-------------------------------------- |
align 4 |
|
.forced: |
push eax ebx ecx edi |
xor edi, edi |
inc edi |
jmp .flags_set |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
drawwindow_I_caption: ;//////////////////////////////////////////////////////// |
732,14 → 676,11 |
cmp ebx, eax |
jbe @f |
mov ebx, eax |
;-------------------------------------- |
align 4 |
@@: |
push ebx |
|
xor edi, edi |
;-------------------------------------- |
align 4 |
|
.next_line: |
mov ebx, edx |
shl ebx, 16 |
755,8 → 696,6 |
jz @f |
sub ecx, 0x00040404 |
mov [esi + WDATA.cl_titlebar], ecx |
;-------------------------------------- |
align 4 |
@@: |
and ecx, 0x00ffffff |
call [draw_line] |
767,7 → 706,7 |
add esp, 4 |
pop [esi + WDATA.cl_titlebar] |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
drawwindow_I: ;//////////////////////////////////////////////////////////////// |
813,12 → 752,11 |
mov ecx, [esi + WDATA.box.width] |
mov edx, [esi + WDATA.box.height] |
call [drawbar] |
;-------------------------------------- |
align 4 |
|
.exit: |
popad |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
drawwindow_III_caption: ;///////////////////////////////////////////////////// |
838,14 → 776,11 |
cmp ebx, eax |
jb @f |
mov ebx, eax |
;-------------------------------------- |
align 4 |
@@: |
push ebx |
|
xor edi, edi |
;-------------------------------------- |
align 4 |
|
.next_line: |
mov ebx, edx |
shl ebx, 16 |
859,14 → 794,10 |
test ecx, 0x40000000 |
jz @f |
add ecx, 0x00040404 |
;-------------------------------------- |
align 4 |
@@: |
test ecx, 0x80000000 |
jz @f |
sub ecx, 0x00040404 |
;-------------------------------------- |
align 4 |
@@: |
mov [esi + WDATA.cl_titlebar], ecx |
and ecx, 0x00ffffff |
878,7 → 809,7 |
add esp, 4 |
pop [esi + WDATA.cl_titlebar] |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
drawwindow_III: ;////////////////////////////////////////////////////////////// |
910,8 → 841,7 |
mov ecx, 3 |
mov esi, [edx + WDATA.cl_frames] |
or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line |
;-------------------------------------- |
align 4 |
|
.next_frame: |
add eax, 1 * 65536 - 1 |
add ebx, 0 * 65536 - 1 |
951,12 → 881,11 |
sub ecx, 4 |
sub edx, 4 |
call [drawbar] |
;-------------------------------------- |
align 4 |
|
.exit: |
popad |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
waredraw: ;//////////////////////////////////////////////////////////////////// |
1004,8 → 933,7 |
mov [edi + WDATA.fl_redraw], 1 |
xor eax, eax |
jmp .exit |
;-------------------------------------- |
align 4 |
|
.do_not_draw: |
; no it's not, just activate the window |
call window._.window_activate |
1012,13 → 940,13 |
xor eax, eax |
mov byte[MOUSE_BACKGROUND], al |
mov byte[DONT_DRAW_MOUSE], al |
;-------------------------------------- |
align 4 |
|
|
.exit: |
mov byte[MOUSE_DOWN], 0 |
inc eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
minimize_window: ;///////////////////////////////////////////////////////////// |
1058,13 → 986,12 |
call redrawscreen |
|
pop esi edx ecx ebx eax |
;-------------------------------------- |
align 4 |
|
.exit: |
popfd |
pop edi |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
restore_minimized_window: ;//////////////////////////////////////////////////// |
1092,8 → 1019,6 |
cmp eax, [TASK_COUNT] |
jz @f |
mov ebp, calculatescreen |
;-------------------------------------- |
align 4 |
@@: |
mov eax, [edi + WDATA.box.left] |
mov ebx, [edi + WDATA.box.top] |
1104,13 → 1029,12 |
call ebp |
|
mov byte[MOUSE_BACKGROUND], 0 |
;-------------------------------------- |
align 4 |
|
.exit: |
popfd |
popad |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
; TODO: remove this proc |
;------------------------------------------------------------------------------ |
1130,15 → 1054,13 |
jnz @f |
call minimize_window |
jmp .exit |
;-------------------------------------- |
align 4 |
|
@@: |
call restore_minimized_window |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
sys_window_maximize_handler: ;///////////////////////////////////////////////// |
1175,8 → 1097,7 |
sub [esp + BOX.height], ecx |
mov eax, esp |
jmp .set_box |
;-------------------------------------- |
align 4 |
|
.restore_size: |
mov eax, esi |
shl eax, 8 |
1186,8 → 1107,7 |
[eax + BOX.top] \ |
[eax + BOX.left] |
mov eax, esp |
;-------------------------------------- |
align 4 |
|
.set_box: |
test bl, WSTATE_ROLLEDUP |
jz @f |
1196,16 → 1116,14 |
call window._.get_rolledup_height |
mov [ecx + BOX.height], eax |
xchg eax, ecx |
;-------------------------------------- |
align 4 |
|
@@: |
call window._.set_window_box |
add esp, sizeof.BOX |
;-------------------------------------- |
align 4 |
|
.exit: |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
sys_window_rollup_handler: ;/////////////////////////////////////////////////// |
1233,8 → 1151,7 |
[edi + WDATA.box.left] |
mov eax, esp |
jmp .set_box |
;-------------------------------------- |
align 4 |
|
.restore_size: |
test bl, WSTATE_MAXIMIZED |
jnz @f |
1241,8 → 1158,7 |
add esp, -sizeof.BOX |
lea eax, [edx + APPDATA.saved_box] |
jmp .set_box |
;-------------------------------------- |
align 4 |
|
@@: |
mov eax, [screen_workarea.top] |
push [screen_workarea.bottom] \ |
1251,13 → 1167,13 |
[edi + WDATA.box.left] |
sub [esp + BOX.height], eax |
mov eax, esp |
;-------------------------------------- |
align 4 |
|
.set_box: |
call window._.set_window_box |
add esp, sizeof.BOX |
|
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
sys_window_start_moving_handler: ;///////////////////////////////////////////// |
1269,8 → 1185,9 |
;------------------------------------------------------------------------------ |
mov edi, eax |
call window._.draw_negative_box |
|
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
sys_window_end_moving_handler: ;/////////////////////////////////////////////// |
1292,7 → 1209,7 |
mov bl, [edi + WDATA.fl_wstate] |
call window._.set_window_box |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
sys_window_moving_handler: ;/////////////////////////////////////////////////// |
1308,6 → 1225,7 |
mov edi, ebx |
call window._.draw_negative_box |
ret |
|
;============================================================================== |
;///// private functions ////////////////////////////////////////////////////// |
;============================================================================== |
1330,7 → 1248,7 |
; to be reworked |
; new_window_starting dd ? |
;endg |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.invalidate_screen: ;////////////////////////////////////////////////// |
1350,8 → 1268,6 |
cmp ecx, edx |
jle @f |
mov ecx, edx |
;-------------------------------------- |
align 4 |
@@: |
mov [draw_limits.left], ecx |
mov ecx, [eax + BOX.left] |
1360,8 → 1276,6 |
cmp ecx, edx |
jae @f |
mov ecx, edx |
;-------------------------------------- |
align 4 |
@@: |
mov [draw_limits.right], ecx |
mov ecx, [eax + BOX.top] |
1369,8 → 1283,6 |
cmp ecx, edx |
jle @f |
mov ecx, edx |
;-------------------------------------- |
align 4 |
@@: |
mov [draw_limits.top], ecx |
mov ecx, [eax + BOX.top] |
1379,10 → 1291,9 |
cmp ecx, edx |
jae @f |
mov ecx, edx |
;-------------------------------------- |
align 4 |
@@: |
mov [draw_limits.bottom], ecx |
|
; recalculate screen buffer at old position |
push ebx |
mov edx, [eax + BOX.height] |
1393,6 → 1304,7 |
add edx, ebx |
call calculatescreen |
pop eax |
|
; recalculate screen buffer at new position |
mov edx, [eax + BOX.height] |
mov ecx, [eax + BOX.width] |
1410,7 → 1322,7 |
|
pop ebx eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.set_window_box: ;///////////////////////////////////////////////////// |
1435,10 → 1347,10 |
repz cmpsd |
pop edi |
jz .exit |
;-------------------------------------- |
align 4 |
@@: |
|
add esp, -sizeof.BOX |
|
mov ebx, esp |
if WDATA.box |
lea esi, [edi + WDATA.box] |
1487,12 → 1399,11 |
jnz .exit |
|
mov [eax + APPDATA.saved_box.height], edx |
;-------------------------------------- |
align 4 |
|
.exit: |
pop esi ebx eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.set_window_clientbox: ;/////////////////////////////////////////////// |
1533,8 → 1444,7 |
mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.height], eax |
add esp, 4 |
jmp .exit |
;-------------------------------------- |
align 4 |
|
.whole_window: |
xor eax, eax |
mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.left], eax |
1543,12 → 1453,11 |
mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.width], eax |
mov eax, [ecx + WDATA.box.height] |
mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.height], eax |
;-------------------------------------- |
align 4 |
|
.exit: |
pop edi ecx eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.sys_set_window: ;///////////////////////////////////////////////////// |
1607,8 → 1516,7 |
je @f |
|
xor eax, eax |
;-------------------------------------- |
align 4 |
|
@@: |
mov [edi + APPDATA.wnd_caption], eax |
|
1636,8 → 1544,7 |
|
mov byte[KEY_COUNT], 0 ; empty keyboard buffer |
mov byte[BTN_COUNT], 0 ; empty button buffer |
;-------------------------------------- |
align 4 |
|
.set_client_box: |
; update window client box coordinates |
call window._.set_window_clientbox |
1646,7 → 1553,7 |
mov [edi + WDATA.fl_redraw], 0 |
mov edx, edi |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.check_window_position: ;////////////////////////////////////////////// |
1665,8 → 1572,7 |
mov esi, [Screen_Max_X] |
cmp ecx, esi |
ja .fix_width_high |
;-------------------------------------- |
align 4 |
|
.check_left: |
or eax, eax |
jl .fix_left_low |
1673,14 → 1579,12 |
add eax, ecx |
cmp eax, esi |
jg .fix_left_high |
;-------------------------------------- |
align 4 |
|
.check_height: |
mov esi, [Screen_Max_Y] |
cmp edx, esi |
ja .fix_height_high |
;-------------------------------------- |
align 4 |
|
.check_top: |
or ebx, ebx |
jl .fix_top_low |
1687,50 → 1591,43 |
add ebx, edx |
cmp ebx, esi |
jg .fix_top_high |
;-------------------------------------- |
align 4 |
|
.exit: |
pop esi edx ecx ebx eax |
ret |
;-------------------------------------- |
align 4 |
|
.fix_width_high: |
mov ecx, esi |
mov [edi + WDATA.box.width], esi |
jmp .check_left |
;-------------------------------------- |
align 4 |
|
.fix_left_low: |
xor eax, eax |
mov [edi + WDATA.box.left], eax |
jmp .check_height |
;-------------------------------------- |
align 4 |
|
.fix_left_high: |
mov eax, esi |
sub eax, ecx |
mov [edi + WDATA.box.left], eax |
jmp .check_height |
;-------------------------------------- |
align 4 |
|
.fix_height_high: |
mov edx, esi |
mov [edi + WDATA.box.height], esi |
jmp .check_top |
;-------------------------------------- |
align 4 |
|
.fix_top_low: |
xor ebx, ebx |
mov [edi + WDATA.box.top], ebx |
jmp .exit |
;-------------------------------------- |
align 4 |
|
.fix_top_high: |
mov ebx, esi |
sub ebx, edx |
mov [edi + WDATA.box.top], ebx |
jmp .exit |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.get_titlebar_height: ;//////////////////////////////////////////////// |
1745,12 → 1642,10 |
jne @f |
mov eax, [_skinh] |
ret |
;-------------------------------------- |
align 4 |
@@: |
mov eax, 21 |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.get_rolledup_height: ;//////////////////////////////////////////////// |
1766,19 → 1661,15 |
mov eax, [_skinh] |
add eax, 3 |
ret |
;-------------------------------------- |
align 4 |
@@: |
or al, al |
jnz @f |
mov eax, 21 |
ret |
;-------------------------------------- |
align 4 |
@@: |
mov eax, 21 + 2 |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.set_screen: ;///////////////////////////////////////////////////////// |
1810,8 → 1701,7 |
jnz .check_for_shaped_window |
cmp [window_data + edi + WDATA.box.height], 0 |
jz .exit |
;-------------------------------------- |
align 4 |
|
.check_for_shaped_window: |
mov edi, esi |
shl edi, 8 |
1838,8 → 1728,7 |
push ax |
shl eax, 16 |
pop ax |
;-------------------------------------- |
align 4 |
|
.next_line: |
push ecx |
shr ecx, 2 |
1854,8 → 1743,7 |
jnz .next_line |
|
jmp .exit |
;-------------------------------------- |
align 4 |
|
.shaped_window: |
; for (y=0; y <= x_size; y++) |
; for (x=0; x <= x_size; x++) |
1903,12 → 1791,10 |
add [ff_ysz], ebx |
|
mov ebx, [ff_y] |
;-------------------------------------- |
align 4 |
|
.ff_new_y: |
mov edx, [ff_x] |
;-------------------------------------- |
align 4 |
|
.ff_new_x: |
; -- body -- |
mov ecx, [ff_scale] |
1928,8 → 1814,6 |
mov eax, esi |
mov [ebp], al |
; -- end body -- |
;-------------------------------------- |
align 4 |
@@: |
inc ebp |
inc edx |
1945,13 → 1829,11 |
jb .ff_new_y |
|
add esp, 24 |
;-------------------------------------- |
align 4 |
|
.exit: |
popad |
ret |
;-------------------------------------- |
align 4 |
|
.read_byte: |
; eax - address |
; esi - slot |
1962,7 → 1844,7 |
call read_process_memory |
pop esi edx ecx eax |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.window_activate: ;//////////////////////////////////////////////////// |
1987,12 → 1869,10 |
je .set_window_redraw_flag |
cmp al, 0x04 |
jne .move_others_down |
;-------------------------------------- |
align 4 |
|
.set_window_redraw_flag: |
mov [window_data + ebx + WDATA.fl_redraw], 1 |
;-------------------------------------- |
align 4 |
|
.move_others_down: |
; ax <- process no |
movzx ebx, word[esi] |
2001,8 → 1881,7 |
|
; drop others |
xor eax, eax |
;-------------------------------------- |
align 4 |
|
.next_stack_window: |
cmp eax, [TASK_COUNT] |
jae .move_self_up |
2018,8 → 1897,7 |
jbe .next_stack_window |
dec word[WIN_STACK + eax * 2] |
jmp .next_stack_window |
;-------------------------------------- |
align 4 |
|
.move_self_up: |
movzx ebx, word[esi] |
; number of processes |
2029,8 → 1907,7 |
|
; update on screen - window stack |
xor eax, eax |
;-------------------------------------- |
align 4 |
|
.next_window_pos: |
cmp eax, [TASK_COUNT] |
jae .reset_vars |
2038,8 → 1915,7 |
movzx ebx, word[WIN_STACK + eax * 2] |
mov [WIN_POS + ebx * 2], ax |
jmp .next_window_pos |
;-------------------------------------- |
align 4 |
|
.reset_vars: |
mov byte[KEY_COUNT], 0 |
mov byte[BTN_COUNT], 0 |
2048,6 → 1924,7 |
|
pop ebx eax |
ret |
|
;------------------------------------------------------------------------------ |
window._.window_deactivate: ;//////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
2056,8 → 1933,7 |
;> esi = pointer to WIN_POS+ window data |
;------------------------------------------------------------------------------ |
push eax ebx |
;-------------------------------------- |
align 4 |
;------------------------------------------------------------------------------ |
.move_others_up: |
; ax <- process no |
movzx ebx, word[esi] |
2065,8 → 1941,6 |
movzx ebx, word[WIN_STACK + ebx * 2] |
; up others |
xor eax, eax |
;-------------------------------------- |
align 4 |
.next_stack_window: |
cmp eax, [TASK_COUNT] |
jae .move_self_down |
2075,8 → 1949,7 |
jae .next_stack_window |
inc word[WIN_STACK + eax * 2] |
jmp .next_stack_window |
;-------------------------------------- |
align 4 |
;---------------------------------------------- |
.move_self_down: |
movzx ebx, word[esi] |
; this is the last (and the low) |
2083,8 → 1956,6 |
mov [WIN_STACK + ebx * 2], word 1 |
; update on screen - window stack |
xor eax, eax |
;-------------------------------------- |
align 4 |
.next_window_pos: |
cmp eax, [TASK_COUNT] |
jae .reset_vars |
2092,8 → 1963,7 |
movzx ebx, word[WIN_STACK + eax * 2] |
mov [WIN_POS + ebx * 2], ax |
jmp .next_window_pos |
;-------------------------------------- |
align 4 |
;----------------------------------------------- |
.reset_vars: |
mov byte[KEY_COUNT], 0 |
mov byte[BTN_COUNT], 0 |
2125,8 → 1995,7 |
|
movzx eax, word[WIN_STACK + eax * 2] ; get value of the curr process |
lea esi, [WIN_POS + eax * 2] ; get address of this process at 0xC400 |
;-------------------------------------- |
align 4 |
|
.next_window: |
add esi, 2 |
|
2164,19 → 2033,17 |
jge .next_window |
|
pop esi edx ebx eax |
;-------------------------------------- |
align 4 |
|
.exit.redraw: |
xor ecx, ecx |
inc ecx |
ret |
;-------------------------------------- |
align 4 |
|
.exit.no_redraw: |
pop esi edx ebx eax |
xor ecx, ecx |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.draw_window_caption: ;//////////////////////////////////////////////// |
2189,8 → 2056,6 |
cmp edx, [CURRENT_TASK] |
jne @f |
inc eax |
;-------------------------------------- |
align 4 |
@@: |
mov edx, [CURRENT_TASK] |
shl edx, 5 |
2203,15 → 2068,13 |
je .draw_caption_style_3 |
|
jmp .not_style_3 |
;-------------------------------------- |
align 4 |
|
.draw_caption_style_3: |
push edx |
call drawwindow_IV_caption |
add esp, 4 |
jmp .2 |
;-------------------------------------- |
align 4 |
|
.not_style_3: |
cmp bl, 2 |
jne .not_style_2 |
2218,15 → 2081,13 |
|
call drawwindow_III_caption |
jmp .2 |
;-------------------------------------- |
align 4 |
|
.not_style_2: |
cmp bl, 0 |
jne .2 |
|
call drawwindow_I_caption |
;-------------------------------------- |
align 4 |
|
.2: |
mov edi, [CURRENT_TASK] |
shl edi, 5 |
2244,8 → 2105,7 |
je .skinned |
|
jmp .not_skinned |
;-------------------------------------- |
align 4 |
|
.skinned: |
mov ebp, [edi + window_data + WDATA.box.left - 2] |
mov bp, word[edi + window_data + WDATA.box.top] |
2272,8 → 2132,7 |
add bx, -3 |
add ebx, ebp |
jmp .dodraw |
;-------------------------------------- |
align 4 |
|
.not_skinned: |
cmp al, 1 |
je .exit |
2294,19 → 2153,17 |
mov esi, eax |
mov ebx, 0x00080007 |
add ebx, ebp |
;-------------------------------------- |
align 4 |
|
.dodraw: |
mov ecx, [common_colours + 16] |
or ecx, 0x80000000 |
xor edi, edi |
call dtext_asciiz_esi |
;-------------------------------------- |
align 4 |
|
.exit: |
call [draw_pointer] |
ret |
;------------------------------------------------------------------------------ |
|
align 4 |
;------------------------------------------------------------------------------ |
window._.draw_negative_box: ;////////////////////////////////////////////////// |
2317,8 → 2174,6 |
;------------------------------------------------------------------------------ |
push eax ebx esi |
mov esi, 0x01000000 |
;-------------------------------------- |
align 4 |
.1: |
mov eax, [edi + BOX.left - 2] |
mov ax, word[edi + BOX.left] |
2330,8 → 2185,6 |
pop esi ebx eax |
ret |
;------------------------------------------------------------------------------ |
align 4 |
;------------------------------------------------------------------------------ |
window._.end_moving__box: ;////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
;? Draw positive box |
2341,9 → 2194,9 |
push eax ebx esi |
xor esi, esi |
jmp window._.draw_negative_box.1 |
|
|
;------------------------------------------------------------------------------ |
align 4 |
;------------------------------------------------------------------------------ |
window._.get_rect: ;///////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
;? <description> void __fastcall get_window_rect(struct RECT* rc); |
2363,5 → 2216,6 |
|
add edx, [eax-twdw + WDATA.box.height] |
mov [ecx+RECT.bottom], edx |
|
ret |
;------------------------------------------------------------------------------ |
|