home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / dos / bdisk / fff.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-12-05  |  3.0 KB  |  103 lines

  1. /*
  2.  Fast Floppy Format
  3.  
  4.  This program uses the BDISK library routines to perform a format of a
  5.  5 1/4" 360K floppy diskette.  The file BDISK.H is necessary for assembly,
  6.  and the file BDISK.LIB is necessary for linking.
  7. */
  8.  
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <conio.h>
  12. #include <dos.h>
  13. #include <bdisk.h>
  14.  
  15. #define FALSE 0
  16. #define TRUE 1
  17.  
  18. /* break handler */
  19.  
  20. int cbreak (void)
  21. {
  22.   resbase();            /* restore original disk base pointer */
  23.   return (0);           /* exit to DOS */
  24. }
  25.  
  26. /* main program */
  27.  
  28. main(int argc, char *argv[])
  29. {
  30.   unsigned drive, head, track, err;
  31.   char *secbuf, *c;
  32.   char *mess1 = "\nFast Floppy Format, C - Version 1.0, by Eric Tauck\n",
  33.        *mess2 = "\nUsage: FFF <drive>\n",
  34.        *mess3 = "\nAbout to format diskette in drive A:\n"
  35.                 "Press any key to begin\n",
  36.        *mess4 = "\nError: Illegal drive specifier\n",
  37.        *mess5 = "\nError: Could not format disk\n";
  38.  
  39.   printf (mess1);
  40.  
  41.   if (argc <= 1) {              /* check if no arguments */
  42.     printf (mess2);             /* show usage */
  43.     exit (-1); }                /* exit */
  44.  
  45.   drive = *argv[1];             /* get the drive letter */
  46.   drive |= 'a'-'A';             /* make upper case */
  47.   drive -= 'a';                 /* convert to letter */
  48.   if (drive >= 26) {            /* check range */
  49.     printf (mess4);             /* show usage */
  50.     exit (-1); }                /* exit */
  51.  
  52.   *(mess3 + 35) += drive;       /* set drive letter */
  53.   printf (mess3);               /* display message */
  54.   getch();                      /* wait for key */
  55.  
  56.   ctrlbrk (cbreak);             /* set break handler */
  57.   setbase (9, 512);             /* set disk base */
  58.  
  59.   /* format disk */
  60.  
  61.   err = FALSE;
  62.   for (track = 0; (track < 40) && !err; track++)        /* tracks */
  63.     for (head = 0; (head < 2) && !err; head++)          /* heads */
  64.       err = trkfrm (drive, head, track, 9, 512);        /* format */
  65.  
  66.   if (!err) {
  67.  
  68.     /* boot sector */
  69.  
  70.     secwrt (drive, 0, 0, 1, 1, &BOOTSEC);       /* write sector */
  71.  
  72.     /* file allocation tables */
  73.  
  74.     secbuf = (char *) calloc (9, 512);  /* allocate sector buffer */
  75.     c = &BOOTSEC;
  76.     secbuf[0] = c[21];                  /* set first byte of FAT */
  77.     secbuf[1] = 0xff;
  78.     secbuf[2] = 0xff;                           /* second two bytes */
  79.     secwrt (drive, 0, 0, 2, 2, secbuf);         /* write first FAT */
  80.     secwrt (drive, 0, 0, 4, 2, secbuf);         /* write second FAT */
  81.  
  82.     /* directories */
  83.  
  84.     secbuf[0] = 0;
  85.     secbuf[1] = 0;
  86.     secbuf[2] = 0;                              /* clear buffer bytes */
  87.     secwrt (drive, 0, 0, 6, 4, secbuf);         /* dir sec on side 0 */
  88.     secwrt (drive, 1, 0, 1, 3, secbuf);         /* dir sec on side 1 */
  89.  
  90.     /* finished */
  91.  
  92.     resbase (); }               /* restore disk base */
  93.  
  94.   else {
  95.  
  96.     /* error formatting */
  97.  
  98.     printf (mess5);             /* show usage */
  99.     resbase ();                 /* restore disk base */
  100.     exit (-1); }                /* exit */
  101. }
  102. 
  103.