mirror of
https://github.com/microsoft/MS-DOS.git
synced 2024-11-29 17:15:47 +00:00
477 lines
14 KiB
NASM
477 lines
14 KiB
NASM
TITLE CHKDSK Messages
|
||
|
||
FALSE EQU 0
|
||
TRUE EQU NOT FALSE
|
||
|
||
.xlist
|
||
.xcref
|
||
INCLUDE DOSSYM.ASM
|
||
;The DOST: prefix is a DEC TOPS/20 directory prefix. Remove it for
|
||
; assembly in MS-DOS assembly environments using MASM. The DOSSYM.ASM
|
||
; file must exist though, it is included with OEM distribution.
|
||
.cref
|
||
.list
|
||
CODE SEGMENT PUBLIC BYTE
|
||
CODE ENDS
|
||
|
||
CONST SEGMENT PUBLIC BYTE
|
||
EXTRN HIDSIZ:WORD,HIDCNT:WORD,DIRCNT:WORD,DIRSIZ:WORD,FILCNT:WORD
|
||
EXTRN FILSIZ:WORD,ORPHCNT:WORD,ORPHSIZ:WORD,BADSIZ:WORD,LCLUS:WORD
|
||
EXTRN DOFIX:BYTE
|
||
CONST ENDS
|
||
|
||
DATA SEGMENT PUBLIC BYTE
|
||
EXTRN DSIZE:WORD
|
||
DATA ENDS
|
||
|
||
DG GROUP CODE,CONST,DATA
|
||
|
||
|
||
CODE SEGMENT PUBLIC BYTE
|
||
ASSUME CS:DG,DS:DG,ES:DG,SS:DG
|
||
|
||
PUBLIC RDSKERR,WDSKERR,SETSWITCH,PROMPTYN,DOINT26,CHAINREPORT,REPORT
|
||
EXTRN RDONE:NEAR,PRTCHR:NEAR,PRINT:NEAR,DOCRLF:NEAR
|
||
EXTRN DISP16BITS:NEAR,FINDCHAIN:NEAR
|
||
EXTRN DISP32BITS:NEAR,DISPCLUS:NEAR
|
||
|
||
DOINT26:
|
||
PUSH CX
|
||
PUSH AX
|
||
PUSH DX
|
||
PUSH BX
|
||
INT 26H
|
||
MOV [HECODE],AL
|
||
POP AX ;FLAGS
|
||
POP BX
|
||
POP DX
|
||
POP AX
|
||
POP CX
|
||
JNC RET23
|
||
MOV SI,OFFSET DG:WRITING
|
||
CALL DSKERR
|
||
JZ DOINT26
|
||
RET23: RET
|
||
|
||
RDSKERR:
|
||
MOV SI,OFFSET DG:READING
|
||
JMP SHORT DSKERR
|
||
|
||
WDSKERR:
|
||
MOV SI,OFFSET DG:WRITING
|
||
DSKERR:
|
||
PUSH AX
|
||
PUSH BX
|
||
PUSH CX
|
||
PUSH DX
|
||
PUSH DI
|
||
PUSH ES
|
||
MOV AL,[HECODE]
|
||
CMP AL,12
|
||
JBE HAVCOD
|
||
MOV AL,12
|
||
HAVCOD:
|
||
XOR AH,AH
|
||
MOV DI,AX
|
||
SHL DI,1
|
||
MOV DX,WORD PTR [DI+MESBAS] ; Get pointer to error message
|
||
CALL PRINT ; Print error type
|
||
MOV DX,OFFSET DG:ERRMES
|
||
CALL PRINT
|
||
MOV DX,SI
|
||
CALL PRINT
|
||
MOV DX,OFFSET DG:DRVMES
|
||
CALL PRINT
|
||
ASK:
|
||
MOV DX,OFFSET DG:REQUEST
|
||
CALL PRINT
|
||
MOV AX,(STD_CON_INPUT_FLUSH SHL 8)+STD_CON_INPUT
|
||
INT 21H ; Get response
|
||
PUSH AX
|
||
CALL DOCRLF
|
||
POP AX
|
||
OR AL,20H ; Convert to lower case
|
||
CMP AL,"i" ; Ignore?
|
||
JZ EEXITNZ
|
||
CMP AL,"r" ; Retry?
|
||
JZ EEXIT
|
||
CMP AL,"a" ; Abort?
|
||
JNZ ASK
|
||
JMP RDONE
|
||
|
||
EEXITNZ:
|
||
OR AL,AL ; Resets zero flag
|
||
EEXIT:
|
||
POP ES
|
||
POP DI
|
||
POP DX
|
||
POP CX
|
||
POP BX
|
||
POP AX
|
||
RET
|
||
|
||
PROMPTYN:
|
||
;Prompt message in DX
|
||
;Prompt user for Y or N answer. Zero set if Y
|
||
PUSH SI
|
||
CALL PRINT
|
||
PAGAIN:
|
||
MOV DX,OFFSET DG:YES_NO
|
||
CALL PRINT
|
||
MOV DX,OFFSET DG:CONBUF
|
||
MOV AH,STD_CON_STRING_INPUT
|
||
INT 21H
|
||
CALL DOCRLF
|
||
MOV SI,OFFSET DG:CONBUF+2
|
||
CMP BYTE PTR [SI-1],0
|
||
JZ PAGAIN
|
||
LODSB
|
||
OR AL,20H ;Convert to lower case
|
||
CMP AL,'y'
|
||
JZ GOTANS
|
||
CMP AL,'n'
|
||
JZ GOTNANS
|
||
JMP PAGAIN
|
||
GOTNANS:
|
||
OR AL,AL ;Reset zero
|
||
GOTANS:
|
||
POP SI
|
||
RET
|
||
|
||
SETSWITCH:
|
||
;Look for F or V switch in command line
|
||
MOV SI,80H
|
||
LODSB
|
||
MOV DI,SI
|
||
MOV CL,AL
|
||
XOR CH,CH
|
||
JCXZ RET10 ;No parameters
|
||
MOV AL,[SWITCHAR]
|
||
MORESCAN:
|
||
REPNZ SCASB
|
||
JNZ RET10
|
||
JCXZ BADSWITCHA
|
||
MOV AH,[DI]
|
||
INC DI
|
||
OR AH,20H ;Convert to lower case
|
||
CMP AH,'f'
|
||
JNZ CHECKV
|
||
INC [DOFIX]
|
||
JMP SHORT CHEKMORE
|
||
CHECKV:
|
||
CMP AH,'v'
|
||
JZ SETNOISY
|
||
CALL BADSWITCH
|
||
JMP SHORT CHEKMORE
|
||
SETNOISY:
|
||
INC [NOISY]
|
||
CHEKMORE:
|
||
LOOP MORESCAN
|
||
RET
|
||
|
||
BADSWITCHA:
|
||
MOV AH,' ' ;Print a non switch
|
||
BADSWITCH:
|
||
PUSH AX
|
||
MOV DL,[SWITCHAR]
|
||
CALL PRTCHR
|
||
POP AX
|
||
PUSH AX
|
||
MOV DL,AH
|
||
CALL PRTCHR
|
||
MOV DX,OFFSET DG:BADSWMES
|
||
CALL PRINT
|
||
POP AX
|
||
RET10: RET
|
||
|
||
|
||
;**************************************
|
||
; Prints XXX lost clusters found in YYY chains message
|
||
; On entry SI is the XXX value and the YYY value is
|
||
; in ORPHCNT.
|
||
; NOTE:
|
||
; The DISP16BITS 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 first number, point at the
|
||
; message with DX and call PRINT.
|
||
|
||
CHAINREPORT:
|
||
XOR DI,DI
|
||
MOV BX,OFFSET DG:ORPHMES2
|
||
CALL DISP16BITS
|
||
CALL FINDCHAIN
|
||
MOV BX,OFFSET DG:CHNUMMES
|
||
MOV SI,[ORPHCNT]
|
||
XOR DI,DI
|
||
CALL DISP16BITS ;Tell user how many chains found
|
||
RET
|
||
|
||
;*****************************************
|
||
;Prints all of the reporting data
|
||
;NOTE:
|
||
; The DISPCLUS, DISP16BITS and DISP32BITS routines
|
||
; print the number in DI:SI followed
|
||
; by the message pointed to by BX. If it is desired to
|
||
; print a message before the first number, point at the
|
||
; message with DX and call PRINT.
|
||
|
||
REPORT:
|
||
MOV AX,[DSIZE]
|
||
MOV BX,OFFSET DG:DSKSPC
|
||
CALL DISPCLUS ;Total size
|
||
CMP [HIDCNT],0
|
||
JZ USERLIN
|
||
MOV AX,[HIDSIZ] ;Hidden files
|
||
MOV BX,OFFSET DG:INMES
|
||
CALL DISPCLUS
|
||
MOV SI,[HIDCNT]
|
||
XOR DI,DI
|
||
MOV BX,OFFSET DG:HIDMES
|
||
CALL DISP16BITS
|
||
USERLIN:
|
||
CMP [DIRCNT],0
|
||
JZ DIRLIN
|
||
MOV AX,[DIRSIZ]
|
||
MOV BX,OFFSET DG:INMES
|
||
CALL DISPCLUS
|
||
MOV SI,[DIRCNT]
|
||
XOR DI,DI
|
||
MOV BX,OFFSET DG:DIRMES
|
||
CALL DISP16BITS
|
||
DIRLIN:
|
||
CMP [FILCNT],0
|
||
JZ ORPHLIN
|
||
MOV AX,[FILSIZ] ;Regular files
|
||
MOV BX,OFFSET DG:INMES
|
||
CALL DISPCLUS
|
||
MOV SI,[FILCNT]
|
||
XOR DI,DI
|
||
MOV BX,OFFSET DG:FILEMES
|
||
CALL DISP16BITS
|
||
ORPHLIN:
|
||
MOV AX,[ORPHSIZ]
|
||
OR AX,AX
|
||
JZ BADLIN
|
||
MOV BX,OFFSET DG:INMES ;Orphans
|
||
CMP [DOFIX],0
|
||
JNZ ALLSET1
|
||
MOV BX,OFFSET DG:INMES2 ;Orphans
|
||
ALLSET1:
|
||
CALL DISPCLUS
|
||
MOV SI,[ORPHCNT]
|
||
XOR DI,DI
|
||
MOV BX,OFFSET DG:ORPHMES
|
||
CALL DISP16BITS
|
||
BADLIN:
|
||
MOV AX,[BADSIZ]
|
||
OR AX,AX
|
||
JZ AVAILIN
|
||
MOV BX,OFFSET DG:BADSPC ;Bad sectors
|
||
CALL DISPCLUS
|
||
AVAILIN:
|
||
MOV AX,[DSIZE]
|
||
SUB AX,[DIRSIZ]
|
||
SUB AX,[FILSIZ]
|
||
SUB AX,[HIDSIZ]
|
||
SUB AX,[BADSIZ]
|
||
SUB AX,[ORPHSIZ]
|
||
SUB AX,[LCLUS]
|
||
MOV BX,OFFSET DG:FRESPC
|
||
CALL DISPCLUS ;Free space is whats left
|
||
MOV AX,DS:WORD PTR [2] ;Find out about memory
|
||
MOV DX,16
|
||
MUL DX
|
||
MOV SI,AX
|
||
MOV DI,DX
|
||
MOV BX,OFFSET DG:TOTMEM
|
||
CALL DISP32BITS
|
||
MOV AX,DS:WORD PTR [2]
|
||
MOV DX,CS
|
||
SUB AX,DX
|
||
MOV DX,16
|
||
MUL DX
|
||
MOV SI,AX
|
||
MOV DI,DX
|
||
MOV BX,OFFSET DG:FREMEM
|
||
CALL DISP32BITS
|
||
RET
|
||
|
||
CODE ENDS
|
||
|
||
|
||
CONST SEGMENT PUBLIC BYTE
|
||
|
||
EXTRN HECODE:BYTE,SWITCHAR:BYTE,NOISY:BYTE,DOFIX:BYTE,CONBUF:BYTE
|
||
|
||
PUBLIC CRLF2,CRLF,BADVER,BADDRV
|
||
PUBLIC BADSUBDIR,CENTRY,CLUSBAD,BADATT,BADSIZM
|
||
PUBLIC FIXMES,DIRECMES,CDDDMES
|
||
PUBLIC FREEBYMESF_PRE,FREEBYMES_PRE,FREEBYMESF_POST,FREEBYMES_POST
|
||
PUBLIC CREATMES,NDOTMES
|
||
PUBLIC BADTARG1,BADTARG2,BADCD,FATALMES,BADRDMES
|
||
PUBLIC BADDRVM,STACKMES,BADDPBDIR
|
||
PUBLIC BADDRVM2
|
||
PUBLIC NULNZ,NULDMES,BADCLUS,NORECDOT
|
||
PUBLIC NORECDDOT,IDMES1,IDPOST,VNAME,TCHAR
|
||
PUBLIC MONTAB,BADREAD_PRE,BADREAD_POST,BADWRITE_PRE
|
||
PUBLIC BADWRITE_POST,BADCHAIN,CROSSMES_PRE,CROSSMES_POST
|
||
PUBLIC FREEMES
|
||
PUBLIC OPNERR
|
||
PUBLIC CONTAINS,EXTENTS,NOEXTENTS,INDENT
|
||
PUBLIC BADIDBYT,PTRANDIR,PTRANDIR2
|
||
|
||
|
||
MESBAS DW OFFSET DG:ERR0
|
||
DW OFFSET DG:ERR1
|
||
DW OFFSET DG:ERR2
|
||
DW OFFSET DG:ERR3
|
||
DW OFFSET DG:ERR4
|
||
DW OFFSET DG:ERR5
|
||
DW OFFSET DG:ERR6
|
||
DW OFFSET DG:ERR7
|
||
DW OFFSET DG:ERR8
|
||
DW OFFSET DG:ERR9
|
||
DW OFFSET DG:ERR10
|
||
DW OFFSET DG:ERR11
|
||
DW OFFSET DG:ERR12
|
||
|
||
CRLF2 DB 13,10
|
||
CRLF DB 13,10,"$"
|
||
|
||
;Messages
|
||
|
||
BADVER DB "Incorrect DOS version",13,10,"$"
|
||
BADDRV DB "Invalid drive specification$"
|
||
|
||
BADSWMES DB " Invalid parameter",13,10,"$"
|
||
|
||
BADSUBDIR DB " Invalid sub-directory entry.",13,10,"$"
|
||
CENTRY DB " Entry has a bad $"
|
||
CLUSBAD DB " link$"
|
||
BADATT DB " attribute$"
|
||
BADSIZM DB " size$"
|
||
|
||
;"BADTARG1<name of dir followed by CR LF>BADTARG2"
|
||
BADTARG1 DB "Cannot CHDIR to $"
|
||
BADTARG2 DB " tree past this point not processed.",13,10,"$"
|
||
|
||
BADCD DB "Cannot CHDIR to root",13,10,"$"
|
||
|
||
FATALMES DB "Processing cannot continue.",13,10,"$"
|
||
BADRDMES DB "File allocation table bad drive "
|
||
BADDRVM DB "A.",13,10,"$"
|
||
STACKMES DB "Insufficient memory.",13,10,"$"
|
||
BADDPBDIR DB "Invalid current directory.",13,10,"$"
|
||
|
||
;INT 24 MESSAGE SHOULD AGREE WITH COMMAND
|
||
|
||
READING DB "read$"
|
||
WRITING DB "writ$"
|
||
ERRMES DB " error $"
|
||
DRVMES DB "ing drive "
|
||
BADDRVM2 DB "A",13,10,"$"
|
||
REQUEST DB "Abort, Retry, Ignore? $"
|
||
ERR0 DB "Write protect$"
|
||
ERR1 DB "Bad unit$"
|
||
ERR2 DB "Not ready$"
|
||
ERR3 DB "Bad command$"
|
||
ERR4 DB "Data$"
|
||
ERR5 DB "Bad call format$"
|
||
ERR6 DB "Seek$"
|
||
ERR7 DB "Non-DOS disk$"
|
||
ERR8 DB "Sector not found$"
|
||
ERR9 DB "No paper$"
|
||
ERR10 DB "Write fault$"
|
||
ERR11 DB "Read fault$"
|
||
ERR12 DB "Disk$"
|
||
|
||
|
||
NDOTMES DB " Does not exist.",13,10,"$"
|
||
NULNZ DB " First cluster number is invalid,",13,10
|
||
DB " entry truncated.",13,10,"$"
|
||
NULDMES DB " Directory is totally empty, no . or ..",13,10,"$"
|
||
BADCLUS DB " Allocation error, size adjusted.",13,10,"$"
|
||
NORECDOT DB " Cannot recover . entry, processing continued.",13,10,"$"
|
||
NORECDDOT DB " Cannot recover .. entry,"
|
||
|
||
;VOLUME ID
|
||
|
||
;"IDMES1/name at VNAME<date and time>IDPOST"
|
||
IDPOST DB 13,10,"$" ;WARNING this is currently the tail of
|
||
; the previos message!!!
|
||
IDMES1 DB "Volume "
|
||
VNAME DB 12 DUP(' ')
|
||
DB "created $"
|
||
TCHAR DB 'a'
|
||
MONTAB DB "JanFebMarAprMayJunJulAugSepOctNovDec"
|
||
|
||
|
||
|
||
;"BADREAD_PRE<# of FAT>BADREAD_POST"
|
||
BADREAD_PRE DB "Disk error reading FAT $"
|
||
|
||
;"BADWRITE_PRE<# of FAT>BADWRITE_POST"
|
||
BADWRITE_PRE DB "Disk error writing FAT $"
|
||
|
||
BADCHAIN DB " Has invalid cluster, file truncated."
|
||
|
||
BADREAD_POST LABEL BYTE
|
||
BADWRITE_POST LABEL BYTE
|
||
|
||
;"<name of file followed by CR LF>CROSSMES_PRE<# of cluster>CROSSMES_POST"
|
||
CROSSMES_POST DB 13,10,"$" ;WARNING Is tail of previos messages
|
||
CROSSMES_PRE DB " Is cross linked on cluster $"
|
||
|
||
;CHAINREPORT messages
|
||
ORPHMES2 DB " lost clusters found in $"
|
||
CHNUMMES DB " chains.",13,10,"$"
|
||
|
||
FREEMES DB "Convert lost chains to files $"
|
||
|
||
;REPORT messages
|
||
ORPHMES DB " recovered files",13,10,"$"
|
||
DSKSPC DB " bytes total disk space",13,10,"$"
|
||
INMES DB " bytes in $"
|
||
INMES2 DB " bytes would be in",13,10
|
||
DB " $"
|
||
FILEMES DB " user files",13,10,"$"
|
||
BADSPC DB " bytes in bad sectors",13,10,"$"
|
||
HIDMES DB " hidden files",13,10,"$"
|
||
DIRMES DB " directories",13,10,"$"
|
||
FRESPC DB " bytes available on disk",13,10,13,10,"$"
|
||
TOTMEM DB " bytes total memory",13,10,"$"
|
||
FREMEM DB " bytes free",13,10,13,10,"$"
|
||
|
||
;"<filename followed by CR LF>CONTAINS<# non-contig blocks>EXTENTS"
|
||
CONTAINS DB " Contains $"
|
||
EXTENTS DB " non-contiguous blocks.",13,10,"$"
|
||
|
||
NOEXTENTS DB "All specified file(s) are contiguous.",13,10,"$"
|
||
INDENT DB " $"
|
||
|
||
BADIDBYT DB "Probable non-DOS disk."
|
||
DB 13,10,"Continue $"
|
||
YES_NO DB "(Y/N)? $"
|
||
PTRANDIR DB " Unrecoverable error in directory.",13,10
|
||
PTRANDIR2 DB " Convert directory to file $"
|
||
FIXMES DB 13,10,"Errors found, F parameter not specified."
|
||
DB 13,10,"Corrections will not be written to disk.",13,10,13,10,"$"
|
||
DIRECMES DB "Directory $"
|
||
CDDDMES DB " CHDIR .. failed, trying alternate method.",13,10,"$"
|
||
|
||
|
||
FREEBYMESF_POST DB " bytes disk space freed.",13,10
|
||
FREEBYMESF_PRE DB "$"
|
||
FREEBYMES_POST DB " bytes disk space",13,10
|
||
DB " would be freed.",13,10
|
||
FREEBYMES_PRE DB "$"
|
||
|
||
|
||
CREATMES DB "Insufficient room in root directory."
|
||
DB 13,10,"Erase files in root and repeat CHKDSK.",13,10,"$"
|
||
OPNERR DB " File not found.",13,10,"$"
|
||
|
||
|
||
CONST ENDS
|
||
END
|
||
|