From 2d04cacc5322951f187bb17e017c12920ac8ebe2 Mon Sep 17 00:00:00 2001 From: Mark Zbikowski Date: Thu, 25 Apr 2024 21:24:10 +0100 Subject: MZ is back! --- v4.0/src/CMD/MORE/MAKEFILE | 36 ++++++ v4.0/src/CMD/MORE/MORE.ASM | 275 +++++++++++++++++++++++++++++++++++++++++++++ v4.0/src/CMD/MORE/MORE.INC | 29 +++++ v4.0/src/CMD/MORE/MORE.LNK | 2 + v4.0/src/CMD/MORE/MORE.SKL | 16 +++ 5 files changed, 358 insertions(+) create mode 100644 v4.0/src/CMD/MORE/MAKEFILE create mode 100644 v4.0/src/CMD/MORE/MORE.ASM create mode 100644 v4.0/src/CMD/MORE/MORE.INC create mode 100644 v4.0/src/CMD/MORE/MORE.LNK create mode 100644 v4.0/src/CMD/MORE/MORE.SKL (limited to 'v4.0/src/CMD/MORE') 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 @@ +#************************ makefile for cmd\more ************************* + +msg =..\..\messages +dos =..\..\dos +inc =..\..\inc +hinc =..\..\h + +# +####################### dependencies begin here. ######################### +# + +all: more.com + +more.ctl: more.skl \ + $(msg)\$(COUNTRY).msg \ + makefile + +more.obj: more.asm \ + more.inc \ + makefile \ + more.ctl \ + more.cla \ + more.cl1 \ + more.cl2 \ + $(inc)\syscall.inc \ + $(inc)\struc.inc \ + $(inc)\msgserv.asm \ + $(inc)\sysmsg.inc \ + $(inc)\versiona.inc \ + $(inc)\copyrigh.inc + +more.com: more.obj \ + more.lnk + link @more.lnk + exe2bin more.exe more.com + 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 @@ +;****************************************************************************** +; +; MODULE: more.asm +; +; Modification History: +; +; Version Author date comment +; ------- ------ ---- ------- +; V4.0 RussW ;AN000; initial extended attr. support +; +; V4.0 Bill L 9/17/87 ;AN001; DCR 201 - extended attr. enhancement +; ;AN002; DCR 191 +; ;AN003; PTM 3860 - add CR-LF to make DOS3.3 compat. +;****************************************************************************** + +FALSE EQU 0 +TRUE EQU NOT FALSE + +IBMVER EQU TRUE +IBMJAPVER EQU FALSE +MSVER EQU FALSE + +STDOUT EQU 1 ;AN003; +;------------------------------ +; EXTENDED ATTRIBUTE Equates +;------------------------------ +GetExtAttr equ 05702h ;AN000; ;Int 021h function call +SetExtAttr equ 05704h ;AN000; ;Int 021h function call +GetCPSW equ 03303h ;AN001; + +EAISBINARY equ 02h ;AN001; ;ea_type +EASYSTEM equ 8000h ;AN001; ;ea_flags + +BREAK MACRO subtitle + SUBTTL subtitle + PAGE +ENDM + + INCLUDE SYSCALL.INC + + INCLUDE MORE.INC ;AN000; ;MORE strucs and equates + .XLIST ;AN000; + INCLUDE STRUC.INC ;AN000; ;Structured macros + INCLUDE SYSMSG.INC ;AN000; ;Message retriever code + .LIST ;AN000; + +MSG_UTILNAME ;AN000; + +CODE SEGMENT PUBLIC + ORG 100H +ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE + + +START: JMP START1 ;AC000; +;;; DB " The DOS 4.0 MORE Filter" ;AC003; + + +;---------------------------------------- +;- STRUCTURE TO QUERY EXTENDED ATTRIBUTES +;---------------------------------------- +querylist struc ;AN001; ;query general list +qea_num dw 1 ;AN001; +qea_type db EAISBINARY ;AN001; +qea_flags dw EASYSTEM ;AN001; +qea_namelen db ? ;AN001; +qea_name db " " ;AN001; +querylist ends ;AN001; + +cp_qlist querylist <1,EAISBINARY,EASYSTEM,2,"CP"> ;AN001; ;query code page attr. + +cp_list label word ;AN001; ;code page attr. get/set list + dw 1 ;AN001; ; # of list entries + db EAISBINARY ;AN001; ; ea type + dw EASYSTEM ;AN001; ; ea flags + db ? ;AN001; ; ea return code + db 2 ;AN001; ; ea name length + dw 2 ;AN001; ; ea value length + db "CP" ;AN001; ; ea name +cp dw ? ;AN001; ; ea value (code page) +cp_len equ ($ - cp_list) ;AN001; + + +START1: + CALL SYSLOADMSG ;AN000; + .IF C ;AN000; + CALL SYSDISPMSG ;AN000; + MOV AH,EXIT ;AN000; + INT 21H ;AN000; + .ENDIF ;AN000; + + MOV AX,ANSI_GET ;AN000; ;prepare for device characteristics.. + MOV BX,STDERR ;AN000; ;request. + MOV CX,GET_SUBFUNC ;AN000; ;get subfucntion.. + LEA DX,ANSI_BUF ;AN000; ;point to buffer. + INT 21H ;AN000; + .IF NC ;AN000; ;if ANSI returns a no carry then.. + LEA DI,ANSI_BUF ;AN000; + .IF <[DI].D_MODE EQ TEXT_MODE> ;AN000; ;if we are in a text mode then.. + MOV AX,[DI].SCR_ROWS ;AN000; ;store the screen length...else.. + MOV MAXROW,AL ;AN000; ;default (25) is assumed. + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV AH,0FH + INT 10H + MOV MAXCOL,AH + + XOR BX,BX ; DUP FILE HANDLE 0 + MOV AH,XDUP + INT 21H + MOV BP,AX ; Place new handle in BP + + MOV AH,CLOSE ; CLOSE STANDARD IN + INT 21H + + MOV BX,2 ; DUP STD ERR TO STANDARD IN + MOV AH,XDUP + INT 21H +cp_check: ;AN001; + mov ax,GetCPSW ;AN001; + int 21h ;AN001; ;DL =0 (Not supported) + jc sloop ;AN001; ;no CPSW, skip cp setting + cmp dl,0 ;AN001; ;Is CPSW active ? + je sloop ;AN001; ;no, skip cp setting +; + mov ax,GetExtAttr ;AN000; ;Get Codepage of source + mov bx,bp ;AN000; ;Standard Input + mov si,offset cp_qlist ;AN001; ;code page query list + mov cx,cp_len ;AN001; ;length of code page list + mov di,offset cp_list ;AC001; ;Input buffer address + int 021h ;AN000; ;Pow ! + jc SLOOP ;AN000; ;Do nothing if error + ;Ok, we got CP of source. Set tgt to match... + mov ax,SetExtAttr ;AN000; ;Set target codepage to that of source + mov bx,1 ;AN000; ;Standard Output + mov di,offset cp_list ;AC001; ;Input buffer address + int 021h ;AN000; ;Blam ! +;------------------------------- +SLOOP: + MOV CX,CRLF_LEN ;AN003; ;display a newline + MOV DX,OFFSET CRLF ;AN003; + MOV BX,STDOUT ;AN003; + MOV AH,WRITE ;AN003; + INT 21H ;AN003; +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: + PUSH BP ;AN000; ;save file handle + PUSH SI ;AN000; ;save pointer + PUSH CX ;AN000; ;save count + MOV AX,MORE_MSG ;AN000; ;use message retriever.. + MOV BX,STDERR ;AN000; ;to issue.. + XOR CX,CX ;AN000; ;-- More -- + MOV DL,NO_INPUT ;AN000; + MOV DH,UTILITY_MSG_CLASS ;AN000; + CALL SYSDISPMSG ;AN000; + + MOV AH,STD_CON_INPUT_FLUSH ;WAIT FOR A KEY, NO ECHO + MOV AL,STD_CON_INPUT_NO_ECHO ;AC000; ;no echo + INT 21H + + CMP AL,EXTENDED ;AN000; ;Check for extended key? + JNE NOT_EXTENDED ;AN000; ;continue + MOV AH,STD_CON_INPUT_NO_ECHO ;AN000; ;clear extended key + INT 21H ;AN000; ; + +NOT_EXTENDED: + MOV CX,CRLF2_LEN ;AC003; ;place cursor.. + MOV DX,OFFSET CRLF2 ;AC003; ;..on new line. + MOV BX,STDERR ;AN000; + MOV AH,WRITE ;AN000; + INT 21H ;AN000; + POP CX ;AN000; ;restore count + POP SI ;AN000; ;restore pointer + POP BP ;AN000; ;restore file handle + + MOV BYTE PTR CURCOL,1 + MOV BYTE PTR CURROW,1 + +CHARLOOP: + DEC CX + JZ GOBIG + JMP TLOOP +GOBIG: JMP ALOOP + +MAXROW DB 25 +MAXCOL DB 80 +CURROW DB 1 +CURCOL DB 1 + +ANSI_BUF ANSI_STR <> ;AN000; ;buffer for IOCTL call + +.XLIST ;AN000; +MSG_SERVICES ;AN000; ;message retriever code +MSG_SERVICES ;AN002; +MSG_SERVICES ;AN000; +MSG_SERVICES ;AN000; +MSG_SERVICES ;AN000; +.LIST ;AN000; + +CRLF DB 13,10 ;AC000; +CRLF_LEN DW $ - CRLF ;AC000; +CRLF2 DB 13,10,13,10 ;AN003; +CRLF2_LEN DW $ - CRLF2 ;AN003; + +BUFFER LABEL BYTE + +CODE ENDS + 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 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; +; ;AN000; +; MORE STRUC AND EQUATES ;AN000; +; ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; +; ;AN000; +ANSI_GET EQU 440CH ;AN000; +GET_SUBFUNC EQU 037FH ;AN000; +EXTENDED EQU 0 ;AN000; +TEXT_MODE EQU 1 ;AN000; +MORE_MSG EQU 2 ;AN000; +FILE_TYPE_MSG EQU 4 ;AN001; +DATA_LENGTH EQU 14 ;AN000; +; ;AN000; +ANSI_STR STRUC ;AN000; + DB 0 ;AN000; + DB 0 ;AN000; + DW DATA_LENGTH ;AN000; + DW ? ;AN000; +D_MODE DB ? ;AN000; + DB ? ;AN000; + DW ? ;AN000; + DW ? ;AN000; + DW ? ;AN000; + DW ? ;AN000; +SCR_ROWS DW ? ;AN000; +ANSI_STR ENDS ;AN000; + + \ 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 @@ +more; + \ 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 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Message Skeleton file for MORE.COM +; +; Author: WGR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +:util MORE ; utility name ;AN000; + +:class A ;AN000; +:use 1 COMMON1 ; 'Incorrect DOS version' ;AN000; +:def 2 "-- More --" ;AN000; + +:end ;AN000; + \ No newline at end of file -- cgit v1.2.3