mirror of
https://github.com/microsoft/MS-DOS.git
synced 2024-11-29 09:05:46 +00: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
|
|||
|
|