This repository was archived by the owner on Apr 25, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Expand file tree
/
Copy pathMORE.ASM
More file actions
155 lines (129 loc) · 3.63 KB
/
MORE.ASM
File metadata and controls
155 lines (129 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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