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