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 |