home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
- TITLE Clear Disk File Allocation Table, Version 1.00, 04-Mar-1987
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
-
- ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
-
- ORG 5CH
-
- FCB LABEL BYTE
-
- ORG 100H
-
- START: JMP BEGIN
-
- SIGNON DB "Clear Disk File Allocation Table Program, Version 1.00",13,10
- DB "SMG Software",13,10
- DB "(C) Copyright 1987 Steven Georgiades",13,10,10,"$"
-
- WARNING DB "ALL of the files on drive x: WILL be corrupted!!",7,7,13,10
- DB "Proceed ONLY if your disk is already corrupted and",13,10
- DB "you wish to make one last attempt to recover your data.",13,10
- DB "For more information, refer to CLEARFAT.DOC.",13,10,10
- DRV_PTR DB "ALL of the files on drive x: WILL be corrupted!!",7,7,13,10
- DB "Do you wish to continue?",7,7," (Y/N) $"
-
- SURE DB 13,10,"Are you SURE?",7,7," (Y/N) $"
-
- ABRT_MSG DB 13,10,"Aborted!",7,13,10,"$"
- DONE_MSG DB 13,10,10,"The FAT for drive x: has been cleared!",7,13,10,"$"
- ERR_DRV DB "Invalid Drive Letter!",7,13,10,"$"
- ERR_RD DB "Error Reading Boot Record!",7,13,10,"$"
- FDSK_MSG DB "I REFUSE to Clear the FAT of a Fixed Disk!",7,13,10,"$"
-
- DRIVE DB ?
- FATCNT DW ?
- FATSEC DW ?
- MEDIA DB ?
- SECSIZE DW ?
- YBUF DB 2,?,?,?
-
- BEGIN: PUSH AX ; Save Drive Validity Info
- MOV AH,9 ; Output Sign-On Message
- MOV DX,OFFSET SIGNON
- INT 21H
- POP AX ; Restore Drive Validity Info
- CMP AL,0 ; If Invalid,
- JE DRV_OK
- MOV DX,OFFSET ERR_DRV ; Setup Pointer to Error Msg
- ERR_OUT: MOV AH,9 ; Output Error Message
- INT 21H
- MOV AX,4C01H ; Exit to DOS (Return = 1)
- INT 21H
- DRV_OK: MOV AL,FCB[0] ; Read Drive Number
- DEC AL
- JNS NOT_DEF ; If Default,
- MOV AH,19H ; Get Default Drive Number
- INT 21H
- NOT_DEF: MOV DRIVE,AL ; Convert Drive Number to Letter
- ADD AL,'A'
- MOV WARNING[26],AL ; Save in Four (4) Places
- MOV DRV_PTR[26],AL
- MOV DONE_MSG[21],AL
- MOV BX,OFFSET FATBUF
- MOV AL,DRIVE ; Read Disk Boot Record
- MOV CX,1
- MOV DX,0
- INT 25H
- JNC RD_OK
- POPF
- MOV DX,OFFSET ERR_RD
- JMP ERR_OUT
- RD_OK: POPF
- CMP FATBUF[19],5000
- JB NOT_HARD
- MOV DX,OFFSET FDSK_MSG
- JMP SHORT ERR_OUT
- NOT_HARD: MOV AX,FATBUF[11] ; Save Sector Size
- MOV SECSIZE,AX
- MOV AL,BYTE PTR FATBUF[16] ; Save FAT Count
- XOR AH,AH
- MOV FATCNT,AX
- MOV AL,BYTE PTR FATBUF[21] ; Save Media Descriptor Byte
- MOV MEDIA,AL
- MOV BX,FATBUF[22] ; Save Sectors per FAT
- MOV FATSEC,BX
- PUSH CS ; Point to FAT Buffer
- POP ES
- MOV DI,OFFSET FATBUF
- MOV BX,FATSEC ; Outer Loop LCV = FATSEC
- MOV CX,SECSIZE ; Inner Loop LCV = SECSIZE
- MOV AL,MEDIA ; Setup Blank FAT
- STOSB
- DEC CX
- MOV AL,0FFH
- STOSB
- DEC CX
- STOSB
- DEC CX
- XOR AL,AL
- FATLOOP: REP STOSB
- MOV CX,SECSIZE
- DEC BX
- JNZ FATLOOP
- MOV AH,9 ; Output Warning Message
- MOV DX,OFFSET WARNING
- INT 21H
- CALL YESNO ; Continue?
- JC ABORT ; No, Abort
- MOV AH,9 ; Warn Again
- MOV DX,OFFSET SURE
- INT 21H
- CALL YESNO ; Continue?
- JC ABORT ; No, Abort
- MOV CX,FATCNT ; Write FAT(s) to Disk
- MOV DX,1
- WR_LOOP: PUSH CX
- PUSH DX
- MOV AL,DRIVE ; Write FAT #1
- MOV CX,FATSEC
- MOV DX,1
- MOV BX,OFFSET FATBUF
- INT 26H
- POPF
- POP DX
- POP CX
- ADD DX,FATSEC
- LOOP WR_LOOP
- MOV AH,9 ; Output DONE Message
- MOV DX,OFFSET DONE_MSG
- INT 21H
- MOV AX,4C00H ; Exit to DOS
- INT 21H
- ABORT: MOV AH,9 ; Output ABORT Message
- MOV DX,OFFSET ABRT_MSG
- INT 21H
- MOV AX,4C02H ; Exit to DOS
- INT 21H
-
- YESNO: MOV AX,0C0AH ; Read from Keyboard
- MOV DX,OFFSET YBUF
- INT 21H
- CMP YBUF[1],1 ; If No Response, Error
- JNE YESNO1
- MOV AL,YBUF[2] ; Read Character
- AND AL,0DFH ; Convert to Upper Case
- CMP AL,'Y' ; If 'Y', Done
- JE YESNO2
- YESNO1: STC ; Set Carry Flag
- YESNO2: RET ; Done
-
- FATBUF LABEL WORD
-
- CODE ENDS
-
- END START
-