Subversion Repositories Kolibri OS

Rev

Rev 9932 | Rev 9947 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9932 Rev 9941
Line 75... Line 75...
75
format binary as "mnt"
75
format binary as "mnt"
Line 76... Line 76...
76
 
76
 
77
include 'macros.inc'
77
include 'macros.inc'
Line 78... Line 78...
78
include 'struct.inc'
78
include 'struct.inc'
Line 79... Line 79...
79
 
79
 
80
$Revision: 9932 $
80
$Revision: 9941 $
Line 1899... Line 1899...
1899
        pop     edx
1899
        pop     edx
1900
        ret
1900
        ret
Line 1901... Line 1901...
1901
 
1901
 
1902
;-----------------------------------------------------------------------------
1902
;-----------------------------------------------------------------------------
1903
sys_end:
-
 
1904
        cmp     [_display.select_cursor], 0
-
 
1905
        je      @f
1903
sys_end:
1906
; restore default cursor before killing
1904
; restore default cursor before killing
1907
        pusha
1905
        pusha
1908
        mov     ecx, [current_slot]
1906
        mov     ecx, [current_slot]
1909
        mov     ecx, [ecx + APPDATA.window]
1907
        mov     ecx, [ecx + APPDATA.window]
1910
        call    restore_default_cursor_before_killing
1908
        call    restore_default_cursor_before_killing
1911
        popa
-
 
1912
@@:
1909
        popa
1913
;--------------------------------------
1910
;--------------------------------------
1914
; kill all sockets this process owns
1911
; kill all sockets this process owns
1915
        pusha
1912
        pusha
1916
        mov     edx, [current_slot]
1913
        mov     edx, [current_slot]
Line 1952... Line 1949...
1952
        mov     esi, [window_data + edx + WDATA.cursor]
1949
        mov     esi, [window_data + edx + WDATA.cursor]
Line 1953... Line 1950...
1953
 
1950
 
1954
        cmp     esi, [current_cursor]
1951
        cmp     esi, [current_cursor]
Line -... Line 1952...
-
 
1952
        je      @f
1955
        je      @f
1953
 
-
 
1954
        cmp     [_display.select_cursor], 0
1956
 
1955
        jz      @f
1957
        push    esi
1956
 
1958
        call    [_display.select_cursor]
1957
        stdcall [_display.select_cursor], esi
1959
        mov     [current_cursor], esi
1958
        mov     [current_cursor], esi
1960
@@:
1959
@@:
1961
        mov     [redrawmouse_unconditional], 1
1960
        mov     [redrawmouse_unconditional], 1
Line 2060... Line 2059...
2060
        pusha
2059
        pusha
2061
        mov     eax, edx     ;TODO: check function
2060
        mov     eax, edx     ;TODO: check function
2062
        call    socket_process_end
2061
        call    socket_process_end
2063
        popa
2062
        popa
2064
;--------------------------------------
2063
;--------------------------------------
2065
        cmp     [_display.select_cursor], 0
-
 
2066
        je      .restore_end
-
 
2067
; restore default cursor before killing
2064
; restore default cursor before killing
2068
        pusha
2065
        pusha
2069
        mov     ecx, [esp+32]
2066
        mov     ecx, [esp+32]
2070
        shl     ecx, BSF sizeof.WDATA
2067
        shl     ecx, BSF sizeof.WDATA
2071
        add     ecx, window_data
2068
        add     ecx, window_data
Line 2073... Line 2070...
2073
        cmp     [ecx + WDATA.cursor], eax
2070
        cmp     [ecx + WDATA.cursor], eax
2074
        je      @f
2071
        je      @f
2075
        call    restore_default_cursor_before_killing
2072
        call    restore_default_cursor_before_killing
2076
@@:
2073
@@:
2077
        popa
2074
        popa
2078
.restore_end:
-
 
2079
;--------------------------------------
2075
;--------------------------------------
2080
     ;call MEM_Heap_Lock      ;guarantee that process isn't working with heap
2076
     ;call MEM_Heap_Lock      ;guarantee that process isn't working with heap
2081
        mov     [ecx + APPDATA.state], TSTATE_ZOMBIE; clear possible i40's
2077
        mov     [ecx + APPDATA.state], TSTATE_ZOMBIE; clear possible i40's
2082
        call    wakeup_osloop
2078
        call    wakeup_osloop
2083
     ;call MEM_Heap_UnLock
2079
     ;call MEM_Heap_UnLock
Line 2555... Line 2551...
2555
.os_mem:
2551
.os_mem:
2556
        stosd
2552
        stosd
2557
        lea     eax, [edx-1]
2553
        lea     eax, [edx-1]
2558
        stosd
2554
        stosd
Line 2559... Line -...
2559
 
-
 
2560
        mov     edx, ecx
2555
 
Line 2561... Line 2556...
2561
        shr     edx, (BSF sizeof.APPDATA - BSF sizeof.WDATA)
2556
        mov     edx, [SLOT_BASE + ecx + APPDATA.window]
2562
 
2557
 
2563
; +30: PID/TID
2558
; +30: PID/TID
Line 2564... Line 2559...
2564
        mov     eax, [SLOT_BASE + ecx + APPDATA.tid]
2559
        mov     eax, [SLOT_BASE + ecx + APPDATA.tid]
2565
        stosd
2560
        stosd
2566
 
2561
 
2567
    ; window position and size
2562
    ; window position and size
2568
        push    esi
2563
        push    esi
2569
        lea     esi, [window_data + edx + WDATA.box]
2564
        lea     esi, [edx + WDATA.box]
2570
        movsd
2565
        movsd
Line 2571... Line 2566...
2571
        movsd
2566
        movsd
2572
        movsd
2567
        movsd
2573
        movsd
2568
        movsd
Line 2574... Line 2569...
2574
 
2569
 
2575
    ; Process state (+50)
2570
    ; Process state (+50)
2576
        movzx   eax, byte [SLOT_BASE + ecx + APPDATA.state]
2571
        movzx   eax, byte [SLOT_BASE + ecx + APPDATA.state]
2577
        stosd
2572
        stosd
2578
 
2573
 
2579
    ; Window client area box
2574
    ; Window client area box
Line 2580... Line 2575...
2580
        lea     esi, [window_data + edx + WDATA.clientbox]
2575
        lea     esi, [edx + WDATA.clientbox]
2581
        movsd
2576
        movsd
2582
        movsd
2577
        movsd
Line 2583... Line 2578...
2583
        movsd
2578
        movsd
2584
        movsd
2579
        movsd
2585
 
2580
 
Line 2769... Line 2764...
2769
        mov     cr0, eax
2764
        mov     cr0, eax
2770
        ret
2765
        ret
Line 2771... Line 2766...
2771
 
2766
 
2772
is_cache_enabled:
2767
is_cache_enabled:
2773
        mov     eax, cr0
-
 
2774
        mov     ebx, eax
2768
        mov     eax, cr0
2775
        and     eax, 01100000_00000000_00000000_00000000b
-
 
2776
        jz      cache_disabled
2769
        and     eax, 01100000_00000000_00000000_00000000b
2777
        mov     [esp + SYSCALL_STACK.eax], ebx
-
 
2778
cache_disabled:
-
 
2779
        mov     dword [esp + SYSCALL_STACK.eax], eax;0
2770
        mov     [esp + SYSCALL_STACK.eax], eax
Line 2780... Line 2771...
2780
        ret
2771
        ret
2781
 
2772
 
2782
modify_pce:
2773
modify_pce:
Line 2889... Line 2880...
2889
;        DEBUGF  1, "K : drawbackground\n"
2880
;        DEBUGF  1, "K : drawbackground\n"
2890
;        DEBUGF  1, "K : backg x %x\n",[BG_Rect_X_left_right]
2881
;        DEBUGF  1, "K : backg x %x\n",[BG_Rect_X_left_right]
2891
;        DEBUGF  1, "K : backg y %x\n",[BG_Rect_Y_top_bottom]
2882
;        DEBUGF  1, "K : backg y %x\n",[BG_Rect_Y_top_bottom]
2892
;--------- set event 5 start ----------
2883
;--------- set event 5 start ----------
2893
        push    ecx edi
2884
        push    ecx edi
2894
        xor     edi, edi
2885
        mov     edi, window_data
2895
        mov     ecx, [thread_count]
2886
        mov     ecx, [thread_count]
2896
;--------------------------------------
2887
;--------------------------------------
2897
align 4
2888
align 4
2898
set_bgr_event:
2889
set_bgr_event:
2899
        add     edi, sizeof.WDATA
2890
        add     edi, sizeof.WDATA
2900
        mov     eax, [BG_Rect_X_left_right]
2891
        mov     eax, [BG_Rect_X_left_right]
2901
        mov     edx, [BG_Rect_Y_top_bottom]
2892
        mov     edx, [BG_Rect_Y_top_bottom]
2902
        cmp     [window_data + edi + WDATA.draw_bgr_x], 0
2893
        cmp     [edi + WDATA.draw_bgr_x], 0
2903
        jz      .set
2894
        jz      .set
2904
.join:
2895
.join:
2905
        cmp     word [window_data + edi + WDATA.draw_bgr_x], ax
2896
        cmp     word [edi + WDATA.draw_bgr_x], ax
2906
        jae     @f
2897
        jae     @f
2907
        mov     word [window_data + edi + WDATA.draw_bgr_x], ax
2898
        mov     word [edi + WDATA.draw_bgr_x], ax
2908
@@:
2899
@@:
2909
        shr     eax, 16
2900
        shr     eax, 16
2910
        cmp     word [window_data + edi + WDATA.draw_bgr_x + 2], ax
2901
        cmp     word [edi + WDATA.draw_bgr_x + 2], ax
2911
        jbe     @f
2902
        jbe     @f
2912
        mov     word [window_data + edi + WDATA.draw_bgr_x + 2], ax
2903
        mov     word [edi + WDATA.draw_bgr_x + 2], ax
2913
@@:
2904
@@:
2914
        cmp     word [window_data + edi + WDATA.draw_bgr_y], dx
2905
        cmp     word [edi + WDATA.draw_bgr_y], dx
2915
        jae     @f
2906
        jae     @f
2916
        mov     word [window_data + edi + WDATA.draw_bgr_y], dx
2907
        mov     word [edi + WDATA.draw_bgr_y], dx
2917
@@:
2908
@@:
2918
        shr     edx, 16
2909
        shr     edx, 16
2919
        cmp     word [window_data + edi + WDATA.draw_bgr_y+2], dx
2910
        cmp     word [edi + WDATA.draw_bgr_y+2], dx
2920
        jbe     @f
2911
        jbe     @f
2921
        mov     word [window_data + edi + WDATA.draw_bgr_y+2], dx
2912
        mov     word [edi + WDATA.draw_bgr_y+2], dx
2922
@@:
2913
@@:
2923
        jmp     .common
2914
        jmp     .common
2924
.set:
2915
.set:
2925
        mov     [window_data + edi + WDATA.draw_bgr_x], eax
2916
        mov     [edi + WDATA.draw_bgr_x], eax
2926
        mov     [window_data + edi + WDATA.draw_bgr_y], edx
2917
        mov     [edi + WDATA.draw_bgr_y], edx
2927
.common:
2918
.common:
2928
        mov     eax, [window_data + edi + WDATA.thread]
2919
        mov     eax, [edi + WDATA.thread]
2929
        test    eax, eax
2920
        test    eax, eax
2930
        jz      @f
2921
        jz      @f
2931
        or      [eax + APPDATA.occurred_events], EVENT_BACKGROUND
2922
        or      [eax + APPDATA.occurred_events], EVENT_BACKGROUND
2932
@@:
2923
@@:
2933
        sub     ecx, 1
-
 
2934
        jnz     set_bgr_event
-
 
2935
        ;loop    set_bgr_event
2924
        loop    set_bgr_event
2936
        pop     edi ecx
2925
        pop     edi ecx
2937
;--------- set event 5 stop -----------
2926
;--------- set event 5 stop -----------
2938
        dec     [REDRAW_BACKGROUND]     ; got new update request?
2927
        dec     [REDRAW_BACKGROUND]     ; got new update request?
2939
        jnz     backgr
2928
        jnz     backgr
Line 2954... Line 2943...
2954
 
2943
 
2955
        cmp     [SYS_SHUTDOWN], dl
2944
        cmp     [SYS_SHUTDOWN], dl
Line 2956... Line 2945...
2956
        jne     noshutdown
2945
        jne     noshutdown
2957
 
2946
 
2958
        lea     ecx, [edx-1]
2947
        lea     ecx, [edx-1]
2959
        mov     edx, SLOT_BASE + sizeof.APPDATA ;OS_BASE+0x3040
2948
        mov     edx, SLOT_BASE + sizeof.APPDATA*2 ;OS_BASE+0x3040
2960
        jecxz   no_mark_system_shutdown
2949
        jecxz   no_mark_system_shutdown
2961
;--------------------------------------
2950
;--------------------------------------
2962
align 4
2951
align 4
Line 3001... Line 2990...
3001
 
2990
 
3002
        cmp     cl, TSTATE_TERMINATING
2991
        cmp     cl, TSTATE_TERMINATING
3003
        jnz     .noterminate
2992
        jnz     .noterminate
3004
.terminate:
2993
.terminate:
3005
        pushad
2994
        pushad
3006
        mov     ecx, eax
2995
        push    esi
3007
        shl     ecx, BSF sizeof.WDATA
-
 
3008
        add     ecx, window_data
2996
        mov     ecx, dword[ebx - APPDATA.state + APPDATA.window]
3009
        call    restore_default_cursor_before_killing
-
 
Line 3010... Line 2997...
3010
        popad
2997
        call    restore_default_cursor_before_killing
3011
 
2998
 
3012
        pushad
2999
        pop     esi
3013
        call    terminate
3000
        call    terminate
3014
        popad
3001
        popad
3015
        cmp     byte [SYS_SHUTDOWN], 0
3002
        cmp     byte [SYS_SHUTDOWN], 0
Line 3023... Line 3010...
3023
        dec     eax
3010
        dec     eax
3024
        jnz     newct
3011
        jnz     newct
3025
        ret
3012
        ret
3026
;-----------------------------------------------------------------------------
3013
;-----------------------------------------------------------------------------
3027
align 4
3014
align 4
-
 
3015
; eax - ptr to WDATA
3028
redrawscreen:
3016
redrawscreen:
3029
; eax , if process window_data base is eax, do not set flag/limits
3017
; eax , if process window_data base is eax, do not set flag/limits
Line 3030... Line 3018...
3030
 
3018
 
3031
        pushad
3019
        pushad
Line 3063... Line 3051...
3063
      @@:
3051
      @@:
Line 3064... Line 3052...
3064
 
3052
 
3065
        mov     eax, [edi + WDATA.box.left]
3053
        mov     eax, [edi + WDATA.box.left]
Line 3066... Line 3054...
3066
        mov     ebx, [edi + WDATA.box.top]
3054
        mov     ebx, [edi + WDATA.box.top]
3067
 
-
 
3068
        mov     ecx, [draw_limits.bottom] ; ecx = area y end     ebx = window y start
3055
 
Line 3069... Line 3056...
3069
        cmp     ecx, ebx
3056
        cmp     ebx, [draw_limits.bottom] ; ecx = area y end     ebx = window y start
3070
        jb      ricino
-
 
3071
 
3057
        jae     ricino
Line 3072... Line 3058...
3072
        mov     ecx, [draw_limits.right] ; ecx = area x end     eax = window x start
3058
 
3073
        cmp     ecx, eax
3059
        cmp     eax, [draw_limits.right] ; ecx = area x end     eax = window x start
3074
        jb      ricino
3060
        jae     ricino
3075
 
3061
 
Line 3088... Line 3074...
3088
        cmp     ecx, eax
3074
        cmp     ecx, eax
3089
        jb      ricino
3075
        jb      ricino
3090
;--------------------------------------
3076
;--------------------------------------
3091
align 4
3077
align 4
3092
bgli:
3078
bgli:
3093
        cmp     dword[esp], 1
3079
        cmp     dword[esp], 1  ; check index in window_data array, 1 - idle
3094
        jnz     .az
3080
        jnz     .az
Line 3095... Line 3081...
3095
 
3081
 
3096
        cmp     [REDRAW_BACKGROUND], 0
3082
        cmp     [REDRAW_BACKGROUND], 0
Line 3137... Line 3123...
3137
        call    wakeup_osloop
3123
        call    wakeup_osloop
3138
        jmp     newdw8
3124
        jmp     newdw8
3139
;--------------------------------------
3125
;--------------------------------------
3140
align 4
3126
align 4
3141
.az:
3127
.az:
3142
        mov     eax, edi
-
 
3143
 
-
 
3144
        mov     ebx, [draw_limits.left]        ; set limits
3128
        mov     ebx, [draw_limits.left]        ; set limits
3145
        mov     [eax + WDATA.draw_data.left], ebx
3129
        mov     [edi + WDATA.draw_data.left], ebx
3146
        mov     ebx, [draw_limits.top]
3130
        mov     ebx, [draw_limits.top]
3147
        mov     [eax + WDATA.draw_data.top], ebx
3131
        mov     [edi + WDATA.draw_data.top], ebx
3148
        mov     ebx, [draw_limits.right]
3132
        mov     ebx, [draw_limits.right]
3149
        mov     [eax + WDATA.draw_data.right], ebx
3133
        mov     [edi + WDATA.draw_data.right], ebx
3150
        mov     ebx, [draw_limits.bottom]
3134
        mov     ebx, [draw_limits.bottom]
3151
        mov     [eax + WDATA.draw_data.bottom], ebx
3135
        mov     [edi + WDATA.draw_data.bottom], ebx
Line 3152... Line 3136...
3152
 
3136
 
3153
        cmp     dword [esp], 1
3137
        cmp     dword [esp], 1  ; check idle thread
3154
        jne     nobgrd
3138
        jne     nobgrd
3155
        inc     [REDRAW_BACKGROUND]
3139
        inc     [REDRAW_BACKGROUND]
3156
        call    wakeup_osloop
3140
        call    wakeup_osloop
3157
;--------------------------------------
3141
;--------------------------------------
3158
align 4
3142
align 4
3159
newdw8:
3143
newdw8:
3160
nobgrd:
3144
nobgrd:
3161
;--------------------------------------
3145
;--------------------------------------
3162
        push    eax  edi ebp
3146
        push    edi ebp
3163
        mov     edi, [esp+12]
3147
        mov     edi, [esp+8]
3164
        cmp     edi, 1
3148
        cmp     edi, 1
Line 3165... Line 3149...
3165
        je      .found
3149
        je      .found
3166
 
3150
 
Line 3208... Line 3192...
3208
        dec     edx
3192
        dec     edx
3209
        jns     .start_y
3193
        jns     .start_y
3210
;--------------------------------------
3194
;--------------------------------------
3211
align 4
3195
align 4
3212
.not_found:
3196
.not_found:
3213
        pop     ebp edi eax
3197
        pop     ebp edi
3214
        jmp     ricino
3198
        jmp     ricino
3215
;--------------------------------------
3199
;--------------------------------------
3216
align 4
3200
align 4
3217
.found:
3201
.found:
3218
        pop     ebp edi eax
3202
        pop     ebp edi
Line 3219... Line 3203...
3219
 
3203
 
3220
        mov     [eax + WDATA.fl_redraw], WSTATE_REDRAW  ; mark as redraw
3204
        mov     [edi + WDATA.fl_redraw], WSTATE_REDRAW  ; mark as redraw
3221
;--------------------------------------
3205
;--------------------------------------
3222
align 4
3206
align 4
3223
ricino:
3207
ricino:
3224
not_this_task:
3208
not_this_task: