summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/MORE
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/CMD/MORE
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/CMD/MORE')
-rw-r--r--v4.0/src/CMD/MORE/MAKEFILE36
-rw-r--r--v4.0/src/CMD/MORE/MORE.ASM275
-rw-r--r--v4.0/src/CMD/MORE/MORE.INC29
-rw-r--r--v4.0/src/CMD/MORE/MORE.LNK2
-rw-r--r--v4.0/src/CMD/MORE/MORE.SKL16
5 files changed, 358 insertions, 0 deletions
diff --git a/v4.0/src/CMD/MORE/MAKEFILE b/v4.0/src/CMD/MORE/MAKEFILE
new file mode 100644
index 0000000..9121b53
--- /dev/null
+++ b/v4.0/src/CMD/MORE/MAKEFILE
@@ -0,0 +1,36 @@
1#************************ makefile for cmd\more *************************
2
3msg =..\..\messages
4dos =..\..\dos
5inc =..\..\inc
6hinc =..\..\h
7
8#
9####################### dependencies begin here. #########################
10#
11
12all: more.com
13
14more.ctl: more.skl \
15 $(msg)\$(COUNTRY).msg \
16 makefile
17
18more.obj: more.asm \
19 more.inc \
20 makefile \
21 more.ctl \
22 more.cla \
23 more.cl1 \
24 more.cl2 \
25 $(inc)\syscall.inc \
26 $(inc)\struc.inc \
27 $(inc)\msgserv.asm \
28 $(inc)\sysmsg.inc \
29 $(inc)\versiona.inc \
30 $(inc)\copyrigh.inc
31
32more.com: more.obj \
33 more.lnk
34 link @more.lnk
35 exe2bin more.exe more.com
36 del more.exe
diff --git a/v4.0/src/CMD/MORE/MORE.ASM b/v4.0/src/CMD/MORE/MORE.ASM
new file mode 100644
index 0000000..a5212d4
--- /dev/null
+++ b/v4.0/src/CMD/MORE/MORE.ASM
@@ -0,0 +1,275 @@
1;******************************************************************************
2;
3; MODULE: more.asm
4;
5; Modification History:
6;
7; Version Author date comment
8; ------- ------ ---- -------
9; V4.0 RussW ;AN000; initial extended attr. support
10;
11; V4.0 Bill L 9/17/87 ;AN001; DCR 201 - extended attr. enhancement
12; ;AN002; DCR 191
13; ;AN003; PTM 3860 - add CR-LF to make DOS3.3 compat.
14;******************************************************************************
15
16FALSE EQU 0
17TRUE EQU NOT FALSE
18
19IBMVER EQU TRUE
20IBMJAPVER EQU FALSE
21MSVER EQU FALSE
22
23STDOUT EQU 1 ;AN003;
24;------------------------------
25; EXTENDED ATTRIBUTE Equates
26;------------------------------
27GetExtAttr equ 05702h ;AN000; ;Int 021h function call
28SetExtAttr equ 05704h ;AN000; ;Int 021h function call
29GetCPSW equ 03303h ;AN001;
30
31EAISBINARY equ 02h ;AN001; ;ea_type
32EASYSTEM equ 8000h ;AN001; ;ea_flags
33
34BREAK MACRO subtitle
35 SUBTTL subtitle
36 PAGE
37ENDM
38
39 INCLUDE SYSCALL.INC
40
41 INCLUDE MORE.INC ;AN000; ;MORE strucs and equates
42 .XLIST ;AN000;
43 INCLUDE STRUC.INC ;AN000; ;Structured macros
44 INCLUDE SYSMSG.INC ;AN000; ;Message retriever code
45 .LIST ;AN000;
46
47MSG_UTILNAME <MORE> ;AN000;
48
49CODE SEGMENT PUBLIC
50 ORG 100H
51ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
52
53
54START: JMP START1 ;AC000;
55;;; DB " The DOS 4.0 MORE Filter" ;AC003;
56
57
58;----------------------------------------
59;- STRUCTURE TO QUERY EXTENDED ATTRIBUTES
60;----------------------------------------
61querylist struc ;AN001; ;query general list
62qea_num dw 1 ;AN001;
63qea_type db EAISBINARY ;AN001;
64qea_flags dw EASYSTEM ;AN001;
65qea_namelen db ? ;AN001;
66qea_name db " " ;AN001;
67querylist ends ;AN001;
68
69cp_qlist querylist <1,EAISBINARY,EASYSTEM,2,"CP"> ;AN001; ;query code page attr.
70
71cp_list label word ;AN001; ;code page attr. get/set list
72 dw 1 ;AN001; ; # of list entries
73 db EAISBINARY ;AN001; ; ea type
74 dw EASYSTEM ;AN001; ; ea flags
75 db ? ;AN001; ; ea return code
76 db 2 ;AN001; ; ea name length
77 dw 2 ;AN001; ; ea value length
78 db "CP" ;AN001; ; ea name
79cp dw ? ;AN001; ; ea value (code page)
80cp_len equ ($ - cp_list) ;AN001;
81
82
83START1:
84 CALL SYSLOADMSG ;AN000;
85 .IF C ;AN000;
86 CALL SYSDISPMSG ;AN000;
87 MOV AH,EXIT ;AN000;
88 INT 21H ;AN000;
89 .ENDIF ;AN000;
90
91 MOV AX,ANSI_GET ;AN000; ;prepare for device characteristics..
92 MOV BX,STDERR ;AN000; ;request.
93 MOV CX,GET_SUBFUNC ;AN000; ;get subfucntion..
94 LEA DX,ANSI_BUF ;AN000; ;point to buffer.
95 INT 21H ;AN000;
96 .IF NC ;AN000; ;if ANSI returns a no carry then..
97 LEA DI,ANSI_BUF ;AN000;
98 .IF <[DI].D_MODE EQ TEXT_MODE> ;AN000; ;if we are in a text mode then..
99 MOV AX,[DI].SCR_ROWS ;AN000; ;store the screen length...else..
100 MOV MAXROW,AL ;AN000; ;default (25) is assumed.
101 .ENDIF ;AN000;
102 .ENDIF ;AN000;
103 MOV AH,0FH
104 INT 10H
105 MOV MAXCOL,AH
106
107 XOR BX,BX ; DUP FILE HANDLE 0
108 MOV AH,XDUP
109 INT 21H
110 MOV BP,AX ; Place new handle in BP
111
112 MOV AH,CLOSE ; CLOSE STANDARD IN
113 INT 21H
114
115 MOV BX,2 ; DUP STD ERR TO STANDARD IN
116 MOV AH,XDUP
117 INT 21H
118cp_check: ;AN001;
119 mov ax,GetCPSW ;AN001;
120 int 21h ;AN001; ;DL =0 (Not supported)
121 jc sloop ;AN001; ;no CPSW, skip cp setting
122 cmp dl,0 ;AN001; ;Is CPSW active ?
123 je sloop ;AN001; ;no, skip cp setting
124;
125 mov ax,GetExtAttr ;AN000; ;Get Codepage of source
126 mov bx,bp ;AN000; ;Standard Input
127 mov si,offset cp_qlist ;AN001; ;code page query list
128 mov cx,cp_len ;AN001; ;length of code page list
129 mov di,offset cp_list ;AC001; ;Input buffer address
130 int 021h ;AN000; ;Pow !
131 jc SLOOP ;AN000; ;Do nothing if error
132 ;Ok, we got CP of source. Set tgt to match...
133 mov ax,SetExtAttr ;AN000; ;Set target codepage to that of source
134 mov bx,1 ;AN000; ;Standard Output
135 mov di,offset cp_list ;AC001; ;Input buffer address
136 int 021h ;AN000; ;Blam !
137;-------------------------------
138SLOOP:
139 MOV CX,CRLF_LEN ;AN003; ;display a newline
140 MOV DX,OFFSET CRLF ;AN003;
141 MOV BX,STDOUT ;AN003;
142 MOV AH,WRITE ;AN003;
143 INT 21H ;AN003;
144ALOOP:
145 CLD
146 MOV DX,OFFSET BUFFER
147 MOV CX,4096
148 MOV BX,BP
149 MOV AH,READ
150 INT 21H
151 OR AX,AX
152 JNZ SETCX
153DONE: INT 20H
154SETCX: MOV CX,AX
155 MOV SI,DX
156
157TLOOP:
158 LODSB
159 CMP AL,1AH
160 JZ DONE
161 CMP AL,13
162 JNZ NOTCR
163 MOV BYTE PTR CURCOL,1
164 JMP SHORT ISCNTRL
165
166NOTCR: CMP AL,10
167 JNZ NOTLF
168 INC BYTE PTR CURROW
169 JMP SHORT ISCNTRL
170
171NOTLF: CMP AL,8
172 JNZ NOTBP
173 CMP BYTE PTR CURCOL,1
174 JZ ISCNTRL
175 DEC BYTE PTR CURCOL
176 JMP SHORT ISCNTRL
177
178NOTBP: CMP AL,9
179 JNZ NOTTB
180 MOV AH,CURCOL
181 ADD AH,7
182 AND AH,11111000B
183 INC AH
184 MOV CURCOL,AH
185 JMP SHORT ISCNTRL
186
187NOTTB:
188 IF MSVER ; IBM CONTROL CHARACTER PRINT
189 CMP AL,' '
190 JB ISCNTRL
191 ENDIF
192
193 IF IBMVER
194 CMP AL,7 ; ALL CHARACTERS PRINT BUT BELL
195 JZ ISCNTRL
196 ENDIF
197
198 INC BYTE PTR CURCOL
199 MOV AH,CURCOL
200 CMP AH,MAXCOL
201 JBE ISCNTRL
202 INC BYTE PTR CURROW
203 MOV BYTE PTR CURCOL,1
204
205ISCNTRL:
206 MOV DL,AL
207 MOV AH,STD_CON_OUTPUT
208 INT 21H
209 MOV AH,CURROW
210 CMP AH,MAXROW
211 JB CHARLOOP
212
213ASKMORE:
214 PUSH BP ;AN000; ;save file handle
215 PUSH SI ;AN000; ;save pointer
216 PUSH CX ;AN000; ;save count
217 MOV AX,MORE_MSG ;AN000; ;use message retriever..
218 MOV BX,STDERR ;AN000; ;to issue..
219 XOR CX,CX ;AN000; ;-- More --
220 MOV DL,NO_INPUT ;AN000;
221 MOV DH,UTILITY_MSG_CLASS ;AN000;
222 CALL SYSDISPMSG ;AN000;
223
224 MOV AH,STD_CON_INPUT_FLUSH ;WAIT FOR A KEY, NO ECHO
225 MOV AL,STD_CON_INPUT_NO_ECHO ;AC000; ;no echo
226 INT 21H
227
228 CMP AL,EXTENDED ;AN000; ;Check for extended key?
229 JNE NOT_EXTENDED ;AN000; ;continue
230 MOV AH,STD_CON_INPUT_NO_ECHO ;AN000; ;clear extended key
231 INT 21H ;AN000; ;
232
233NOT_EXTENDED:
234 MOV CX,CRLF2_LEN ;AC003; ;place cursor..
235 MOV DX,OFFSET CRLF2 ;AC003; ;..on new line.
236 MOV BX,STDERR ;AN000;
237 MOV AH,WRITE ;AN000;
238 INT 21H ;AN000;
239 POP CX ;AN000; ;restore count
240 POP SI ;AN000; ;restore pointer
241 POP BP ;AN000; ;restore file handle
242
243 MOV BYTE PTR CURCOL,1
244 MOV BYTE PTR CURROW,1
245
246CHARLOOP:
247 DEC CX
248 JZ GOBIG
249 JMP TLOOP
250GOBIG: JMP ALOOP
251
252MAXROW DB 25
253MAXCOL DB 80
254CURROW DB 1
255CURCOL DB 1
256
257ANSI_BUF ANSI_STR <> ;AN000; ;buffer for IOCTL call
258
259.XLIST ;AN000;
260MSG_SERVICES <MSGDATA> ;AN000; ;message retriever code
261MSG_SERVICES <LOADmsg,DISPLAYmsg,NOCHECKSTDIN> ;AN002;
262MSG_SERVICES <MORE.CL1> ;AN000;
263MSG_SERVICES <MORE.CL2> ;AN000;
264MSG_SERVICES <MORE.CLA> ;AN000;
265.LIST ;AN000;
266
267CRLF DB 13,10 ;AC000;
268CRLF_LEN DW $ - CRLF ;AC000;
269CRLF2 DB 13,10,13,10 ;AN003;
270CRLF2_LEN DW $ - CRLF2 ;AN003;
271
272BUFFER LABEL BYTE
273
274CODE ENDS
275 END START
diff --git a/v4.0/src/CMD/MORE/MORE.INC b/v4.0/src/CMD/MORE/MORE.INC
new file mode 100644
index 0000000..30507c1
--- /dev/null
+++ b/v4.0/src/CMD/MORE/MORE.INC
@@ -0,0 +1,29 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;
2; ;AN000;
3; MORE STRUC AND EQUATES ;AN000;
4; ;AN000;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;
6; ;AN000;
7ANSI_GET EQU 440CH ;AN000;
8GET_SUBFUNC EQU 037FH ;AN000;
9EXTENDED EQU 0 ;AN000;
10TEXT_MODE EQU 1 ;AN000;
11MORE_MSG EQU 2 ;AN000;
12FILE_TYPE_MSG EQU 4 ;AN001;
13DATA_LENGTH EQU 14 ;AN000;
14; ;AN000;
15ANSI_STR STRUC ;AN000;
16 DB 0 ;AN000;
17 DB 0 ;AN000;
18 DW DATA_LENGTH ;AN000;
19 DW ? ;AN000;
20D_MODE DB ? ;AN000;
21 DB ? ;AN000;
22 DW ? ;AN000;
23 DW ? ;AN000;
24 DW ? ;AN000;
25 DW ? ;AN000;
26SCR_ROWS DW ? ;AN000;
27ANSI_STR ENDS ;AN000;
28
29 \ No newline at end of file
diff --git a/v4.0/src/CMD/MORE/MORE.LNK b/v4.0/src/CMD/MORE/MORE.LNK
new file mode 100644
index 0000000..dc0e2e4
--- /dev/null
+++ b/v4.0/src/CMD/MORE/MORE.LNK
@@ -0,0 +1,2 @@
1more;
2 \ No newline at end of file
diff --git a/v4.0/src/CMD/MORE/MORE.SKL b/v4.0/src/CMD/MORE/MORE.SKL
new file mode 100644
index 0000000..b624280
--- /dev/null
+++ b/v4.0/src/CMD/MORE/MORE.SKL
@@ -0,0 +1,16 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; Message Skeleton file for MORE.COM
4;
5; Author: WGR
6;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
9:util MORE ; utility name ;AN000;
10
11:class A ;AN000;
12:use 1 COMMON1 ; 'Incorrect DOS version' ;AN000;
13:def 2 "-- More --" ;AN000;
14
15:end ;AN000;
16 \ No newline at end of file