home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / dskutl / fix_disk.arc / FATSWAP.ASM < prev    next >
Assembly Source File  |  1987-03-04  |  4KB  |  96 lines

  1. PAGE ,132
  2. TITLE Copy Second Copy of FAT to First, Version 1.00, 04-Mar-1987
  3.  
  4. CODE      SEGMENT BYTE PUBLIC 'CODE'
  5.  
  6.           ASSUME  CS:CODE,DS:CODE
  7.  
  8.           ORG     5CH
  9.  
  10. FCB       LABEL   BYTE
  11.  
  12.           ORG     100H
  13.  
  14. START:    JMP     BEGIN
  15.  
  16. SIGNON    DB      "Copy Second Copy of FAT to First Program, Version 1.00",13,10
  17.           DB      "SMG Software",13,10
  18.           DB      "(C) Copyright 1987 Steven Georgiades",13,10,10,"$"
  19.  
  20. DONE_MSG  DB      "The FAT for drive x: has been recovered!",7,13,10,"$"
  21. ERR_DRV   DB      "Invalid Drive Letter!",7,13,10,"$"
  22. ERR_FAT   DB      "This disk has only one copy of the FAT!",7,13,10,"$"
  23. ERR_RD    DB      "Error Reading FAT!",7,13,10,"$"
  24. ERR_WR    DB      "Error Writing FAT!",7,13,10,"$"
  25.  
  26. DRIVE     DB      ?
  27. FATSEC    DW      ?
  28.  
  29. BEGIN:    PUSH    AX                            ; Save Drive Validity Info
  30.           MOV     AH,9                          ; Output Sign-On Message
  31.           MOV     DX,OFFSET SIGNON
  32.           INT     21H
  33.           POP     AX                            ; Restore Drive Validity Info
  34.           CMP     AL,0                          ; If Invalid,
  35.           JE      DRV_OK
  36.           MOV     DX,OFFSET ERR_DRV             ;   Setup Pointer to Error Msg
  37. ERR_OUT:  MOV     AH,9                          ;   Output Error Message
  38.           INT     21H
  39.           MOV     AX,4C01H                      ;   Exit to DOS (Return = 1)
  40.           INT     21H
  41. DRV_OK:   MOV     AL,FCB[0]                     ; Read Drive Number
  42.           DEC     AL
  43.           JNS     NOT_DEF                       ; If Default,
  44.           MOV     AH,19H                        ;   Get Default Drive Number
  45.           INT     21H
  46. NOT_DEF:  MOV     DRIVE,AL                      ; Convert Drive Number to Letter
  47.           ADD     AL,'A'
  48.           MOV     DONE_MSG[18],AL
  49.           MOV     AL,DRIVE                      ; Read Disk Boot Record
  50.           MOV     BX,OFFSET FATBUF
  51.           MOV     CX,1
  52.           MOV     DX,0
  53.           INT     25H
  54.           POPF
  55.           CMP     BYTE PTR FATBUF[16],2         ; If Less than 2 FAT's,
  56.           JAE     FAT_OK
  57.           MOV     DX,OFFSET ERR_FAT             ;   Error
  58.           JMP     SHORT ERR_OUT
  59. FAT_OK:   MOV     AX,FATBUF[22]                 ; Save FAT Sector Count
  60.           MOV     FATSEC,AX
  61.           MOV     DX,1                          ; Point to First FAT Sector
  62.           PUSH    DX
  63.           MOV     AL,DRIVE                      ; Read FAT Sector
  64.           MOV     BX,OFFSET FATBUF
  65.           MOV     CX,FATSEC
  66.           ADD     DX,CX
  67.           INT     25H
  68.           JNC     RD_OK                         ; If Error,
  69.           POPF
  70.           POP     DX
  71.           MOV     DX,OFFSET ERR_RD              ;   Output Error Message
  72.           JMP     SHORT ERR_OUT
  73. RD_OK:    POPF
  74.           POP     DX
  75.           MOV     AL,DRIVE                      ; Write FAT Sector
  76.           MOV     BX,OFFSET FATBUF
  77.           MOV     CX,FATSEC
  78.           INT     26H
  79.           JNC     WR_OK                         ; If Error,
  80.           POPF
  81.           POP     DX
  82.           MOV     DX,OFFSET ERR_WR              ;   Output Error Message
  83.           JMP     ERR_OUT
  84. WR_OK:    POP     DX
  85.           MOV     AH,9                          ; Output Done Message
  86.           MOV     DX,OFFSET DONE_MSG
  87.           INT     21H
  88.           MOV     AX,4C00H                      ; Exit to DOS
  89.           INT     21H
  90.  
  91. FATBUF    LABEL   WORD
  92.  
  93. CODE      ENDS
  94.  
  95.           END     START
  96.