Subversion Repositories Kolibri OS

Rev

Rev 5093 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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