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