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