Subversion Repositories Kolibri OS

Rev

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