Subversion Repositories Kolibri OS

Rev

Rev 280 | Rev 327 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 280 Rev 297
Line 1... Line 1...
1
;-----------------------------------------------------------------------------
1
;-----------------------------------------------------------------------------
2
func check_cur_vis_inv ;//////////////////////////////////////////////////////
-
 
3
;-----------------------------------------------------------------------------
-
 
4
	push	eax ebx
-
 
5
	xor	bl,bl
-
 
6
  .chk_y:
-
 
7
	mov	eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
-
 
8
	or	eax,eax
-
 
9
	jge	@f
-
 
10
	mov	[cur_editor.Caret.Y],0 ;! [pos.y],0
-
 
11
	jmp	.chk_dy
-
 
12
    @@: cmp	eax,[cur_editor.Lines.Count] ;! eax,[lines]
-
 
13
	jl	.chk_dy
-
 
14
	mov	eax,[cur_editor.Lines.Count] ;! eax,[lines]
-
 
15
	dec	eax
-
 
16
	mov	[cur_editor.Caret.Y],eax ;! [pos.y],eax
-
 
17
  .chk_dy:
-
 
18
	mov	eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
-
 
19
	cmp	eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
-
 
20
	jle	@f
-
 
21
	m2m	[cur_editor.TopLeft.Y],[cur_editor.Caret.Y]
-
 
22
;!      push    [pos.y]
-
 
23
;!      pop     [top_line]
-
 
24
	inc	bl
-
 
25
    @@: add	eax,[lines.scr]
-
 
26
	cmp	eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
-
 
27
	jg	.chk_x
-
 
28
	mov	eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
-
 
29
	sub	eax,[lines.scr]
-
 
30
	inc	eax
-
 
31
	mov	[cur_editor.TopLeft.Y],eax ;! [top_line],eax
-
 
32
	inc	bl
-
 
33
  .chk_x:
-
 
34
	mov	eax,[cur_editor.Caret.X] ;! eax,[pos.x]
-
 
35
	or	eax,eax
-
 
36
	jge	@f
-
 
37
	mov	[cur_editor.Caret.X],0 ;! [pos.x],0
-
 
38
	jmp	.chk_dx
-
 
39
    @@: cmp	eax,[cur_editor.Columns.Count] ;! eax,[columns]
-
 
40
	jl	.chk_dx
-
 
41
	mov	eax,[cur_editor.Columns.Count] ;! eax,[columns]
-
 
42
	mov	[cur_editor.Caret.X],eax ;! [pos.x],eax
-
 
43
  .chk_dx:
-
 
44
	mov	eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
-
 
45
	cmp	eax,[cur_editor.Caret.X] ;! eax,[pos.x]
-
 
46
	jle	@f
-
 
47
	m2m	[cur_editor.TopLeft.X],[cur_editor.Caret.X]
-
 
48
;!      push    [pos.x]
-
 
49
;!      pop     [left_col]
-
 
50
	inc	bl
-
 
51
    @@: add	eax,[columns.scr]
-
 
52
	cmp	eax,[cur_editor.Caret.X] ;! eax,[pos.x]
-
 
53
	jg	@f
-
 
54
	mov	eax,[cur_editor.Caret.X] ;! eax,[pos.x]
-
 
55
	sub	eax,[columns.scr]
-
 
56
	inc	eax
-
 
57
	mov	[cur_editor.TopLeft.X],eax ;! [left_col],eax
-
 
58
	inc	bl
-
 
59
    @@: cmp	[mev],MEV_LDOWN
-
 
60
	jne	.exit
-
 
61
	push	[cur_editor.Caret.X] [cur_editor.Caret.Y] ;! [pos.x] [pos.y]
-
 
62
	pop	[cur_editor.SelStart.Y] [cur_editor.SelStart.X] ;! [sel.y] [sel.x]
-
 
63
  .exit:
-
 
64
	or	bl,bl
-
 
65
	clc
-
 
66
	jz	@f
-
 
67
	call	draw_file
-
 
68
	stc
-
 
69
    @@: pop	ebx eax
-
 
70
	ret
-
 
71
endf
-
 
72
 
-
 
73
;-----------------------------------------------------------------------------
-
 
74
func clear_selection ;////////////////////////////////////////////////////////
2
func clear_selection ;////////////////////////////////////////////////////////
75
;-----------------------------------------------------------------------------
3
;-----------------------------------------------------------------------------
76
	push	eax ebx
4
	push	eax ebx
77
	mov	eax,[cur_editor.SelStart.Y] ;! eax,[sel.y]
5
	mov	eax,[cur_editor.SelStart.Y]
78
	mov	ebx,[cur_editor.Caret.Y] ;! ebx,[pos.y]
6
	mov	ebx,[cur_editor.Caret.Y]
79
	cmp	eax,ebx
7
	cmp	eax,ebx
80
	jle	@f
8
	jle	@f
81
	xchg	eax,ebx
9
	xchg	eax,ebx
82
    @@: push	[cur_editor.Caret.X] [cur_editor.Caret.Y] ;! [pos.x] [pos.y]
10
    @@: push	[cur_editor.Caret.X] [cur_editor.Caret.Y]
83
	pop	[cur_editor.SelStart.Y] [cur_editor.SelStart.X] ;! [sel.y] [sel.x]
11
	pop	[cur_editor.SelStart.Y] [cur_editor.SelStart.X]
84
	call	draw_file.ex
-
 
85
	pop	ebx eax
12
	pop	ebx eax
86
	ret
13
	ret
87
endf
14
endf
Line 88... Line 15...
88
 
15
 
Line 105... Line 32...
105
 
32
 
106
;-----------------------------------------------------------------------------
33
;-----------------------------------------------------------------------------
107
func check_bottom_right ;/////////////////////////////////////////////////////
34
func check_bottom_right ;/////////////////////////////////////////////////////
108
;-----------------------------------------------------------------------------
35
;-----------------------------------------------------------------------------
109
	push	eax
36
	push	eax
110
	mov	eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
37
	mov	eax,[cur_editor.TopLeft.Y]
111
	add	eax,[lines.scr]
38
	add	eax,[lines.scr]
112
	cmp	eax,[cur_editor.Lines.Count] ;! eax,[lines]
39
	cmp	eax,[cur_editor.Lines.Count]
113
	jbe	.lp1
40
	jbe	.lp1
114
	mov	eax,[cur_editor.Lines.Count] ;! eax,[lines]
41
	mov	eax,[cur_editor.Lines.Count]
115
	sub	eax,[lines.scr]
42
	sub	eax,[lines.scr]
116
	jns	@f
43
	jns	@f
117
	xor	eax,eax
44
	xor	eax,eax
118
    @@: mov	[cur_editor.TopLeft.Y],eax ;! [top_line],eax
45
    @@: mov	[cur_editor.TopLeft.Y],eax
119
  .lp1: mov	eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
46
  .lp1: mov	eax,[cur_editor.TopLeft.X]
120
	add	eax,[columns.scr]
47
	add	eax,[columns.scr]
121
	cmp	eax,[cur_editor.Columns.Count] ;! eax,[columns]
48
	cmp	eax,[cur_editor.Columns.Count]
122
	jbe	.exit
49
	jbe	.exit
123
	mov	eax,[cur_editor.Columns.Count] ;! eax,[columns]
50
	mov	eax,[cur_editor.Columns.Count]
124
	sub	eax,[columns.scr]
51
	sub	eax,[columns.scr]
125
	jns	@f
52
	jns	@f
126
	xor	eax,eax
53
	xor	eax,eax
127
    @@: mov	[cur_editor.TopLeft.X],eax ;! [left_col],eax
54
    @@: mov	[cur_editor.TopLeft.X],eax
128
  .exit:
55
  .exit:
129
	pop	eax
56
	pop	eax
130
	ret
57
	ret
Line 131... Line 58...
131
endf
58
endf
132
 
-
 
133
;-----------------------------------------------------------------------------
-
 
134
func check_inv_str ;//////////////////////////////////////////////////////////
-
 
135
;-----------------------------------------------------------------------------
-
 
136
@^
-
 
137
	mov	eax,[pos.y]
-
 
138
	mov	ecx,[top_line]
-
 
139
  .skip_init:
-
 
140
	call	check_cur_vis
-
 
141
	mov	[pos.y],eax
-
 
142
	mov	[top_line],ecx
-
 
143
  .skip_check:
-
 
144
;       call    invalidate_string
-
 
145
	call	drawfile
-
 
146
	ret
-
 
147
^@
-
 
148
endf
-
 
149
 
-
 
150
;-----------------------------------------------------------------------------
-
 
151
func check_inv_all ;//////////////////////////////////////////////////////////
-
 
152
;-----------------------------------------------------------------------------
-
 
153
	mov	eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
-
 
154
	mov	ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
-
 
155
  .skip_init:
-
 
156
	call	check_cur_vis
-
 
157
	mov	[cur_editor.Caret.Y],eax ;! [pos.y],eax
-
 
158
	mov	[cur_editor.TopLeft.Y],ecx ;! [top_line],ecx
-
 
159
  .skip_check:
-
 
160
;       call    clear_screen
-
 
161
	call	draw_file
-
 
162
	ret
-
 
163
endf
-
 
164
 
-
 
165
;-----------------------------------------------------------------------------
-
 
166
func check_cur_vis ;//////////////////////////////////////////////////////////
-
 
167
;-----------------------------------------------------------------------------
-
 
168
	cmp	eax,ecx
-
 
169
	jb	.low
-
 
170
	mov	edx,ecx
-
 
171
	add	edx,[lines.scr]
-
 
172
	cmp	edx,[cur_editor.Lines.Count] ;! edx,[lines]
-
 
173
	jbe	@f
-
 
174
	mov	edx,[cur_editor.Lines.Count] ;! edx,[lines]
-
 
175
    @@: cmp	eax,edx
-
 
176
	jb	@f
-
 
177
	lea	ecx,[eax+1]
-
 
178
	sub	ecx,[lines.scr]
-
 
179
	jns	@f
-
 
180
	xor	ecx,ecx
-
 
181
	jmp	@f
-
 
182
  .low: mov	ecx,eax
-
 
183
    @@: mov	edx,ecx
-
 
184
	add	edx,[lines.scr]
-
 
185
	cmp	edx,[cur_editor.Lines.Count] ;! edx,[lines]
-
 
186
	jbe	@f
-
 
187
	mov	ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
-
 
188
	sub	ecx,[lines.scr]
-
 
189
	jns	@f
-
 
190
	xor	ecx,ecx
-
 
191
    @@:;mov     [top_line],ecx
-
 
192
 
-
 
193
	pushad
-
 
194
	mov	eax,[cur_editor.Caret.X] ;! eax,[pos.x]
-
 
195
	mov	ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
-
 
196
	mov	ecx,ebx
-
 
197
	add	ecx,[columns.scr]
-
 
198
	cmp	eax,ebx
-
 
199
	jb	.lp1
-
 
200
	cmp	eax,ecx
-
 
201
	jb	.exit
-
 
202
	lea	ebx,[eax]
-
 
203
	sub	ebx,[columns.scr]
-
 
204
	jmp	@f
-
 
205
  .lp1: mov	ebx,eax
-
 
206
    @@: mov	[cur_editor.TopLeft.X],ebx ;! [left_col],ebx
-
 
207
 
-
 
208
  .exit:
-
 
209
	mov	[cur_editor.Caret.X],eax ;! [pos.x],eax
-
 
210
	popad
-
 
211
 
-
 
212
	ret
-
 
213
endf
-
 
214
 
59
 
215
;-----------------------------------------------------------------------------
60
;-----------------------------------------------------------------------------
216
func get_real_length ;////////////////////////////////////////////////////////
61
func get_real_length ;////////////////////////////////////////////////////////
217
;-----------------------------------------------------------------------------
62
;-----------------------------------------------------------------------------
218
	movzx	eax,word[esi]
63
	movzx	eax,word[esi]
Line 230... Line 75...
230
;  ECX = line number
75
;  ECX = line number
231
; Output:
76
; Output:
232
;  ESI = line data offset
77
;  ESI = line data offset
233
;-----------------------------------------------------------------------------
78
;-----------------------------------------------------------------------------
234
	push	eax ecx
79
	push	eax ecx
235
	mov	esi,[cur_editor.Lines] ;! AREA_EDIT
80
	mov	esi,[cur_editor.Lines]
236
    @@: dec	ecx
81
    @@: dec	ecx
237
	js	.exit
82
	js	.exit
238
	movzx	eax,word[esi]
83
	movzx	eax,word[esi]
239
	lea	esi,[esi+eax+4]
84
	lea	esi,[esi+eax+4]
240
	jmp	@b
85
	jmp	@b
Line 246... Line 91...
246
;-----------------------------------------------------------------------------
91
;-----------------------------------------------------------------------------
247
func init_sel_vars ;//////////////////////////////////////////////////////////
92
func init_sel_vars ;//////////////////////////////////////////////////////////
248
;-----------------------------------------------------------------------------
93
;-----------------------------------------------------------------------------
249
	pushad
94
	pushad
250
	mov	[sel.selected],1
95
	mov	[sel.selected],1
251
	mov	eax,[cur_editor.SelStart.X] ;! eax,[sel.x]
96
	mov	eax,[ebp+EDITOR.SelStart.X]
252
	mov	ebx,[cur_editor.SelStart.Y] ;! ebx,[sel.y]
97
	mov	ebx,[ebp+EDITOR.SelStart.Y]
253
	mov	ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
98
	mov	ecx,[ebp+EDITOR.Caret.X]
254
	mov	edx,[cur_editor.Caret.Y] ;! edx,[pos.y]
99
	mov	edx,[ebp+EDITOR.Caret.Y]
255
	cmp	ebx,edx
100
	cmp	ebx,edx
256
	jl	.lp2
101
	jl	.lp2
257
	jne	@f
102
	jne	@f
258
	cmp	eax,ecx
103
	cmp	eax,ecx
259
	jl	.lp2
104
	jl	.lp2
Line 305... Line 150...
305
	xor	eax,eax
150
	xor	eax,eax
306
   @@:	mov	[esp+8],eax    ; scroller offset
151
   @@:	mov	[esp+8],eax	; scroller offset
307
	add	eax,[esp+4]
152
	add	eax,[esp+4]
308
	cmp	eax,[esp]
153
	cmp	eax,[esp]
309
	jle	@f
154
	jle	@f
310
;        mov     eax,[esp]
-
 
311
;        sub     eax,[esp+4]
-
 
312
;        js      @f
-
 
313
;        mov     [esp+8],eax
-
 
314
    @@:
155
    @@:
315
	pop	edx ebx eax
156
	pop	edx ebx eax
316
	ret
157
	ret
317
  .null:
158
  .null:
318
	mov	dword[esp+4],0
159
	mov	dword[esp+4],0
Line 447... Line 288...
447
	sar	eax,16
288
	sar	eax,16
448
	mov	ecx,__rc
289
	mov	ecx,__rc
449
	mov	dword[ecx+0x0],0
290
	mov	dword[ecx+0x0],0
450
	mov	dword[ecx+0x4],0
291
	mov	dword[ecx+0x4],0
451
	movzx	edx,[ebp+POPUP.width]
292
	movzx	edx,[ebp+POPUP.width]
452
	mov	dword[ecx+0x8],edx;POP_WIDTH
293
	mov	dword[ecx+0x8],edx
453
	movzx	edx,[ebp+POPUP.height]
294
	movzx	edx,[ebp+POPUP.height]
454
	mov	dword[ecx+0xC],edx;POP_HEIGHT
295
	mov	dword[ecx+0xC],edx
455
	call	pt_in_rect
296
	call	pt_in_rect
456
	jnc	.outside_window
297
	jnc	.outside_window
457
	inc	dword[ecx+0x0]
298
	inc	dword[ecx+0x0]
458
	mov	dword[ecx+0x4],3
299
	mov	dword[ecx+0x4],3
459
	dec	dword[ecx+0x8]
300
	dec	dword[ecx+0x8]
460
	mov	dword[ecx+0xC],3+POP_IHEIGHT-1
301
	mov	dword[ecx+0xC],3+POP_IHEIGHT-1
461
	mov	edx,[ebp+POPUP.data];popup_text.data
302
	mov	edx,[ebp+POPUP.data]
462
    @@: inc	[pi_cur]
303
    @@: inc	[pi_cur]
463
	inc	edx
304
	inc	edx
464
	movzx	esi,byte[edx-1]
305
	movzx	esi,byte[edx-1]
465
	cmp	byte[edx],'-'
306
	cmp	byte[edx],'-'
466
	jne	.lp1
307
	jne	.lp1
Line 473... Line 314...
473
	add	dword[ecx+0xC],4
314
	add	dword[ecx+0xC],4
474
	jmp	.lp3
315
	jmp	.lp3
475
  .lp1: call	pt_in_rect
316
  .lp1: call	pt_in_rect
476
	jnc	.lp2
317
	jnc	.lp2
477
	mov	eax,[pi_cur]
318
	mov	eax,[pi_cur]
478
	test	byte[ebp+eax-1],1;byte[popup_text+eax-1],1
319
	test	byte[ebp+eax-1],1
479
	jnz	.exit
320
	jnz	.exit
480
	jmp	.separator
321
	jmp	.separator
481
  .lp2: add	dword[ecx+0x4],POP_IHEIGHT
322
  .lp2: add	dword[ecx+0x4],POP_IHEIGHT
482
	add	dword[ecx+0xC],POP_IHEIGHT
323
	add	dword[ecx+0xC],POP_IHEIGHT
483
	add	edx,esi
324
	add	edx,esi
Line 514... Line 355...
514
	lea	eax,[ecx+4]
355
	lea	eax,[ecx+4]
515
	call	editor_realloc_lines
356
	call	editor_realloc_lines
516
	mov	[esp+4*7],eax
357
	mov	[esp+4*7],eax
517
	add	esi,eax
358
	add	esi,eax
518
	push	ecx
359
	push	ecx
519
	mov	edi,[cur_editor.Lines] ;! AREA_TEMP2
360
	mov	edi,[cur_editor.Lines]
520
	add	edi,[edi-4]
361
	add	edi,[edi-4]
521
	dec	edi
362
	dec	edi
522
	mov	eax,esi
363
	mov	eax,esi
523
	mov	esi,edi
364
	mov	esi,edi
524
	sub	esi,ecx
365
	sub	esi,ecx
525
	lea	ecx,[eax+4]
366
	lea	ecx,[eax+4]
526
	add	ecx,edx;[eax]
367
	add	ecx,edx
527
	push	ecx
368
	push	ecx
528
	neg	ecx
369
	neg	ecx
529
	lea	ecx,[esi+ecx+1]
370
	lea	ecx,[esi+ecx+1]
530
	std
371
	std
531
	rep	movsb
372
	rep	movsb
Line 569... Line 410...
569
	mov	ebx,[sel.begin.x]
410
	mov	ebx,[sel.begin.x]
570
	add	ebx,ecx
411
	add	ebx,ecx
571
	mov	[edi-4],bx
412
	mov	[edi-4],bx
572
	add	edi,[sel.begin.x]
413
	add	edi,[sel.begin.x]
573
	lea	esi,[esi+eax+4]
414
	lea	esi,[esi+eax+4]
574
	mov	ecx,[cur_editor.Lines] ;! AREA_TEMP2
415
	mov	ecx,[cur_editor.Lines]
575
	add	ecx,[ecx-4]
416
	add	ecx,[ecx-4]
576
	sub	ecx,esi
417
	sub	ecx,esi
577
	cld
418
	cld
578
	rep	movsb
419
	rep	movsb
579
	mov	eax,[sel.end.y]
420
	mov	eax,[sel.end.y]
580
	sub	eax,[sel.begin.y]
421
	sub	eax,[sel.begin.y]
581
	sub	[cur_editor.Lines.Count],eax ;! [lines],eax
422
	sub	[cur_editor.Lines.Count],eax
582
	jmp	.exit
423
	jmp	.exit
Line 583... Line 424...
583
 
424
 
584
  .single_line:
425
  .single_line:
585
	call	get_line_offset
426
	call	get_line_offset
Line 595... Line 436...
595
    @@: sub	ecx,[sel.begin.x]
436
    @@: sub	ecx,[sel.begin.x]
596
	sub	[esi],cx
437
	sub	[esi],cx
597
	lea	edi,[esi+4]
438
	lea	edi,[esi+4]
598
	add	edi,[sel.begin.x]
439
	add	edi,[sel.begin.x]
599
	lea	esi,[edi+ecx]
440
	lea	esi,[edi+ecx]
600
	mov	ecx,[cur_editor.Lines] ;! AREA_TEMP2
441
	mov	ecx,[cur_editor.Lines]
601
	add	ecx,[ecx-4]
442
	add	ecx,[ecx-4]
602
	sub	ecx,esi
443
	sub	ecx,esi
603
	cld
444
	cld
604
	rep	movsb
445
	rep	movsb
Line 605... Line 446...
605
 
446
 
606
  .exit:
447
  .exit:
607
	mov	eax,[sel.begin.x]
448
	mov	eax,[sel.begin.x]
608
	mov	[cur_editor.Caret.X],eax ;! [pos.x],eax
449
	mov	[cur_editor.Caret.X],eax
609
	mov	[cur_editor.SelStart.X],eax ;! [sel.x],eax
450
	mov	[cur_editor.SelStart.X],eax
610
	mov	eax,[sel.begin.y]
451
	mov	eax,[sel.begin.y]
611
	mov	[cur_editor.Caret.Y],eax ;! [pos.y],eax
452
	mov	[cur_editor.Caret.Y],eax
Line 612... Line 453...
612
	mov	[cur_editor.SelStart.Y],eax ;! [sel.y],eax
453
	mov	[cur_editor.SelStart.Y],eax
613
 
454
 
614
	mov	ecx,[cur_editor.Lines.Count]
455
	mov	ecx,[cur_editor.Lines.Count]
615
	call	get_line_offset
456
	call	get_line_offset
Line 620... Line 461...
620
	sub	esi,eax
461
	sub	esi,eax
621
	lea	eax,[esi+4096]
462
	lea	eax,[esi+4096]
622
	call	editor_realloc_lines
463
	call	editor_realloc_lines
Line 623... Line 464...
623
 
464
 
624
	popad
465
	popad
625
	mov	[cur_editor.Modified],1 ;! [modified],1
466
	mov	[cur_editor.Modified],1
626
	clc
467
	clc
Line 627... Line 468...
627
	ret
468
	ret
628
 
469
 
Line 688... Line 529...
688
	xor	edx,edx
529
	xor	edx,edx
689
	jmp	.lp1
530
	jmp	.lp1
690
endf
531
endf
Line 691... Line 532...
691
 
532
 
-
 
533
;-----------------------------------------------------------------------------
-
 
534
func update_caption ;/////////////////////////////////////////////////////////
-
 
535
;-----------------------------------------------------------------------------
-
 
536
	lea	esi,[cur_editor.FilePath]
-
 
537
	mov	edi,s_title
-
 
538
 
-
 
539
    @@: lodsb
-
 
540
	cmp	al,0
-
 
541
	je	@f
-
 
542
	stosb
-
 
543
	jmp	@b
-
 
544
    @@:
-
 
545
	mov	dword[edi],' - '
-
 
546
	add	edi,3
-
 
547
    @@: mov	esi,htext
-
 
548
	mov	ecx,htext.size
-
 
549
	cld
-
 
550
	rep	movsb
-
 
551
 
-
 
552
	mov	al,0
-
 
553
	stosb
-
 
554
 
-
 
555
	mcall	71,1,s_title
-
 
556
 
-
 
557
	clc
-
 
558
	ret
-
 
559
endf
-
 
560
 
692
;-----------------------------------------------------------------------------
561
;-----------------------------------------------------------------------------
693
func mem.Alloc ;//////////////////////////////////////////////////////////////
562
func mem.Alloc ;//////////////////////////////////////////////////////////////
694
;-----------------------------------------------------------------------------
563
;-----------------------------------------------------------------------------
695
	push	ebx ecx
564
	push	ebx ecx
696
	lea	ecx,[eax+4+4095]
565
	lea	ecx,[eax+4+4095]