Смекни!
smekni.com

Програма для перегляду великих текстових файлів, розмір яких більший за 64 кілобайти (стр. 2 из 2)

;13-й пропускаємо, 10-й - перехiд на

;новий рядок, а 9 - табулюємо (10)

mov ax,seg video

mov ds,ax

mov ax,seg pvideobuffer

mov es,ax

mov si,offset video

mov di,offset pvideobuffer

;пропустити 1 рядок

add di,80*2

symb:

mov al,byte ptr ds:[si] ;символ

cmp al,10 ;перехiд на новий рядок

jne normal

;почати новий рядок

push ax

push bx

push dx

push di

add di,160 ;di=di+ (160-((di+160) mod 160))

mov ax,di

xor dx,dx

mov bx,160

div bx

mov ax,160

sub ax,dx

pop di

add di,ax

pop dx

pop bx

pop ax

jmp skip; новий рядок

normal:

cmp al,13

je skip

;нормальний символ - виводимо

mov byte ptr es:[di],al

add di,2 ;2 байта - наступнi (атрибут пропустити)

skip:

inc si ;наступний байт iнформацiї

push si

sub si,offset video

mov word ptr fs:[sym_count],si

pop si

cmp di,4000 ;кiнець екрана

jb symb

;??????????????????===================================

;на екран виводимо з пам@ятi

cld

push es

mov cx,80*25

mov ax,0b800h

mov es,ax

xor si,si

xor di,di

rep movsw

pop es

popa

ret

showframe endp

;====================KEY_PGUP

key_pgup proc

;24 рази викликати key_up

push cx

mov cx,24

scr_up:

call key_up

loop scr_up

pop cx

ret

key_pgup endp

;====================KEY_PGDN

key_pgdn proc

;24 рази викликати key_down

push cx

mov cx,24

scr_dn:

call key_down

loop scr_dn

pop cx

ret

key_pgdn endp

;============================================

begin:

mov ax,seg msg1

mov ds,ax

;введення iменi файла 1

mov ah,9

mov dx,offset msg1

int 21h

mov bx,offset filename0

ent_1:

mov ah,1h

int 21h

mov [bx],al

inc bx

cmp al,13

jne ent_1

dec bx

mov byte ptr [bx],0

mov ah,2

mov dl,10

int 21h

mov ax,seg blocklength

mov fs,ax

;сховати курсор

mov ah,1

xor cl,cl

mov ch,00000010b

int 10h

call openfile

call initblocks

call showframe

;чекаємо клавiшу

wait_key:

xor ah,ah

int 16h

;al-ascii code

cmp ah,1 ;ESC

je halt

cmp ah,48h ;UP

jne next1

call key_up

jmp wait_key

next1: cmp ah,50h

jne next2 ;DOWN

call key_down

jmp wait_key

next2: cmp ah,49h ;PGUP

jne next3

call key_pgup

jmp wait_key

next3: cmp ah,51h ;PGDN

jne wait_key

call key_pgdn

jmp wait_key

halt:

call cleanup

call closefile

mov ah,4ch

int 21h

end start