Subversion Repositories Kolibri OS

Rev

Rev 6196 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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