;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