Subversion Repositories Kolibri OS

Rev

Rev 5093 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. include '../../../../proc32.inc'
  3.  
  4. struc system_colors
  5. {
  6.   .frame            dd ?
  7.   .grab             dd ?
  8.   .work_3d_dark      dd ?
  9.   .work_3d_light dd ?
  10.   .grab_text        dd ?
  11.   .work             dd ?
  12.   .work_button      dd ?
  13.   .work_button_text dd ?
  14.   .work_text        dd ?
  15.   .work_graph       dd ?
  16. }
  17.  
  18. use32
  19.  
  20. db 'MENUET01'
  21. dd 1
  22. dd start
  23. dd i_end
  24. dd mem
  25. dd mem
  26. dd 0
  27. dd 0
  28.  
  29. include 'pixlib.inc'
  30.  
  31. align 4
  32. start:
  33.            call load_pxlib
  34.            test eax, eax
  35.            jz .fail
  36.  
  37.            sub esp, 1024
  38.  
  39.            mov eax, 9
  40.            mov ebx, esp
  41.            mov ecx, -1
  42.            int 0x40
  43.  
  44.            movzx ecx, word [esp+0x1E]
  45.            mov eax, 18
  46.            mov ebx, 21
  47.            int 0x40
  48.  
  49.            mov [slot], eax
  50.  
  51.            add esp, 1024
  52.  
  53.            mov  eax,48                      ; get system colors
  54.            mov  ebx,3
  55.            mov  ecx,sc
  56.            mov  edx,10*4
  57.            int 0x40
  58.  
  59.            CreateHatch HS_CROSS, 0xFFFFFFFF, 0xFF000000
  60.            mov [br_cross], eax
  61.  
  62.            CreateHatch HS_DIAGCROSS, 0xFFFFFFFF, 0xFF000000
  63.            mov [br_dcross], eax
  64.  
  65.            CreateHatch HS_HORIZONTAL, 0xFFFFFFFF, 0xFF000000
  66.            mov [br_horz], eax
  67.  
  68.            CreateHatch HS_VERTICAL, 0xFFFFFFFF, 0xFF000000
  69.            mov [br_vert], eax
  70.  
  71.            CreateHatch HS_FDIAGONAL, 0xFFFFFFFF, 0xFF000000
  72.            mov [br_fd], eax
  73.  
  74.            CreateHatch HS_BDIAGONAL, 0xFFFFFFFF, 0xFF000000
  75.            mov [br_bd], eax
  76.  
  77. .redraw:
  78.            call draw_window
  79.  
  80. .wait_event:
  81.  
  82.            mov eax, 18
  83.            mov ebx, 7
  84.            int 0x40
  85.            cmp eax, [slot]
  86.            jne .skip_draw
  87.  
  88.            sub esp, 1024
  89.  
  90.            mov eax, 9
  91.            mov ebx, esp
  92.            mov ecx, -1
  93.            int 0x40
  94.  
  95.            mov edx, [esp+0x22]; xwin
  96.            mov ecx, [esp+0x26]; ywin
  97.            add edx, [esp+0x36]
  98.            add ecx, [esp+0x3A]
  99.  
  100.            mov eax, [esp+0x3E]  ;width
  101.            mov ebx, [esp+0x42]  ;height
  102.  
  103.            add esp, 1024
  104.  
  105.            cmp eax, 50
  106.            jle .skip_draw
  107.  
  108.            cmp ebx, 40
  109.            jle .skip_draw
  110.  
  111.            push ebx
  112.            push eax
  113.            push ecx
  114.            push edx
  115.            call _Draw
  116.            add esp, 16
  117.  
  118. .skip_draw:
  119.  
  120.            mov ebx, 1000
  121.            mov eax, 23
  122.            int 0x40
  123.  
  124.         ;   mov eax, 11
  125.         ;   int 0x40
  126.  
  127.            dec eax                     ;   if event = 1
  128.         ;  js .wait_event
  129.  
  130.            jz  .redraw                 ;   jump to redraw handler
  131.            dec eax                     ;   else if event = 2
  132.            jz  .key                    ;   jump to key handler
  133.            dec eax
  134.            jz  .button
  135.  
  136.            jmp .wait_event
  137.  
  138. .button:                               ; button event handler
  139.            mov al, 17                  ;   get button identifier
  140.            int 0x40
  141.  
  142.            cmp ah, 1
  143.            jne .wait_event             ;   return if button id != 1
  144. .exit:
  145.                                        ; restore old screen and cleanup
  146. .fail:
  147.            or eax, -1                  ;   exit application
  148.            int 0x40
  149. .key:                                  ; key event handler
  150.            mov al, 2                   ;   get key code
  151.            int 0x40
  152.  
  153.            jmp .wait_event
  154.  
  155. draw_window:
  156.            mov eax, 12                 ; start drawing
  157.            mov ebx, 1
  158.            int 0x40
  159.  
  160.            xor  eax, eax               ; create and draw the window
  161.            mov  ebx, 100*65536+320     ; (window_cx)*65536+(window_sx)
  162.            mov  ecx, 100*65536+240     ; (window_cy)*65536+(window_sy)
  163.            mov  edx, [sc.work]         ; work area color
  164.            or   edx, 0x33000000        ; & window type 3
  165.            mov  edi, title             ; window title
  166.            int  0x40
  167.  
  168.            mov  eax, 12                ; finish drawing
  169.            mov  ebx, 2
  170.            int  0x40
  171.  
  172.            ret
  173.  
  174. DWORD equ dword
  175. PTR   equ
  176.  
  177. _Draw:
  178.         push    ebp
  179.         push    edi
  180.         push    esi
  181.         push    ebx
  182.         mov     ebx, 1431655766
  183.         sub     esp, 44
  184.         mov     esi, DWORD PTR [esp+72]
  185.         mov     ecx, DWORD PTR [esp+76]
  186.         mov     DWORD PTR [esp+24], -16777216
  187.         mov     DWORD PTR [esp], -1
  188.         lea     edi, [esi-40]
  189.         mov     eax, edi
  190.         imul    ebx
  191.         sar     edi, 31
  192.         lea     eax, [ecx-30]
  193.         sub     ecx, 10
  194.         mov     ebp, edx
  195.         sub     ebp, edi
  196.         mov     edi, eax
  197.         shr     edi, 31
  198.         add     edi, eax
  199.         lea     edx, [esi-20]
  200.         lea     eax, [ebp+ebp*2]
  201.         sub     edx, eax
  202.         mov     esi, edx
  203.         shr     esi, 31
  204.         add     esi, edx
  205.         sar     esi, 1
  206.         add     esi, DWORD PTR [esp+64]
  207.         sar     edi, 1
  208.         lea     eax, [ebp+10+esi]
  209.         mov     DWORD PTR [esp+32], eax
  210.         lea     eax, [edi+edi]
  211.         sub     ecx, eax
  212.         mov     ebx, ecx
  213.         shr     ebx, 31
  214.         add     ebx, ecx
  215.         sar     ebx, 1
  216.         add     ebx, DWORD PTR [esp+68]
  217.         lea     edx, [esi+20+ebp*2]
  218.         mov     DWORD PTR [esp+36], edx
  219.         lea     eax, [ebx+10+edi]
  220.         mov     DWORD PTR [esp+40], eax
  221.  
  222.         FillRect -1, esi, ebx,ebp, edi, [br_fd], 0xFF000000
  223.  
  224.         mov     edx, DWORD PTR [esp+32]
  225.         FillRect -1, edx, ebx, ebp, edi, [br_cross], 0xFF000000
  226.  
  227.         mov     eax, DWORD PTR [esp+36]
  228.         FillRect -1, eax, ebx, ebp, edi, [br_horz],0xFF000000
  229.  
  230.         mov     edx, DWORD PTR [esp+40]
  231.         FillRect -1, esi, edx, ebp, edi, [br_bd], 0xFF000000
  232.  
  233.         mov     edx, DWORD PTR [esp+32]
  234.         mov     eax, DWORD PTR [esp+40]
  235.         FillRect -1, edx, eax, ebp, edi, [br_dcross], 0xFF000000
  236.  
  237.         mov     edx, DWORD PTR [esp+36]
  238.         mov     eax, DWORD PTR [esp+40]
  239.         FillRect -1, edx, eax, ebp, edi, [br_vert], 0xFF000000
  240.  
  241.         call    [imp_FillRect]
  242.  
  243.  
  244.         add     esp, 44
  245.         pop     ebx
  246.         pop     esi
  247.         pop     edi
  248.         pop     ebp
  249.         ret
  250.  
  251. align 4
  252.  
  253.  
  254. count       dd  0
  255.  
  256. title       db  'Hatches',0
  257.  
  258. i_end:
  259.  
  260. align 4
  261.  
  262. slot         rd 1
  263.  
  264. br_fd        rd 1
  265. br_bd        rd 1
  266. br_cross     rd 1
  267. br_dcross    rd 1
  268. br_horz      rd 1
  269. br_vert      rd 1
  270.  
  271. sc   system_colors
  272.  
  273. align 16
  274.  
  275.  
  276. rb 2048  ;stack
  277. mem:
  278.  
  279.