You've already forked MS-DOS-2.11
mirror of
https://github.com/DOS-History/MS-DOS-2.11.git
synced 2026-04-29 09:13:55 -07:00
155 lines
3.6 KiB
NASM
155 lines
3.6 KiB
NASM
TITLE MORE MS-DOS Paginate Filter
|
|
FALSE EQU 0
|
|
TRUE EQU NOT FALSE
|
|
|
|
IBMVER EQU TRUE
|
|
KANJI EQU FALSE
|
|
MSVER EQU FALSE
|
|
|
|
INCLUDE DOSSYM.ASM
|
|
|
|
CODE SEGMENT PUBLIC
|
|
ORG 100H
|
|
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
|
|
START:
|
|
|
|
MOV AH,GET_VERSION
|
|
INT 21H
|
|
XCHG AH,AL ; Turn it around to AH.AL
|
|
CMP AX,200H
|
|
JAE OKDOS
|
|
MOV DX,OFFSET BADVER
|
|
MOV AH,STD_CON_STRING_OUTPUT
|
|
INT 21H
|
|
INT 20H
|
|
OKDOS:
|
|
|
|
IF IBMVER
|
|
IF KANJI
|
|
MOV BYTE PTR MAXROW,24
|
|
ELSE
|
|
MOV BYTE PTR MAXROW,25
|
|
ENDIF
|
|
MOV AH,15
|
|
INT 16
|
|
MOV MAXCOL,AH
|
|
ENDIF
|
|
|
|
MOV DX,OFFSET CRLFTXT ; INITIALIZE CURSOR
|
|
MOV AH,STD_CON_STRING_OUTPUT
|
|
INT 21H
|
|
|
|
XOR BX,BX ; DUP FILE HANDLE 0
|
|
MOV AH,XDUP
|
|
INT 21H
|
|
MOV BP,AX
|
|
|
|
MOV AH,CLOSE ; CLOSE STANDARD IN
|
|
INT 21H
|
|
|
|
MOV BX,2 ; DUP STD ERR TO STANDARD IN
|
|
MOV AH,XDUP
|
|
INT 21H
|
|
|
|
ALOOP:
|
|
CLD
|
|
MOV DX,OFFSET BUFFER
|
|
MOV CX,4096
|
|
MOV BX,BP
|
|
MOV AH,READ
|
|
INT 21H
|
|
OR AX,AX
|
|
JNZ SETCX
|
|
DONE: INT 20H
|
|
SETCX: MOV CX,AX
|
|
MOV SI,DX
|
|
|
|
TLOOP:
|
|
LODSB
|
|
CMP AL,1AH
|
|
JZ DONE
|
|
CMP AL,13
|
|
JNZ NOTCR
|
|
MOV BYTE PTR CURCOL,1
|
|
JMP SHORT ISCNTRL
|
|
|
|
NOTCR: CMP AL,10
|
|
JNZ NOTLF
|
|
INC BYTE PTR CURROW
|
|
JMP SHORT ISCNTRL
|
|
|
|
NOTLF: CMP AL,8
|
|
JNZ NOTBP
|
|
CMP BYTE PTR CURCOL,1
|
|
JZ ISCNTRL
|
|
DEC BYTE PTR CURCOL
|
|
JMP SHORT ISCNTRL
|
|
|
|
NOTBP: CMP AL,9
|
|
JNZ NOTTB
|
|
MOV AH,CURCOL
|
|
ADD AH,7
|
|
AND AH,11111000B
|
|
INC AH
|
|
MOV CURCOL,AH
|
|
JMP SHORT ISCNTRL
|
|
|
|
NOTTB:
|
|
IF MSVER ; IBM CONTROL CHARACTER PRINT
|
|
CMP AL,' '
|
|
JB ISCNTRL
|
|
ENDIF
|
|
|
|
IF IBMVER
|
|
CMP AL,7 ; ALL CHARACTERS PRINT BUT BELL
|
|
JZ ISCNTRL
|
|
ENDIF
|
|
|
|
INC BYTE PTR CURCOL
|
|
MOV AH,CURCOL
|
|
CMP AH,MAXCOL
|
|
JBE ISCNTRL
|
|
INC BYTE PTR CURROW
|
|
MOV BYTE PTR CURCOL,1
|
|
|
|
ISCNTRL:
|
|
MOV DL,AL
|
|
MOV AH,STD_CON_OUTPUT
|
|
INT 21H
|
|
MOV AH,CURROW
|
|
CMP AH,MAXROW
|
|
JB CHARLOOP
|
|
|
|
ASKMORE:
|
|
MOV DX,OFFSET MORETXT
|
|
MOV AH,STD_CON_STRING_OUTPUT
|
|
INT 21H ; ASK MORE?
|
|
|
|
MOV AH,STD_CON_INPUT_FLUSH ; WAIT FOR A KEY, NO ECHO
|
|
MOV AL,STD_CON_INPUT
|
|
INT 21H
|
|
|
|
MOV DX,OFFSET CRLFTXT
|
|
MOV AH,STD_CON_STRING_OUTPUT
|
|
INT 21H
|
|
|
|
MOV BYTE PTR CURCOL,1
|
|
MOV BYTE PTR CURROW,1
|
|
|
|
CHARLOOP:
|
|
DEC CX
|
|
JZ GOBIG
|
|
JMP TLOOP
|
|
GOBIG: JMP ALOOP
|
|
|
|
MAXROW DB 24
|
|
MAXCOL DB 80
|
|
CURROW DB 1
|
|
CURCOL DB 1
|
|
EXTRN MORETXT:BYTE,BADVER:BYTE,CRLFTXT:BYTE,BUFFER:BYTE
|
|
|
|
CODE ENDS
|
|
END START
|
|
|