]> wirehaze git hosting - MS-DOS.git/blob - v2.0/source/CHKMES.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v2.0 / source / CHKMES.ASM
1 TITLE CHKDSK Messages
2
3 FALSE EQU 0
4 TRUE EQU NOT FALSE
5
6 .xlist
7 .xcref
8 INCLUDE DOSSYM.ASM
9 ;The DOST: prefix is a DEC TOPS/20 directory prefix. Remove it for
10 ; assembly in MS-DOS assembly environments using MASM. The DOSSYM.ASM
11 ; file must exist though, it is included with OEM distribution.
12 .cref
13 .list
14 CODE SEGMENT PUBLIC BYTE
15 CODE ENDS
16
17 CONST SEGMENT PUBLIC BYTE
18 EXTRN HIDSIZ:WORD,HIDCNT:WORD,DIRCNT:WORD,DIRSIZ:WORD,FILCNT:WORD
19 EXTRN FILSIZ:WORD,ORPHCNT:WORD,ORPHSIZ:WORD,BADSIZ:WORD,LCLUS:WORD
20 EXTRN DOFIX:BYTE
21 CONST ENDS
22
23 DATA SEGMENT PUBLIC BYTE
24 EXTRN DSIZE:WORD
25 DATA ENDS
26
27 DG GROUP CODE,CONST,DATA
28
29
30 CODE SEGMENT PUBLIC BYTE
31 ASSUME CS:DG,DS:DG,ES:DG,SS:DG
32
33 PUBLIC RDSKERR,WDSKERR,SETSWITCH,PROMPTYN,DOINT26,CHAINREPORT,REPORT
34 EXTRN RDONE:NEAR,PRTCHR:NEAR,PRINT:NEAR,DOCRLF:NEAR
35 EXTRN DISP16BITS:NEAR,FINDCHAIN:NEAR
36 EXTRN DISP32BITS:NEAR,DISPCLUS:NEAR
37
38 DOINT26:
39 PUSH CX
40 PUSH AX
41 PUSH DX
42 PUSH BX
43 INT 26H
44 MOV [HECODE],AL
45 POP AX ;FLAGS
46 POP BX
47 POP DX
48 POP AX
49 POP CX
50 JNC RET23
51 MOV SI,OFFSET DG:WRITING
52 CALL DSKERR
53 JZ DOINT26
54 RET23: RET
55
56 RDSKERR:
57 MOV SI,OFFSET DG:READING
58 JMP SHORT DSKERR
59
60 WDSKERR:
61 MOV SI,OFFSET DG:WRITING
62 DSKERR:
63 PUSH AX
64 PUSH BX
65 PUSH CX
66 PUSH DX
67 PUSH DI
68 PUSH ES
69 MOV AL,[HECODE]
70 CMP AL,12
71 JBE HAVCOD
72 MOV AL,12
73 HAVCOD:
74 XOR AH,AH
75 MOV DI,AX
76 SHL DI,1
77 MOV DX,WORD PTR [DI+MESBAS] ; Get pointer to error message
78 CALL PRINT ; Print error type
79 MOV DX,OFFSET DG:ERRMES
80 CALL PRINT
81 MOV DX,SI
82 CALL PRINT
83 MOV DX,OFFSET DG:DRVMES
84 CALL PRINT
85 ASK:
86 MOV DX,OFFSET DG:REQUEST
87 CALL PRINT
88 MOV AX,(STD_CON_INPUT_FLUSH SHL 8)+STD_CON_INPUT
89 INT 21H ; Get response
90 PUSH AX
91 CALL DOCRLF
92 POP AX
93 OR AL,20H ; Convert to lower case
94 CMP AL,"i" ; Ignore?
95 JZ EEXITNZ
96 CMP AL,"r" ; Retry?
97 JZ EEXIT
98 CMP AL,"a" ; Abort?
99 JNZ ASK
100 JMP RDONE
101
102 EEXITNZ:
103 OR AL,AL ; Resets zero flag
104 EEXIT:
105 POP ES
106 POP DI
107 POP DX
108 POP CX
109 POP BX
110 POP AX
111 RET
112
113 PROMPTYN:
114 ;Prompt message in DX
115 ;Prompt user for Y or N answer. Zero set if Y
116 PUSH SI
117 CALL PRINT
118 PAGAIN:
119 MOV DX,OFFSET DG:YES_NO
120 CALL PRINT
121 MOV DX,OFFSET DG:CONBUF
122 MOV AH,STD_CON_STRING_INPUT
123 INT 21H
124 CALL DOCRLF
125 MOV SI,OFFSET DG:CONBUF+2
126 CMP BYTE PTR [SI-1],0
127 JZ PAGAIN
128 LODSB
129 OR AL,20H ;Convert to lower case
130 CMP AL,'y'
131 JZ GOTANS
132 CMP AL,'n'
133 JZ GOTNANS
134 JMP PAGAIN
135 GOTNANS:
136 OR AL,AL ;Reset zero
137 GOTANS:
138 POP SI
139 RET
140
141 SETSWITCH:
142 ;Look for F or V switch in command line
143 MOV SI,80H
144 LODSB
145 MOV DI,SI
146 MOV CL,AL
147 XOR CH,CH
148 JCXZ RET10 ;No parameters
149 MOV AL,[SWITCHAR]
150 MORESCAN:
151 REPNZ SCASB
152 JNZ RET10
153 JCXZ BADSWITCHA
154 MOV AH,[DI]
155 INC DI
156 OR AH,20H ;Convert to lower case
157 CMP AH,'f'
158 JNZ CHECKV
159 INC [DOFIX]
160 JMP SHORT CHEKMORE
161 CHECKV:
162 CMP AH,'v'
163 JZ SETNOISY
164 CALL BADSWITCH
165 JMP SHORT CHEKMORE
166 SETNOISY:
167 INC [NOISY]
168 CHEKMORE:
169 LOOP MORESCAN
170 RET
171
172 BADSWITCHA:
173 MOV AH,' ' ;Print a non switch
174 BADSWITCH:
175 PUSH AX
176 MOV DL,[SWITCHAR]
177 CALL PRTCHR
178 POP AX
179 PUSH AX
180 MOV DL,AH
181 CALL PRTCHR
182 MOV DX,OFFSET DG:BADSWMES
183 CALL PRINT
184 POP AX
185 RET10: RET
186
187
188 ;**************************************
189 ; Prints XXX lost clusters found in YYY chains message
190 ; On entry SI is the XXX value and the YYY value is
191 ; in ORPHCNT.
192 ; NOTE:
193 ; The DISP16BITS routine prints the number in DI:SI followed
194 ; by the message pointed to by BX. If it is desired to
195 ; print a message before the first number, point at the
196 ; message with DX and call PRINT.
197
198 CHAINREPORT:
199 XOR DI,DI
200 MOV BX,OFFSET DG:ORPHMES2
201 CALL DISP16BITS
202 CALL FINDCHAIN
203 MOV BX,OFFSET DG:CHNUMMES
204 MOV SI,[ORPHCNT]
205 XOR DI,DI
206 CALL DISP16BITS ;Tell user how many chains found
207 RET
208
209 ;*****************************************
210 ;Prints all of the reporting data
211 ;NOTE:
212 ; The DISPCLUS, DISP16BITS and DISP32BITS routines
213 ; print the number in DI:SI followed
214 ; by the message pointed to by BX. If it is desired to
215 ; print a message before the first number, point at the
216 ; message with DX and call PRINT.
217
218 REPORT:
219 MOV AX,[DSIZE]
220 MOV BX,OFFSET DG:DSKSPC
221 CALL DISPCLUS ;Total size
222 CMP [HIDCNT],0
223 JZ USERLIN
224 MOV AX,[HIDSIZ] ;Hidden files
225 MOV BX,OFFSET DG:INMES
226 CALL DISPCLUS
227 MOV SI,[HIDCNT]
228 XOR DI,DI
229 MOV BX,OFFSET DG:HIDMES
230 CALL DISP16BITS
231 USERLIN:
232 CMP [DIRCNT],0
233 JZ DIRLIN
234 MOV AX,[DIRSIZ]
235 MOV BX,OFFSET DG:INMES
236 CALL DISPCLUS
237 MOV SI,[DIRCNT]
238 XOR DI,DI
239 MOV BX,OFFSET DG:DIRMES
240 CALL DISP16BITS
241 DIRLIN:
242 CMP [FILCNT],0
243 JZ ORPHLIN
244 MOV AX,[FILSIZ] ;Regular files
245 MOV BX,OFFSET DG:INMES
246 CALL DISPCLUS
247 MOV SI,[FILCNT]
248 XOR DI,DI
249 MOV BX,OFFSET DG:FILEMES
250 CALL DISP16BITS
251 ORPHLIN:
252 MOV AX,[ORPHSIZ]
253 OR AX,AX
254 JZ BADLIN
255 MOV BX,OFFSET DG:INMES ;Orphans
256 CMP [DOFIX],0
257 JNZ ALLSET1
258 MOV BX,OFFSET DG:INMES2 ;Orphans
259 ALLSET1:
260 CALL DISPCLUS
261 MOV SI,[ORPHCNT]
262 XOR DI,DI
263 MOV BX,OFFSET DG:ORPHMES
264 CALL DISP16BITS
265 BADLIN:
266 MOV AX,[BADSIZ]
267 OR AX,AX
268 JZ AVAILIN
269 MOV BX,OFFSET DG:BADSPC ;Bad sectors
270 CALL DISPCLUS
271 AVAILIN:
272 MOV AX,[DSIZE]
273 SUB AX,[DIRSIZ]
274 SUB AX,[FILSIZ]
275 SUB AX,[HIDSIZ]
276 SUB AX,[BADSIZ]
277 SUB AX,[ORPHSIZ]
278 SUB AX,[LCLUS]
279 MOV BX,OFFSET DG:FRESPC
280 CALL DISPCLUS ;Free space is whats left
281 MOV AX,DS:WORD PTR [2] ;Find out about memory
282 MOV DX,16
283 MUL DX
284 MOV SI,AX
285 MOV DI,DX
286 MOV BX,OFFSET DG:TOTMEM
287 CALL DISP32BITS
288 MOV AX,DS:WORD PTR [2]
289 MOV DX,CS
290 SUB AX,DX
291 MOV DX,16
292 MUL DX
293 MOV SI,AX
294 MOV DI,DX
295 MOV BX,OFFSET DG:FREMEM
296 CALL DISP32BITS
297 RET
298
299 CODE ENDS
300
301
302 CONST SEGMENT PUBLIC BYTE
303
304 EXTRN HECODE:BYTE,SWITCHAR:BYTE,NOISY:BYTE,DOFIX:BYTE,CONBUF:BYTE
305
306 PUBLIC CRLF2,CRLF,BADVER,BADDRV
307 PUBLIC BADSUBDIR,CENTRY,CLUSBAD,BADATT,BADSIZM
308 PUBLIC FIXMES,DIRECMES,CDDDMES
309 PUBLIC FREEBYMESF_PRE,FREEBYMES_PRE,FREEBYMESF_POST,FREEBYMES_POST
310 PUBLIC CREATMES,NDOTMES
311 PUBLIC BADTARG1,BADTARG2,BADCD,FATALMES,BADRDMES
312 PUBLIC BADDRVM,STACKMES,BADDPBDIR
313 PUBLIC BADDRVM2
314 PUBLIC NULNZ,NULDMES,BADCLUS,NORECDOT
315 PUBLIC NORECDDOT,IDMES1,IDPOST,VNAME,TCHAR
316 PUBLIC MONTAB,BADREAD_PRE,BADREAD_POST,BADWRITE_PRE
317 PUBLIC BADWRITE_POST,BADCHAIN,CROSSMES_PRE,CROSSMES_POST
318 PUBLIC FREEMES
319 PUBLIC OPNERR
320 PUBLIC CONTAINS,EXTENTS,NOEXTENTS,INDENT
321 PUBLIC BADIDBYT,PTRANDIR,PTRANDIR2
322
323
324 MESBAS DW OFFSET DG:ERR0
325 DW OFFSET DG:ERR1
326 DW OFFSET DG:ERR2
327 DW OFFSET DG:ERR3
328 DW OFFSET DG:ERR4
329 DW OFFSET DG:ERR5
330 DW OFFSET DG:ERR6
331 DW OFFSET DG:ERR7
332 DW OFFSET DG:ERR8
333 DW OFFSET DG:ERR9
334 DW OFFSET DG:ERR10
335 DW OFFSET DG:ERR11
336 DW OFFSET DG:ERR12
337
338 CRLF2 DB 13,10
339 CRLF DB 13,10,"$"
340
341 ;Messages
342
343 BADVER DB "Incorrect DOS version",13,10,"$"
344 BADDRV DB "Invalid drive specification$"
345
346 BADSWMES DB " Invalid parameter",13,10,"$"
347
348 BADSUBDIR DB " Invalid sub-directory entry.",13,10,"$"
349 CENTRY DB " Entry has a bad $"
350 CLUSBAD DB " link$"
351 BADATT DB " attribute$"
352 BADSIZM DB " size$"
353
354 ;"BADTARG1<name of dir followed by CR LF>BADTARG2"
355 BADTARG1 DB "Cannot CHDIR to $"
356 BADTARG2 DB " tree past this point not processed.",13,10,"$"
357
358 BADCD DB "Cannot CHDIR to root",13,10,"$"
359
360 FATALMES DB "Processing cannot continue.",13,10,"$"
361 BADRDMES DB "File allocation table bad drive "
362 BADDRVM DB "A.",13,10,"$"
363 STACKMES DB "Insufficient memory.",13,10,"$"
364 BADDPBDIR DB "Invalid current directory.",13,10,"$"
365
366 ;INT 24 MESSAGE SHOULD AGREE WITH COMMAND
367
368 READING DB "read$"
369 WRITING DB "writ$"
370 ERRMES DB " error $"
371 DRVMES DB "ing drive "
372 BADDRVM2 DB "A",13,10,"$"
373 REQUEST DB "Abort, Retry, Ignore? $"
374 ERR0 DB "Write protect$"
375 ERR1 DB "Bad unit$"
376 ERR2 DB "Not ready$"
377 ERR3 DB "Bad command$"
378 ERR4 DB "Data$"
379 ERR5 DB "Bad call format$"
380 ERR6 DB "Seek$"
381 ERR7 DB "Non-DOS disk$"
382 ERR8 DB "Sector not found$"
383 ERR9 DB "No paper$"
384 ERR10 DB "Write fault$"
385 ERR11 DB "Read fault$"
386 ERR12 DB "Disk$"
387
388
389 NDOTMES DB " Does not exist.",13,10,"$"
390 NULNZ DB " First cluster number is invalid,",13,10
391 DB " entry truncated.",13,10,"$"
392 NULDMES DB " Directory is totally empty, no . or ..",13,10,"$"
393 BADCLUS DB " Allocation error, size adjusted.",13,10,"$"
394 NORECDOT DB " Cannot recover . entry, processing continued.",13,10,"$"
395 NORECDDOT DB " Cannot recover .. entry,"
396
397 ;VOLUME ID
398
399 ;"IDMES1/name at VNAME<date and time>IDPOST"
400 IDPOST DB 13,10,"$" ;WARNING this is currently the tail of
401 ; the previos message!!!
402 IDMES1 DB "Volume "
403 VNAME DB 12 DUP(' ')
404 DB "created $"
405 TCHAR DB 'a'
406 MONTAB DB "JanFebMarAprMayJunJulAugSepOctNovDec"
407
408
409
410 ;"BADREAD_PRE<# of FAT>BADREAD_POST"
411 BADREAD_PRE DB "Disk error reading FAT $"
412
413 ;"BADWRITE_PRE<# of FAT>BADWRITE_POST"
414 BADWRITE_PRE DB "Disk error writing FAT $"
415
416 BADCHAIN DB " Has invalid cluster, file truncated."
417
418 BADREAD_POST LABEL BYTE
419 BADWRITE_POST LABEL BYTE
420
421 ;"<name of file followed by CR LF>CROSSMES_PRE<# of cluster>CROSSMES_POST"
422 CROSSMES_POST DB 13,10,"$" ;WARNING Is tail of previos messages
423 CROSSMES_PRE DB " Is cross linked on cluster $"
424
425 ;CHAINREPORT messages
426 ORPHMES2 DB " lost clusters found in $"
427 CHNUMMES DB " chains.",13,10,"$"
428
429 FREEMES DB "Convert lost chains to files $"
430
431 ;REPORT messages
432 ORPHMES DB " recovered files",13,10,"$"
433 DSKSPC DB " bytes total disk space",13,10,"$"
434 INMES DB " bytes in $"
435 INMES2 DB " bytes would be in",13,10
436 DB " $"
437 FILEMES DB " user files",13,10,"$"
438 BADSPC DB " bytes in bad sectors",13,10,"$"
439 HIDMES DB " hidden files",13,10,"$"
440 DIRMES DB " directories",13,10,"$"
441 FRESPC DB " bytes available on disk",13,10,13,10,"$"
442 TOTMEM DB " bytes total memory",13,10,"$"
443 FREMEM DB " bytes free",13,10,13,10,"$"
444
445 ;"<filename followed by CR LF>CONTAINS<# non-contig blocks>EXTENTS"
446 CONTAINS DB " Contains $"
447 EXTENTS DB " non-contiguous blocks.",13,10,"$"
448
449 NOEXTENTS DB "All specified file(s) are contiguous.",13,10,"$"
450 INDENT DB " $"
451
452 BADIDBYT DB "Probable non-DOS disk."
453 DB 13,10,"Continue $"
454 YES_NO DB "(Y/N)? $"
455 PTRANDIR DB " Unrecoverable error in directory.",13,10
456 PTRANDIR2 DB " Convert directory to file $"
457 FIXMES DB 13,10,"Errors found, F parameter not specified."
458 DB 13,10,"Corrections will not be written to disk.",13,10,13,10,"$"
459 DIRECMES DB "Directory $"
460 CDDDMES DB " CHDIR .. failed, trying alternate method.",13,10,"$"
461
462
463 FREEBYMESF_POST DB " bytes disk space freed.",13,10
464 FREEBYMESF_PRE DB "$"
465 FREEBYMES_POST DB " bytes disk space",13,10
466 DB " would be freed.",13,10
467 FREEBYMES_PRE DB "$"
468
469
470 CREATMES DB "Insufficient room in root directory."
471 DB 13,10,"Erase files in root and repeat CHKDSK.",13,10,"$"
472 OPNERR DB " File not found.",13,10,"$"
473
474
475 CONST ENDS
476 END
477