Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7123 dunkaist 1
use32
2
    org 0x0
3
    db  'MENUET01'
4
    dd  0x01,start,i_end,e_end,e_end,0,0
5
 
6
include '../../proc32.inc'
7
include '../../macros.inc'
8
 
9
 
10
NUMCOLORS = 148         ; CSS4 named colors (http://dev.w3.org/csswg/css-color/)
11
 
12
 
13
start:
14
        mcall   66, 1, 1        ; set kbd mode to scancodes
15
still:
16
        mcall   10
17
        dec     eax
18
        jz      redraw
19
        dec     eax
20
        jz      key
21
 
22
button:
23
        mcall   17
24
        shr     eax, 8
25
 
26
        cmp     eax, 1
27
        jz      quit
28
        jmp     still
29
 
30
redraw:
31
        mcall   12, 1
32
 
33
        mov     ebx, [window.left]
34
        shl     ebx, 16
35
        add     ebx, [window.width]
36
        mov     ecx, [window.top]
37
        shl     ecx, 16
38
        add     ecx, [window.height]
39
        mcall   0, , , [window_style], , window_title
40
        mcall   9, proc_info, -1
41
 
42
 
43
        mov     eax, [current_color]
44
        mov     ebx, [proc_info.client_box.width]
45
        inc     ebx
46
        mov     ecx, [proc_info.client_box.height]
47
        inc     ecx
48
        or      edx, [colors + eax*4]
49
        mcall   13, , ,
50
 
51
        mov     eax, [current_color]
52
        movzx   edx, byte[colors + eax*4 + 0]
53
        add     dl, byte[colors + eax*4 + 1]
54
        adc     dh, 0
55
        add     dl, byte[colors + eax*4 + 2]
56
        adc     dh, 0
57
        xor     ecx, ecx
58
        cmp     edx, 0x80*3
59
        jae     @f
60
        add     ecx, 0xffffff
61
    @@:
62
        movzx   edx, [names + eax*2]
63
        movzx   esi, byte[edx]
64
        inc     edx
65
        lea     eax, [esi*3]
66
        add     eax, eax
67
 
68
        mov     ebx, [proc_info.client_box.width]
69
        sub     ebx, eax
70
        inc     ebx
71
        shr     ebx, 1
72
        shl     ebx, 16
73
        add     ebx, [proc_info.client_box.height]
74
        sub     ebx, 9
75
        shr     bx, 1
76
 
77
        mcall   4, , ,
78
 
79
        mcall   12, 2
80
        jmp     still
81
 
82
key:
83
        mcall   2
84
        cmp     ah, 63  ; f5
85
        jnz     @f
86
        call    toggle_fullscreen
87
        jmp     redraw
88
    @@:
89
        cmp     ah, 1   ; esc
90
        jnz     @f
91
        bt      [window_style], 25
92
        jc      quit
93
        call    toggle_fullscreen
94
        jmp     redraw
95
    @@:
96
        cmp     ah, 72  ; up
97
        jz      .prev
98
        cmp     ah, 75  ; left
99
        jz      .prev
100
        cmp     ah, 73  ; page up
101
        jz      .prev
102
        cmp     ah, 77  ; right
103
        jz      .next
104
        cmp     ah, 80  ; down
105
        jz      .next
106
        cmp     ah, 81  ; page down
107
        jz      .next
108
        jmp     still
109
 
110
.prev:
111
        dec     [current_color]
112
        jns     @f
113
        mov     [current_color], NUMCOLORS - 1
114
    @@:
115
        jmp     redraw
116
 
117
.next:
118
        inc     [current_color]
119
        cmp     [current_color], NUMCOLORS
120
        jnz     @f
121
        mov     [current_color], 0
122
    @@:
123
        jmp     redraw
124
 
125
 
126
toggle_fullscreen:
127
        btc     [window_style], 25
128
        jc      .fullscreen
129
        ; back from fullscreen
130
        mcall   67, [window.left], [window.top], [window.width], [window.height]
131
        jmp     .done
132
  .fullscreen:
133
        mov     eax, [proc_info.box.width]
134
        mov     [window.width], eax
135
        mov     eax, [proc_info.box.height]
136
        mov     [window.height], eax
137
        mov     eax, [proc_info.box.left]
138
        mov     [window.left], eax
139
        mov     eax, [proc_info.box.top]
140
        mov     [window.top], eax
141
        mcall   14
142
        mov     edx, eax
143
        shr     edx, 16
144
        movzx   eax, ax
145
        mov     esi, eax
146
        mcall   67, 0, 0, ,
147
  .done:
148
        ret
149
 
150
quit:
151
        mcall   -1
152
 
153
 
154
window_title    db 'Rainbow',0
155
window_style    dd 0x73000000
156
window          BOX 300, 300, 315, 184  ; left top width height
157
current_color   dd 0
158
 
159
align 4
160
include 'colors.asm'    ; generated data
161
 
162
i_end:
163
proc_info               process_information
164
rb 0x100                                        ;stack
165
e_end: