mirror of
git://slackware.nl/current.git
synced 2024-12-28 09:59:53 +01:00
906 lines
31 KiB
Diff
906 lines
31 KiB
Diff
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/Changelog fdutils/Changelog
|
||
|
--- fdutils-5.5/Changelog 2005-03-03 22:41:49.000000000 +0100
|
||
|
+++ fdutils/Changelog 2006-02-27 23:01:38.000000000 +0100
|
||
|
@@ -1,3 +1,5 @@
|
||
|
+v20060227
|
||
|
+ * Fixed "zero-based" flag
|
||
|
v20050303
|
||
|
* Fixed instant verification in superformat (now based on
|
||
|
FDRAWCMD, rather than VFS' read which is plagued by excessive
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/diskd.1 fdutils/doc/diskd.1
|
||
|
--- fdutils-5.5/doc/diskd.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/diskd.1 2008-10-27 20:53:44.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH diskd 1 "03Mar05" fdutils-5.5
|
||
|
+.TH diskd 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
diskd - disk daemon; wait for disk to be inserted
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/diskseekd.1 fdutils/doc/diskseekd.1
|
||
|
--- fdutils-5.5/doc/diskseekd.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/diskseekd.1 2008-10-27 20:53:44.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH diskseekd 1 "03Mar05" fdutils-5.5
|
||
|
+.TH diskseekd 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
diskseek, diskseekd - disk seek daemon; simulates Messy Dos' drive cleaning effect
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/fdmount.1 fdutils/doc/fdmount.1
|
||
|
--- fdutils-5.5/doc/fdmount.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/fdmount.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH fdmount 1 "03Mar05" fdutils-5.5
|
||
|
+.TH fdmount 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
fdmount - Floppy disk mount utility
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/fdrawcmd.1 fdutils/doc/fdrawcmd.1
|
||
|
--- fdutils-5.5/doc/fdrawcmd.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/fdrawcmd.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH fdrawcmd 1 "03Mar05" fdutils-5.5
|
||
|
+.TH fdrawcmd 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
fdrawcmd - send raw commands to the floppy disk controller
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/floppycontrol.1 fdutils/doc/floppycontrol.1
|
||
|
--- fdutils-5.5/doc/floppycontrol.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/floppycontrol.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH floppycontrol 1 "03Mar05" fdutils-5.5
|
||
|
+.TH floppycontrol 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
floppycontrol - floppy driver configuration utility
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/floppymeter.1 fdutils/doc/floppymeter.1
|
||
|
--- fdutils-5.5/doc/floppymeter.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/floppymeter.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH floppymeter 1 "03Mar05" fdutils-5.5
|
||
|
+.TH floppymeter 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
floppymeter - measure raw capacity and exact rotation speed of floppy drive
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/formatlist.texi fdutils/doc/formatlist.texi
|
||
|
--- fdutils-5.5/doc/formatlist.texi 2002-05-02 23:03:31.000000000 +0200
|
||
|
+++ fdutils/doc/formatlist.texi 2006-02-27 23:08:50.000000000 +0100
|
||
|
@@ -221,7 +221,7 @@
|
||
|
setfdprm /dev/fd0H1520 1520 19 2 80 0 0x1b 0 0xcf 0x6c
|
||
|
@end example
|
||
|
|
||
|
-@strong{Note:} This redefines the geometry for any device node with the
|
||
|
+@strong{NB:} This redefines the geometry for any device node with the
|
||
|
same format number, not just the new node.
|
||
|
|
||
|
The new geometry is only valid until the next reboot (or removal of the
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/getfdprm.1 fdutils/doc/getfdprm.1
|
||
|
--- fdutils-5.5/doc/getfdprm.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/getfdprm.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH getfdprm 1 "03Mar05" fdutils-5.5
|
||
|
+.TH getfdprm 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
getfdprm - print the current format information
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/makefloppies.1 fdutils/doc/makefloppies.1
|
||
|
--- fdutils-5.5/doc/makefloppies.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/makefloppies.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH makefloppies 1 "03Mar05" fdutils-5.5
|
||
|
+.TH makefloppies 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
MAKEFLOPPIES - Creates the default floppy device nodes.
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/setfdprm.1 fdutils/doc/setfdprm.1
|
||
|
--- fdutils-5.5/doc/setfdprm.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/setfdprm.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH setfdprm 1 "03Mar05" fdutils-5.5
|
||
|
+.TH setfdprm 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
setfdprm - sets user-provided floppy disk parameters
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/superformat.1 fdutils/doc/superformat.1
|
||
|
--- fdutils-5.5/doc/superformat.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/superformat.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH superformat 1 "03Mar05" fdutils-5.5
|
||
|
+.TH superformat 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
superformat - format floppies
|
||
|
'\" t
|
||
|
@@ -79,7 +79,7 @@
|
||
|
.in +0.3i
|
||
|
\&\fR\&\f(CWsuperformat [\fR\&\f(CW-D \fIdos-drive\fR\&\f(CW] [\fR\&\f(CW-v \fIverbosity-level\fR\&\f(CW] [\fR\&\f(CW-b \fIbegin-track\fR\&\f(CW]
|
||
|
[\fR\&\f(CW-e \fIend-track\fR\&\f(CW] [\fR\&\f(CW--superverify] [\fR\&\f(CW--dosverify]
|
||
|
-[\fR\&\f(CW--noverify] [\fR\&\f(CW--verify_later] [\fR\&\f(CW--zero-based]
|
||
|
+[\fR\&\f(CW--noverify] [\fR\&\f(CW--verify_later] [\fR\&\f(CW--first-sector-number \fIn\fR\&\f(CW] [\fR\&\f(CW--zero-based]
|
||
|
[\fR\&\f(CW-G \fIformat-gap\fR\&\f(CW] [\fR\&\f(CW-F \fIfinal-gap\fR\&\f(CW] [\fR\&\f(CW-i \fIinterleave\fR\&\f(CW] [\fR\&\f(CW-c \fIchunksize\fR\&\f(CW]
|
||
|
[\fR\&\f(CW-g \fIgap\fR\&\f(CW] [\fR\&\f(CW--absolute-skew \fIabsolute-skew\fR\&\f(CW] [\fR\&\f(CW--head-skew \fIhead-skew\fR\&\f(CW]
|
||
|
[\fR\&\f(CW--track-skew \fItrack-skew\fR\&\f(CW] [\fR\&\f(CW--biggest-last] \fIdrive\fR\&\f(CW [\fImedia-description\fR\&\f(CW]
|
||
|
@@ -237,13 +237,12 @@
|
||
|
For MSS formats, make sure that the biggest sector is last on the track.
|
||
|
This makes the format more reliable on drives which are out of spec.
|
||
|
.TP
|
||
|
+\&\fR\&\f(CW--first-sector-number\ \fIn\fR\&\f(CW\fR\
|
||
|
+Formats the disk with sector numbers starting at \fIn\fR, rather than
|
||
|
+1. Certain CP/M boxes or Music synthesizers use this format.
|
||
|
+.TP
|
||
|
\&\fR\&\f(CW--zero-based\fR\
|
||
|
-Formats the disk with sector numbers starting at 0, rather than
|
||
|
-1. Certain CP/M boxes or Music synthesizers use this format. Those disks
|
||
|
-can currently not be read/written to by the standard Linux read/write
|
||
|
-API; you have to use fdrawcmd to access them. As disk verifying is done
|
||
|
-by this API, verifying is automatically switched off when formatting
|
||
|
-zero-based.
|
||
|
+Shorthand for \fR\&\f(CW--first-sector-number 0\fR
|
||
|
.PP
|
||
|
.SH Sector\ skewing\ options
|
||
|
.PP
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/superformat.texi fdutils/doc/superformat.texi
|
||
|
--- fdutils-5.5/doc/superformat.texi 2002-11-02 14:35:11.000000000 +0100
|
||
|
+++ fdutils/doc/superformat.texi 2008-10-27 20:53:41.000000000 +0100
|
||
|
@@ -6,7 +6,7 @@
|
||
|
@example
|
||
|
@code{superformat} [@code{-D} @var{dos-drive}] [@code{-v} @var{verbosity-level}] [@code{-b} @var{begin-track}]
|
||
|
[@code{-e} @var{end-track}] [@code{--superverify}] [@code{--dosverify}]
|
||
|
-[@code{--noverify}] [@code{--verify_later}] [@code{--zero-based}]
|
||
|
+[@code{--noverify}] [@code{--verify_later}] [@code{--first-sector-number} @var{n}] [@code{--zero-based}]
|
||
|
[@code{-G} @var{format-gap}] [@code{-F} @var{final-gap}] [@code{-i} @var{interleave}] [@code{-c} @var{chunksize}]
|
||
|
[@code{-g} @var{gap}] [@code{--absolute-skew} @var{absolute-skew}] [@code{--head-skew} @var{head-skew}]
|
||
|
[@code{--track-skew} @var{track-skew}] [@code{--biggest-last}] @var{drive} [@var{media-description}]
|
||
|
@@ -162,13 +162,12 @@
|
||
|
For MSS formats, make sure that the biggest sector is last on the track.
|
||
|
This makes the format more reliable on drives which are out of spec.
|
||
|
|
||
|
+@item --first-sector-number @var{n}
|
||
|
+Formats the disk with sector numbers starting at @var{n}, rather than
|
||
|
+1. Certain CP/M boxes or Music synthesizers use this format.
|
||
|
+
|
||
|
@item --zero-based
|
||
|
-Formats the disk with sector numbers starting at 0, rather than
|
||
|
-1. Certain CP/M boxes or Music synthesizers use this format. Those disks
|
||
|
-can currently not be read/written to by the standard Linux read/write
|
||
|
-API; you have to use fdrawcmd to access them. As disk verifying is done
|
||
|
-by this API, verifying is automatically switched off when formatting
|
||
|
-zero-based.
|
||
|
+Shorthand for @code{--first-sector-number 0}
|
||
|
|
||
|
@end table
|
||
|
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/xdfcopy.1 fdutils/doc/xdfcopy.1
|
||
|
--- fdutils-5.5/doc/xdfcopy.1 2005-03-03 22:55:18.000000000 +0100
|
||
|
+++ fdutils/doc/xdfcopy.1 2008-10-27 20:53:45.000000000 +0100
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-.TH xdfcopy 1 "03Mar05" fdutils-5.5
|
||
|
+.TH xdfcopy 1 "27oct08" fdutils-5.5
|
||
|
.SH Name
|
||
|
xdfcopy - Program to copy and format Xdf disks in Linux
|
||
|
'\" t
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/calc-format.c fdutils/src/calc-format.c
|
||
|
--- fdutils-5.5/src/calc-format.c 2004-02-28 23:00:28.000000000 +0100
|
||
|
+++ fdutils/src/calc-format.c 2008-10-27 20:19:20.000000000 +0100
|
||
|
@@ -10,8 +10,8 @@
|
||
|
#define SSIZE(j) ( (128<<j) + GAPSIZE(j) + header_size)
|
||
|
|
||
|
|
||
|
-static inline int chunks_in_sect(struct params *fd, int i,
|
||
|
- int gap, int chunksize)
|
||
|
+static inline unsigned int chunks_in_sect(struct params *fd, int i,
|
||
|
+ int gap, int chunksize)
|
||
|
{
|
||
|
return (SSIZE(i)-1) / chunksize + 1;
|
||
|
}
|
||
|
@@ -28,22 +28,22 @@
|
||
|
}
|
||
|
|
||
|
|
||
|
-static inline int firstSector(struct params *fd, int i)
|
||
|
+static inline unsigned int firstSector(struct params *fd, int i)
|
||
|
{
|
||
|
if(i>=MAX_SIZECODE-1)
|
||
|
- return 1;
|
||
|
+ return 0;
|
||
|
else
|
||
|
return fd->last_sect[i+1];
|
||
|
}
|
||
|
|
||
|
-static inline int lastSector(struct params *fd, int i)
|
||
|
+static inline unsigned int lastSector(struct params *fd, int i)
|
||
|
{
|
||
|
return fd->last_sect[i];
|
||
|
}
|
||
|
|
||
|
-static inline int nrSectorsForSize(struct params *fd, int i)
|
||
|
+static inline unsigned int nrSectorsForSize(struct params *fd, int i)
|
||
|
{
|
||
|
- return lastSector(fd, i) - firstSector(fd, i);
|
||
|
+ return lastSector(fd, i) - firstSector(fd, i);
|
||
|
}
|
||
|
|
||
|
|
||
|
@@ -93,7 +93,7 @@
|
||
|
int i;
|
||
|
int nr_sectors;
|
||
|
|
||
|
- cur_sector = 1;
|
||
|
+ cur_sector = 0;
|
||
|
sizes=0;
|
||
|
for (i=MAX_SIZECODE-1; i>=0; --i) {
|
||
|
if(i > max_sizecode)
|
||
|
@@ -107,7 +107,7 @@
|
||
|
if(nr_sectors)
|
||
|
sizes++;
|
||
|
}
|
||
|
- fd->dsect = cur_sector-1; /* number of data sectors */
|
||
|
+ fd->dsect = cur_sector; /* number of data sectors */
|
||
|
if(sizes > 1)
|
||
|
fd->need_init = 1;
|
||
|
|
||
|
@@ -264,51 +264,54 @@
|
||
|
*/
|
||
|
static void calc_sequence(struct params *fd, int tailsect)
|
||
|
{
|
||
|
- int sec_id, cur_sector, i;
|
||
|
+ int sec_id, cur_slot, i;
|
||
|
+ int *occupied = SafeNewArray(fd->dsect, int);
|
||
|
+ int last_slot = fd->dsect - 1;
|
||
|
|
||
|
- fd->sequence = SafeNewArray(fd->dsect,struct fparm2);
|
||
|
- cur_sector = fd->dsect-1;
|
||
|
+ fd->sequence = SafeNewArray(fd->dsect, struct fparm2);
|
||
|
+ cur_slot = last_slot;
|
||
|
|
||
|
- /* construct the sequence while working backwards. cur_sector
|
||
|
+ /* construct the sequence while working backwards. cur_slot
|
||
|
* points to the place where the next sector will be placed.
|
||
|
* We place it, then move circularily backwards placing more
|
||
|
* and more sectors */
|
||
|
sec_id = tailsect;
|
||
|
fd->rotations = 0;
|
||
|
for(i=0; i < fd->dsect;
|
||
|
- i++, cur_sector -= fd->actual_interleave, sec_id--) {
|
||
|
- if (sec_id == 0)
|
||
|
- sec_id = fd->dsect;
|
||
|
-
|
||
|
- if ( cur_sector < 0) {
|
||
|
- cur_sector += fd->dsect;
|
||
|
- if(sec_id != fd->dsect)
|
||
|
+ i++, cur_slot -= fd->actual_interleave, sec_id--) {
|
||
|
+ if (sec_id < 0)
|
||
|
+ sec_id = last_slot;
|
||
|
+
|
||
|
+ if ( cur_slot < 0) {
|
||
|
+ cur_slot += fd->dsect;
|
||
|
+ if(sec_id != last_slot)
|
||
|
fd->rotations++;
|
||
|
}
|
||
|
|
||
|
/* slot occupied, look elsewhere */
|
||
|
- while(fd->sequence[cur_sector].sect ){
|
||
|
- cur_sector--;
|
||
|
- if ( cur_sector < 0 ) {
|
||
|
- cur_sector += fd->dsect;
|
||
|
- if(sec_id != fd->dsect)
|
||
|
+ while(occupied[cur_slot]) {
|
||
|
+ cur_slot--;
|
||
|
+ if ( cur_slot < 0 ) {
|
||
|
+ cur_slot += fd->dsect;
|
||
|
+ if(sec_id != last_slot)
|
||
|
fd->rotations++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* place the sector */
|
||
|
- fd->sequence[cur_sector].sect = sec_id;
|
||
|
- fd->sequence[cur_sector].size = sizeOfSector(fd, sec_id);
|
||
|
+ fd->sequence[cur_slot].sect = sec_id;
|
||
|
+ fd->sequence[cur_slot].size = sizeOfSector(fd, sec_id);
|
||
|
+ occupied[cur_slot] = 1;
|
||
|
}
|
||
|
|
||
|
/* handle wrap-around between tailsect and tailsect+1 */
|
||
|
- if(tailsect != fd->dsect) {
|
||
|
- /* always add one rotation, because tailsect+1 cannot be
|
||
|
+ if(tailsect != last_slot) {
|
||
|
+ /* always add one rotation, because tailsect cannot be
|
||
|
* at the last position, thus is necessarily earlyer */
|
||
|
fd->rotations++;
|
||
|
|
||
|
if(fd->actual_interleave == 2 &&
|
||
|
- cur_sector + fd->actual_interleave == 1)
|
||
|
+ cur_slot + fd->actual_interleave == 1)
|
||
|
/* if we use interleave, and the last sector was
|
||
|
* placed at the first last position, add one
|
||
|
* extra rotation for tailsect+1 following tailsect
|
||
|
@@ -333,11 +336,11 @@
|
||
|
max_offset = cur_sector;
|
||
|
|
||
|
/* offset of the starting sector */
|
||
|
- if ( fd->sequence[i].sect == 1 )
|
||
|
+ if ( fd->sequence[i].sect == 0 )
|
||
|
fd->min = cur_sector * fd->chunksize;
|
||
|
|
||
|
/* offset of the end of the of the highest sector */
|
||
|
- if (fd->sequence[i].sect == fd->dsect)
|
||
|
+ if (fd->sequence[i].sect == fd->dsect - 1)
|
||
|
track_end = cur_sector * fd->chunksize +
|
||
|
header_size + index_size +
|
||
|
SSIZE(fd->sequence[i].size);
|
||
|
@@ -509,7 +512,7 @@
|
||
|
fd->min = 0;
|
||
|
|
||
|
for(i=0; i<sectors; i++){
|
||
|
- fd->sequence[i].sect = i+1;
|
||
|
+ fd->sequence[i].sect = i;
|
||
|
fd->sequence[i].size = 2;
|
||
|
fd->sequence[i].offset = i;
|
||
|
}
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/fdmount.c fdutils/src/fdmount.c
|
||
|
--- fdutils-5.5/src/fdmount.c 2005-03-03 23:09:16.000000000 +0100
|
||
|
+++ fdutils/src/fdmount.c 2008-10-27 20:45:50.000000000 +0100
|
||
|
@@ -629,7 +629,7 @@
|
||
|
struct mntent ms;
|
||
|
struct floppy_drive_struct drivstat;
|
||
|
char options[80+MAX_OPT];
|
||
|
- char super[2048];
|
||
|
+ unsigned char super[2048];
|
||
|
char *mountpoint;
|
||
|
|
||
|
strncpy(curdev,devname, sizeof(curdev));
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/fdutils.h fdutils/src/fdutils.h
|
||
|
--- fdutils-5.5/src/fdutils.h 2002-05-02 23:03:31.000000000 +0200
|
||
|
+++ fdutils/src/fdutils.h 2008-10-25 22:17:36.000000000 +0200
|
||
|
@@ -1,4 +1,8 @@
|
||
|
+#ifndef __FDUTILS_H
|
||
|
+#define __FDUTILS_H
|
||
|
+
|
||
|
#include <assert.h>
|
||
|
+#include <linux/fd.h>
|
||
|
/* This file contains common structures understood by several of the
|
||
|
* fdutils
|
||
|
*/
|
||
|
@@ -22,3 +26,17 @@
|
||
|
#define SafeNew(type) ((type *)(safe_malloc(sizeof(type))))
|
||
|
void *safe_malloc(size_t size);
|
||
|
void *safe_calloc(size_t nmemb, size_t size);
|
||
|
+
|
||
|
+#ifndef FD_SWAPSIDES
|
||
|
+#define FD_SWAPSIDES 2
|
||
|
+#endif
|
||
|
+
|
||
|
+#ifndef FD_ZEROBASED
|
||
|
+#define FD_ZEROBASED 4
|
||
|
+#endif
|
||
|
+
|
||
|
+#ifndef FD_SECTBASEMASK
|
||
|
+#define FD_SECTBASEMASK 0x3fc
|
||
|
+#endif
|
||
|
+
|
||
|
+#endif
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/floppycontrol.c fdutils/src/floppycontrol.c
|
||
|
--- fdutils-5.5/src/floppycontrol.c 2002-11-02 14:36:43.000000000 +0100
|
||
|
+++ fdutils/src/floppycontrol.c 2008-10-26 09:27:38.000000000 +0100
|
||
|
@@ -379,7 +379,7 @@
|
||
|
}
|
||
|
|
||
|
if (mask & SET_RESET)
|
||
|
- eioctl(fd, FDRESET, (void *)reset_now, "reset");
|
||
|
+ eioctl(fd, FDRESET, (void *)(long)reset_now, "reset");
|
||
|
|
||
|
if (mask & (PRINTSTATE | POLLSTATE) ){
|
||
|
if ( mask & POLLSTATE )
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/mediaprm.c fdutils/src/mediaprm.c
|
||
|
--- fdutils-5.5/src/mediaprm.c 2005-03-03 21:51:06.000000000 +0100
|
||
|
+++ fdutils/src/mediaprm.c 2008-10-27 20:34:09.000000000 +0100
|
||
|
@@ -21,6 +21,7 @@
|
||
|
FE_STRETCH,
|
||
|
FE_SWAPSIDES,
|
||
|
FE_ZEROBASED,
|
||
|
+ FE_FIRSTSECTORNUMBER,
|
||
|
|
||
|
FE_GAP,
|
||
|
|
||
|
@@ -36,7 +37,7 @@
|
||
|
FE_DENSITY,
|
||
|
} field_t;
|
||
|
|
||
|
-static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, ZEROBASED;
|
||
|
+static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, ZEROBASED, FIRSTSECTORNUMBER=1;
|
||
|
static int GAP, FM;
|
||
|
static int PERP, SSIZE, _2M, DTR, SPEC1, FMT_GAP, DENSITY;
|
||
|
static int ssize;
|
||
|
@@ -51,6 +52,7 @@
|
||
|
#define F_STRETCH FE_STRETCH,&STRETCH
|
||
|
#define F_SWAPSIDES FE_SWAPSIDES,&SWAPSIDES
|
||
|
#define F_ZEROBASED FE_ZEROBASED,&ZEROBASED
|
||
|
+#define F_FIRSTSECTORNUMBER FE_FIRSTSECTORNUMBER,&FIRSTSECTORNUMBER
|
||
|
|
||
|
#define F_GAP FE_GAP,&GAP
|
||
|
|
||
|
@@ -81,6 +83,8 @@
|
||
|
|
||
|
{ "swapsides", F_SWAPSIDES, 1},
|
||
|
{ "zerobased", F_ZEROBASED, 1},
|
||
|
+ { "zero-based", F_ZEROBASED, 1},
|
||
|
+ { "first-sector-number", F_FIRSTSECTORNUMBER, 0},
|
||
|
|
||
|
{ "gap", F_GAP, 0},
|
||
|
|
||
|
@@ -234,11 +238,25 @@
|
||
|
}
|
||
|
set_field(F_2M,0);
|
||
|
|
||
|
+ if(mask & (1 << FE_ZEROBASED)) {
|
||
|
+ if((mask & (1 << FE_FIRSTSECTORNUMBER)) &&
|
||
|
+ FIRSTSECTORNUMBER != 0) {
|
||
|
+ fprintf(stderr,
|
||
|
+ "Zerobased incompatible with first-sector-number=%d\n",
|
||
|
+ FIRSTSECTORNUMBER);
|
||
|
+ exit(1);
|
||
|
+ } else
|
||
|
+ FIRSTSECTORNUMBER = 0;
|
||
|
+ } else if(! (mask & (1 << FE_FIRSTSECTORNUMBER))) {
|
||
|
+ FIRSTSECTORNUMBER = 1;
|
||
|
+ }
|
||
|
+
|
||
|
medprm->size = SIZE;
|
||
|
medprm->sect = VSECT / 512;
|
||
|
medprm->head = HEAD;
|
||
|
medprm->track = CYL;
|
||
|
- medprm->stretch = STRETCH | (SWAPSIDES << 1) | (ZEROBASED << 2);
|
||
|
+ medprm->stretch = STRETCH | (SWAPSIDES << 1) |
|
||
|
+ ((1^FIRSTSECTORNUMBER) << 2);
|
||
|
medprm->gap = GAP;
|
||
|
medprm->rate = (FM<<7) | (PERP<<6) | (ssize<<3) | (_2M<<2) | DTR;
|
||
|
medprm->spec1 = SPEC1;
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/mediaprm.lex fdutils/src/mediaprm.lex
|
||
|
--- fdutils-5.5/src/mediaprm.lex 2002-05-02 23:03:31.000000000 +0200
|
||
|
+++ fdutils/src/mediaprm.lex 2006-02-27 22:56:21.000000000 +0100
|
||
|
@@ -12,7 +12,7 @@
|
||
|
%option pointer
|
||
|
|
||
|
fid [^\"]+
|
||
|
-vid [A-Za-z_][A-Za-z0-9_]*
|
||
|
+vid [A-Za-z_][A-Za-z0-9_-]*
|
||
|
number (0x[a-zA-Z0-9]+|-?[0-9]+)(KB|k|b)?
|
||
|
|
||
|
%%
|
||
|
@@ -37,6 +37,8 @@
|
||
|
}
|
||
|
|
||
|
swapsides |
|
||
|
+zerobased |
|
||
|
+zero-based |
|
||
|
mss |
|
||
|
2m |
|
||
|
2M |
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/msdos_fs.h fdutils/src/msdos_fs.h
|
||
|
--- fdutils-5.5/src/msdos_fs.h 2002-05-02 23:03:31.000000000 +0200
|
||
|
+++ fdutils/src/msdos_fs.h 2008-10-26 09:27:07.000000000 +0100
|
||
|
@@ -6,41 +6,41 @@
|
||
|
#define p packed
|
||
|
|
||
|
struct msdos_boot_sector {
|
||
|
- char jump[3] p; /* 0 - Boot strap short or near jump */
|
||
|
- char banner[8] p; /* 3 - Name - can be used to special case
|
||
|
+ char jump[3]; /* 0 - Boot strap short or near jump */
|
||
|
+ char banner[8]; /* 3 - Name - can be used to special case
|
||
|
partition manager volumes */
|
||
|
unsigned short sector_size p; /* 11 - bytes per logical sector */
|
||
|
- unsigned char cluster_size p; /* 13 - sectors/cluster */
|
||
|
+ unsigned char cluster_size; /* 13 - sectors/cluster */
|
||
|
unsigned short res_sect p; /* 14 - reserved sectors */
|
||
|
- unsigned char fats p; /* 16 - number of FATs */
|
||
|
+ unsigned char fats; /* 16 - number of FATs */
|
||
|
unsigned short dir_entries p; /* 17 - root directory entries */
|
||
|
unsigned short sectors p; /* 19 - number of sectors */
|
||
|
- unsigned char media p; /* 21 - media code (unused) */
|
||
|
+ unsigned char media; /* 21 - media code (unused) */
|
||
|
unsigned short fat_length p; /* 22 - sectors/FAT */
|
||
|
unsigned short secs_track p; /* 24 - sectors per track */
|
||
|
unsigned short heads p; /* 26 - number of heads */
|
||
|
unsigned long hidden p; /* 28 - hidden sectors (unused) */
|
||
|
unsigned long total_sect p; /* 32 - number of sectors (if sectors == 0) */
|
||
|
- unsigned char physdrive p; /* 36 physical drive ? */
|
||
|
- unsigned char _reserved p; /* 37 reserved */
|
||
|
- unsigned char dos4 p; /* 38 DOS > 4.0 diskette */
|
||
|
+ unsigned char physdrive; /* 36 physical drive ? */
|
||
|
+ unsigned char _reserved; /* 37 reserved */
|
||
|
+ unsigned char dos4; /* 38 DOS > 4.0 diskette */
|
||
|
unsigned long serial p; /* 39 serial number */
|
||
|
- unsigned char label[11] p; /* 43 disk label */
|
||
|
- unsigned char fat_type[8] p; /* 54 FAT type */
|
||
|
+ unsigned char label[11]; /* 43 disk label */
|
||
|
+ char fat_type[8]; /* 54 FAT type */
|
||
|
#ifdef USE_2M
|
||
|
- unsigned char res_2m p; /* 62 reserved by 2M */
|
||
|
- unsigned char CheckSum p; /* 63 2M checksum (not used) */
|
||
|
- unsigned char fmt_2mf p; /* 64 2MF format version */
|
||
|
- unsigned char wt p; /* 65 1 if write track after format */
|
||
|
- unsigned char rate_0 p; /* 66 data transfer rate on track 0 */
|
||
|
- unsigned char rate_any p; /* 67 data transfer rate on track<>0 */
|
||
|
+ unsigned char res_2m; /* 62 reserved by 2M */
|
||
|
+ unsigned char CheckSum; /* 63 2M checksum (not used) */
|
||
|
+ unsigned char fmt_2mf; /* 64 2MF format version */
|
||
|
+ unsigned char wt; /* 65 1 if write track after format */
|
||
|
+ unsigned char rate_0; /* 66 data transfer rate on track 0 */
|
||
|
+ unsigned char rate_any; /* 67 data transfer rate on track<>0 */
|
||
|
unsigned short BootP p; /* 68 offset to boot program */
|
||
|
unsigned short Infp0 p; /* 70 T1: information for track 0 */
|
||
|
unsigned short InfpX p; /* 72 T2: information for track<>0 */
|
||
|
unsigned short InfTm p; /* 74 T3: track sectors size table */
|
||
|
- unsigned char junk[126 - 76] p; /* 76 remaining data */
|
||
|
+ unsigned char junk[126 - 76]; /* 76 remaining data */
|
||
|
#else
|
||
|
- unsigned char junk[126 - 62] p; /* 76 remaining data */
|
||
|
+ unsigned char junk[126 - 62]; /* 76 remaining data */
|
||
|
#endif
|
||
|
unsigned short bootid p; /* 510 should be 0xAA55 */
|
||
|
};
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/printfdprm.c fdutils/src/printfdprm.c
|
||
|
--- fdutils-5.5/src/printfdprm.c 2004-03-13 11:02:45.000000000 +0100
|
||
|
+++ fdutils/src/printfdprm.c 2008-10-27 00:59:01.000000000 +0100
|
||
|
@@ -1,5 +1,6 @@
|
||
|
#include <stdio.h>
|
||
|
#include "printfdprm.h"
|
||
|
+#include "fdutils.h"
|
||
|
|
||
|
|
||
|
void print_params(drivedesc_t *drivedesc,
|
||
|
@@ -101,9 +102,9 @@
|
||
|
print("tpi=48",0);
|
||
|
break;
|
||
|
default:
|
||
|
- if(level >= LEV_ALL || ft->stretch)
|
||
|
- print("stretch=%d", ft->stretch);
|
||
|
- break;
|
||
|
+ if(level >= LEV_ALL || (ft->stretch & 1))
|
||
|
+ print("stretch=%d", ft->stretch & 1);
|
||
|
+ break;
|
||
|
}
|
||
|
|
||
|
if(level >= LEV_ALL || ft->size != ft->sect * ft->head * ft->track)
|
||
|
@@ -136,20 +137,20 @@
|
||
|
if(level >= LEV_EXPL || (ft->track != 80 && ft->track != 40))
|
||
|
print("cyl=%d", ft->track);
|
||
|
|
||
|
-#ifdef FD_SWAPSIDES
|
||
|
if(ft->stretch & FD_SWAPSIDES)
|
||
|
print("swapsides",0);
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef FD_ZEROBASED
|
||
|
- if(ft->stretch & FD_ZEROBASED)
|
||
|
- print("zerobased",0);
|
||
|
-#endif
|
||
|
|
||
|
+ if(ft->stretch & FD_SECTBASEMASK) {
|
||
|
+ int firstSectorNumber = ((ft->stretch & FD_SECTBASEMASK)>>2)^1;
|
||
|
+ if(firstSectorNumber > 1)
|
||
|
+ print("first-sector-number=%d",firstSectorNumber);
|
||
|
+ else if(firstSectorNumber==0)
|
||
|
+ print("zero-based",0);
|
||
|
+ }
|
||
|
|
||
|
if(ft->rate & FD_2M)
|
||
|
print("2M",0);
|
||
|
-
|
||
|
+
|
||
|
if(level < LEV_ALL &&
|
||
|
ft->sect * 4 < (2 << ssize) && ft->sect * 4 % (1 << ssize))
|
||
|
print("mss", 0);
|
||
|
@@ -163,7 +164,7 @@
|
||
|
}
|
||
|
|
||
|
/* useless stuff */
|
||
|
- if(level >= LEV_MOST) {
|
||
|
+ if(level >= LEV_MOST) {
|
||
|
print("gap=0x%02x", (unsigned char) ft->gap);
|
||
|
print("fmt_gap=0x%02x", (unsigned char) ft->fmt_gap);
|
||
|
}
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/superformat.c fdutils/src/superformat.c
|
||
|
--- fdutils-5.5/src/superformat.c 2005-03-03 22:41:05.000000000 +0100
|
||
|
+++ fdutils/src/superformat.c 2008-10-27 20:40:47.000000000 +0100
|
||
|
@@ -296,7 +296,7 @@
|
||
|
fd += findex[cylinder][head];
|
||
|
skew = fd->min + lskews[cylinder][head] * fd->chunksize;
|
||
|
assert(skew >= fd->min);
|
||
|
- assert(skew <= fd->max);
|
||
|
+ assert(skew <= fd->max);
|
||
|
} else
|
||
|
skew = 0;
|
||
|
|
||
|
@@ -305,7 +305,8 @@
|
||
|
for (i=0; i<fd->dsect; ++i){
|
||
|
offset = fd->sequence[i].offset + lskews[cylinder][head];
|
||
|
offset = offset % fd->nssect;
|
||
|
- data[offset].sector = fd->sequence[i].sect - fd->zeroBased;
|
||
|
+ data[offset].sector =
|
||
|
+ fd->sequence[i].sect + fd->firstSectorNumber;
|
||
|
data[offset].size = fd->sequence[i].size;
|
||
|
data[offset].cylinder = cylinder;
|
||
|
data[offset].head = head;
|
||
|
@@ -339,7 +340,7 @@
|
||
|
raw_cmd.cmd[3] = nssect;
|
||
|
raw_cmd.cmd[4] = fd->fmt_gap;
|
||
|
raw_cmd.cmd[5] = 0;
|
||
|
- raw_cmd.flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN |
|
||
|
+ raw_cmd.flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN |
|
||
|
FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK;
|
||
|
raw_cmd.track = cylinder << stretch;
|
||
|
raw_cmd.rate = fd->rate & 0x43;
|
||
|
@@ -363,14 +364,16 @@
|
||
|
static int rw_track(struct params *fd, int cylinder, int head, int mode)
|
||
|
{
|
||
|
int i;
|
||
|
- int cur_sector;
|
||
|
+ int cur_sector; /* current sector, logical (based on 0) */
|
||
|
int retries;
|
||
|
struct floppy_raw_cmd raw_cmd;
|
||
|
|
||
|
- cur_sector = 1 - fd->zeroBased;
|
||
|
+ cur_sector = 0;
|
||
|
|
||
|
for (i=MAX_SIZECODE-1; i>=0; --i) {
|
||
|
- if ( fd->last_sect[i] <= cur_sector + fd->zeroBased)
|
||
|
+ if ( cur_sector >= fd->last_sect[i] )
|
||
|
+ /* last sector for size reached, move on to next
|
||
|
+ * sizecode */
|
||
|
continue;
|
||
|
retries=0;
|
||
|
retry:
|
||
|
@@ -383,32 +386,31 @@
|
||
|
(fd->swapSides ? 4 : 0);
|
||
|
raw_cmd.cmd[2] = cylinder;
|
||
|
raw_cmd.cmd[3] = head;
|
||
|
- raw_cmd.cmd[4] = cur_sector;
|
||
|
+ raw_cmd.cmd[4] = cur_sector + fd->firstSectorNumber;
|
||
|
raw_cmd.cmd[5] = i;
|
||
|
- raw_cmd.cmd[6] = fd->last_sect[i] - 1 - fd->zeroBased;
|
||
|
+ raw_cmd.cmd[6] = fd->last_sect[i] + fd->firstSectorNumber - 1;
|
||
|
raw_cmd.cmd[7] = fd->gap;
|
||
|
if ( i )
|
||
|
raw_cmd.cmd[8] = 0xff;
|
||
|
else
|
||
|
raw_cmd.cmd[8] = 0xff;
|
||
|
- raw_cmd.flags = (mode ? FD_RAW_WRITE : FD_RAW_READ) |
|
||
|
+ raw_cmd.flags = (mode ? FD_RAW_WRITE : FD_RAW_READ) |
|
||
|
FD_RAW_INTR | FD_RAW_SPIN |
|
||
|
FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK;
|
||
|
raw_cmd.track = cylinder << stretch;
|
||
|
raw_cmd.rate = fd->rate & 0x43;
|
||
|
|
||
|
- raw_cmd.length = (fd->last_sect[i] -
|
||
|
- fd->zeroBased -
|
||
|
- cur_sector) * 128 << i;
|
||
|
+ raw_cmd.length = (fd->last_sect[i] - cur_sector) * 128 << i;
|
||
|
/* debugging */
|
||
|
if (verbosity == 9)
|
||
|
printf("%s %ld sectors of size %d starting at %d\n",
|
||
|
mode ? "writing" : "reading",
|
||
|
raw_cmd.length / 512, i, cur_sector);
|
||
|
- if(send_cmd(fd->fd, & raw_cmd,
|
||
|
+ if(send_cmd(fd->fd, & raw_cmd,
|
||
|
mode ? "format" : "verify")){
|
||
|
if ( !retries && mode && (raw_cmd.reply[1] & ST1_ND) ){
|
||
|
- cur_sector = raw_cmd.reply[5];
|
||
|
+ cur_sector =
|
||
|
+ raw_cmd.reply[5] - fd->firstSectorNumber;
|
||
|
retries++;
|
||
|
goto retry;
|
||
|
}
|
||
|
@@ -516,6 +518,7 @@
|
||
|
|
||
|
short retries;
|
||
|
short zeroBased=0;
|
||
|
+ short firstSectorNumber=1;
|
||
|
short swapSides=0;
|
||
|
int n,rsize;
|
||
|
char *verify_buffer = NULL;
|
||
|
@@ -673,6 +676,10 @@
|
||
|
(void *) &zeroBased,
|
||
|
"Start numbering sectors from 0 instead of 1 (not readable by normal I/O)" },
|
||
|
|
||
|
+ { '\0', "first-sector-number", 1, EO_TYPE_SHORT, 1, 0,
|
||
|
+ (void *) &firstSectorNumber,
|
||
|
+ "Number of first sector (by default, 1)" },
|
||
|
+
|
||
|
{ '\0', 0 }
|
||
|
};
|
||
|
|
||
|
@@ -693,6 +700,15 @@
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
+ if(zeroBased) {
|
||
|
+ if(firstSectorNumber == 1)
|
||
|
+ firstSectorNumber = 0;
|
||
|
+ else if(firstSectorNumber > 1) {
|
||
|
+ fprintf(stderr, "Contradiction between zeroBased and firstSectorNumber");
|
||
|
+ exit(1);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
/* sanity checking */
|
||
|
if (sizecode < 0 || sizecode >= MAX_SIZECODE) {
|
||
|
fprintf(stderr,"Bad sizecode %d\n", sizecode);
|
||
|
@@ -730,7 +746,7 @@
|
||
|
while(1) {
|
||
|
fd[0].fd = open(fd[0].name, O_RDWR | O_NDELAY | O_EXCL);
|
||
|
|
||
|
- /* we open the disk wronly/rdwr in order to check write
|
||
|
+ /* we open the disk wronly/rdwr in order to check write
|
||
|
* protect */
|
||
|
if (fd[0].fd < 0) {
|
||
|
perror("open");
|
||
|
@@ -778,7 +794,7 @@
|
||
|
|
||
|
|
||
|
if(have_geom) {
|
||
|
- if(mask & (SET_SECTORS | SET_CYLINDERS |
|
||
|
+ if(mask & (SET_SECTORS | SET_CYLINDERS |
|
||
|
SET_HEADS | SET_SIZECODE | SET_2M | SET_RATE)) {
|
||
|
fprintf(stderr,
|
||
|
"Cannot mix old style and new style geometry spec\n");
|
||
|
@@ -805,17 +821,14 @@
|
||
|
break;
|
||
|
}
|
||
|
stretch = geometry.stretch & 1;
|
||
|
-#ifdef FD_ZEROBASED
|
||
|
- if(geometry.stretch & FD_ZEROBASED) {
|
||
|
- zeroBased = 1;
|
||
|
+ if(geometry.stretch & FD_SECTBASEMASK) {
|
||
|
+ firstSectorNumber =
|
||
|
+ ((geometry.stretch & FD_SECTBASEMASK)>>2)^1;
|
||
|
}
|
||
|
-#endif
|
||
|
-#ifdef FD_SWAPSIDES
|
||
|
if(geometry.stretch & FD_SWAPSIDES) {
|
||
|
swapSides = 1;
|
||
|
}
|
||
|
-#endif
|
||
|
- mask |= SET_SECTORS | SET_CYLINDERS |
|
||
|
+ mask |= SET_SECTORS | SET_CYLINDERS |
|
||
|
SET_SIZECODE | SET_2M | SET_RATE;
|
||
|
} else {
|
||
|
/* density */
|
||
|
@@ -831,7 +844,7 @@
|
||
|
density = DRIVE_DEFAULTS.density;
|
||
|
if ( mask & SET_RATE ){
|
||
|
for (i=0; i< density; ++i) {
|
||
|
- if(fd[0].rate ==
|
||
|
+ if(fd[0].rate ==
|
||
|
DRIVE_DEFAULTS.fmt[i].rate)
|
||
|
density=i;
|
||
|
}
|
||
|
@@ -867,13 +880,7 @@
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- fd[0].zeroBased = zeroBased;
|
||
|
-#ifndef FD_ZEROBASED
|
||
|
- if(zeroBased) {
|
||
|
- noverify = 1;
|
||
|
- }
|
||
|
-#endif
|
||
|
-
|
||
|
+ fd[0].firstSectorNumber = firstSectorNumber;
|
||
|
fd[0].swapSides = swapSides;
|
||
|
|
||
|
if (cylinders > fd[0].drvprm.tracks) {
|
||
|
@@ -914,7 +921,7 @@
|
||
|
header_size = 62;
|
||
|
|
||
|
if(! (mask & (SET_DEVIATION | SET_MARGIN)) &&
|
||
|
- (drivedesc.mask & (1 << FE__DEVIATION))) {
|
||
|
+ (drivedesc.mask & (1 << FE__DEVIATION))) {
|
||
|
deviation = drivedesc.type.deviation;
|
||
|
mask |= SET_DEVIATION;
|
||
|
}
|
||
|
@@ -947,14 +954,14 @@
|
||
|
"add the following line to " DRIVEPRMFILE ":\n");
|
||
|
fprintf(stdout,
|
||
|
"drive%d: deviation=%d\n",
|
||
|
- fd[0].drive,
|
||
|
+ fd[0].drive,
|
||
|
(fd[0].raw_capacity-old_capacity)*1000000/
|
||
|
old_capacity);
|
||
|
fprintf(stderr,
|
||
|
"CAUTION: The line is drive and controller "
|
||
|
- "specific, so it should be\n"
|
||
|
+ "specific, so it should be\n"
|
||
|
"removed before installing a new "
|
||
|
- "drive %d or floppy controller.\n\n",
|
||
|
+ "drive %d or floppy controller.\n\n",
|
||
|
fd[0].drive);
|
||
|
}
|
||
|
}
|
||
|
@@ -981,7 +988,7 @@
|
||
|
if (verbosity == 9) {
|
||
|
for (i=0; i<fd[0].dsect; ++i)
|
||
|
printf("s=%2d S=%2d o=%2d\n",
|
||
|
- fd[0].sequence[i].sect,
|
||
|
+ fd[0].sequence[i].sect + firstSectorNumber,
|
||
|
fd[0].sequence[i].size,
|
||
|
fd[0].sequence[i].offset);
|
||
|
|
||
|
@@ -1004,9 +1011,10 @@
|
||
|
if (verbosity == 9){
|
||
|
for (i=0; i< fd0.dsect; i++)
|
||
|
printf("s=%2d S=%2d o=%2d\n",
|
||
|
- fd0.sequence[i].sect,
|
||
|
- fd0.sequence[i].size,
|
||
|
- fd0.sequence[i].offset);
|
||
|
+ fd0.sequence[i].sect +
|
||
|
+ fd0.firstSectorNumber,
|
||
|
+ fd0.sequence[i].size,
|
||
|
+ fd0.sequence[i].offset);
|
||
|
|
||
|
printf("fd[0].sizecode=%d\n", fd0.sizecode);
|
||
|
printf("fd[0].fmt_gap=%d\n", fd0.fmt_gap);
|
||
|
@@ -1019,11 +1027,9 @@
|
||
|
parameters.head = heads;
|
||
|
parameters.track = cylinders;
|
||
|
parameters.size = cylinders * heads * sectors;
|
||
|
- parameters.stretch = stretch
|
||
|
-#ifdef FD_ZEROBASED
|
||
|
- | (zeroBased ? 4 : 0)
|
||
|
-#endif
|
||
|
- | (swapSides ? 2 : 0);
|
||
|
+ parameters.stretch = stretch
|
||
|
+ | (swapSides ? 2 : 0)
|
||
|
+ | ((1^firstSectorNumber) << 2);
|
||
|
parameters.gap = fd[0].gap;
|
||
|
if ( !use_2m)
|
||
|
fd0.rate = fd[0].rate;
|
||
|
@@ -1109,7 +1115,8 @@
|
||
|
ioctl(fd[0].fd, FDFLUSH );
|
||
|
close(fd[0].fd);
|
||
|
|
||
|
- if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2 && !zeroBased)
|
||
|
+ if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2 &&
|
||
|
+ firstSectorNumber == 1)
|
||
|
dosdrive = fd[0].drive+'a';
|
||
|
|
||
|
if (dosdrive) {
|
||
|
@@ -1133,14 +1140,14 @@
|
||
|
setenv("MTOOLS_RATE_ANY", env_buffer,1);
|
||
|
if(system(command_buffer)){
|
||
|
fprintf(stderr,"\nwarning: mformat error\n");
|
||
|
- /*exit(1);*/
|
||
|
- /* Do not fail, if mformat happens to not be
|
||
|
+ /*exit(1);*/
|
||
|
+ /* Do not fail, if mformat happens to not be
|
||
|
* installed. The user might have wanted to make
|
||
|
* an ext2 disk for instance */
|
||
|
dosverify = 0;
|
||
|
}
|
||
|
} else {
|
||
|
- if(!zeroBased)
|
||
|
+ if(firstSectorNumber != 1)
|
||
|
fprintf(stderr,
|
||
|
"\nwarning: mformat not called because DOS drive unknown\n");
|
||
|
/*exit(1);*/
|
||
|
@@ -1173,7 +1180,7 @@
|
||
|
n = read(fd[0].fd,verify_buffer,rsize);
|
||
|
if ( n < 0){
|
||
|
perror("read");
|
||
|
- fprintf(stderr,
|
||
|
+ fprintf(stderr,
|
||
|
"remaining %d\n", n);
|
||
|
exit(1);
|
||
|
}
|
||
|
diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/superformat.h fdutils/src/superformat.h
|
||
|
--- fdutils-5.5/src/superformat.h 2002-11-02 14:36:45.000000000 +0100
|
||
|
+++ fdutils/src/superformat.h 2008-10-27 20:17:54.000000000 +0100
|
||
|
@@ -83,7 +83,7 @@
|
||
|
int length; /* length of the track */
|
||
|
int rotations; /* how many time do we have to go over 0 to read
|
||
|
* the track */
|
||
|
- int zeroBased; /* 1 if sector numbering starts at zero */
|
||
|
+ int firstSectorNumber; /* Number of first sector (1, by default) */
|
||
|
int swapSides; /* if logical side 0 is on physical 1 and vice-versa */
|
||
|
};
|
||
|
|