Rev 105 | Rev 114 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 105 | Rev 112 | ||
---|---|---|---|
1 | get_titlebar_height: ; edi = window draw_data pointer |
1 | get_titlebar_height: ; edi = window draw_data pointer |
2 | mov al,[edi+WDATA.fl_wstyle] |
2 | mov al,[edi+WDATA.fl_wstyle] |
3 | and al,0x0F |
3 | and al,0x0F |
4 | cmp al,0x03 |
4 | cmp al,0x03 |
5 | jne @f |
5 | jne @f |
6 | mov eax,[_skinh] |
6 | mov eax,[_skinh] |
7 | ret |
7 | ret |
8 | @@: mov eax,21 |
8 | @@: mov eax,21 |
9 | ret |
9 | ret |
10 | 10 | ||
11 | get_rolledup_height: ; edi = window draw_data pointer |
11 | get_rolledup_height: ; edi = window draw_data pointer |
12 | mov al,[edi+WDATA.fl_wstyle] |
12 | mov al,[edi+WDATA.fl_wstyle] |
13 | and al,0x0F |
13 | and al,0x0F |
14 | cmp al,0x03 |
14 | cmp al,0x03 |
15 | jne @f |
15 | jne @f |
16 | mov eax,[_skinh] |
16 | mov eax,[_skinh] |
17 | add eax,3 |
17 | add eax,3 |
18 | ret |
18 | ret |
19 | @@: or al,al |
19 | @@: or al,al |
20 | jnz @f |
20 | jnz @f |
21 | mov eax,21 |
21 | mov eax,21 |
22 | ret |
22 | ret |
23 | @@: mov eax,21+2 |
23 | @@: mov eax,21+2 |
24 | ret |
24 | ret |
25 | 25 | ||
26 | 26 | ||
27 | setwindowdefaults: |
27 | setwindowdefaults: |
28 | pushad |
28 | pushad |
29 | 29 | ||
30 | xor eax,eax |
30 | xor eax,eax |
31 | mov ecx,0xc000 |
31 | mov ecx,0xc000 |
32 | @@: |
32 | @@: |
33 | inc eax |
33 | inc eax |
34 | add ecx,2 |
34 | add ecx,2 |
35 | mov [ecx+0x000],ax ; process no |
35 | mov [ecx+0x000],ax ; process no |
36 | mov [ecx+0x400],ax ; positions in stack |
36 | mov [ecx+0x400],ax ; positions in stack |
37 | cmp ecx,0xc400-2 ; the more high, the more surface |
37 | cmp ecx,0xc400-2 ; the more high, the more surface |
38 | jnz @b |
38 | jnz @b |
39 | 39 | ||
40 | popad |
40 | popad |
41 | ret |
41 | ret |
42 | 42 | ||
43 | 43 | ||
44 | 44 | ||
45 | ; eax = cx |
45 | ; eax = cx |
46 | ; ebx = cy |
46 | ; ebx = cy |
47 | ; ecx = ex |
47 | ; ecx = ex |
48 | ; edx = ey |
48 | ; edx = ey |
49 | ; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî, |
49 | ; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî, |
- | 50 | ; è äëÿ ïîïàâøèõ â çàäàííóþ îáëàñòü |
|
50 | ; è äëÿ êàæäîãî âûçâàòü setscreen |
51 | ; ÷àñòåé îêîí âûçâàòü setscreen |
51 | align 4 |
52 | align 4 |
52 | calculatescreen: |
53 | calculatescreen: |
53 | pushad |
54 | pushad |
54 | pushfd |
55 | pushfd |
55 | cli |
56 | cli |
- | 57 | ||
- | 58 | push edx ecx ebx eax |
|
56 | 59 | ||
57 | mov esi, 1 |
- | |
58 | xor eax, eax |
- | |
59 | xor ebx, ebx |
- | |
60 | mov ecx, [0xFE00] |
- | |
61 | mov edx, [0xFE04] |
60 | mov esi, 1 |
62 | call setscreen |
61 | call setscreen |
63 | 62 | ||
64 | mov ebp, [0x3004] ; number of processes |
63 | mov ebp, [0x3004] ; number of processes |
65 | cmp ebp, 1 |
64 | cmp ebp, 1 |
66 | jbe .finish |
65 | jbe .finish |
67 | align 4 |
66 | align 4 |
68 | .new_wnd: |
67 | .new_wnd: |
69 | movzx edi, word [0xC400 + esi * 2] |
68 | movzx edi, word [0xC400 + esi * 2] |
70 | shl edi, 5 |
69 | shl edi, 5 |
71 | 70 | ||
72 | cmp [0x3000+edi+0xa], byte 9 |
71 | cmp [0x3000+edi+0xa], byte 9 |
73 | je .not_wnd |
72 | je .not_wnd |
74 | 73 | ||
75 | add edi, window_data |
74 | add edi, window_data |
76 | test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
75 | test [edi+WDATA.fl_wstate], WSTATE_MINIMIZED |
77 | jnz .not_wnd |
76 | jnz .not_wnd |
- | 77 | ||
78 | mov eax,[edi+WDATA.left] |
78 | mov eax, [edi+WDATA.left] |
- | 79 | cmp eax, [esp+RECT.right] |
|
- | 80 | ja .out_of_bounds |
|
79 | mov ebx,[edi+WDATA.top] |
81 | mov ebx, [edi+WDATA.top] |
- | 82 | cmp ebx, [esp+RECT.bottom] |
|
- | 83 | ja .out_of_bounds |
|
80 | mov ecx,[edi+WDATA.width] |
84 | mov ecx, [edi+WDATA.width] |
81 | add ecx,eax |
85 | add ecx, eax |
- | 86 | cmp ecx, [esp+RECT.left] |
|
- | 87 | jb .out_of_bounds |
|
82 | mov edx,[edi+WDATA.height] |
88 | mov edx, [edi+WDATA.height] |
83 | add edx,ebx |
89 | add edx, ebx |
- | 90 | cmp edx, [esp+RECT.top] |
|
- | 91 | jb .out_of_bounds |
|
- | 92 | ||
- | 93 | cmp eax, [esp+RECT.left] |
|
- | 94 | jae @f |
|
- | 95 | mov eax, [esp+RECT.left] |
|
- | 96 | @@: |
|
- | 97 | cmp ebx, [esp+RECT.top] |
|
- | 98 | jae @f |
|
- | 99 | mov ebx, [esp+RECT.top] |
|
- | 100 | @@: |
|
- | 101 | cmp ecx, [esp+RECT.right] |
|
- | 102 | jbe @f |
|
- | 103 | mov ecx, [esp+RECT.right] |
|
- | 104 | @@: |
|
- | 105 | cmp edx, [esp+RECT.bottom] |
|
- | 106 | jbe @f |
|
- | 107 | mov edx, [esp+RECT.bottom] |
|
- | 108 | @@: |
|
- | 109 | ||
84 | push esi |
110 | push esi |
85 | movzx esi, word [0xC400 + esi * 2] |
111 | movzx esi, word [0xC400 + esi * 2] |
86 | call setscreen |
112 | call setscreen |
87 | pop esi |
113 | pop esi |
- | 114 | ||
88 | .not_wnd: |
115 | .not_wnd: |
- | 116 | .out_of_bounds: |
|
89 | inc esi |
117 | inc esi |
90 | dec ebp |
118 | dec ebp |
91 | jnz .new_wnd |
119 | jnz .new_wnd |
92 | .finish: |
120 | .finish: |
- | 121 | ||
- | 122 | pop eax ebx ecx edx |
|
- | 123 | ||
93 | popfd |
124 | popfd |
94 | popad |
125 | popad |
95 | ret |
126 | ret |
96 | 127 | ||
97 | 128 | ||
98 | 129 | ||
99 | virtual at esp |
130 | virtual at esp |
- | 131 | ff_x dd ? |
|
- | 132 | ff_y dd ? |
|
- | 133 | ff_width dd ? |
|
100 | ff_xsz dd ? |
134 | ff_xsz dd ? |
101 | ff_ysz dd ? |
135 | ff_ysz dd ? |
102 | ff_scale dd ? |
136 | ff_scale dd ? |
103 | end virtual |
137 | end virtual |
104 | 138 | ||
105 | align 4 |
139 | align 4 |
106 | ; ðåçåðâèðóåò ìåñòî ïîä îêíî çàäàííîãî ïðîöåññà |
140 | ; ðåçåðâèðóåò ìåñòî ïîä îêíî çàäàííîãî ïðîöåññà |
107 | setscreen: |
141 | setscreen: |
108 | ; eax x start |
142 | ; eax x start |
109 | ; ebx y start |
143 | ; ebx y start |
110 | ; ecx x end |
144 | ; ecx x end |
111 | ; edx y end |
145 | ; edx y end |
112 | ; esi process number |
146 | ; esi process number |
113 | pushad |
147 | pushad |
114 | mov edi, esi ;;;word [esi*2+0xc400] |
148 | mov edi, esi ;;;word [esi*2+0xc400] |
115 | shl edi, 8 |
149 | shl edi, 8 |
116 | add edi, 0x80000+0x80 ; address of random shaped window area |
150 | add edi, 0x80000+0x80 ; address of random shaped window area |
117 | cmp [edi], dword 0 |
151 | cmp [edi], dword 0 |
118 | jne .free_form |
152 | jne .free_form |
119 | 153 | ||
120 | ; get x&y size |
154 | ; get x&y size |
121 | sub ecx, eax |
155 | sub ecx, eax |
122 | sub edx, ebx |
156 | sub edx, ebx |
123 | inc ecx |
157 | inc ecx |
124 | inc edx |
158 | inc edx |
125 | 159 | ||
126 | ; get WinMap start |
160 | ; get WinMap start |
127 | mov edi, [0xFE00] ; screen_sx |
161 | mov edi, [0xFE00] ; screen_sx |
128 | inc edi |
162 | inc edi |
129 | imul edi, ebx |
163 | imul edi, ebx |
130 | add edi, eax |
164 | add edi, eax |
131 | add edi, WinMapAddress |
165 | add edi, WinMapAddress |
132 | 166 | ||
133 | .new_y: |
167 | .new_y: |
134 | push ecx ; sx |
168 | push ecx ; sx |
135 | push edx |
169 | push edx |
136 | 170 | ||
137 | mov edx, esi |
171 | mov edx, esi |
138 | align 4 |
172 | align 4 |
139 | .new_x: |
173 | .new_x: |
140 | mov byte [edi], dl |
174 | mov byte [edi], dl |
141 | inc edi |
175 | inc edi |
142 | dec ecx |
176 | dec ecx |
143 | jnz .new_x |
177 | jnz .new_x |
144 | 178 | ||
145 | pop edx |
179 | pop edx |
146 | pop ecx |
180 | pop ecx |
147 | add edi, [0xFE00] |
181 | add edi, [0xFE00] |
148 | inc edi |
182 | inc edi |
149 | sub edi, ecx |
183 | sub edi, ecx |
150 | dec edx |
184 | dec edx |
151 | jnz .new_y |
185 | jnz .new_y |
152 | popad |
186 | popad |
153 | ret |
187 | ret |
154 | .read_byte: |
188 | .read_byte: |
155 | ;eax - address |
189 | ;eax - address |
156 | ;esi - slot |
190 | ;esi - slot |
157 | push eax |
191 | push eax |
158 | push ebx |
192 | push ebx |
159 | push ecx |
193 | push ecx |
160 | push edx |
194 | push edx |
161 | mov edx,eax |
195 | mov edx,eax |
162 | mov eax,esi |
196 | mov eax,esi |
163 | lea ebx,[esp+12] |
197 | lea ebx,[esp+12] |
164 | mov ecx,1 |
198 | mov ecx,1 |
165 | call read_process_memory |
199 | call read_process_memory |
166 | pop edx |
200 | pop edx |
167 | pop ecx |
201 | pop ecx |
168 | pop ebx |
202 | pop ebx |
169 | pop eax |
203 | pop eax |
170 | ret |
204 | ret |
171 | .free_form: |
205 | .free_form: |
172 | 206 | ||
173 | ; for (y=0; y <= x_size; y++) |
207 | ; for (y=0; y <= x_size; y++) |
174 | ; for (x=0; x <= x_size; x++) |
208 | ; for (x=0; x <= x_size; x++) |
175 | ; if (shape[coord(x,y,scale)]==1) |
209 | ; if (shape[coord(x,y,scale)]==1) |
176 | ; set_pixel(x, y, process_number); |
210 | ; set_pixel(x, y, process_number); |
177 | 211 | ||
178 | sub ecx, eax |
212 | sub ecx, eax |
179 | sub edx, ebx |
213 | sub edx, ebx |
180 | inc ecx |
214 | inc ecx |
181 | inc edx |
215 | inc edx |
182 | 216 | ||
183 | push dword [edi+4] ; push scale first -> for loop |
217 | push dword [edi+4] ; push scale first -> for loop |
184 | 218 | ||
185 | ; get WinMap start -> ebp |
219 | ; get WinMap start -> ebp |
186 | push eax |
220 | push eax |
187 | mov eax, [0xFE00] ; screen_sx |
221 | mov eax, [0xFE00] ; screen_sx |
188 | inc eax |
222 | inc eax |
189 | imul eax, ebx ;ebx |
223 | imul eax, ebx |
190 | add eax, [esp] ;eax |
224 | add eax, [esp] |
191 | add eax, WinMapAddress |
225 | add eax, WinMapAddress |
192 | mov ebp, eax |
226 | mov ebp, eax |
193 | 227 | ||
194 | mov edi, [edi] |
228 | mov edi, [edi] |
195 | ; mov eax, esi |
- | |
196 | ; shl eax, 5 |
- | |
197 | ; add edi, [eax+0x3000+0x10] |
- | |
198 | pop eax |
229 | pop eax |
199 | 230 | ||
200 | ; eax = x_start |
231 | ; eax = x_start |
201 | ; ebx = y_start |
232 | ; ebx = y_start |
202 | ; ecx = x_size |
233 | ; ecx = x_size |
203 | ; edx = y_size |
234 | ; edx = y_size |
204 | ; esi = process_number |
235 | ; esi = process_number |
205 | ; edi = &shape |
236 | ; edi = &shape |
206 | ; [scale] |
237 | ; [scale] |
207 | push edx ecx ;ebx eax |
238 | push edx ecx ; for loop - x,y size |
- | 239 | ||
208 | xor ebx, ebx |
240 | mov ecx, esi |
209 | align 4 |
241 | shl ecx, 5 |
- | 242 | mov edx, [window_data+ecx+WDATA.top] |
|
- | 243 | push [window_data+ecx+WDATA.width] ; for loop - width |
|
- | 244 | mov ecx, [window_data+ecx+WDATA.left] |
|
- | 245 | sub ebx, edx |
|
- | 246 | sub eax, ecx |
|
- | 247 | push ebx eax ; for loop - x,y |
|
- | 248 | ||
- | 249 | add [ff_xsz], eax |
|
- | 250 | add [ff_ysz], ebx |
|
- | 251 | ||
- | 252 | mov ebx, [ff_y] |
|
- | 253 | ||
210 | .ff_new_y: |
254 | .ff_new_y: |
211 | xor edx, edx |
255 | mov edx, [ff_x] |
212 | align 4 |
256 | |
213 | .ff_new_x: |
257 | .ff_new_x: |
214 | ; -- body -- |
258 | ; -- body -- |
215 | mov ecx, [ff_scale] |
259 | mov ecx, [ff_scale] |
216 | mov eax, [ff_xsz] |
260 | mov eax, [ff_width] |
- | 261 | inc eax |
|
217 | shr eax, cl |
262 | shr eax, cl |
218 | push ebx edx |
263 | push ebx edx |
219 | shr ebx, cl |
264 | shr ebx, cl |
220 | shr edx, cl |
265 | shr edx, cl |
221 | imul eax, ebx |
266 | imul eax, ebx |
222 | add eax, edx |
267 | add eax, edx |
223 | pop edx ebx |
268 | pop edx ebx |
224 | add eax, edi ;[ff_shape] |
269 | add eax, edi |
225 | call .read_byte |
270 | call .read_byte |
226 | ; cmp byte [eax], 1 |
- | |
227 | ; jne @f |
- | |
228 | test al,al |
271 | test al,al |
229 | jz @f |
272 | jz @f |
230 | mov eax, esi ; [ff_proc] |
273 | mov eax, esi |
231 | mov [ebp], al |
274 | mov [ebp], al |
232 | @@: |
275 | @@: |
233 | ; -- end body -- |
276 | ; -- end body -- |
234 | inc ebp |
277 | inc ebp |
235 | inc edx |
278 | inc edx |
236 | cmp edx, [ff_xsz] |
279 | cmp edx, [ff_xsz] |
237 | jb .ff_new_x |
280 | jb .ff_new_x |
238 | sub ebp, [ff_xsz] |
281 | sub ebp, [ff_xsz] |
- | 282 | add ebp, [ff_x] |
|
239 | add ebp, [0xFE00] ; screen.x |
283 | add ebp, [0xFE00] ; screen.x |
240 | inc ebp |
284 | inc ebp |
241 | inc ebx |
285 | inc ebx |
242 | cmp ebx, [ff_ysz] |
286 | cmp ebx, [ff_ysz] |
243 | jb .ff_new_y |
287 | jb .ff_new_y |
244 | - | ||
245 | pop ecx edx ; eax ebx first |
288 | |
246 | add esp, 4 |
289 | add esp, 24 |
247 | popad |
290 | popad |
248 | ret |
291 | ret |
249 | 292 | ||
250 | 293 | ||
251 | display_settings: |
294 | display_settings: |
252 | 295 | ||
253 | ; eax = 0 ; DISPLAY redraw |
296 | ; eax = 0 ; DISPLAY redraw |
254 | ; ebx = 0 ; all |
297 | ; ebx = 0 ; all |
255 | ; |
298 | ; |
256 | ; eax = 1 ; BUTTON type |
299 | ; eax = 1 ; BUTTON type |
257 | ; ebx = 0 ; flat |
300 | ; ebx = 0 ; flat |
258 | ; ebx = 1 ; 3D |
301 | ; ebx = 1 ; 3D |
259 | ; eax = 2 ; set WINDOW colours |
302 | ; eax = 2 ; set WINDOW colours |
260 | ; ebx = pointer to table |
303 | ; ebx = pointer to table |
261 | ; ecx = number of bytes define |
304 | ; ecx = number of bytes define |
262 | ; eax = 3 ; get WINDOW colours |
305 | ; eax = 3 ; get WINDOW colours |
263 | ; ebx = pointer to table |
306 | ; ebx = pointer to table |
264 | ; ecx = number of bytes wanted |
307 | ; ecx = number of bytes wanted |
265 | ; eax = 4 ; get skin height |
308 | ; eax = 4 ; get skin height |
266 | ; input : nothing |
309 | ; input : nothing |
267 | ; output : eax = skin height in pixel |
310 | ; output : eax = skin height in pixel |
268 | ; eax = 5 ; get screen workarea |
311 | ; eax = 5 ; get screen workarea |
269 | ; input : nothing |
312 | ; input : nothing |
270 | ; output : eax = [left]*65536+[right] |
313 | ; output : eax = [left]*65536+[right] |
271 | ; ebx = [top]*65536+[bottom] |
314 | ; ebx = [top]*65536+[bottom] |
272 | ; eax = 6 ; set screen workarea |
315 | ; eax = 6 ; set screen workarea |
273 | ; input : ecx = [left]*65536+[right] |
316 | ; input : ecx = [left]*65536+[right] |
274 | ; edx = [top]*65536+[bottom] |
317 | ; edx = [top]*65536+[bottom] |
275 | ; output : nothing |
318 | ; output : nothing |
276 | ; eax = 7 ; get skin margins |
319 | ; eax = 7 ; get skin margins |
277 | ; input : nothing |
320 | ; input : nothing |
278 | ; output : eax = [left]*65536+[right] |
321 | ; output : eax = [left]*65536+[right] |
279 | ; ebx = [top]*65536+[bottom] |
322 | ; ebx = [top]*65536+[bottom] |
280 | ; eax = 8 ; set window skin |
323 | ; eax = 8 ; set window skin |
281 | ; input : ecx = pointer to file info block |
324 | ; input : ecx = pointer to file info block |
282 | ; output : eax = FS error code |
325 | ; output : eax = FS error code |
283 | 326 | ||
284 | 327 | ||
285 | pushad |
328 | pushad |
286 | 329 | ||
287 | test eax, eax ; redraw display |
330 | test eax, eax ; redraw display |
288 | jnz dspl0 |
331 | jnz dspl0 |
289 | test ebx, ebx |
332 | test ebx, ebx |
290 | jnz dspl0 |
333 | jnz dspl0 |
291 | cmp [windowtypechanged],dword 1 |
334 | cmp [windowtypechanged],dword 1 |
292 | jne dspl00 |
335 | jne dspl00 |
293 | mov [windowtypechanged],dword 0 |
336 | mov [windowtypechanged],dword 0 |
294 | redraw_screen_direct: |
337 | redraw_screen_direct: |
295 | mov [dlx],dword 0 |
338 | mov [dlx],dword 0 |
296 | mov [dly],dword 0 |
339 | mov [dly],dword 0 |
297 | mov eax,[0xfe00] |
340 | mov eax,[0xfe00] |
298 | mov [dlxe],eax |
341 | mov [dlxe],eax |
299 | mov eax,[0xfe04] |
342 | mov eax,[0xfe04] |
300 | mov [dlye],eax |
343 | mov [dlye],eax |
301 | mov eax,window_data |
344 | mov eax,window_data |
302 | call redrawscreen |
345 | call redrawscreen |
303 | dspl00: |
346 | dspl00: |
304 | popad |
347 | popad |
305 | ret |
348 | ret |
306 | dspl0: |
349 | dspl0: |
307 | 350 | ||
308 | cmp eax,1 ; button type |
351 | cmp eax,1 ; button type |
309 | jne dspl1 |
352 | jne dspl1 |
310 | and ebx,1 |
353 | and ebx,1 |
311 | cmp ebx,[buttontype] |
354 | cmp ebx,[buttontype] |
312 | je dspl9 |
355 | je dspl9 |
313 | mov [buttontype],ebx |
356 | mov [buttontype],ebx |
314 | mov [windowtypechanged],dword 1 |
357 | mov [windowtypechanged],dword 1 |
315 | dspl9: |
358 | dspl9: |
316 | popad |
359 | popad |
317 | ret |
360 | ret |
318 | dspl1: |
361 | dspl1: |
319 | 362 | ||
320 | cmp eax,2 ; set common window colours |
363 | cmp eax,2 ; set common window colours |
321 | jne no_com_colours |
364 | jne no_com_colours |
322 | mov [windowtypechanged],dword 1 |
365 | mov [windowtypechanged],dword 1 |
323 | mov esi,[0x3010] |
366 | mov esi,[0x3010] |
324 | add esi,0x10 |
367 | add esi,0x10 |
325 | add ebx,[esi] |
368 | add ebx,[esi] |
326 | mov esi,ebx |
369 | mov esi,ebx |
327 | mov edi,common_colours |
370 | mov edi,common_colours |
328 | and ecx,127 |
371 | and ecx,127 |
329 | cld |
372 | cld |
330 | rep movsb |
373 | rep movsb |
331 | popad |
374 | popad |
332 | ret |
375 | ret |
333 | no_com_colours: |
376 | no_com_colours: |
334 | 377 | ||
335 | cmp eax,3 ; get common window colours |
378 | cmp eax,3 ; get common window colours |
336 | jne no_get_com |
379 | jne no_get_com |
337 | mov esi,[0x3010] |
380 | mov esi,[0x3010] |
338 | add esi,0x10 |
381 | add esi,0x10 |
339 | add ebx,[esi] |
382 | add ebx,[esi] |
340 | mov edi,ebx |
383 | mov edi,ebx |
341 | mov esi,common_colours |
384 | mov esi,common_colours |
342 | and ecx,127 |
385 | and ecx,127 |
343 | cld |
386 | cld |
344 | rep movsb |
387 | rep movsb |
345 | popad |
388 | popad |
346 | ret |
389 | ret |
347 | no_get_com: |
390 | no_get_com: |
348 | 391 | ||
349 | cmp eax,4 ; get skin height |
392 | cmp eax,4 ; get skin height |
350 | jne no_skin_height |
393 | jne no_skin_height |
351 | popad |
394 | popad |
352 | mov eax,[_skinh] |
395 | mov eax,[_skinh] |
353 | mov [esp+36],eax |
396 | mov [esp+36],eax |
354 | ret |
397 | ret |
355 | no_skin_height: |
398 | no_skin_height: |
356 | 399 | ||
357 | cmp eax,5 ; get screen workarea |
400 | cmp eax,5 ; get screen workarea |
358 | jne no_get_workarea |
401 | jne no_get_workarea |
359 | popad |
402 | popad |
360 | mov eax,[screen_workarea.left-2] |
403 | mov eax,[screen_workarea.left-2] |
361 | mov ax,word[screen_workarea.right] |
404 | mov ax,word[screen_workarea.right] |
362 | mov [esp+36],eax |
405 | mov [esp+36],eax |
363 | mov eax,[screen_workarea.top-2] |
406 | mov eax,[screen_workarea.top-2] |
364 | mov ax,word[screen_workarea.bottom] |
407 | mov ax,word[screen_workarea.bottom] |
365 | mov [esp+24],eax |
408 | mov [esp+24],eax |
366 | ret |
409 | ret |
367 | no_get_workarea: |
410 | no_get_workarea: |
368 | 411 | ||
369 | cmp eax,6 ; set screen workarea |
412 | cmp eax,6 ; set screen workarea |
370 | jne no_set_workarea |
413 | jne no_set_workarea |
371 | movsx eax,word[esp+16+2] |
414 | movsx eax,word[esp+16+2] |
372 | movsx ebx,word[esp+16] |
415 | movsx ebx,word[esp+16] |
373 | cmp eax,ebx |
416 | cmp eax,ebx |
374 | jge .lp1 |
417 | jge .lp1 |
375 | or eax,eax;[0xFE00] |
418 | or eax,eax;[0xFE00] |
376 | jl @f |
419 | jl @f |
377 | mov [screen_workarea.left],eax |
420 | mov [screen_workarea.left],eax |
378 | @@: cmp ebx,[0xFE00] |
421 | @@: cmp ebx,[0xFE00] |
379 | jg .lp1 |
422 | jg .lp1 |
380 | mov [screen_workarea.right],ebx |
423 | mov [screen_workarea.right],ebx |
381 | .lp1: movsx eax,word[esp+24+2] |
424 | .lp1: movsx eax,word[esp+24+2] |
382 | movsx ebx,word[esp+24] |
425 | movsx ebx,word[esp+24] |
383 | cmp eax,ebx |
426 | cmp eax,ebx |
384 | jge .lp2 |
427 | jge .lp2 |
385 | or eax,eax;[0xFE04] |
428 | or eax,eax;[0xFE04] |
386 | jl @f |
429 | jl @f |
387 | mov [screen_workarea.top],eax |
430 | mov [screen_workarea.top],eax |
388 | @@: cmp ebx,[0xFE04] |
431 | @@: cmp ebx,[0xFE04] |
389 | jg .lp2 |
432 | jg .lp2 |
390 | mov [screen_workarea.bottom],ebx |
433 | mov [screen_workarea.bottom],ebx |
391 | .lp2: call repos_windows |
434 | .lp2: call repos_windows |
- | 435 | mov eax, 0 |
|
- | 436 | mov ebx, 0 |
|
- | 437 | mov ecx, [0xfe00] |
|
- | 438 | mov edx, [0xfe04] |
|
392 | call calculatescreen |
439 | call calculatescreen |
393 | ; jmp redraw_screen_direct |
440 | ; jmp redraw_screen_direct |
394 | .exit: |
441 | .exit: |
395 | popad |
442 | popad |
396 | ret |
443 | ret |
397 | no_set_workarea: |
444 | no_set_workarea: |
398 | 445 | ||
399 | cmp eax,7 ; get skin margins |
446 | cmp eax,7 ; get skin margins |
400 | jne no_get_skinmargins |
447 | jne no_get_skinmargins |
401 | popad |
448 | popad |
402 | mov eax,dword[_skinmargins+0] |
449 | mov eax,dword[_skinmargins+0] |
403 | mov [esp+36],eax |
450 | mov [esp+36],eax |
404 | mov eax,dword[_skinmargins+4] |
451 | mov eax,dword[_skinmargins+4] |
405 | mov [esp+24],eax |
452 | mov [esp+24],eax |
406 | ret |
453 | ret |
407 | no_get_skinmargins: |
454 | no_get_skinmargins: |
408 | 455 | ||
409 | cmp eax,8 ; set window skin |
456 | cmp eax,8 ; set window skin |
410 | jne no_set_skin |
457 | jne no_set_skin |
411 | mov eax,ebx |
458 | mov eax,ebx |
412 | mov edi,[0x3010] |
459 | mov edi,[0x3010] |
413 | add ebx,[edi+0x10] ; abs start of info block |
460 | add ebx,[edi+0x10] ; abs start of info block |
414 | pushd [ebx+0] [ebx+4] [ebx+8] [ebx+12] |
461 | pushd [ebx+0] [ebx+4] [ebx+8] [ebx+12] |
415 | mov dword[ebx+0],0 ; read |
462 | mov dword[ebx+0],0 ; read |
416 | mov dword[ebx+4],0 ; from the beginning |
463 | mov dword[ebx+4],0 ; from the beginning |
417 | mov dword[ebx+8],64 ; 32 KBytes maximum |
464 | mov dword[ebx+8],64 ; 32 KBytes maximum |
418 | mov ecx,skin_data+64*512 |
465 | mov ecx,skin_data+64*512 |
419 | sub ecx,[edi+0x10] |
466 | sub ecx,[edi+0x10] |
420 | mov dword[ebx+12],ecx ; destination |
467 | mov dword[ebx+12],ecx ; destination |
421 | push eax |
468 | push eax |
422 | pushad |
469 | pushad |
423 | call file_system |
470 | call file_system |
424 | popad |
471 | popad |
425 | pop eax |
472 | pop eax |
426 | popd [ebx+12] [ebx+8] [ebx+4] [ebx+0] |
473 | popd [ebx+12] [ebx+8] [ebx+4] [ebx+0] |
427 | cmp eax,ERROR_SUCCESS |
474 | cmp eax,ERROR_SUCCESS |
428 | je @f |
475 | je @f |
429 | cmp eax,ERROR_END_OF_FILE |
476 | cmp eax,ERROR_END_OF_FILE |
430 | jne .exit |
477 | jne .exit |
431 | @@: cmp [skin_data+64*512+SKIN_HEADER.ident],'SKIN' |
478 | @@: cmp [skin_data+64*512+SKIN_HEADER.ident],'SKIN' |
432 | mov eax,ERROR_UNKNOWN_FS |
479 | mov eax,ERROR_UNKNOWN_FS |
433 | jne .exit |
480 | jne .exit |
434 | mov esi,skin_data+64*512 |
481 | mov esi,skin_data+64*512 |
435 | mov edi,skin_data |
482 | mov edi,skin_data |
436 | mov ecx,(64*512)/4 |
483 | mov ecx,(64*512)/4 |
437 | rep movsd |
484 | rep movsd |
438 | call parse_skin_data |
485 | call parse_skin_data |
- | 486 | pushad |
|
- | 487 | mov eax, 0 |
|
- | 488 | mov ebx, 0 |
|
- | 489 | mov ecx, [0xfe00] |
|
- | 490 | mov edx, [0xfe04] |
|
439 | call calculatescreen |
491 | call calculatescreen |
- | 492 | popad |
|
440 | mov dword[esp+32+36],0 |
493 | mov dword[esp+32+36],0 |
441 | jmp redraw_screen_direct |
494 | jmp redraw_screen_direct |
442 | .exit: |
495 | .exit: |
443 | mov [esp+32+36],eax |
496 | mov [esp+32+36],eax |
444 | popad |
497 | popad |
445 | ret |
498 | ret |
446 | no_set_skin: |
499 | no_set_skin: |
447 | 500 | ||
448 | popad |
501 | popad |
449 | ret |
502 | ret |
450 | 503 | ||
451 | 504 | ||
452 | repos_windows: |
505 | repos_windows: |
453 | mov ecx,[0x3004] |
506 | mov ecx,[0x3004] |
454 | mov esi,0x20*2 |
507 | mov esi,0x20*2 |
455 | mov byte[0x0000fff0],1 |
508 | mov byte[0x0000fff0],1 |
456 | dec ecx |
509 | dec ecx |
457 | jge @f |
510 | jge @f |
458 | ret |
511 | ret |
459 | @@: mov [esi+WDATA.fl_redraw],1 |
512 | @@: mov [esi+WDATA.fl_redraw],1 |
460 | test [esi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
513 | test [esi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
461 | jz .lp2 |
514 | jz .lp2 |
462 | mov eax,[screen_workarea.left] |
515 | mov eax,[screen_workarea.left] |
463 | mov [esi+WDATA.left],eax |
516 | mov [esi+WDATA.left],eax |
464 | sub eax,[screen_workarea.right] |
517 | sub eax,[screen_workarea.right] |
465 | neg eax |
518 | neg eax |
466 | mov [esi+WDATA.width],eax |
519 | mov [esi+WDATA.width],eax |
467 | mov eax,[screen_workarea.top] |
520 | mov eax,[screen_workarea.top] |
468 | mov [esi+WDATA.top],eax |
521 | mov [esi+WDATA.top],eax |
469 | test [esi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
522 | test [esi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
470 | jnz .lp1 |
523 | jnz .lp1 |
471 | sub eax,[screen_workarea.bottom] |
524 | sub eax,[screen_workarea.bottom] |
472 | neg eax |
525 | neg eax |
473 | mov [esi+WDATA.height],eax |
526 | mov [esi+WDATA.height],eax |
474 | .lp1: add esi,0x20 |
527 | .lp1: add esi,0x20 |
475 | loop @b |
528 | loop @b |
476 | ret |
529 | ret |
477 | .lp2: mov eax,[esi+WDATA.left] |
530 | .lp2: mov eax,[esi+WDATA.left] |
478 | add eax,[esi+WDATA.width] |
531 | add eax,[esi+WDATA.width] |
479 | mov ebx,[0x0000fe00] |
532 | mov ebx,[0x0000fe00] |
480 | ; inc ebx |
533 | ; inc ebx |
481 | cmp eax,ebx |
534 | cmp eax,ebx |
482 | jle .lp4 |
535 | jle .lp4 |
483 | mov eax,[esi+WDATA.width] |
536 | mov eax,[esi+WDATA.width] |
484 | sub eax,ebx |
537 | sub eax,ebx |
485 | jle .lp3 |
538 | jle .lp3 |
486 | mov [esi+WDATA.width],ebx |
539 | mov [esi+WDATA.width],ebx |
487 | .lp3: sub ebx,[esi+WDATA.width] |
540 | .lp3: sub ebx,[esi+WDATA.width] |
488 | mov [esi+WDATA.left],ebx |
541 | mov [esi+WDATA.left],ebx |
489 | .lp4: mov eax,[esi+WDATA.top] |
542 | .lp4: mov eax,[esi+WDATA.top] |
490 | add eax,[esi+WDATA.height] |
543 | add eax,[esi+WDATA.height] |
491 | mov ebx,[0x0000fe04] |
544 | mov ebx,[0x0000fe04] |
492 | ; inc ebx |
545 | ; inc ebx |
493 | cmp eax,ebx |
546 | cmp eax,ebx |
494 | jle .lp6 |
547 | jle .lp6 |
495 | mov eax,[esi+WDATA.height] |
548 | mov eax,[esi+WDATA.height] |
496 | sub eax,ebx |
549 | sub eax,ebx |
497 | jle .lp5 |
550 | jle .lp5 |
498 | mov [esi+WDATA.height],ebx |
551 | mov [esi+WDATA.height],ebx |
499 | .lp5: sub ebx,[esi+WDATA.height] |
552 | .lp5: sub ebx,[esi+WDATA.height] |
500 | mov [esi+WDATA.top],ebx |
553 | mov [esi+WDATA.top],ebx |
501 | .lp6: add esi,0x20 |
554 | .lp6: add esi,0x20 |
502 | loop @b |
555 | loop @b |
503 | ret |
556 | ret |
504 | 557 | ||
505 | uglobal |
558 | uglobal |
506 | common_colours: |
559 | common_colours: |
507 | times 128 db 0x0 |
560 | times 128 db 0x0 |
508 | endg |
561 | endg |
509 | 562 | ||
510 | 563 | ||
511 | 564 | ||
512 | 565 | ||
513 | check_window_position: |
566 | check_window_position: |
514 | 567 | ||
515 | pushad ; window inside screen ? |
568 | pushad ; window inside screen ? |
516 | 569 | ||
517 | movzx eax,word [edi+0] |
570 | movzx eax,word [edi+0] |
518 | movzx ebx,word [edi+4] |
571 | movzx ebx,word [edi+4] |
519 | movzx ecx,word [edi+8] |
572 | movzx ecx,word [edi+8] |
520 | movzx edx,word [edi+12] |
573 | movzx edx,word [edi+12] |
521 | 574 | ||
522 | mov esi,ecx ; check x pos |
575 | mov esi,ecx ; check x pos |
523 | add esi,eax |
576 | add esi,eax |
524 | cmp esi,[0xfe00] |
577 | cmp esi,[0xfe00] |
525 | jbe x_pos_ok |
578 | jbe x_pos_ok |
526 | mov [edi+0],dword 0 |
579 | mov [edi+0],dword 0 |
527 | xor eax, eax |
580 | xor eax, eax |
528 | x_pos_ok: |
581 | x_pos_ok: |
529 | 582 | ||
530 | mov esi,edx ; check y pos |
583 | mov esi,edx ; check y pos |
531 | add esi,ebx |
584 | add esi,ebx |
532 | cmp esi,[0xfe04] |
585 | cmp esi,[0xfe04] |
533 | jbe y_pos_ok |
586 | jbe y_pos_ok |
534 | mov [edi+4],dword 0 |
587 | mov [edi+4],dword 0 |
535 | mov ebx,0 |
588 | mov ebx,0 |
536 | y_pos_ok: |
589 | y_pos_ok: |
537 | 590 | ||
538 | mov esi,ecx ; check x size |
591 | mov esi,ecx ; check x size |
539 | add esi,eax |
592 | add esi,eax |
540 | cmp esi,[0xfe00] |
593 | cmp esi,[0xfe00] |
541 | jbe x_size_ok |
594 | jbe x_size_ok |
542 | mov ecx,[0xfe00] |
595 | mov ecx,[0xfe00] |
543 | mov [edi+8],ecx |
596 | mov [edi+8],ecx |
544 | x_size_ok: |
597 | x_size_ok: |
545 | 598 | ||
546 | mov esi,edx ; check y size |
599 | mov esi,edx ; check y size |
547 | add esi,ebx |
600 | add esi,ebx |
548 | cmp esi,[0xfe04] |
601 | cmp esi,[0xfe04] |
549 | jbe y_size_ok |
602 | jbe y_size_ok |
550 | mov edx,[0xfe04] |
603 | mov edx,[0xfe04] |
551 | mov [edi+12],edx |
604 | mov [edi+12],edx |
552 | y_size_ok: |
605 | y_size_ok: |
553 | 606 | ||
554 | popad |
607 | popad |
555 | 608 | ||
556 | ret |
609 | ret |
557 | 610 | ||
558 | 611 | ||
559 | uglobal |
612 | uglobal |
560 | new_window_starting dd 0 |
613 | new_window_starting dd 0 |
561 | endg |
614 | endg |
562 | 615 | ||
563 | 616 | ||
564 | sys_window_mouse: |
617 | sys_window_mouse: |
565 | 618 | ||
566 | push eax |
619 | push eax |
567 | 620 | ||
568 | mov eax,[timer_ticks] ;[0xfdf0] |
621 | mov eax,[timer_ticks] ;[0xfdf0] |
569 | cmp [new_window_starting],eax |
622 | cmp [new_window_starting],eax |
570 | jb swml1 |
623 | jb swml1 |
571 | 624 | ||
572 | mov [0xfff4],byte 0 ; no mouse background |
625 | mov [0xfff4],byte 0 ; no mouse background |
573 | mov [0xfff5],byte 0 ; draw mouse |
626 | mov [0xfff5],byte 0 ; draw mouse |
574 | 627 | ||
575 | mov [new_window_starting],eax |
628 | mov [new_window_starting],eax |
576 | 629 | ||
577 | swml1: |
630 | swml1: |
578 | 631 | ||
579 | pop eax |
632 | pop eax |
580 | 633 | ||
581 | ret |
634 | ret |
582 | 635 | ||
583 | drawwindow_I: |
636 | drawwindow_I: |
584 | 637 | ||
585 | pushad |
638 | pushad |
586 | 639 | ||
587 | mov esi,[edx+24] ; rectangle |
640 | mov esi,[edx+24] ; rectangle |
588 | mov eax,[edx+0] |
641 | mov eax,[edx+0] |
589 | shl eax,16 |
642 | shl eax,16 |
590 | add eax,[edx+0] |
643 | add eax,[edx+0] |
591 | add eax,[edx+8] |
644 | add eax,[edx+8] |
592 | mov ebx,[edx+04] |
645 | mov ebx,[edx+04] |
593 | shl ebx,16 |
646 | shl ebx,16 |
594 | add ebx,[edx+4] |
647 | add ebx,[edx+4] |
595 | add ebx,[edx+12] |
648 | add ebx,[edx+12] |
596 | call draw_rectangle |
649 | call draw_rectangle |
597 | 650 | ||
598 | mov ecx,[edx+20] ; grab bar |
651 | mov ecx,[edx+20] ; grab bar |
599 | push ecx |
652 | push ecx |
600 | mov esi,edx |
653 | mov esi,edx |
601 | mov edx,[esi+04] |
654 | mov edx,[esi+04] |
602 | add edx,1 |
655 | add edx,1 |
603 | mov ebx,[esi+04] |
656 | mov ebx,[esi+04] |
604 | add ebx,25 |
657 | add ebx,25 |
605 | mov eax,[esi+04] |
658 | mov eax,[esi+04] |
606 | add eax,[esi+12] |
659 | add eax,[esi+12] |
607 | cmp ebx,eax |
660 | cmp ebx,eax |
608 | jb wdsizeok |
661 | jb wdsizeok |
609 | mov ebx,eax |
662 | mov ebx,eax |
610 | wdsizeok: |
663 | wdsizeok: |
611 | push ebx |
664 | push ebx |
612 | drwi: |
665 | drwi: |
613 | mov ebx,edx |
666 | mov ebx,edx |
614 | shl ebx,16 |
667 | shl ebx,16 |
615 | add ebx,edx |
668 | add ebx,edx |
616 | mov eax,[esi+00] |
669 | mov eax,[esi+00] |
617 | inc eax |
670 | inc eax |
618 | shl eax,16 |
671 | shl eax,16 |
619 | add eax,[esi+00] |
672 | add eax,[esi+00] |
620 | add eax,[esi+8] |
673 | add eax,[esi+8] |
621 | sub eax,1 |
674 | sub eax,1 |
622 | push edx |
675 | push edx |
623 | mov edx,0x80000000 |
676 | mov edx,0x80000000 |
624 | mov ecx,[esi+20] |
677 | mov ecx,[esi+20] |
625 | and ecx,edx |
678 | and ecx,edx |
626 | cmp ecx,edx |
679 | cmp ecx,edx |
627 | jnz nofa |
680 | jnz nofa |
628 | mov ecx,[esi+20] |
681 | mov ecx,[esi+20] |
629 | sub ecx,0x00040404 |
682 | sub ecx,0x00040404 |
630 | mov [esi+20],ecx |
683 | mov [esi+20],ecx |
631 | and ecx,0x00ffffff |
684 | and ecx,0x00ffffff |
632 | jmp faj |
685 | jmp faj |
633 | nofa: |
686 | nofa: |
634 | mov ecx,[esi+20] |
687 | mov ecx,[esi+20] |
635 | and ecx,0x00ffffff |
688 | and ecx,0x00ffffff |
636 | faj: |
689 | faj: |
637 | pop edx |
690 | pop edx |
638 | mov edi,0 |
691 | mov edi,0 |
639 | call [draw_line] |
692 | call [draw_line] |
640 | inc edx |
693 | inc edx |
641 | cmp edx,[esp] |
694 | cmp edx,[esp] |
642 | jb drwi |
695 | jb drwi |
643 | add esp,4 |
696 | add esp,4 |
644 | pop ecx |
697 | pop ecx |
645 | mov [esi+20],ecx |
698 | mov [esi+20],ecx |
646 | 699 | ||
647 | mov edx,[esi+04] ; inside work area |
700 | mov edx,[esi+04] ; inside work area |
648 | add edx,21+5 |
701 | add edx,21+5 |
649 | mov ebx,[esi+04] |
702 | mov ebx,[esi+04] |
650 | add ebx,[esi+12] |
703 | add ebx,[esi+12] |
651 | cmp edx,ebx |
704 | cmp edx,ebx |
652 | jg noinside |
705 | jg noinside |
653 | mov eax,1 |
706 | mov eax,1 |
654 | mov ebx,21 |
707 | mov ebx,21 |
655 | mov ecx,[esi+8] |
708 | mov ecx,[esi+8] |
656 | mov edx,[esi+12] |
709 | mov edx,[esi+12] |
657 | mov edi,[esi+16] |
710 | mov edi,[esi+16] |
658 | call [drawbar] |
711 | call [drawbar] |
659 | noinside: |
712 | noinside: |
660 | 713 | ||
661 | popad |
714 | popad |
662 | 715 | ||
663 | ret |
716 | ret |
664 | 717 | ||
665 | 718 | ||
666 | draw_rectangle: |
719 | draw_rectangle: |
667 | 720 | ||
668 | r_eax equ [esp+28] ; x start |
721 | r_eax equ [esp+28] ; x start |
669 | r_ax equ [esp+30] ; x end |
722 | r_ax equ [esp+30] ; x end |
670 | r_ebx equ [esp+16] ; y start |
723 | r_ebx equ [esp+16] ; y start |
671 | r_bx equ [esp+18] ; y end |
724 | r_bx equ [esp+18] ; y end |
672 | ;esi ; color |
725 | ;esi ; color |
673 | 726 | ||
674 | pushad |
727 | pushad |
675 | 728 | ||
676 | mov ecx,esi ; yb,xb -> yb,xe |
729 | mov ecx,esi ; yb,xb -> yb,xe |
677 | mov eax, r_eax |
730 | mov eax, r_eax |
678 | rol eax, 16 |
731 | rol eax, 16 |
679 | mov ebx,r_ebx |
732 | mov ebx,r_ebx |
680 | shl ebx,16 |
733 | shl ebx,16 |
681 | mov bx,r_ebx |
734 | mov bx,r_ebx |
682 | xor edi, edi |
735 | xor edi, edi |
683 | call [draw_line] |
736 | call [draw_line] |
684 | 737 | ||
685 | mov ebx,r_bx ; ye,xb -> ye,xe |
738 | mov ebx,r_bx ; ye,xb -> ye,xe |
686 | shl ebx,16 |
739 | shl ebx,16 |
687 | mov bx,r_bx |
740 | mov bx,r_bx |
688 | call [draw_line] |
741 | call [draw_line] |
689 | 742 | ||
690 | mov ecx,esi ; ya,xa -> ye,xa |
743 | mov ecx,esi ; ya,xa -> ye,xa |
691 | mov eax,r_eax |
744 | mov eax,r_eax |
692 | shl eax,16 |
745 | shl eax,16 |
693 | mov ax,r_eax |
746 | mov ax,r_eax |
694 | mov ebx,r_ebx |
747 | mov ebx,r_ebx |
695 | shl ebx,16 |
748 | shl ebx,16 |
696 | mov bx,r_bx |
749 | mov bx,r_bx |
697 | mov edi,0 |
750 | mov edi,0 |
698 | call [draw_line] |
751 | call [draw_line] |
699 | 752 | ||
700 | mov eax,r_ax ; ya,xe -> ye,xe |
753 | mov eax,r_ax ; ya,xe -> ye,xe |
701 | shl eax,16 |
754 | shl eax,16 |
702 | mov ax,r_ax |
755 | mov ax,r_ax |
703 | call [draw_line] |
756 | call [draw_line] |
704 | 757 | ||
705 | popad |
758 | popad |
706 | ret |
759 | ret |
707 | 760 | ||
708 | 761 | ||
709 | drawwindow_III: |
762 | drawwindow_III: |
710 | 763 | ||
711 | pushad |
764 | pushad |
712 | 765 | ||
713 | mov edi,edx ; RECTANGLE |
766 | mov edi,edx ; RECTANGLE |
714 | mov eax,[edi+0] |
767 | mov eax,[edi+0] |
715 | shl eax,16 |
768 | shl eax,16 |
716 | mov ax,[edi+0] |
769 | mov ax,[edi+0] |
717 | add ax,[edi+8] |
770 | add ax,[edi+8] |
718 | mov ebx,[edi+4] |
771 | mov ebx,[edi+4] |
719 | shl ebx,16 |
772 | shl ebx,16 |
720 | mov bx,[edi+4] |
773 | mov bx,[edi+4] |
721 | add bx,[edi+12] |
774 | add bx,[edi+12] |
722 | mov esi,[edi+24] |
775 | mov esi,[edi+24] |
723 | shr esi,1 |
776 | shr esi,1 |
724 | and esi,0x007f7f7f |
777 | and esi,0x007f7f7f |
725 | push esi |
778 | push esi |
726 | call draw_rectangle |
779 | call draw_rectangle |
727 | mov ecx,3 |
780 | mov ecx,3 |
728 | dw3l: |
781 | dw3l: |
729 | add eax,1*65536-1 |
782 | add eax,1*65536-1 |
730 | add ebx,1*65536-1 |
783 | add ebx,1*65536-1 |
731 | mov esi,[edi+24] |
784 | mov esi,[edi+24] |
732 | call draw_rectangle |
785 | call draw_rectangle |
733 | dec ecx |
786 | dec ecx |
734 | jnz dw3l |
787 | jnz dw3l |
735 | pop esi |
788 | pop esi |
736 | add eax,1*65536-1 |
789 | add eax,1*65536-1 |
737 | add ebx,1*65536-1 |
790 | add ebx,1*65536-1 |
738 | call draw_rectangle |
791 | call draw_rectangle |
739 | 792 | ||
740 | mov ecx,[edx+20] ; GRAB BAR |
793 | mov ecx,[edx+20] ; GRAB BAR |
741 | push ecx |
794 | push ecx |
742 | mov esi,edx |
795 | mov esi,edx |
743 | mov edx,[esi+04] |
796 | mov edx,[esi+04] |
744 | add edx,4 |
797 | add edx,4 |
745 | mov ebx,[esi+04] |
798 | mov ebx,[esi+04] |
746 | add ebx,20 |
799 | add ebx,20 |
747 | mov eax,[esi+04] |
800 | mov eax,[esi+04] |
748 | add eax,[esi+12] |
801 | add eax,[esi+12] |
749 | cmp ebx,eax |
802 | cmp ebx,eax |
750 | jb wdsizeok2 |
803 | jb wdsizeok2 |
751 | mov ebx,eax |
804 | mov ebx,eax |
752 | wdsizeok2: |
805 | wdsizeok2: |
753 | push ebx |
806 | push ebx |
754 | drwi2: |
807 | drwi2: |
755 | mov ebx,edx |
808 | mov ebx,edx |
756 | shl ebx,16 |
809 | shl ebx,16 |
757 | add ebx,edx |
810 | add ebx,edx |
758 | mov eax,[esi+00] |
811 | mov eax,[esi+00] |
759 | shl eax,16 |
812 | shl eax,16 |
760 | add eax,[esi+00] |
813 | add eax,[esi+00] |
761 | add eax,[esi+8] |
814 | add eax,[esi+8] |
762 | add eax,4*65536-4 |
815 | add eax,4*65536-4 |
763 | mov ecx,[esi+20] |
816 | mov ecx,[esi+20] |
764 | test ecx,0x40000000 |
817 | test ecx,0x40000000 |
765 | jz nofa3 |
818 | jz nofa3 |
766 | add ecx,0x040404 |
819 | add ecx,0x040404 |
767 | nofa3: |
820 | nofa3: |
768 | test ecx,0x80000000 |
821 | test ecx,0x80000000 |
769 | jz nofa2 |
822 | jz nofa2 |
770 | sub ecx,0x040404 |
823 | sub ecx,0x040404 |
771 | nofa2: |
824 | nofa2: |
772 | mov [esi+20],ecx |
825 | mov [esi+20],ecx |
773 | and ecx,0xffffff |
826 | and ecx,0xffffff |
774 | xor edi, edi |
827 | xor edi, edi |
775 | call [draw_line] |
828 | call [draw_line] |
776 | inc edx |
829 | inc edx |
777 | cmp edx,[esp] |
830 | cmp edx,[esp] |
778 | jb drwi2 |
831 | jb drwi2 |
779 | add esp,4 |
832 | add esp,4 |
780 | pop ecx |
833 | pop ecx |
781 | mov [esi+20],ecx |
834 | mov [esi+20],ecx |
782 | 835 | ||
783 | mov edx,[esi+04] ; WORK AREA |
836 | mov edx,[esi+04] ; WORK AREA |
784 | add edx,21+5 |
837 | add edx,21+5 |
785 | mov ebx,[esi+04] |
838 | mov ebx,[esi+04] |
786 | add ebx,[esi+12] |
839 | add ebx,[esi+12] |
787 | cmp edx,ebx |
840 | cmp edx,ebx |
788 | jg noinside2 |
841 | jg noinside2 |
789 | mov eax,5 |
842 | mov eax,5 |
790 | mov ebx,20 |
843 | mov ebx,20 |
791 | mov ecx,[esi+8] |
844 | mov ecx,[esi+8] |
792 | mov edx,[esi+12] |
845 | mov edx,[esi+12] |
793 | sub ecx,4 |
846 | sub ecx,4 |
794 | sub edx,4 |
847 | sub edx,4 |
795 | mov edi,[esi+16] |
848 | mov edi,[esi+16] |
796 | call [drawbar] |
849 | call [drawbar] |
797 | noinside2: |
850 | noinside2: |
798 | 851 | ||
799 | popad |
852 | popad |
800 | 853 | ||
801 | ret |
854 | ret |
802 | 855 | ||
803 | 856 | ||
804 | 857 | ||
805 | ; activate window |
858 | ; activate window |
806 | align 4 |
859 | align 4 |
807 | windowactivate: |
860 | windowactivate: |
808 | 861 | ||
809 | ; esi = abs mem position in stack 0xC400+ |
862 | ; esi = abs mem position in stack 0xC400+ |
810 | 863 | ||
811 | pushad |
864 | pushad |
812 | 865 | ||
813 | ; if type of current active window is 3, |
866 | ; if type of current active window is 3, |
814 | ; it must be redrawn |
867 | ; it must be redrawn |
815 | mov eax, [0x3004] |
868 | mov eax, [0x3004] |
816 | movzx eax, word [0xC400 + eax*2] |
869 | movzx eax, word [0xC400 + eax*2] |
817 | shl eax, 5 |
870 | shl eax, 5 |
818 | add eax, window_data |
871 | add eax, window_data |
819 | mov ebx, [eax + WDATA.cl_workarea] |
872 | mov ebx, [eax + WDATA.cl_workarea] |
820 | and ebx, 0x0f000000 |
873 | and ebx, 0x0f000000 |
821 | cmp ebx, 0x03000000 |
874 | cmp ebx, 0x03000000 |
822 | jne @f |
875 | jne @f |
823 | mov [eax + WDATA.fl_redraw], byte 1 |
876 | mov [eax + WDATA.fl_redraw], byte 1 |
824 | @@: |
877 | @@: |
825 | 878 | ||
826 | push esi |
879 | push esi |
827 | movzx eax, word [esi] ; ax <- process no |
880 | movzx eax, word [esi] ; ax <- process no |
828 | movzx eax, word [0xC000+eax*2] ; ax <- position in window stack |
881 | movzx eax, word [0xC000+eax*2] ; ax <- position in window stack |
829 | 882 | ||
830 | xor esi, esi ; drop others |
883 | xor esi, esi ; drop others |
831 | waloop: |
884 | waloop: |
832 | cmp esi, dword [0x3004] |
885 | cmp esi, dword [0x3004] |
833 | jae wacont |
886 | jae wacont |
834 | inc esi |
887 | inc esi |
835 | lea edi, [0xC000 + esi*2] |
888 | lea edi, [0xC000 + esi*2] |
836 | mov bx, [edi] ; position of the current process |
889 | mov bx, [edi] ; position of the current process |
837 | cmp bx, ax |
890 | cmp bx, ax |
838 | jbe @f |
891 | jbe @f |
839 | dec bx ; upper? => drop! |
892 | dec bx ; upper? => drop! |
840 | mov [edi], bx |
893 | mov [edi], bx |
841 | @@: |
894 | @@: |
842 | jmp waloop |
895 | jmp waloop |
843 | wacont: |
896 | wacont: |
844 | ; set to no 1 |
897 | ; set to no 1 |
845 | pop esi ; esi = pointer at 0xC400 |
898 | pop esi ; esi = pointer at 0xC400 |
846 | 899 | ||
847 | movzx eax, word [esi] |
900 | movzx eax, word [esi] |
848 | mov bx, [0x3004] ; number of processes |
901 | mov bx, [0x3004] ; number of processes |
849 | mov [0xC000+eax*2], bx ; this is the last (and the upper) |
902 | mov [0xC000+eax*2], bx ; this is the last (and the upper) |
850 | 903 | ||
851 | ; update on screen -window stack |
904 | ; update on screen -window stack |
852 | xor esi, esi |
905 | xor esi, esi |
853 | waloop2: |
906 | waloop2: |
854 | mov edi, [0x3004] |
907 | mov edi, [0x3004] |
855 | cmp esi, edi |
908 | cmp esi, edi |
856 | jae wacont2 |
909 | jae wacont2 |
857 | inc esi |
910 | inc esi |
858 | movzx ebx, word [esi*2 + 0xC000] |
911 | movzx ebx, word [esi*2 + 0xC000] |
859 | mov [ebx*2 + 0xC400], si |
912 | mov [ebx*2 + 0xC400], si |
860 | jmp waloop2 |
913 | jmp waloop2 |
861 | wacont2: |
914 | wacont2: |
862 | mov [0xf400], byte 0 ; empty keyboard buffer |
915 | mov [0xf400], byte 0 ; empty keyboard buffer |
863 | mov [0xf500], byte 0 ; empty button buffer |
916 | mov [0xf500], byte 0 ; empty button buffer |
864 | popad |
917 | popad |
865 | ret |
918 | ret |
866 | 919 | ||
867 | 920 | ||
868 | ; check if window is necessary to draw |
921 | ; check if window is necessary to draw |
869 | 922 | ||
870 | checkwindowdraw: |
923 | checkwindowdraw: |
871 | 924 | ||
872 | ; edi = position in window_data+ |
925 | ; edi = position in window_data+ |
873 | 926 | ||
874 | mov eax, [edi + WDATA.cl_workarea] |
927 | mov eax, [edi + WDATA.cl_workarea] |
875 | and eax, 0x0f000000 |
928 | and eax, 0x0f000000 |
876 | cmp eax, 0x03000000 |
929 | cmp eax, 0x03000000 |
877 | je .return_yes ; window type 3 |
930 | je .return_yes ; window type 3 |
878 | 931 | ||
879 | mov esi, edi |
932 | mov esi, edi |
880 | sub esi, window_data |
933 | sub esi, window_data |
881 | shr esi, 5 |
934 | shr esi, 5 |
882 | 935 | ||
883 | ; esi = process number |
936 | ; esi = process number |
884 | 937 | ||
885 | movzx eax, word [0xC000 + esi * 2] ; get value of the curr process |
938 | movzx eax, word [0xC000 + esi * 2] ; get value of the curr process |
886 | lea esi, [0xC400 + eax * 2] ; get address of this process at 0xC400 |
939 | lea esi, [0xC400 + eax * 2] ; get address of this process at 0xC400 |
887 | 940 | ||
888 | push esi |
941 | push esi |
889 | 942 | ||
890 | .new_check: |
943 | .new_check: |
891 | 944 | ||
892 | pop esi |
945 | pop esi |
893 | add esi, 2 |
946 | add esi, 2 |
894 | push esi |
947 | push esi |
895 | 948 | ||
896 | mov eax, [0x3004] |
949 | mov eax, [0x3004] |
897 | lea eax, word [0xC400 + eax * 2] ; number of the upper window |
950 | lea eax, word [0xC400 + eax * 2] ; number of the upper window |
898 | 951 | ||
899 | cmp esi, eax |
952 | cmp esi, eax |
900 | ja .all_wnds_to_top |
953 | ja .all_wnds_to_top |
901 | 954 | ||
902 | movzx eax, word [esi] |
955 | movzx eax, word [esi] |
903 | shl eax, 5 |
956 | shl eax, 5 |
904 | cmp [0x3000 + eax + 0xa], byte 9 |
957 | cmp [0x3000 + eax + 0xa], byte 9 |
905 | je .new_check ; skip dead windows |
958 | je .new_check ; skip dead windows |
906 | 959 | ||
907 | lea esi, [eax+window_data] |
960 | lea esi, [eax+window_data] |
908 | 961 | ||
909 | mov ebx, [edi+4] ; y0 |
962 | mov ebx, [edi+4] ; y0 |
910 | mov edx, [edi+12] |
963 | mov edx, [edi+12] |
911 | add edx, ebx ; y0e |
964 | add edx, ebx ; y0e |
912 | 965 | ||
913 | mov ecx, [esi+4] ; y ; y check |
966 | mov ecx, [esi+4] ; y ; y check |
914 | cmp ecx, edx |
967 | cmp ecx, edx |
915 | jae .new_check ; y < y0e |
968 | jae .new_check ; y < y0e |
916 | mov eax, [esi+12] |
969 | mov eax, [esi+12] |
917 | add ecx, eax ; ye |
970 | add ecx, eax ; ye |
918 | cmp ebx, ecx ; y0 >= ye |
971 | cmp ebx, ecx ; y0 >= ye |
919 | ja .new_check |
972 | ja .new_check |
920 | 973 | ||
921 | mov eax, [edi+0] ; x0 |
974 | mov eax, [edi+0] ; x0 |
922 | mov ecx, [edi+8] |
975 | mov ecx, [edi+8] |
923 | add ecx, eax ; x0e |
976 | add ecx, eax ; x0e |
924 | 977 | ||
925 | mov edx, [esi+0] ; x ; x check |
978 | mov edx, [esi+0] ; x ; x check |
926 | cmp edx, ecx |
979 | cmp edx, ecx |
927 | jae .new_check ; x < x0e |
980 | jae .new_check ; x < x0e |
928 | mov ecx, [esi+8] |
981 | mov ecx, [esi+8] |
929 | add edx, ecx |
982 | add edx, ecx |
930 | cmp eax, edx |
983 | cmp eax, edx |
931 | ja .new_check |
984 | ja .new_check |
932 | 985 | ||
933 | pop esi |
986 | pop esi |
934 | .return_yes: |
987 | .return_yes: |
935 | mov ecx,1 ; overlap some window |
988 | mov ecx,1 ; overlap some window |
936 | ret |
989 | ret |
937 | 990 | ||
938 | .all_wnds_to_top: |
991 | .all_wnds_to_top: |
939 | 992 | ||
940 | pop esi |
993 | pop esi |
941 | 994 | ||
942 | xor ecx, ecx ; passed all windows to top |
995 | xor ecx, ecx ; passed all windows to top |
943 | ret |
996 | ret |
944 | 997 | ||
945 | 998 | ||
946 | 999 | ||
947 | 1000 | ||
948 | waredraw: ; if redraw necessary at activate |
1001 | waredraw: ; if redraw necessary at activate |
949 | 1002 | ||
950 | pushad |
1003 | pushad |
951 | 1004 | ||
952 | call checkwindowdraw ; draw window on activation ? |
1005 | call checkwindowdraw ; draw window on activation ? |
953 | test ecx, ecx |
1006 | test ecx, ecx |
954 | jz .do_not_draw |
1007 | jz .do_not_draw |
955 | 1008 | ||
956 | popad |
1009 | popad |
957 | mov [0xfb44], byte 1 ; do draw mouse |
1010 | mov [0xfb44], byte 1 ; do draw mouse |
958 | call windowactivate |
1011 | call windowactivate |
959 | 1012 | ||
960 | ; update screen info |
1013 | ; update screen info |
961 | pushad |
1014 | pushad |
962 | mov edi, [0x3004] ; the last process (number) |
1015 | mov edi, [0x3004] ; the last process (number) |
963 | movzx esi, word [0xC400 + edi * 2] |
1016 | movzx esi, word [0xC400 + edi * 2] |
964 | shl esi, 5 |
1017 | shl esi, 5 |
965 | add esi, window_data |
1018 | add esi, window_data |
966 | 1019 | ||
967 | ; coordinates of the upper window |
1020 | ; coordinates of the upper window |
968 | mov eax, [esi+00] ; cx |
1021 | mov eax, [esi+00] ; cx |
969 | mov ebx, [esi+04] ; cy |
1022 | mov ebx, [esi+04] ; cy |
970 | mov ecx, [esi+08] ; sx |
1023 | mov ecx, [esi+08] ; sx |
971 | mov edx, [esi+12] ; sy |
1024 | mov edx, [esi+12] ; sy |
972 | 1025 | ||
973 | add ecx, eax ; ecx = x_end |
1026 | add ecx, eax ; ecx = x_end |
974 | add edx, ebx ; edx = y_end |
1027 | add edx, ebx ; edx = y_end |
975 | 1028 | ||
976 | mov edi, [0x3004] |
1029 | mov edi, [0x3004] |
977 | movzx esi, word [0xC400 + edi * 2] |
1030 | movzx esi, word [0xC400 + edi * 2] |
978 | call setscreen |
1031 | call setscreen |
979 | popad |
1032 | popad |
980 | 1033 | ||
981 | mov [edi+31],byte 1 ; redraw flag for app |
1034 | mov [edi+31],byte 1 ; redraw flag for app |
982 | mov [0xfb44],byte 0 ; mouse down checks |
1035 | mov [0xfb44],byte 0 ; mouse down checks |
983 | 1036 | ||
984 | ret |
1037 | ret |
985 | 1038 | ||
986 | .do_not_draw: |
1039 | .do_not_draw: |
987 | 1040 | ||
988 | popad |
1041 | popad |
989 | 1042 | ||
990 | call windowactivate |
1043 | call windowactivate |
991 | mov [0xfb44],byte 0 ; mouse down checks |
1044 | mov [0xfb44],byte 0 ; mouse down checks |
992 | mov [0xfff4],byte 0 ; no mouse background |
1045 | mov [0xfff4],byte 0 ; no mouse background |
993 | mov [0xfff5],byte 0 ; draw mouse |
1046 | mov [0xfff5],byte 0 ; draw mouse |
994 | ret |
1047 | ret |
995 | 1048 | ||
996 | 1049 | ||
997 | ; eax = window number on screen |
1050 | ; eax = window number on screen |
998 | ; corrupts registers and [dl*] |
1051 | ; corrupts registers and [dl*] |
999 | minimize_window: |
1052 | minimize_window: |
1000 | movzx eax, word [0xC400+eax*2] |
1053 | movzx eax, word [0xC400+eax*2] |
1001 | shl eax, 5 |
1054 | shl eax, 5 |
1002 | add eax, window_data |
1055 | add eax, window_data |
1003 | test [eax+WDATA.fl_wstate], WSTATE_MINIMIZED |
1056 | test [eax+WDATA.fl_wstate], WSTATE_MINIMIZED |
1004 | jnz .skip_redrawings |
1057 | jnz .skip_redrawings |
1005 | pushfd |
1058 | pushfd |
1006 | cli |
1059 | cli |
1007 | or [eax+WDATA.fl_wstate], WSTATE_MINIMIZED |
1060 | or [eax+WDATA.fl_wstate], WSTATE_MINIMIZED |
1008 | mov edi, eax |
1061 | mov edi, eax |
1009 | call calculatescreen |
1062 | ;call calculatescreen |
1010 | mov eax, [edi+WDATA.left] |
1063 | mov eax, [edi+WDATA.left] |
1011 | mov [dlx], eax |
1064 | mov [dlx], eax |
- | 1065 | mov ecx, eax |
|
1012 | add eax, [edi+WDATA.width] |
1066 | add ecx, [edi+WDATA.width] |
1013 | mov [dlxe], eax |
1067 | mov [dlxe], ecx |
1014 | mov eax, [edi+WDATA.top] |
1068 | mov ebx, [edi+WDATA.top] |
1015 | mov [dly], eax |
1069 | mov [dly], ebx |
- | 1070 | mov edx, ebx |
|
1016 | add eax, [edi+WDATA.height] |
1071 | add edx, [edi+WDATA.height] |
1017 | mov [dlye], eax |
1072 | mov [dlye], edx |
- | 1073 | call calculatescreen |
|
1018 | xor esi, esi |
1074 | xor esi, esi |
1019 | xor eax, eax |
1075 | xor eax, eax |
1020 | call redrawscreen |
1076 | call redrawscreen |
1021 | popfd |
1077 | popfd |
1022 | .skip_redrawings: |
1078 | .skip_redrawings: |
1023 | ret |
1079 | ret |
1024 | 1080 | ||
1025 | ; eax = window number on screen |
1081 | ; eax = window number on screen |
1026 | ; corrupts registers and [dl*] |
1082 | ; corrupts registers and [dl*] |
1027 | restore_minimized_window: |
1083 | restore_minimized_window: |
1028 | pushfd |
1084 | pushfd |
1029 | cli |
1085 | cli |
1030 | movzx esi, word [0xC400+eax*2] |
1086 | movzx esi, word [0xC400+eax*2] |
1031 | mov edi, esi |
1087 | mov edi, esi |
1032 | shl edi, 5 |
1088 | shl edi, 5 |
1033 | add edi, window_data |
1089 | add edi, window_data |
1034 | test [edi+WDATA.fl_wstate], WSTATE_MINIMIZED |
1090 | test [edi+WDATA.fl_wstate], WSTATE_MINIMIZED |
1035 | jz .skip_redrawings |
1091 | jz .skip_redrawings |
1036 | mov [edi+WDATA.fl_redraw], 1 |
1092 | mov [edi+WDATA.fl_redraw], 1 |
1037 | and [edi+WDATA.fl_wstate], not WSTATE_MINIMIZED |
1093 | and [edi+WDATA.fl_wstate], not WSTATE_MINIMIZED |
1038 | cmp eax, [0x3004] ; the uppermost window |
1094 | cmp eax, [0x3004] ; the uppermost window |
1039 | jnz .no_uppermost |
1095 | jnz .no_uppermost |
1040 | mov eax, [edi+WDATA.left] |
1096 | mov eax, [edi+WDATA.left] |
1041 | mov ebx, [edi+WDATA.top] |
1097 | mov ebx, [edi+WDATA.top] |
1042 | mov ecx, eax |
1098 | mov ecx, eax |
1043 | mov edx, ebx |
1099 | mov edx, ebx |
1044 | add ecx, [edi+WDATA.width] |
1100 | add ecx, [edi+WDATA.width] |
1045 | add edx, [edi+WDATA.height] |
1101 | add edx, [edi+WDATA.height] |
1046 | call setscreen |
1102 | call setscreen |
1047 | jmp .done |
1103 | jmp .done |
1048 | .no_uppermost: |
1104 | .no_uppermost: |
- | 1105 | mov eax, [edi+WDATA.left] |
|
- | 1106 | mov ebx, [edi+WDATA.top] |
|
- | 1107 | mov ecx, eax |
|
- | 1108 | mov edx, ebx |
|
- | 1109 | add ecx, [edi+WDATA.width] |
|
- | 1110 | add edx, [edi+WDATA.height] |
|
1049 | call calculatescreen |
1111 | call calculatescreen |
1050 | .done: |
1112 | .done: |
1051 | mov [0xfff4],byte 0 ; no mouse under |
1113 | mov [0xfff4],byte 0 ; no mouse under |
1052 | .skip_redrawings: |
1114 | .skip_redrawings: |
1053 | popfd |
1115 | popfd |
1054 | ret |
1116 | ret |
1055 | 1117 | ||
1056 | 1118 | ||
1057 | iglobal |
1119 | iglobal |
1058 | window_moving db 'K : Window - move/resize',13,10,0 |
1120 | window_moving db 'K : Window - move/resize',13,10,0 |
1059 | window_moved db 'K : Window - done',13,10,0 |
1121 | window_moved db 'K : Window - done',13,10,0 |
1060 | endg |
1122 | endg |
1061 | 1123 | ||
1062 | ; check window touch |
1124 | ; check window touch |
1063 | align 4 |
1125 | align 4 |
1064 | checkwindows: |
1126 | checkwindows: |
1065 | pushad |
1127 | pushad |
1066 | 1128 | ||
1067 | cmp [window_minimize], 0 |
1129 | cmp [window_minimize], 0 |
1068 | je .no_minimizing |
1130 | je .no_minimizing |
1069 | mov eax, [0x3004] ; the uppermost window |
1131 | mov eax, [0x3004] ; the uppermost window |
1070 | mov bl, 0 |
1132 | mov bl, 0 |
1071 | xchg [window_minimize], bl |
1133 | xchg [window_minimize], bl |
1072 | cmp bl, 1 |
1134 | cmp bl, 1 |
1073 | jne .restore |
1135 | jne .restore |
1074 | call minimize_window |
1136 | call minimize_window |
1075 | jmp .continue |
1137 | jmp .continue |
1076 | .restore: |
1138 | .restore: |
1077 | call restore_minimized_window |
1139 | call restore_minimized_window |
1078 | .continue: |
1140 | .continue: |
1079 | .no_minimizing: |
1141 | .no_minimizing: |
1080 | 1142 | ||
1081 | cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
1143 | cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
1082 | jne .mouse_buttons_pressed |
1144 | jne .mouse_buttons_pressed |
1083 | popad |
1145 | popad |
1084 | ret |
1146 | ret |
1085 | .mouse_buttons_pressed: |
1147 | .mouse_buttons_pressed: |
1086 | 1148 | ||
1087 | mov esi,[0x3004] |
1149 | mov esi,[0x3004] |
1088 | inc esi |
1150 | inc esi |
1089 | 1151 | ||
1090 | cwloop: |
1152 | cwloop: |
1091 | cmp esi,2 |
1153 | cmp esi,2 |
1092 | jb .exit |
1154 | jb .exit |
1093 | 1155 | ||
1094 | dec esi |
1156 | dec esi |
1095 | movzx edi, word [0xC400 + esi * 2] ; ebx |
1157 | movzx edi, word [0xC400 + esi * 2] ; ebx |
1096 | shl edi, 5 |
1158 | shl edi, 5 |
1097 | add edi, window_data |
1159 | add edi, window_data |
1098 | ; mov edi, ebx |
1160 | ; mov edi, ebx |
1099 | mov ecx, [edi+0] |
1161 | mov ecx, [edi+0] |
1100 | mov edx, [edi+4] |
1162 | mov edx, [edi+4] |
1101 | 1163 | ||
1102 | mov eax,ecx |
1164 | mov eax,ecx |
1103 | mov ebx,edx |
1165 | mov ebx,edx |
1104 | test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
1166 | test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
1105 | jnz cwloop |
1167 | jnz cwloop |
1106 | 1168 | ||
1107 | movzx eax, word [0xfb0a] |
1169 | movzx eax, word [0xfb0a] |
1108 | movzx ebx, word [0xfb0c] |
1170 | movzx ebx, word [0xfb0c] |
1109 | 1171 | ||
1110 | cmp ecx, eax |
1172 | cmp ecx, eax |
1111 | jae cwloop |
1173 | jae cwloop |
1112 | cmp edx, ebx |
1174 | cmp edx, ebx |
1113 | jae cwloop |
1175 | jae cwloop |
1114 | add ecx, [edi+8] |
1176 | add ecx, [edi+8] |
1115 | add edx, [edi+12] |
1177 | add edx, [edi+12] |
1116 | cmp eax, ecx |
1178 | cmp eax, ecx |
1117 | jae cwloop |
1179 | jae cwloop |
1118 | cmp ebx, edx |
1180 | cmp ebx, edx |
1119 | jae cwloop |
1181 | jae cwloop |
1120 | 1182 | ||
1121 | pushad |
1183 | pushad |
1122 | mov eax, esi |
1184 | mov eax, esi |
1123 | mov ebx, [0x3004] |
1185 | mov ebx, [0x3004] |
1124 | cmp eax, ebx ; is this window active? |
1186 | cmp eax, ebx ; is this window active? |
1125 | jz .move_resize_window |
1187 | jz .move_resize_window |
1126 | 1188 | ||
1127 | ; eax = position in windowing stack |
1189 | ; eax = position in windowing stack |
1128 | ; redraw must ? |
1190 | ; redraw must ? |
1129 | lea esi, [0xC400 + esi * 2] |
1191 | lea esi, [0xC400 + esi * 2] |
1130 | call waredraw |
1192 | call waredraw |
1131 | add esp, 32 |
1193 | add esp, 32 |
1132 | 1194 | ||
1133 | .exit: |
1195 | .exit: |
1134 | popad |
1196 | popad |
1135 | ret |
1197 | ret |
1136 | 1198 | ||
1137 | .move_resize_window: ; MOVE OR RESIZE WINDOW |
1199 | .move_resize_window: ; MOVE OR RESIZE WINDOW |
1138 | 1200 | ||
1139 | popad |
1201 | popad |
1140 | 1202 | ||
1141 | ; Check for user enabled fixed window |
1203 | ; Check for user enabled fixed window |
1142 | mov edx, [edi+0x14] |
1204 | mov edx, [edi+0x14] |
1143 | and edx, 0x0f000000 |
1205 | and edx, 0x0f000000 |
1144 | cmp edx, 0x01000000 |
1206 | cmp edx, 0x01000000 |
1145 | jne .window_move_enabled_for_user |
1207 | jne .window_move_enabled_for_user |
1146 | popad |
1208 | popad |
1147 | ret |
1209 | ret |
1148 | .window_move_enabled_for_user: |
1210 | .window_move_enabled_for_user: |
1149 | 1211 | ||
1150 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1212 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1151 | jnz .no_resize_2 |
1213 | jnz .no_resize_2 |
1152 | 1214 | ||
1153 | mov [do_resize_from_corner],byte 0 ; resize for skinned window |
1215 | mov [do_resize_from_corner],byte 0 ; resize for skinned window |
1154 | mov edx, [edi+0x10] |
1216 | mov edx, [edi+0x10] |
1155 | and edx, 0x0f000000 |
1217 | and edx, 0x0f000000 |
1156 | cmp edx, 0x02000000 |
1218 | cmp edx, 0x02000000 |
1157 | jb .no_resize_2 ; not type 2 wnd |
1219 | jb .no_resize_2 ; not type 2 wnd |
1158 | 1220 | ||
1159 | mov edx, [edi+4] |
1221 | mov edx, [edi+4] |
1160 | add edx, [edi+12] |
1222 | add edx, [edi+12] |
1161 | sub edx, 6 ; edx = y_end - 6 |
1223 | sub edx, 6 ; edx = y_end - 6 |
1162 | cmp ebx, edx ; ebx = mouse_y |
1224 | cmp ebx, edx ; ebx = mouse_y |
1163 | jb .no_resize_2 |
1225 | jb .no_resize_2 |
1164 | mov [do_resize_from_corner],byte 1 |
1226 | mov [do_resize_from_corner],byte 1 |
1165 | jmp .continue |
1227 | jmp .continue |
1166 | .no_resize_2: |
1228 | .no_resize_2: |
1167 | 1229 | ||
1168 | push eax |
1230 | push eax |
1169 | call get_titlebar_height |
1231 | call get_titlebar_height |
1170 | add eax,[edi+4] |
1232 | add eax,[edi+4] |
1171 | cmp ebx,eax |
1233 | cmp ebx,eax |
1172 | pop eax |
1234 | pop eax |
1173 | jae .exit |
1235 | jae .exit |
1174 | 1236 | ||
1175 | .continue: |
1237 | .continue: |
1176 | 1238 | ||
1177 | push esi |
1239 | push esi |
1178 | mov esi, window_moving |
1240 | mov esi, window_moving |
1179 | call sys_msg_board_str |
1241 | call sys_msg_board_str |
1180 | pop esi |
1242 | pop esi |
1181 | 1243 | ||
1182 | mov ecx, [timer_ticks] ; double-click ? |
1244 | mov ecx, [timer_ticks] ; double-click ? |
1183 | mov edx, ecx |
1245 | mov edx, ecx |
1184 | sub edx, [latest_window_touch] |
1246 | sub edx, [latest_window_touch] |
1185 | mov [latest_window_touch], ecx |
1247 | mov [latest_window_touch], ecx |
1186 | mov [latest_window_touch_delta], edx |
1248 | mov [latest_window_touch_delta], edx |
1187 | 1249 | ||
1188 | mov cl, [0xfb40] ; save for shade check |
1250 | mov cl, [0xfb40] ; save for shade check |
1189 | mov [do_resize], cl |
1251 | mov [do_resize], cl |
1190 | no_emulation_righ_button: |
1252 | no_emulation_righ_button: |
1191 | mov ecx, [edi+0] |
1253 | mov ecx, [edi+0] |
1192 | mov edx, [edi+4] |
1254 | mov edx, [edi+4] |
1193 | 1255 | ||
1194 | push eax ecx edx |
1256 | push eax ecx edx |
1195 | mov [dlx], ecx ; save for drawlimits |
1257 | mov [dlx], ecx ; save for drawlimits |
1196 | mov [dly], edx |
1258 | mov [dly], edx |
1197 | mov eax, [edi+8] |
1259 | mov eax, [edi+8] |
1198 | add ecx, eax |
1260 | add ecx, eax |
1199 | mov eax, [edi+12] |
1261 | mov eax, [edi+12] |
1200 | add edx, eax |
1262 | add edx, eax |
1201 | mov [dlxe], ecx |
1263 | mov [dlxe], ecx |
1202 | mov [dlye], edx |
1264 | mov [dlye], edx |
1203 | pop edx ecx eax |
1265 | pop edx ecx eax |
1204 | 1266 | ||
1205 | sub eax, ecx |
1267 | sub eax, ecx |
1206 | sub ebx, edx |
1268 | sub ebx, edx |
1207 | 1269 | ||
1208 | mov esi, [0xfb0a] |
1270 | mov esi, [0xfb0a] |
1209 | mov [0xf300], esi |
1271 | mov [0xf300], esi |
1210 | 1272 | ||
1211 | pushad ; wait for putimages to finish |
1273 | pushad ; wait for putimages to finish |
1212 | ; mov eax,5 |
1274 | ; mov eax,5 |
1213 | ; call delay_hs |
1275 | ; call delay_hs |
1214 | mov eax,[edi+0] |
1276 | mov eax,[edi+0] |
1215 | mov [npx],eax |
1277 | mov [npx],eax |
1216 | mov eax,[edi+4] |
1278 | mov eax,[edi+4] |
1217 | mov [npy],eax |
1279 | mov [npy],eax |
1218 | popad |
1280 | popad |
1219 | 1281 | ||
1220 | push eax ; save old coordinates |
1282 | push eax ; save old coordinates |
1221 | mov ax,[edi+00] |
1283 | mov ax,[edi+00] |
1222 | mov word [oldc+00],ax |
1284 | mov word [oldc+00],ax |
1223 | mov ax,[edi+04] |
1285 | mov ax,[edi+04] |
1224 | mov word [oldc+04],ax |
1286 | mov word [oldc+04],ax |
1225 | mov ax,[edi+8] |
1287 | mov ax,[edi+8] |
1226 | mov word [oldc+8],ax |
1288 | mov word [oldc+8],ax |
1227 | mov word [npxe],ax |
1289 | mov word [npxe],ax |
1228 | mov ax,[edi+12] |
1290 | mov ax,[edi+12] |
1229 | mov word [oldc+12],ax |
1291 | mov word [oldc+12],ax |
1230 | mov word [npye],ax |
1292 | mov word [npye],ax |
1231 | pop eax |
1293 | pop eax |
1232 | 1294 | ||
1233 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1295 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1234 | jnz @f |
1296 | jnz @f |
1235 | call drawwindowframes |
1297 | call drawwindowframes |
1236 | @@: |
1298 | @@: |
1237 | 1299 | ||
1238 | mov [reposition],0 |
1300 | mov [reposition],0 |
1239 | mov [0xfb44],byte 1 ; no reaction to mouse up/down |
1301 | mov [0xfb44],byte 1 ; no reaction to mouse up/down |
1240 | 1302 | ||
1241 | ; move window |
1303 | ; move window |
1242 | 1304 | ||
1243 | newchm: |
1305 | newchm: |
1244 | 1306 | ||
1245 | mov [0xfff5],byte 1 |
1307 | mov [0xfff5],byte 1 |
1246 | 1308 | ||
1247 | call checkidle |
1309 | call checkidle |
1248 | 1310 | ||
1249 | call checkEgaCga |
1311 | call checkEgaCga |
1250 | 1312 | ||
1251 | mov [0xfff4],byte 0 |
1313 | mov [0xfff4],byte 0 |
1252 | 1314 | ||
1253 | call [draw_pointer] |
1315 | call [draw_pointer] |
1254 | 1316 | ||
1255 | pushad |
1317 | pushad |
1256 | call stack_handler |
1318 | call stack_handler |
1257 | popad |
1319 | popad |
1258 | 1320 | ||
1259 | mov esi,[0xf300] |
1321 | mov esi,[0xf300] |
1260 | cmp esi,[0xfb0a] |
1322 | cmp esi,[0xfb0a] |
1261 | je cwb |
1323 | je cwb |
1262 | 1324 | ||
1263 | mov cx,[0xfb0a] |
1325 | mov cx,[0xfb0a] |
1264 | mov dx,[0xfb0c] |
1326 | mov dx,[0xfb0c] |
1265 | sub cx,ax |
1327 | sub cx,ax |
1266 | sub dx,bx |
1328 | sub dx,bx |
1267 | 1329 | ||
1268 | push ax |
1330 | push ax |
1269 | push bx |
1331 | push bx |
1270 | 1332 | ||
1271 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1333 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1272 | jnz @f |
1334 | jnz @f |
1273 | call drawwindowframes |
1335 | call drawwindowframes |
1274 | @@: |
1336 | @@: |
1275 | 1337 | ||
1276 | mov ax,[0xfe00] |
1338 | mov ax,[0xfe00] |
1277 | mov bx,[0xfe04] |
1339 | mov bx,[0xfe04] |
1278 | 1340 | ||
1279 | cmp [do_resize_from_corner],1 |
1341 | cmp [do_resize_from_corner],1 |
1280 | je no_new_position |
1342 | je no_new_position |
1281 | 1343 | ||
1282 | mov word [npx],word 0 ; x repos ? |
1344 | mov word [npx],word 0 ; x repos ? |
1283 | cmp ax,cx |
1345 | cmp ax,cx |
1284 | jb noreposx |
1346 | jb noreposx |
1285 | mov [reposition],1 |
1347 | mov [reposition],1 |
1286 | sub ax,word [npxe] |
1348 | sub ax,word [npxe] |
1287 | mov word [npx],ax |
1349 | mov word [npx],ax |
1288 | cmp ax,cx |
1350 | cmp ax,cx |
1289 | jb noreposx |
1351 | jb noreposx |
1290 | mov word [npx],cx |
1352 | mov word [npx],cx |
1291 | noreposx: |
1353 | noreposx: |
1292 | 1354 | ||
1293 | mov word [npy],word 0 ; y repos ? |
1355 | mov word [npy],word 0 ; y repos ? |
1294 | cmp bx,dx |
1356 | cmp bx,dx |
1295 | jb noreposy |
1357 | jb noreposy |
1296 | mov [reposition],1 |
1358 | mov [reposition],1 |
1297 | sub bx,word [npye] |
1359 | sub bx,word [npye] |
1298 | mov word [npy],bx |
1360 | mov word [npy],bx |
1299 | cmp bx,dx |
1361 | cmp bx,dx |
1300 | jb noreposy |
1362 | jb noreposy |
1301 | mov word [npy],dx |
1363 | mov word [npy],dx |
1302 | noreposy: |
1364 | noreposy: |
1303 | 1365 | ||
1304 | no_new_position: |
1366 | no_new_position: |
1305 | 1367 | ||
1306 | cmp [do_resize_from_corner],0 ; resize from right corner |
1368 | cmp [do_resize_from_corner],0 ; resize from right corner |
1307 | je norepos_size |
1369 | je norepos_size |
1308 | pushad |
1370 | pushad |
1309 | 1371 | ||
1310 | mov edx,edi |
1372 | mov edx,edi |
1311 | sub edx,window_data |
1373 | sub edx,window_data |
1312 | shr edx,5 |
1374 | shr edx,5 |
1313 | shl edx,8 |
1375 | shl edx,8 |
1314 | add edx,0x80000 ; process base at 0x80000+ |
1376 | add edx,0x80000 ; process base at 0x80000+ |
1315 | 1377 | ||
1316 | movzx eax,word [0xfb0a] |
1378 | movzx eax,word [0xfb0a] |
1317 | cmp eax,[edi+0] |
1379 | cmp eax,[edi+0] |
1318 | jb nnepx |
1380 | jb nnepx |
1319 | sub eax,[edi+0] |
1381 | sub eax,[edi+0] |
1320 | cmp eax,32 ; [edx+0x90+8] |
1382 | cmp eax,32 ; [edx+0x90+8] |
1321 | jge nnepx2 |
1383 | jge nnepx2 |
1322 | mov eax,32 ; [edx+0x90+8] |
1384 | mov eax,32 ; [edx+0x90+8] |
1323 | nnepx2: |
1385 | nnepx2: |
1324 | mov [npxe],eax |
1386 | mov [npxe],eax |
1325 | nnepx: |
1387 | nnepx: |
1326 | 1388 | ||
1327 | call get_rolledup_height |
1389 | call get_rolledup_height |
1328 | mov ebx,eax |
1390 | mov ebx,eax |
1329 | movzx eax,word [0xfb0c] |
1391 | movzx eax,word [0xfb0c] |
1330 | cmp eax,[edi+4] |
1392 | cmp eax,[edi+4] |
1331 | jb nnepy |
1393 | jb nnepy |
1332 | sub eax,[edi+4] |
1394 | sub eax,[edi+4] |
1333 | cmp eax,ebx ; [edx+0x90+12] |
1395 | cmp eax,ebx ; [edx+0x90+12] |
1334 | jge nnepy2 |
1396 | jge nnepy2 |
1335 | mov eax,ebx ; [edx+0x90+12] |
1397 | mov eax,ebx ; [edx+0x90+12] |
1336 | nnepy2: |
1398 | nnepy2: |
1337 | mov [npye],eax |
1399 | mov [npye],eax |
1338 | nnepy: |
1400 | nnepy: |
1339 | 1401 | ||
1340 | mov [reposition],1 |
1402 | mov [reposition],1 |
1341 | 1403 | ||
1342 | popad |
1404 | popad |
1343 | norepos_size: |
1405 | norepos_size: |
1344 | 1406 | ||
1345 | pop bx |
1407 | pop bx |
1346 | pop ax |
1408 | pop ax |
1347 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1409 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1348 | jnz @f |
1410 | jnz @f |
1349 | call drawwindowframes |
1411 | call drawwindowframes |
1350 | @@: |
1412 | @@: |
1351 | 1413 | ||
1352 | mov esi,[0xfb0a] |
1414 | mov esi,[0xfb0a] |
1353 | mov [0xf300],esi |
1415 | mov [0xf300],esi |
1354 | 1416 | ||
1355 | cwb: |
1417 | cwb: |
1356 | cmp [0xfb40],byte 0 |
1418 | cmp [0xfb40],byte 0 |
1357 | jne newchm |
1419 | jne newchm |
1358 | ; new position done |
1420 | ; new position done |
1359 | mov [0xfff5],byte 1 |
1421 | mov [0xfff5],byte 1 |
1360 | mov cl,0 |
1422 | mov cl,0 |
1361 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1423 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1362 | jnz @f |
1424 | jnz @f |
1363 | mov cl,[reposition] |
1425 | mov cl,[reposition] |
1364 | call drawwindowframes |
1426 | call drawwindowframes |
1365 | 1427 | ||
1366 | mov eax,[npx] |
1428 | mov eax,[npx] |
1367 | mov [edi+0],eax |
1429 | mov [edi+0],eax |
1368 | mov eax,[npy] |
1430 | mov eax,[npy] |
1369 | mov [edi+4],eax |
1431 | mov [edi+4],eax |
1370 | mov eax,[npxe] |
1432 | mov eax,[npxe] |
1371 | mov [edi+8],eax |
1433 | mov [edi+8],eax |
1372 | mov eax,[npye] |
1434 | mov eax,[npye] |
1373 | mov [edi+12],eax |
1435 | mov [edi+12],eax |
1374 | 1436 | ||
1375 | @@: mov [reposition],cl |
1437 | @@: mov [reposition],cl |
1376 | 1438 | ||
1377 | cmp [reposition],1 ; save new position and size |
1439 | cmp [reposition],1 ; save new position and size |
1378 | jne no_bounds_save |
1440 | jne no_bounds_save |
1379 | push esi edi ecx |
1441 | push esi edi ecx |
1380 | mov esi,edi |
1442 | mov esi,edi |
1381 | mov ecx,2 |
1443 | mov ecx,2 |
1382 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP or WSTATE_MAXIMIZED |
1444 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP or WSTATE_MAXIMIZED |
1383 | jnz @f |
1445 | jnz @f |
1384 | add ecx,2 |
1446 | add ecx,2 |
1385 | @@: sub edi,window_data |
1447 | @@: sub edi,window_data |
1386 | shr edi,5 |
1448 | shr edi,5 |
1387 | shl edi,8 |
1449 | shl edi,8 |
1388 | add edi,0x80000+0x90 |
1450 | add edi,0x80000+0x90 |
1389 | cld |
1451 | cld |
1390 | rep movsd |
1452 | rep movsd |
1391 | pop ecx edi esi |
1453 | pop ecx edi esi |
1392 | no_bounds_save: |
1454 | no_bounds_save: |
1393 | 1455 | ||
1394 | pushad ; WINDOW SHADE/FULLSCREEN |
1456 | pushad ; WINDOW SHADE/FULLSCREEN |
1395 | 1457 | ||
1396 | cmp [reposition],1 |
1458 | cmp [reposition],1 |
1397 | je no_window_sizing |
1459 | je no_window_sizing |
1398 | mov edx,edi |
1460 | mov edx,edi |
1399 | sub edx,window_data |
1461 | sub edx,window_data |
1400 | shr edx,5 |
1462 | shr edx,5 |
1401 | shl edx,8 |
1463 | shl edx,8 |
1402 | add edx,0x80000 ; process base at 0x80000+ |
1464 | add edx,0x80000 ; process base at 0x80000+ |
1403 | 1465 | ||
1404 | cmp [do_resize],2 ; window shade ? |
1466 | cmp [do_resize],2 ; window shade ? |
1405 | jne no_window_shade |
1467 | jne no_window_shade |
1406 | mov [reposition],1 |
1468 | mov [reposition],1 |
1407 | 1469 | ||
1408 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1470 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1409 | jnz wnd_rolldown |
1471 | jnz wnd_rolldown |
1410 | wnd_rollup: |
1472 | wnd_rollup: |
1411 | or [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1473 | or [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1412 | call get_rolledup_height |
1474 | call get_rolledup_height |
1413 | jmp @f |
1475 | jmp @f |
1414 | wnd_rolldown: |
1476 | wnd_rolldown: |
1415 | and [edi+WDATA.fl_wstate],not WSTATE_ROLLEDUP |
1477 | and [edi+WDATA.fl_wstate],not WSTATE_ROLLEDUP |
1416 | mov eax,[edx+0x90+BOX.height] |
1478 | mov eax,[edx+0x90+BOX.height] |
1417 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1479 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1418 | jz @f |
1480 | jz @f |
1419 | mov eax,[screen_workarea.bottom] |
1481 | mov eax,[screen_workarea.bottom] |
1420 | sub eax,[screen_workarea.top] |
1482 | sub eax,[screen_workarea.top] |
1421 | @@: mov [edi+WDATA.height],eax |
1483 | @@: mov [edi+WDATA.height],eax |
1422 | 1484 | ||
1423 | no_window_shade: |
1485 | no_window_shade: |
1424 | 1486 | ||
1425 | cmp [do_resize],1 ; fullscreen/restore ? |
1487 | cmp [do_resize],1 ; fullscreen/restore ? |
1426 | jne no_fullscreen_restore |
1488 | jne no_fullscreen_restore |
1427 | cmp [latest_window_touch_delta],dword 50 |
1489 | cmp [latest_window_touch_delta],dword 50 |
1428 | jg no_fullscreen_restore |
1490 | jg no_fullscreen_restore |
1429 | mov [reposition],1 |
1491 | mov [reposition],1 |
1430 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1492 | test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1431 | jnz restore_from_fullscreen |
1493 | jnz restore_from_fullscreen |
1432 | or [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1494 | or [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
1433 | mov eax,[screen_workarea.left] |
1495 | mov eax,[screen_workarea.left] |
1434 | mov [edi+WDATA.left],eax |
1496 | mov [edi+WDATA.left],eax |
1435 | sub eax,[screen_workarea.right] |
1497 | sub eax,[screen_workarea.right] |
1436 | neg eax |
1498 | neg eax |
1437 | mov [edi+WDATA.width],eax |
1499 | mov [edi+WDATA.width],eax |
1438 | mov eax,[screen_workarea.top] |
1500 | mov eax,[screen_workarea.top] |
1439 | mov [edi+WDATA.top],eax |
1501 | mov [edi+WDATA.top],eax |
1440 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1502 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1441 | jnz @f |
1503 | jnz @f |
1442 | sub eax,[screen_workarea.bottom] |
1504 | sub eax,[screen_workarea.bottom] |
1443 | neg eax |
1505 | neg eax |
1444 | mov [edi+WDATA.height],eax |
1506 | mov [edi+WDATA.height],eax |
1445 | @@: |
1507 | @@: |
1446 | jmp no_fullscreen_restore |
1508 | jmp no_fullscreen_restore |
1447 | restore_from_fullscreen: |
1509 | restore_from_fullscreen: |
1448 | and [edi+WDATA.fl_wstate],not WSTATE_MAXIMIZED |
1510 | and [edi+WDATA.fl_wstate],not WSTATE_MAXIMIZED |
1449 | push [edi+WDATA.height] |
1511 | push [edi+WDATA.height] |
1450 | push edi ; restore |
1512 | push edi ; restore |
1451 | lea esi, [edx + 0x90] |
1513 | lea esi, [edx + 0x90] |
1452 | mov ecx,4 |
1514 | mov ecx,4 |
1453 | cld |
1515 | cld |
1454 | rep movsd |
1516 | rep movsd |
1455 | pop edi |
1517 | pop edi |
1456 | pop eax |
1518 | pop eax |
1457 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1519 | test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
1458 | jz @f |
1520 | jz @f |
1459 | mov [edi+WDATA.height],eax |
1521 | mov [edi+WDATA.height],eax |
1460 | @@: |
1522 | @@: |
1461 | 1523 | ||
1462 | no_fullscreen_restore: |
1524 | no_fullscreen_restore: |
1463 | 1525 | ||
1464 | mov eax,[edi+4] ; check Y inside screen |
1526 | mov eax,[edi+4] ; check Y inside screen |
1465 | add eax,[edi+12] |
1527 | add eax,[edi+12] |
1466 | cmp eax,[0xfe04] |
1528 | cmp eax,[0xfe04] |
1467 | jbe no_window_sizing |
1529 | jbe no_window_sizing |
1468 | mov eax,[edi+0] ; check X inside screen |
1530 | mov eax,[edi+0] ; check X inside screen |
1469 | add eax,[edi+8] |
1531 | add eax,[edi+8] |
1470 | cmp eax,[0xfe00] |
1532 | cmp eax,[0xfe00] |
1471 | jbe no_window_sizing |
1533 | jbe no_window_sizing |
1472 | mov eax,[0xfe00] |
1534 | mov eax,[0xfe00] |
1473 | sub eax,[edi+8] |
1535 | sub eax,[edi+8] |
1474 | mov [edi+0],eax |
1536 | mov [edi+0],eax |
1475 | mov eax,[0xfe04] |
1537 | mov eax,[0xfe04] |
1476 | sub eax,[edi+12] |
1538 | sub eax,[edi+12] |
1477 | mov [edi+4],eax |
1539 | mov [edi+4],eax |
1478 | no_window_sizing: |
1540 | no_window_sizing: |
1479 | 1541 | ||
1480 | popad |
1542 | popad |
1481 | 1543 | ||
1482 | cmp [reposition],0 |
1544 | cmp [reposition],0 |
1483 | je retwm |
1545 | je retwm |
1484 | - | ||
1485 | mov [edi+WDATA.fl_redraw],1 |
1546 | |
- | 1547 | mov [0xfff5],byte 1 ; no mouse |
|
1486 | mov [0xfff5],byte 1 ; no mouse |
1548 | |
- | 1549 | ||
- | 1550 | push eax ebx ecx edx |
|
- | 1551 | mov eax,[edi+00] |
|
- | 1552 | mov ebx,[edi+04] |
|
- | 1553 | mov ecx,[edi+8] |
|
- | 1554 | mov edx,[edi+12] |
|
- | 1555 | add ecx,eax |
|
- | 1556 | add edx,ebx |
|
1487 | 1557 | call calculatescreen |
|
1488 | push eax ebx ecx edx |
1558 | |
1489 | mov eax,[oldc+00] |
1559 | mov eax,[oldc+00] |
1490 | mov ebx,[oldc+04] |
1560 | mov ebx,[oldc+04] |
1491 | mov ecx,[oldc+8] |
1561 | mov ecx,[oldc+8] |
1492 | mov edx,[oldc+12] |
1562 | mov edx,[oldc+12] |
1493 | add ecx,eax |
1563 | add ecx,eax |
1494 | add edx,ebx |
1564 | add edx,ebx |
1495 | call calculatescreen |
1565 | call calculatescreen |
1496 | pop edx ecx ebx eax |
1566 | pop edx ecx ebx eax |
1497 | 1567 | ||
1498 | mov eax,edi |
1568 | mov eax,edi |
1499 | call redrawscreen |
1569 | call redrawscreen |
- | 1570 | ||
- | 1571 | ||
- | 1572 | mov [edi+WDATA.fl_redraw],1 |
|
1500 | 1573 | ||
1501 | mov ecx,100 ; wait to avoid mouse residuals |
1574 | mov ecx,100 ; wait to avoid mouse residuals |
1502 | waitre2: |
1575 | waitre2: |
1503 | mov [0xfff5],byte 1 |
1576 | mov [0xfff5],byte 1 |
1504 | call checkidle |
1577 | call checkidle |
1505 | cmp [edi+WDATA.fl_redraw],0 |
1578 | cmp [edi+WDATA.fl_redraw],0 |
1506 | jz retwm |
1579 | jz retwm |
1507 | loop waitre2 |
1580 | loop waitre2 |
1508 | 1581 | ||
1509 | retwm: |
1582 | retwm: |
1510 | 1583 | ||
1511 | mov [0xfff5],byte 0 ; mouse pointer |
1584 | mov [0xfff5],byte 0 ; mouse pointer |
1512 | mov [0xfff4],byte 0 ; no mouse under |
1585 | mov [0xfff4],byte 0 ; no mouse under |
1513 | mov [0xfb44],byte 0 ; react to mouse up/down |
1586 | mov [0xfb44],byte 0 ; react to mouse up/down |
1514 | 1587 | ||
1515 | mov esi,window_moved |
1588 | mov esi,window_moved |
1516 | call sys_msg_board_str |
1589 | call sys_msg_board_str |
1517 | 1590 | ||
1518 | popad |
1591 | popad |
1519 | 1592 | ||
1520 | ret |
1593 | ret |
1521 | 1594 | ||
1522 | 1595 | ||
1523 | uglobal |
1596 | uglobal |
1524 | add_window_data dd 0 |
1597 | add_window_data dd 0 |
1525 | do_resize_from_corner db 0x0 |
1598 | do_resize_from_corner db 0x0 |
1526 | reposition db 0x0 |
1599 | reposition db 0x0 |
1527 | latest_window_touch dd 0x0 |
1600 | latest_window_touch dd 0x0 |
1528 | latest_window_touch_delta dd 0x0 |
1601 | latest_window_touch_delta dd 0x0 |
1529 | 1602 | ||
1530 | do_resize db 0x0 |
1603 | do_resize db 0x0 |
1531 | 1604 | ||
1532 | oldc dd 0x0,0x0,0x0,0x0 |
1605 | oldc dd 0x0,0x0,0x0,0x0 |
1533 | 1606 | ||
1534 | dlx dd 0x0 |
1607 | dlx dd 0x0 |
1535 | dly dd 0x0 |
1608 | dly dd 0x0 |
1536 | dlxe dd 0x0 |
1609 | dlxe dd 0x0 |
1537 | dlye dd 0x0 |
1610 | dlye dd 0x0 |
1538 | 1611 | ||
1539 | npx dd 0x0 |
1612 | npx dd 0x0 |
1540 | npy dd 0x0 |
1613 | npy dd 0x0 |
1541 | npxe dd 0x0 |
1614 | npxe dd 0x0 |
1542 | npye dd 0x0 |
1615 | npye dd 0x0 |
1543 | 1616 | ||
1544 | mpx dd 0x0 |
1617 | mpx dd 0x0 |
1545 | mpy dd 0x0 |
1618 | mpy dd 0x0 |
1546 | endg |
1619 | endg |
1547 | 1620 | ||
1548 | 1621 | ||
1549 | ; draw negative window frames |
1622 | ; draw negative window frames |
1550 | 1623 | ||
1551 | drawwindowframes: |
1624 | drawwindowframes: |
1552 | 1625 | ||
1553 | pushad |
1626 | pushad |
1554 | 1627 | ||
1555 | mov eax,[npx] |
1628 | mov eax,[npx] |
1556 | shl eax,16 |
1629 | shl eax,16 |
1557 | add eax,[npx] |
1630 | add eax,[npx] |
1558 | add eax,[npxe] |
1631 | add eax,[npxe] |
1559 | add eax,65536*1-1 |
1632 | add eax,65536*1-1 |
1560 | mov ebx,[npy] |
1633 | mov ebx,[npy] |
1561 | shl ebx,16 |
1634 | shl ebx,16 |
1562 | add ebx,[npy] |
1635 | add ebx,[npy] |
1563 | mov ecx,0x01000000 |
1636 | mov ecx,0x01000000 |
1564 | push edi |
1637 | push edi |
1565 | mov edi,1 |
1638 | mov edi,1 |
1566 | call [draw_line] |
1639 | call [draw_line] |
1567 | pop edi |
1640 | pop edi |
1568 | 1641 | ||
1569 | mov eax,[npx] |
1642 | mov eax,[npx] |
1570 | shl eax,16 |
1643 | shl eax,16 |
1571 | add eax,[npx] |
1644 | add eax,[npx] |
1572 | add eax,[npxe] |
1645 | add eax,[npxe] |
1573 | add eax,65536*1-1 |
1646 | add eax,65536*1-1 |
1574 | mov ebx,[npy] |
1647 | mov ebx,[npy] |
1575 | add ebx,[npye] |
1648 | add ebx,[npye] |
1576 | shl ebx,16 |
1649 | shl ebx,16 |
1577 | add ebx,[npy] |
1650 | add ebx,[npy] |
1578 | add ebx,[npye] |
1651 | add ebx,[npye] |
1579 | mov ecx,0x01000000 |
1652 | mov ecx,0x01000000 |
1580 | push edi |
1653 | push edi |
1581 | mov edi,1 |
1654 | mov edi,1 |
1582 | call [draw_line] |
1655 | call [draw_line] |
1583 | pop edi |
1656 | pop edi |
1584 | 1657 | ||
1585 | mov eax,[npx] |
1658 | mov eax,[npx] |
1586 | shl eax,16 |
1659 | shl eax,16 |
1587 | add eax,[npx] |
1660 | add eax,[npx] |
1588 | mov ebx,[npy] |
1661 | mov ebx,[npy] |
1589 | shl ebx,16 |
1662 | shl ebx,16 |
1590 | add ebx,[npy] |
1663 | add ebx,[npy] |
1591 | add ebx,[npye] |
1664 | add ebx,[npye] |
1592 | mov ecx,0x01000000 |
1665 | mov ecx,0x01000000 |
1593 | push edi |
1666 | push edi |
1594 | mov edi,1 |
1667 | mov edi,1 |
1595 | call [draw_line] |
1668 | call [draw_line] |
1596 | pop edi |
1669 | pop edi |
1597 | 1670 | ||
1598 | mov eax,[npx] |
1671 | mov eax,[npx] |
1599 | add eax,[npxe] |
1672 | add eax,[npxe] |
1600 | shl eax,16 |
1673 | shl eax,16 |
1601 | add eax,[npx] |
1674 | add eax,[npx] |
1602 | add eax,[npxe] |
1675 | add eax,[npxe] |
1603 | mov ebx,[npy] |
1676 | mov ebx,[npy] |
1604 | shl ebx,16 |
1677 | shl ebx,16 |
1605 | add ebx,[npy] |
1678 | add ebx,[npy] |
1606 | add ebx,[npye] |
1679 | add ebx,[npye] |
1607 | mov ecx,0x01000000 |
1680 | mov ecx,0x01000000 |
1608 | push edi |
1681 | push edi |
1609 | mov edi,1 |
1682 | mov edi,1 |
1610 | call [draw_line] |
1683 | call [draw_line] |
1611 | mov edi,[0x3000] |
1684 | mov edi,[0x3000] |
1612 | shl edi,5 |
1685 | shl edi,5 |
1613 | add edi,window_data |
1686 | add edi,window_data |
1614 | mov [edi+30],byte 1 |
1687 | mov [edi+30],byte 1 |
1615 | pop edi |
1688 | pop edi |
1616 | 1689 | ||
1617 | popad |
1690 | popad |
1618 | 1691 | ||
1619 | ret |
1692 | ret |
1620 | 1693 | ||
1621 | 1694 | ||
1622 | 1695 | ||
1623 | random_shaped_window: |
1696 | random_shaped_window: |
1624 | 1697 | ||
1625 | ; |
1698 | ; |
1626 | ; eax = 0 giving address of data area |
1699 | ; eax = 0 giving address of data area |
1627 | ; ebx address |
1700 | ; ebx address |
1628 | ; ebx = 1 shape area scale |
1701 | ; ebx = 1 shape area scale |
1629 | ; ebx 2^ebx scale |
1702 | ; ebx 2^ebx scale |
1630 | 1703 | ||
1631 | test eax, eax |
1704 | test eax, eax |
1632 | jne rsw_no_address |
1705 | jne rsw_no_address |
1633 | mov eax,[0x3000] |
1706 | mov eax,[0x3000] |
1634 | shl eax,8 |
1707 | shl eax,8 |
1635 | 1708 | ||
1636 | mov [eax+0x80000+0x80],ebx |
1709 | mov [eax+0x80000+0x80],ebx |
1637 | rsw_no_address: |
1710 | rsw_no_address: |
1638 | 1711 | ||
1639 | cmp eax,1 |
1712 | cmp eax,1 |
1640 | jne rsw_no_scale |
1713 | jne rsw_no_scale |
1641 | mov eax,[0x3000] |
1714 | mov eax,[0x3000] |
1642 | shl eax,8 |
1715 | shl eax,8 |
1643 | mov [eax+0x80000+0x84],bl |
1716 | mov [eax+0x80000+0x84],bl |
1644 | rsw_no_scale: |
1717 | rsw_no_scale: |
1645 | 1718 | ||
1646 | ret>>->->=>=> |
1719 | ret>>->->=>=> |