home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / mslang / cp1 / wp1.c! < prev   
Text File  |  1993-03-31  |  3KB  |  85 lines

  1. ===========================================================================
  2.  BBS: The Abacus * HST/DS * Potterville MI
  3. Date: 03-29-93 (20:48)             Number: 75
  4. From: MARK CORGAN                  Refer#: 189
  5.   To: DALE DAVIS                    Recvd: NO  
  6. Subj: Write Protected Disks          Conf: (36) C Language
  7. ---------------------------------------------------------------------------
  8. Hello Dale!
  9.  
  10. 25 Mar 93, Dale Davis writes to All:
  11.  
  12.  DD> Does anyone have any clues as to how I can check a disk to determine if it
  13.  DD> is write protected before I write to it.  I'm writing a DOS program, and
  14.  DD> I've tried a couple different things, but I keep crashing the program and
  15.  DD> getting the DOS write-proteced disk error.  I know the answer is probobly
  16.  DD> real obvious and located on page 1 of every C book I own, but if anyone
  17.  DD> out there is really bored and can clue me in, I'd really appreciate it!
  18.  
  19. Try out this code. It is for drive A: but you should be able to follow it enough
  20.  to test for drive C:.
  21.  
  22.  
  23. #include <stdio.h>
  24. #include <dos.h>
  25. #include <stdlib.h>
  26.  
  27. #define RETURN_OK               0
  28. #define RETURN_WRITE_PROTECT    1
  29. #define RETURN_OTHER            2
  30.  
  31. char far buffer[10000];
  32. char far *pbuf = buffer;
  33.  
  34. void main(void)
  35. {
  36.     union REGS      inregs, outregs;
  37.     struct SREGS    segregs;
  38.     int             retries = 0;
  39.     int             rc = RETURN_OK;
  40.  
  41.     // Read logical sector 1
  42.     inregs.h.ah = 0x00;             // Just clear it out
  43.     inregs.h.al = 0x00;             // Disk drive A:
  44.     inregs.x.cx = 0x01;             // Number of sectors to read
  45.     inregs.x.dx = 0x01;             // Logical sector 1 (FAT)
  46.     inregs.x.bx = FP_OFF(pbuf);     // Offset of buffer
  47.     segregs.ds  = FP_SEG(pbuf);     // Segment address of buffer
  48.     int86x(0x25, &inregs, &outregs, &segregs);
  49.  
  50.     // If the carry flag is set, then there was an error
  51.     if (outregs.x.cflag) {
  52.         rc = RETURN_OTHER;
  53.     } else {
  54.  // Write logical sector 1
  55.  inregs.h.ah = 0x00;           // Just clear it out
  56.  inregs.h.al = 0x00;           // Disk drive A:
  57.  inregs.x.cx = 0x01;           // Number of sectors to write
  58.  inregs.x.dx = 0x01;           // Logical sector 1 (FAT)
  59.  inregs.x.bx = FP_OFF(pbuf);   // Offset of buffer
  60.  segregs.ds  = FP_SEG(pbuf);   // Segment address of buffer
  61.  int86x(0x26, &inregs, &outregs, &segregs);
  62.  
  63.  // If the carry flag is set, then there was an error
  64.  if (outregs.x.cflag) {
  65.      // If ah = 3 then there was a write protect error
  66.      if (outregs.h.ah == 3) {
  67.   rc = RETURN_WRITE_PROTECT;
  68.      } else {
  69.   rc = RETURN_OTHER;
  70.      }
  71.  }
  72.     }
  73.     exit(rc);
  74. }
  75.  
  76.  
  77.  
  78. Mark
  79.  
  80. --- GoldED 2.40
  81.  * Origin: -*- Sound and Image -*-  (1:213/810)
  82. SEEN-BY: 1/211 11/2 4 13/13 101/1 108/89 109/25 110/69 114/5 123/19 124/1
  83. SEEN-BY: 153/752 154/40 77 157/2 159/100 125 575 950 203/23 209/209 280/1
  84. SEEN-BY: 390/1 396/1 5 15 730/6 2270/1 3603/20
  85.