mirror of
https://github.com/microsoft/MS-DOS.git
synced 2024-11-25 15:15:47 +00:00
138 lines
4.4 KiB
NASM
138 lines
4.4 KiB
NASM
|
TITLE FORMAT Messages
|
|||
|
|
|||
|
FALSE EQU 0
|
|||
|
TRUE EQU NOT FALSE
|
|||
|
|
|||
|
IBMVER EQU FALSE
|
|||
|
|
|||
|
.xlist
|
|||
|
.xcref
|
|||
|
INCLUDE DOSSYM.ASM
|
|||
|
.cref
|
|||
|
.list
|
|||
|
|
|||
|
CODE SEGMENT PUBLIC 'CODE'
|
|||
|
ASSUME CS:CODE,DS:CODE,ES:CODE
|
|||
|
|
|||
|
PUBLIC BADVER,SNGMSG,SNGDRV,HRDMSG,HRDDRV,REPORT
|
|||
|
PUBLIC LABPRMT,TARGMSG,TARGDRV
|
|||
|
PUBLIC SYSTRAN,CRLFMSG,INVCHR,INVDRV,INVPAR
|
|||
|
PUBLIC SYSMSG,SYSDRV,FRMTERR,NOTSYS,NOUSE,MEMEX
|
|||
|
PUBLIC WAITYN
|
|||
|
EXTRN PRINT:NEAR,CRLF:NEAR,UNSCALE:NEAR,DISP32BITS:NEAR
|
|||
|
EXTRN FDSKSIZ:DWORD,SECSIZ:WORD,CLUSSIZ:WORD,SYSSIZ:DWORD
|
|||
|
EXTRN BADSIZ:DWORD
|
|||
|
|
|||
|
;Wait for "Y" or "N"
|
|||
|
WAITYN:
|
|||
|
MOV DX,OFFSET MORMSG ;Point to the message
|
|||
|
CALL PRINT ;And print it
|
|||
|
MOV AX,(STD_CON_INPUT_FLUSH SHL 8) OR STD_CON_INPUT
|
|||
|
;Flush buffer and wait for keystroke
|
|||
|
INT 21H ;Input character now a Y or N
|
|||
|
AND AL,0DFH ;So lower case works too
|
|||
|
CMP AL,"Y"
|
|||
|
JZ WAIT20
|
|||
|
CMP AL,"N"
|
|||
|
JZ WAIT10
|
|||
|
CALL CRLF
|
|||
|
JMP SHORT WAITYN
|
|||
|
WAIT10: STC
|
|||
|
WAIT20: RET
|
|||
|
|
|||
|
|
|||
|
;*********************************************
|
|||
|
; Make a status report including the following information:
|
|||
|
; Total disk capacity
|
|||
|
; Total system area used
|
|||
|
; Total bad space allocated
|
|||
|
; Total data space available
|
|||
|
;NOTE:
|
|||
|
; The DISP32BITS routine prints the number in DI:SI followed
|
|||
|
; by the message pointed to by BX. If it is desired to print
|
|||
|
; a message before the number, point at the message with DX
|
|||
|
; and call PRINT.
|
|||
|
|
|||
|
REPORT:
|
|||
|
MOV AX,WORD PTR FDSKSIZ
|
|||
|
MUL SECSIZ
|
|||
|
MOV CX,CLUSSIZ
|
|||
|
CALL UNSCALE
|
|||
|
MOV WORD PTR FDSKSIZ,AX
|
|||
|
MOV WORD PTR FDSKSIZ+2,DX
|
|||
|
MOV SI,AX
|
|||
|
MOV DI,DX
|
|||
|
MOV BX,OFFSET DSKSPC
|
|||
|
CALL DISP32BITS ;Report total disk space
|
|||
|
MOV SI,WORD PTR SYSSIZ
|
|||
|
MOV DI,WORD PTR SYSSIZ+2
|
|||
|
CMP SI,0
|
|||
|
JNZ SHOWSYS
|
|||
|
CMP DI,0
|
|||
|
JZ CHKBAD
|
|||
|
SHOWSYS:
|
|||
|
MOV BX,OFFSET SYSSPC
|
|||
|
CALL DISP32BITS ;Report space used by system
|
|||
|
CHKBAD:
|
|||
|
MOV SI,WORD PTR BADSIZ
|
|||
|
MOV DI,WORD PTR BADSIZ+2
|
|||
|
CMP SI,0
|
|||
|
JNZ SHOWBAD
|
|||
|
CMP DI,0
|
|||
|
JZ SHOWDATA
|
|||
|
SHOWBAD:
|
|||
|
MOV BX,OFFSET BADSPC
|
|||
|
CALL DISP32BITS ;Report space used by bad sectors
|
|||
|
SHOWDATA:
|
|||
|
MOV CX,WORD PTR FDSKSIZ
|
|||
|
MOV BX,WORD PTR FDSKSIZ+2
|
|||
|
SUB CX,WORD PTR BADSIZ
|
|||
|
SBB BX,WORD PTR BADSIZ+2
|
|||
|
SUB CX,WORD PTR SYSSIZ
|
|||
|
SBB BX,WORD PTR SYSSIZ+2
|
|||
|
MOV SI,CX
|
|||
|
MOV DI,BX
|
|||
|
MOV BX,OFFSET DATASPC
|
|||
|
CALL DISP32BITS ;Report space left for user
|
|||
|
RET
|
|||
|
|
|||
|
|
|||
|
BADVER DB "Incorrect DOS version",13,10,"$"
|
|||
|
SNGMSG DB "Insert new diskette for drive "
|
|||
|
SNGDRV DB "x:",13,10,"and strike any key when ready$"
|
|||
|
HRDMSG DB "Press any key to begin formatting "
|
|||
|
HRDDRV DB "x: $"
|
|||
|
SYSTRAN DB "System transferred",13,10,"$"
|
|||
|
MORMSG DB "Format another (Y/N)?$"
|
|||
|
CRLFMSG DB 13,10,"$"
|
|||
|
INVCHR DB "Invalid characters in volume label",13,10,"$"
|
|||
|
INVDRV DB "Invalid drive specification$"
|
|||
|
INVPAR DB "Invalid parameter$"
|
|||
|
TARGMSG DB "Re-insert diskette for drive "
|
|||
|
TARGDRV DB "x:",13,10,"and strike any key when ready$"
|
|||
|
SYSMSG DB "Insert DOS disk in drive "
|
|||
|
SYSDRV DB "x:",13,10,"and strike any key when ready$"
|
|||
|
FRMTERR DB "Format failure",13,10,13,10,"$"
|
|||
|
NOTSYS DB "Disk unsuitable for system disk",13,10,"$"
|
|||
|
NOUSE DB "Track 0 bad - disk unusable",13,10,"$"
|
|||
|
MEMEX DB "Insufficient memory for system transfer",13,10,"$"
|
|||
|
|
|||
|
;Report messages
|
|||
|
DSKSPC DB " bytes total disk space",13,10,"$"
|
|||
|
SYSSPC DB " bytes used by system",13,10,"$"
|
|||
|
BADSPC DB " bytes in bad sectors",13,10,"$"
|
|||
|
DATASPC DB " bytes available on disk",13,10,13,10,"$"
|
|||
|
|
|||
|
IF IBMVER
|
|||
|
PUBLIC ASGERR
|
|||
|
ASGERR DB "Cannot format an ASSIGNed drive. $"
|
|||
|
ENDIF
|
|||
|
|
|||
|
LABPRMT DB "Volume label (11 characters, ENTER for none)? $"
|
|||
|
|
|||
|
|
|||
|
CODE ENDS
|
|||
|
END
|
|||
|
|