Subversion Repositories Kolibri OS

Rev

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

Rev 997 Rev 1035
Line 200... Line 200...
200
	popad
200
	popad
201
	test	eax, eax
201
	test	eax, eax
202
	jz	..openerr_in_screen
202
	jz	..openerr_in_screen
203
	mov	ebx, eax
203
	mov	ebx, eax
204
@@:
204
@@:
-
 
205
	mov	ecx, [EditBlockSize]	; bytes rest in the current block
-
 
206
	add	edi, [EditBlockStart]
205
.readloop:
207
.readloop:
206
	mov	edx, [ebp + editor_data.hPlugin]
208
	mov	edx, [ebp + editor_data.hPlugin]
207
	test	edx, edx
209
	test	edx, edx
208
	jz	.readnative
210
	jz	.readnative
209
	pushad
211
	pushad
Line 253... Line 255...
253
	jmp	delete_active_screen
255
	jmp	delete_active_screen
254
.readok:
256
.readok:
255
; eax = number of bytes read
257
; eax = number of bytes read
256
	test	eax, eax
258
	test	eax, eax
257
	jnz	@f
259
	jnz	@f
258
	mov	ecx, edi
260
	push	edi
259
	sub	ecx, ebp
261
	sub	edi, ebp
260
	cmp	ecx, [ebp + editor_data.first_block]
262
	cmp	edi, [ebp + editor_data.first_block]
-
 
263
	pop	edi
261
	jnz	.readdone
264
	jnz	.readdone
262
@@:
265
@@:
263
	push	eax ebx
266
	push	eax ebx
264
	mov	ebx, [readinfo.data]
267
	mov	ebx, [readinfo.data]
265
.loadloop:
268
.loadloop:
266
	mov	ecx, [EditBlockSize]
-
 
267
	cmp	eax, ecx
269
	test	ecx, ecx
268
	ja	@f
-
 
269
	mov	ecx, eax
-
 
270
@@:
-
 
271
	sub	eax, ecx
270
	jnz	.hasplace
272
	push	eax
271
	push	eax
273
	dec	esi
272
	dec	esi
274
	jns	.hasblock
273
	jns	.hasblock
275
	push	ecx
-
 
276
	add	[ebp + editor_data.memsize], 8
274
	add	[ebp + editor_data.memsize], 8
277
	add	esi, 8
275
	add	esi, 8
278
	mov	ecx, [ebp + editor_data.memsize]
276
	mov	ecx, [ebp + editor_data.memsize]
279
	cmp	ecx, 80000000h shr 12
277
	cmp	ecx, 80000000h shr 12
280
	jb	@f
278
	jb	@f
281
.nomemory2:
279
.nomemory2:
282
	pop	ecx eax ebx eax
280
	pop	eax ebx eax
283
	call	.nomemory
281
	call	.nomemory
284
	jmp	.readfailed
282
	jmp	.readfailed
285
@@:
283
@@:
286
	sub	edi, ebp
284
	sub	edi, ebp
287
	shl	ecx, 12
285
	shl	ecx, 12
288
	mov	edx, ebp
286
	mov	edx, ebp
289
	call	xpgrealloc
287
	call	xpgrealloc
290
	test	eax, eax
288
	test	eax, eax
291
	jz	.nomemory2
289
	jz	.nomemory2
292
	mov	ebp, eax
-
 
293
	add	edi, eax
290
	add	edi, eax
294
	pop	ecx
291
	xchg	ebp, eax
295
.hasblock:
292
.hasblock:
-
 
293
	push	edi
-
 
294
	and	edi, not 0xFFF
296
	lea	eax, [edi + 0x1000]
295
	lea	eax, [edi + 0x1000]
297
	push	eax
-
 
298
	sub	eax, ebp
296
	sub	eax, ebp
299
	stosd	; edit_block_header.next
297
	stosd	; edit_block_header.next
300
	sub	eax, 0x2000
298
	sub	eax, 0x2000
301
	stosd	; edit_block_header.prev
299
	stosd	; edit_block_header.prev
-
 
300
	pop	eax
302
	mov	eax, [EditBlockStart]
301
	sub	eax, edi
303
	add	eax, ecx
302
	add	eax, 8
304
	stosd	; edit_block_header.limit
303
	stosd	; edit_block_header.limit
305
	push	ecx
-
 
306
	mov	ecx, [EditPlugInfo]
304
	mov	ecx, [EditPlugInfo]
307
	inc	ecx
305
	inc	ecx
308
	jz	@f
306
	jz	@f
309
	dec	ecx
307
	dec	ecx
310
@@:
308
@@:
311
	xor	eax, eax
309
	xor	eax, eax
312
	rep	stosb	; info for plugins: zeroed
310
	rep	stosb	; info for plugins: zeroed
-
 
311
	add	edi, 0x1000
-
 
312
	mov	ecx, [EditBlockSize]
313
	pop	ecx
313
	pop	eax
-
 
314
.hasplace:
-
 
315
	push	ecx
-
 
316
	cmp	eax, ecx
-
 
317
	ja	@f
-
 
318
	mov	ecx, eax
-
 
319
@@:
-
 
320
	push	ecx
-
 
321
	push	eax
314
	push	esi edi ecx
322
	push	esi edi
315
	mov	esi, ebx
323
	mov	esi, ebx
316
	add	ecx, 3
324
	mov	edx, ecx
317
	shr	ecx, 2
325
	shr	ecx, 2
318
	rep	movsd
326
	rep	movsd
-
 
327
	mov	ecx, edx
-
 
328
	and	ecx, 3
-
 
329
	rep	movsb
319
	mov	ebx, esi
330
	mov	ebx, esi
320
	pop	ecx edi
331
	mov	ecx, edx
-
 
332
	pop	esi
321
; calculate number of lines in this block
333
; calculate number of lines in this block
322
	mov	esi, edi
-
 
323
	xor	edx, edx
-
 
324
	test	ecx, ecx
334
	test	ecx, ecx
325
	jz	.4
335
	jz	.4
-
 
336
	mov	al, [esi - 1]
-
 
337
	mov	edx, esi
-
 
338
	sub	edx, [EditBlockStart]
-
 
339
	test	edx, 0xFFF
-
 
340
	jnz	.0
-
 
341
	mov	al, 0
-
 
342
	sub	edx, ebp
-
 
343
	cmp	edx, [ebp + editor_data.first_block]
-
 
344
	jz	.0
-
 
345
	sub	edx, 1000h
-
 
346
	add	edx, ebp
-
 
347
	add	edx, [edx + edit_block_header.limit]
-
 
348
	mov	al, [edx - 1]
-
 
349
.0:
-
 
350
	xor	edx, edx
-
 
351
	cmp	al, 13
-
 
352
	jnz	.1
-
 
353
	mov	dl, 10
326
.1:
354
.1:
-
 
355
	mov	al, [esi]
327
	lodsb
356
	add	esi, 1
328
	cmp	al, 13
357
	cmp	al, 13
329
	jz	@f
358
	jz	@f
330
	cmp	al, 10
359
	cmp	al, 10
331
	jz	@f
360
	jz	@f
332
	mov	dl, 0
361
	mov	dl, 0
-
 
362
	sub	ecx, 1
-
 
363
	jnz	.1
333
	jmp	.3
364
	jmp	.4
334
@@:
365
@@:
335
	cmp	al, dl
366
	cmp	al, dl
336
	mov	dl, 0
367
	mov	dl, 0
337
	jz	.3
368
	jz	.3
338
	inc	[ebp + editor_data.numlines]
369
	add	[ebp + editor_data.numlines], 1
339
	cmp	al, 10
370
	cmp	al, 10
340
	jz	.3
371
	jz	.3
341
	mov	dl, 10
372
	mov	dl, 10
342
.3:
373
.3:
-
 
374
	sub	ecx, 1
343
	loop	.1
375
	jnz	.1
344
.4:
376
.4:
345
	pop	esi
377
	pop	esi
346
	pop	edi
-
 
347
	pop	eax
378
	pop	eax
-
 
379
	pop	ecx
-
 
380
	sub	[esp], ecx
348
	test	eax, eax
381
	sub	eax, ecx
-
 
382
	pop	ecx
349
	jnz	.loadloop
383
	jnz	.loadloop
350
	pop	ebx eax
384
	pop	ebx eax
351
	cmp	eax, 16384
385
	cmp	eax, 16384
352
	jz	.readloop
386
	jz	.readloop
353
.readdone:
387
.readdone:
-
 
388
	push	edi
-
 
389
	and	edi, not 0xFFF
-
 
390
	xor	eax, eax
-
 
391
	stosd	; editor_block_header.next
-
 
392
	lea	eax, [edi - 4 - 0x1000]
-
 
393
	sub	eax, ebp
-
 
394
	stosd	; editor_block_header.prev
-
 
395
	pop	eax
-
 
396
	sub	eax, edi
-
 
397
	add	eax, 8
-
 
398
	stosd	; editor_block_header.limit
-
 
399
	mov	ecx, [EditPlugInfo]
-
 
400
	inc	ecx
-
 
401
	jz	@f
-
 
402
	dec	ecx
-
 
403
@@:
354
	xor	eax, eax
404
	xor	eax, eax
-
 
405
	rep	stosb
-
 
406
	and	edi, not 0xFFF
355
	mov	ecx, edi
407
	lea	ecx, [edi + 0x1000]
356
	sub	ecx, ebp
408
	sub	ecx, ebp
357
	mov	edx, ecx
409
	mov	edx, ecx
358
	shr	ecx, 12
410
	shr	ecx, 12
359
	sub	ecx, [ebp + editor_data.memsize]
411
	sub	ecx, [ebp + editor_data.memsize]
360
	neg	ecx
412
	neg	ecx
361
	mov	[ebp + editor_data.numfree], ecx
413
	mov	[ebp + editor_data.numfree], ecx
362
	jz	.nofree
414
	jz	.nofree
363
	mov	[ebp + editor_data.freeblocks], edx
415
	mov	[ebp + editor_data.freeblocks], edx
364
	push	edi
416
	push	edi
365
.addfree:
417
.addfree:
-
 
418
	add	edi, 1000h
366
	add	edx, 1000h
419
	add	edx, 1000h
367
	mov	[edi], edx
420
	mov	[edi], edx
368
	add	edi, 1000h
-
 
369
	loop	.addfree
421
	loop	.addfree
370
	mov	[edi-1000h], eax
422
	mov	[edi], eax
371
	pop	edi
423
	pop	edi
372
.nofree:
424
.nofree:
373
	sub	edi, 1000h
-
 
374
	mov	[edi + edit_block_header.next], eax
-
 
375
	sub	edi, ebp
425
	sub	edi, ebp
376
	mov	[ebp + editor_data.last_block], edi
426
	mov	[ebp + editor_data.last_block], edi
377
	mov	ecx, [EditDataSize]
427
	mov	ecx, [EditDataSize]
378
	shl	ecx, 12
428
	shl	ecx, 12
379
	mov	[ecx + ebp + edit_block_header.prev], eax
429
	mov	[ecx + ebp + edit_block_header.prev], eax