Subversion Repositories Kolibri OS

Rev

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

Rev 379 Rev 380
Line 256... Line 256...
256
        mov   ecx,(0x100000*0xF-0x280000) / 4
256
        mov   ecx,(0x100000*0xF-0x280000) / 4
257
        cld
257
        cld
258
        rep   stosd
258
        rep   stosd
259
; CLEAR 0x80000-0x90000
259
; CLEAR 0x80000-0x90000
260
;       xor   eax,eax
260
;       xor   eax,eax
-
 
261
 
261
        mov   edi,0x80000
262
        mov   edi,0x80000
262
        mov   ecx,(0x90000-0x80000)/4
263
        mov   ecx,(0x90000-0x80000)/4
263
;       cld
264
;       cld
264
        rep   stosd
265
        rep   stosd
Line 605... Line 606...
605
 
606
 
606
        mov  esi,boot_setostask
607
        mov  esi,boot_setostask
Line 607... Line 608...
607
        call boot_log
608
        call boot_log
608
 
609
 
609
        mov eax, fpu_data
610
        mov eax, fpu_data
610
        mov  dword [0x80000+APPDATA.fpu_state], eax
611
        mov  dword [SLOT_BASE+APPDATA.fpu_state], eax
Line 611... Line 612...
611
        mov  dword [0x80000+APPDATA.fpu_handler], 0
612
        mov  dword [SLOT_BASE+APPDATA.fpu_handler], 0
Line 612... Line 613...
612
        mov  dword [0x80000+APPDATA.sse_handler], 0
613
        mov  dword [SLOT_BASE+APPDATA.sse_handler], 0
613
 
614
 
614
        ; name for OS/IDLE process
615
        ; name for OS/IDLE process
615
 
616
 
616
        mov dword [0x80000+256+APPDATA.app_name],   dword 'OS/I'
617
        mov dword [SLOT_BASE+256+APPDATA.app_name],   dword 'OS/I'
617
        mov dword [0x80000+256+APPDATA.app_name+4], dword 'DLE '
618
        mov dword [SLOT_BASE+256+APPDATA.app_name+4], dword 'DLE '
Line 618... Line 619...
618
        mov edi, [os_stack]
619
        mov edi, [os_stack]
619
        mov dword [0x80000+256+APPDATA.pl0_stack], edi
620
        mov dword [SLOT_BASE+256+APPDATA.pl0_stack], edi
620
        add edi, 0x2000-512
621
        add edi, 0x2000-512
621
        mov dword [0x80000+256+APPDATA.fpu_state], edi
622
        mov dword [SLOT_BASE+256+APPDATA.fpu_state], edi
Line 622... Line 623...
622
 
623
 
623
        mov esi, fpu_data
624
        mov esi, fpu_data
Line 624... Line 625...
624
        mov ecx, 512/4
625
        mov ecx, 512/4
625
        cld
626
        cld
Line 626... Line 627...
626
        rep movsd
627
        rep movsd
627
 
628
 
628
        mov dword [0x80000+256+APPDATA.fpu_handler], 0
629
        mov dword [SLOT_BASE+256+APPDATA.fpu_handler], 0
Line 629... Line 630...
629
        mov dword [0x80000+256+APPDATA.sse_handler], 0
630
        mov dword [SLOT_BASE+256+APPDATA.sse_handler], 0
630
 
631
 
631
        mov ebx, [def_cursor]
632
        mov ebx, [def_cursor]
632
        mov dword [0x80000+256+APPDATA.cursor], ebx
633
        mov dword [SLOT_BASE+256+APPDATA.cursor], ebx
Line 1326... Line 1327...
1326
     ; edx length
1327
     ; edx length
1327
     ; edi 1 force
1328
     ; edi 1 force
Line 1328... Line 1329...
1328
 
1329
 
1329
;        mov     edi,[CURRENT_TASK]
1330
;        mov     edi,[CURRENT_TASK]
1330
;        shl     edi,8
1331
;        shl     edi,8
1331
;        add     ax,word[edi+0x80000+APPDATA.wnd_clientbox.top]
1332
;        add     ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
1332
;        rol     eax,16
1333
;        rol     eax,16
1333
;        add     ax,word[edi+0x80000+APPDATA.wnd_clientbox.left]
1334
;        add     ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
Line 1334... Line 1335...
1334
;        rol     eax,16
1335
;        rol     eax,16
1335
 
1336
 
1336
     mov   edx,eax
1337
     mov   edx,eax
1337
     mov   ecx,64+4
1338
     mov   ecx,64+4
1338
     sub   ecx,eax
1339
     sub   ecx,eax
1339
     add   ecx,esp
1340
     add   ecx,esp
1340
     mov   eax,[esp+64+32-8+4]
1341
     mov   eax,[esp+64+32-8+4]
1341
     push  edx                       ; add window start x & y
1342
     push  edx                       ; add window start x & y
1342
     mov   edx,[TASK_BASE]
1343
     mov   edx,[TASK_BASE]
1343
     mov   ebx,[edx-twdw+WDATA.box.left]
1344
     mov   ebx,[edx-twdw+WDATA.box.left]
1344
        add     ebx, [(edx-CURRENT_TASK)*8+0x80000+APPDATA.wnd_clientbox.left]
1345
     add   ebx, [(edx-CURRENT_TASK)*8+SLOT_BASE+APPDATA.wnd_clientbox.left]
1345
     shl   ebx,16
1346
     shl   ebx,16
1346
     add   ebx,[edx-twdw+WDATA.box.top]
1347
     add   ebx,[edx-twdw+WDATA.box.top]
1347
        add     ebx, [(edx-CURRENT_TASK)*8+0x80000+APPDATA.wnd_clientbox.top]
1348
     add   ebx, [(edx-CURRENT_TASK)*8+SLOT_BASE+APPDATA.wnd_clientbox.top]
1348
     add   eax,ebx
1349
     add   eax,ebx
1349
     pop   edx
1350
     pop   edx
1350
     mov   ebx,[esp+64+32-12+4]
1351
     mov   ebx,[esp+64+32-12+4]
Line 1739... Line 1740...
1739
           mov  bx, word [esi-twdw+WDATA.box.top]
1740
           mov  bx, word [esi-twdw+WDATA.box.top]
1740
           sub  eax,ebx
1741
           sub  eax,ebx
Line 1741... Line 1742...
1741
 
1742
 
1742
           mov  edi,[CURRENT_TASK]
1743
           mov  edi,[CURRENT_TASK]
1743
           shl  edi,8
1744
           shl  edi,8
1744
           sub  ax,word[edi+PROC_BASE+APPDATA.wnd_clientbox.top]
1745
           sub  ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
1745
           rol  eax,16
1746
           rol  eax,16
1746
           sub  ax,word[edi+PROC_BASE+APPDATA.wnd_clientbox.left]
1747
           sub  ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
1747
           rol  eax,16
1748
           rol  eax,16
1748
           mov  [esp+36],eax
1749
           mov  [esp+36],eax
1749
           ret
1750
           ret
1750
msbutton:
1751
msbutton:
Line 1998... Line 1999...
1998
     cmp  ebx,[TASK_COUNT]
1999
     cmp  ebx,[TASK_COUNT]
1999
     ja   .nowindowactivate
2000
     ja   .nowindowactivate
Line 2000... Line 2001...
2000
 
2001
 
Line 2001... Line 2002...
2001
     mov   [window_minimize], 2   ; restore window if minimized
2002
     mov   [window_minimize], 2   ; restore window if minimized
2002
 
2003
 
2003
     movzx esi, word [0xC000 + ebx*2]
2004
     movzx esi, word [WIN_STACK + ebx*2]
Line 2004... Line 2005...
2004
     cmp   esi, [TASK_COUNT]
2005
     cmp   esi, [TASK_COUNT]
2005
     je    .nowindowactivate ; already active
2006
     je    .nowindowactivate ; already active
2006
 
2007
 
2007
     mov   edi, ebx
2008
     mov   edi, ebx
2008
     shl   edi, 5
2009
     shl   edi, 5
2009
     add   edi, window_data
2010
     add   edi, window_data
2010
     movzx esi, word [0xC000 + ebx * 2]
2011
     movzx esi, word [WIN_STACK + ebx * 2]
2011
     lea   esi, [0xC400 + esi * 2]
2012
     lea   esi, [WIN_POS + esi * 2]
Line 2012... Line 2013...
2012
     call  waredraw
2013
     call  waredraw
Line 2028... Line 2029...
2028
   include 'blkdev/rdsave.inc'
2029
   include 'blkdev/rdsave.inc'
2029
;!!!!!!!!!!!!!!!!!!!!!!!!
2030
;!!!!!!!!!!!!!!!!!!!!!!!!
Line 2030... Line 2031...
2030
 
2031
 
2031
sysfn_getactive:        ; 18.7 = get active window
2032
sysfn_getactive:        ; 18.7 = get active window
2032
     mov  eax, [TASK_COUNT]
2033
     mov  eax, [TASK_COUNT]
2033
   movzx  eax, word [0xC400 + eax*2]
2034
   movzx  eax, word [WIN_POS + eax*2]
2034
     mov  [esp+36],eax
2035
     mov  [esp+36],eax
Line 2035... Line 2036...
2035
     ret
2036
     ret
2036
 
2037
 
Line 2346... Line 2347...
2346
 
2347
 
2347
sys_getkey:
2348
sys_getkey:
2348
    mov   [esp+36],dword 1
2349
    mov   [esp+36],dword 1
2349
; test main buffer
2350
; test main buffer
2350
    mov   ebx, [CURRENT_TASK]                          ; TOP OF WINDOW STACK
2351
    mov   ebx, [CURRENT_TASK]                          ; TOP OF WINDOW STACK
2351
    movzx ecx,word [0xC000 + ebx * 2]
2352
    movzx ecx,word [WIN_STACK + ebx * 2]
2352
    mov   edx,[TASK_COUNT]
2353
    mov   edx,[TASK_COUNT]
2353
    cmp   ecx,edx
2354
    cmp   ecx,edx
2354
    jne   .finish
2355
    jne   .finish
2355
    cmp   [0xf400],byte 0
2356
    cmp   [0xf400],byte 0
Line 2395... Line 2396...
2395
 
2396
 
Line 2396... Line 2397...
2396
sys_getbutton:
2397
sys_getbutton:
2397
 
2398
 
2398
    mov   ebx, [CURRENT_TASK]                         ; TOP OF WINDOW STACK
2399
    mov   ebx, [CURRENT_TASK]                         ; TOP OF WINDOW STACK
2399
    mov   [esp+36],dword 1
2400
    mov   [esp+36],dword 1
2400
    movzx ecx, word [0xC000 + ebx * 2]
2401
    movzx ecx, word [WIN_STACK + ebx * 2]
2401
    mov   edx, [TASK_COUNT] ; less than 256 processes
2402
    mov   edx, [TASK_COUNT] ; less than 256 processes
2402
    cmp   ecx,edx
2403
    cmp   ecx,edx
2403
    jne   .exit
2404
    jne   .exit
Line 2451... Line 2452...
2451
    mov  ebx,eax
2452
    mov  ebx,eax
2452
    pop  eax
2453
    pop  eax
2453
    mov  ecx,[ebx]
2454
    mov  ecx,[ebx]
2454
    mov  [eax],ecx
2455
    mov  [eax],ecx
2455
    pop  ebx
2456
    pop  ebx
2456
    mov  cx, [0xC000 + ebx * 2]
2457
    mov  cx, [WIN_STACK + ebx * 2]
2457
    mov  [eax+4],cx
2458
    mov  [eax+4],cx
2458
    mov  cx, [0xC400 + ebx * 2]
2459
    mov  cx, [WIN_POS + ebx * 2]
2459
    mov  [eax+6],cx
2460
    mov  [eax+6],cx
2460
    push eax
2461
    push eax
2461
    mov  eax,ebx
2462
    mov  eax,ebx
2462
    shl  eax,8
2463
    shl  eax,8
2463
    add  eax,0x80000+APPDATA.app_name
2464
    add  eax,SLOT_BASE+APPDATA.app_name
2464
    pop  ebx
2465
    pop  ebx
2465
    add  ebx,10
2466
    add  ebx,10
2466
    mov  ecx,11
2467
    mov  ecx,11
2467
    call memmove
2468
    call memmove
Line 2472... Line 2473...
2472
    mov    edx,0x100000*16
2473
    mov    edx,0x100000*16
2473
    pop    ecx                                   ; get gdt of tss
2474
    pop    ecx                                   ; get gdt of tss
2474
    cmp    ecx,1
2475
    cmp    ecx,1
2475
    je     os_mem
2476
    je     os_mem
2476
    shl    ecx,8
2477
    shl    ecx,8
2477
    mov    edx,[0x80000+ecx+APPDATA.mem_size] ;0x8c
2478
    mov    edx,[SLOT_BASE+ecx+APPDATA.mem_size] ;0x8c
2478
    mov    eax,std_application_base_address
2479
    mov    eax,std_application_base_address
2479
    ; eax run base -> edx used memory
2480
    ; eax run base -> edx used memory
2480
  os_mem:
2481
  os_mem:
2481
    dec    edx
2482
    dec    edx
2482
    mov    [ebx+12],eax
2483
    mov    [ebx+12],eax
Line 2511... Line 2512...
2511
 
2512
 
Line 2512... Line 2513...
2512
    ; Window client area box
2513
    ; Window client area box
2513
 
2514
 
2514
    mov    esi,[esp]
2515
    mov    esi,[esp]
2515
    shl    esi,8
2516
    shl    esi,8
2516
    add    esi,0x80000+APPDATA.wnd_clientbox
2517
    add    esi,SLOT_BASE+APPDATA.wnd_clientbox
2517
    lea    edi,[ebx+44]
2518
    lea    edi,[ebx+44]
Line 2518... Line 2519...
2518
    mov    ecx,4
2519
    mov    ecx,4
Line 2730... Line 2731...
2730
    jne   nosyswIV
2731
    jne   nosyswIV
Line 2731... Line 2732...
2731
 
2732
 
2732
    ; parameter for drawwindow_IV
2733
    ; parameter for drawwindow_IV
2733
    push  0
2734
    push  0
2734
    mov   edi, [TASK_COUNT]
2735
    mov   edi, [TASK_COUNT]
2735
    movzx edi, word [0xC400 + edi*2]
2736
    movzx edi, word [WIN_POS + edi*2]
2736
    cmp   edi, [CURRENT_TASK]
2737
    cmp   edi, [CURRENT_TASK]
2737
    jne   @f
2738
    jne   @f
2738
    inc   dword [esp]
2739
    inc   dword [esp]
Line 2756... Line 2757...
2756
        inc     [mouse_pause]
2757
        inc     [mouse_pause]
2757
        call    [disable_mouse]
2758
        call    [disable_mouse]
Line 2758... Line 2759...
2758
 
2759
 
2759
        xor     eax,eax
2760
        xor     eax,eax
2760
        mov     edx,[TASK_COUNT]
2761
        mov     edx,[TASK_COUNT]
2761
        movzx   edx,word[0xC400+edx*2]
2762
        movzx   edx,word[WIN_POS+edx*2]
2762
        cmp     edx,[CURRENT_TASK]
2763
        cmp     edx,[CURRENT_TASK]
2763
        jne     @f
2764
        jne     @f
2764
        inc     eax
2765
        inc     eax
2765
    @@: mov     edx,[CURRENT_TASK]
2766
    @@: mov     edx,[CURRENT_TASK]
Line 2792... Line 2793...
2792
  .2:   ;jmp     @f
2793
  .2:   ;jmp     @f
2793
        mov     edi,[CURRENT_TASK]
2794
        mov     edi,[CURRENT_TASK]
2794
        shl     edi,5
2795
        shl     edi,5
2795
        test    [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
2796
        test    [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
2796
        jz      @f
2797
        jz      @f
2797
        mov     ecx,[edi*8+0x80000+APPDATA.wnd_caption]
2798
        mov     ecx,[edi*8+SLOT_BASE+APPDATA.wnd_caption]
2798
        or      ecx,ecx
2799
        or      ecx,ecx
2799
        jz      @f
2800
        jz      @f
2800
        add     ecx,[edi+twdw+TASKDATA.mem_start]
2801
        add     ecx,[edi+twdw+TASKDATA.mem_start]
Line 2801... Line 2802...
2801
 
2802
 
Line 2878... Line 2879...
2878
        jz      @f
2879
        jz      @f
Line 2879... Line 2880...
2879
 
2880
 
2880
        movzx   eax,[ecx+WDATA.fl_wstyle]
2881
        movzx   eax,[ecx+WDATA.fl_wstyle]
2881
        and     eax,0x0F
2882
        and     eax,0x0F
2882
        mov     eax,[eax*8+window_topleft+0]
2883
        mov     eax,[eax*8+window_topleft+0]
2883
        mov     [edi+0x80000+APPDATA.wnd_clientbox.left],eax
2884
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.left],eax
2884
        shl     eax,1
2885
        shl     eax,1
2885
        neg     eax
2886
        neg     eax
2886
        add     eax,[ecx+WDATA.box.width]
2887
        add     eax,[ecx+WDATA.box.width]
Line 2887... Line 2888...
2887
        mov     [edi+0x80000+APPDATA.wnd_clientbox.width],eax
2888
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.width],eax
2888
 
2889
 
2889
        movzx   eax,[ecx+WDATA.fl_wstyle]
2890
        movzx   eax,[ecx+WDATA.fl_wstyle]
2890
        and     eax,0x0F
2891
        and     eax,0x0F
2891
        push    [eax*8+window_topleft+0]
2892
        push    [eax*8+window_topleft+0]
2892
        mov     eax,[eax*8+window_topleft+4]
2893
        mov     eax,[eax*8+window_topleft+4]
2893
        mov     [edi+0x80000+APPDATA.wnd_clientbox.top],eax
2894
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.top],eax
2894
        neg     eax
2895
        neg     eax
2895
        sub     eax,[esp]
2896
        sub     eax,[esp]
2896
        add     eax,[ecx+WDATA.box.height]
2897
        add     eax,[ecx+WDATA.box.height]
Line 2897... Line 2898...
2897
        mov     [edi+0x80000+APPDATA.wnd_clientbox.height],eax
2898
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.height],eax
2898
        add     esp,4
2899
        add     esp,4
2899
 
2900
 
2900
        pop     edi ecx eax
2901
        pop     edi ecx eax
2901
        ret
2902
        ret
2902
    @@:
2903
    @@:
2903
        xor     eax,eax
2904
        xor     eax,eax
2904
        mov     [edi+0x80000+APPDATA.wnd_clientbox.left],eax
2905
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.left],eax
2905
        mov     [edi+0x80000+APPDATA.wnd_clientbox.top],eax
2906
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.top],eax
2906
        mov     eax,[ecx+WDATA.box.width]
2907
        mov     eax,[ecx+WDATA.box.width]
Line 2907... Line 2908...
2907
        mov     [edi+0x80000+APPDATA.wnd_clientbox.width],eax
2908
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.width],eax
2908
        mov     eax,[ecx+WDATA.box.height]
2909
        mov     eax,[ecx+WDATA.box.height]
Line 2909... Line 2910...
2909
        mov     [edi+0x80000+APPDATA.wnd_clientbox.height],eax
2910
        mov     [edi+SLOT_BASE+APPDATA.wnd_clientbox.height],eax
Line 2948... Line 2949...
2948
 
2949
 
Line 2949... Line 2950...
2949
        mov     cl,[edi+WDATA.fl_wstyle]
2950
        mov     cl,[edi+WDATA.fl_wstyle]
2950
 
2951
 
2951
    sub   edi,window_data
2952
    sub   edi,window_data
Line 2952... Line 2953...
2952
    shl   edi,3
2953
    shl   edi,3
2953
    add   edi,0x80000
2954
    add   edi,SLOT_BASE
2954
 
2955
 
2955
        and     cl,0x0F
2956
        and     cl,0x0F
Line 3002... Line 3003...
3002
        ; have to check if caption is within application memory limit
3003
        ; have to check if caption is within application memory limit
3003
        ; check is trivial, and if application resizes its memory,
3004
        ; check is trivial, and if application resizes its memory,
3004
        ;   caption still can become over bounds
3005
        ;   caption still can become over bounds
3005
; diamond, 31.10.2006: check removed because with new memory manager
3006
; diamond, 31.10.2006: check removed because with new memory manager
3006
; there can be valid data after APPDATA.mem_size bound
3007
; there can be valid data after APPDATA.mem_size bound
3007
;        mov     ecx,[edi*8+0x80000+APPDATA.mem_size]
3008
;        mov     ecx,[edi*8+SLOT_BASE+APPDATA.mem_size]
3008
;        add     ecx,255 ; max caption length
3009
;        add     ecx,255 ; max caption length
3009
;        cmp     ebx,ecx
3010
;        cmp     ebx,ecx
3010
;        ja      .exit_fail
3011
;        ja      .exit_fail
Line 3011... Line 3012...
3011
 
3012
 
3012
        mov     [edi*8+0x80000+APPDATA.wnd_caption],ebx
3013
        mov     [edi*8+SLOT_BASE+APPDATA.wnd_caption],ebx
Line 3013... Line 3014...
3013
        or      [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
3014
        or      [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
Line 3014... Line 3015...
3014
 
3015
 
Line 3070... Line 3071...
3070
        pushad                       ; save for window fullscreen/resize
3071
        pushad                       ; save for window fullscreen/resize
3071
        mov   esi,edi
3072
        mov   esi,edi
3072
        sub   edi,window_data
3073
        sub   edi,window_data
3073
        shr   edi,5
3074
        shr   edi,5
3074
        shl   edi,8
3075
        shl   edi,8
3075
        add   edi, 0x80000 + APPDATA.saved_box
3076
        add   edi, SLOT_BASE + APPDATA.saved_box
3076
        mov   ecx,4
3077
        mov   ecx,4
3077
        cld
3078
        cld
3078
        rep   movsd
3079
        rep   movsd
3079
        popad
3080
        popad
Line 3300... Line 3301...
3300
    mov   [mouse_active], 0
3301
    mov   [mouse_active], 0
3301
    xor   edi, edi
3302
    xor   edi, edi
3302
    mov   ecx, [TASK_COUNT]
3303
    mov   ecx, [TASK_COUNT]
3303
   set_mouse_event:
3304
   set_mouse_event:
3304
    add   edi, 256
3305
    add   edi, 256
3305
    or    [edi+0x80000+APPDATA.event_mask], dword 00100000b
3306
    or    [edi+SLOT_BASE+APPDATA.event_mask], dword 00100000b
3306
    loop  set_mouse_event
3307
    loop  set_mouse_event
3307
  mouse_not_active:
3308
  mouse_not_active:
Line 3308... Line 3309...
3308
 
3309
 
Line 4001... Line 4002...
4001
  .exit:
4002
  .exit:
4002
     ret
4003
     ret
4003
 @@:
4004
 @@:
4004
        mov     edi,[CURRENT_TASK]
4005
        mov     edi,[CURRENT_TASK]
4005
        shl     edi,8
4006
        shl     edi,8
4006
        add     dx,word[edi+0x80000+APPDATA.wnd_clientbox.top]
4007
        add     dx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4007
        rol     edx,16
4008
        rol     edx,16
4008
        add     dx,word[edi+0x80000+APPDATA.wnd_clientbox.left]
4009
        add     dx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4009
        rol     edx,16
4010
        rol     edx,16
4010
  .forced:
4011
  .forced:
4011
        push    ebp esi 0
4012
        push    ebp esi 0
4012
        mov     ebp, putimage_get24bpp
4013
        mov     ebp, putimage_get24bpp
4013
        mov     esi, putimage_init24bpp
4014
        mov     esi, putimage_init24bpp
Line 4043... Line 4044...
4043
; esi = number of bits per pixel, must be 8, 24 or 32
4044
; esi = number of bits per pixel, must be 8, 24 or 32
4044
; edi = pointer to palette
4045
; edi = pointer to palette
4045
; ebp = row delta
4046
; ebp = row delta
4046
        mov     eax, [CURRENT_TASK]
4047
        mov     eax, [CURRENT_TASK]
4047
        shl     eax, 8
4048
        shl     eax, 8
4048
        add     dx, word [eax+0x80000+APPDATA.wnd_clientbox.top]
4049
        add     dx, word [eax+SLOT_BASE+APPDATA.wnd_clientbox.top]
4049
        rol     edx, 16
4050
        rol     edx, 16
4050
        add     dx, word [eax+0x80000+APPDATA.wnd_clientbox.left]
4051
        add     dx, word [eax+SLOT_BASE+APPDATA.wnd_clientbox.left]
4051
        rol     edx, 16
4052
        rol     edx, 16
4052
.forced:
4053
.forced:
4053
        push    ebp esi ebp
4054
        push    ebp esi ebp
4054
        cmp     esi, 8
4055
        cmp     esi, 8
4055
        jnz     @f
4056
        jnz     @f
Line 4104... Line 4105...
4104
; edi color
4105
; edi color
Line 4105... Line 4106...
4105
 
4106
 
4106
__sys_drawbar:
4107
__sys_drawbar:
4107
        mov     esi,[CURRENT_TASK]
4108
        mov     esi,[CURRENT_TASK]
4108
        shl     esi,8
4109
        shl     esi,8
4109
        add     eax,[esi+0x80000+APPDATA.wnd_clientbox.left]
4110
        add     eax,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4110
        add     ecx,[esi+0x80000+APPDATA.wnd_clientbox.left]
4111
        add     ecx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4111
        add     ebx,[esi+0x80000+APPDATA.wnd_clientbox.top]
4112
        add     ebx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4112
        add     edx,[esi+0x80000+APPDATA.wnd_clientbox.top]
4113
        add     edx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4113
  .forced:
4114
  .forced:
4114
    inc   [mouse_pause]
4115
    inc   [mouse_pause]
4115
;        call    [disable_mouse]
4116
;        call    [disable_mouse]
4116
    cmp   [0xfe0c],word 0x12
4117
    cmp   [0xfe0c],word 0x12
Line 4478... Line 4479...
4478
 
4479
 
4479
        dec     eax             ; 1 = set keyboard mode
4480
        dec     eax             ; 1 = set keyboard mode
Line 4480... Line 4481...
4480
     jne   no_set_keyboard_setup
4481
     jne   no_set_keyboard_setup
4481
 
4482
 
Line 4482... Line 4483...
4482
     shl   edi,8
4483
     shl   edi,8
Line 4483... Line 4484...
4483
     mov   [edi+0x80000 + APPDATA.keyboard_mode],bl
4484
     mov   [edi+SLOT_BASE + APPDATA.keyboard_mode],bl
Line 4484... Line 4485...
4484
 
4485
 
4485
     ret
4486
     ret
Line 4486... Line 4487...
4486
 
4487
 
4487
   no_set_keyboard_setup:
4488
   no_set_keyboard_setup:
Line 4488... Line 4489...
4488
 
4489
 
Line 4489... Line 4490...
4489
        dec     eax             ; 2 = get keyboard mode
4490
        dec     eax             ; 2 = get keyboard mode
Line 4638... Line 4639...
4638
     mov   edx,[TASK_BASE]
4639
     mov   edx,[TASK_BASE]
4639
     add   eax,[edx-twdw+WDATA.box.left]
4640
     add   eax,[edx-twdw+WDATA.box.left]
4640
     add   ebx,[edx-twdw+WDATA.box.top]
4641
     add   ebx,[edx-twdw+WDATA.box.top]
4641
        mov     edi,[CURRENT_TASK]
4642
        mov     edi,[CURRENT_TASK]
4642
        shl     edi,8
4643
        shl     edi,8
4643
        add     eax,[edi+0x80000+APPDATA.wnd_clientbox.left]
4644
        add     eax,[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4644
        add     ebx,[edi+0x80000+APPDATA.wnd_clientbox.top]
4645
        add     ebx,[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4645
     xor   edi,edi ; no force
4646
     xor   edi,edi ; no force
4646
;     mov   edi,1
4647
;     mov   edi,1
4647
     call  [disable_mouse]
4648
     call  [disable_mouse]
4648
     jmp   [putpixel]
4649
     jmp   [putpixel]
Line 4654... Line 4655...
4654
     mov   edi,[TASK_BASE]
4655
     mov   edi,[TASK_BASE]
4655
     mov   ebp,[edi-twdw+WDATA.box.left]
4656
     mov   ebp,[edi-twdw+WDATA.box.left]
4656
        push    esi
4657
        push    esi
4657
        mov     esi,[CURRENT_TASK]
4658
        mov     esi,[CURRENT_TASK]
4658
        shl     esi,8
4659
        shl     esi,8
4659
        add     ebp,[esi+0x80000+APPDATA.wnd_clientbox.left]
4660
        add     ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4660
     shl   ebp,16
4661
     shl   ebp,16
4661
     add   ebp,[edi-twdw+WDATA.box.top]
4662
     add   ebp,[edi-twdw+WDATA.box.top]
4662
        add     bp,word[esi+0x80000+APPDATA.wnd_clientbox.top]
4663
        add     bp,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4663
        pop     esi
4664
        pop     esi
4664
     add   ecx,[edi+TASKDATA.mem_start]
4665
     add   ecx,[edi+TASKDATA.mem_start]
4665
     add   eax,ebp
4666
     add   eax,ebp
4666
     xor   edi,edi
4667
     xor   edi,edi
4667
     jmp   dtext
4668
     jmp   dtext
Line 4694... Line 4695...
4694
     shr   eax,16
4695
     shr   eax,16
4695
     movzx edx,bx
4696
     movzx edx,bx
4696
     shr   ebx,16
4697
     shr   ebx,16
4697
        mov     esi,[CURRENT_TASK]
4698
        mov     esi,[CURRENT_TASK]
4698
        shl     esi,8
4699
        shl     esi,8
4699
        add     eax,[esi+0x80000+APPDATA.wnd_clientbox.left]
4700
        add     eax,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4700
        add     ebx,[esi+0x80000+APPDATA.wnd_clientbox.top]
4701
        add     ebx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4701
     add   ecx,eax
4702
     add   ecx,eax
4702
     add   edx,ebx
4703
     add   edx,ebx
4703
     jmp   [drawbar]
4704
     jmp   [drawbar]
4704
    drectr:
4705
    drectr:
4705
     ret
4706
     ret
Line 4776... Line 4777...
4776
     mov   edi,[TASK_BASE]
4777
     mov   edi,[TASK_BASE]
4777
     movzx edx,word[edi-twdw+WDATA.box.left]
4778
     movzx edx,word[edi-twdw+WDATA.box.left]
4778
     mov   ebp,edx
4779
     mov   ebp,edx
4779
        mov     esi,[CURRENT_TASK]
4780
        mov     esi,[CURRENT_TASK]
4780
        shl     esi,8
4781
        shl     esi,8
4781
        add     ebp,[esi+0x80000+APPDATA.wnd_clientbox.left]
4782
        add     ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4782
        add     dx,word[esi+0x80000+APPDATA.wnd_clientbox.left]
4783
        add     dx,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
4783
     shl   edx,16
4784
     shl   edx,16
4784
     add   ebp,edx
4785
     add   ebp,edx
4785
     movzx edx,word[edi-twdw+WDATA.box.top]
4786
     movzx edx,word[edi-twdw+WDATA.box.top]
4786
     add   eax,ebp
4787
     add   eax,ebp
4787
     mov   ebp,edx
4788
     mov   ebp,edx
4788
        add     ebp,[esi+0x80000+APPDATA.wnd_clientbox.top]
4789
        add     ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4789
        add     dx,word[esi+0x80000+APPDATA.wnd_clientbox.top]
4790
        add     dx,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
4790
     shl   edx,16
4791
     shl   edx,16
4791
     xor   edi,edi
4792
     xor   edi,edi
4792
     add   edx,ebp
4793
     add   edx,ebp
4793
     add   ebx,edx
4794
     add   ebx,edx
4794
     jmp   [draw_line]
4795
     jmp   [draw_line]