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
����������������������������������������������������������������������