Subversion Repositories Kolibri OS

Rev

Rev 4813 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;=============================================================================;
  2. ;============================[       HEADER       ]===========================;
  3. ;=============================================================================;
  4.   use32
  5.   org    0x0
  6.  
  7.   db     'MENUET01'
  8.   dd     0x01
  9.   dd     START
  10.   dd     I_END
  11.   dd     0x100000
  12.   dd     0x100000
  13.   dd     0x0
  14.   dd     0x0
  15.  
  16.   include '../../macros.inc'
  17. ;=============================================================================;
  18. ;============================[       EVENTS       ]===========================;
  19. ;=============================================================================;
  20. START:
  21.     mcall   40,0xC0000027                 ; óñòàíàâëèâàåì ìàñêó ñîáûòèé
  22.     call    button_init                   ; óñòàíàâëèâàåì ïàðàìåòðû êíîïîê
  23.  
  24.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
  25.     mov     ebx,3                         ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
  26.     mov     ecx,sc                        ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
  27.     mov     edx,200                       ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
  28.     int     0x40                          ; Ïðåðûâàíèå
  29.  
  30.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
  31.     mov     ebx,2                         ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
  32.     mov     ecx,sc                        ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
  33.     mov     edx,200                       ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
  34.     int     0x40                          ; Ïðåðûâàíèå
  35.  
  36.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
  37.     mov     ebx,3                         ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
  38.     mov     ecx,sc                        ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
  39.     mov     edx,200                       ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
  40.     int     0x40                          ; Ïðåðûâàíèå
  41.  
  42. red:
  43.     call    draw_window
  44. still:
  45.     mov     eax,10                        ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ
  46.     int     0x40
  47.     cmp     eax,1                         ; ïåðåðèñîâàòü îêíî ?
  48.     je      red                           ; åñëè äà - íà ìåòêó red
  49.     cmp     eax,2                         ; íàæàòà êëàâèøà ?
  50.     je      key                           ; åñëè äà - íà key
  51.     cmp     eax,3                         ; íàæàòà êíîïêà ?
  52.     je      button                        ; åñëè äà - íà button
  53.     cmp     eax,6
  54.     je      mouse
  55.     jmp     still                         ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
  56. ;end_still
  57.  
  58. key:                                      ; íàæàòà êëàâèøà íà êëàâèàòóðå
  59.     mov     eax,2                         ; ôóíêöèÿ 2 - ñ÷èòàòü êîä ñèìâîëà (â ah) (òóò â ïðèíöèïå íå íóæíà)
  60.     int     0x40
  61.     jmp     still                         ; âåðíóòüñÿ ê íà÷àëó öèêëà
  62. ;end_key
  63.  
  64. button:
  65.     mov     eax,17                        ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè
  66.     int     0x40
  67.     cmp     ah, 1                         ; åñëè íàæàòà êíîïêà ñ íîìåðîì 1,
  68.     jz      bexit                         ; âûõîäèì
  69.     jmp     still
  70.   bexit:
  71.     mov     eax,-1                        ; èíà÷å êîíåö ïðîãðàììû
  72.     int     0x40
  73. ;end_button
  74.  
  75. mouse:
  76.     ;       ; íàæàòà ëè ëêì
  77.     call    draw_edit
  78.     call    mouse_local      ; ïîëó÷àåì êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
  79.     call    button_calc      ; îòñëåæèâàåì íàâåäåíèå êóðñîðà
  80.     call    process_slot     ; ïîëó÷àåì ïîçèöèþ â îêîííîì ñòåêå
  81.     call    button_draw      ; îòðèñîâûâàåì êíîïêè
  82.     jmp     still            ; óõîäèì íà îæèäàíèå ñîáûòèÿ
  83.  
  84.  
  85. ;============================[        CODE        ]===========================;
  86.  
  87.     ret
  88. ;end_draw_result
  89.  
  90.  
  91. ;#___________________________________________________________________________________________________
  92. ;****************************************************************************************************|
  93. ; ÃËÀÂÍÛÉ ÌÎÄÓËÜ ÎÒÐÈÑÎÂÊÈ ÎÊÍÀ È ÝËÅÌÅÍÒÎÂ ÏÐÈËÎÆÅÍÈß                                               |
  94. ;----------------------------------------------------------------------------------------------------/
  95. draw_window:
  96.     mov     eax,12                        ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
  97.     mov     ebx,1                         ; 1,íà÷àëî ðèñîâàíèÿ
  98.     int     0x40                          ; Ïðåðûâàíèå
  99.  
  100.  
  101.  
  102.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí.
  103.     mov     ebx,4                         ; Ïîäôóíêöèÿ 4 - âîçâðàùàåò eax = âûñîòà ñêèíà.
  104.     int     0x40                          ; Ïðåðûâàíèå
  105.     mov     ecx,eax                       ; Çàïîìèíàåì âûñîòó ñêèíà
  106.  
  107.     xor     eax,eax                       ; Î÷èùàåì eax (mov eax,0) (Ôóíêöèÿ 0)
  108.     mov     ebx,200 shl 16+240            ; [êîîðäèíàòà ïî îñè x]*65536 + [ðàçìåð ïî îñè x]
  109.     add     ecx,200 shl 16+280            ; Âûñîòà ñêèíà + [êîîðäèíàòà ïî y]*65536 + [ðàçìåð ïî y]
  110.     mov     edx,[sc.win_body]             ; Âèäèìî ñòèëü îêíà ïî äåôîëòó
  111.     or      edx,0x34000000                ; Èëè îêíî ñî ñêèíîì ôèêñèðîâàííûõ ðàçìåðîâ
  112.     mov     edi,title                     ; Çàãîëîâîê îêíà
  113.     int     0x40                          ; Ïðåðûâàíèå
  114.  
  115.     call    process_slot                  ; ïîëó÷àåì ïîçèöèþ â îêîííîì ñòåêå
  116.     call    button_draw
  117.     call    draw_edit
  118.     call    list_draw
  119.  
  120.     mov     eax,12                        ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
  121.     mov     ebx,2                         ; 1,íà÷àëî ðèñîâàíèÿ
  122.     int     0x40                          ; Ïðåðûâàíèå
  123.  
  124.     ret
  125.  
  126.  
  127.  
  128. ;===================================[ DATA ]==================================;
  129. include   'inc/mouse.inc'                 ; ìûøü
  130. include   'inc/process.inc'               ; èíôî î ïðîöåññå
  131. include   'inc/dtp.inc'                   ; ñòðóêòóðà íîâîé òàáëèöû
  132. include   'inc/button.inc'                ; ñàìîïèñíûå êíîïêè
  133. include   'inc/edit.inc'                  ; ýìóëÿöèÿ íåàêòèâíîãî åäèòà
  134. include   'inc/list.inc'                  ; îòðèñîâêà ñïèñêà
  135.  
  136. ;; window -------------------------------------------------
  137.     sc          new_colors                ; íîâàÿ òàáëèöà öâåòîâ
  138.     title       db 'Color Table',0        ; çàãîëîâîê
  139.     mouse_x     dd 0                      ; õðàíèò ãëîáàëüíóþ õ êîîðäèíàòó ìûøè
  140.     mouse_y     dd 0                      ; õðàíèò ãëîáàëüíóþ ó êîîðäèíàòó ìûøè
  141.     mouse_l     dd 0                      ; ëåâàÿ êíîïêà 1 - íàæàòà 0 - íåò
  142.     win_slot    dd 0                      ; 0- îêíî íå íà âåðõó, 1- íà âåðõó
  143.     buffer      rb  80                    ; ïîä 9 ôóíêöèþ
  144.  
  145. ;; button -------------------------------------------------
  146.     bnext       new_button
  147.     bback       new_button
  148.     arrowa db '<',0
  149.     arrowb db '>',0
  150. ;; edit ---------------------------------------------------
  151.     edit_cnt    dd 1                      ; counter
  152.     edit_win    db 'WINDOW',0             ; 1
  153.     edit_btn    db 'BUTTON',0             ; 2
  154.     edit_gui    db 'ELEMENT',0            ; 3
  155.     edit_cld    db 'SUPPORT',0            ; 4
  156.  
  157. ;; list win -----------------------------------------------
  158.     text_frame    db 'Frame (Activate):',0
  159.     text_inframe  db 'Frame (Inactivate):',0
  160.     text_fcframe  db 'Frame (Focus):',0
  161.     text_face     db 'Face (Activate):',0
  162.     text_inface   db 'Face (Inactivate):',0
  163.     text_fcface   db 'Face (Focus):',0
  164.     text_border   db 'Border (Activate):',0
  165.     text_inborder db 'Border (Inactivate):',0
  166.     text_wtext    db 'Text:',0
  167.     text_graytext db 'Graytext:',0
  168.     text_title    db 'Title:',0
  169.     text_body     db 'Body:',0
  170.     text_reserved db 'Reserved:',0
  171.     text_text     db 'Text (Activate):',0
  172.     text_intext   db 'Text (Inactivate):',0
  173.     text_fctext   db 'Text (Focus):',0
  174.     text_3dlight  db '3D Light:',0
  175.     text_3ddark   db '3D Dark:',0
  176.     text_3dface   db '3D Face:',0
  177.     text_shadow   db 'Shadow:',0
  178.     text_select   db 'Select:',0
  179.     text_p_face   db 'Panel Body:',0
  180.     text_p_frame  db 'Panel Frame:',0
  181.     text_p_text   db 'Panel Text:',0
  182.     text_m_face   db 'Menu Body:',0
  183.     text_m_frame  db 'Menu Frame:',0
  184.     text_m_text   db 'Menu Text:',0
  185.     text_h_face   db 'Hint Body:',0
  186.     text_h_frame  db 'Hint Frame:',0
  187.     text_h_text   db 'Hint Text:',0
  188.     text_hex      db '#',0
  189. ;----------------------------------------------------------
  190. I_END:
  191.