home *** CD-ROM | disk | FTP | other *** search
- /*
- Fast Floppy Format
-
- This program uses the BDISK library routines to perform a format of a
- 5 1/4" 360K floppy diskette. The file BDISK.H is necessary for assembly,
- and the file BDISK.LIB is necessary for linking.
- */
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <conio.h>
- #include <dos.h>
- #include <bdisk.h>
-
- #define FALSE 0
- #define TRUE 1
-
- /* break handler */
-
- int cbreak (void)
- {
- resbase(); /* restore original disk base pointer */
- return (0); /* exit to DOS */
- }
-
- /* main program */
-
- main(int argc, char *argv[])
- {
- unsigned drive, head, track, err;
- char *secbuf, *c;
- char *mess1 = "\nFast Floppy Format, C - Version 1.0, by Eric Tauck\n",
- *mess2 = "\nUsage: FFF <drive>\n",
- *mess3 = "\nAbout to format diskette in drive A:\n"
- "Press any key to begin\n",
- *mess4 = "\nError: Illegal drive specifier\n",
- *mess5 = "\nError: Could not format disk\n";
-
- printf (mess1);
-
- if (argc <= 1) { /* check if no arguments */
- printf (mess2); /* show usage */
- exit (-1); } /* exit */
-
- drive = *argv[1]; /* get the drive letter */
- drive |= 'a'-'A'; /* make upper case */
- drive -= 'a'; /* convert to letter */
- if (drive >= 26) { /* check range */
- printf (mess4); /* show usage */
- exit (-1); } /* exit */
-
- *(mess3 + 35) += drive; /* set drive letter */
- printf (mess3); /* display message */
- getch(); /* wait for key */
-
- ctrlbrk (cbreak); /* set break handler */
- setbase (9, 512); /* set disk base */
-
- /* format disk */
-
- err = FALSE;
- for (track = 0; (track < 40) && !err; track++) /* tracks */
- for (head = 0; (head < 2) && !err; head++) /* heads */
- err = trkfrm (drive, head, track, 9, 512); /* format */
-
- if (!err) {
-
- /* boot sector */
-
- secwrt (drive, 0, 0, 1, 1, &BOOTSEC); /* write sector */
-
- /* file allocation tables */
-
- secbuf = (char *) calloc (9, 512); /* allocate sector buffer */
- c = &BOOTSEC;
- secbuf[0] = c[21]; /* set first byte of FAT */
- secbuf[1] = 0xff;
- secbuf[2] = 0xff; /* second two bytes */
- secwrt (drive, 0, 0, 2, 2, secbuf); /* write first FAT */
- secwrt (drive, 0, 0, 4, 2, secbuf); /* write second FAT */
-
- /* directories */
-
- secbuf[0] = 0;
- secbuf[1] = 0;
- secbuf[2] = 0; /* clear buffer bytes */
- secwrt (drive, 0, 0, 6, 4, secbuf); /* dir sec on side 0 */
- secwrt (drive, 1, 0, 1, 3, secbuf); /* dir sec on side 1 */
-
- /* finished */
-
- resbase (); } /* restore disk base */
-
- else {
-
- /* error formatting */
-
- printf (mess5); /* show usage */
- resbase (); /* restore disk base */
- exit (-1); } /* exit */
- }
-