SOURCE_DRIVE DRVSTR
diff -u --recursive --new-file ftape-tools-1.08/doc/html/Vtblc_Overview.html ftape-tools-1.09/doc/html/Vtblc_Overview.html
--- ftape-tools-1.08/doc/html/Vtblc_Overview.html Sun Jun 25 19:56:16 2000
+++ ftape-tools-1.09/doc/html/Vtblc_Overview.html Sun Jul 23 15:58:59 2000
@@ -1,5 +1,5 @@
-
+
Vtblc Overview
diff -u --recursive --new-file ftape-tools-1.08/doc/html/Vtblc_Synopsis.html ftape-tools-1.09/doc/html/Vtblc_Synopsis.html
--- ftape-tools-1.08/doc/html/Vtblc_Synopsis.html Sun Jun 25 19:56:16 2000
+++ ftape-tools-1.09/doc/html/Vtblc_Synopsis.html Sun Jul 23 15:58:59 2000
@@ -1,5 +1,5 @@
-
+
Vtblc Synopsis
@@ -27,9 +27,10 @@
[--append=[label=LABEL ][,date=[DATE ]][,start=SEG_ID ][,end=SEG_ID ]
[--modify=[label=LABEL ][,date=[DATE ]][,start=SEG_ID ][,end=SEG_ID ]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f FILE ] [-# NR ] [-t [SIZE ]]
[-a SUBOPTIONS ] [-m SUBOPTIONS ]
+ [--bsm] [-b]
diff -u --recursive --new-file ftape-tools-1.08/doc/html/index.html ftape-tools-1.09/doc/html/index.html
--- ftape-tools-1.08/doc/html/index.html Sun Jun 25 19:56:15 2000
+++ ftape-tools-1.09/doc/html/index.html Sun Jul 23 15:58:59 2000
@@ -1,12 +1,12 @@
-
+
Top
-
The Ftape Tools Manual Ftape-Tools version 1.08 Ftape version 4.03 25 June 2000
Copyright © 25 June 2000 Claus-Justus Heine
+
The Ftape Tools Manual Ftape-Tools version 1.09 Ftape version 4.03 22 July 2000
Copyright © 22 July 2000 Claus-Justus Heine
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
@@ -31,7 +31,7 @@
for use with the ftape floppy tape driver for Linux.
-This document applies to version 1.08 of the ftape-tools
+This document applies to version 1.09 of the ftape-tools
package.
diff -u --recursive --new-file ftape-tools-1.08/doc/sgml/ftape-tools.sgml ftape-tools-1.09/doc/sgml/ftape-tools.sgml
--- ftape-tools-1.08/doc/sgml/ftape-tools.sgml Sun Jun 25 19:56:21 2000
+++ ftape-tools-1.09/doc/sgml/ftape-tools.sgml Sun Jul 23 15:59:03 2000
@@ -5,14 +5,14 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
-This document applies to version 1.08 of the ftape-tools
+This document applies to version 1.09 of the ftape-tools
package.
-Copyright © 25 June 2000
+Copyright © 22 July 2000
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -465,7 +465,7 @@
better off when using the programs provided in this package. Also, there
is a small collection of patches and tips and tricks for commonly used
backup programs contains in subdirectories under the contrib/
-(See [) subdirectory.
+(see ][) subdirectory.
]
All compiled programs of this distribution show a banner of the
@@ -475,7 +475,7 @@
root@anaxagoras:claus# PROGRAM --version
-PROGRAM (ftape-tools) 1.08
+PROGRAM (ftape-tools) 1.09
@@ -893,7 +893,7 @@
This is a non-destructive test, but nevertheless it has to be enabled
using the --enable-tapetests option. See [. The test-suite is
-located under ][/usr/src/ftape-tools-1.08/]testsuite/ .
+located under [/usr/src/ftape-tools-1.09/]testsuite/ .
There was a bug report that sometimes the ftape-4.03 driver messes up
the pending signals of a process.
@@ -907,7 +907,7 @@
-[/usr/src/ftape-tools-1.08/]testsuite/ftsignal
+[/usr/src/ftape-tools-1.09/]testsuite/ftsignal
@@ -1046,7 +1046,7 @@
root@anaxagoras:claus# ftformat --version
-ftformat (ftape-tools) 1.08
+ftformat (ftape-tools) 1.09
@@ -1073,7 +1073,8 @@
[--verbose] [--file=FILE] [--parsable-output]
[--label=LABEL] [--omit-erase] [--discard-header]
[--no-reference-bursts] [--print-header]
- [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]]
+ [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]
+ [,erase-cartridge]]]
[--dma-memory=SIZE] [--mode=MODE]
[--format-parameters=[qic-standard=QIC_STD]
[,format-code=FORMAT_CODE][,floppy-head-max=MAX_FLOPPY_HEAD]
@@ -1185,7 +1186,7 @@
bad sector map is also dumped.
---verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]
+--verify-only[=[erase-bad-sector-map][,dont-write-header-segments][,erase-cartridge]]
Only update the bad sector map, don't re-format. Only possible with
@@ -1218,6 +1219,15 @@
--print-header switch when using this option. Note that
ftformat permits verifying of read-only cartridges when
dont-write-header-segments is in effect.
+
+
+erase-cartridge
+
+
+Erase cartridge before verifying. Note: this is different from
+the erasing the format of the cartridge (see
+--omit-erase ). Here it simply means to fill all segments
+with zero bytes prior to verifying.
@@ -1502,7 +1512,7 @@
reset fsf bsf fsr bsr eof weof rewind offline rewoffl eject retension bsfm fsfm
asf eom seod erase ras1 ras2 ras3 setblk setdensity seek tell setdrvbuffer lock
-unlock load unload compression setpart rdftseg volinfo getsize status
+unlock load unload compression setpart rdftseg volinfo getsize ftmode status
Options>
@@ -1793,31 +1803,35 @@
[--append=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f FILE] [-# NR] [-t [SIZE]]
[-a SUBOPTIONS] [-m SUBOPTIONS]
+ [--bsm] [-b]
Vtblc Options>
--f, --file=FILE
+-#, --vtbl-entry=NR
-Tape device to use. Default is /dev/rawft0 .
+Specify the volume number for the --modify option. Note:
+The option --print always displays the entire
+volume table regardless what has been specified with the
+--vtbl-entry option.
--h, -?, --help, --usage
+-a, --append
-Print help information to stdout .
+Append an entry to the end of the volume table.
--V, --version
+-b, --bsm
-Print version information to stdout
+Print the bad sector map and quit.
-d, --debug
@@ -1826,47 +1840,16 @@
Unused yet.
--v, --verbose
-
-
-Unused yet.
-
-
--#, --vtbl-entry=NR
-
-
-Specify the volume number for the --modify option. Note:
-The option --print always displays the entire
-volume table regardless what has been specified with the
---vtbl-entry option.
-
-
--p, --print[=tagged]
-
-
-Print the volume table entry given by --vtbl-entry or the entire
-table if --vtbl-entry has been omitted. If no other action is
-specified then --print is the default.
-
-
-If the argument tagged is given, produce output in a tagged
-format, less readable, but easier to parse by graphical front ends. The
-output is in the same keyword - value format that is accepted as input
-by the --modify and --append options. See below.
-
-
--t, --truncate[=SIZE]
+-f, --file=FILE
-Truncate the volume table to SIZE entries by filling the remainder
-with zero bytes. If SIZE is omitted then the last entry is
-deleted.
+Tape device to use. Default is /dev/rawft0 .
--a, --append
+-h, -?, --help, --usage
-Append an entry to the end of the volume table.
+Print help information to stdout .
-m, --modify
@@ -1920,6 +1903,40 @@
The valid tag - value pairs are listed below.
+
+-p[tagged], --print[=tagged]
+
+
+Print the volume table entry given by --vtbl-entry or the entire
+table if --vtbl-entry has been omitted. If no other action is
+specified then --print is the default.
+
+
+If the argument tagged is given, produce output in a tagged
+format, less readable, but easier to parse by graphical front ends. The
+output is in the same keyword - value format that is accepted as input
+by the --modify and --append options. See below.
+
+
+-t, --truncate[=SIZE]
+
+
+Truncate the volume table to SIZE entries by filling the remainder
+with zero bytes. If SIZE is omitted then the last entry is
+deleted.
+
+
+-V, --version
+
+
+Print version information to stdout
+
+
+-v, --verbose
+
+
+Be verbose.
+
vtblc interpretes the following keywords - values pairs with the
@@ -1967,9 +1984,39 @@
SIGNATURE SIG
-Valid signature string. Only VTBL is allowed yet.
+Valid signature string. Must be one out of VTBL , XTBL ,
+EXVT and UTID . If this tag is used it MUST be the first
+entry after the ENTRY tag. If the SIGNATURE tag is
+missing, VTBL is assumed.
+
+
+The EXVT tag is recognized, but vtblc does not make use of the
+volume table overflow extension.
+
+
+
+If any other signature than VTBL was given, then the only other
+tag recoginized is
+
+
+ENTRY_DATA HEX
+
+
+Data for the volume table entry. HEX is a string of hexadecimal
+byte values, e.g. "0x01 0x4f ..." of length at most 124
+(i.e. 128 minus length of signature). If less bytes are presented the
+entry will be padded with zeroes. The string must be surrounded by
+double quotes. The hexadecimal values have to be separated by spaces.
+
+
+
+The following entries are allowed for the signature vtbl :
+
+
+
+
START STARTSEG
@@ -1982,6 +2029,14 @@
Last segment of this volume.
+NUM_SEGMENTS NUM
+
+
+Number of segments occupied by this volume. This has no effect for
+cartridges with less or equal than 2^16=65536 segments. For larger
+cartridges this value is stored in the volume table entry.
+
+
DESCRIPTION DESC
@@ -1999,63 +2054,83 @@
FLAG_VENDOR_SPECIFIC VAL
-Ignored by ftape .
+For cartridges with more than 2^16=65536 segments signals that the
+remainder of the volume table entry is vendor specific.
+
+
+For cartridges with less segments signals that remainder of volume table
+entry conforms to QIC-113 if the value of QIC_MAJOR is
+113 . Otherwise signals that the remainder of the volume table
+entry is vendor specific.
+
+
+
+If the remainder of the volume table entry has been flagged vendor specific (see description of FLAG_VENDOR_SPECIFIC above) then the other
+additional recogized tag is
-FLAG_MULTI_CARTRIDGE VAL
+
+
+VENDOR_DATA HEX
-Ignored by ftape .
+A string of hexadecimal values of lenght at most 72 to fill the
+remainder of the volume table entry. Smaller strings will be padded
+with zero bytes. The string must be surrounded by double quotes, e.g.
+"0x01 0x02 ..." .
+
+
+
+If FLAG_VENDOR_SPECIFIC is not set, then the following additional tags
+are allowed:
+
+
+FLAG_MULTI_CARTRIDGE VAL
+
+
FLAG_NOT_VERIFIED VAL
-
-Ignored by ftape .
-
FLAG_REDIRECTION_INHIBIT VAL
-
-Ignored by ftape .
-
FLAG_SEGMENT_SPANNING VAL
-
-Ignored by ftape .
-
FLAG_DIRECTORY_LAST VAL
-
-Ignored by ftape .
-
FLAG_RESERVED_6 VAL
-
-Ignored by ftape .
-
FLAG_RESERVED_7 VAL
+
+MULTI_CARTRIDGE_COUNT VAL
+
+
+QIC_MAJOR VAL
+
-Ignored by ftape .
+Major number of QIC spec cartridge conforms to, only for cartridges with
+more than 65536 segments. VAL should be 113 for all cases.
-MULTI_CARTRIDGE_COUNT VAL
+QIC_MINOR VAL
-Ignored by ftape .
+Minor revision number of QIC spec. Only for cartridges with more thatn
+65536 segments. At the time of this writing, QIC-113, Rev. G, is is the
+latest one, so VAL should be 7.
VENDOR_EXTENSION HEX
-Vendor extension data. HEX is a string of hexadecimal byte values,
-e.g. 0x01 0x4f ...
-Don't touch, these fields are used by ftape .
+Vendor extension data. HEX is a string of hexadecimal byte values
+surrounded by double quotes, e.g. "0x01 0x4f ..." .
PASSWORD HEX
@@ -2079,7 +2154,7 @@
OS_VERSION HEX
-Here HEX is a hexadecimal 4 bytes value.
+Here HEX is a hexadecimal 2 bytes value.
SOURCE_DRIVE DRVSTR
@@ -2299,7 +2374,7 @@
A string identifying the library version, e.g.
-"libftvt.la (ftape-tools) 1.07.1\n" .
+"libftvt.la (ftape-tools) 1.09\n" .
unsigned long flags
@@ -2703,7 +2778,7 @@
Flush the volume table to tape. Note that we try to preserve as much of
the original volume table as possible. For this reason, BUFFER
must be a pointer to the area previously filled by
-FTVT_READ(). Only those entries are copied from VOLUMES to
+ftvt_read() . Only those entries are copied from VOLUMES to
BUFFER which have been modified by the library. If no entry has
been modified, the volume table isn't written back to tape
unless DO_WRITE is set to 1 .
@@ -2732,7 +2807,7 @@
u_int8_t *BUFFER
-The buffer previously filled by FTVT_READ(). This must be the same
+The buffer previously filled by ftvt_read() . This must be the same
pointer as given to ftvt_read() .
diff -u --recursive --new-file ftape-tools-1.08/doc/sgml/ftape-tools.txt ftape-tools-1.09/doc/sgml/ftape-tools.txt
--- ftape-tools-1.08/doc/sgml/ftape-tools.txt Sun Jun 25 19:56:28 2000
+++ ftape-tools-1.09/doc/sgml/ftape-tools.txt Sun Jul 23 15:59:09 2000
@@ -4,7 +4,7 @@
This file documents the programs contained in the ftape-tools package
for use with the _f_t_a_p_e floppy tape driver for Linux. This document
- applies to version 1.08 of the _f_t_a_p_e_-_t_o_o_l_s package.
+ applies to version 1.09 of the _f_t_a_p_e_-_t_o_o_l_s package.
______________________________________________________________________
Table of Contents
@@ -173,7 +173,7 @@
- Copyright (C) 25 June 2000 Claus-Justus Heine
+ Copyright (C) 22 July 2000 Claus-Justus Heine
(heine@instmath.rwth-aachen.de)
Permission is granted to make and distribute verbatim copies
@@ -652,14 +652,14 @@
better off when using the programs provided in this package. Also,
there is a small collection of patches and tips and tricks for
commonly used backup programs contains in subdirectories under the
- contrib/ (See ``Contrib'') subdirectory.
+ contrib/ (see ``Contrib'') subdirectory.
All compiled programs of this distribution show a banner of the
following form when run with the --version.
root@anaxagoras:claus# PROGRAM --version
- PROGRAM (ftape-tools) 1.08
+ PROGRAM (ftape-tools) 1.09
@@ -1081,7 +1081,7 @@
This is a non-destructive test, but nevertheless it has to be
enabled using the --enable-tapetests option. See ``Running tests
after compilation of the programs''. The test-suite is located
- under [/usr/src/ftape-tools-1.08/]testsuite/. There was a bug
+ under [/usr/src/ftape-tools-1.09/]testsuite/. There was a bug
report that sometimes the _f_t_a_p_e_-_4_._0_3 driver messes up the
pending signals of a process.
@@ -1095,7 +1095,7 @@
- [/usr/src/ftape-tools-1.08/]testsuite/ftsignal
+ [/usr/src/ftape-tools-1.09/]testsuite/ftsignal
@@ -1244,7 +1244,7 @@
root@anaxagoras:claus# ftformat --version
- ftformat (ftape-tools) 1.08
+ ftformat (ftape-tools) 1.09
@@ -1272,7 +1272,8 @@
[--verbose] [--file=FILE] [--parsable-output]
[--label=LABEL] [--omit-erase] [--discard-header]
[--no-reference-bursts] [--print-header]
- [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]]
+ [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]
+ [,erase-cartridge]]]
[--dma-memory=SIZE] [--mode=MODE]
[--format-parameters=[qic-standard=QIC_STD]
[,format-code=FORMAT_CODE][,floppy-head-max=MAX_FLOPPY_HEAD]
@@ -1317,7 +1318,6 @@
Unused yet.
-
-v, --verbose
Unused yet.
@@ -1384,7 +1384,8 @@
- --verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]
+ --verify-only[=[erase-bad-sector-map][,dont-write-header-seg-
+ ments][,erase-cartridge]]
Only update the bad sector map, don't re-format. Only possible
with already formatted cartridges. With this option one can try
@@ -1418,6 +1419,15 @@
+ erase-cartridge
+
+ Erase cartridge before verifying. _N_o_t_e_: this is different
+ from the erasing the _f_o_r_m_a_t of the cartridge (see --omit-
+ erase). _H_e_r_e it simply means to fill all segments with zero
+ bytes prior to verifying.
+
+
+
-M --dma-memory=SIZE
Amount of dma memory to mmap. Measured in kb.Normally not
@@ -1450,6 +1460,8 @@
separated list of the following parameters:
+
+
qic-standard=QIC_STD
@@ -1569,6 +1581,7 @@
likewise for 307ft cartridge, 120MB
+
qic80-425ft
likewise for 425ft cartridge, 170MB
@@ -1582,7 +1595,7 @@
- QIC-40, QIC-80, QIC-3010 and QIC-3020
+ QIC-40, QIC-80, QIC-3010 and QIC-3020
@@ -1635,8 +1648,6 @@
+o Reformat a Travan-3 cartridge with damaged format:
-
-
ftformat --mode=auto --format-parameters qic-standard=TR-3 \
--omit-erase --discard-header
@@ -1701,10 +1712,7 @@
reset fsf bsf fsr bsr eof weof rewind offline rewoffl eject retension bsfm fsfm
asf eom seod erase ras1 ras2 ras3 setblk setdensity seek tell setdrvbuffer lock
- unlock load unload compression setpart rdftseg volinfo getsize status
-
-
-
+ unlock load unload compression setpart rdftseg volinfo getsize ftmode status
66..22..22.. OOppttiioonnss
@@ -1770,6 +1778,8 @@
77.. LLiissttttaappee
+
+
77..11.. LLiissttttaappee OOvveerrvviieeww
_l_i_s_t_t_a_p_e is a simple script that lists the contents of a floppy tape
@@ -1833,6 +1843,9 @@
Print version information.
+
+
+
77..22..33.. LLiissttttaappee EExxaammpplleess
The following is some sample output of the Perl version of the
@@ -1844,19 +1857,17 @@
-
-
- claus@anaximander:/automount/home/claus/ > listtape --file /dev/nqft1
- file number block size volume size tape space
- 0 10240 3.0 megabytes 3.0 megabytes
- 1 10240 3.0 megabytes 3.0 megabytes
- 2 10240 66.3 megabytes 66.3 megabytes
+ claus@anaximander:/automount/home/claus/ > listtape --file /dev/nqft1
+ file number block size volume size tape space
+ 0 10240 3.0 megabytes 3.0 megabytes
+ 1 10240 3.0 megabytes 3.0 megabytes
+ 2 10240 66.3 megabytes 66.3 megabytes
- Remaining space: 1.4 gigabytes
- Tape block size: 10240
+ Remaining space: 1.4 gigabytes
+ Tape block size: 10240
@@ -1901,8 +1912,6 @@
_s_w_a_p_o_u_t is called from the command line as follows
-
-
swapout [--version] [--help] [-hv] MEGABYTES
@@ -1967,6 +1976,8 @@
99.. VVttbbllcc
+
+
99..11.. VVttbbllcc OOvveerrvviieeww
_v_t_b_l_c is a small utility (based on a library written in C) which lets
@@ -1978,6 +1989,8 @@
The API of the library is documented in a separate section of this
chapter. See ``API''.
+
+
_v_t_b_l_c is used as a backend by the _f_t_a_p_e_-_t_o_o_l (see ``Ftape-tool'') GUI
front-end.
@@ -2010,9 +2023,10 @@
[--append=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f FILE] [-# NR] [-t [SIZE]]
[-a SUBOPTIONS] [-m SUBOPTIONS]
+ [--bsm] [-b]
@@ -2021,69 +2035,42 @@
- -f, --file=FILE
+ -#, --vtbl-entry=NR
- Tape device to use. Default is /dev/rawft0.
+ Specify the volume number for the --modify option. _N_o_t_e_: The
+ option --print _a_l_w_a_y_s displays the _e_n_t_i_r_e volume table
+ regardless what has been specified with the --vtbl-entry option.
- -h, -?, --help, --usage
- Print help information to stdout.
+ -a, --append
+ Append an entry to the end of the volume table.
- -V, --version
- Print version information to stdout
+ -b, --bsm
+ Print the bad sector map and quit.
- -d, --debug
- Unused yet.
-
-
- -v, --verbose
+ -d, --debug
Unused yet.
- -#, --vtbl-entry=NR
-
- Specify the volume number for the --modify option. _N_o_t_e_: The
- option --print _a_l_w_a_y_s displays the _e_n_t_i_r_e volume table
- regardless what has been specified with the --vtbl-entry option.
-
-
-
- -p, --print[=tagged]
-
- Print the volume table entry given by --vtbl-entry or the entire
- table if --vtbl-entry has been omitted. If no other action is
- specified then --print is the default.
-
-
- If the argument tagged is given, produce output in a tagged
- format, less readable, but easier to parse by graphical front
- ends. The output is in the same keyword - value format that is
- accepted as input by the --modify and --append options. See
- below.
-
-
-
- -t, --truncate[=SIZE]
+ -f, --file=FILE
- Truncate the volume table to SIZE entries by filling the
- remainder with zero bytes. If SIZE is omitted then the last
- entry is deleted.
+ Tape device to use. Default is /dev/rawft0.
- -a, --append
+ -h, -?, --help, --usage
- Append an entry to the end of the volume table.
+ Print help information to stdout.
@@ -2110,6 +2097,7 @@
is omitted the current local time is used instead.
+
start=SEG_ID
The starting segment for this volume table entry.
@@ -2135,6 +2123,41 @@
The valid tag - value pairs are listed below.
+
+ -p[tagged], --print[=tagged]
+
+ Print the volume table entry given by --vtbl-entry or the entire
+ table if --vtbl-entry has been omitted. If no other action is
+ specified then --print is the default.
+
+
+ If the argument tagged is given, produce output in a tagged
+ format, less readable, but easier to parse by graphical front
+ ends. The output is in the same keyword - value format that is
+ accepted as input by the --modify and --append options. See
+ below.
+
+
+
+ -t, --truncate[=SIZE]
+
+ Truncate the volume table to SIZE entries by filling the
+ remainder with zero bytes. If SIZE is omitted then the last
+ entry is deleted.
+
+
+
+ -V, --version
+
+ Print version information to stdout
+
+
+
+ -v, --verbose
+
+ Be verbose.
+
+
_v_t_b_l_c interpretes the following keywords - values pairs with the
--append and --modify options:
@@ -2152,6 +2175,7 @@
VVTTBBLL SSTTAARRTT
+
VVTTBBLL EENNDD
The entire volume table piped to _v_t_b_l_c has to be surrounded by a
@@ -2176,9 +2200,38 @@
modify multiple volume table entries in a single run by simply
concatenating volume table entry specifications surrounded by
ENTRY NUM - ENTRY END pairs.
+
+
+
SSIIGGNNAATTUURREE SSIIGG
- Valid signature string. Only VTBL is allowed yet.
+ Valid signature string. Must be one out of VTBL, XTBL, EXVT and
+ UTID. If this tag is used it MUST be the first entry after the
+ ENTRY tag. If the SIGNATURE tag is missing, VTBL is assumed.
+
+
+ The EXVT tag is recognized, but vtblc does not make use of the
+ volume table overflow extension.
+
+
+ If any other signature than VTBL was given, then the only other tag
+ recoginized is
+
+
+
+
+ EENNTTRRYY__DDAATTAA HHEEXX
+
+ Data for the volume table entry. HEX is a string of hexadecimal
+ byte values, e.g. "0x01 0x4f ..." of length at most 124 (i.e.
+ 128 minus length of signature). If less bytes are presented the
+ entry will be padded with zeroes. The string must be surrounded
+ by double quotes. The hexadecimal values have to be separated by
+ spaces.
+
+
+ The following entries are allowed for the signature vtbl:
+
@@ -2188,12 +2241,22 @@
+
EENNDD EENNDDSSEEGG
Last segment of this volume.
+ NNUUMM__SSEEGGMMEENNTTSS NNUUMM
+
+ Number of segments occupied by this volume. This has no effect
+ for cartridges with less or equal than 2^16=65536 segments. For
+ larger cartridges this value is stored in the volume table
+ entry.
+
+
+
DDEESSCCRRIIPPTTIIOONN DDEESSCC
Description for this volume table. Will be truncated to 44
@@ -2211,60 +2274,81 @@
FFLLAAGG__VVEENNDDOORR__SSPPEECCIIFFIICC VVAALL
- Ignored by _f_t_a_p_e.
+ For cartridges with more than 2^16=65536 segments signals that
+ the remainder of the volume table entry is vendor specific.
+ For cartridges with less segments signals that remainder of
+ volume table entry conforms to QIC-113 if the value of QIC_MAJOR
+ is 113. Otherwise signals that the remainder of the volume table
+ entry is vendor specific.
- FFLLAAGG__MMUULLTTII__CCAARRTTRRIIDDGGEE VVAALL
- Ignored by _f_t_a_p_e.
+ If the remainder of the volume table entry has been flagged vendor
+ specific (see description of FLAG_VENDOR_SPECIFIC above) then the
+ other additional recogized tag is
- FFLLAAGG__NNOOTT__VVEERRIIFFIIEEDD VVAALL
- Ignored by _f_t_a_p_e.
+ VVEENNDDOORR__DDAATTAA HHEEXX
+ A string of hexadecimal values of lenght at most 72 to fill the
+ remainder of the volume table entry. Smaller strings will be
+ padded with zero bytes. The string must be surrounded by double
+ quotes, e.g. "0x01 0x02 ...".
- FFLLAAGG__RREEDDIIRREECCTTIIOONN__IINNHHIIBBIITT VVAALL
+ If FLAG_VENDOR_SPECIFIC is not set, then the following additional tags
+ are allowed:
- Ignored by _f_t_a_p_e.
- FFLLAAGG__SSEEGGMMEENNTT__SSPPAANNNNIINNGG VVAALL
+ FFLLAAGG__MMUULLTTII__CCAARRTTRRIIDDGGEE VVAALL
- Ignored by _f_t_a_p_e.
+ FFLLAAGG__NNOOTT__VVEERRIIFFIIEEDD VVAALL
+
+
+ FFLLAAGG__RREEDDIIRREECCTTIIOONN__IINNHHIIBBIITT VVAALL
+
+
+ FFLLAAGG__SSEEGGMMEENNTT__SSPPAANNNNIINNGG VVAALL
FFLLAAGG__DDIIRREECCTTOORRYY__LLAASSTT VVAALL
- Ignored by _f_t_a_p_e.
+
FFLLAAGG__RREESSEERRVVEEDD__66 VVAALL
- Ignored by _f_t_a_p_e.
+ FFLLAAGG__RREESSEERRVVEEDD__77 VVAALL
- FFLLAAGG__RREESSEERRVVEEDD__77 VVAALL
+ MMUULLTTII__CCAARRTTRRIIDDGGEE__CCOOUUNNTT VVAALL
- Ignored by _f_t_a_p_e.
+ QQIICC__MMAAJJOORR VVAALL
+ Major number of QIC spec cartridge conforms to, only for
+ cartridges with more than 65536 segments. VAL should be 113 for
+ all cases.
- MMUULLTTII__CCAARRTTRRIIDDGGEE__CCOOUUNNTT VVAALL
- Ignored by _f_t_a_p_e.
+
+ QQIICC__MMIINNOORR VVAALL
+
+ Minor revision number of QIC spec. Only for cartridges with more
+ thatn 65536 segments. At the time of this writing, QIC-113,
+ Rev. G, is is the latest one, so VAL should be 7.
VVEENNDDOORR__EEXXTTEENNSSIIOONN HHEEXX
Vendor extension data. HEX is a string of hexadecimal byte
- values, e.g. 0x01 0x4f ... DDoonn''tt ttoouucchh,, tthheessee ffiieellddss aarree uusseedd
- bbyy _f_t_a_p_e.
+ values surrounded by double quotes, e.g. "0x01 0x4f ...".
@@ -2288,9 +2372,7 @@
OOSS__VVEERRSSIIOONN HHEEXX
- Here HEX is a hexadecimal 4 bytes value.
-
-
+ Here HEX is a hexadecimal 2 bytes value.
SSOOUURRCCEE__DDRRIIVVEE DDRRVVSSTTRR
@@ -2308,6 +2390,8 @@
Ignored by _f_t_a_p_e.
+
+
CCOOMMPPRREESSSSIIOONN__FFLLAAGGSS HHEEXXBBYYTTEE
@@ -2356,7 +2440,6 @@
-
Same cartridge, but after setting the label of the last volume to
something funny with vtblc --print --vtbl-entry=1
--modify=label="something funny" and after resetting the date with
@@ -2374,6 +2457,8 @@
2 VTBL "something funny " 00:00:00 01/01/70 217 2559 4.32%
+
+
You may want to try _f_t_a_p_e_-_t_o_o_l to manipulate the volume table in a
much more comfortable way (see ``Ftape-tool'').
@@ -2418,6 +2503,9 @@
and [INCLUDEDIR/]ftvt.h .
+
+
+
99..44..22.. TThhee AAPPII ooff lliibbvvttbbllcc
All global functions and data structures of _l_i_b_f_t_v_t are prefixes by
@@ -2440,6 +2528,8 @@
defined so far, namely
+
+
FTVT_VERBOSE
Be verbose. If not set, no error messages will be printed to
@@ -2481,6 +2571,7 @@
+
Its components have the following meaning:
@@ -2489,7 +2580,7 @@
const char *version
A string identifying the library version, e.g. "libftvt.la
- (ftape-tools) 1.07.1\n".
+ (ftape-tools) 1.09\n".
@@ -2505,7 +2596,6 @@
int first_seg
-
int last_seg
The so called _f_o_r_m_a_t _c_o_d_e identifier of the floppy tape
@@ -2548,7 +2638,6 @@
itself with the volume table segment.
-
mode_t MODE
This is the mode argument passed to the open() function. See
@@ -2615,9 +2704,6 @@
Normal drive operation has been disable by a previous call to
the MTIOCTOP ioctl with an MTOFFL parameter, e.g. by running
the program mt -f /dev/qft0 offline
-
-
-
Error: This is not a floppy tape drive!
The MT_ISFTAPE_FLAG isn't set in the mt_type component of the
@@ -2638,8 +2724,11 @@
fprintf(stderr, "ftvt_open() failed: %s\n", info->errstr);
- exit(1);
- }
+
+
+
+ exit(1);
+ }
@@ -2704,19 +2793,19 @@
- if (ftvt_close(tapefd) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
+ if (ftvt_close(tapefd) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
- fprintf(stderr, "ftvt_close() failed: %s\n", info->errstr);
+ fprintf(stderr, "ftvt_close() failed: %s\n", info->errstr);
- exit(1);
- }
+ exit(1);
+ }
@@ -2747,7 +2836,6 @@
ftvt is defined in in [INCLUDEDIR/]ftvt.h .
-
u_int8_t *BUFFER
The buffer to hold the contents of the volume table segment.
@@ -2876,14 +2964,10 @@
Flush the volume table to tape. Note that we try to preserve as much
of the original volume table as possible. For this reason, BUFFER must
- be a pointer to the area previously filled by FTVT_READ(). Only those
+ be a pointer to the area previously filled by ftvt_read(). Only those
entries are copied from VOLUMES to BUFFER which have been modified by
the library. If no entry has been modified, the volume table isn't
written back to tape uunnlleessss DO_WRITE is set to 1.
-
-
-
-
_A_r_g_u_m_e_n_t_s
@@ -2901,10 +2985,9 @@
-
u_int8_t *BUFFER
- The buffer previously filled by FTVT_READ(). This must be the
+ The buffer previously filled by ftvt_read(). This must be the
same pointer as given to ftvt_read().
@@ -3017,9 +3100,6 @@
The libraries volume table representation. This must be the
same pointer as given to ftvt_read().
-
-
-
int MAXNUM
Number of entries in VOLUMES, i.e. the return value of
@@ -3066,37 +3146,58 @@
- VTBL START 2 54199
- ENTRY 0
- SIGNATURE "VTBL"
- START 3
- END 1271
- DESCRIPTION "zftape volume 000"
- DATE "00:00:00 01/01/70"
- FLAG_VENDOR_SPECIFIC 0
- FLAG_MULTI_CARTRIDGE 0
- FLAG_NOT_VERIFIED 1
- FLAG_REDIRECTION_INHIBIT 0
- FLAG_SEGMENT_SPANNING 1
- FLAG_DIRECTORY_LAST 0
- FLAG_RESERVED_6 0
- FLAG_RESERVED_7 0
- MULTI_CARTRIDGE_COUNT 1
- VENDOR_EXTENSION "0x4c 0x49 0x4e 0x55 0x58 0x20 0x5a 0x46 0x54 0x00 0x00 0x28 0x
- 00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00"
- PASSWORD "0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00"
- DIRECTORY_SIZE 0
- DATA_SIZE 37672960
- OS_VERSION 0x0000
- SOURCE_DRIVE
- DEVICE 0x00
- RESERVED_1 0x00
- COMPRESSION_FLAGS 0x3f
- FORMAT 0x00
- RESERVED_2 0x00
- RESERVED_3 0x00
- ENTRY END
- VTBL END
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VTBL START 2 54199
+ ENTRY 0
+ SIGNATURE "VTBL"
+ START 3
+ END 1271
+ DESCRIPTION "zftape volume 000"
+ DATE "00:00:00 01/01/70"
+ FLAG_VENDOR_SPECIFIC 0
+ FLAG_MULTI_CARTRIDGE 0
+ FLAG_NOT_VERIFIED 1
+ FLAG_REDIRECTION_INHIBIT 0
+ FLAG_SEGMENT_SPANNING 1
+ FLAG_DIRECTORY_LAST 0
+ FLAG_RESERVED_6 0
+ FLAG_RESERVED_7 0
+ MULTI_CARTRIDGE_COUNT 1
+ VENDOR_EXTENSION "0x4c 0x49 0x4e 0x55 0x58 0x20 0x5a 0x46 0x54 0x00 0x00 0x28 0x
+ 00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00"
+ PASSWORD "0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00"
+ DIRECTORY_SIZE 0
+ DATA_SIZE 37672960
+ OS_VERSION 0x0000
+ SOURCE_DRIVE
+ DEVICE 0x00
+ RESERVED_1 0x00
+ COMPRESSION_FLAGS 0x3f
+ FORMAT 0x00
+ RESERVED_2 0x00
+ RESERVED_3 0x00
+ ENTRY END
+ VTBL END
+
@@ -3131,7 +3232,6 @@
Side effects
None.
-
Diagnostics
None.
@@ -3231,7 +3331,6 @@
-
Corrupt volume input data: BUFFER
The input data doesn't obey the required format (see ``Vtblc
@@ -3265,16 +3364,14 @@
struct ftvt_ctrl *info = ftvt_get_ctrl();
+ fprintf(stderr, "ftvt_parse_tagged() failed: %s\n", info->errstr);
- fprintf(stderr, "ftvt_parse_tagged() failed: %s\n", info->errstr);
-
-
- (void)ftvt_close(tapefd);
- exit(1);
- }
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
@@ -3298,6 +3395,8 @@
The libraries volume table representation. This must be the
same pointer as given to ftvt_read().
+
+
int NUM_VOLUMES
The number of volumes as returned by ftvt_read() or a
@@ -3330,6 +3429,7 @@
+
Too many volumes: NUM_VOLUMES (MAX_VOLUMES max)
The new number of volumes would exceed the number of volumes
@@ -3364,6 +3464,9 @@
various QIC-something standards. This is year 2000 proof, but will
overflow in year 2097 :-)
+
+
+
_A_r_g_u_m_e_n_t_s
@@ -3459,9 +3562,6 @@
Return Value
-1 on error 0 otherwise.
-
-
-
Side effects
The volume table entry modified by this function is flagged
@@ -3495,21 +3595,20 @@
-
- if (ftvt_set_date(volumes, maxnum, "23:59:59 12/31/70", 1)) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
+ if (ftvt_set_date(volumes, maxnum, "23:59:59 12/31/70", 1)) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
- fprintf(stderr, "ftvt_set_date() failed: %s\n", info->errstr);
+ fprintf(stderr, "ftvt_set_date() failed: %s\n", info->errstr);
- (void)ftvt_close(tapefd);
- exit(1);
- }
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
@@ -3529,8 +3628,6 @@
Pointer to the libraries volume table representation.
-
-
int MAXNUM
Number of entries in VOLUMES (as returned by ftvt_read() or
@@ -3597,15 +3694,14 @@
+ fprintf(stderr, "ftvt_set_label() failed: %s\n", info->errstr);
- fprintf(stderr, "ftvt_set_label() failed: %s\n", info->errstr);
-
- (void)ftvt_close(tapefd);
- exit(1);
- }
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
@@ -3627,7 +3723,6 @@
-
int MAXNUM
Number of entries in VOLUMES (as returned by ftvt_read() or
@@ -3665,7 +3760,6 @@
dirty and this will be written to tape if ftvt_write() is
called.
-
In case of an error an error string is generated and remembered.
It can be retrieved by a call to ftvt_get_ctrl(). See ``Option
Settings''.
@@ -3732,8 +3826,6 @@
_A_r_g_u_m_e_n_t_s
-
-
ftvt *VOLUMES
Pointer to the libraries volume table representation.
@@ -3826,6 +3918,8 @@
}
+
+
1100.. CCoonnttrriibb
The contrib/ subdirectory of the _f_t_a_p_e_-_t_o_o_l_s distribution contains
@@ -3863,6 +3957,7 @@
````AAmmaannddaa,, lliibbffttvvtt''''
+
````AAmmaannddaa,, lliibbvvttbbllcc''''
````AAPPII,, lliibbffttvvtt''''
@@ -3891,7 +3986,6 @@
````DDeejjaaGGnnuu,, ffttffoorrmmaatt''''
-
````DDeejjaaGGnnuu,, ffttmmtt''''
````DDeejjaaGGnnuu,, lliissttttaappee''''
@@ -3995,6 +4089,7 @@
````LLiibbffttvvtt,, AAPPII''''
+
````LLiibbvvttbbllcc''''
````LLiibbvvttbbllcc,, ccoommppaattiibbiilliittyy wwiitthh lliibbffttvvtt''''
@@ -4023,7 +4118,6 @@
````OOppttiioonnss,, <>ffttffoorrmmaatt</eemm>>''''
-
````OOppttiioonnss,, <>ffttmmtt</eemm>>''''
````OOppttiioonnss,, <>lliissttttaappee</eemm>>''''
@@ -4089,7 +4183,6 @@
````SSwwaappoouutt,, ssyynnooppssiiss''''
-
````SSwwaappoouutt,, tteessttiinngg''''
````SSyynnooppssiiss,, <>ffttffoorrmmaatt</eemm>>''''
@@ -4127,6 +4220,8 @@
````TTkk,, rreeqquuiirreemmeennttss''''
+
+
1111..1155.. UU
@@ -4155,7 +4250,6 @@
````VVttbbllcc,, ssyynnooppssiiss''''
-
````VVttbbllcc,, tteessttiinngg''''
````VVttbbllcc..hh''''
@@ -4193,9 +4287,47 @@
````ffttvvtt__sseett__iidd''''
+
````ffttvvtt__sseett__llaabbeell''''
````ffttvvtt__wwrriittee''''
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/Ftformat.texi ftape-tools-1.09/doc/texi/Ftformat.texi
--- ftape-tools-1.08/doc/texi/Ftformat.texi Mon Mar 15 12:01:36 1999
+++ ftape-tools-1.09/doc/texi/Ftformat.texi Sun Jul 23 15:58:34 2000
@@ -95,7 +95,8 @@
[--verbose] [--file=@var{FILE}] [--parsable-output]
[--label=@var{LABEL}] [--omit-erase] [--discard-header]
[--no-reference-bursts] [--print-header]
- [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]]
+ [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]
+ [,erase-cartridge]]]
[--dma-memory=@var{SIZE}] [--mode=@var{MODE}]
[--format-parameters=[qic-standard=@var{QIC_STD}]
[,format-code=@var{FORMAT_CODE}][,floppy-head-max=@var{MAX_FLOPPY_HEAD}]
@@ -177,7 +178,7 @@
Print the contents of the header segment in a keyword-value fashion. The
bad sector map is also dumped.
-@item --verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]
+@item --verify-only[=[erase-bad-sector-map][,dont-write-header-segments][,erase-cartridge]]
Only update the bad sector map, don't re-format. Only possible with
already formatted cartridges. With this option one can try to
"resurrect" cartridges when the tape drive isn't capable of doing a full
@@ -199,6 +200,12 @@
@samp{--print-header} switch when using this option. Note that
@value{ftformat} permits verifying of read-only cartridges when
@samp{dont-write-header-segments} is in effect.
+
+@item erase-cartridge
+Erase cartridge before verifying. @emph{Note:} this is different from
+the erasing the @emph{format} of the cartridge (see
+@samp{--omit-erase}). @emph{Here} it simply means to fill all segments
+with zero bytes prior to verifying.
@end table
@item -M --dma-memory=@var{SIZE}
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/Ftmt.texi ftape-tools-1.09/doc/texi/Ftmt.texi
--- ftape-tools-1.08/doc/texi/Ftmt.texi Tue Feb 23 15:30:06 1999
+++ ftape-tools-1.09/doc/texi/Ftmt.texi Fri Jul 21 09:54:19 2000
@@ -56,7 +56,7 @@
@group
reset fsf bsf fsr bsr eof weof rewind offline rewoffl eject retension bsfm fsfm
asf eom seod erase ras1 ras2 ras3 setblk setdensity seek tell setdrvbuffer lock
-unlock load unload compression setpart rdftseg volinfo getsize status
+unlock load unload compression setpart rdftseg volinfo getsize ftmode status
@end group
@end smallexample
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/Introduction.texi ftape-tools-1.09/doc/texi/Introduction.texi
--- ftape-tools-1.08/doc/texi/Introduction.texi Tue Feb 23 15:22:21 1999
+++ ftape-tools-1.09/doc/texi/Introduction.texi Sat Jul 22 20:51:34 2000
@@ -22,7 +22,7 @@
better off when using the programs provided in this package. Also, there
is a small collection of patches and tips and tricks for commonly used
backup programs contains in subdirectories under the @file{contrib/}
-(@xref{Contrib}) subdirectory.
+(@pxref{Contrib}) subdirectory.
All compiled programs of this distribution show a banner of the
following form when run with the @code{--version}.
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/Vtblc.texi ftape-tools-1.09/doc/texi/Vtblc.texi
--- ftape-tools-1.08/doc/texi/Vtblc.texi Sun Jun 25 18:32:24 2000
+++ ftape-tools-1.09/doc/texi/Vtblc.texi Sat Jul 22 20:52:11 2000
@@ -68,9 +68,10 @@
[--append=[label=@var{LABEL}][,date=[@var{DATE}]][,start=@var{SEG_ID}][,end=@var{SEG_ID}]
[--modify=[label=@var{LABEL}][,date=[@var{DATE}]][,start=@var{SEG_ID}][,end=@var{SEG_ID}]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f @var{FILE}] [-# @var{NR}] [-t [@var{SIZE}]]
[-a @var{SUBOPTIONS}] [-m @var{SUBOPTIONS}]
+ [--bsm] [-b]
@end smallexample
@node Vtblc Options, Vtblc Examples, Vtblc Synopsis, Invoking Vtblc
@@ -80,44 +81,26 @@
@cindex Options, @value{vtblc}
@table @code
-@item -f, --file=@var{FILE}
-Tape device to use. Default is @file{/dev/rawft0}.
-
-@item -h, -?, --help, --usage
-Print help information to @code{stdout}.
-
-@item -V, --version
-Print version information to @code{stdout}
-
-@item -d, --debug
-Unused yet.
-
-@item -v, --verbose
-Unused yet.
-
@item -#, --vtbl-entry=@var{NR}
Specify the volume number for the @code{--modify} option. @emph{Note:}
The option @code{--print} @emph{always} displays the @emph{entire}
volume table regardless what has been specified with the
@code{--vtbl-entry} option.
-@item -p, --print[=tagged]
-Print the volume table entry given by @code{--vtbl-entry} or the entire
-table if @code{--vtbl-entry} has been omitted. If no other action is
-specified then @code{--print} is the default.
+@item -a, --append
+Append an entry to the end of the volume table.
-If the argument @code{tagged} is given, produce output in a tagged
-format, less readable, but easier to parse by graphical front ends. The
-output is in the same keyword - value format that is accepted as input
-by the @code{--modify} and @code{--append} options. See below.
+@item -b, --bsm
+Print the bad sector map and quit.
-@item -t, --truncate[=@var{SIZE}]
-Truncate the volume table to @var{SIZE} entries by filling the remainder
-with zero bytes. If @var{SIZE} is omitted then the last entry is
-deleted.
+@item -d, --debug
+Unused yet.
-@item -a, --append
-Append an entry to the end of the volume table.
+@item -f, --file=@var{FILE}
+Tape device to use. Default is @file{/dev/rawft0}.
+
+@item -h, -?, --help, --usage
+Print help information to @code{stdout}.
@item -m, --modify
Modify the volume table entry given by @code{--vtbl-entry}. If
@@ -151,6 +134,28 @@
The valid tag - value pairs are listed below.
@end table
+
+@item -p[tagged], --print[=tagged]
+Print the volume table entry given by @code{--vtbl-entry} or the entire
+table if @code{--vtbl-entry} has been omitted. If no other action is
+specified then @code{--print} is the default.
+
+If the argument @code{tagged} is given, produce output in a tagged
+format, less readable, but easier to parse by graphical front ends. The
+output is in the same keyword - value format that is accepted as input
+by the @code{--modify} and @code{--append} options. See below.
+
+@item -t, --truncate[=@var{SIZE}]
+Truncate the volume table to @var{SIZE} entries by filling the remainder
+with zero bytes. If @var{SIZE} is omitted then the last entry is
+deleted.
+
+@item -V, --version
+Print version information to @code{stdout}
+
+@item -v, --verbose
+Be verbose.
+
@end table
@value{vtblc} interpretes the following keywords - values pairs with the
@@ -183,7 +188,30 @@
surrounded by @code{ENTRY @var{NUM}} - @code{ENTRY END} pairs.
@item SIGNATURE @var{SIG}
-Valid signature string. Only @code{VTBL} is allowed yet.
+Valid signature string. Must be one out of @code{VTBL}, @code{XTBL},
+@code{EXVT} and @code{UTID}. If this tag is used it MUST be the first
+entry after the @code{ENTRY} tag. If the @code{SIGNATURE} tag is
+missing, @code{VTBL} is assumed.
+
+The @code{EXVT} tag is recognized, but vtblc does not make use of the
+volume table overflow extension.
+@end table
+
+If any other signature than @code{VTBL} was given, then the only other
+tag recoginized is
+
+@table @asis
+@item ENTRY_DATA @var{HEX}
+Data for the volume table entry. @var{HEX} is a string of hexadecimal
+byte values, e.g. @code{"0x01 0x4f ..."} of length at most 124
+(i.e. 128 minus length of signature). If less bytes are presented the
+entry will be padded with zeroes. The string must be surrounded by
+double quotes. The hexadecimal values have to be separated by spaces.
+@end table
+
+The following entries are allowed for the signature @code{vtbl}:
+
+@table @asis
@item START @var{STARTSEG}
First segment of this volume.
@@ -191,6 +219,11 @@
@item END @var{ENDSEG}
Last segment of this volume.
+@item NUM_SEGMENTS @var{NUM}
+Number of segments occupied by this volume. This has no effect for
+cartridges with less or equal than 2^16=65536 segments. For larger
+cartridges this value is stored in the volume table entry.
+
@item DESCRIPTION @var{DESC}
Description for this volume table. Will be truncated to 44 characters.
@@ -200,36 +233,61 @@
explanations.
@item FLAG_VENDOR_SPECIFIC @var{VAL}
-Ignored by @value{ft}.
+For cartridges with more than 2^16=65536 segments signals that the
+remainder of the volume table entry is vendor specific.
+
+For cartridges with less segments signals that remainder of volume table
+entry conforms to QIC-113 if the value of @code{QIC_MAJOR} is
+@code{113}. Otherwise signals that the remainder of the volume table
+entry is vendor specific.
+
+@end table
+
+If the remainder of the volume table entry has been flagged @samp{vendor
+specific} (see description of FLAG_VENDOR_SPECIFIC above) then the other
+additional recogized tag is
+
+@table @asis
+@item VENDOR_DATA @var{HEX}
+A string of hexadecimal values of lenght at most 72 to fill the
+remainder of the volume table entry. Smaller strings will be padded
+with zero bytes. The string must be surrounded by double quotes, e.g.
+@code{"0x01 0x02 ..."}.
+@end table
+
+If FLAG_VENDOR_SPECIFIC is not set, then the following additional tags
+are allowed:
+
+@table @asis
@item FLAG_MULTI_CARTRIDGE @var{VAL}
-Ignored by @value{ft}.
@item FLAG_NOT_VERIFIED @var{VAL}
-Ignored by @value{ft}.
@item FLAG_REDIRECTION_INHIBIT @var{VAL}
-Ignored by @value{ft}.
@item FLAG_SEGMENT_SPANNING @var{VAL}
-Ignored by @value{ft}.
@item FLAG_DIRECTORY_LAST @var{VAL}
-Ignored by @value{ft}.
@item FLAG_RESERVED_6 @var{VAL}
-Ignored by @value{ft}.
@item FLAG_RESERVED_7 @var{VAL}
-Ignored by @value{ft}.
@item MULTI_CARTRIDGE_COUNT @var{VAL}
-Ignored by @value{ft}.
+
+@item QIC_MAJOR @var{VAL}
+Major number of QIC spec cartridge conforms to, only for cartridges with
+more than 65536 segments. @var{VAL} should be 113 for all cases.
+
+@item QIC_MINOR @var{VAL}
+Minor revision number of QIC spec. Only for cartridges with more thatn
+65536 segments. At the time of this writing, QIC-113, Rev. G, is is the
+latest one, so VAL should be 7.
@item VENDOR_EXTENSION @var{HEX}
-Vendor extension data. @var{HEX} is a string of hexadecimal byte values,
-e.g. @code{0x01 0x4f ...}
-@strong{Don't touch, these fields are used by @value{ft}}.
+Vendor extension data. @var{HEX} is a string of hexadecimal byte values
+surrounded by double quotes, e.g. @code{"0x01 0x4f ..."}.
@item PASSWORD @var{HEX}
Password. @var{HEX} as above. Ignored by @value{ft}.
@@ -241,7 +299,7 @@
64 bit value (a decimal count).
@item OS_VERSION @var{HEX}
-Here @var{HEX} is a hexadecimal 4 bytes value.
+Here @var{HEX} is a hexadecimal 2 bytes value.
@item SOURCE_DRIVE @var{DRVSTR}
Source drive. @var{DRVSTR} is a 16 byte string. Ignored by @value{ft}.
@@ -357,7 +415,7 @@
archiver package.
@menu
-* Libvtblc compatibility:: Guess what it is.
+* Libvtblc compatibility:: Compatibility with libvtblc.
* API:: The application program interface.
@end menu
@@ -497,7 +555,7 @@
@table @code
@item const char *version
A string identifying the library version, e.g.
-@samp{"libftvt.la (ftape-tools) 1.07.1\n"}.
+@samp{"libftvt.la (ftape-tools) 1.09\n"}.
@item unsigned long flags
The flags specified with @code{ftvt_set_ctrl()}.
@@ -770,7 +828,7 @@
Flush the volume table to tape. Note that we try to preserve as much of
the original volume table as possible. For this reason, @var{buffer}
must be a pointer to the area previously filled by
-@var{ftvt_read()}. Only those entries are copied from @var{volumes} to
+@code{ftvt_read()}. Only those entries are copied from @var{volumes} to
@var{buffer} which have been modified by the library. If no entry has
been modified, the volume table isn't written back to tape
@strong{unless} @var{do_write} is set to @code{1}.
@@ -786,7 +844,7 @@
as given to @code{ftvt_read()}.
@item u_int8_t *@var{buffer}
-The buffer previously filled by @var{ftvt_read()}. This must be the same
+The buffer previously filled by @code{ftvt_read()}. This must be the same
pointer as given to @code{ftvt_read()}.
@item int @var{vtbl_cnt}
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/ftape-tools-all.texi ftape-tools-1.09/doc/texi/ftape-tools-all.texi
--- ftape-tools-1.08/doc/texi/ftape-tools-all.texi Sun Jun 25 19:56:11 2000
+++ ftape-tools-1.09/doc/texi/ftape-tools-all.texi Sun Jul 23 15:58:51 2000
@@ -20,9 +20,9 @@
@c
@c some macros ...
@c
-@set UPDATED 25 June 2000
-@set EDITION 1.08
-@set VERSION 1.08
+@set UPDATED 22 July 2000
+@set EDITION 1.09
+@set VERSION 1.09
@set FTVERSION 4.03
@set FTMAINTAINEREMAIL heine@@instmath.rwth-aachen.de
@@ -681,7 +681,7 @@
better off when using the programs provided in this package. Also, there
is a small collection of patches and tips and tricks for commonly used
backup programs contains in subdirectories under the @file{contrib/}
-(@xref{Contrib}) subdirectory.
+(@pxref{Contrib}) subdirectory.
All compiled programs of this distribution show a banner of the
following form when run with the @code{--version}.
@@ -1317,7 +1317,8 @@
[--verbose] [--file=@var{FILE}] [--parsable-output]
[--label=@var{LABEL}] [--omit-erase] [--discard-header]
[--no-reference-bursts] [--print-header]
- [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]]
+ [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]
+ [,erase-cartridge]]]
[--dma-memory=@var{SIZE}] [--mode=@var{MODE}]
[--format-parameters=[qic-standard=@var{QIC_STD}]
[,format-code=@var{FORMAT_CODE}][,floppy-head-max=@var{MAX_FLOPPY_HEAD}]
@@ -1399,7 +1400,7 @@
Print the contents of the header segment in a keyword-value fashion. The
bad sector map is also dumped.
-@item --verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]
+@item --verify-only[=[erase-bad-sector-map][,dont-write-header-segments][,erase-cartridge]]
Only update the bad sector map, don't re-format. Only possible with
already formatted cartridges. With this option one can try to
"resurrect" cartridges when the tape drive isn't capable of doing a full
@@ -1421,6 +1422,12 @@
@samp{--print-header} switch when using this option. Note that
@value{ftformat} permits verifying of read-only cartridges when
@samp{dont-write-header-segments} is in effect.
+
+@item erase-cartridge
+Erase cartridge before verifying. @emph{Note:} this is different from
+the erasing the @emph{format} of the cartridge (see
+@samp{--omit-erase}). @emph{Here} it simply means to fill all segments
+with zero bytes prior to verifying.
@end table
@item -M --dma-memory=@var{SIZE}
@@ -1672,7 +1679,7 @@
@group
reset fsf bsf fsr bsr eof weof rewind offline rewoffl eject retension bsfm fsfm
asf eom seod erase ras1 ras2 ras3 setblk setdensity seek tell setdrvbuffer lock
-unlock load unload compression setpart rdftseg volinfo getsize status
+unlock load unload compression setpart rdftseg volinfo getsize ftmode status
@end group
@end smallexample
@@ -2064,9 +2071,10 @@
[--append=[label=@var{LABEL}][,date=[@var{DATE}]][,start=@var{SEG_ID}][,end=@var{SEG_ID}]
[--modify=[label=@var{LABEL}][,date=[@var{DATE}]][,start=@var{SEG_ID}][,end=@var{SEG_ID}]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f @var{FILE}] [-# @var{NR}] [-t [@var{SIZE}]]
[-a @var{SUBOPTIONS}] [-m @var{SUBOPTIONS}]
+ [--bsm] [-b]
@end smallexample
@node Vtblc Options, Vtblc Examples, Vtblc Synopsis, Invoking Vtblc
@@ -2076,44 +2084,26 @@
@cindex Options, @value{vtblc}
@table @code
-@item -f, --file=@var{FILE}
-Tape device to use. Default is @file{/dev/rawft0}.
-
-@item -h, -?, --help, --usage
-Print help information to @code{stdout}.
-
-@item -V, --version
-Print version information to @code{stdout}
-
-@item -d, --debug
-Unused yet.
-
-@item -v, --verbose
-Unused yet.
-
@item -#, --vtbl-entry=@var{NR}
Specify the volume number for the @code{--modify} option. @emph{Note:}
The option @code{--print} @emph{always} displays the @emph{entire}
volume table regardless what has been specified with the
@code{--vtbl-entry} option.
-@item -p, --print[=tagged]
-Print the volume table entry given by @code{--vtbl-entry} or the entire
-table if @code{--vtbl-entry} has been omitted. If no other action is
-specified then @code{--print} is the default.
+@item -a, --append
+Append an entry to the end of the volume table.
-If the argument @code{tagged} is given, produce output in a tagged
-format, less readable, but easier to parse by graphical front ends. The
-output is in the same keyword - value format that is accepted as input
-by the @code{--modify} and @code{--append} options. See below.
+@item -b, --bsm
+Print the bad sector map and quit.
-@item -t, --truncate[=@var{SIZE}]
-Truncate the volume table to @var{SIZE} entries by filling the remainder
-with zero bytes. If @var{SIZE} is omitted then the last entry is
-deleted.
+@item -d, --debug
+Unused yet.
-@item -a, --append
-Append an entry to the end of the volume table.
+@item -f, --file=@var{FILE}
+Tape device to use. Default is @file{/dev/rawft0}.
+
+@item -h, -?, --help, --usage
+Print help information to @code{stdout}.
@item -m, --modify
Modify the volume table entry given by @code{--vtbl-entry}. If
@@ -2147,6 +2137,28 @@
The valid tag - value pairs are listed below.
@end table
+
+@item -p[tagged], --print[=tagged]
+Print the volume table entry given by @code{--vtbl-entry} or the entire
+table if @code{--vtbl-entry} has been omitted. If no other action is
+specified then @code{--print} is the default.
+
+If the argument @code{tagged} is given, produce output in a tagged
+format, less readable, but easier to parse by graphical front ends. The
+output is in the same keyword - value format that is accepted as input
+by the @code{--modify} and @code{--append} options. See below.
+
+@item -t, --truncate[=@var{SIZE}]
+Truncate the volume table to @var{SIZE} entries by filling the remainder
+with zero bytes. If @var{SIZE} is omitted then the last entry is
+deleted.
+
+@item -V, --version
+Print version information to @code{stdout}
+
+@item -v, --verbose
+Be verbose.
+
@end table
@value{vtblc} interpretes the following keywords - values pairs with the
@@ -2179,7 +2191,30 @@
surrounded by @code{ENTRY @var{NUM}} - @code{ENTRY END} pairs.
@item SIGNATURE @var{SIG}
-Valid signature string. Only @code{VTBL} is allowed yet.
+Valid signature string. Must be one out of @code{VTBL}, @code{XTBL},
+@code{EXVT} and @code{UTID}. If this tag is used it MUST be the first
+entry after the @code{ENTRY} tag. If the @code{SIGNATURE} tag is
+missing, @code{VTBL} is assumed.
+
+The @code{EXVT} tag is recognized, but vtblc does not make use of the
+volume table overflow extension.
+@end table
+
+If any other signature than @code{VTBL} was given, then the only other
+tag recoginized is
+
+@table @asis
+@item ENTRY_DATA @var{HEX}
+Data for the volume table entry. @var{HEX} is a string of hexadecimal
+byte values, e.g. @code{"0x01 0x4f ..."} of length at most 124
+(i.e. 128 minus length of signature). If less bytes are presented the
+entry will be padded with zeroes. The string must be surrounded by
+double quotes. The hexadecimal values have to be separated by spaces.
+@end table
+
+The following entries are allowed for the signature @code{vtbl}:
+
+@table @asis
@item START @var{STARTSEG}
First segment of this volume.
@@ -2187,6 +2222,11 @@
@item END @var{ENDSEG}
Last segment of this volume.
+@item NUM_SEGMENTS @var{NUM}
+Number of segments occupied by this volume. This has no effect for
+cartridges with less or equal than 2^16=65536 segments. For larger
+cartridges this value is stored in the volume table entry.
+
@item DESCRIPTION @var{DESC}
Description for this volume table. Will be truncated to 44 characters.
@@ -2196,36 +2236,61 @@
explanations.
@item FLAG_VENDOR_SPECIFIC @var{VAL}
-Ignored by @value{ft}.
+For cartridges with more than 2^16=65536 segments signals that the
+remainder of the volume table entry is vendor specific.
+
+For cartridges with less segments signals that remainder of volume table
+entry conforms to QIC-113 if the value of @code{QIC_MAJOR} is
+@code{113}. Otherwise signals that the remainder of the volume table
+entry is vendor specific.
+
+@end table
+
+If the remainder of the volume table entry has been flagged @samp{vendor
+specific} (see description of FLAG_VENDOR_SPECIFIC above) then the other
+additional recogized tag is
+
+@table @asis
+@item VENDOR_DATA @var{HEX}
+A string of hexadecimal values of lenght at most 72 to fill the
+remainder of the volume table entry. Smaller strings will be padded
+with zero bytes. The string must be surrounded by double quotes, e.g.
+@code{"0x01 0x02 ..."}.
+@end table
+
+If FLAG_VENDOR_SPECIFIC is not set, then the following additional tags
+are allowed:
+
+@table @asis
@item FLAG_MULTI_CARTRIDGE @var{VAL}
-Ignored by @value{ft}.
@item FLAG_NOT_VERIFIED @var{VAL}
-Ignored by @value{ft}.
@item FLAG_REDIRECTION_INHIBIT @var{VAL}
-Ignored by @value{ft}.
@item FLAG_SEGMENT_SPANNING @var{VAL}
-Ignored by @value{ft}.
@item FLAG_DIRECTORY_LAST @var{VAL}
-Ignored by @value{ft}.
@item FLAG_RESERVED_6 @var{VAL}
-Ignored by @value{ft}.
@item FLAG_RESERVED_7 @var{VAL}
-Ignored by @value{ft}.
@item MULTI_CARTRIDGE_COUNT @var{VAL}
-Ignored by @value{ft}.
+
+@item QIC_MAJOR @var{VAL}
+Major number of QIC spec cartridge conforms to, only for cartridges with
+more than 65536 segments. @var{VAL} should be 113 for all cases.
+
+@item QIC_MINOR @var{VAL}
+Minor revision number of QIC spec. Only for cartridges with more thatn
+65536 segments. At the time of this writing, QIC-113, Rev. G, is is the
+latest one, so VAL should be 7.
@item VENDOR_EXTENSION @var{HEX}
-Vendor extension data. @var{HEX} is a string of hexadecimal byte values,
-e.g. @code{0x01 0x4f ...}
-@strong{Don't touch, these fields are used by @value{ft}}.
+Vendor extension data. @var{HEX} is a string of hexadecimal byte values
+surrounded by double quotes, e.g. @code{"0x01 0x4f ..."}.
@item PASSWORD @var{HEX}
Password. @var{HEX} as above. Ignored by @value{ft}.
@@ -2237,7 +2302,7 @@
64 bit value (a decimal count).
@item OS_VERSION @var{HEX}
-Here @var{HEX} is a hexadecimal 4 bytes value.
+Here @var{HEX} is a hexadecimal 2 bytes value.
@item SOURCE_DRIVE @var{DRVSTR}
Source drive. @var{DRVSTR} is a 16 byte string. Ignored by @value{ft}.
@@ -2353,7 +2418,7 @@
archiver package.
@menu
-* Libvtblc compatibility:: Guess what it is.
+* Libvtblc compatibility:: Compatibility with libvtblc.
* API:: The application program interface.
@end menu
@@ -2493,7 +2558,7 @@
@table @code
@item const char *version
A string identifying the library version, e.g.
-@samp{"libftvt.la (ftape-tools) 1.07.1\n"}.
+@samp{"libftvt.la (ftape-tools) 1.09\n"}.
@item unsigned long flags
The flags specified with @code{ftvt_set_ctrl()}.
@@ -2766,7 +2831,7 @@
Flush the volume table to tape. Note that we try to preserve as much of
the original volume table as possible. For this reason, @var{buffer}
must be a pointer to the area previously filled by
-@var{ftvt_read()}. Only those entries are copied from @var{volumes} to
+@code{ftvt_read()}. Only those entries are copied from @var{volumes} to
@var{buffer} which have been modified by the library. If no entry has
been modified, the volume table isn't written back to tape
@strong{unless} @var{do_write} is set to @code{1}.
@@ -2782,7 +2847,7 @@
as given to @code{ftvt_read()}.
@item u_int8_t *@var{buffer}
-The buffer previously filled by @var{ftvt_read()}. This must be the same
+The buffer previously filled by @code{ftvt_read()}. This must be the same
pointer as given to @code{ftvt_read()}.
@item int @var{vtbl_cnt}
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/ftape-tools.info ftape-tools-1.09/doc/texi/ftape-tools.info
--- ftape-tools-1.08/doc/texi/ftape-tools.info Sun Jun 25 19:56:13 2000
+++ ftape-tools-1.09/doc/texi/ftape-tools.info Sun Jul 23 15:58:52 2000
@@ -1,5 +1,5 @@
-This is Info file ftape-tools.info, produced by Makeinfo version 1.68
-from the input file ftape-tools.texi.
+Dies ist ftape-tools.info, hergestellt von Makeinfo Version 4.0 aus
+ftape-tools.texi.
INFO-DIR-SECTION The Linux Operating System
START-INFO-DIR-ENTRY
@@ -9,7 +9,8 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
- Copyright (C) 25 June 2000 Claus-Justus Heine
+ Copyright (C) 22 July 2000 Claus-Justus Heine
+
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -29,73 +30,74 @@
Indirect:
-ftape-tools.info-1: 1282
-ftape-tools.info-2: 48100
-ftape-tools.info-3: 95989
+ftape-tools.info-1: 1260
+ftape-tools.info-2: 48124
+ftape-tools.info-3: 86680
Tag Table:
(Indirect)
-Node: Top1282
-Node: Copying5605
-Node: Introduction24767
-Node: Overview25000
-Node: Requirements26277
-Node: Installation29431
-Node: Configuration29862
-Node: Testing options30654
-Node: Documentation formatting32352
-Node: NLS support35141
-Node: Building35737
-Node: Testing38429
-Node: Ftape-tool43048
-Node: Ftape-Tool Overview43322
-Node: Invoking Ftape-Tool43795
-Node: Testing Ftape-Tool44028
-Node: Ftformat44278
-Node: Ftformat Overview44609
-Node: Invoking Ftformat46300
-Node: Ftformat Synopsis46644
-Node: Ftformat Options48100
-Node: Ftformat Examples55451
-Node: Ftformat Problems56161
-Node: Testing Ftformat56791
-Node: Ftmt57180
-Node: Ftmt Overview57432
-Node: Invoking Ftmt57635
-Node: Synopsis58002
-Node: Options58785
-Node: Examples59896
-Node: Testing Ftmt60209
-Node: Listtape60842
-Node: Listtape Overview61107
-Node: Invoking Listtape61965
-Node: Listtape Synopsis62305
-Node: Listtape Options62647
-Node: Listtape Examples63405
-Node: Testing Listtape64308
-Node: Swapout64507
-Node: Swapout Overview64774
-Node: Invoking Swapout65765
-Node: Swapout Synopsis66103
-Node: Swapout Options66367
-Node: Swapout Examples66827
-Node: Testing Swapout67129
-Node: Vtblc67888
-Node: Vtblc Overview68209
-Node: Invoking Vtblc69279
-Node: Vtblc Synopsis69603
-Node: Vtblc Options70496
-Node: Vtblc Examples75854
-Node: Testing Vtblc78197
-Node: Libftvt78852
-Node: Libvtblc compatibility79457
-Node: API80432
-Node: Option Settings81328
-Node: Tape I/O84208
-Node: Printing and Parsing95989
-Node: Modifying Entries102458
-Node: Contrib113938
-Node: Concept Index114734
-Node: Function Index122058
+Node: Top1260
+Node: Copying5586
+Node: Introduction24748
+Node: Overview24981
+Node: Requirements26254
+Node: Installation29408
+Node: Configuration29839
+Node: Testing options30631
+Node: Documentation formatting32329
+Node: NLS support35118
+Node: Building35714
+Node: Testing38406
+Node: Ftape-tool43025
+Node: Ftape-Tool Overview43299
+Node: Invoking Ftape-Tool43772
+Node: Testing Ftape-Tool44005
+Node: Ftformat44255
+Node: Ftformat Overview44586
+Node: Invoking Ftformat46275
+Node: Ftformat Synopsis46619
+Node: Ftformat Options48124
+Node: Ftformat Examples55764
+Node: Ftformat Problems56475
+Node: Testing Ftformat57105
+Node: Ftmt57494
+Node: Ftmt Overview57746
+Node: Invoking Ftmt57949
+Node: Synopsis58316
+Node: Options59106
+Node: Examples60217
+Node: Testing Ftmt60530
+Node: Listtape61163
+Node: Listtape Overview61428
+Ref: Listtape Overview-Footnote-162253
+Node: Invoking Listtape62285
+Node: Listtape Synopsis62625
+Node: Listtape Options62967
+Node: Listtape Examples63725
+Node: Testing Listtape64627
+Node: Swapout64826
+Node: Swapout Overview65093
+Node: Invoking Swapout66083
+Node: Swapout Synopsis66421
+Node: Swapout Options66685
+Node: Swapout Examples67144
+Node: Testing Swapout67446
+Node: Vtblc68205
+Node: Vtblc Overview68526
+Node: Invoking Vtblc69595
+Node: Vtblc Synopsis69919
+Node: Vtblc Options70835
+Node: Vtblc Examples78318
+Node: Testing Vtblc80660
+Node: Libftvt81315
+Node: Libvtblc compatibility81931
+Node: API82906
+Node: Option Settings83802
+Node: Tape I/O86680
+Node: Printing and Parsing98465
+Node: Modifying Entries104931
+Node: Contrib116411
+Node: Concept Index117202
+Node: Function Index124526
End Tag Table
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/ftape-tools.info-1 ftape-tools-1.09/doc/texi/ftape-tools.info-1
--- ftape-tools-1.08/doc/texi/ftape-tools.info-1 Sun Jun 25 19:56:13 2000
+++ ftape-tools-1.09/doc/texi/ftape-tools.info-1 Sun Jul 23 15:58:52 2000
@@ -1,5 +1,5 @@
-This is Info file ftape-tools.info, produced by Makeinfo version 1.68
-from the input file ftape-tools.texi.
+Dies ist ftape-tools.info, hergestellt von Makeinfo Version 4.0 aus
+ftape-tools.texi.
INFO-DIR-SECTION The Linux Operating System
START-INFO-DIR-ENTRY
@@ -9,7 +9,8 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
- Copyright (C) 25 June 2000 Claus-Justus Heine
+ Copyright (C) 22 July 2000 Claus-Justus Heine
+
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -36,7 +37,7 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
- This document applies to version 1.08 of the ftape-tools package.
+ This document applies to version 1.09 of the ftape-tools package.
* Menu:
@@ -53,7 +54,7 @@
* Concept Index:: Index of concepts.
* Function Index:: Index of library functions.
- -- The Detailed Node Listing --
+ --- The Detailed Node Listing ---
Introduction
@@ -140,7 +141,7 @@
* Vtblc Options:: List of options with explanations.
* Vtblc Examples:: Some simple examples.
-Libftvt - the volume table manipulation library
+Libftvt -- the volume table manipulation library
* Libvtblc compatibility:: Guess what it is.
* API:: The application program interface.
@@ -533,23 +534,23 @@
Overview
========
- ftape-tools is a collection of utilities that might be *useful* in
+ ftape-tools is a collection of utilities that might be _useful_ in
conjunction with the ftape floppy tape device driver for Linux. As far
as I know none of the utilities is actually required to use the floppy
tape driver, as ftape provides a pretty standard Unix like tape device
interface. However, if you want to use special ftape specific ioctls
-(*note Ftmt::., *note Ftformat::., *note Vtblc::.) or run into certain
-problems when trying to load the driver (*note Swapout::.) you might be
+(*note Ftmt::, *note Ftformat::, *note Vtblc::) or run into certain
+problems when trying to load the driver (*note Swapout::) you might be
better off when using the programs provided in this package. Also, there
is a small collection of patches and tips and tricks for commonly used
-backup programs contains in subdirectories under the `contrib/' (*Note
+backup programs contains in subdirectories under the `contrib/' (*note
Contrib::) subdirectory.
All compiled programs of this distribution show a banner of the
following form when run with the `--version'.
root@anaxagoras:claus# PROGRAM --version
- PROGRAM (ftape-tools) 1.08
+ PROGRAM (ftape-tools) 1.09
where PROGRAM is a place holder for the program you are running.
This kind of uniform `--version' option allows to distinguish the
@@ -580,12 +581,12 @@
programs, which are delivered as `C' source code. Although they
might compile with other ANSI C compilers as well, I didn't test
it. Moreover, this package is useful for Linux only, and all Linux
- systems *have* `gcc'. So who cares ...
+ systems _have_ `gcc'. So who cares ...
*perl*
The `perl' script interpreter is required by
`src/scripts/listtape.pl'. If you have `automake' (*note automake:
- (automake)Top) installed, then you don't need to worry: you *have*
+ (automake)Top) installed, then you don't need to worry: you _have_
`perl'. Also, if you intend to rebuild the HTML and/or SGML
versions of the manual, then you need `perl'. However, this
package comes with pre-formatted documentation.
@@ -604,14 +605,14 @@
*note Making Makefile.in's: (automake)Top. `automake' is a
convenient way to create a couple of standard makefile targets. It
interfaces nicely to the GNU auto-configuration tool `autoconf'.
- `automake' is *not* needed to compile the package. It's nice if
+ `automake' is _not_ needed to compile the package. It's nice if
you have it. If not, forget about it, unless you want to take over
maintenance of the ftape-tools package. In this case, please
contact Claus-Justus Heine .
*Autoconf*
*note Create source code configuration scripts: (autoconf)Top.
- `autoconf' is the GNU auto-configuration tool. `autoconf' is *not*
+ `autoconf' is the GNU auto-configuration tool. `autoconf' is _not_
required to compile the ftape-tools package. It's nice if you have
it. If not, forget about it, unless you want to take over
maintenance of the ftape-tools package. In this case, please
@@ -753,7 +754,7 @@
HTML). This is just a fun option. I think that one shouldn't use
it, as the documentation is written in TeXinfo; SGML is used by
default to convert it to a plain ASCII format. Therefore, the
- default for the Postscript and HTML version of the manual is *not*
+ default for the Postscript and HTML version of the manual is _not_
to be created from the (automatically generated) SGML version of
the manual.
@@ -896,7 +897,7 @@
This is a non-destructive test, but nevertheless it has to be
enabled using the `--enable-tapetests' option. *Note Running tests
after compilation of the programs: Testing options. The test-suite
- is located under `[/usr/src/ftape-tools-1.08/]testsuite/'. There
+ is located under `[/usr/src/ftape-tools-1.09/]testsuite/'. There
was a bug report that sometimes the ftape-4.03 driver messes up
the pending signals of a process.
@@ -905,7 +906,7 @@
In case the test fails, please first try to run the test program
- [/usr/src/ftape-tools-1.08/]testsuite/ftsignal
+ [/usr/src/ftape-tools-1.09/]testsuite/ftsignal
manually. The `-f TAPEDEV' switch can be used to specify an
alternate tape device, such as `-f /dev/qft1' it this is required
@@ -1046,13 +1047,13 @@
following banner:
root@anaxagoras:claus# ftformat --version
- ftformat (ftape-tools) 1.08
+ ftformat (ftape-tools) 1.09
The `ftape-tools' string indicates that it is part of the ftape-tools
-package (*note Overview::.).
+package (*note Overview::).
- The `Tcl/Tk' interface ftape-tool (*note Ftape-tool::.) uses
-ftformat as a backend for its formatting dialog.
+ The `Tcl/Tk' interface ftape-tool (*note Ftape-tool::) uses ftformat
+as a backend for its formatting dialog.
File: ftape-tools.info, Node: Invoking Ftformat, Next: Ftformat Problems, Prev: Ftformat Overview, Up: Ftformat
@@ -1081,7 +1082,8 @@
[--verbose] [--file=FILE] [--parsable-output]
[--label=LABEL] [--omit-erase] [--discard-header]
[--no-reference-bursts] [--print-header]
- [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]]
+ [--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]
+ [,erase-cartridge]]]
[--dma-memory=SIZE] [--mode=MODE]
[--format-parameters=[qic-standard=QIC_STD]
[,format-code=FORMAT_CODE][,floppy-head-max=MAX_FLOPPY_HEAD]
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/ftape-tools.info-2 ftape-tools-1.09/doc/texi/ftape-tools.info-2
--- ftape-tools-1.08/doc/texi/ftape-tools.info-2 Sun Jun 25 19:56:13 2000
+++ ftape-tools-1.09/doc/texi/ftape-tools.info-2 Sun Jul 23 15:58:52 2000
@@ -1,5 +1,5 @@
-This is Info file ftape-tools.info, produced by Makeinfo version 1.68
-from the input file ftape-tools.texi.
+Dies ist ftape-tools.info, hergestellt von Makeinfo Version 4.0 aus
+ftape-tools.texi.
INFO-DIR-SECTION The Linux Operating System
START-INFO-DIR-ENTRY
@@ -9,7 +9,8 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
- Copyright (C) 25 June 2000 Claus-Justus Heine
+ Copyright (C) 22 July 2000 Claus-Justus Heine
+
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -51,7 +52,7 @@
`--parsable-output'
Terminate each message by a newline, don't use backspace or
carriage return characters. Used by the GUI interface ftape-tool
- (*note Ftape-tool::.).
+ (*note Ftape-tool::).
`-L, --label=LABEL'
Label to write to the header segment. The label will be truncated
@@ -88,7 +89,7 @@
Print the contents of the header segment in a keyword-value
fashion. The bad sector map is also dumped.
-`--verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]'
+`--verify-only[=[erase-bad-sector-map][,dont-write-header-segments][,erase-cartridge]]'
Only update the bad sector map, don't re-format. Only possible
with already formatted cartridges. With this option one can try to
"resurrect" cartridges when the tape drive isn't capable of doing
@@ -110,6 +111,12 @@
that ftformat permits verifying of read-only cartridges when
`dont-write-header-segments' is in effect.
+ `erase-cartridge'
+ Erase cartridge before verifying. _Note:_ this is different
+ from the erasing the _format_ of the cartridge (see
+ `--omit-erase'). _Here_ it simply means to fill all segments
+ with zero bytes prior to verifying.
+
`-M --dma-memory=SIZE'
Amount of dma memory to mmap. Measured in kb.Normally not needed.
This affects only the version 3.x of the ftape driver. The
@@ -251,6 +258,7 @@
ftformat --mode=auto --format-parameters qic-standard=TR-3 \
--omit-erase --discard-header
+
File: ftape-tools.info, Node: Ftformat Problems, Next: Testing Ftformat, Prev: Invoking Ftformat, Up: Ftformat
@@ -331,7 +339,7 @@
reset fsf bsf fsr bsr eof weof rewind offline rewoffl eject retension bsfm fsfm
asf eom seod erase ras1 ras2 ras3 setblk setdensity seek tell setdrvbuffer lock
- unlock load unload compression setpart rdftseg volinfo getsize status
+ unlock load unload compression setpart rdftseg volinfo getsize ftmode status
File: ftape-tools.info, Node: Options, Next: Examples, Prev: Synopsis, Up: Invoking Ftmt
@@ -413,7 +421,7 @@
listtape is a simple script that lists the contents of a floppy tape
cartridge using special ioctls provided by ftape-3.04d (and later
versions). It utilises the ftmt program for this purpose (*note
-Ftmt::.).
+Ftmt::).
listtape is available either as Perl script or as Bourne shell
script. Per default the Perl script version is installed as it is
@@ -482,7 +490,7 @@
listtape command. As you will realize there is no notion of volume
labels or time stamps. This is beyond the scope and facilities of the
listtape script. To access the contents of the volume table directly,
-you need to use the vtblc command instead (*note Vtblc Examples::.).
+you need to use the vtblc command instead (*note Vtblc Examples::).
claus@anaximander:/automount/home/claus/ > listtape --file /dev/nqft1
file number block size volume size tape space
@@ -526,7 +534,7 @@
swapout originally was written by Kai Harrekilde-Petersen in January
1996. He released it under the term of the GNU GENERAL PUBLIC LICENSE
-(*note Copying::.)
+(*note Copying::)
Simple as swapout is it is nevertheless very useful. ftape - when
used with internal floppy tape drives - requires large contiguous
@@ -536,7 +544,7 @@
causes lots of "paging" and eventually de-fragmentates the system's
memory.
- swapout is *really* ugly. But very useful.
+ swapout is _really_ ugly. But very useful.
File: ftape-tools.info, Node: Invoking Swapout, Next: Testing Swapout, Prev: Swapout Overview, Up: Swapout
@@ -573,7 +581,7 @@
Display brief usage information.
`MEGABYTES'
- Specifies how much memory to allocate (*note Swapout Overview::.).
+ Specifies how much memory to allocate (*note Swapout Overview::).
The parameter MEGABYTES gives the amount of memory to allocate in
units of "MB", i.e. 1024^2 bytes.
@@ -596,7 +604,7 @@
===============
Running `make check' from either the top level directory of the
-ftape-tools distribution (which runs *all* available checks for *all*
+ftape-tools distribution (which runs _all_ available checks for _all_
included tools) or the `src/swapout' sub-directory will run a *very
simple* test suite for swapout. At least you will be sure that the
program doesn't dump core ...
@@ -641,7 +649,7 @@
The API of the library is documented in a separate section of this
chapter. *Note API::.
- vtblc is used as a backend by the ftape-tool (*note Ftape-tool::.)
+ vtblc is used as a backend by the ftape-tool (*note Ftape-tool::)
GUI front-end.
*Please be very careful when using this program. Improper use can
@@ -681,9 +689,10 @@
[--append=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=[label=LABEL][,date=[DATE]][,start=SEG_ID][,end=SEG_ID]
[--modify=tagged]
- [-Vh?dvam] [-p [tagged]]
+ [-Vh?dvam] [-p[tagged]]
[-f FILE] [-# NR] [-t [SIZE]]
[-a SUBOPTIONS] [-m SUBOPTIONS]
+ [--bsm] [-b]
File: ftape-tools.info, Node: Vtblc Options, Next: Vtblc Examples, Prev: Vtblc Synopsis, Up: Invoking Vtblc
@@ -691,43 +700,25 @@
Vtblc Options
-------------
-`-f, --file=FILE'
- Tape device to use. Default is `/dev/rawft0'.
+`-#, --vtbl-entry=NR'
+ Specify the volume number for the `--modify' option. _Note:_ The
+ option `--print' _always_ displays the _entire_ volume table
+ regardless what has been specified with the `--vtbl-entry' option.
-`-h, -?, --help, --usage'
- Print help information to `stdout'.
+`-a, --append'
+ Append an entry to the end of the volume table.
-`-V, --version'
- Print version information to `stdout'
+`-b, --bsm'
+ Print the bad sector map and quit.
`-d, --debug'
Unused yet.
-`-v, --verbose'
- Unused yet.
-
-`-#, --vtbl-entry=NR'
- Specify the volume number for the `--modify' option. *Note:* The
- option `--print' *always* displays the *entire* volume table
- regardless what has been specified with the `--vtbl-entry' option.
-
-`-p, --print[=tagged]'
- Print the volume table entry given by `--vtbl-entry' or the entire
- table if `--vtbl-entry' has been omitted. If no other action is
- specified then `--print' is the default.
-
- If the argument `tagged' is given, produce output in a tagged
- format, less readable, but easier to parse by graphical front
- ends. The output is in the same keyword - value format that is
- accepted as input by the `--modify' and `--append' options. See
- below.
-
-`-t, --truncate[=SIZE]'
- Truncate the volume table to SIZE entries by filling the remainder
- with zero bytes. If SIZE is omitted then the last entry is deleted.
+`-f, --file=FILE'
+ Tape device to use. Default is `/dev/rawft0'.
-`-a, --append'
- Append an entry to the end of the volume table.
+`-h, -?, --help, --usage'
+ Print help information to `stdout'.
`-m, --modify'
Modify the volume table entry given by `--vtbl-entry'. If
@@ -759,6 +750,27 @@
The valid tag - value pairs are listed below.
+`-p[tagged], --print[=tagged]'
+ Print the volume table entry given by `--vtbl-entry' or the entire
+ table if `--vtbl-entry' has been omitted. If no other action is
+ specified then `--print' is the default.
+
+ If the argument `tagged' is given, produce output in a tagged
+ format, less readable, but easier to parse by graphical front
+ ends. The output is in the same keyword - value format that is
+ accepted as input by the `--modify' and `--append' options. See
+ below.
+
+`-t, --truncate[=SIZE]'
+ Truncate the volume table to SIZE entries by filling the remainder
+ with zero bytes. If SIZE is omitted then the last entry is deleted.
+
+`-V, --version'
+ Print version information to `stdout'
+
+`-v, --verbose'
+ Be verbose.
+
vtblc interpretes the following keywords - values pairs with the
`--append' and `--modify' options:
@@ -788,7 +800,26 @@
by `ENTRY NUM' - `ENTRY END' pairs.
SIGNATURE SIG
- Valid signature string. Only `VTBL' is allowed yet.
+ Valid signature string. Must be one out of `VTBL', `XTBL', `EXVT'
+ and `UTID'. If this tag is used it MUST be the first entry after
+ the `ENTRY' tag. If the `SIGNATURE' tag is missing, `VTBL' is
+ assumed.
+
+ The `EXVT' tag is recognized, but vtblc does not make use of the
+ volume table overflow extension.
+
+ If any other signature than `VTBL' was given, then the only other
+tag recoginized is
+
+ENTRY_DATA HEX
+ Data for the volume table entry. HEX is a string of hexadecimal
+ byte values, e.g. `"0x01 0x4f ..."' of length at most 124 (i.e.
+ 128 minus length of signature). If less bytes are presented the
+ entry will be padded with zeroes. The string must be surrounded by
+ double quotes. The hexadecimal values have to be separated by
+ spaces.
+
+ The following entries are allowed for the signature `vtbl':
START STARTSEG
First segment of this volume.
@@ -796,6 +827,11 @@
END ENDSEG
Last segment of this volume.
+NUM_SEGMENTS NUM
+ Number of segments occupied by this volume. This has no effect for
+ cartridges with less or equal than 2^16=65536 segments. For larger
+ cartridges this value is stored in the volume table entry.
+
DESCRIPTION DESC
Description for this volume table. Will be truncated to 44
characters.
@@ -805,36 +841,56 @@
time is used. See `--modify date[=DATE]' for further explanations.
FLAG_VENDOR_SPECIFIC VAL
- Ignored by ftape.
+ For cartridges with more than 2^16=65536 segments signals that the
+ remainder of the volume table entry is vendor specific.
+
+ For cartridges with less segments signals that remainder of volume
+ table entry conforms to QIC-113 if the value of `QIC_MAJOR' is
+ `113'. Otherwise signals that the remainder of the volume table
+ entry is vendor specific.
+
+ If the remainder of the volume table entry has been flagged `vendor
+specific' (see description of FLAG_VENDOR_SPECIFIC above) then the other
+additional recogized tag is
+
+VENDOR_DATA HEX
+ A string of hexadecimal values of lenght at most 72 to fill the
+ remainder of the volume table entry. Smaller strings will be
+ padded with zero bytes. The string must be surrounded by double
+ quotes, e.g. `"0x01 0x02 ..."'.
+
+ If FLAG_VENDOR_SPECIFIC is not set, then the following additional
+tags are allowed:
FLAG_MULTI_CARTRIDGE VAL
- Ignored by ftape.
FLAG_NOT_VERIFIED VAL
- Ignored by ftape.
FLAG_REDIRECTION_INHIBIT VAL
- Ignored by ftape.
FLAG_SEGMENT_SPANNING VAL
- Ignored by ftape.
FLAG_DIRECTORY_LAST VAL
- Ignored by ftape.
FLAG_RESERVED_6 VAL
- Ignored by ftape.
FLAG_RESERVED_7 VAL
- Ignored by ftape.
MULTI_CARTRIDGE_COUNT VAL
- Ignored by ftape.
+
+QIC_MAJOR VAL
+ Major number of QIC spec cartridge conforms to, only for
+ cartridges with more than 65536 segments. VAL should be 113 for
+ all cases.
+
+QIC_MINOR VAL
+ Minor revision number of QIC spec. Only for cartridges with more
+ thatn 65536 segments. At the time of this writing, QIC-113, Rev.
+ G, is is the latest one, so VAL should be 7.
VENDOR_EXTENSION HEX
- Vendor extension data. HEX is a string of hexadecimal byte values,
- e.g. `0x01 0x4f ...' *Don't touch, these fields are used by
- ftape*.
+ Vendor extension data. HEX is a string of hexadecimal byte values
+ surrounded by double quotes, e.g. `"0x01 0x4f ..."'.
PASSWORD HEX
Password. HEX as above. Ignored by ftape.
@@ -846,7 +902,7 @@
64 bit value (a decimal count).
OS_VERSION HEX
- Here HEX is a hexadecimal 4 bytes value.
+ Here HEX is a hexadecimal 2 bytes value.
SOURCE_DRIVE DRVSTR
Source drive. DRVSTR is a 16 byte string. Ignored by ftape.
@@ -907,7 +963,7 @@
2 VTBL "something funny " 00:00:00 01/01/70 217 2559 4.32%
You may want to try ftape-tool to manipulate the volume table in a
-much more comfortable way (*note Ftape-tool::.).
+much more comfortable way (*note Ftape-tool::).
File: ftape-tools.info, Node: Testing Vtblc, Next: Libftvt, Prev: Invoking Vtblc, Up: Vtblc
@@ -933,13 +989,13 @@
vtblc is based on a library written in `C', which is distributed
with the ftape-tools package and installed in LIBDIR when running `make
-install'. libftvt is based on libvtblc written by
-Albrecht Gebhardt for the
-Amanda (http://www.amanda.org) tape archiver package.
+install'. libftvt is based on libvtblc written by Albrecht Gebhardt
+ for the Amanda
+(http://www.amanda.org) tape archiver package.
* Menu:
-* Libvtblc compatibility:: Guess what it is.
+* Libvtblc compatibility:: Compatibility with libvtblc.
* API:: The application program interface.
@@ -1032,7 +1088,7 @@
`const char *version'
A string identifying the library version, e.g. `"libftvt.la
- (ftape-tools) 1.07.1\n"'.
+ (ftape-tools) 1.09\n"'.
`unsigned long flags'
The flags specified with `ftvt_set_ctrl()'.
@@ -1056,295 +1112,5 @@
still points to the previously generated error string, if
any, or is a `NULL' pointer. The library functions will
return a value of `-1' in case of an error.
-
-
-
-File: ftape-tools.info, Node: Tape I/O, Next: Printing and Parsing, Prev: Option Settings, Up: API
-
-Accessing the tape drive.
-.........................
-
- - Library Function: int ftvt_open (const char *NAME, mode_t MODE)
- Open the tape device and try to determine whether is is a floppy
- tape.
-
- *Arguments*
-
- `const char *NAME'
- The name of the tape device to use, e.g. `/dev/rawft0'.
- Note that you need to use the *raw* tape devices
- `/dev/rawft*'. Otherwise the ftape driver will not give
- you access to the volume table segments. Also, when
- accessing the tape drive with the raw tape devices, the
- driver doesn't try to fiddle itself with the volume
- table segment.
-
- `mode_t MODE'
- This is the mode argument passed to the `open()'
- function. *note Opening and Closing Files: (libc)Opening
- and Closing Files or `man 2 open'.
-
- *Return Value*
- The function returns `-1' in case of an error or the file
- descriptor obtained by the `open()' system call.
-
- *Side effects*
- In case of an error an error string is generated and
- remembered. Also, a string identifying the drive type is
- remembered. Both can be retrieved by a call to
- `ftvt_get_ctrl()'. *Note Option Settings::.
-
- *Diagnostics*
- The following error messages are generated by `ftvt_open()'.
- ERROR is the return value of `strerror(errno)'. *note Error
- Messages: (libc)Error Messages. Note that libftvt has native
- language support, so the actual message might differ from the
- messages below depending on your `locale' setting.
-
- `Error Opening tape device: ERROR'
- The system call `open()' failed.
-
- `Error getting tape drive status: ERROR'
- The `MTIOCGET' ioctl failed, i.e. the library wasn't
- able to query the tape drive status.
-
- `Error: No tape cartridge present!'
- Self explanatory.
-
- `Warning: Write protected cartridge!'
- This is not an error, but a warning message. You will
- not be able to modify the volume table, but printing is
- still possible.
-
- `Error: Tape drive is offline!'
- Normal drive operation has been disable by a previous
- call to the `MTIOCTOP' ioctl with an `MTOFFL' parameter,
- e.g. by running the program `mt -f /dev/qft0 offline'
-
- `Error: This is not a floppy tape drive!'
- The `MT_ISFTAPE_FLAG' isn't set in the `mt_type'
- component of the result of the `MTIOCGET' ioctl.
-
- *Example*
- int tapefd;
- if ((tapefd = ftvt_open("/dev/rawft0", O_RDWR)) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
-
- fprintf(stderr, "ftvt_open() failed: %s\n", info->errstr);
-
- exit(1);
- }
-
-
- - Library Function: int ftvt_close (int TAPE_FD)
- Rewind the cartridge and close the tape device.
-
- *Arguments*
-
- `int TAPE_FD'
- The file descriptor previously obtained by a call to
- `ftvt_open()'.
-
- *Return Value*
- The function returns `-1' in case of an error, `0' otherwise.
-
- *Side effects*
- The tape cartridge is rewound. In case of an error an error
- string is generated and remembered. It can be retrieved by a
- call to `ftvt_get_ctrl()'. *Note Option Settings::.
-
- *Diagnostics*
- The following error messages are generated by `ftvt_close()'.
- ERROR is the return value of `strerror(errno)'. *note Error
- Messages: (libc)Error Messages. Note that libftvt has native
- language support, so the actual message might differ from the
- messages below depending on your `locale' setting.
-
- `Ioctl Error rewinding tape: ERROR'
- The `MTIOCTOP' ioctl - sent to the tape drive to rewind
- the cartridge - failed.
-
- `Error closing tape device'
- The `close()' system call failed. *note Opening and
- Closing Files: (libc)Opening and Closing Files or `man 2
- close'.
-
- *Example*
- if (ftvt_close(tapefd) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
-
- fprintf(stderr, "ftvt_close() failed: %s\n", info->errstr);
-
- exit(1);
- }
-
-
- - Library Function: int ftvt_read (int TAPE_FD, ftvt *VOLUMES,
- u_int8_t *BUFFER)
- Read the volume table. This function first reads the header
- segment of the tape cartridge to determine the location of the
- volume table segment, and then attempts to read volume table
- segment.
-
- *Arguments*
-
- `int TAPE_FD'
- The file descriptor previously return by ftvt_open()
-
- `ftvt *VOLUMES'
- Buffer to hold the volume table in. The number of
- elements in VOLUMES must be FTVT_MAX_VOLUMES (i.e.
- 29*1024/128). The type `ftvt' is defined in in
- `[INCLUDEDIR/]ftvt.h'.
-
- `u_int8_t *BUFFER'
- The buffer to hold the contents of the volume table
- segment. It must have the size of 29*1024 bytes.
-
- *Return Value*
- The number of volumes found in the volume table segment, or
- `-1' in case of an error.
-
- *Side effects*
- The tape cartridge is rewound before trying to access the
- header segments.
-
- The internal variable `max_volumes' is set to the number of
- volumes which would fit into the volume table segment.
- Normally this should be `FTVT_MAX_VOLUMES', but some
- cartridges use volume table segments which contain bad
- sectors.
-
- In case of an error an error string is generated and
- remembered. It can be retrieved by a call to
- `ftvt_get_ctrl()'. *Note Option Settings::.
-
- *Diagnostics*
- The following error messages are generated by `ftvt_read()'.
- ERROR is the return value of `strerror(errno)'. *note Error
- Messages: (libc)Error Messages. Note that libftvt has native
- language support, so the actual message might differ from the
- messages below depending on your `locale' setting.
-
- `Ioctl error rewinding tape: ERROR'
- The `MTIOCGET' ioctl sent to the tape to rewind the
- cartridge failed.
-
- `Ioctl error reading header segment: ERROR'
- The `MTIOCRDFTSEG' ioctl sent to the tape to read the
- header segments failed. *Note Accessing arbitrary floppy
- tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
-
- `Error: Bad magic number in header segment!'
- The header segment contained a bad magic number. Either
- the cartridge uses some proprietary format, or the
- header segments are damaged.
-
- `Ioctl error reading volume table: ERROR'
- The `MTIOCRDFTSEG' ioctl sent to the tape to read the
- volume table failed. *Note Accessing arbitrary floppy
- tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
-
- `Error reading volume table: ERROR'
- The `MTIOCRDFTSEG' ioctl succeeded, but nevertheless the
- segment couldn't be read. The volume table might be
- damaged. In this case ERROR is the error string
- corresponding to the error number stored in the result
- bits of the `MTIOCRDFTSEG' ioctl. *Note Accessing
- arbitrary floppy tape segments: (ftape-4)MTIOCRDFTSEG
- and MTIOCWRFTSEG.
-
- `Warning: Short read() reading volume table: BYTES.'
-
- `Continuing, but you can use only MAX volumes (instead of 232)'
- The volume table has been read in, but the size of the
- segment holding the volume table is smaller than
- expected. This is only a warning.
-
- *Example*
- ftvt volumes[FTVT_MAX_VOLUMES];
- u_int8_t vtbl_buffer[FT_SEGMENT_SIZE];
-
- if ((num_volumes = ftvt_read(tapefd, volumes, vtbl_buffer)) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
-
- fprintf(stderr, "ftvt_read() failed: %s\n", info->errstr);
-
- (void)ftvt_close(tapefd);
- exit(1);
- }
-
-
- - Library Function: int ftvt_write (int TAPE_FD, const ftvt *VOLUMES,
- u_int8_t *BUFFER, int VTBL_CNT, int DO_WRITE);
- Flush the volume table to tape. Note that we try to preserve as
- much of the original volume table as possible. For this reason,
- BUFFER must be a pointer to the area previously filled by
- FTVT_READ(). Only those entries are copied from VOLUMES to BUFFER
- which have been modified by the library. If no entry has been
- modified, the volume table isn't written back to tape *unless*
- DO_WRITE is set to `1'.
-
- *Arguments*
-
- `int TAPE_FD'
- The file descriptor previously obtained by `ftvt_open()'.
-
- `const ftvt *VOLUMES'
- The libraries volume table representation. This must be
- the same pointer as given to `ftvt_read()'.
-
- `u_int8_t *BUFFER'
- The buffer previously filled by FTVT_READ(). This must
- be the same pointer as given to `ftvt_read()'.
-
- `int VTBL_CNT'
- The number of volumes in the volume table. Setting this
- to `0' and setting DO_WRITE to `1' will erase the volume
- table.
-
- `int DO_WRITE'
- Flag. If set to `1', always write the volume table to
- tape even if no modified entries are found.
-
- *Return Value*
- `-1' on error, `0' otherwise.
-
- *Side Effects*
- The tape is rewound after trying to write the volume table.
-
- In case of an error an error string is generated and
- remembered. It can be retrieved by a call to
- `ftvt_get_ctrl()'. *Note Option Settings::.
-
- *Diagnostics*
- The following error messages are generated by `ftvt_write()'.
- ERROR is the return value of `strerror(errno)'. *note Error
- Messages: (libc)Error Messages. Note that libftvt has native
- language support, so the actual message might differ from the
- messages below depending on your `locale' setting.
-
- `Ioctl Error writing volume table: ERROR'
- The `MTIOCWRFTSEG' ioctl sent to the tape to write the
- volume table failed. *Note Accessing arbitrary floppy
- tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
-
- `Error: Short write() writing volume table: BYTES'
- Only BYTES could be written. This is a fatal error, the
- volume table is probably damaged.
-
- `Ioctl error rewinding tape: ERROR'
- The `MTIOCGET' ioctl sent to the tape to rewind the
- cartridge failed.
-
- *Example*
- if (ftvt_write(tapefd, volumes, buffer, num_volumes, 0)) == -1) {
- struct ftvt_ctrl *info = ftvt_get_ctrl();
-
- fprintf(stderr, "ftvt_write() failed: %s\n", info->errstr);
-
- (void)ftvt_close(tapefd);
- exit(1);
- }
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/ftape-tools.info-3 ftape-tools-1.09/doc/texi/ftape-tools.info-3
--- ftape-tools-1.08/doc/texi/ftape-tools.info-3 Sun Jun 25 19:56:13 2000
+++ ftape-tools-1.09/doc/texi/ftape-tools.info-3 Sun Jul 23 15:58:52 2000
@@ -1,5 +1,5 @@
-This is Info file ftape-tools.info, produced by Makeinfo version 1.68
-from the input file ftape-tools.texi.
+Dies ist ftape-tools.info, hergestellt von Makeinfo Version 4.0 aus
+ftape-tools.texi.
INFO-DIR-SECTION The Linux Operating System
START-INFO-DIR-ENTRY
@@ -9,7 +9,8 @@
This file documents the programs contained in the ftape-tools package
for use with the ftape floppy tape driver for Linux.
- Copyright (C) 25 June 2000 Claus-Justus Heine
+ Copyright (C) 22 July 2000 Claus-Justus Heine
+
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -28,6 +29,296 @@
translation approved by the Free Software Foundation.
+File: ftape-tools.info, Node: Tape I/O, Next: Printing and Parsing, Prev: Option Settings, Up: API
+
+Accessing the tape drive.
+.........................
+
+ - Library Function: int ftvt_open (const char *NAME, mode_t MODE)
+ Open the tape device and try to determine whether is is a floppy
+ tape.
+
+ _Arguments_
+
+ `const char *NAME'
+ The name of the tape device to use, e.g. `/dev/rawft0'.
+ Note that you need to use the _raw_ tape devices
+ `/dev/rawft*'. Otherwise the ftape driver will not give
+ you access to the volume table segments. Also, when
+ accessing the tape drive with the raw tape devices, the
+ driver doesn't try to fiddle itself with the volume
+ table segment.
+
+ `mode_t MODE'
+ This is the mode argument passed to the `open()'
+ function. *note Opening and Closing Files: (libc)Opening
+ and Closing Files or `man 2 open'.
+
+ _Return Value_
+ The function returns `-1' in case of an error or the file
+ descriptor obtained by the `open()' system call.
+
+ _Side effects_
+ In case of an error an error string is generated and
+ remembered. Also, a string identifying the drive type is
+ remembered. Both can be retrieved by a call to
+ `ftvt_get_ctrl()'. *Note Option Settings::.
+
+ _Diagnostics_
+ The following error messages are generated by `ftvt_open()'.
+ ERROR is the return value of `strerror(errno)'. *note Error
+ Messages: (libc)Error Messages. Note that libftvt has native
+ language support, so the actual message might differ from the
+ messages below depending on your `locale' setting.
+
+ `Error Opening tape device: ERROR'
+ The system call `open()' failed.
+
+ `Error getting tape drive status: ERROR'
+ The `MTIOCGET' ioctl failed, i.e. the library wasn't
+ able to query the tape drive status.
+
+ `Error: No tape cartridge present!'
+ Self explanatory.
+
+ `Warning: Write protected cartridge!'
+ This is not an error, but a warning message. You will
+ not be able to modify the volume table, but printing is
+ still possible.
+
+ `Error: Tape drive is offline!'
+ Normal drive operation has been disable by a previous
+ call to the `MTIOCTOP' ioctl with an `MTOFFL' parameter,
+ e.g. by running the program `mt -f /dev/qft0 offline'
+
+ `Error: This is not a floppy tape drive!'
+ The `MT_ISFTAPE_FLAG' isn't set in the `mt_type'
+ component of the result of the `MTIOCGET' ioctl.
+
+ _Example_
+ int tapefd;
+ if ((tapefd = ftvt_open("/dev/rawft0", O_RDWR)) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
+
+ fprintf(stderr, "ftvt_open() failed: %s\n", info->errstr);
+
+ exit(1);
+ }
+
+
+ - Library Function: int ftvt_close (int TAPE_FD)
+ Rewind the cartridge and close the tape device.
+
+ _Arguments_
+
+ `int TAPE_FD'
+ The file descriptor previously obtained by a call to
+ `ftvt_open()'.
+
+ _Return Value_
+ The function returns `-1' in case of an error, `0' otherwise.
+
+ _Side effects_
+ The tape cartridge is rewound. In case of an error an error
+ string is generated and remembered. It can be retrieved by a
+ call to `ftvt_get_ctrl()'. *Note Option Settings::.
+
+ _Diagnostics_
+ The following error messages are generated by `ftvt_close()'.
+ ERROR is the return value of `strerror(errno)'. *note Error
+ Messages: (libc)Error Messages. Note that libftvt has native
+ language support, so the actual message might differ from the
+ messages below depending on your `locale' setting.
+
+ `Ioctl Error rewinding tape: ERROR'
+ The `MTIOCTOP' ioctl - sent to the tape drive to rewind
+ the cartridge - failed.
+
+ `Error closing tape device'
+ The `close()' system call failed. *note Opening and
+ Closing Files: (libc)Opening and Closing Files or `man 2
+ close'.
+
+ _Example_
+ if (ftvt_close(tapefd) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
+
+ fprintf(stderr, "ftvt_close() failed: %s\n", info->errstr);
+
+ exit(1);
+ }
+
+
+ - Library Function: int ftvt_read (int TAPE_FD, ftvt *VOLUMES,
+ u_int8_t *BUFFER)
+ Read the volume table. This function first reads the header
+ segment of the tape cartridge to determine the location of the
+ volume table segment, and then attempts to read volume table
+ segment.
+
+ _Arguments_
+
+ `int TAPE_FD'
+ The file descriptor previously return by ftvt_open()
+
+ `ftvt *VOLUMES'
+ Buffer to hold the volume table in. The number of
+ elements in VOLUMES must be FTVT_MAX_VOLUMES (i.e.
+ 29*1024/128). The type `ftvt' is defined in in
+ `[INCLUDEDIR/]ftvt.h'.
+
+ `u_int8_t *BUFFER'
+ The buffer to hold the contents of the volume table
+ segment. It must have the size of 29*1024 bytes.
+
+ _Return Value_
+ The number of volumes found in the volume table segment, or
+ `-1' in case of an error.
+
+ _Side effects_
+ The tape cartridge is rewound before trying to access the
+ header segments.
+
+ The internal variable `max_volumes' is set to the number of
+ volumes which would fit into the volume table segment.
+ Normally this should be `FTVT_MAX_VOLUMES', but some
+ cartridges use volume table segments which contain bad
+ sectors.
+
+ In case of an error an error string is generated and
+ remembered. It can be retrieved by a call to
+ `ftvt_get_ctrl()'. *Note Option Settings::.
+
+ _Diagnostics_
+ The following error messages are generated by `ftvt_read()'.
+ ERROR is the return value of `strerror(errno)'. *note Error
+ Messages: (libc)Error Messages. Note that libftvt has native
+ language support, so the actual message might differ from the
+ messages below depending on your `locale' setting.
+
+ `Ioctl error rewinding tape: ERROR'
+ The `MTIOCGET' ioctl sent to the tape to rewind the
+ cartridge failed.
+
+ `Ioctl error reading header segment: ERROR'
+ The `MTIOCRDFTSEG' ioctl sent to the tape to read the
+ header segments failed. *Note Accessing arbitrary floppy
+ tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
+
+ `Error: Bad magic number in header segment!'
+ The header segment contained a bad magic number. Either
+ the cartridge uses some proprietary format, or the
+ header segments are damaged.
+
+ `Ioctl error reading volume table: ERROR'
+ The `MTIOCRDFTSEG' ioctl sent to the tape to read the
+ volume table failed. *Note Accessing arbitrary floppy
+ tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
+
+ `Error reading volume table: ERROR'
+ The `MTIOCRDFTSEG' ioctl succeeded, but nevertheless the
+ segment couldn't be read. The volume table might be
+ damaged. In this case ERROR is the error string
+ corresponding to the error number stored in the result
+ bits of the `MTIOCRDFTSEG' ioctl. *Note Accessing
+ arbitrary floppy tape segments: (ftape-4)MTIOCRDFTSEG
+ and MTIOCWRFTSEG.
+
+ `Warning: Short read() reading volume table: BYTES.'
+
+ `Continuing, but you can use only MAX volumes (instead of 232)'
+ The volume table has been read in, but the size of the
+ segment holding the volume table is smaller than
+ expected. This is only a warning.
+
+ _Example_
+ ftvt volumes[FTVT_MAX_VOLUMES];
+ u_int8_t vtbl_buffer[FT_SEGMENT_SIZE];
+
+ if ((num_volumes = ftvt_read(tapefd, volumes, vtbl_buffer)) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
+
+ fprintf(stderr, "ftvt_read() failed: %s\n", info->errstr);
+
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
+
+
+ - Library Function: int ftvt_write (int TAPE_FD, const ftvt *VOLUMES,
+ u_int8_t *BUFFER, int VTBL_CNT, int DO_WRITE);
+ Flush the volume table to tape. Note that we try to preserve as
+ much of the original volume table as possible. For this reason,
+ BUFFER must be a pointer to the area previously filled by
+ `ftvt_read()'. Only those entries are copied from VOLUMES to
+ BUFFER which have been modified by the library. If no entry has
+ been modified, the volume table isn't written back to tape
+ *unless* DO_WRITE is set to `1'.
+
+ _Arguments_
+
+ `int TAPE_FD'
+ The file descriptor previously obtained by `ftvt_open()'.
+
+ `const ftvt *VOLUMES'
+ The libraries volume table representation. This must be
+ the same pointer as given to `ftvt_read()'.
+
+ `u_int8_t *BUFFER'
+ The buffer previously filled by `ftvt_read()'. This must
+ be the same pointer as given to `ftvt_read()'.
+
+ `int VTBL_CNT'
+ The number of volumes in the volume table. Setting this
+ to `0' and setting DO_WRITE to `1' will erase the volume
+ table.
+
+ `int DO_WRITE'
+ Flag. If set to `1', always write the volume table to
+ tape even if no modified entries are found.
+
+ _Return Value_
+ `-1' on error, `0' otherwise.
+
+ _Side Effects_
+ The tape is rewound after trying to write the volume table.
+
+ In case of an error an error string is generated and
+ remembered. It can be retrieved by a call to
+ `ftvt_get_ctrl()'. *Note Option Settings::.
+
+ _Diagnostics_
+ The following error messages are generated by `ftvt_write()'.
+ ERROR is the return value of `strerror(errno)'. *note Error
+ Messages: (libc)Error Messages. Note that libftvt has native
+ language support, so the actual message might differ from the
+ messages below depending on your `locale' setting.
+
+ `Ioctl Error writing volume table: ERROR'
+ The `MTIOCWRFTSEG' ioctl sent to the tape to write the
+ volume table failed. *Note Accessing arbitrary floppy
+ tape segments: (ftape-4)MTIOCRDFTSEG and MTIOCWRFTSEG.
+
+ `Error: Short write() writing volume table: BYTES'
+ Only BYTES could be written. This is a fatal error, the
+ volume table is probably damaged.
+
+ `Ioctl error rewinding tape: ERROR'
+ The `MTIOCGET' ioctl sent to the tape to rewind the
+ cartridge failed.
+
+ _Example_
+ if (ftvt_write(tapefd, volumes, buffer, num_volumes, 0)) == -1) {
+ struct ftvt_ctrl *info = ftvt_get_ctrl();
+
+ fprintf(stderr, "ftvt_write() failed: %s\n", info->errstr);
+
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
+
+
+
File: ftape-tools.info, Node: Printing and Parsing, Next: Modifying Entries, Prev: Tape I/O, Up: API
Printing volume table entries and parsing of input.
@@ -41,7 +332,7 @@
In case `FTVT_TAGGED' is set the output of `ftvt_print()' can be
used as input to `ftvt_parse_tagged()' (see below).
- *Arguments*
+ _Arguments_
`const ftvt *VOLUMES'
The libraries volume table representation. This must be
@@ -49,19 +340,19 @@
`int MAXNUM'
Number of entries in VOLUMES, i.e. the return value of
- `ftvt_read()' (*note Tape I/O::.), or `ftvt_add_volume()'
- (*note Modifying Entries::.).
+ `ftvt_read()' (*note Tape I/O::), or `ftvt_add_volume()'
+ (*note Modifying Entries::).
- *Return Value*
+ _Return Value_
None.
- *Side Effects*
+ _Side Effects_
None.
- *Example*
+ _Example_
ftvt_print(volumes, num_volumes);
- The resulting output would look like (`FTVT_TAGGED' *not* set)
+ The resulting output would look like (`FTVT_TAGGED' _not_ set)
Nr Id Label Date Start End Space
--------------------------------------------------------------------------------
@@ -114,21 +405,21 @@
- Library Function: void ftvt_print_one (const ftvt *VOLUME)
Print one volume table entry to `stdout'.
- *Arguments*
+ _Arguments_
`const ftvt *VOLUMES'
Pointer to the volume table entry to print
- *Return Value*
+ _Return Value_
None.
- *Side effects*
+ _Side effects_
None.
- *Diagnostics*
+ _Diagnostics_
None.
- *Example*
+ _Example_
ftvt_print_one(volume);
@@ -136,21 +427,21 @@
Print one volume table entry in tagged output format (i.e.
keyword-value pairs) to `stdout'.
- *Arguments*
+ _Arguments_
`const ftvt *VOLUMES'
Pointer to the volume table entry to print
- *Return Value*
+ _Return Value_
None.
- *Side effects*
+ _Side effects_
None.
- *Diagnostics*
+ _Diagnostics_
None.
- *Example*
+ _Example_
ftvt_print_one_tagged(volume);
@@ -159,7 +450,7 @@
stream must consist of certain keyword-value pairs as described in
*Note Vtblc Options::, option `--modify=tagged'.
- *Arguments*
+ _Arguments_
`const ftvt *VOLUMES'
Pointer to the storage area for the input. Must consists
@@ -169,15 +460,15 @@
initialised by `ftvt_read()' when reading in the volume
table segment.
- *Return Value*
+ _Return Value_
`-1' on error, the number of volumes otherwise.
- *Side effects*
+ _Side effects_
In case of an error an error string is generated and
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error messages are generated by
`ftvt_parse_tagged()'. ERROR is the return value of
`strerror(errno)'. *note Error Messages: (libc)Error
@@ -187,7 +478,7 @@
`Corrupt volume input data: BUFFER'
The input data doesn't obey the required format (*note
- Vtblc Options::., option `--modify=tagged').
+ Vtblc Options::, option `--modify=tagged').
BUFFER is the contents of the input buffer.
@@ -201,7 +492,7 @@
`Premature end of volume table'
The volume table descriptions didn't end with `VTBL END'.
- *Example*
+ _Example_
if ((num_volumes = ftvt_parse_tagged(volumes)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -224,7 +515,7 @@
would fit into the volume table and set the format code of the
entry. All other fields are uninitialised.
- *Arguments*
+ _Arguments_
`const ftvt *VOLUMES'
The libraries volume table representation. This must be
@@ -234,16 +525,16 @@
The number of volumes as returned by `ftvt_read()' or a
previous call to `ftvt_add_volume()'.
- *Return Value*
+ _Return Value_
The new number of volumes (i.e. `NUM_VOLUMES + 1'), or `-1'
if no more volumes would fit into the volume table.
- *Side effects*
+ _Side effects_
In case of an error an error string is generated and
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error message is generated by
`ftvt_add_volume()'.Note that libftvt has native language
support, so the actual message might differ from the messages
@@ -253,7 +544,7 @@
The new number of volumes would exceed the number of
volumes which fit into the volume table segment.
- *Example*
+ _Example_
if ((num_volumes = ftvt_add_volume(volumes, num_volumes)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -269,13 +560,13 @@
various QIC-something standards. This is year 2000 proof, but will
overflow in year 2097 :-)
- *Arguments*
+ _Arguments_
`u_int32_t TIMESTAMP'
Time stamp in the format described in the various QIC
standards (QIC Home Page (http://www.qic.org)).
- *Return Value*
+ _Return Value_
The date and time in the `%T %D' format. *note Formatting
Date and Time: (libc)Formatting Date and Time or `man 3
strftime'.
@@ -288,15 +579,15 @@
Note that the return value is a pointer to a statically
allocated storage area.
- *Side effects*
+ _Side effects_
None.
- *Diagnostics*
+ _Diagnostics_
The string `invalid' (or its translations into the various
languages supported by the ftape-tools library) is return if
the date given in TIMESTAMP is not a valid QIC time stamp.
- *Example*
+ _Example_
const char *date = ftvt_decode_date(0x01ea6dff);
This should yield `23:59:59 12/31/70'.
@@ -306,7 +597,7 @@
const char *DATE, int VTBL_NO)
Set the date field of the given volume table entry.
- *Arguments*
+ _Arguments_
`ftvt *VOLUMES'
Pointer to the libraries volume table representation.
@@ -325,10 +616,10 @@
The number of the volume table entry to modify, i.e. the
index into VOLUMES.
- *Return Value*
+ _Return Value_
`-1' on error `0' otherwise.
- *Side effects*
+ _Side effects_
The volume table entry modified by this function is flagged
`dirty' and this will be written to tape if `ftvt_write()' is
called.
@@ -337,7 +628,7 @@
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error message is generated by
`ftvt_set_date()'. Note that libftvt has native language
support, so the actual message might differ from the messages
@@ -346,7 +637,7 @@
`Volume number too big or negative: VTBL_NO'
Self-explanatory.
- *Example*
+ _Example_
if (ftvt_set_date(volumes, maxnum, "23:59:59 12/31/70", 1)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -361,7 +652,7 @@
const char *DESC, int VTBL_NO)
Set the label field of the given volume table entry.
- *Arguments*
+ _Arguments_
`ftvt *VOLUMES'
Pointer to the libraries volume table representation.
@@ -379,10 +670,10 @@
The number of the volume table entry to modify, i.e. the
index into VOLUMES.
- *Return Value*
+ _Return Value_
`-1' on error `0' otherwise.
- *Side effects*
+ _Side effects_
The volume table entry modified by this function is flagged
`dirty' and this will be written to tape if `ftvt_write()' is
called.
@@ -391,7 +682,7 @@
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error message is generated by
`ftvt_set_label()'. Note that libftvt has native language
support, so the actual message might differ from the messages
@@ -400,7 +691,7 @@
`Volume number too big or negative: VTBL_NO'
Self-explanatory.
- *Example*
+ _Example_
if (ftvt_set_label(volumes, maxnum, "Bugs Bunny", 1)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -415,7 +706,7 @@
int START, int END, int VTBL_NO)
Set the segment bounds for a given volume table entry.
- *Arguments*
+ _Arguments_
`ftvt *VOLUMES'
Pointer to the libraries volume table representation.
@@ -429,17 +720,17 @@
`int END'
Start and end segments for this volume. The function
performs some range checking against the dimensions of
- the inserted cartridge, but does *not* check for
+ the inserted cartridge, but does _not_ check for
overlapping volumes.
`int VTBL_NO)'
The number of the volume table entry to modify, i.e. the
index into VOLUMES.
- *Return Value*
+ _Return Value_
`-1' on error `0' otherwise.
- *Side effects*
+ _Side effects_
The volume table entry modified by this function is flagged
`dirty' and this will be written to tape if `ftvt_write()' is
called.
@@ -448,7 +739,7 @@
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error messages are generated by
`ftvt_set_label()'. Note that libftvt has native language
support, so the actual message might differ from the messages
@@ -464,7 +755,7 @@
Obviously, END should be less or equal than the last
segment of this cartridge.
- *Example*
+ _Example_
if (ftvt_set_bounds(volumes, maxnum, 11, 12, 1)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -479,7 +770,7 @@
char *ID, int VTBL_NO)
Set the volume entry ID.
- *Arguments*
+ _Arguments_
`ftvt *VOLUMES'
Pointer to the libraries volume table representation.
@@ -499,10 +790,10 @@
The number of the volume table entry to modify, i.e. the
index into VOLUMES.
- *Return Value*
+ _Return Value_
`-1' on error `0' otherwise.
- *Side effects*
+ _Side effects_
The volume table entry modified by this function is flagged
`dirty' and this will be written to tape if `ftvt_write()' is
called.
@@ -511,7 +802,7 @@
remembered. It can be retrieved by a call to
`ftvt_get_ctrl()'. *Note Option Settings::.
- *Diagnostics*
+ _Diagnostics_
The following error message is generated by `ftvt_set_id()'.
Note that libftvt has native language support, so the actual
message might differ from the messages below depending on
@@ -523,7 +814,7 @@
`Volume ID must consist of exactly four characters'
Self-explanatory.
- *Example*
+ _Example_
if (ftvt_set_id(volumes, maxnum, "VTBL", 1)) == -1) {
struct ftvt_ctrl *info = ftvt_get_ctrl();
@@ -547,10 +838,9 @@
yet.
`contrib/KBackup/'
- This directory contains a patch for the
- KBackup (http://KBackup.home.ml.org/) program. `KBackup-1.2.11'
- will work with ftape-3.04d or ftape-4.03 unless you apply that
- patch.
+ This directory contains a patch for the KBackup
+ (http://KBackup.home.ml.org/) program. `KBackup-1.2.11' will work
+ with ftape-3.04d or ftape-4.03 unless you apply that patch.
`contrib/Linux'
Here you find some useful or for certain old kernel versions even
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/stamp-vti ftape-tools-1.09/doc/texi/stamp-vti
--- ftape-tools-1.08/doc/texi/stamp-vti Sun Jun 25 20:41:21 2000
+++ ftape-tools-1.09/doc/texi/stamp-vti Sat Jul 22 20:50:33 2000
@@ -1,3 +1,3 @@
-@set UPDATED 25 June 2000
-@set EDITION 1.08
-@set VERSION 1.08
+@set UPDATED 22 July 2000
+@set EDITION 1.09
+@set VERSION 1.09
diff -u --recursive --new-file ftape-tools-1.08/doc/texi/version.texi ftape-tools-1.09/doc/texi/version.texi
--- ftape-tools-1.08/doc/texi/version.texi Sun Jun 25 19:56:11 2000
+++ ftape-tools-1.09/doc/texi/version.texi Sat Jul 22 20:50:33 2000
@@ -1,3 +1,3 @@
-@set UPDATED 25 June 2000
-@set EDITION 1.08
-@set VERSION 1.08
+@set UPDATED 22 July 2000
+@set EDITION 1.09
+@set VERSION 1.09
diff -u --recursive --new-file ftape-tools-1.08/include/ftape/linux/ftape-header-segment.h ftape-tools-1.09/include/ftape/linux/ftape-header-segment.h
--- ftape-tools-1.08/include/ftape/linux/ftape-header-segment.h Fri Dec 18 23:45:53 1998
+++ ftape-tools-1.09/include/ftape/linux/ftape-header-segment.h Thu Jul 20 18:29:04 2000
@@ -20,8 +20,8 @@
*
* $RCSfile: ftape-header-segment.h,v $
- * $Revision: 1.2 $
- * $Date: 1998/12/18 22:45:53 $
+ * $Revision: 1.3 $
+ * $Date: 2000/07/20 16:29:04 $
*
* This file defines some offsets into the header segment of a
* floppy tape cartridge. For use with the QIC-40/80/3010/3020
diff -u --recursive --new-file ftape-tools-1.08/include/ftape/linux/ftape-vendors.h ftape-tools-1.09/include/ftape/linux/ftape-vendors.h
--- ftape-tools-1.08/include/ftape/linux/ftape-vendors.h Fri Feb 26 13:56:47 1999
+++ ftape-tools-1.09/include/ftape/linux/ftape-vendors.h Thu Jul 20 18:29:04 2000
@@ -21,8 +21,8 @@
*
* $RCSfile: ftape-vendors.h,v $
- * $Revision: 1.4 $
- * $Date: 1999/02/26 12:56:47 $
+ * $Revision: 1.5 $
+ * $Date: 2000/07/20 16:29:04 $
*
* This file contains the supported drive types with their
* QIC-117 spec. vendor code and drive dependent configuration
diff -u --recursive --new-file ftape-tools-1.08/include/ftape/linux/ftape.h ftape-tools-1.09/include/ftape/linux/ftape.h
--- ftape-tools-1.08/include/ftape/linux/ftape.h Fri Dec 18 23:45:53 1998
+++ ftape-tools-1.09/include/ftape/linux/ftape.h Thu Jul 20 18:29:04 2000
@@ -3,7 +3,7 @@
/*
* Copyright (C) 1994-1996 Bas Laarhoven,
- * (C) 1996-1997 Claus-Justus Heine.
+ * (C) 1996-2000 Claus-Justus Heine.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,17 +21,15 @@
*
* $RCSfile: ftape.h,v $
- * $Revision: 1.2 $
- * $Date: 1998/12/18 22:45:53 $
+ * $Revision: 1.3 $
+ * $Date: 2000/07/20 16:29:04 $
*
* This file contains global definitions, typedefs and macro's
* for the QIC-40/80/3010/3020 floppy-tape driver for Linux.
+ *
*/
-#define FTAPE_VERSION "ftape v4.x alpha $Date: 1998/12/18 22:45:53 $"
-
-/* this makes the Kernel version numbers readable */
-#define KERNEL_VER(major,minor,sublvl) (((major)<<16)+((minor)<<8)+(sublvl))
+#define FTAPE_VERSION "ftape v4.03 06/30/2000"
#ifdef __KERNEL__
#include
@@ -39,6 +37,11 @@
#endif
#include
#include
+#ifdef KERNEL_VERSION
+# define KERNEL_VER(major,minor,sublvl) KERNEL_VERSION(major,minor,sublevel)
+#else
+# define KERNEL_VER(major,minor,sublvl) (((major)<<16)+((minor)<<8)+(sublvl))
+#endif
#include
#if LINUX_VERSION_CODE <= KERNEL_VER(1,2,13)
typedef daddr_t __kernel_daddr_t; /* needed for mtio.h */
@@ -50,13 +53,15 @@
# define __initdata
# define __initfunc(__arg) __arg
#endif
-#if LINUX_VERSION_CODE >= KERNEL_VER(2,0,90)
+#if LINUX_VERSION_CODE >= KERNEL_VER(2,1,90)
# ifdef CONFIG_KMOD
# include
+# define FT_MODULE_AUTOLOAD
# endif
#else
# ifdef CONFIG_KERNELD
# include
+# define FT_MODULE_AUTOLOAD
# endif
#endif
@@ -123,17 +128,115 @@
#define THE_FTAPE_MAINTAINER "the ftape maintainer"
#endif
-#ifndef CONFIG_FT_DRIVER_0
-# define CONFIG_FT_DRIVER_0 "ftape-internal"
+/* default hardware configuration. This is ugly. Maybe my
+ * configuration menu should be more sparse ...
+ */
+/* first ftape device
+ */
+#ifdef CONFIG_FT_NONE_0
+# define CONFIG_FT_FDC_DRIVER_0 "none"
+#elif defined(CONFIG_FT_INT_0)
+# define CONFIG_FT_FDC_DRIVER_0 "ftape-internal"
+#elif defined(CONFIG_FT_PAR_0)
+# if defined(CONFIG_FT_TRAKKER_0)
+# define CONFIG_FT_FDC_DRIVER_0 "trakker"
+# elif defined(CONFIG_FT_BPCK_0)
+# define CONFIG_FT_FDC_DRIVER_0 "bpck-fdc"
+# elif defined(CONFIG_FT_TRAKKERBPCK_0)
+# define CONFIG_FT_FDC_DRIVER_0 "trakker:bpck-fdc"
+# endif
+#endif /* CONFIG_FT_PAR_0 */
+
+#ifdef CONFIG_FT_NONE_1
+# define CONFIG_FT_FDC_DRIVER_1 "none"
+#elif defined(CONFIG_FT_INT_1)
+# define CONFIG_FT_FDC_DRIVER_1 "ftape-internal"
+#elif defined(CONFIG_FT_PAR_1)
+# if defined(CONFIG_FT_TRAKKER_1)
+# define CONFIG_FT_FDC_DRIVER_1 "trakker"
+# elif defined(CONFIG_FT_BPCK_1)
+# define CONFIG_FT_FDC_DRIVER_1 "bpck-fdc"
+# elif defined(CONFIG_FT_TRAKKERBPCK_1)
+# define CONFIG_FT_FDC_DRIVER_1 "trakker:bpck-fdc"
+# endif
+#endif /* CONFIG_FT_PAR_1 */
+
+#ifdef CONFIG_FT_NONE_2
+# define CONFIG_FT_FDC_DRIVER_2 "none"
+#elif defined(CONFIG_FT_INT_2)
+# define CONFIG_FT_FDC_DRIVER_2 "ftape-internal"
+#elif defined(CONFIG_FT_PAR_2)
+# if defined(CONFIG_FT_TRAKKER_2)
+# define CONFIG_FT_FDC_DRIVER_2 "trakker"
+# elif defined(CONFIG_FT_BPCK_2)
+# define CONFIG_FT_FDC_DRIVER_2 "bpck-fdc"
+# elif defined(CONFIG_FT_TRAKKERBPCK_2)
+# define CONFIG_FT_FDC_DRIVER_2 "trakker:bpck-fdc"
+# endif
+#endif /* CONFIG_FT_PAR_2 */
+
+#ifdef CONFIG_FT_NONE_3
+# define CONFIG_FT_FDC_DRIVER_3 "none"
+#elif defined(CONFIG_FT_INT_3)
+# define CONFIG_FT_FDC_DRIVER_3 "ftape-internal"
+#elif defined(CONFIG_FT_PAR_3)
+# if defined(CONFIG_FT_TRAKKER_3)
+# define CONFIG_FT_FDC_DRIVER_3 "trakker"
+# elif defined(CONFIG_FT_BPCK_3)
+# define CONFIG_FT_FDC_DRIVER_3 "bpck-fdc"
+# elif defined(CONFIG_FT_TRAKKERBPCK_3)
+# define CONFIG_FT_FDC_DRIVER_3 "trakker:bpck-fdc"
+# endif
+#endif /* CONFIG_FT_PAR_3 */
+
+#ifndef CONFIG_FT_FDC_DRIVER_0
+# define CONFIG_FT_FDC_DRIVER_0 NULL
+#endif
+#ifndef CONFIG_FT_FDC_DRIVER_1
+# define CONFIG_FT_FDC_DRIVER_1 NULL
+#endif
+#ifndef CONFIG_FT_FDC_DRIVER_2
+# define CONFIG_FT_FDC_DRIVER_2 NULL
+#endif
+#ifndef CONFIG_FT_FDC_DRIVER_3
+# define CONFIG_FT_FDC_DRIVER_3 NULL
+#endif
+#ifndef CONFIG_FT_FDC_THRESHOLD_0
+# define CONFIG_FT_FDC_THRESHOLD_0 8
+#endif
+#ifndef CONFIG_FT_FDC_THRESHOLD_1
+# define CONFIG_FT_FDC_THRESHOLD_1 8
#endif
-#ifndef CONFIG_FT_DRIVER_1
-# define CONFIG_FT_DRIVER_1 NULL
+#ifndef CONFIG_FT_FDC_THRESHOLD_2
+# define CONFIG_FT_FDC_THRESHOLD_2 8
#endif
-#ifndef CONFIG_FT_DRIVER_2
-# define CONFIG_FT_DRIVER_2 NULL
+#ifndef CONFIG_FT_FDC_THRESHOLD_3
+# define CONFIG_FT_FDC_THRESHOLD_3 8
#endif
-#ifndef CONFIG_FT_DRIVER_3
-# define CONFIG_FT_DRIVER_3 NULL
+#ifndef CONFIG_FT_FDC_MAX_RATE_0
+# define CONFIG_FT_FDC_MAX_RATE_0 4000
+#endif
+#ifndef CONFIG_FT_FDC_MAX_RATE_1
+# define CONFIG_FT_FDC_MAX_RATE_1 4000
+#endif
+#ifndef CONFIG_FT_FDC_MAX_RATE_2
+# define CONFIG_FT_FDC_MAX_RATE_2 4000
+#endif
+#ifndef CONFIG_FT_FDC_MAX_RATE_3
+# define CONFIG_FT_FDC_MAX_RATE_3 4000
+#endif
+
+#ifdef CONFIG_FTAPE_MODULE
+/* This is just a hack to enable compilation with kernel which already
+ * have a -- possibly different -- version of ftape compiled into the
+ * kernel image.
+ */
+#undef CONFIG_FTAPE
+#undef CONFIG_FT_INTERNAL
+#undef CONFIG_FT_TRAKKER
+#undef CONFIG_FT_BPCK
+#undef CONFIG_ZFTAPE
+#undef CONFIG_ZFT_COMPRESSOR
#endif
/* some useful macro's
diff -u --recursive --new-file ftape-tools-1.08/include/ftape/linux/qic117.h ftape-tools-1.09/include/ftape/linux/qic117.h
--- ftape-tools-1.08/include/ftape/linux/qic117.h Fri Dec 18 23:45:53 1998
+++ ftape-tools-1.09/include/ftape/linux/qic117.h Thu Jul 20 18:29:04 2000
@@ -3,7 +3,7 @@
/*
* Copyright (C) 1993-1996 Bas Laarhoven,
- * (C) 1997 Claus-Justus Heine.
+ * (C) 1997-1998 Claus-Justus Heine.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,8 +21,8 @@
*
* $RCSfile: qic117.h,v $
- * $Revision: 1.2 $
- * $Date: 1998/12/18 22:45:53 $
+ * $Revision: 1.3 $
+ * $Date: 2000/07/20 16:29:04 $
*
* This file contains QIC-117 spec. related definitions for the
* QIC-40/80/3010/3020 floppy-tape driver "ftape" for Linux.
diff -u --recursive --new-file ftape-tools-1.08/include/ftape/linux/zftape.h ftape-tools-1.09/include/ftape/linux/zftape.h
--- ftape-tools-1.08/include/ftape/linux/zftape.h Tue Aug 31 12:07:44 1999
+++ ftape-tools-1.09/include/ftape/linux/zftape.h Thu Jul 20 18:29:04 2000
@@ -20,8 +20,8 @@
*
* $RCSfile: zftape.h,v $
- * $Revision: 1.3 $
- * $Date: 1999/08/31 10:07:44 $
+ * $Revision: 1.4 $
+ * $Date: 2000/07/20 16:29:04 $
*
* Special ioctl and other global info for the zftape VFS
* interface for the QIC-40/80/3010/3020 floppy-tape driver for
@@ -36,7 +36,7 @@
/* Bits of the minor device number that control the operation mode */
-#ifndef ZFT_OBSOLETE
+#ifndef CONFIG_ZFT_OBSOLETE
# define ZFT_MINOR_OP_MASK 0
#else
@@ -61,7 +61,7 @@
unsigned int mt_blksz;
};
# define MTIOC_ZFTAPE_GETBLKSZ _IOR('m', 104, struct mtblksz)
-#endif /* ZFT_OBSOLETE */
+#endif /* CONFIG_ZFT_OBSOLETE */
/* valid bits of minor device number */
#define ZFT_MINOR_MASK (FTAPE_SEL_MASK | \
diff -u --recursive --new-file ftape-tools-1.08/po/POTFILES.in ftape-tools-1.09/po/POTFILES.in
--- ftape-tools-1.08/po/POTFILES.in Thu Feb 11 02:25:57 1999
+++ ftape-tools-1.09/po/POTFILES.in Fri Jul 21 10:24:48 2000
@@ -13,6 +13,7 @@
src/swapout/swapout.c
src/vtblc/vtblc.c
src/vtblc/libftvt.c
+src/vtblc/libftvt-bsm.c
src/ftmt/mt.c
src/ftmt/rtapelib.c
#
diff -u --recursive --new-file ftape-tools-1.08/po/cat-id-tbl.c ftape-tools-1.09/po/cat-id-tbl.c
--- ftape-tools-1.08/po/cat-id-tbl.c Sat Sep 11 00:56:40 1999
+++ ftape-tools-1.09/po/cat-id-tbl.c Mon Jul 24 01:01:01 2000
@@ -95,7 +95,8 @@
Erase cartridge before verifying. NOTE: this is\n\
different from the erasing the FORMAT of the\n\
cartridge (see \"--omit-erase\"). HERE it simply\n\
- means to fill all segments with zero bytes.\n\
+ means to fill all segments with zero bytes prior\n\
+ to verifying.\n\
\n\
--print-header Print the contents of the header segment in a\n\
keyword-value fashion. The bad sector map is also\n\
@@ -273,8 +274,8 @@
{"Unknown format API version. Giving up.\n", 68},
{"Unknown api version: 0x%08x\n", 69},
{"\
-Please ignore the error message printed above if in case\n\
-that your cartridge can be formatted successfully!\n", 70},
+Please ignore the error message printed above if\n\
+your cartridge can be formatted successfully!\n", 70},
{"\
Please ignore the error message printed above if it proves\n\
that your cartridge can be formatted successfully.\n", 71},
@@ -328,6 +329,7 @@
-d, --debug Unused yet.\n\
-v, --verbose Be verbose (default).\n\
-q, --quiet Don't be verbose.\n\
+ -b, --bsm Print the bad sector map and quit.\n\
-#, --vtbl-entry=NR Specify the volume number for \"--print\" and\n\
\"--modify\".\n\
-p, --print[=tagged] Print the volume table entry given by\n\
@@ -346,7 +348,7 @@
\"--vtbl-entry\". If \"--vtbl-entry\" has been\n\
omitted then the last entry is modified.\n\
\n\
-\"--apend\" and \"--modify\" understand the following sub-options:\n\
+\"--append\" and \"--modify\" understand the following sub-options:\n\
\n\
label=LABEL The description for this volume table entry.\n\
LABEL will be truncated to 44 bytes.\n\
@@ -364,9 +366,12 @@
space characters (SPACE or TAB).\n\
`vtblc` understands the following keywords and values:\n\
\n\
- ENTRY NUM Starts the description for the volume NUM. This may\n\
- be ommitted if the \"--vtbl-entry=NUM\" has been\n\
- given.\n\
+ VTBL START\n\
+ VTBL END Marks the start of vtbl data. Maybe useful when\n\
+ sending volume table entries via email :-).\n\
+ However, the entire volume table data must be\n\
+ surrounded by a \"VTBL START\" - \"VTBL END\" pair.\n\
+ ENTRY NUM Starts the description for the volume NUM.\n\
ENTRY END Here END is not a placeholder, but means the\n\
word \"END\". Ends the description for the volume\n\
table entry previously started by \"ENTRY NUM\".\n\
@@ -374,10 +379,25 @@
modifies the volume number NUM. This provides means\n\
to modify the entire volume table in a single run.\n\
\n\
- SIGNATURE \"SIG\" Valid signature string. Only \"VTBL\" is\n\
- for now.\n\
+ SIGNATURE \"SIG\" Valid signature string. Must be one out of\n\
+ \"VTBL\", \"XTBL\", \"EXVT\" and \"UTID\".\n\
+ If this tag is used it MUST be the first entry\n\
+ after the \"ENTRY\" tag. If the \"SIGNATURE\" tag\n\
+ is missing, \"VTBL\" is assumed.\n\
+\n\
+The following entry is for signatures other than \"VTBL\":\n\
+\n\
+ ENTRY_DATA \"HEX\" Data following the signature \"HEX\" is a string\n\
+ of hexadecimal byte values, e.g. \"0x01 0x4f ...\",\n\
+ of length at most 124. If less bytes are presented\n\
+ the entry will be padded with zeroes.\n\
+\n\
+Following entries are for for signature \"VTBL\":\n\
+\n\
START STARTSEG First segment of this volume.\n\
END ENDSEG Last segment of this volume.\n\
+ NUM_SEGMENTS NUM Number of segments occupied (optional).\n\
+ If omitted, will be set to (ENDSEG-STARTSEG+1)\n\
DESCRIPTION \"DESC\" Description for this volume table. Will be\n\
truncated to 44 characters.\n\
DATE \"DATESTR\" Date for the volume. If \"DATESTR\" is ommitted,\n\
@@ -391,12 +411,26 @@
FLAG_RESERVED_6 VAL\n\
FLAG_RESERVED_7 VAL\n\
MULTI_CARTRIDGE_COUNT VAL\n\
+\n\
+The following tags are understood only if FLAG_VENDOR_SPECIFIC is 0\n\
+or if FLAG_VENDOR_SPECIFIC is 1 and QIC_MAJOR is 113:\n\
+\n\
+ QIC_MAJOR VAL Major number of QIC spec cartridge conforms to,\n\
+ only for cartridges with more than 65536 segments.\n\
+ VAL should be 113 for all cases.\n\
+ QIC_MINOR VAL Minor revision number of QIC spec. Only for\n\
+ cartridges with more thatn 65536 segments.\n\
+ At the time of this writing, QIC-113, Rev. G, is\n\
+ is the latest one, so VAL should be 7.\n\
VENDOR_EXTENSION \"HEX\" Vendor extension data. \"HEX\" is a string\n\
of hexadecimal byte values, i.e. \"0x01 0x4f ...\"\n\
+ The maximal lenght of this string is 14 bytes for\n\
+ cartridges with more thatn 2^16 = 65536 segments\n\
+ and 26 bytes for smaller cartridges\n\
PASSWORD \"HEX\" Password. \"HEX\" as above.\n\
DIRECTORY_SIZE VAL\n\
DATA_SIZE VAL64 64 bit value (a decimal count)\n\
- OS_VERSION HEX Here \"HEX\" is a hexadecimal 4 bytes value.\n\
+ OS_VERSION HEX Here \"HEX\" is a hexadecimal 2 bytes value.\n\
SOURCE_DRIVE DRVSTR Source drive. \"DRVSTR\" is a 16 byte string.\n\
DEVICE HEXBYTE A single byte in hexadecimal notation.\n\
RESERVED_1 HEXBYTE\n\
@@ -405,6 +439,12 @@
RESERVED_2 HEXBYTE\n\
RESERVED_3 HEXBYTE\n\
\n\
+If FLAG_VENDOR_SPECIFIC is 1, then the following tag is allowed:\n\
+\n\
+ VENDOR_DATA \"HEX\" A string of hexadecimal values of lenght at most\n\
+ 72 to fill the remainder of the volume table entry.\n\
+ Smaller strings will be padded with zero bytes.\n\
+\n\
Strings with spaces have to be surrounded by double quotes \"...\"\n\
\"VAL\" is some decimal number.\n\
\n", 100},
@@ -429,63 +469,70 @@
{"Corrupt volume input data: %s\n", 117},
{"Too many volumes: %d (%d max)\n", 118},
{"Corrupt volume input data\n", 119},
- {"Premature end of volume table\n", 120},
- {"Writing volume table segment ... ", 121},
- {"Ioctl error writing volume table", 122},
- {"Error: Short write() writing volume table: %d\n", 123},
- {"Start segment (%d) should be less than end segment (%d)\n", 124},
- {"End segment (%d) must be less than %d\n", 125},
- {"Volume ID must consist of exactly four characters\n", 126},
- {"tape operation", 127},
- {"no tape device specified", 128},
- {"At block %d.\n", 129},
- {"%s is not a character special file", 130},
- {"Drive is a %s, (drive type = %d)\n", 131},
- {"This is a %s floppy tape drive, (drive type = 0x%04lx)\n", 132},
- {"This is a floppy tape drive, drive type = %d, drive name unknown.\n", 133},
- {"drive type = %d, drive name unknown.\n", 134},
- {"drive status (high) = %d\n", 135},
- {"drive status (low) = %d\n", 136},
- {"drive status = 0x%08x\n", 137},
- {"generic drive status = 0x%08x\n", 138},
- {"(In particular: ", 139},
- {"at end of file", 140},
- {"at begin of tape", 141},
- {"at end of tape", 142},
- {"at DDS setmark", 143},
- {"at end of data", 144},
- {"tape write protected", 145},
- {"tape online", 146},
- {"density 6250 (scsi)", 147},
- {"density 1600 (scsi)", 148},
- {"density 800 (scsi)", 149},
- {"door open (no tape)", 150},
- {"immediate report mode (scsi)", 151},
- {"sense key error = 0x%08x\n", 152},
- {"residue count = %d\n", 153},
- {"file number = %d\n", 154},
- {"block number = %d\n", 155},
- {"\
-\n\
-MTIOCVOLINFO result:\n", 156},
- {"block size = %d\n", 157},
- {"physical space used = %6.1f %sbytes\n", 158},
- {"real size of volume = %6.1f %sbytes\n", 159},
- {"physical space used = %10.0u kilobytes\n", 160},
- {"real size of volume = %10.0u kilobytes\n", 161},
- {"compression ratio = %d %%\n", 162},
- {"\
-\n\
-MTIOCGETSIZE result:\n", 163},
- {"total bytes on tape = %6.1f %sbytes\n", 164},
- {"total bytes used = %6.1f %sbytes\n", 165},
- {"total bytes left = %6.1f %sbytes\n", 166},
- {"total bytes on tape = %10.0lu kilobytes\n", 167},
- {"total bytes used = %10.0lu kilobytes\n", 168},
- {"total bytes left = %10.0lu kilobytes\n", 169},
- {"Couldn't access segment %d on tape device %s", 170},
- {"Known tape operations:\n", 171},
- {"cannot execute remote shell", 172},
+ {"SIGNATURE tag must follow ENTRY at once.\n", 120},
+ {"Premature end of volume table\n", 121},
+ {"Writing volume table segment ... ", 122},
+ {"Ioctl error writing volume table", 123},
+ {"Error: Short write() writing volume table: %d\n", 124},
+ {"Start segment (%d) should be less than end segment (%d)\n", 125},
+ {"End segment (%d) must be less than %d\n", 126},
+ {"Volume ID must consist of exactly four characters\n", 127},
+ {"Too many bad sectors, no space left in the bad sector map", 128},
+ {"\
+\n\
+total number of sectors: %d\n", 129},
+ {"number of bad sectors : %d (%2.2f%%)\n", 130},
+ {"number of good sectors : %d (%2.2f%%)\n", 131},
+ {"tape operation", 132},
+ {"no tape device specified", 133},
+ {"At block %d.\n", 134},
+ {"%s is not a character special file", 135},
+ {"Drive is a %s, (drive type = %d)\n", 136},
+ {"This is a %s floppy tape drive, (drive type = 0x%04lx)\n", 137},
+ {"This is a floppy tape drive, drive type = %d, drive name unknown.\n", 138},
+ {"drive type = %d, drive name unknown.\n", 139},
+ {"drive status (high) = %d\n", 140},
+ {"drive status (low) = %d\n", 141},
+ {"drive status = 0x%08x\n", 142},
+ {"generic drive status = 0x%08x\n", 143},
+ {"(In particular: ", 144},
+ {"at end of file", 145},
+ {"at begin of tape", 146},
+ {"at end of tape", 147},
+ {"at DDS setmark", 148},
+ {"at end of data", 149},
+ {"tape write protected", 150},
+ {"tape online", 151},
+ {"density 6250 (scsi)", 152},
+ {"density 1600 (scsi)", 153},
+ {"density 800 (scsi)", 154},
+ {"door open (no tape)", 155},
+ {"immediate report mode (scsi)", 156},
+ {"sense key error = 0x%08x\n", 157},
+ {"residue count = %d\n", 158},
+ {"file number = %d\n", 159},
+ {"block number = %d\n", 160},
+ {"\
+\n\
+MTIOCVOLINFO result:\n", 161},
+ {"block size = %d\n", 162},
+ {"physical space used = %6.1f %sbytes\n", 163},
+ {"real size of volume = %6.1f %sbytes\n", 164},
+ {"physical space used = %10.0u kilobytes\n", 165},
+ {"real size of volume = %10.0u kilobytes\n", 166},
+ {"compression ratio = %d %%\n", 167},
+ {"\
+\n\
+MTIOCGETSIZE result:\n", 168},
+ {"total bytes on tape = %6.1f %sbytes\n", 169},
+ {"total bytes used = %6.1f %sbytes\n", 170},
+ {"total bytes left = %6.1f %sbytes\n", 171},
+ {"total bytes on tape = %10.0lu kilobytes\n", 172},
+ {"total bytes used = %10.0lu kilobytes\n", 173},
+ {"total bytes left = %10.0lu kilobytes\n", 174},
+ {"Couldn't access segment %d on tape device %s", 175},
+ {"Known tape operations:\n", 176},
+ {"cannot execute remote shell", 177},
};
-int _msg_tbl_length = 172;
+int _msg_tbl_length = 177;
Binary files ftape-tools-1.08/po/de.gmo and ftape-tools-1.09/po/de.gmo differ
diff -u --recursive --new-file ftape-tools-1.08/po/de.po ftape-tools-1.09/po/de.po
--- ftape-tools-1.08/po/de.po Sun Jul 2 23:47:11 2000
+++ ftape-tools-1.09/po/de.po Mon Jul 24 01:05:40 2000
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: ftape-tools 1.0\n"
-"POT-Creation-Date: 2000-06-25 23:40+0200\n"
-"PO-Revision-Date: 1999-09-11 01:46+02:00\n"
+"POT-Creation-Date: 2000-07-24 00:58+0200\n"
+"PO-Revision-Date: 2000-07-24 00:59+02:00\n"
"Last-Translator: Claus-Justus Heine \n"
"Language-Team: Deutsch \n"
"MIME-Version: 1.0\n"
@@ -45,7 +45,7 @@
msgid "The option \"%s\" takes no value!\n"
msgstr "Die Option \"%s\" braucht kein Argument!\n"
-#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:164
+#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:169
#, c-format
msgid "The option \"%s\" needs a value!\n"
msgstr "Die Option \"%s\" braucht ein Argument!\n"
@@ -65,7 +65,7 @@
msgid "Size of dma buffer %s must be greater than %d\n"
msgstr "Die angegebene Größe %s des DMA Puffers hätte %d übertreffen müssen\n"
-#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:230
+#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:238
#, c-format
msgid "?? getopt returned character code 0%o ??\n"
msgstr ""
@@ -169,7 +169,8 @@
" Erase cartridge before verifying. NOTE: this is\n"
" different from the erasing the FORMAT of the\n"
" cartridge (see \"--omit-erase\"). HERE it simply\n"
-" means to fill all segments with zero bytes.\n"
+" means to fill all segments with zero bytes prior\n"
+" to verifying.\n"
"\n"
" --print-header Print the contents of the header segment in a\n"
" keyword-value fashion. The bad sector map is also\n"
@@ -290,89 +291,128 @@
" -? Siehe '-h'.\n"
" --usage Siehe '-h'.\n"
" -V, --version Ausgabe der Versionsnummer.\n"
-" -d, --debug Nicht benutzt.\n"
-" -v, --verbose Nicht benutzt.\n"
+" -d, --debug Unbenutzt.\n"
+" -v, --verbose Unbenutzt.\n"
+"\n"
" --parsable-ouput Jede Ausgabe wird mit \"\\n\" abgeschlossen. "
"Backspace\n"
" (\"\\r\") wird nicht benutzt. Diese Option wird vom\n"
" tcl/tk GUI \"ftape-tool\" benutzt.\n"
+"\n"
" -L, --label=BESCHREIBUNG Beschreibung dieser Kasette. Wird im "
"\"Headersegment\"\n"
" gespeichert.\n"
-" --omit-erase Der Versuch, die Kasette mittels der QIC-117 "
+"\n"
+" --omit-erase Der Versuch, die Kasette mittels der QIC-117 "
"Kommandos\n"
-" \"physical forward\" und \"physical reverse\" zu "
+" \"physical forward\" und \"physical reverse\" zu "
"löschen,\n"
-" wird unterlassen. Diese Option macht nur bei "
+" wird unterlassen. Diese Option macht nur bei "
"bereits\n"
-" formatierten Kasetten Sinn. Der Gebrauch dieser "
+" formatierten Kasetten Sinn. Der Gebrauch dieser "
"Option\n"
" ist für formatiert Kasetten NICHT empfohlen.\n"
-" --discard-header Das alte Headersegment wird nicht gelesen. Dies \n"
-" vernichtet wichtige Informationen, die interessant\n"
-" sind, um das Alter der Kasette abzuschätzen.\n"
-" Diese Option macht nur bei bereits formatierten\n"
-" Kasetten Sinn. Der Gebrauch dieser Option wird für\n"
-" formatierte Kasetten NICHT empfohlen.\n"
+"\n"
+" --discard-header Das alte Headersegment wird nicht gelesen. "
+"Dies\n"
+" vernichtet wichtige Informationen, die interessant "
+"sind,\n"
+" um das Alter der Kasette abzuschätzen. Diese "
+"Option\n"
+" macht nur bei bereits formatierten Kasetten Sinn, da "
+"das\n"
+" Headersegment sonst sowieso nicht gelesen wird. "
+"Der\n"
+" Gebrauch dieser Option wird für formatierte "
+"Kasetten\n"
+" NICHT empfohlen.\n"
"\n"
" --no-reference-bursts\n"
-" Die sogenannten \"reference bursts\" werden nicht\n"
-" geschrieben (diese definieren z.B. den Ort der\n"
-" einzelnen Bandspuren).\n"
-" Diese Option macht nur bei bereits formatierten\n"
-" Kasetten Sinn. Der Gebrauch dieser Option wird für\n"
-" formatierte Kasetten NICHT empfohlen.\n"
-" --verify-only[=[erase-bad-sector-map][,dont-write-header-segments]]\n"
-" Das eigentliche Formatieren wird unterlassen.\n"
-" Nur der \"verify\" Durchgang erfolgt, bei dem "
-"defekte\n"
-" Bandsektoren ermittelt werden. Dies ist natürlich "
-"nur\n"
-" dann möglich, wenn die Kasette bereits formatiert "
-"ist,\n"
-" und mag sinnvol sein, falls das Bandlaufwerk das\n"
-" Formatieren von Kasetten nicht unterstützt. Die\n"
-" Unteroptionen haben die folgende Bedeutung:\n"
+" Die sogenannten \"reference bursts\" werden "
+"nicht\n"
+" geschrieben (diese definieren z.B. den Ort der "
+"einzelnen\n"
+" Bandspuren). Diese Option macht nur bei "
+"bereits\n"
+" formatierten Kasetten Sinn. Der Gebrauch dieser "
+"Option\n"
+" wird für formatierte Kasetten NICHT empfohlen.\n"
+"\n"
+" --verify-only[=[erase-bad-sector-map][,dont-write-header-segments]\n"
+" [,erase-cartridge]]\n"
+" Das eigentliche Formatieren wird unterlassen. Nur "
+"der\n"
+" \"verify\" Durchgang erfolgt, bei dem defekte "
+"Bandsektoren\n"
+" ermittelt werden. Dies ist natürlich nur dann "
+"möglich,\n"
+" wenn die Kasette bereits formatiert ist, und mag "
+"sinnvol\n"
+" sein, falls das Bandlaufwerk das Formatieren "
+"von\n"
+" Kasetten nicht unterstützt. Die Unteroptionen haben "
+"die\n"
+" folgende Bedeutung:\n"
" erase-bad-sector-map\n"
-" Existierende Einträge in der \"bad sector map\" "
+" Existierende Einträge in der \"bad sector map\" "
"werden\n"
-" vor dem Verifizieren gelöscht. Normalerweise macht "
-"dies\n"
-" keinen Sinn. Deshalb werden in der Voreinstellung "
-"neue\n"
-" fehlerhaft Sektoren zu den existierenden Einträgen\n"
-" hinzugefügt.\n"
+" vor dem Verifizieren gelöscht. Normalerweise "
+"macht\n"
+" dies keinen Sinn. Deshalb werden in "
+"der\n"
+" Voreinstellung neue fehlerhaft Sektoren zu "
+"den\n"
+" existierenden Einträgen hinzugefügt.\n"
" dont-write-header-segments\n"
-" Die Kasetter wird verifiziert, jedoch werden die "
+" Die Kasette wird verifiziert, jedoch werden die "
"neu\n"
-" ermittelten fehlerhaften Sektoren nicht zu der "
+" ermittelten fehlerhaften Sektoren nicht zu der "
"\"bad\n"
-" sector map\" auf der Kasette hinzugefügt. Die "
-"ermittelte\n"
-" \"bad sector map\" wird auf dem Bildschirm "
-"ausgegeben,\n"
-" falls die \"--print-header\" Option gesetzt wurde.\n"
+" sector map\" auf der Kasette hinzugefügt. "
+" Die\n"
+" ermittelte \"bad sector map\" wird auf dem "
+"Bildschirm\n"
+" ausgegeben, falls die \"--print-header\" "
+"Option\n"
+" gesetzt wurde.\n"
+" erase-cartridge\n"
+" Die Kasette wird vor dem Verifizieren gelöscht. "
+"Das\n"
+" ist unterschiedlich zum löschen des alten "
+"Formats\n"
+" der Kasette (siehe \"--omit-erase\"). HIER "
+" wird\n"
+" einfach jedes Segment vor dem Verifizieren "
+"mit\n"
+" Nullen bescrieben.\n"
"\n"
" --print-header Das Bandkopfsegment wird auf dem Bildschirm "
"ausgegeben,\n"
" inklusive der \"bad sector map\".\n"
" -p --format-parameters=PARAMETER\n"
-" Mittels dieser Option kann man die automatisch\n"
-" ermittelten Parameter modifizieren, oder ein das\n"
-" Bandformat angeben, falls die Formatparameter nicht\n"
-" automatisch ermittelt werden können (z.B. bei 205ft\n"
-" resp. 425ft QIC-80 Kassetten). Falls "
-"\"--mode=force\" \n"
-" verwendet wird, müssen ALLE Parameter (s.u.) "
-"angegeben\n"
-" werden. FALLS \"--mode=force\" NICHT angegeben ist,\n"
-" so werden die hier angegebenen Parameter ggf. als\n"
-" Zusatzinformation benutzt. In diesem Fall braucht "
-"man\n"
-" nicht aller Werte angeben. PARAMETER ist eine Liste\n"
-" mittels Kommata getrennter Schlüsselwort/Werte "
-"Paare\n"
-" aus dem folgenden Katalog:\n"
+" Mittels dieser Option kann man die "
+"automatisch\n"
+" ermittelten Parameter modifizieren, oder das "
+"Bandformat\n"
+" angeben, falls die Formatparameter nicht "
+"automatisch\n"
+" ermittelt werden können (z.B. bei 205ft resp. "
+"425ft\n"
+" QIC-80 Kassetten). Falls \"--mode=force\" verwendet "
+"wird,\n"
+" müssen ALLE Parameter (s.u.) angegeben werden. "
+"FALLS\n"
+" \"--mode=force\" NICHT angegeben ist, so werden "
+"die hier\n"
+" angegebenen Parameter ggf. als "
+"Zusatzinformation\n"
+" benutzt. In diesem Fall braucht man nicht alle "
+"Werte\n"
+" angeben. PARAMETER ist eine Liste mittels "
+"Kommata\n"
+" getrennter Schlüsselwort/Werte Paare aus dem "
+"folgenden\n"
+" Katalog:\n"
"\n"
" qic-standard=QIC_STD\n"
" format-code=FORMAT_CODE\n"
@@ -385,37 +425,54 @@
"\n"
" Die einzelnen Parameter bedeuten:\n"
"\n"
-" QIC_STD eines der folgenden Schlüsselwort:\n"
+" QIC_STD Eines der folgenden Schlüsselwort:\n"
+"\n"
" \"QIC-40\", \"QIC-80\",\n"
" \"QIC-80/WIDE\", \"TR-1\",\n"
" \"QIC-3010\", \"QIC-3010/WIDE\",\n"
" \"QIC-3020\",\n"
" \"QIC-3020/WIDE\", \"TR-3\".\n"
-" Stattdessen kann man auch eine Nummer im Hexagesimal-\n"
-" oder Dezimalsystem abgeben.\n"
-" \"TR-3\" Kasetten entsprechen dem \"QIC-3020/WIDE\" "
-"Standard.\n"
-" \"TR-3/Extra\" Kasetten entsprechen überlangen TR-3\n"
-" Kasetten und damit dem \"TR-3\" Standard.\n"
-" \"TR-1\" Kasetten entsprechen dem \"QIC-80/WIDE\" "
-"Standard.\n"
+"\n"
+" Stattdessen kann man auch eine Nummer im Hexagesimal- "
+"oder\n"
+" Dezimalsystem abgeben. \"TR-3\" Kasetten entsprechen "
+" dem\n"
+" \"QIC-3020/WIDE\" Standard. \"TR-3/Extra\" "
+"Kasetten\n"
+" entsprechen überlangen TR-3 Kasetten und damit dem "
+"\"TR-3\"\n"
+" Standard. \"TR-1\" Kasetten entsprechen dem "
+"\"QIC-80/WIDE\"\n"
+" Standard.\n"
+"\n"
" FORMAT_CODE Eine Nummer im Dezimalsystem, die im entsprechenden "
-"Feld\n"
-" im Headersegment gespeichert wird. Wird für normale\n"
-" Operation nicht gebraucht.\n"
+"Feld im\n"
+" Headersegment gespeichert wird. Wird für normale "
+"Operation\n"
+" nicht gebraucht.\n"
+"\n"
" MAX_FLOPPY_HEAD Eine Nummer im Dezimalsystem.\n"
+"\n"
" MAX_FLOPPY_TRACK Eine Nummer im Dezimalsystem.\n"
-" SEGMENTS_PER_TRACK Die Anzahl der Segments pro Bandspur.\n"
+"\n"
+" SEGMENTS_PER_TRACK Die Anzahl der Segmente pro Bandspur.\n"
+"\n"
" TRACKS_PER_TAPE Die Anzahl der Bandspuren pro auf der Kasette.\n"
+"\n"
" GAP3 Eine Nummer im Dezimalsystem.\n"
+"\n"
" FFB Formatierfüllbyte. Eine zweistellige Nummer im\n"
" Hexagesimalsystem.\n"
"\n"
-"Außer den detaillierten Formatparametern (s.o.) versteht \"ftformat\"\n"
-"noch folgende Abkürzungen für Formate fester Bandlänge, die jeweils\n"
-"vollständigen Angaben für alle obigen Formatparameter entsprechen.\n"
-"Man sollte entweder die detaillierten Parameterspezifikationen (s.o.)\n"
-"verwende, oder die folgenden Abkürzungen.\n"
+"Außer den detaillierten Formatparametern (s.o.) versteht \"ftformat\" "
+" noch\n"
+"folgende Abkürzungen für Formate fester Bandlänge, die jeweils "
+"vollständigen\n"
+"Angaben für alle obigen Formatparameter entsprechen. Man sollte entweder "
+"die\n"
+"detaillierten Parameterspezifikationen (s.o.) verwenden, oder die "
+"folgenden\n"
+"Abkürzungen.\n"
"\n"
" qic40-205ft Formatieren einer 205ft Kasette, QIC-40 Format, 40MB\n"
" qic40-307ft Wie oben für eine 307ft Kasette, 60MB\n"
@@ -430,16 +487,19 @@
"\n"
" QIC-40, QIC-80, QIC-3010 und QIC-3020\n"
"\n"
-"erhalten, die man unter \"http://www.qic.org\" findet. Insbesondere\n"
-"werden dort die korrekten Werte für die Parameter QIC_STD,\n"
-"FORMAT_CODE, MAX_FLOPPY_HEAD, MAX_FLOPPY_TRACK, SEGMENTS_PER_TRACK,\n"
-"TRACKS_PER_TAPE und GAP3 beschrieben.\n"
-"\n"
-"Normalerweise benötigt man lediglich die Abkürzungen für die\n"
-"Formatparameter. Oder man braucht nur den Wert für den Parameter "
+"erhalten, die man unter \"http://www.qic.org\" findet. Insbesondere "
+"werden dort\n"
+"die korrekten Werte für die Parameter QIC_STD, FORMAT_CODE, "
+"MAX_FLOPPY_HEAD,\n"
+"MAX_FLOPPY_TRACK, SEGMENTS_PER_TRACK, TRACKS_PER_TAPE und GAP3 beschrieben.\n"
+"\n"
+"Normalerweise benötigt man lediglich die Abkürzungen für "
+"die\n"
+"Formatparameter. Oder man braucht nur den Wert für den Parameter "
"\"QIC_STD\"\n"
-"angeben. Oder man modifiziert die automatisch ermittelte Anzahl der\n"
-"Segment/Spur (letzteres nur unter Vorbehalt).\n"
+"angeben. Oder man modifiziert die automatisch ermittelte Anzahl der "
+"Segment/Spur\n"
+"(letzteres nur unter Vorbehalt).\n"
"\n"
"Beispiele:\n"
"\n"
@@ -452,21 +512,21 @@
"\n"
" ftformat --mode=auto --format-parameters qic80-425ft\n"
"\n"
-"Formatieren einer unformatiereten Travan-3 Kasette, oder einer Kasette mir\n"
+"Formatieren einer unformatiereten Travan-3 Kasette, oder einer Kasette mit\n"
"defektem Format:\n"
"\n"
" ftformat --mode=auto --format-parameters qic-standard=TR-3 \\\n"
" --omit-erase --discard-header\n"
"\n"
-#: src/ftformat/ftfmt-options.c:683
+#: src/ftformat/ftfmt-options.c:684
msgid ""
"Cannot format with given parameters without knowing about the QIC standard!\n"
msgstr ""
"Der QIC Standard für das Formatieren dieser Bandkasette konnte nicht\n"
"automatisch ermittelt werden und muß deshalb angegeben werden.\n"
-#: src/ftformat/ftfmt-options.c:698 src/ftformat/ftfmt-options.c:751
+#: src/ftformat/ftfmt-options.c:699 src/ftformat/ftfmt-options.c:752
msgid ""
"Unable to auto-detect tape type. If this is a 205ft cartridge,\n"
"try again with the \"qic80-205ft\" option\n"
@@ -475,18 +535,18 @@
"eine 205ft Kasette handelt, könnte es mit der \"qic80-205ft\" Option\n"
"eventuell funktionieren\n"
-#: src/ftformat/ftfmt-options.c:720
+#: src/ftformat/ftfmt-options.c:721
msgid "Your tape drive doesn't support the select format command\n"
msgstr "Ihr Bandlaufwerk unterstützt das \"select format\" Kommando nicht.\n"
-#: src/ftformat/ftformat.c:85
+#: src/ftformat/ftformat.c:92
msgid ""
"Cannot omit writing of the reference bursts with an unformatted cartridge!\n"
msgstr ""
"Das Schreiben der sog. \"reference bursts\" muß bei unformatierten Bändern\n"
"auf jeden Fall durchgeführt werden.\n"
-#: src/ftformat/ftformat.c:132 src/ftformat/ftformat.c:206
+#: src/ftformat/ftformat.c:144 src/ftformat/ftformat.c:218
msgid ""
"Dump of header segment:\n"
"\n"
@@ -494,7 +554,7 @@
"Inhalt des Bandkopfsegmentes:\n"
"\n"
-#: src/ftformat/ftformat.c:212
+#: src/ftformat/ftformat.c:224
#, c-format
msgid ""
"Done formatting.\n"
@@ -507,91 +567,91 @@
"Segmente : %8d\n"
"Kapazität: %8ldM\n"
-#: src/ftformat/ftfmt-tapelib.c:82
+#: src/ftformat/ftfmt-tapelib.c:90
msgid "Error setting tape drive buffering"
msgstr "Fehler beim Ändern der Größe der DMA Puffer"
-#: src/ftformat/ftfmt-tapelib.c:90
+#: src/ftformat/ftfmt-tapelib.c:98
msgid "Error mapping tape dma buffers"
msgstr "Fehler beim \"memory mapping\" der DMA Puffer"
-#: src/ftformat/ftfmt-tapelib.c:95
+#: src/ftformat/ftfmt-tapelib.c:103
#, c-format
msgid "Got mmaped tape buffer @ %p/%d\n"
msgstr "Speicheradresse des \"memory mapped\" DMA Puffers @ %p/%d\n"
-#: src/ftformat/ftfmt-tapelib.c:111 src/vtblc/libftvt.c:181
+#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:188
msgid "Error: Can't stat tape device file"
msgstr "Fehler beim Systemaufruf stat(TAPE_DEVICE)"
#. should not happen any more at this point
-#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:189
+#: src/ftformat/ftfmt-tapelib.c:127 src/vtblc/libftvt.c:196
msgid "Error: tape file is not a character device!"
msgstr "Fehler: das Bandlaufwerk ist kein Character-Device!"
-#: src/ftformat/ftfmt-tapelib.c:125 src/vtblc/libftvt.c:206
+#: src/ftformat/ftfmt-tapelib.c:133 src/vtblc/libftvt.c:213
#, c-format
msgid "Using old ftape raw device with minor number 0x%02x\n"
msgstr ""
"Benutze ein antiquiertes \"raw device\" mit Minordevicenummer 0x%02x.\n"
-#: src/ftformat/ftfmt-tapelib.c:134 src/vtblc/libftvt.c:222
+#: src/ftformat/ftfmt-tapelib.c:142 src/vtblc/libftvt.c:229
msgid "Error switching to raw mode"
msgstr "Fehler beim Einschalten des Raw-Modus"
-#: src/ftformat/ftfmt-tapelib.c:138
+#: src/ftformat/ftfmt-tapelib.c:146
#, c-format
msgid "Switched %s raw mode using MTIOCFTRAW ioctl\n"
msgstr "Rawmodus mit MTIOCFTRAW ioctl %sgeschaltet\n"
-#: src/ftformat/ftfmt-tapelib.c:162
+#: src/ftformat/ftfmt-tapelib.c:170
#, c-format
msgid "%s hasn't been opened yet!\n"
msgstr "%s wurde noch nicht geöffnet!\n"
-#: src/ftformat/ftfmt-tapelib.c:166 src/ftformat/ftfmt-tapelib.c:344
+#: src/ftformat/ftfmt-tapelib.c:174 src/ftformat/ftfmt-tapelib.c:352
msgid "Error closing tape dev"
msgstr "Fehler beim Schließen des Bandlaufwerks"
-#: src/ftformat/ftfmt-tapelib.c:170
+#: src/ftformat/ftfmt-tapelib.c:178
msgid "Error re-opening tape dev read/write"
msgstr ""
"Fehler beim wiederholten Öffnen des Bandlaufwerks\n"
"im nicht schreibgeschützten Modus"
-#: src/ftformat/ftfmt-tapelib.c:196
+#: src/ftformat/ftfmt-tapelib.c:204
msgid "Error opening tape device read-only"
msgstr "Fehler beim Öffnen des Bandlaufwerks im schreibgeschützten Modus"
-#: src/ftformat/ftfmt-tapelib.c:203
+#: src/ftformat/ftfmt-tapelib.c:211
msgid "Error setting tape drive status"
msgstr "Fehler beim Setzen der Bandlaufwerksparameter"
-#: src/ftformat/ftfmt-tapelib.c:211 src/vtblc/libftvt.c:258
+#: src/ftformat/ftfmt-tapelib.c:219 src/vtblc/libftvt.c:265
msgid "Error getting tape drive status"
msgstr "Fehler beim Lesen der Bandlaufwerksparameter"
-#: src/ftformat/ftfmt-tapelib.c:216 src/vtblc/libftvt.c:263
+#: src/ftformat/ftfmt-tapelib.c:224 src/vtblc/libftvt.c:270
msgid "Error: No tape cartridge present!\n"
msgstr "Fehler: Keine Kassette im Bandlaufwerk!\n"
-#: src/ftformat/ftfmt-tapelib.c:221 src/vtblc/libftvt.c:268
+#: src/ftformat/ftfmt-tapelib.c:229 src/vtblc/libftvt.c:275
msgid "Warning: Write protected cartridge!\n"
msgstr "Warnung: die Kasette ist schreibgeschützt!\n"
-#: src/ftformat/ftfmt-tapelib.c:228 src/vtblc/libftvt.c:271
+#: src/ftformat/ftfmt-tapelib.c:236 src/vtblc/libftvt.c:278
msgid "Error: Tape drive is offline!\n"
msgstr "Fehler: Das Bandlaufwerk ist \"offline\"!\n"
-#: src/ftformat/ftfmt-tapelib.c:233 src/vtblc/libftvt.c:276
+#: src/ftformat/ftfmt-tapelib.c:241 src/vtblc/libftvt.c:283
msgid "Error: This is not a floppy tape drive!\n"
msgstr "Fehler: Das ist kein Floppy-Bandlaufwerk!\n"
-#: src/ftformat/ftfmt-tapelib.c:245
+#: src/ftformat/ftfmt-tapelib.c:253
msgid "Unknown floppy tape drive. Bailing out. Contact "
msgstr "Fehler: Unbekanntes Floppybandlaufwerk. Wenden Sie sich bitte an"
-#: src/ftformat/ftfmt-tapelib.c:257 src/ftformat/ftfmt-tapelib.c:266
+#: src/ftformat/ftfmt-tapelib.c:265 src/ftformat/ftfmt-tapelib.c:274
#, c-format
msgid ""
"Your tape drive (%s -- 0x%04lx) isn't able to format tapes.\n"
@@ -601,12 +661,12 @@
"formatieren. Lesen Sie bitte das Ftape-HOWTO und wenden Sie sich an\n"
"die linux-tape Mailingliste, falls Sie noch Fragen haben.\n"
-#: src/ftformat/ftfmt-tapelib.c:281
+#: src/ftformat/ftfmt-tapelib.c:289
msgid ""
"Warning: Unknown floppy tape drive make code. Continuing, but please contact "
msgstr "Warnung: Unbekannter Hersteller. Wenden Sie sich bitte an "
-#: src/ftformat/ftfmt-tapelib.c:286
+#: src/ftformat/ftfmt-tapelib.c:294
#, c-format
msgid ""
"Tape drive: %s.\n"
@@ -619,7 +679,7 @@
"Modell : %d.\n"
"Produkt Id : 0x%04x.\n"
-#: src/ftformat/ftfmt-tapelib.c:305
+#: src/ftformat/ftfmt-tapelib.c:313
#, c-format
msgid ""
"Vendor suggest format-filler-byte=0x%02x, use \"--mode=force\" to override.\n"
@@ -627,65 +687,65 @@
"Der Hersteller empfiehlt format-filler-byte=0x%02x, benutzen Sie\n"
"\"--mode=force\" um einen anderen Wert anzugeben\n"
-#: src/ftformat/ftfmt-tapelib.c:339
+#: src/ftformat/ftfmt-tapelib.c:347
msgid "Error unmapping dma buffer"
msgstr "Fehler beim \"unmapping\" der DMA Puffer"
-#: src/ftformat/ftfmt-tapelib.c:366 src/ftformat/ftfmt-tapelib.c:418
-#: src/ftformat/ftfmt-tapelib.c:666
+#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:426
+#: src/ftformat/ftfmt-tapelib.c:674
#, c-format
msgid "Ioctl error sending %s command: %s\n"
msgstr "Ioctl Fehler beim %s QIC-Kommando: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:671
+#: src/ftformat/ftfmt-tapelib.c:382 src/ftformat/ftfmt-tapelib.c:679
#, c-format
msgid "Tape drive error sending %s command: %d (%s)\n"
msgstr "Bandlaufwerksfehler beim %s QIC-Kommando: %d (%s)\n"
-#: src/ftformat/ftfmt-tapelib.c:387
+#: src/ftformat/ftfmt-tapelib.c:395
msgid "Calibrating tape length ... "
msgstr "Ermitteln der Bandlänge ... "
-#: src/ftformat/ftfmt-tapelib.c:392
+#: src/ftformat/ftfmt-tapelib.c:400
msgid "Ioctl error sending QIC_CALIBRATE_TAPE_LENGTH"
msgstr "Ioctl Fehler beim QIC_CALIBRATE_TAPE_LENGTH Kommando"
-#: src/ftformat/ftfmt-tapelib.c:396
+#: src/ftformat/ftfmt-tapelib.c:404
#, c-format
msgid "Calibrate tape length not supported. Surprise! Error: %d (%s)\n"
msgstr ""
"Das \"Calibrate tape length\" Kommando wird vom Bandlaufwerk\n"
"nicht unterstützt. Fehler: %d (%s)\n"
-#: src/ftformat/ftfmt-tapelib.c:404
+#: src/ftformat/ftfmt-tapelib.c:412
#, c-format
msgid "got %d segments\n"
msgstr "ergibt %d Segmente.\n"
-#: src/ftformat/ftfmt-tapelib.c:430
+#: src/ftformat/ftfmt-tapelib.c:438
msgid "Writing reference bursts ... "
msgstr "Schreiben der \"reference bursts\" ... "
-#: src/ftformat/ftfmt-tapelib.c:432 src/ftformat/ftfmt-tapelib.c:440
-#: src/ftformat/ftfmt-tapelib.c:840
+#: src/ftformat/ftfmt-tapelib.c:440 src/ftformat/ftfmt-tapelib.c:448
+#: src/ftformat/ftfmt-tapelib.c:848
msgid "failed!\n"
msgstr "fehlgeschlagen!\n"
-#: src/ftformat/ftfmt-tapelib.c:443 src/ftformat/ftfmt-tapelib.c:547
-#: src/ftformat/ftfmt-tapelib.c:1336 src/ftformat/ftfmt-tapelib.c:1357
-#: src/vtblc/libftvt.c:387 src/vtblc/libftvt.c:453 src/vtblc/libftvt.c:945
+#: src/ftformat/ftfmt-tapelib.c:451 src/ftformat/ftfmt-tapelib.c:555
+#: src/ftformat/ftfmt-tapelib.c:1349 src/ftformat/ftfmt-tapelib.c:1370
+#: src/vtblc/libftvt.c:433 src/vtblc/libftvt.c:526 src/vtblc/libftvt.c:1374
msgid "done.\n"
msgstr "fertig.\n"
-#: src/ftformat/ftfmt-tapelib.c:460
+#: src/ftformat/ftfmt-tapelib.c:468
msgid "Unable to rewind the cartridge\n"
msgstr "Die Kasette kann nicht zurückgespult werden\n"
-#: src/ftformat/ftfmt-tapelib.c:467
+#: src/ftformat/ftfmt-tapelib.c:475
msgid "Erasing track 0"
msgstr "Lösche Spur 0"
-#: src/ftformat/ftfmt-tapelib.c:484
+#: src/ftformat/ftfmt-tapelib.c:492
msgid ""
"\n"
"cartridge not a eot\n"
@@ -693,7 +753,7 @@
"\n"
"Die Kasette ist nicht am Bandende positioniert\n"
-#: src/ftformat/ftfmt-tapelib.c:494
+#: src/ftformat/ftfmt-tapelib.c:502
msgid ""
"\n"
"cartridge not a bot\n"
@@ -701,54 +761,54 @@
"\n"
"Die Kasette ist nicht am Bandanfang positioniert\n"
-#: src/ftformat/ftfmt-tapelib.c:506
+#: src/ftformat/ftfmt-tapelib.c:514
msgid "Please ignore the error message printed above!"
msgstr "Ignorieren Sie bitte obige Fehlermeldung!"
-#: src/ftformat/ftfmt-tapelib.c:527
+#: src/ftformat/ftfmt-tapelib.c:535
msgid "Reading old header segment ... "
msgstr "Lesen der alten Headersegmente ... "
-#: src/ftformat/ftfmt-tapelib.c:534 src/ftformat/ftfmt-tapelib.c:1297
+#: src/ftformat/ftfmt-tapelib.c:542 src/ftformat/ftfmt-tapelib.c:1310
#, c-format
msgid "Ioctl error reading header segment: %s\n"
msgstr "Ioctl Fehler beim Lesen des Headersegments: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:543
+#: src/ftformat/ftfmt-tapelib.c:551
msgid "Unable to read the header segment\n"
msgstr "Die Headersegmente können nicht gelesen werden\n"
-#: src/ftformat/ftfmt-tapelib.c:544
+#: src/ftformat/ftfmt-tapelib.c:552
msgid "Consider using \"--header-discard\"\n"
msgstr "Versuchen Sie es mit der Option \"--header-discard\"\n"
-#: src/ftformat/ftfmt-tapelib.c:592
+#: src/ftformat/ftfmt-tapelib.c:600
msgid "ftape-3.x format API\n"
msgstr "ftape-3.x Formatieranwendungssbenutzerschnittstelle\n"
-#: src/ftformat/ftfmt-tapelib.c:598
+#: src/ftformat/ftfmt-tapelib.c:606
#, c-format
msgid "ftape-4.x format API: 0x%08x\n"
msgstr "ftape-4.x Formatieranwendungsbenutzerschnittstelle: 0x%08x\n"
-#: src/ftformat/ftfmt-tapelib.c:602
+#: src/ftformat/ftfmt-tapelib.c:610
msgid "Unknown format API version. Giving up.\n"
msgstr "Unbekannte Formatieranwendungsbenutzerschnittstelle. Ich geb's auf.\n"
-#: src/ftformat/ftfmt-tapelib.c:622
+#: src/ftformat/ftfmt-tapelib.c:630
#, c-format
msgid "Unknown api version: 0x%08x\n"
msgstr "Unbekannte Option: 0x%08x\n"
-#: src/ftformat/ftfmt-tapelib.c:649
+#: src/ftformat/ftfmt-tapelib.c:657
msgid ""
-"Please ignore the error message printed above if in case\n"
-"that your cartridge can be formatted successfully!\n"
+"Please ignore the error message printed above if\n"
+"your cartridge can be formatted successfully!\n"
msgstr ""
"Bitte ignorieren Sie obige Fehlermeldung, falls Ihre Kasette\n"
"erfolgreich formatiert werden kann!\n"
-#: src/ftformat/ftfmt-tapelib.c:676
+#: src/ftformat/ftfmt-tapelib.c:684
msgid ""
"Please ignore the error message printed above if it proves\n"
"that your cartridge can be formatted successfully.\n"
@@ -756,36 +816,36 @@
"Bitte ignorieren Sie obige Fehlermeldung, falls Ihre Kasette\n"
"erfolgreich formatiert werden kann!\n"
-#: src/ftformat/ftfmt-tapelib.c:686
+#: src/ftformat/ftfmt-tapelib.c:694
#, c-format
msgid "Ioctl error sending format parameters: %s\n"
msgstr "Ioctl Fehler beim setzen der Formatspezifikation: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:705
+#: src/ftformat/ftfmt-tapelib.c:713
#, c-format
msgid "Ioctl error getting format parameters: %s\n"
msgstr "Ioctl Fehler beim Lesen der aktiven Formatspezifikation: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:789 src/ftformat/ftfmt-tapelib.c:814
+#: src/ftformat/ftfmt-tapelib.c:797 src/ftformat/ftfmt-tapelib.c:822
#, c-format
msgid "msync(%p, %d, MS_SYNC) failed: %s.\n"
msgstr "msync(%p, %d, MS_SYNC) fehlgeschlagen: %s.\n"
-#: src/ftformat/ftfmt-tapelib.c:792 src/ftformat/ftfmt-tapelib.c:817
+#: src/ftformat/ftfmt-tapelib.c:800 src/ftformat/ftfmt-tapelib.c:825
msgid "Dumping core\n"
msgstr "Schreibe den gesamten Programmspeicher auf die Festplatte\n"
-#: src/ftformat/ftfmt-tapelib.c:846 src/ftformat/ftfmt-tapelib.c:906
+#: src/ftformat/ftfmt-tapelib.c:854 src/ftformat/ftfmt-tapelib.c:914
#, c-format
msgid "Formatting track %3d, "
msgstr "Formatiere Spur %3d, "
-#: src/ftformat/ftfmt-tapelib.c:856
+#: src/ftformat/ftfmt-tapelib.c:864
#, c-format
msgid "segment %8d"
msgstr "Segment %8d"
-#: src/ftformat/ftfmt-tapelib.c:865
+#: src/ftformat/ftfmt-tapelib.c:873
#, c-format
msgid ""
"\n"
@@ -794,7 +854,7 @@
"\n"
"Ioctl Fehler beim Formatieren der Spur %d: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:889
+#: src/ftformat/ftfmt-tapelib.c:897
#, c-format
msgid ""
"\n"
@@ -803,22 +863,22 @@
"\n"
"Fehler beim Lesen des Formatierstatus (%d/%d): %s\n"
-#: src/ftformat/ftfmt-tapelib.c:897
+#: src/ftformat/ftfmt-tapelib.c:905
#, c-format
msgid "Retrying track %3d, "
msgstr "Wiederhole Spur %3d, "
-#: src/ftformat/ftfmt-tapelib.c:956
+#: src/ftformat/ftfmt-tapelib.c:974
#, c-format
msgid "Erasing track %3d, segment %8d"
msgstr "Lösche Spur %3d, Segment %8d"
-#: src/ftformat/ftfmt-tapelib.c:990
+#: src/ftformat/ftfmt-tapelib.c:1008
#, c-format
msgid "Verifying track %3d, segment %8d"
msgstr "Verifiziere Spur %3d, Segment %8d"
-#: src/ftformat/ftfmt-tapelib.c:1005
+#: src/ftformat/ftfmt-tapelib.c:1023
#, c-format
msgid ""
"\n"
@@ -827,47 +887,47 @@
"\n"
"Ioctl Fehler beim Verifizieren des Segments %d: %s\n"
-#: src/ftformat/ftfmt-tapelib.c:1025
+#: src/ftformat/ftfmt-tapelib.c:1043
#, c-format
msgid "bsm for segment %d: 0x%08x\n"
msgstr "bsm des Segmentes %d: 0x%08x\n"
-#: src/ftformat/ftfmt-tapelib.c:1173
+#: src/ftformat/ftfmt-tapelib.c:1186
msgid "Newly formatted cartride hasn't three error free segments.\n"
msgstr ""
"Die neuformatierte Kasette hat weniger als drei fehlerfreie Segmente.\n"
-#: src/ftformat/ftfmt-tapelib.c:1225 src/vtblc/libftvt.c:867
+#: src/ftformat/ftfmt-tapelib.c:1238 src/vtblc/libftvt.c:1290
msgid "invalid"
msgstr "ungültig"
-#: src/ftformat/ftfmt-tapelib.c:1302
+#: src/ftformat/ftfmt-tapelib.c:1315
#, c-format
msgid "Failed to write segment %d, mode %d: %d\n"
msgstr "Das Segment %d kann nicht geschrieben werden, Modus %d: %d\n"
-#: src/ftformat/ftfmt-tapelib.c:1328 src/ftformat/ftfmt-tapelib.c:1338
-#: src/ftformat/ftfmt-tapelib.c:1348
+#: src/ftformat/ftfmt-tapelib.c:1341 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1361
#, c-format
msgid "Deleting segment %d ... "
msgstr "Lösche Segment %d ... "
-#: src/ftformat/ftfmt-tapelib.c:1331 src/ftformat/ftfmt-tapelib.c:1341
-#: src/ftformat/ftfmt-tapelib.c:1346 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1344 src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1359 src/ftformat/ftfmt-tapelib.c:1364
msgid "done\n"
msgstr "fertig\n"
-#: src/ftformat/ftfmt-tapelib.c:1333
+#: src/ftformat/ftfmt-tapelib.c:1346
#, c-format
msgid "Writing 1st header segment at %d ... "
msgstr "Schreiben des ersten Headersegmentes bei der Position %d ... "
-#: src/ftformat/ftfmt-tapelib.c:1343
+#: src/ftformat/ftfmt-tapelib.c:1356
#, c-format
msgid "Writing 2nd header segment at %d ... "
msgstr "Schreiben des zweiten Headersegmentes bei der Position %d ... "
-#: src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1367
#, c-format
msgid "Initializing volume table at %d ... "
msgstr "Initialisiere das Inhaltsverzeichnis bei der Position %d ... "
@@ -892,22 +952,22 @@
msgid "Couldn't allocate %d Meg. You need kill off a few programs.\n"
msgstr "%d Megabytes konnten nicht alloziert werden.\n"
-#: src/vtblc/vtblc.c:185
+#: src/vtblc/vtblc.c:190
#, c-format
msgid "Unknown option: %s\n"
msgstr "Unbekannte Option: %s\n"
-#: src/vtblc/vtblc.c:265
+#: src/vtblc/vtblc.c:284
msgid "Missing start- or ending segment\n"
msgstr "Start- oder Endsegment wurde nicht angegeben\n"
-#: src/vtblc/libftvt.c:1006 src/vtblc/libftvt.c:1051 src/vtblc/libftvt.c:1086
-#: src/vtblc/libftvt.c:1128 src/vtblc/vtblc.c:294
+#: src/vtblc/libftvt.c:1435 src/vtblc/libftvt.c:1480 src/vtblc/libftvt.c:1515
+#: src/vtblc/libftvt.c:1557 src/vtblc/vtblc.c:313
#, c-format
msgid "Volume number too big or negative: %d\n"
msgstr "Die Nummer %d des Backupvolumes ist zu groß oder negativ\n"
-#: src/vtblc/vtblc.c:327
+#: src/vtblc/vtblc.c:346
msgid ""
"Usage: %s [OPTIONS]\n"
"Manipulate the volume table of a floppy tape cartridge, for use with\n"
@@ -924,6 +984,7 @@
" -d, --debug Unused yet.\n"
" -v, --verbose Be verbose (default).\n"
" -q, --quiet Don't be verbose.\n"
+" -b, --bsm Print the bad sector map and quit.\n"
" -#, --vtbl-entry=NR Specify the volume number for \"--print\" and\n"
" \"--modify\".\n"
" -p, --print[=tagged] Print the volume table entry given by\n"
@@ -942,7 +1003,7 @@
" \"--vtbl-entry\". If \"--vtbl-entry\" has been\n"
" omitted then the last entry is modified.\n"
"\n"
-"\"--apend\" and \"--modify\" understand the following sub-options:\n"
+"\"--append\" and \"--modify\" understand the following sub-options:\n"
"\n"
" label=LABEL The description for this volume table entry.\n"
" LABEL will be truncated to 44 bytes.\n"
@@ -960,9 +1021,12 @@
" space characters (SPACE or TAB).\n"
" `vtblc` understands the following keywords and values:\n"
"\n"
-" ENTRY NUM Starts the description for the volume NUM. This may\n"
-" be ommitted if the \"--vtbl-entry=NUM\" has been\n"
-" given.\n"
+" VTBL START\n"
+" VTBL END Marks the start of vtbl data. Maybe useful when\n"
+" sending volume table entries via email :-).\n"
+" However, the entire volume table data must be\n"
+" surrounded by a \"VTBL START\" - \"VTBL END\" pair.\n"
+" ENTRY NUM Starts the description for the volume NUM.\n"
" ENTRY END Here END is not a placeholder, but means the\n"
" word \"END\". Ends the description for the volume\n"
" table entry previously started by \"ENTRY NUM\".\n"
@@ -970,10 +1034,25 @@
" modifies the volume number NUM. This provides means\n"
" to modify the entire volume table in a single run.\n"
"\n"
-" SIGNATURE \"SIG\" Valid signature string. Only \"VTBL\" is\n"
-" for now.\n"
+" SIGNATURE \"SIG\" Valid signature string. Must be one out of\n"
+" \"VTBL\", \"XTBL\", \"EXVT\" and \"UTID\".\n"
+" If this tag is used it MUST be the first entry\n"
+" after the \"ENTRY\" tag. If the \"SIGNATURE\" tag\n"
+" is missing, \"VTBL\" is assumed.\n"
+"\n"
+"The following entry is for signatures other than \"VTBL\":\n"
+"\n"
+" ENTRY_DATA \"HEX\" Data following the signature \"HEX\" is a string\n"
+" of hexadecimal byte values, e.g. \"0x01 0x4f ...\",\n"
+" of length at most 124. If less bytes are presented\n"
+" the entry will be padded with zeroes.\n"
+"\n"
+"Following entries are for for signature \"VTBL\":\n"
+"\n"
" START STARTSEG First segment of this volume.\n"
" END ENDSEG Last segment of this volume.\n"
+" NUM_SEGMENTS NUM Number of segments occupied (optional).\n"
+" If omitted, will be set to (ENDSEG-STARTSEG+1)\n"
" DESCRIPTION \"DESC\" Description for this volume table. Will be\n"
" truncated to 44 characters.\n"
" DATE \"DATESTR\" Date for the volume. If \"DATESTR\" is ommitted,\n"
@@ -987,12 +1066,26 @@
" FLAG_RESERVED_6 VAL\n"
" FLAG_RESERVED_7 VAL\n"
" MULTI_CARTRIDGE_COUNT VAL\n"
+"\n"
+"The following tags are understood only if FLAG_VENDOR_SPECIFIC is 0\n"
+"or if FLAG_VENDOR_SPECIFIC is 1 and QIC_MAJOR is 113:\n"
+"\n"
+" QIC_MAJOR VAL Major number of QIC spec cartridge conforms to,\n"
+" only for cartridges with more than 65536 segments.\n"
+" VAL should be 113 for all cases.\n"
+" QIC_MINOR VAL Minor revision number of QIC spec. Only for\n"
+" cartridges with more thatn 65536 segments.\n"
+" At the time of this writing, QIC-113, Rev. G, is\n"
+" is the latest one, so VAL should be 7.\n"
" VENDOR_EXTENSION \"HEX\" Vendor extension data. \"HEX\" is a string\n"
" of hexadecimal byte values, i.e. \"0x01 0x4f ...\"\n"
+" The maximal lenght of this string is 14 bytes for\n"
+" cartridges with more thatn 2^16 = 65536 segments\n"
+" and 26 bytes for smaller cartridges\n"
" PASSWORD \"HEX\" Password. \"HEX\" as above.\n"
" DIRECTORY_SIZE VAL\n"
" DATA_SIZE VAL64 64 bit value (a decimal count)\n"
-" OS_VERSION HEX Here \"HEX\" is a hexadecimal 4 bytes value.\n"
+" OS_VERSION HEX Here \"HEX\" is a hexadecimal 2 bytes value.\n"
" SOURCE_DRIVE DRVSTR Source drive. \"DRVSTR\" is a 16 byte string.\n"
" DEVICE HEXBYTE A single byte in hexadecimal notation.\n"
" RESERVED_1 HEXBYTE\n"
@@ -1001,6 +1094,12 @@
" RESERVED_2 HEXBYTE\n"
" RESERVED_3 HEXBYTE\n"
"\n"
+"If FLAG_VENDOR_SPECIFIC is 1, then the following tag is allowed:\n"
+"\n"
+" VENDOR_DATA \"HEX\" A string of hexadecimal values of lenght at most\n"
+" 72 to fill the remainder of the volume table entry.\n"
+" Smaller strings will be padded with zero bytes.\n"
+"\n"
"Strings with spaces have to be surrounded by double quotes \"...\"\n"
"\"VAL\" is some decimal number.\n"
"\n"
@@ -1010,9 +1109,10 @@
"geschrieben für\n"
"%s, %s\n"
"\n"
-"Erforderliche oder optionale Argumente für \"lange\" Optionen sind auch für\n"
-"die zugehörigen \"kurzen\" Optionen erforderlich respektive optional.\n"
-"Abkürzungen für lang Optionen sind erlaubt, solange sie eindeutig sind.\n"
+"Erforderliche oder optionale Argumente für \"lange\" Optionen sind auch\n"
+"für die zugehörigen \"kurzen\" Optionen erforderlich respektive\n"
+"optional. Abkürzungen für lang Optionen sind erlaubt, solange sie\n"
+"eindeutig sind.\n"
"\n"
" -f, --file=FILE Bandlaufwerk. Voreinstellung: \"%s\".\n"
" -h, --help Ausgabe DIESER Hilfestellung.\n"
@@ -1050,43 +1150,62 @@
"\n"
" label=BESCHREIBUNG Die Beschreibung des Eintrags. BESCHREIBUNG\n"
" wird auf 44 Bytes gekürzt.\n"
-" date[=DATUM] Das Datum des Eintrags. DATUM wird von der\n"
-" Bibliotheksfunktion \"strptime(3)\" interpretiert,\n"
-" wobei das \"%%T %%D\" Format benutzt wird\n"
-" (entsprechend \"%%H:%%M:%%S %%m/%%d/%%y\").\n"
-" Wenn DATUM nicht angegeben wird, so wird\n"
-" stattdessen die lokale Ortszeit benutzt.\n"
+" date[=DATUM] Das Datum des Eintrags. DATUM wird von der\n"
+" Bibliotheksfunktion \"strptime(3)\"\n"
+" interpretiert, wobei das \"%%T %%D\" Format\n"
+" benutzt wird (entsprechend \"%%H:%%M:%%S\n"
+" %%m/%%d/%%y\"). Wenn DATUM nicht angegeben\n"
+" wird, so wird stattdessen die lokale Ortszeit\n"
+" benutzt.\n"
" start=SEG_ID Das Startsegment für diesen Eintrag.\n"
" end=SEG_ID Das Endsegment für diesen Eintrag.\n"
-" tagged Der komplette Inhaltsverzeichniseintrag wird von\n"
-" \"stdin\" in dem gleichen Format gelesen, das\n"
-" bei der Augabe mit \"--print=tagged\" (s.o.)\n"
-" verwendet wird. Der Eingabedatenstrom besteht\n"
-" also aus Paaren von Schlüsselwörtern und\n"
-" Werten, ein Paar pro Zeile. Die\n"
-" Schlüsselwörter werden von den Werten durch\n"
+" tagged Der komplette Inhaltsverzeichniseintrag wird\n"
+" von \"stdin\" in dem gleichen Format gelesen,\n"
+" das bei der Augabe mit \"--print=tagged\" (s.o.)\n"
+" verwendet wird. Der Eingabedatenstrom besteht\n"
+" also aus Paaren von Schlüsselwörtern und\n"
+" Werten, ein Paar pro Zeile. Die\n"
+" Schlüsselwörter werden von den Werten durch\n"
" \"space characters\" (man 3 isspace) getrennt.\n"
-" `vtblc` interpretiert die folgenden Schlüsselwörter:\n"
+" \"vtblc\" interpretiert die folgenden Schlüsselwörter:\n"
"\n"
" ENTRY NUMMER Beginn der Beschreibung für den Eintrag NUMMER.\n"
-" Dieses Schlüsselwort darf wegfallen, falls\n"
+" Dieses Schlüsselwort darf wegfallen, falls\n"
" \"--vtbl-entry=NUMMER\" angegeben wurde.\n"
-" ENTRY END In diesem Fall steht END nicht für einn Wert,\n"
-" sondern bedeutet das Word \"END\". Dadurch wird\n"
-" die Beschreibung des Eintrags, welche vorher mit\n"
-" \"ENTRY NUMMER\" begonnen wurde, beendet.\n"
-" Jeder Zeile zwischen \"ENTRY NUMMER\" und\n"
-" \"ENTRY END\" verändert den Eintrag \"NUMMER\".\n"
-"\n"
-" SIGNATURE \"SIG\" Gültige Signatur. Bislang wird nur \"VTBL\"\n"
-" unterstützt.\n"
-" START STARTSEG Startsegment für diesen Eintrag.\n"
-" END ENDSEG Endsegment für diesen Eintrag.\n"
-" DESCRIPTION \"BESCHR\" Beschreibung dieses Eintrags. Der Eintrag wird\n"
-" auf 44 Zeichen gekürzt.\n"
-" DATE \"DATESTR\" Datum für diesen Eintrag. Falls \"DATESTR\" fehlt\n"
-" so wird die lokale Zeit benutzt.n "
-"FLAG_VENDOR_SPECIFIC VAL\n"
+" ENTRY END In diesem Fall steht END nicht für einen Wert,\n"
+" sondern bedeutet das Word \"END\". Dadurch wird\n"
+" die Beschreibung des Eintrags, welche vorher\n"
+" mit \"ENTRY NUMMER\" begonnen wurde, beendet.\n"
+" Jeder Zeile zwischen \"ENTRY NUMMER\" und \"ENTRY\n"
+" END\" verändert den Eintrag \"NUMMER\".\n"
+" SIGNATURE \"SIG\" Gültige Signatur: \"VTBL\", \"XTBL\", \"UTID\" "
+"oder\n"
+" \"EXVT\". Falls Dieser Eintrag benutzt wird, muß\n"
+" er dem \"ENTRY\" Feld unmittelbar folgen. Fehlt\n"
+" das \"SIGNATURE\" Feld, so wird \"VTBL\" benutzt.\n"
+"\n"
+"Falls nicht die \"VTBL\" Signatur verwendet wird, kommt der folgende\n"
+"Eintrag zu Anwendung:\n"
+"\n"
+" ENTRY_DATA \"HEX\" Die der Signatur folgenden Daten. \"HEX\"\n"
+" entspricht einer Aneinanderreihung\n"
+" hexagesimaler Bytewerte, z.B. \"0x01 0x4f ...\".\n"
+" Maximal 124 Werte werden verwendet. Wenn\n"
+" weniger als 124 Bytes angegeben werden wird\n"
+" der Rest mit Nullen aufgefüllt.\n"
+"\n"
+"Die folgenden Einträge gelten nur für die \"VTBL\" Signatur:\n"
+"\n"
+" START STARTSEG Startsegment für diesen Datensatz.\n"
+" END ENDSEG Endsegment für diesen Datensatz.\n"
+" NUM_SEGMENTS NUM Anzahl der Segmente für diesen Datensatz.\n"
+" Falls \"NUM_SEGMENTS\" nicht angegeben wird,\n"
+" wird (ENDSEG - STARTSEG + 1) benutzt.\n"
+" DESCRIPTION \"BESCHR\" Beschreibung dieses Eintrags. Der Eintrag \n"
+" wird auf 44 Zeichen gekürzt.\n"
+" DATE \"DATESTR\" Datum für diesen Eintrag. Falls \"DATESTR\"\n"
+" fehlt so wird die lokale Zeit benutzt.\n"
+" FLAG_VENDOR_SPECIFIC VAL\n"
" FLAG_MULTI_CARTRIDGE VAL\n"
" FLAG_NOT_VERIFIED VAL\n"
" FLAG_REDIRECTION_INHIBIT VAL\n"
@@ -1095,13 +1214,30 @@
" FLAG_RESERVED_6 VAL\n"
" FLAG_RESERVED_7 VAL\n"
" MULTI_CARTRIDGE_COUNT VAL\n"
-" VENDOR_EXTENSION \"HEX\" Marken spezifische Erweiterung. \"HEX\"\n"
-" entspricht einer Aneinanderreihung\n"
-" hexagesimaler Bytewerte, z.B. \"0x01 0x4f ...\"\n"
-" PASSWORD \"HEX\" Paßwort. \"HEX\" wie oben.\n"
+"\n"
+"Die folgenden Einträge werden nur interpretiert, falls\n"
+"FLAG_VENDOR_SPECIFIC auf 0 gesetzt ist.\n"
+"\n"
+" QIC_MAJOR VAL Nummer des QIC Standards, dem dieser\n"
+" Inhaltsverzeichniseintrag entspricht (nur für\n"
+" Kasetten mit mehr als 2^16=65536\n"
+" Segmenten). Sollte auf \"113\" gesetzt werden.\n"
+" QIC_MINOR VAL \n"
+" Versionsnummer des QIC Standars (nur für\n"
+" Kasetten mit mehr als 2^16=65536\n"
+" Segmenten). Gegenwärtig ist QIC-113, Rev. G,\n"
+" aktuell, also sollte VAL auf \"7\" gesetzt\n"
+" werden.\n"
+" VENDOR_EXTENSION \"HEX\" Marken spezifische Erweiterung. \"HEX\"\n"
+" entspricht einer Aneinanderreihung\n"
+" hexagesimaler Bytewerte, z.B. \"0x01 0x4f ...\".\n"
+" Die maximale Länge beträgt 14 Bytes für\n"
+" Kasetten mit mehr als 2^16=65536 Segmenten,\n"
+" und 26 Bytes für kleinere Kasetten.\n"
+" PASSWORD \"HEX\" Paßwort. \"HEX\" wie oben.\n"
" DIRECTORY_SIZE VAL\n"
" DATA_SIZE VAL64 64 Bit Wert (eine Dezimalzahl)\n"
-" OS_VERSION HEX Hier ist \"HEX\" eine 32 Bit breite Nummer im\n"
+" OS_VERSION HEX Hier ist \"HEX\" eine 32 Bit breite Nummer im\n"
" Hexagesimalsystem.\n"
" SOURCE_DRIVE DRVSTR Quellaufwerk. \"DRVSTR\" ist eine 16 Byte\n"
" Zeichenkette.\n"
@@ -1112,63 +1248,73 @@
" RESERVED_2 HEXBYTE\n"
" RESERVED_3 HEXBYTE\n"
"\n"
+"Falls \"FLAG_VENDOR_SPECIFIC\" auf 1 gesetzt ist, wird das folgende\n"
+"Schlüsselwort interpretiert:\n"
+"\n"
+" VENDOR_DATA \"HEX\" \n"
+" Die restlichen Daten des\n"
+" Inhaltsverzeichniseintrags, z.B. \"0x01 0x34\n"
+" ... \". Die maximale Länge beträgt 72\n"
+" Bytes. Fehlende Bytes werden mit Nullen\n"
+" aufgefüllt.\n"
+"\n"
"Zeichenketten mit Leerzeichen müssen mit Anführungszeichen eingschlossen\n"
"werden: \"...\"\n"
"\"VAL\" steht für eine Nummer im Dezimalsystem.\n"
"\n"
-#: src/vtblc/libftvt.c:210
+#: src/vtblc/libftvt.c:217
msgid "Error: raw mode bit not set in minor device number\n"
msgstr "Fehler: Raw-Mode Bit fehlt in der minor Device-Nummer\n"
-#: src/vtblc/libftvt.c:215
+#: src/vtblc/libftvt.c:222
msgid "Error switching to normal mode"
msgstr "Fehler beim Ausschalten des Raw-Modus"
-#: src/vtblc/libftvt.c:227
+#: src/vtblc/libftvt.c:234
#, c-format
msgid "Switched %s raw mode using MTIOCFTMODE ioctl\n"
msgstr "Raw-Modus mit MTIOCFTMODE ioctl %sgeschaltet\n"
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "to"
msgstr "ein"
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "off"
msgstr "aus"
-#: src/vtblc/libftvt.c:252
+#: src/vtblc/libftvt.c:259
msgid "Error opening tape device"
msgstr "Fehler beim Öffnen des Bandlaufwerks"
-#: src/vtblc/libftvt.c:288
+#: src/vtblc/libftvt.c:295
#, c-format
msgid "Tape drive type: %s (0x%04lx)\n"
msgstr "Laufwerkstyp: %s (0x%04lx)\n"
-#: src/vtblc/libftvt.c:309 src/vtblc/libftvt.c:353 src/vtblc/libftvt.c:949
+#: src/vtblc/libftvt.c:316 src/vtblc/libftvt.c:1378
msgid "Ioctl error rewinding tape"
msgstr "Ioctl Fehler beim Zurückspulen der Kasette"
-#: src/vtblc/libftvt.c:316
+#: src/vtblc/libftvt.c:323
msgid "Error closing tape device"
msgstr "Fehler beim Schließen des Bandlaufwerks"
-#: src/vtblc/libftvt.c:361
+#: src/vtblc/libftvt.c:407
msgid "Reading volume table segment ... "
msgstr "Lese das Inhaltsverzeichnis ... "
-#: src/vtblc/libftvt.c:370
+#: src/vtblc/libftvt.c:416
msgid "Ioctl error reading volume table"
msgstr "Ioctl Fehler beim Lesen des Inhaltsverzeichnisses"
-#: src/vtblc/libftvt.c:374
+#: src/vtblc/libftvt.c:420
#, c-format
msgid "Error reading volume table: %s\n"
msgstr "Ioctl Fehler beim Lesen des Inhaltsverzeichnisses: %s\n"
-#: src/vtblc/libftvt.c:381
+#: src/vtblc/libftvt.c:427
#, c-format
msgid ""
"Warning: Short read() reading volume table: %d.\n"
@@ -1177,202 +1323,230 @@
"Warnung: Das Volumetablesegment ist nur %d Bytes groß. Dieses kann\n"
"deshalb nur %d Einträge umfassen (statt %d).\n"
-#: src/vtblc/libftvt.c:432
+#: src/vtblc/libftvt.c:505
msgid "Reading header segment ... "
msgstr "Lese das Headersegment ... "
-#: src/vtblc/libftvt.c:441
+#: src/vtblc/libftvt.c:514
msgid "Ioctl error reading header segment"
msgstr "Ioctl Fehler beim Lesen des Headersegments"
-#: src/vtblc/libftvt.c:449
+#: src/vtblc/libftvt.c:522
msgid "Error: Bad magic number in header segment!\n"
msgstr "Ioctl Fehler beim Lesen des Headersegments!\n"
-#: src/vtblc/libftvt.c:711 src/vtblc/libftvt.c:723 src/vtblc/libftvt.c:736
-#: src/vtblc/libftvt.c:745 src/vtblc/libftvt.c:756 src/vtblc/libftvt.c:812
-#: src/vtblc/libftvt.c:825
+#: src/vtblc/libftvt.c:1003 src/vtblc/libftvt.c:1015 src/vtblc/libftvt.c:1028
+#: src/vtblc/libftvt.c:1039 src/vtblc/libftvt.c:1062 src/vtblc/libftvt.c:1139
+#: src/vtblc/libftvt.c:1156 src/vtblc/libftvt.c:1173 src/vtblc/libftvt.c:1186
+#: src/vtblc/libftvt.c:1199 src/vtblc/libftvt.c:1214 src/vtblc/libftvt.c:1227
+#: src/vtblc/libftvt.c:1247
#, c-format
msgid "Corrupt volume input data: %s\n"
msgstr "Falsches Format der Eingabedaten: %s\n"
-#: src/vtblc/libftvt.c:730 src/vtblc/libftvt.c:972
+#: src/vtblc/libftvt.c:1022 src/vtblc/libftvt.c:1401
#, c-format
msgid "Too many volumes: %d (%d max)\n"
msgstr "Zu viele Einträge im Inhaltsverzeichnis: %d (maximal %d)\n"
#. need the "ENTRY" tag
-#: src/vtblc/libftvt.c:751
+#: src/vtblc/libftvt.c:1045
msgid "Corrupt volume input data\n"
msgstr "Falsches Format der Eingabedaten\n"
-#: src/vtblc/libftvt.c:836
+#: src/vtblc/libftvt.c:1053
+msgid "SIGNATURE tag must follow ENTRY at once.\n"
+msgstr "Das SIGNATURE Feld muß dem ENTRY Feld unmittelbar folgen.\n"
+
+#: src/vtblc/libftvt.c:1259
msgid "Premature end of volume table\n"
msgstr "Vorzeitiges Ende des Inhaltsverzeichnisses\n"
-#: src/vtblc/libftvt.c:928
+#: src/vtblc/libftvt.c:1357
msgid "Writing volume table segment ... "
msgstr "Schreibe das Inhaltsverzeichnis ... "
-#: src/vtblc/libftvt.c:936
+#: src/vtblc/libftvt.c:1365
msgid "Ioctl error writing volume table"
msgstr "Ioctl Fehler beim Schreiben des Inhaltsverzeichnisses"
-#: src/vtblc/libftvt.c:940
+#: src/vtblc/libftvt.c:1369
#, c-format
msgid "Error: Short write() writing volume table: %d\n"
msgstr ""
"Fehler: Es konnten nur %d Bytes des Inhaltsverzeichnisses geschrieben "
"werden.\n"
-#: src/vtblc/libftvt.c:1090
+#: src/vtblc/libftvt.c:1519
#, c-format
msgid "Start segment (%d) should be less than end segment (%d)\n"
msgstr "Das Startsegment (%d) sollte kleiner als das Endsegment (%d) sein\n"
-#: src/vtblc/libftvt.c:1096
+#: src/vtblc/libftvt.c:1525
#, c-format
msgid "End segment (%d) must be less than %d\n"
msgstr "Das Endsegment (%d) muß kleiner als %d sein\n"
-#: src/vtblc/libftvt.c:1132
+#: src/vtblc/libftvt.c:1561
msgid "Volume ID must consist of exactly four characters\n"
msgstr ""
"Die Identifikationszeichenkette muß aus genau vier Buchstaben bestehen\n"
-#: src/ftmt/mt.c:329
+#: src/vtblc/libftvt-bsm.c:272
+msgid "Too many bad sectors, no space left in the bad sector map"
+msgstr ""
+"Zu viele fehlerhafte Sektoren. In der Fehlertabelle ist kein Platz mehr."
+
+#: src/vtblc/libftvt-bsm.c:361
+#, c-format
+msgid ""
+"\n"
+"total number of sectors: %d\n"
+msgstr ""
+"\n"
+"Gesamtzahl der Sektoren: %d\n"
+
+#: src/vtblc/libftvt-bsm.c:362
+msgid "number of bad sectors : %d (%2.2f%%)\n"
+msgstr "Fehlerhafte Sektoren : %d (%2.2f%%)\n"
+
+#: src/vtblc/libftvt-bsm.c:364
+msgid "number of good sectors : %d (%2.2f%%)\n"
+msgstr "Sektoren ohne Fehler : %d (%2.2f%%)\n"
+
+#: src/ftmt/mt.c:335
msgid "tape operation"
msgstr "Bandoperation"
-#: src/ftmt/mt.c:346
+#: src/ftmt/mt.c:352
msgid "no tape device specified"
msgstr "Es wurde kein Bandlaufwerk angegeben"
-#: src/ftmt/mt.c:399 src/ftmt/mt.c:402
+#: src/ftmt/mt.c:411 src/ftmt/mt.c:414
#, c-format
msgid "At block %d.\n"
msgstr "Block Position %d.\n"
-#: src/ftmt/mt.c:432
+#: src/ftmt/mt.c:444
#, c-format
msgid "%s is not a character special file"
msgstr "%s ist keine \"character special\" Datei"
-#: src/ftmt/mt.c:465
+#: src/ftmt/mt.c:477
#, c-format
msgid "Drive is a %s, (drive type = %d)\n"
msgstr "Das Bandlaufwerk ist ein %s (Laufwerkscode = %d)\n"
-#: src/ftmt/mt.c:475
+#: src/ftmt/mt.c:487
#, c-format
msgid "This is a %s floppy tape drive, (drive type = 0x%04lx)\n"
msgstr ""
"Es handelt sich um ein %s Floppybandlaufwerk (Laufwerkscode = 0x%04lx)\n"
-#: src/ftmt/mt.c:482
+#: src/ftmt/mt.c:494
#, c-format
msgid "This is a floppy tape drive, drive type = %d, drive name unknown.\n"
msgstr ""
"Es handelt sich um ein Floppybandlaufwerk des Typs %d, Name unbekannt\n"
-#: src/ftmt/mt.c:484
+#: src/ftmt/mt.c:496
#, c-format
msgid "drive type = %d, drive name unknown.\n"
msgstr "Bandlaufwerksname unbekannt, Bandlaufwerkstyp = %d.\n"
-#: src/ftmt/mt.c:487
+#: src/ftmt/mt.c:499
#, c-format
msgid "drive status (high) = %d\n"
msgstr "Bandlaufwerksstatus (high) = %d\n"
-#: src/ftmt/mt.c:488
+#: src/ftmt/mt.c:500
#, c-format
msgid "drive status (low) = %d\n"
msgstr "Bandlaufwerksstatus (low) = %d\n"
-#: src/ftmt/mt.c:490
+#: src/ftmt/mt.c:502
#, c-format
msgid "drive status = 0x%08x\n"
msgstr "Bandlaufwerksstatus = 0x%08x\n"
-#: src/ftmt/mt.c:491
+#: src/ftmt/mt.c:503
#, c-format
msgid "generic drive status = 0x%08x\n"
msgstr "Generischer Laufwerksstatus = 0x%08x\n"
-#: src/ftmt/mt.c:492
+#: src/ftmt/mt.c:504
msgid "(In particular: "
msgstr "(Im Einzelnen: "
-#: src/ftmt/mt.c:493
+#: src/ftmt/mt.c:505
msgid "at end of file"
msgstr "am Ende einer Datei"
-#: src/ftmt/mt.c:494
+#: src/ftmt/mt.c:506
msgid "at begin of tape"
msgstr "am Bandanfang"
-#: src/ftmt/mt.c:495
+#: src/ftmt/mt.c:507
msgid "at end of tape"
msgstr "am Bandende"
-#: src/ftmt/mt.c:496
+#: src/ftmt/mt.c:508
msgid "at DDS setmark"
msgstr ""
-#: src/ftmt/mt.c:497
+#: src/ftmt/mt.c:509
msgid "at end of data"
msgstr "am Ende des gebrauchten Bandbereichs"
-#: src/ftmt/mt.c:498
+#: src/ftmt/mt.c:510
msgid "tape write protected"
msgstr "Band schreibgeschützt"
-#: src/ftmt/mt.c:499
+#: src/ftmt/mt.c:511
msgid "tape online"
msgstr "Band betriebsbereit"
-#: src/ftmt/mt.c:500
+#: src/ftmt/mt.c:512
msgid "density 6250 (scsi)"
msgstr "Dichte 6250 (scsi)"
-#: src/ftmt/mt.c:501
+#: src/ftmt/mt.c:513
msgid "density 1600 (scsi)"
msgstr "Dichte 1600 (scsi)"
-#: src/ftmt/mt.c:502
+#: src/ftmt/mt.c:514
msgid "density 800 (scsi)"
msgstr "Dichte 800 (scsi)"
-#: src/ftmt/mt.c:503
+#: src/ftmt/mt.c:515
msgid "door open (no tape)"
msgstr "Laufwerkstür offen (kein Band)"
-#: src/ftmt/mt.c:504
+#: src/ftmt/mt.c:516
msgid "immediate report mode (scsi)"
msgstr ""
-#: src/ftmt/mt.c:509
+#: src/ftmt/mt.c:521
#, c-format
msgid "sense key error = 0x%08x\n"
msgstr "Fehlercode = 0x%08x\n"
-#: src/ftmt/mt.c:510
+#: src/ftmt/mt.c:522
#, c-format
msgid "residue count = %d\n"
msgstr "Residuum = %d\n"
-#: src/ftmt/mt.c:512 src/ftmt/mt.c:539
+#: src/ftmt/mt.c:524 src/ftmt/mt.c:551
#, c-format
msgid "file number = %d\n"
msgstr "Dateinummer = %d\n"
-#: src/ftmt/mt.c:513
+#: src/ftmt/mt.c:525
#, c-format
msgid "block number = %d\n"
msgstr "Blocknummer = %d\n"
-#: src/ftmt/mt.c:538
+#: src/ftmt/mt.c:550
msgid ""
"\n"
"MTIOCVOLINFO result:\n"
@@ -1380,38 +1554,38 @@
"\n"
"MTIOCVOLINFO Ergebnis:\n"
-#: src/ftmt/mt.c:540
+#: src/ftmt/mt.c:552
#, c-format
msgid "block size = %d\n"
msgstr "Blockgröße = %d\n"
-#: src/ftmt/mt.c:550
+#: src/ftmt/mt.c:562
#, c-format
msgid "physical space used = %6.1f %sbytes\n"
msgstr "Verbrauchter Platz = %6.1f %sbytes\n"
-#: src/ftmt/mt.c:557
+#: src/ftmt/mt.c:569
#, c-format
msgid "real size of volume = %6.1f %sbytes\n"
msgstr "Tatsächliche Dateigröße = %6.1f %sbytes\n"
#. --ajk 18446744073709551616
-#: src/ftmt/mt.c:560
+#: src/ftmt/mt.c:572
#, c-format
msgid "physical space used = %10.0u kilobytes\n"
msgstr "Verbrauchter Platz = %10.0u kilobytes\n"
#. --ajk
-#: src/ftmt/mt.c:562
+#: src/ftmt/mt.c:574
#, c-format
msgid "real size of volume = %10.0u kilobytes\n"
msgstr "Tatsächliche Dateigröße = %10.0u kilobytes\n"
-#: src/ftmt/mt.c:566
+#: src/ftmt/mt.c:578
msgid "compression ratio = %d %%\n"
msgstr "Kompressionsverhältnis = %d %%\n"
-#: src/ftmt/mt.c:590
+#: src/ftmt/mt.c:602
msgid ""
"\n"
"MTIOCGETSIZE result:\n"
@@ -1419,45 +1593,45 @@
"\n"
"MTIOCGETSIZE Ergebnis:\n"
-#: src/ftmt/mt.c:600
+#: src/ftmt/mt.c:612
#, c-format
msgid "total bytes on tape = %6.1f %sbytes\n"
msgstr "Insgesamt vorhandener Platz = %6.1f %sbytes\n"
-#: src/ftmt/mt.c:604
+#: src/ftmt/mt.c:616
#, c-format
msgid "total bytes used = %6.1f %sbytes\n"
msgstr "Insgesamt verbrauchter Platz = %6.1f %sbytes\n"
-#: src/ftmt/mt.c:607
+#: src/ftmt/mt.c:619
#, c-format
msgid "total bytes left = %6.1f %sbytes\n"
msgstr "Unbenutzter Platz = %6.1f %sbytes\n"
#. --ajk
-#: src/ftmt/mt.c:610
+#: src/ftmt/mt.c:622
#, c-format
msgid "total bytes on tape = %10.0lu kilobytes\n"
msgstr "Insgesamt vorhandener Platz = %10.0lu kilobytes\n"
#. --ajk
-#: src/ftmt/mt.c:612
+#: src/ftmt/mt.c:624
#, c-format
msgid "total bytes used = %10.0lu kilobytes\n"
msgstr "Insgesamt verbrauchter Platz = %10.0lu kilobytes\n"
#. --ajk
-#: src/ftmt/mt.c:614
+#: src/ftmt/mt.c:626
#, c-format
msgid "total bytes left = %10.0lu kilobytes\n"
msgstr "Unbenutzter Platz = %10.0lu kilobytes\n"
-#: src/ftmt/mt.c:652
+#: src/ftmt/mt.c:694
#, c-format
msgid "Couldn't access segment %d on tape device %s"
msgstr "Das Segment %d auf dem Bandlaufwerk %s konnte nicht erreicht werden"
-#: src/ftmt/mt.c:672
+#: src/ftmt/mt.c:714
msgid "Known tape operations:\n"
msgstr "Bekannte Bandoperationen:\n"
Binary files ftape-tools-1.08/po/en.gmo and ftape-tools-1.09/po/en.gmo differ
diff -u --recursive --new-file ftape-tools-1.08/po/en.po ftape-tools-1.09/po/en.po
--- ftape-tools-1.08/po/en.po Sun Jul 2 23:47:10 2000
+++ ftape-tools-1.09/po/en.po Mon Jul 24 01:05:40 2000
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: ftape-tools 1.0\n"
-"POT-Creation-Date: 2000-06-25 23:40+0200\n"
+"POT-Creation-Date: 2000-07-24 00:58+0200\n"
"PO-Revision-Date: 1998-05-07 15:15+02:00\n"
"Last-Translator: Claus-Justus Heine \n"
"Language-Team: English \n"
@@ -45,7 +45,7 @@
msgid "The option \"%s\" takes no value!\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:164
+#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:169
#, c-format
msgid "The option \"%s\" needs a value!\n"
msgstr ""
@@ -65,7 +65,7 @@
msgid "Size of dma buffer %s must be greater than %d\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:230
+#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:238
#, c-format
msgid "?? getopt returned character code 0%o ??\n"
msgstr ""
@@ -157,7 +157,8 @@
" Erase cartridge before verifying. NOTE: this is\n"
" different from the erasing the FORMAT of the\n"
" cartridge (see \"--omit-erase\"). HERE it simply\n"
-" means to fill all segments with zero bytes.\n"
+" means to fill all segments with zero bytes prior\n"
+" to verifying.\n"
"\n"
" --print-header Print the contents of the header segment in a\n"
" keyword-value fashion. The bad sector map is also\n"
@@ -262,33 +263,33 @@
"\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:683
+#: src/ftformat/ftfmt-options.c:684
msgid ""
"Cannot format with given parameters without knowing about the QIC standard!\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:698 src/ftformat/ftfmt-options.c:751
+#: src/ftformat/ftfmt-options.c:699 src/ftformat/ftfmt-options.c:752
msgid ""
"Unable to auto-detect tape type. If this is a 205ft cartridge,\n"
"try again with the \"qic80-205ft\" option\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:720
+#: src/ftformat/ftfmt-options.c:721
msgid "Your tape drive doesn't support the select format command\n"
msgstr ""
-#: src/ftformat/ftformat.c:85
+#: src/ftformat/ftformat.c:92
msgid ""
"Cannot omit writing of the reference bursts with an unformatted cartridge!\n"
msgstr ""
-#: src/ftformat/ftformat.c:132 src/ftformat/ftformat.c:206
+#: src/ftformat/ftformat.c:144 src/ftformat/ftformat.c:218
msgid ""
"Dump of header segment:\n"
"\n"
msgstr ""
-#: src/ftformat/ftformat.c:212
+#: src/ftformat/ftformat.c:224
#, c-format
msgid ""
"Done formatting.\n"
@@ -297,100 +298,100 @@
"Capacity: %8ldM\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:82
+#: src/ftformat/ftfmt-tapelib.c:90
msgid "Error setting tape drive buffering"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:90
+#: src/ftformat/ftfmt-tapelib.c:98
msgid "Error mapping tape dma buffers"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:95
+#: src/ftformat/ftfmt-tapelib.c:103
#, c-format
msgid "Got mmaped tape buffer @ %p/%d\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:111 src/vtblc/libftvt.c:181
+#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:188
msgid "Error: Can't stat tape device file"
msgstr ""
#. should not happen any more at this point
-#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:189
+#: src/ftformat/ftfmt-tapelib.c:127 src/vtblc/libftvt.c:196
msgid "Error: tape file is not a character device!"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:125 src/vtblc/libftvt.c:206
+#: src/ftformat/ftfmt-tapelib.c:133 src/vtblc/libftvt.c:213
#, c-format
msgid "Using old ftape raw device with minor number 0x%02x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:134 src/vtblc/libftvt.c:222
+#: src/ftformat/ftfmt-tapelib.c:142 src/vtblc/libftvt.c:229
msgid "Error switching to raw mode"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:138
+#: src/ftformat/ftfmt-tapelib.c:146
#, c-format
msgid "Switched %s raw mode using MTIOCFTRAW ioctl\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:162
+#: src/ftformat/ftfmt-tapelib.c:170
#, c-format
msgid "%s hasn't been opened yet!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:166 src/ftformat/ftfmt-tapelib.c:344
+#: src/ftformat/ftfmt-tapelib.c:174 src/ftformat/ftfmt-tapelib.c:352
msgid "Error closing tape dev"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:170
+#: src/ftformat/ftfmt-tapelib.c:178
msgid "Error re-opening tape dev read/write"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:196
+#: src/ftformat/ftfmt-tapelib.c:204
msgid "Error opening tape device read-only"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:203
+#: src/ftformat/ftfmt-tapelib.c:211
msgid "Error setting tape drive status"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:211 src/vtblc/libftvt.c:258
+#: src/ftformat/ftfmt-tapelib.c:219 src/vtblc/libftvt.c:265
msgid "Error getting tape drive status"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:216 src/vtblc/libftvt.c:263
+#: src/ftformat/ftfmt-tapelib.c:224 src/vtblc/libftvt.c:270
msgid "Error: No tape cartridge present!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:221 src/vtblc/libftvt.c:268
+#: src/ftformat/ftfmt-tapelib.c:229 src/vtblc/libftvt.c:275
msgid "Warning: Write protected cartridge!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:228 src/vtblc/libftvt.c:271
+#: src/ftformat/ftfmt-tapelib.c:236 src/vtblc/libftvt.c:278
msgid "Error: Tape drive is offline!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:233 src/vtblc/libftvt.c:276
+#: src/ftformat/ftfmt-tapelib.c:241 src/vtblc/libftvt.c:283
msgid "Error: This is not a floppy tape drive!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:245
+#: src/ftformat/ftfmt-tapelib.c:253
msgid "Unknown floppy tape drive. Bailing out. Contact "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:257 src/ftformat/ftfmt-tapelib.c:266
+#: src/ftformat/ftfmt-tapelib.c:265 src/ftformat/ftfmt-tapelib.c:274
#, c-format
msgid ""
"Your tape drive (%s -- 0x%04lx) isn't able to format tapes.\n"
"Read the Ftape-HOWTO and contact the linux-tape mailinglist if unsure\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:281
+#: src/ftformat/ftfmt-tapelib.c:289
msgid ""
"Warning: Unknown floppy tape drive make code. Continuing, but please contact "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:286
+#: src/ftformat/ftfmt-tapelib.c:294
#, c-format
msgid ""
"Tape drive: %s.\n"
@@ -399,236 +400,236 @@
"Vendor id : 0x%04x.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:305
+#: src/ftformat/ftfmt-tapelib.c:313
#, c-format
msgid ""
"Vendor suggest format-filler-byte=0x%02x, use \"--mode=force\" to override.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:339
+#: src/ftformat/ftfmt-tapelib.c:347
msgid "Error unmapping dma buffer"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:366 src/ftformat/ftfmt-tapelib.c:418
-#: src/ftformat/ftfmt-tapelib.c:666
+#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:426
+#: src/ftformat/ftfmt-tapelib.c:674
#, c-format
msgid "Ioctl error sending %s command: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:671
+#: src/ftformat/ftfmt-tapelib.c:382 src/ftformat/ftfmt-tapelib.c:679
#, c-format
msgid "Tape drive error sending %s command: %d (%s)\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:387
+#: src/ftformat/ftfmt-tapelib.c:395
msgid "Calibrating tape length ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:392
+#: src/ftformat/ftfmt-tapelib.c:400
msgid "Ioctl error sending QIC_CALIBRATE_TAPE_LENGTH"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:396
+#: src/ftformat/ftfmt-tapelib.c:404
#, c-format
msgid "Calibrate tape length not supported. Surprise! Error: %d (%s)\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:404
+#: src/ftformat/ftfmt-tapelib.c:412
#, c-format
msgid "got %d segments\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:430
+#: src/ftformat/ftfmt-tapelib.c:438
msgid "Writing reference bursts ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:432 src/ftformat/ftfmt-tapelib.c:440
-#: src/ftformat/ftfmt-tapelib.c:840
+#: src/ftformat/ftfmt-tapelib.c:440 src/ftformat/ftfmt-tapelib.c:448
+#: src/ftformat/ftfmt-tapelib.c:848
msgid "failed!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:443 src/ftformat/ftfmt-tapelib.c:547
-#: src/ftformat/ftfmt-tapelib.c:1336 src/ftformat/ftfmt-tapelib.c:1357
-#: src/vtblc/libftvt.c:387 src/vtblc/libftvt.c:453 src/vtblc/libftvt.c:945
+#: src/ftformat/ftfmt-tapelib.c:451 src/ftformat/ftfmt-tapelib.c:555
+#: src/ftformat/ftfmt-tapelib.c:1349 src/ftformat/ftfmt-tapelib.c:1370
+#: src/vtblc/libftvt.c:433 src/vtblc/libftvt.c:526 src/vtblc/libftvt.c:1374
msgid "done.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:460
+#: src/ftformat/ftfmt-tapelib.c:468
msgid "Unable to rewind the cartridge\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:467
+#: src/ftformat/ftfmt-tapelib.c:475
msgid "Erasing track 0"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:484
+#: src/ftformat/ftfmt-tapelib.c:492
msgid ""
"\n"
"cartridge not a eot\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:494
+#: src/ftformat/ftfmt-tapelib.c:502
msgid ""
"\n"
"cartridge not a bot\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:506
+#: src/ftformat/ftfmt-tapelib.c:514
msgid "Please ignore the error message printed above!"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:527
+#: src/ftformat/ftfmt-tapelib.c:535
msgid "Reading old header segment ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:534 src/ftformat/ftfmt-tapelib.c:1297
+#: src/ftformat/ftfmt-tapelib.c:542 src/ftformat/ftfmt-tapelib.c:1310
#, c-format
msgid "Ioctl error reading header segment: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:543
+#: src/ftformat/ftfmt-tapelib.c:551
msgid "Unable to read the header segment\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:544
+#: src/ftformat/ftfmt-tapelib.c:552
msgid "Consider using \"--header-discard\"\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:592
+#: src/ftformat/ftfmt-tapelib.c:600
msgid "ftape-3.x format API\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:598
+#: src/ftformat/ftfmt-tapelib.c:606
#, c-format
msgid "ftape-4.x format API: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:602
+#: src/ftformat/ftfmt-tapelib.c:610
msgid "Unknown format API version. Giving up.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:622
+#: src/ftformat/ftfmt-tapelib.c:630
#, c-format
msgid "Unknown api version: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:649
+#: src/ftformat/ftfmt-tapelib.c:657
msgid ""
-"Please ignore the error message printed above if in case\n"
-"that your cartridge can be formatted successfully!\n"
+"Please ignore the error message printed above if\n"
+"your cartridge can be formatted successfully!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:676
+#: src/ftformat/ftfmt-tapelib.c:684
msgid ""
"Please ignore the error message printed above if it proves\n"
"that your cartridge can be formatted successfully.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:686
+#: src/ftformat/ftfmt-tapelib.c:694
#, c-format
msgid "Ioctl error sending format parameters: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:705
+#: src/ftformat/ftfmt-tapelib.c:713
#, c-format
msgid "Ioctl error getting format parameters: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:789 src/ftformat/ftfmt-tapelib.c:814
+#: src/ftformat/ftfmt-tapelib.c:797 src/ftformat/ftfmt-tapelib.c:822
#, c-format
msgid "msync(%p, %d, MS_SYNC) failed: %s.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:792 src/ftformat/ftfmt-tapelib.c:817
+#: src/ftformat/ftfmt-tapelib.c:800 src/ftformat/ftfmt-tapelib.c:825
msgid "Dumping core\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:846 src/ftformat/ftfmt-tapelib.c:906
+#: src/ftformat/ftfmt-tapelib.c:854 src/ftformat/ftfmt-tapelib.c:914
#, c-format
msgid "Formatting track %3d, "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:856
+#: src/ftformat/ftfmt-tapelib.c:864
#, c-format
msgid "segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:865
+#: src/ftformat/ftfmt-tapelib.c:873
#, c-format
msgid ""
"\n"
"Ioctl error formatting track %d: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:889
+#: src/ftformat/ftfmt-tapelib.c:897
#, c-format
msgid ""
"\n"
"Error getting format status (%d/%d): %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:897
+#: src/ftformat/ftfmt-tapelib.c:905
#, c-format
msgid "Retrying track %3d, "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:956
+#: src/ftformat/ftfmt-tapelib.c:974
#, c-format
msgid "Erasing track %3d, segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:990
+#: src/ftformat/ftfmt-tapelib.c:1008
#, c-format
msgid "Verifying track %3d, segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1005
+#: src/ftformat/ftfmt-tapelib.c:1023
#, c-format
msgid ""
"\n"
"Ioctl error verifying segment %d: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1025
+#: src/ftformat/ftfmt-tapelib.c:1043
#, c-format
msgid "bsm for segment %d: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1173
+#: src/ftformat/ftfmt-tapelib.c:1186
msgid "Newly formatted cartride hasn't three error free segments.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1225 src/vtblc/libftvt.c:867
+#: src/ftformat/ftfmt-tapelib.c:1238 src/vtblc/libftvt.c:1290
msgid "invalid"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1302
+#: src/ftformat/ftfmt-tapelib.c:1315
#, c-format
msgid "Failed to write segment %d, mode %d: %d\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1328 src/ftformat/ftfmt-tapelib.c:1338
-#: src/ftformat/ftfmt-tapelib.c:1348
+#: src/ftformat/ftfmt-tapelib.c:1341 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1361
#, c-format
msgid "Deleting segment %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1331 src/ftformat/ftfmt-tapelib.c:1341
-#: src/ftformat/ftfmt-tapelib.c:1346 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1344 src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1359 src/ftformat/ftfmt-tapelib.c:1364
msgid "done\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1333
+#: src/ftformat/ftfmt-tapelib.c:1346
#, c-format
msgid "Writing 1st header segment at %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1343
+#: src/ftformat/ftfmt-tapelib.c:1356
#, c-format
msgid "Writing 2nd header segment at %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1367
#, c-format
msgid "Initializing volume table at %d ... "
msgstr ""
@@ -653,22 +654,22 @@
msgid "Couldn't allocate %d Meg. You need kill off a few programs.\n"
msgstr ""
-#: src/vtblc/vtblc.c:185
+#: src/vtblc/vtblc.c:190
#, c-format
msgid "Unknown option: %s\n"
msgstr ""
-#: src/vtblc/vtblc.c:265
+#: src/vtblc/vtblc.c:284
msgid "Missing start- or ending segment\n"
msgstr ""
-#: src/vtblc/libftvt.c:1006 src/vtblc/libftvt.c:1051 src/vtblc/libftvt.c:1086
-#: src/vtblc/libftvt.c:1128 src/vtblc/vtblc.c:294
+#: src/vtblc/libftvt.c:1435 src/vtblc/libftvt.c:1480 src/vtblc/libftvt.c:1515
+#: src/vtblc/libftvt.c:1557 src/vtblc/vtblc.c:313
#, c-format
msgid "Volume number too big or negative: %d\n"
msgstr ""
-#: src/vtblc/vtblc.c:327
+#: src/vtblc/vtblc.c:346
msgid ""
"Usage: %s [OPTIONS]\n"
"Manipulate the volume table of a floppy tape cartridge, for use with\n"
@@ -685,6 +686,7 @@
" -d, --debug Unused yet.\n"
" -v, --verbose Be verbose (default).\n"
" -q, --quiet Don't be verbose.\n"
+" -b, --bsm Print the bad sector map and quit.\n"
" -#, --vtbl-entry=NR Specify the volume number for \"--print\" and\n"
" \"--modify\".\n"
" -p, --print[=tagged] Print the volume table entry given by\n"
@@ -703,7 +705,7 @@
" \"--vtbl-entry\". If \"--vtbl-entry\" has been\n"
" omitted then the last entry is modified.\n"
"\n"
-"\"--apend\" and \"--modify\" understand the following sub-options:\n"
+"\"--append\" and \"--modify\" understand the following sub-options:\n"
"\n"
" label=LABEL The description for this volume table entry.\n"
" LABEL will be truncated to 44 bytes.\n"
@@ -721,9 +723,12 @@
" space characters (SPACE or TAB).\n"
" `vtblc` understands the following keywords and values:\n"
"\n"
-" ENTRY NUM Starts the description for the volume NUM. This may\n"
-" be ommitted if the \"--vtbl-entry=NUM\" has been\n"
-" given.\n"
+" VTBL START\n"
+" VTBL END Marks the start of vtbl data. Maybe useful when\n"
+" sending volume table entries via email :-).\n"
+" However, the entire volume table data must be\n"
+" surrounded by a \"VTBL START\" - \"VTBL END\" pair.\n"
+" ENTRY NUM Starts the description for the volume NUM.\n"
" ENTRY END Here END is not a placeholder, but means the\n"
" word \"END\". Ends the description for the volume\n"
" table entry previously started by \"ENTRY NUM\".\n"
@@ -731,10 +736,25 @@
" modifies the volume number NUM. This provides means\n"
" to modify the entire volume table in a single run.\n"
"\n"
-" SIGNATURE \"SIG\" Valid signature string. Only \"VTBL\" is\n"
-" for now.\n"
+" SIGNATURE \"SIG\" Valid signature string. Must be one out of\n"
+" \"VTBL\", \"XTBL\", \"EXVT\" and \"UTID\".\n"
+" If this tag is used it MUST be the first entry\n"
+" after the \"ENTRY\" tag. If the \"SIGNATURE\" tag\n"
+" is missing, \"VTBL\" is assumed.\n"
+"\n"
+"The following entry is for signatures other than \"VTBL\":\n"
+"\n"
+" ENTRY_DATA \"HEX\" Data following the signature \"HEX\" is a string\n"
+" of hexadecimal byte values, e.g. \"0x01 0x4f ...\",\n"
+" of length at most 124. If less bytes are presented\n"
+" the entry will be padded with zeroes.\n"
+"\n"
+"Following entries are for for signature \"VTBL\":\n"
+"\n"
" START STARTSEG First segment of this volume.\n"
" END ENDSEG Last segment of this volume.\n"
+" NUM_SEGMENTS NUM Number of segments occupied (optional).\n"
+" If omitted, will be set to (ENDSEG-STARTSEG+1)\n"
" DESCRIPTION \"DESC\" Description for this volume table. Will be\n"
" truncated to 44 characters.\n"
" DATE \"DATESTR\" Date for the volume. If \"DATESTR\" is ommitted,\n"
@@ -748,12 +768,26 @@
" FLAG_RESERVED_6 VAL\n"
" FLAG_RESERVED_7 VAL\n"
" MULTI_CARTRIDGE_COUNT VAL\n"
+"\n"
+"The following tags are understood only if FLAG_VENDOR_SPECIFIC is 0\n"
+"or if FLAG_VENDOR_SPECIFIC is 1 and QIC_MAJOR is 113:\n"
+"\n"
+" QIC_MAJOR VAL Major number of QIC spec cartridge conforms to,\n"
+" only for cartridges with more than 65536 segments.\n"
+" VAL should be 113 for all cases.\n"
+" QIC_MINOR VAL Minor revision number of QIC spec. Only for\n"
+" cartridges with more thatn 65536 segments.\n"
+" At the time of this writing, QIC-113, Rev. G, is\n"
+" is the latest one, so VAL should be 7.\n"
" VENDOR_EXTENSION \"HEX\" Vendor extension data. \"HEX\" is a string\n"
" of hexadecimal byte values, i.e. \"0x01 0x4f ...\"\n"
+" The maximal lenght of this string is 14 bytes for\n"
+" cartridges with more thatn 2^16 = 65536 segments\n"
+" and 26 bytes for smaller cartridges\n"
" PASSWORD \"HEX\" Password. \"HEX\" as above.\n"
" DIRECTORY_SIZE VAL\n"
" DATA_SIZE VAL64 64 bit value (a decimal count)\n"
-" OS_VERSION HEX Here \"HEX\" is a hexadecimal 4 bytes value.\n"
+" OS_VERSION HEX Here \"HEX\" is a hexadecimal 2 bytes value.\n"
" SOURCE_DRIVE DRVSTR Source drive. \"DRVSTR\" is a 16 byte string.\n"
" DEVICE HEXBYTE A single byte in hexadecimal notation.\n"
" RESERVED_1 HEXBYTE\n"
@@ -762,341 +796,372 @@
" RESERVED_2 HEXBYTE\n"
" RESERVED_3 HEXBYTE\n"
"\n"
+"If FLAG_VENDOR_SPECIFIC is 1, then the following tag is allowed:\n"
+"\n"
+" VENDOR_DATA \"HEX\" A string of hexadecimal values of lenght at most\n"
+" 72 to fill the remainder of the volume table entry.\n"
+" Smaller strings will be padded with zero bytes.\n"
+"\n"
"Strings with spaces have to be surrounded by double quotes \"...\"\n"
"\"VAL\" is some decimal number.\n"
"\n"
msgstr ""
-#: src/vtblc/libftvt.c:210
+#: src/vtblc/libftvt.c:217
msgid "Error: raw mode bit not set in minor device number\n"
msgstr ""
-#: src/vtblc/libftvt.c:215
+#: src/vtblc/libftvt.c:222
msgid "Error switching to normal mode"
msgstr ""
-#: src/vtblc/libftvt.c:227
+#: src/vtblc/libftvt.c:234
#, c-format
msgid "Switched %s raw mode using MTIOCFTMODE ioctl\n"
msgstr ""
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "to"
msgstr ""
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "off"
msgstr ""
-#: src/vtblc/libftvt.c:252
+#: src/vtblc/libftvt.c:259
msgid "Error opening tape device"
msgstr ""
-#: src/vtblc/libftvt.c:288
+#: src/vtblc/libftvt.c:295
#, c-format
msgid "Tape drive type: %s (0x%04lx)\n"
msgstr ""
-#: src/vtblc/libftvt.c:309 src/vtblc/libftvt.c:353 src/vtblc/libftvt.c:949
+#: src/vtblc/libftvt.c:316 src/vtblc/libftvt.c:1378
msgid "Ioctl error rewinding tape"
msgstr ""
-#: src/vtblc/libftvt.c:316
+#: src/vtblc/libftvt.c:323
msgid "Error closing tape device"
msgstr ""
-#: src/vtblc/libftvt.c:361
+#: src/vtblc/libftvt.c:407
msgid "Reading volume table segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:370
+#: src/vtblc/libftvt.c:416
msgid "Ioctl error reading volume table"
msgstr ""
-#: src/vtblc/libftvt.c:374
+#: src/vtblc/libftvt.c:420
#, c-format
msgid "Error reading volume table: %s\n"
msgstr ""
-#: src/vtblc/libftvt.c:381
+#: src/vtblc/libftvt.c:427
#, c-format
msgid ""
"Warning: Short read() reading volume table: %d.\n"
"Continuing, but you can use only %d volumes (instead of %d)\n"
msgstr ""
-#: src/vtblc/libftvt.c:432
+#: src/vtblc/libftvt.c:505
msgid "Reading header segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:441
+#: src/vtblc/libftvt.c:514
msgid "Ioctl error reading header segment"
msgstr ""
-#: src/vtblc/libftvt.c:449
+#: src/vtblc/libftvt.c:522
msgid "Error: Bad magic number in header segment!\n"
msgstr ""
-#: src/vtblc/libftvt.c:711 src/vtblc/libftvt.c:723 src/vtblc/libftvt.c:736
-#: src/vtblc/libftvt.c:745 src/vtblc/libftvt.c:756 src/vtblc/libftvt.c:812
-#: src/vtblc/libftvt.c:825
+#: src/vtblc/libftvt.c:1003 src/vtblc/libftvt.c:1015 src/vtblc/libftvt.c:1028
+#: src/vtblc/libftvt.c:1039 src/vtblc/libftvt.c:1062 src/vtblc/libftvt.c:1139
+#: src/vtblc/libftvt.c:1156 src/vtblc/libftvt.c:1173 src/vtblc/libftvt.c:1186
+#: src/vtblc/libftvt.c:1199 src/vtblc/libftvt.c:1214 src/vtblc/libftvt.c:1227
+#: src/vtblc/libftvt.c:1247
#, c-format
msgid "Corrupt volume input data: %s\n"
msgstr ""
-#: src/vtblc/libftvt.c:730 src/vtblc/libftvt.c:972
+#: src/vtblc/libftvt.c:1022 src/vtblc/libftvt.c:1401
#, c-format
msgid "Too many volumes: %d (%d max)\n"
msgstr ""
#. need the "ENTRY" tag
-#: src/vtblc/libftvt.c:751
+#: src/vtblc/libftvt.c:1045
msgid "Corrupt volume input data\n"
msgstr ""
-#: src/vtblc/libftvt.c:836
+#: src/vtblc/libftvt.c:1053
+msgid "SIGNATURE tag must follow ENTRY at once.\n"
+msgstr ""
+
+#: src/vtblc/libftvt.c:1259
msgid "Premature end of volume table\n"
msgstr ""
-#: src/vtblc/libftvt.c:928
+#: src/vtblc/libftvt.c:1357
msgid "Writing volume table segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:936
+#: src/vtblc/libftvt.c:1365
msgid "Ioctl error writing volume table"
msgstr ""
-#: src/vtblc/libftvt.c:940
+#: src/vtblc/libftvt.c:1369
#, c-format
msgid "Error: Short write() writing volume table: %d\n"
msgstr ""
-#: src/vtblc/libftvt.c:1090
+#: src/vtblc/libftvt.c:1519
#, c-format
msgid "Start segment (%d) should be less than end segment (%d)\n"
msgstr ""
-#: src/vtblc/libftvt.c:1096
+#: src/vtblc/libftvt.c:1525
#, c-format
msgid "End segment (%d) must be less than %d\n"
msgstr ""
-#: src/vtblc/libftvt.c:1132
+#: src/vtblc/libftvt.c:1561
msgid "Volume ID must consist of exactly four characters\n"
msgstr ""
-#: src/ftmt/mt.c:329
+#: src/vtblc/libftvt-bsm.c:272
+msgid "Too many bad sectors, no space left in the bad sector map"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:361
+#, c-format
+msgid ""
+"\n"
+"total number of sectors: %d\n"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:362
+msgid "number of bad sectors : %d (%2.2f%%)\n"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:364
+msgid "number of good sectors : %d (%2.2f%%)\n"
+msgstr ""
+
+#: src/ftmt/mt.c:335
msgid "tape operation"
msgstr ""
-#: src/ftmt/mt.c:346
+#: src/ftmt/mt.c:352
msgid "no tape device specified"
msgstr ""
-#: src/ftmt/mt.c:399 src/ftmt/mt.c:402
+#: src/ftmt/mt.c:411 src/ftmt/mt.c:414
#, c-format
msgid "At block %d.\n"
msgstr ""
-#: src/ftmt/mt.c:432
+#: src/ftmt/mt.c:444
#, c-format
msgid "%s is not a character special file"
msgstr ""
-#: src/ftmt/mt.c:465
+#: src/ftmt/mt.c:477
#, c-format
msgid "Drive is a %s, (drive type = %d)\n"
msgstr ""
-#: src/ftmt/mt.c:475
+#: src/ftmt/mt.c:487
#, c-format
msgid "This is a %s floppy tape drive, (drive type = 0x%04lx)\n"
msgstr ""
-#: src/ftmt/mt.c:482
+#: src/ftmt/mt.c:494
#, c-format
msgid "This is a floppy tape drive, drive type = %d, drive name unknown.\n"
msgstr ""
-#: src/ftmt/mt.c:484
+#: src/ftmt/mt.c:496
#, c-format
msgid "drive type = %d, drive name unknown.\n"
msgstr ""
-#: src/ftmt/mt.c:487
+#: src/ftmt/mt.c:499
#, c-format
msgid "drive status (high) = %d\n"
msgstr ""
-#: src/ftmt/mt.c:488
+#: src/ftmt/mt.c:500
#, c-format
msgid "drive status (low) = %d\n"
msgstr ""
-#: src/ftmt/mt.c:490
+#: src/ftmt/mt.c:502
#, c-format
msgid "drive status = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:491
+#: src/ftmt/mt.c:503
#, c-format
msgid "generic drive status = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:492
+#: src/ftmt/mt.c:504
msgid "(In particular: "
msgstr ""
-#: src/ftmt/mt.c:493
+#: src/ftmt/mt.c:505
msgid "at end of file"
msgstr ""
-#: src/ftmt/mt.c:494
+#: src/ftmt/mt.c:506
msgid "at begin of tape"
msgstr ""
-#: src/ftmt/mt.c:495
+#: src/ftmt/mt.c:507
msgid "at end of tape"
msgstr ""
-#: src/ftmt/mt.c:496
+#: src/ftmt/mt.c:508
msgid "at DDS setmark"
msgstr ""
-#: src/ftmt/mt.c:497
+#: src/ftmt/mt.c:509
msgid "at end of data"
msgstr ""
-#: src/ftmt/mt.c:498
+#: src/ftmt/mt.c:510
msgid "tape write protected"
msgstr ""
-#: src/ftmt/mt.c:499
+#: src/ftmt/mt.c:511
msgid "tape online"
msgstr ""
-#: src/ftmt/mt.c:500
+#: src/ftmt/mt.c:512
msgid "density 6250 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:501
+#: src/ftmt/mt.c:513
msgid "density 1600 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:502
+#: src/ftmt/mt.c:514
msgid "density 800 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:503
+#: src/ftmt/mt.c:515
msgid "door open (no tape)"
msgstr ""
-#: src/ftmt/mt.c:504
+#: src/ftmt/mt.c:516
msgid "immediate report mode (scsi)"
msgstr ""
-#: src/ftmt/mt.c:509
+#: src/ftmt/mt.c:521
#, c-format
msgid "sense key error = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:510
+#: src/ftmt/mt.c:522
#, c-format
msgid "residue count = %d\n"
msgstr ""
-#: src/ftmt/mt.c:512 src/ftmt/mt.c:539
+#: src/ftmt/mt.c:524 src/ftmt/mt.c:551
#, c-format
msgid "file number = %d\n"
msgstr ""
-#: src/ftmt/mt.c:513
+#: src/ftmt/mt.c:525
#, c-format
msgid "block number = %d\n"
msgstr ""
-#: src/ftmt/mt.c:538
+#: src/ftmt/mt.c:550
msgid ""
"\n"
"MTIOCVOLINFO result:\n"
msgstr ""
-#: src/ftmt/mt.c:540
+#: src/ftmt/mt.c:552
#, c-format
msgid "block size = %d\n"
msgstr ""
-#: src/ftmt/mt.c:550
+#: src/ftmt/mt.c:562
#, c-format
msgid "physical space used = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:557
+#: src/ftmt/mt.c:569
#, c-format
msgid "real size of volume = %6.1f %sbytes\n"
msgstr ""
#. --ajk 18446744073709551616
-#: src/ftmt/mt.c:560
+#: src/ftmt/mt.c:572
#, c-format
msgid "physical space used = %10.0u kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:562
+#: src/ftmt/mt.c:574
#, c-format
msgid "real size of volume = %10.0u kilobytes\n"
msgstr ""
-#: src/ftmt/mt.c:566
+#: src/ftmt/mt.c:578
msgid "compression ratio = %d %%\n"
msgstr ""
-#: src/ftmt/mt.c:590
+#: src/ftmt/mt.c:602
msgid ""
"\n"
"MTIOCGETSIZE result:\n"
msgstr ""
-#: src/ftmt/mt.c:600
+#: src/ftmt/mt.c:612
#, c-format
msgid "total bytes on tape = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:604
+#: src/ftmt/mt.c:616
#, c-format
msgid "total bytes used = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:607
+#: src/ftmt/mt.c:619
#, c-format
msgid "total bytes left = %6.1f %sbytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:610
+#: src/ftmt/mt.c:622
#, c-format
msgid "total bytes on tape = %10.0lu kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:612
+#: src/ftmt/mt.c:624
#, c-format
msgid "total bytes used = %10.0lu kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:614
+#: src/ftmt/mt.c:626
#, c-format
msgid "total bytes left = %10.0lu kilobytes\n"
msgstr ""
-#: src/ftmt/mt.c:652
+#: src/ftmt/mt.c:694
#, c-format
msgid "Couldn't access segment %d on tape device %s"
msgstr ""
-#: src/ftmt/mt.c:672
+#: src/ftmt/mt.c:714
msgid "Known tape operations:\n"
msgstr ""
diff -u --recursive --new-file ftape-tools-1.08/po/ftape-tools.pot ftape-tools-1.09/po/ftape-tools.pot
--- ftape-tools-1.08/po/ftape-tools.pot Sun Jun 25 23:40:45 2000
+++ ftape-tools-1.09/po/ftape-tools.pot Mon Jul 24 00:58:18 2000
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-06-25 23:40+0200\n"
+"POT-Creation-Date: 2000-07-24 00:58+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -46,7 +46,7 @@
msgid "The option \"%s\" takes no value!\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:164
+#: src/ftformat/ftfmt-options.c:268 src/vtblc/vtblc.c:169
#, c-format
msgid "The option \"%s\" needs a value!\n"
msgstr ""
@@ -66,7 +66,7 @@
msgid "Size of dma buffer %s must be greater than %d\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:230
+#: src/ftformat/ftfmt-options.c:373 src/vtblc/vtblc.c:238
#, c-format
msgid "?? getopt returned character code 0%o ??\n"
msgstr ""
@@ -158,7 +158,8 @@
" Erase cartridge before verifying. NOTE: this is\n"
" different from the erasing the FORMAT of the\n"
" cartridge (see \"--omit-erase\"). HERE it simply\n"
-" means to fill all segments with zero bytes.\n"
+" means to fill all segments with zero bytes prior\n"
+" to verifying.\n"
"\n"
" --print-header Print the contents of the header segment in a\n"
" keyword-value fashion. The bad sector map is also\n"
@@ -263,33 +264,33 @@
"\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:683
+#: src/ftformat/ftfmt-options.c:684
msgid ""
"Cannot format with given parameters without knowing about the QIC standard!\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:698 src/ftformat/ftfmt-options.c:751
+#: src/ftformat/ftfmt-options.c:699 src/ftformat/ftfmt-options.c:752
msgid ""
"Unable to auto-detect tape type. If this is a 205ft cartridge,\n"
"try again with the \"qic80-205ft\" option\n"
msgstr ""
-#: src/ftformat/ftfmt-options.c:720
+#: src/ftformat/ftfmt-options.c:721
msgid "Your tape drive doesn't support the select format command\n"
msgstr ""
-#: src/ftformat/ftformat.c:85
+#: src/ftformat/ftformat.c:92
msgid ""
"Cannot omit writing of the reference bursts with an unformatted cartridge!\n"
msgstr ""
-#: src/ftformat/ftformat.c:132 src/ftformat/ftformat.c:206
+#: src/ftformat/ftformat.c:144 src/ftformat/ftformat.c:218
msgid ""
"Dump of header segment:\n"
"\n"
msgstr ""
-#: src/ftformat/ftformat.c:212
+#: src/ftformat/ftformat.c:224
#, c-format
msgid ""
"Done formatting.\n"
@@ -298,100 +299,100 @@
"Capacity: %8ldM\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:82
+#: src/ftformat/ftfmt-tapelib.c:90
msgid "Error setting tape drive buffering"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:90
+#: src/ftformat/ftfmt-tapelib.c:98
msgid "Error mapping tape dma buffers"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:95
+#: src/ftformat/ftfmt-tapelib.c:103
#, c-format
msgid "Got mmaped tape buffer @ %p/%d\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:111 src/vtblc/libftvt.c:181
+#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:188
msgid "Error: Can't stat tape device file"
msgstr ""
#. should not happen any more at this point
-#: src/ftformat/ftfmt-tapelib.c:119 src/vtblc/libftvt.c:189
+#: src/ftformat/ftfmt-tapelib.c:127 src/vtblc/libftvt.c:196
msgid "Error: tape file is not a character device!"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:125 src/vtblc/libftvt.c:206
+#: src/ftformat/ftfmt-tapelib.c:133 src/vtblc/libftvt.c:213
#, c-format
msgid "Using old ftape raw device with minor number 0x%02x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:134 src/vtblc/libftvt.c:222
+#: src/ftformat/ftfmt-tapelib.c:142 src/vtblc/libftvt.c:229
msgid "Error switching to raw mode"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:138
+#: src/ftformat/ftfmt-tapelib.c:146
#, c-format
msgid "Switched %s raw mode using MTIOCFTRAW ioctl\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:162
+#: src/ftformat/ftfmt-tapelib.c:170
#, c-format
msgid "%s hasn't been opened yet!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:166 src/ftformat/ftfmt-tapelib.c:344
+#: src/ftformat/ftfmt-tapelib.c:174 src/ftformat/ftfmt-tapelib.c:352
msgid "Error closing tape dev"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:170
+#: src/ftformat/ftfmt-tapelib.c:178
msgid "Error re-opening tape dev read/write"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:196
+#: src/ftformat/ftfmt-tapelib.c:204
msgid "Error opening tape device read-only"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:203
+#: src/ftformat/ftfmt-tapelib.c:211
msgid "Error setting tape drive status"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:211 src/vtblc/libftvt.c:258
+#: src/ftformat/ftfmt-tapelib.c:219 src/vtblc/libftvt.c:265
msgid "Error getting tape drive status"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:216 src/vtblc/libftvt.c:263
+#: src/ftformat/ftfmt-tapelib.c:224 src/vtblc/libftvt.c:270
msgid "Error: No tape cartridge present!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:221 src/vtblc/libftvt.c:268
+#: src/ftformat/ftfmt-tapelib.c:229 src/vtblc/libftvt.c:275
msgid "Warning: Write protected cartridge!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:228 src/vtblc/libftvt.c:271
+#: src/ftformat/ftfmt-tapelib.c:236 src/vtblc/libftvt.c:278
msgid "Error: Tape drive is offline!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:233 src/vtblc/libftvt.c:276
+#: src/ftformat/ftfmt-tapelib.c:241 src/vtblc/libftvt.c:283
msgid "Error: This is not a floppy tape drive!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:245
+#: src/ftformat/ftfmt-tapelib.c:253
msgid "Unknown floppy tape drive. Bailing out. Contact "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:257 src/ftformat/ftfmt-tapelib.c:266
+#: src/ftformat/ftfmt-tapelib.c:265 src/ftformat/ftfmt-tapelib.c:274
#, c-format
msgid ""
"Your tape drive (%s -- 0x%04lx) isn't able to format tapes.\n"
"Read the Ftape-HOWTO and contact the linux-tape mailinglist if unsure\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:281
+#: src/ftformat/ftfmt-tapelib.c:289
msgid ""
"Warning: Unknown floppy tape drive make code. Continuing, but please contact "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:286
+#: src/ftformat/ftfmt-tapelib.c:294
#, c-format
msgid ""
"Tape drive: %s.\n"
@@ -400,236 +401,236 @@
"Vendor id : 0x%04x.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:305
+#: src/ftformat/ftfmt-tapelib.c:313
#, c-format
msgid ""
"Vendor suggest format-filler-byte=0x%02x, use \"--mode=force\" to override.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:339
+#: src/ftformat/ftfmt-tapelib.c:347
msgid "Error unmapping dma buffer"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:366 src/ftformat/ftfmt-tapelib.c:418
-#: src/ftformat/ftfmt-tapelib.c:666
+#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:426
+#: src/ftformat/ftfmt-tapelib.c:674
#, c-format
msgid "Ioctl error sending %s command: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:374 src/ftformat/ftfmt-tapelib.c:671
+#: src/ftformat/ftfmt-tapelib.c:382 src/ftformat/ftfmt-tapelib.c:679
#, c-format
msgid "Tape drive error sending %s command: %d (%s)\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:387
+#: src/ftformat/ftfmt-tapelib.c:395
msgid "Calibrating tape length ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:392
+#: src/ftformat/ftfmt-tapelib.c:400
msgid "Ioctl error sending QIC_CALIBRATE_TAPE_LENGTH"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:396
+#: src/ftformat/ftfmt-tapelib.c:404
#, c-format
msgid "Calibrate tape length not supported. Surprise! Error: %d (%s)\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:404
+#: src/ftformat/ftfmt-tapelib.c:412
#, c-format
msgid "got %d segments\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:430
+#: src/ftformat/ftfmt-tapelib.c:438
msgid "Writing reference bursts ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:432 src/ftformat/ftfmt-tapelib.c:440
-#: src/ftformat/ftfmt-tapelib.c:840
+#: src/ftformat/ftfmt-tapelib.c:440 src/ftformat/ftfmt-tapelib.c:448
+#: src/ftformat/ftfmt-tapelib.c:848
msgid "failed!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:443 src/ftformat/ftfmt-tapelib.c:547
-#: src/ftformat/ftfmt-tapelib.c:1336 src/ftformat/ftfmt-tapelib.c:1357
-#: src/vtblc/libftvt.c:387 src/vtblc/libftvt.c:453 src/vtblc/libftvt.c:945
+#: src/ftformat/ftfmt-tapelib.c:451 src/ftformat/ftfmt-tapelib.c:555
+#: src/ftformat/ftfmt-tapelib.c:1349 src/ftformat/ftfmt-tapelib.c:1370
+#: src/vtblc/libftvt.c:433 src/vtblc/libftvt.c:526 src/vtblc/libftvt.c:1374
msgid "done.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:460
+#: src/ftformat/ftfmt-tapelib.c:468
msgid "Unable to rewind the cartridge\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:467
+#: src/ftformat/ftfmt-tapelib.c:475
msgid "Erasing track 0"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:484
+#: src/ftformat/ftfmt-tapelib.c:492
msgid ""
"\n"
"cartridge not a eot\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:494
+#: src/ftformat/ftfmt-tapelib.c:502
msgid ""
"\n"
"cartridge not a bot\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:506
+#: src/ftformat/ftfmt-tapelib.c:514
msgid "Please ignore the error message printed above!"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:527
+#: src/ftformat/ftfmt-tapelib.c:535
msgid "Reading old header segment ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:534 src/ftformat/ftfmt-tapelib.c:1297
+#: src/ftformat/ftfmt-tapelib.c:542 src/ftformat/ftfmt-tapelib.c:1310
#, c-format
msgid "Ioctl error reading header segment: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:543
+#: src/ftformat/ftfmt-tapelib.c:551
msgid "Unable to read the header segment\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:544
+#: src/ftformat/ftfmt-tapelib.c:552
msgid "Consider using \"--header-discard\"\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:592
+#: src/ftformat/ftfmt-tapelib.c:600
msgid "ftape-3.x format API\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:598
+#: src/ftformat/ftfmt-tapelib.c:606
#, c-format
msgid "ftape-4.x format API: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:602
+#: src/ftformat/ftfmt-tapelib.c:610
msgid "Unknown format API version. Giving up.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:622
+#: src/ftformat/ftfmt-tapelib.c:630
#, c-format
msgid "Unknown api version: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:649
+#: src/ftformat/ftfmt-tapelib.c:657
msgid ""
-"Please ignore the error message printed above if in case\n"
-"that your cartridge can be formatted successfully!\n"
+"Please ignore the error message printed above if\n"
+"your cartridge can be formatted successfully!\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:676
+#: src/ftformat/ftfmt-tapelib.c:684
msgid ""
"Please ignore the error message printed above if it proves\n"
"that your cartridge can be formatted successfully.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:686
+#: src/ftformat/ftfmt-tapelib.c:694
#, c-format
msgid "Ioctl error sending format parameters: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:705
+#: src/ftformat/ftfmt-tapelib.c:713
#, c-format
msgid "Ioctl error getting format parameters: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:789 src/ftformat/ftfmt-tapelib.c:814
+#: src/ftformat/ftfmt-tapelib.c:797 src/ftformat/ftfmt-tapelib.c:822
#, c-format
msgid "msync(%p, %d, MS_SYNC) failed: %s.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:792 src/ftformat/ftfmt-tapelib.c:817
+#: src/ftformat/ftfmt-tapelib.c:800 src/ftformat/ftfmt-tapelib.c:825
msgid "Dumping core\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:846 src/ftformat/ftfmt-tapelib.c:906
+#: src/ftformat/ftfmt-tapelib.c:854 src/ftformat/ftfmt-tapelib.c:914
#, c-format
msgid "Formatting track %3d, "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:856
+#: src/ftformat/ftfmt-tapelib.c:864
#, c-format
msgid "segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:865
+#: src/ftformat/ftfmt-tapelib.c:873
#, c-format
msgid ""
"\n"
"Ioctl error formatting track %d: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:889
+#: src/ftformat/ftfmt-tapelib.c:897
#, c-format
msgid ""
"\n"
"Error getting format status (%d/%d): %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:897
+#: src/ftformat/ftfmt-tapelib.c:905
#, c-format
msgid "Retrying track %3d, "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:956
+#: src/ftformat/ftfmt-tapelib.c:974
#, c-format
msgid "Erasing track %3d, segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:990
+#: src/ftformat/ftfmt-tapelib.c:1008
#, c-format
msgid "Verifying track %3d, segment %8d"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1005
+#: src/ftformat/ftfmt-tapelib.c:1023
#, c-format
msgid ""
"\n"
"Ioctl error verifying segment %d: %s\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1025
+#: src/ftformat/ftfmt-tapelib.c:1043
#, c-format
msgid "bsm for segment %d: 0x%08x\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1173
+#: src/ftformat/ftfmt-tapelib.c:1186
msgid "Newly formatted cartride hasn't three error free segments.\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1225 src/vtblc/libftvt.c:867
+#: src/ftformat/ftfmt-tapelib.c:1238 src/vtblc/libftvt.c:1290
msgid "invalid"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1302
+#: src/ftformat/ftfmt-tapelib.c:1315
#, c-format
msgid "Failed to write segment %d, mode %d: %d\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1328 src/ftformat/ftfmt-tapelib.c:1338
-#: src/ftformat/ftfmt-tapelib.c:1348
+#: src/ftformat/ftfmt-tapelib.c:1341 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1361
#, c-format
msgid "Deleting segment %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1331 src/ftformat/ftfmt-tapelib.c:1341
-#: src/ftformat/ftfmt-tapelib.c:1346 src/ftformat/ftfmt-tapelib.c:1351
+#: src/ftformat/ftfmt-tapelib.c:1344 src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1359 src/ftformat/ftfmt-tapelib.c:1364
msgid "done\n"
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1333
+#: src/ftformat/ftfmt-tapelib.c:1346
#, c-format
msgid "Writing 1st header segment at %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1343
+#: src/ftformat/ftfmt-tapelib.c:1356
#, c-format
msgid "Writing 2nd header segment at %d ... "
msgstr ""
-#: src/ftformat/ftfmt-tapelib.c:1354
+#: src/ftformat/ftfmt-tapelib.c:1367
#, c-format
msgid "Initializing volume table at %d ... "
msgstr ""
@@ -654,22 +655,22 @@
msgid "Couldn't allocate %d Meg. You need kill off a few programs.\n"
msgstr ""
-#: src/vtblc/vtblc.c:185
+#: src/vtblc/vtblc.c:190
#, c-format
msgid "Unknown option: %s\n"
msgstr ""
-#: src/vtblc/vtblc.c:265
+#: src/vtblc/vtblc.c:284
msgid "Missing start- or ending segment\n"
msgstr ""
-#: src/vtblc/libftvt.c:1006 src/vtblc/libftvt.c:1051 src/vtblc/libftvt.c:1086
-#: src/vtblc/libftvt.c:1128 src/vtblc/vtblc.c:294
+#: src/vtblc/libftvt.c:1435 src/vtblc/libftvt.c:1480 src/vtblc/libftvt.c:1515
+#: src/vtblc/libftvt.c:1557 src/vtblc/vtblc.c:313
#, c-format
msgid "Volume number too big or negative: %d\n"
msgstr ""
-#: src/vtblc/vtblc.c:327
+#: src/vtblc/vtblc.c:346
msgid ""
"Usage: %s [OPTIONS]\n"
"Manipulate the volume table of a floppy tape cartridge, for use with\n"
@@ -686,6 +687,7 @@
" -d, --debug Unused yet.\n"
" -v, --verbose Be verbose (default).\n"
" -q, --quiet Don't be verbose.\n"
+" -b, --bsm Print the bad sector map and quit.\n"
" -#, --vtbl-entry=NR Specify the volume number for \"--print\" and\n"
" \"--modify\".\n"
" -p, --print[=tagged] Print the volume table entry given by\n"
@@ -704,7 +706,7 @@
" \"--vtbl-entry\". If \"--vtbl-entry\" has been\n"
" omitted then the last entry is modified.\n"
"\n"
-"\"--apend\" and \"--modify\" understand the following sub-options:\n"
+"\"--append\" and \"--modify\" understand the following sub-options:\n"
"\n"
" label=LABEL The description for this volume table entry.\n"
" LABEL will be truncated to 44 bytes.\n"
@@ -722,9 +724,12 @@
" space characters (SPACE or TAB).\n"
" `vtblc` understands the following keywords and values:\n"
"\n"
-" ENTRY NUM Starts the description for the volume NUM. This may\n"
-" be ommitted if the \"--vtbl-entry=NUM\" has been\n"
-" given.\n"
+" VTBL START\n"
+" VTBL END Marks the start of vtbl data. Maybe useful when\n"
+" sending volume table entries via email :-).\n"
+" However, the entire volume table data must be\n"
+" surrounded by a \"VTBL START\" - \"VTBL END\" pair.\n"
+" ENTRY NUM Starts the description for the volume NUM.\n"
" ENTRY END Here END is not a placeholder, but means the\n"
" word \"END\". Ends the description for the volume\n"
" table entry previously started by \"ENTRY NUM\".\n"
@@ -732,10 +737,25 @@
" modifies the volume number NUM. This provides means\n"
" to modify the entire volume table in a single run.\n"
"\n"
-" SIGNATURE \"SIG\" Valid signature string. Only \"VTBL\" is\n"
-" for now.\n"
+" SIGNATURE \"SIG\" Valid signature string. Must be one out of\n"
+" \"VTBL\", \"XTBL\", \"EXVT\" and \"UTID\".\n"
+" If this tag is used it MUST be the first entry\n"
+" after the \"ENTRY\" tag. If the \"SIGNATURE\" tag\n"
+" is missing, \"VTBL\" is assumed.\n"
+"\n"
+"The following entry is for signatures other than \"VTBL\":\n"
+"\n"
+" ENTRY_DATA \"HEX\" Data following the signature \"HEX\" is a string\n"
+" of hexadecimal byte values, e.g. \"0x01 0x4f ...\",\n"
+" of length at most 124. If less bytes are presented\n"
+" the entry will be padded with zeroes.\n"
+"\n"
+"Following entries are for for signature \"VTBL\":\n"
+"\n"
" START STARTSEG First segment of this volume.\n"
" END ENDSEG Last segment of this volume.\n"
+" NUM_SEGMENTS NUM Number of segments occupied (optional).\n"
+" If omitted, will be set to (ENDSEG-STARTSEG+1)\n"
" DESCRIPTION \"DESC\" Description for this volume table. Will be\n"
" truncated to 44 characters.\n"
" DATE \"DATESTR\" Date for the volume. If \"DATESTR\" is ommitted,\n"
@@ -749,12 +769,26 @@
" FLAG_RESERVED_6 VAL\n"
" FLAG_RESERVED_7 VAL\n"
" MULTI_CARTRIDGE_COUNT VAL\n"
+"\n"
+"The following tags are understood only if FLAG_VENDOR_SPECIFIC is 0\n"
+"or if FLAG_VENDOR_SPECIFIC is 1 and QIC_MAJOR is 113:\n"
+"\n"
+" QIC_MAJOR VAL Major number of QIC spec cartridge conforms to,\n"
+" only for cartridges with more than 65536 segments.\n"
+" VAL should be 113 for all cases.\n"
+" QIC_MINOR VAL Minor revision number of QIC spec. Only for\n"
+" cartridges with more thatn 65536 segments.\n"
+" At the time of this writing, QIC-113, Rev. G, is\n"
+" is the latest one, so VAL should be 7.\n"
" VENDOR_EXTENSION \"HEX\" Vendor extension data. \"HEX\" is a string\n"
" of hexadecimal byte values, i.e. \"0x01 0x4f ...\"\n"
+" The maximal lenght of this string is 14 bytes for\n"
+" cartridges with more thatn 2^16 = 65536 segments\n"
+" and 26 bytes for smaller cartridges\n"
" PASSWORD \"HEX\" Password. \"HEX\" as above.\n"
" DIRECTORY_SIZE VAL\n"
" DATA_SIZE VAL64 64 bit value (a decimal count)\n"
-" OS_VERSION HEX Here \"HEX\" is a hexadecimal 4 bytes value.\n"
+" OS_VERSION HEX Here \"HEX\" is a hexadecimal 2 bytes value.\n"
" SOURCE_DRIVE DRVSTR Source drive. \"DRVSTR\" is a 16 byte string.\n"
" DEVICE HEXBYTE A single byte in hexadecimal notation.\n"
" RESERVED_1 HEXBYTE\n"
@@ -763,341 +797,372 @@
" RESERVED_2 HEXBYTE\n"
" RESERVED_3 HEXBYTE\n"
"\n"
+"If FLAG_VENDOR_SPECIFIC is 1, then the following tag is allowed:\n"
+"\n"
+" VENDOR_DATA \"HEX\" A string of hexadecimal values of lenght at most\n"
+" 72 to fill the remainder of the volume table entry.\n"
+" Smaller strings will be padded with zero bytes.\n"
+"\n"
"Strings with spaces have to be surrounded by double quotes \"...\"\n"
"\"VAL\" is some decimal number.\n"
"\n"
msgstr ""
-#: src/vtblc/libftvt.c:210
+#: src/vtblc/libftvt.c:217
msgid "Error: raw mode bit not set in minor device number\n"
msgstr ""
-#: src/vtblc/libftvt.c:215
+#: src/vtblc/libftvt.c:222
msgid "Error switching to normal mode"
msgstr ""
-#: src/vtblc/libftvt.c:227
+#: src/vtblc/libftvt.c:234
#, c-format
msgid "Switched %s raw mode using MTIOCFTMODE ioctl\n"
msgstr ""
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "to"
msgstr ""
-#: src/vtblc/libftvt.c:228
+#: src/vtblc/libftvt.c:235
msgid "off"
msgstr ""
-#: src/vtblc/libftvt.c:252
+#: src/vtblc/libftvt.c:259
msgid "Error opening tape device"
msgstr ""
-#: src/vtblc/libftvt.c:288
+#: src/vtblc/libftvt.c:295
#, c-format
msgid "Tape drive type: %s (0x%04lx)\n"
msgstr ""
-#: src/vtblc/libftvt.c:309 src/vtblc/libftvt.c:353 src/vtblc/libftvt.c:949
+#: src/vtblc/libftvt.c:316 src/vtblc/libftvt.c:1378
msgid "Ioctl error rewinding tape"
msgstr ""
-#: src/vtblc/libftvt.c:316
+#: src/vtblc/libftvt.c:323
msgid "Error closing tape device"
msgstr ""
-#: src/vtblc/libftvt.c:361
+#: src/vtblc/libftvt.c:407
msgid "Reading volume table segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:370
+#: src/vtblc/libftvt.c:416
msgid "Ioctl error reading volume table"
msgstr ""
-#: src/vtblc/libftvt.c:374
+#: src/vtblc/libftvt.c:420
#, c-format
msgid "Error reading volume table: %s\n"
msgstr ""
-#: src/vtblc/libftvt.c:381
+#: src/vtblc/libftvt.c:427
#, c-format
msgid ""
"Warning: Short read() reading volume table: %d.\n"
"Continuing, but you can use only %d volumes (instead of %d)\n"
msgstr ""
-#: src/vtblc/libftvt.c:432
+#: src/vtblc/libftvt.c:505
msgid "Reading header segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:441
+#: src/vtblc/libftvt.c:514
msgid "Ioctl error reading header segment"
msgstr ""
-#: src/vtblc/libftvt.c:449
+#: src/vtblc/libftvt.c:522
msgid "Error: Bad magic number in header segment!\n"
msgstr ""
-#: src/vtblc/libftvt.c:711 src/vtblc/libftvt.c:723 src/vtblc/libftvt.c:736
-#: src/vtblc/libftvt.c:745 src/vtblc/libftvt.c:756 src/vtblc/libftvt.c:812
-#: src/vtblc/libftvt.c:825
+#: src/vtblc/libftvt.c:1003 src/vtblc/libftvt.c:1015 src/vtblc/libftvt.c:1028
+#: src/vtblc/libftvt.c:1039 src/vtblc/libftvt.c:1062 src/vtblc/libftvt.c:1139
+#: src/vtblc/libftvt.c:1156 src/vtblc/libftvt.c:1173 src/vtblc/libftvt.c:1186
+#: src/vtblc/libftvt.c:1199 src/vtblc/libftvt.c:1214 src/vtblc/libftvt.c:1227
+#: src/vtblc/libftvt.c:1247
#, c-format
msgid "Corrupt volume input data: %s\n"
msgstr ""
-#: src/vtblc/libftvt.c:730 src/vtblc/libftvt.c:972
+#: src/vtblc/libftvt.c:1022 src/vtblc/libftvt.c:1401
#, c-format
msgid "Too many volumes: %d (%d max)\n"
msgstr ""
#. need the "ENTRY" tag
-#: src/vtblc/libftvt.c:751
+#: src/vtblc/libftvt.c:1045
msgid "Corrupt volume input data\n"
msgstr ""
-#: src/vtblc/libftvt.c:836
+#: src/vtblc/libftvt.c:1053
+msgid "SIGNATURE tag must follow ENTRY at once.\n"
+msgstr ""
+
+#: src/vtblc/libftvt.c:1259
msgid "Premature end of volume table\n"
msgstr ""
-#: src/vtblc/libftvt.c:928
+#: src/vtblc/libftvt.c:1357
msgid "Writing volume table segment ... "
msgstr ""
-#: src/vtblc/libftvt.c:936
+#: src/vtblc/libftvt.c:1365
msgid "Ioctl error writing volume table"
msgstr ""
-#: src/vtblc/libftvt.c:940
+#: src/vtblc/libftvt.c:1369
#, c-format
msgid "Error: Short write() writing volume table: %d\n"
msgstr ""
-#: src/vtblc/libftvt.c:1090
+#: src/vtblc/libftvt.c:1519
#, c-format
msgid "Start segment (%d) should be less than end segment (%d)\n"
msgstr ""
-#: src/vtblc/libftvt.c:1096
+#: src/vtblc/libftvt.c:1525
#, c-format
msgid "End segment (%d) must be less than %d\n"
msgstr ""
-#: src/vtblc/libftvt.c:1132
+#: src/vtblc/libftvt.c:1561
msgid "Volume ID must consist of exactly four characters\n"
msgstr ""
-#: src/ftmt/mt.c:329
+#: src/vtblc/libftvt-bsm.c:272
+msgid "Too many bad sectors, no space left in the bad sector map"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:361
+#, c-format
+msgid ""
+"\n"
+"total number of sectors: %d\n"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:362
+msgid "number of bad sectors : %d (%2.2f%%)\n"
+msgstr ""
+
+#: src/vtblc/libftvt-bsm.c:364
+msgid "number of good sectors : %d (%2.2f%%)\n"
+msgstr ""
+
+#: src/ftmt/mt.c:335
msgid "tape operation"
msgstr ""
-#: src/ftmt/mt.c:346
+#: src/ftmt/mt.c:352
msgid "no tape device specified"
msgstr ""
-#: src/ftmt/mt.c:399 src/ftmt/mt.c:402
+#: src/ftmt/mt.c:411 src/ftmt/mt.c:414
#, c-format
msgid "At block %d.\n"
msgstr ""
-#: src/ftmt/mt.c:432
+#: src/ftmt/mt.c:444
#, c-format
msgid "%s is not a character special file"
msgstr ""
-#: src/ftmt/mt.c:465
+#: src/ftmt/mt.c:477
#, c-format
msgid "Drive is a %s, (drive type = %d)\n"
msgstr ""
-#: src/ftmt/mt.c:475
+#: src/ftmt/mt.c:487
#, c-format
msgid "This is a %s floppy tape drive, (drive type = 0x%04lx)\n"
msgstr ""
-#: src/ftmt/mt.c:482
+#: src/ftmt/mt.c:494
#, c-format
msgid "This is a floppy tape drive, drive type = %d, drive name unknown.\n"
msgstr ""
-#: src/ftmt/mt.c:484
+#: src/ftmt/mt.c:496
#, c-format
msgid "drive type = %d, drive name unknown.\n"
msgstr ""
-#: src/ftmt/mt.c:487
+#: src/ftmt/mt.c:499
#, c-format
msgid "drive status (high) = %d\n"
msgstr ""
-#: src/ftmt/mt.c:488
+#: src/ftmt/mt.c:500
#, c-format
msgid "drive status (low) = %d\n"
msgstr ""
-#: src/ftmt/mt.c:490
+#: src/ftmt/mt.c:502
#, c-format
msgid "drive status = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:491
+#: src/ftmt/mt.c:503
#, c-format
msgid "generic drive status = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:492
+#: src/ftmt/mt.c:504
msgid "(In particular: "
msgstr ""
-#: src/ftmt/mt.c:493
+#: src/ftmt/mt.c:505
msgid "at end of file"
msgstr ""
-#: src/ftmt/mt.c:494
+#: src/ftmt/mt.c:506
msgid "at begin of tape"
msgstr ""
-#: src/ftmt/mt.c:495
+#: src/ftmt/mt.c:507
msgid "at end of tape"
msgstr ""
-#: src/ftmt/mt.c:496
+#: src/ftmt/mt.c:508
msgid "at DDS setmark"
msgstr ""
-#: src/ftmt/mt.c:497
+#: src/ftmt/mt.c:509
msgid "at end of data"
msgstr ""
-#: src/ftmt/mt.c:498
+#: src/ftmt/mt.c:510
msgid "tape write protected"
msgstr ""
-#: src/ftmt/mt.c:499
+#: src/ftmt/mt.c:511
msgid "tape online"
msgstr ""
-#: src/ftmt/mt.c:500
+#: src/ftmt/mt.c:512
msgid "density 6250 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:501
+#: src/ftmt/mt.c:513
msgid "density 1600 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:502
+#: src/ftmt/mt.c:514
msgid "density 800 (scsi)"
msgstr ""
-#: src/ftmt/mt.c:503
+#: src/ftmt/mt.c:515
msgid "door open (no tape)"
msgstr ""
-#: src/ftmt/mt.c:504
+#: src/ftmt/mt.c:516
msgid "immediate report mode (scsi)"
msgstr ""
-#: src/ftmt/mt.c:509
+#: src/ftmt/mt.c:521
#, c-format
msgid "sense key error = 0x%08x\n"
msgstr ""
-#: src/ftmt/mt.c:510
+#: src/ftmt/mt.c:522
#, c-format
msgid "residue count = %d\n"
msgstr ""
-#: src/ftmt/mt.c:512 src/ftmt/mt.c:539
+#: src/ftmt/mt.c:524 src/ftmt/mt.c:551
#, c-format
msgid "file number = %d\n"
msgstr ""
-#: src/ftmt/mt.c:513
+#: src/ftmt/mt.c:525
#, c-format
msgid "block number = %d\n"
msgstr ""
-#: src/ftmt/mt.c:538
+#: src/ftmt/mt.c:550
msgid ""
"\n"
"MTIOCVOLINFO result:\n"
msgstr ""
-#: src/ftmt/mt.c:540
+#: src/ftmt/mt.c:552
#, c-format
msgid "block size = %d\n"
msgstr ""
-#: src/ftmt/mt.c:550
+#: src/ftmt/mt.c:562
#, c-format
msgid "physical space used = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:557
+#: src/ftmt/mt.c:569
#, c-format
msgid "real size of volume = %6.1f %sbytes\n"
msgstr ""
#. --ajk 18446744073709551616
-#: src/ftmt/mt.c:560
+#: src/ftmt/mt.c:572
#, c-format
msgid "physical space used = %10.0u kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:562
+#: src/ftmt/mt.c:574
#, c-format
msgid "real size of volume = %10.0u kilobytes\n"
msgstr ""
-#: src/ftmt/mt.c:566
+#: src/ftmt/mt.c:578
msgid "compression ratio = %d %%\n"
msgstr ""
-#: src/ftmt/mt.c:590
+#: src/ftmt/mt.c:602
msgid ""
"\n"
"MTIOCGETSIZE result:\n"
msgstr ""
-#: src/ftmt/mt.c:600
+#: src/ftmt/mt.c:612
#, c-format
msgid "total bytes on tape = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:604
+#: src/ftmt/mt.c:616
#, c-format
msgid "total bytes used = %6.1f %sbytes\n"
msgstr ""
-#: src/ftmt/mt.c:607
+#: src/ftmt/mt.c:619
#, c-format
msgid "total bytes left = %6.1f %sbytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:610
+#: src/ftmt/mt.c:622
#, c-format
msgid "total bytes on tape = %10.0lu kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:612
+#: src/ftmt/mt.c:624
#, c-format
msgid "total bytes used = %10.0lu kilobytes\n"
msgstr ""
#. --ajk
-#: src/ftmt/mt.c:614
+#: src/ftmt/mt.c:626
#, c-format
msgid "total bytes left = %10.0lu kilobytes\n"
msgstr ""
-#: src/ftmt/mt.c:652
+#: src/ftmt/mt.c:694
#, c-format
msgid "Couldn't access segment %d on tape device %s"
msgstr ""
-#: src/ftmt/mt.c:672
+#: src/ftmt/mt.c:714
msgid "Known tape operations:\n"
msgstr ""
diff -u --recursive --new-file ftape-tools-1.08/src/ftape-tool/ftape-command.tcl ftape-tools-1.09/src/ftape-tool/ftape-command.tcl
--- ftape-tools-1.08/src/ftape-tool/ftape-command.tcl Fri Dec 18 23:01:03 1998
+++ ftape-tools-1.09/src/ftape-tool/ftape-command.tcl Sun Jul 23 02:58:31 2000
@@ -149,16 +149,20 @@
# Procedure: TapeCmd
-proc TapeCmd { {tapedev "/dev/nqft0"} {action "status"} FDName} {
+proc TapeCmd { {tapedev "/dev/nqft0"} {action_arg "status"} FDName} {
global outputframe
upvar \#0 $FDName fd
+ set action [lindex [split $action_arg] 0]
+
set ButtonMap(status) Status
set ButtonMap(rewind) Rewind
set ButtonMap(reten) Retension
set ButtonMap(erase) Erase
set ButtonMap(rewoffl) Eject
set ButtonMap(reset) Reset
+ set ButtonMap(load) Load
+ set ButtonMap(setpart) SetPart
if {[lindex [[SN $ButtonMap($action)Button] config -text] 4] == "Cancel"} {
if {$fd != ""} {
@@ -175,7 +179,7 @@
VFrame[SN cmdframe] [SN cmdframe]
ClearList [SN cmdframe].frame.listbox1
# puts "[SN cmdframe]\n"
- catch {CmdInList [SN cmdframe].frame.listbox1 "ftmt -f $tapedev $action" $ButtonMap($action) $FDName}
+ catch {CmdInList [SN cmdframe].frame.listbox1 "ftmt -f $tapedev $action_arg" $ButtonMap($action) $FDName}
}
diff -u --recursive --new-file ftape-tools-1.08/src/ftape-tool/ftape-tool.tcl ftape-tools-1.09/src/ftape-tool/ftape-tool.tcl
--- ftape-tools-1.08/src/ftape-tool/ftape-tool.tcl Fri Dec 18 23:01:03 1998
+++ ftape-tools-1.09/src/ftape-tool/ftape-tool.tcl Sun Jul 23 03:14:44 2000
@@ -76,6 +76,107 @@
unset tmpArgv
+# procedure to show window .top5
+proc ShowWindow.top5 {args} {# xf ignore me 7
+
+ # build widget .top5
+ if {"[info procs XFEdit]" != ""} {
+ catch "XFDestroy .top5"
+ } {
+ catch "destroy .top5"
+ }
+ toplevel .top5
+
+ # Window manager configurations
+ wm positionfrom .top5 ""
+ wm sizefrom .top5 program
+ wm geometry .top5 212x84
+ wm maxsize .top5 212 84
+ wm minsize .top5 212 84
+ wm protocol .top5 WM_DELETE_WINDOW {XFProcError {Application windows can not be destroyed.
+Please use the "Current widget path:" to show/hide windows.}}
+ wm title .top5 {Set Partition}
+
+
+ # build widget .top5.frame7
+ frame .top5.frame7 \
+ -borderwidth {2} \
+ -height {30} \
+ -relief {raised} \
+ -width {30}
+
+ # build widget .top5.frame7.scale6
+ scale .top5.frame7.scale6 \
+ -orient {horizontal} \
+ -relief {raised} \
+ -to {1.0} -variable PartitionNumber
+
+ # build widget .top5.frame8
+ frame .top5.frame8 \
+ -borderwidth {2} \
+ -height {30} \
+ -relief {raised} \
+ -width {30}
+
+ # build widget .top5.frame8.button9
+ button .top5.frame8.button9 \
+ -command {TapeCmd $Options(NoRewindDevice) "setpart $PartitionNumber" CmdPipeFD
+DestroyWindow[SN SetPartDialog]} \
+ -padx {9} \
+ -pady {3} \
+ -text {Accept}
+
+ # build widget .top5.frame8.button10
+ button .top5.frame8.button10 \
+ -command {DestroyWindow[SN SetPartDialog]} \
+ -padx {9} \
+ -pady {3} \
+ -text {Cancel}
+
+ # pack master .top5.frame7
+ pack configure .top5.frame7.scale6 \
+ -anchor n \
+ -expand 1 \
+ -fill x
+
+ # pack master .top5.frame8
+ pack configure .top5.frame8.button9 \
+ -expand 1 \
+ -fill x \
+ -side left
+ pack configure .top5.frame8.button10 \
+ -expand 1 \
+ -fill both \
+ -side left
+
+ # pack master .top5
+ pack configure .top5.frame7 \
+ -expand 1 \
+ -fill x
+ pack configure .top5.frame8 \
+ -fill x
+
+ if {"[info procs XFEdit]" != ""} {
+ catch "XFMiscBindWidgetTree .top5"
+ after 2 "catch {XFEditSetShowWindows}"
+ }
+}
+
+proc DestroyWindow.top5 {} {# xf ignore me 7
+ if {"[info procs XFEdit]" != ""} {
+ if {"[info commands .top5]" != ""} {
+ global xfShowWindow.top5
+ set xfShowWindow.top5 0
+ XFEditSetPath .
+ after 2 "XFSaveAsProc .top5; XFEditSetShowWindows"
+ }
+ } {
+ catch "destroy .top5"
+ update
+ }
+}
+
+
# procedure to show window ShowWindow.top1
proc ShowWindow.top1 { args} {
# xf ignore me 7
@@ -374,7 +475,7 @@
# build widget .frame0.menubutton5.m
menu .frame0.menubutton5.m \
- -tearoff {0}
+ -tearoff {1}
.frame0.menubutton5.m add command \
-command {set cmdstatus "ready"
if {"[info procs XFEdit]" == ""} {
@@ -406,7 +507,7 @@
# build widget .frame0.menubutton0.m
menu .frame0.menubutton0.m \
- -tearoff {0}
+ -tearoff {1}
.frame0.menubutton0.m add command \
-command {ShowWindow.top0} \
-label {About}
@@ -424,7 +525,7 @@
# build widget .frame0.menubutton13.m
menu .frame0.menubutton13.m \
- -tearoff {0}
+ -tearoff {1}
.frame0.menubutton13.m add command \
-command {TapeCmd $Options(NoRewindDevice) "status" CmdPipeFD} \
-label {Status}
@@ -435,11 +536,17 @@
-command {TapeCmd $Options(NoRewindDevice) "rewind" CmdPipeFD} \
-label {Rewind}
.frame0.menubutton13.m add command \
+ -command {TapeCmd $Options(NoRewindDevice) "reten" CmdPipeFD} \
+ -label {Retension}
+ .frame0.menubutton13.m add command \
-command {TapeCmd $Options(NoRewindDevice) "rewoffl" CmdPipeFD} \
-label {Eject}
.frame0.menubutton13.m add command \
- -command {TapeCmd $Options(NoRewindDevice) "reten" CmdPipeFD} \
- -label {Retension}
+ -command {TapeCmd $Options(NoRewindDevice) "load" CmdPipeFD} \
+ -label {Load}
+ .frame0.menubutton13.m add command \
+ -command {ShowWindow[SN SetPartDialog]} \
+ -label {SetPart}
.frame0.menubutton13.m add command \
-command {if {[AlertBox "WARNING: FILE MARKS AND DATA MIGHT BE LOST" "" "" "Reset" "CANCEL" "OK"] == 1} {
AlertBox "YOU HAVE BEEN WARNED" "" "" "Reset" "CONTINUE"
@@ -465,12 +572,12 @@
# build widget .frame0.menubutton1.m
menu .frame0.menubutton1.m \
- -tearoff {0}
+ -tearoff {1}
.frame0.menubutton1.m add command \
-command {set newtapedev $Options(NoRewindDevice)
set newrawdev $Options(RawNoRewindDevice)
ShowWindow.top3} \
- -label {Prefenrences}
+ -label {Preferences}
.frame0.menubutton1.m add command \
-command {SaveOptions} \
-label {Save Options}
@@ -557,10 +664,10 @@
# build widget .frame1.button8
button .frame1.button8 \
- -command {TapeCmd $Options(NoRewindDevice) "rewind" CmdPipeFD} \
+ -command {TapeCmd $Options(NoRewindDevice) "load" CmdPipeFD} \
-padx {9} \
-pady {3} \
- -text {Rewind}
+ -text {Load}
# build widget .frame1.button9
button .frame1.button9 \
@@ -569,6 +676,13 @@
-pady {3} \
-text {Eject}
+ # build widget .frame1.button10
+ button .frame1.button10 \
+ -command {ShowWindow[SN SetPartDialog]} \
+ -padx {9} \
+ -pady {3} \
+ -text {SetPart}
+
# build widget .frame3
frame .frame3 \
-borderwidth {2} \
@@ -760,10 +874,16 @@
pack configure .frame1.button0 \
-expand 1 \
-fill both
+ pack configure .frame1.button2 \
+ -expand 1 \
+ -fill both
pack configure .frame1.button9 \
-expand 1 \
-fill both
- pack configure .frame1.button2 \
+ pack configure .frame1.button8 \
+ -expand 1 \
+ -fill both
+ pack configure .frame1.button10 \
-expand 1 \
-fill both
pack configure .frame1.button1 \
@@ -1459,6 +1579,8 @@
Retension
Reset
Erase
+ Load
+ SetPart
Format } {
# puts "$but\n$"
if {$action == "start"} {
@@ -2287,6 +2409,8 @@
set {TimeString} {00:00:00}
global {UserInfoString}
set {UserInfoString} {Waiting for the tape drive to finish. Please have a little patience.}
+ global {PartitionNumber}
+ set {PartitionNumber} {1}
global {VOLNOVar}
set {VOLNOVar} {0}
global {VolumeCount}
@@ -2442,11 +2566,15 @@
set {symbolicName(ResetButton)} {.frame1.button1}
set {symbolicName(RetensionButton)} {.frame1.button2}
set {symbolicName(RewindButton)} {.frame1.button0}
+ set {symbolicName(LoadButton)} {.frame1.button8}
+ set {symbolicName(SetPartButton)} {.frame1.button10}
set {symbolicName(SIGNATUREEntry)} {.frame8.frame6.frame1.frame14.frame44.value}
set {symbolicName(SIGNATUREList)} {.frame8.frame.listbox2}
set {symbolicName(SIGNATUREMenu)} {.frame8.frame6.frame1.frame14.frame44.menubutton2}
set {symbolicName(STARTList)} {.frame8.frame.listbox5}
set {symbolicName(STARTScale)} {.frame8.frame6.frame1.frame14.scale17}
+ set {symbolicName(SetPartDialog)} {.top5}
+ set {symbolicName(SetPartScale)} {.top5.frame7.scale6}
set {symbolicName(SignatureFrame)} {.frame8.frame6.frame1.frame14.frame44}
set {symbolicName(StartFormatButton)} {.frame6.frame15.frame9.button10}
set {symbolicName(StatusButton)} {.frame1.button3}
diff -u --recursive --new-file ftape-tools-1.08/src/ftformat/ftfmt-options.c ftape-tools-1.09/src/ftformat/ftfmt-options.c
--- ftape-tools-1.08/src/ftformat/ftfmt-options.c Wed Mar 17 12:25:42 1999
+++ ftape-tools-1.09/src/ftformat/ftfmt-options.c Sun Jul 23 15:55:40 2000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1997 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
*
* $RCSfile: ftfmt-options.c,v $
- * $Revision: 1.8 $
- * $Date: 1999/03/17 11:25:42 $
+ * $Revision: 1.9 $
+ * $Date: 2000/07/23 13:55:40 $
*
* This program contains the options parsing for the user level
* floppy tape formatting stuff for the QIC-40/80/3010/3020
@@ -508,7 +508,8 @@
" Erase cartridge before verifying. NOTE: this is\n"
" different from the erasing the FORMAT of the\n"
" cartridge (see \"--omit-erase\"). HERE it simply\n"
-" means to fill all segments with zero bytes.\n"
+" means to fill all segments with zero bytes prior\n"
+" to verifying.\n"
"\n"
" --print-header Print the contents of the header segment in a\n"
" keyword-value fashion. The bad sector map is also\n"
diff -u --recursive --new-file ftape-tools-1.08/src/ftformat/ftfmt-tapelib.c ftape-tools-1.09/src/ftformat/ftfmt-tapelib.c
--- ftape-tools-1.08/src/ftformat/ftfmt-tapelib.c Sun Jun 25 23:14:27 2000
+++ ftape-tools-1.09/src/ftformat/ftfmt-tapelib.c Mon Jul 24 00:47:59 2000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1997 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
*
* $RCSfile: ftfmt-tapelib.c,v $
- * $Revision: 1.12 $
- * $Date: 2000/06/25 21:14:27 $
+ * $Revision: 1.15 $
+ * $Date: 2000/07/23 22:47:59 $
*
* This program contains the tape manipulation functions for the
* user level floppy tape formatting stuff for the
@@ -56,6 +56,14 @@
#include "ftfmt-bsm.h"
#include "ftfmt-tapelib.h"
+#if !HAVE_MINOR
+# ifdef minor
+# undef minor
+# endif
+/* glibc-2.0 seems not to include the "minor()" macro by default */
+# define minor(dev) ((int)((dev) & 0xff))
+#endif
+
const ftape_error qic117_error[] = QIC117_ERRORS;
const struct qic117_command_table qic117_cmd[] = QIC117_COMMANDS;
static int api_version = -1;
@@ -184,11 +192,11 @@
struct mtget mtget;
struct mtop mtop = { MTNOP, 1 };
ft_drive_status hw_status;
- vendor_struct *vendor;
- qic117_make_code *make;
+ const vendor_struct *vendor;
+ const qic117_make_code *make;
format_parms *fmt_opts = &tpparms->fmt_parms;
- static qic117_make_code make_codes[] = QIC117_MAKE_CODES;
- static vendor_struct vendors[] = QIC117_VENDORS;
+ static const qic117_make_code make_codes[] = QIC117_MAKE_CODES;
+ static const vendor_struct vendors[] = QIC117_VENDORS;
/* open the tape device
*/
@@ -646,8 +654,8 @@
(fmt_opts->ft_qicstd & QIC_TAPE_WIDE ? 3 : 1));
if (qic_simple_command(tape_fd, 0, QIC_SELECT_RATE, fmt, 1, NULL) != 0) {
fprintf(stderr,
- _("Please ignore the error message printed above if in case\n"
- "that your cartridge can be formatted successfully!\n"));
+ _("Please ignore the error message printed above if\n"
+ "your cartridge can be formatted successfully!\n"));
} else {
/* If the tape drive doesn't support QIC_SELECT_FORMAT
* (QIC_SELECT_RATE with param > 4) it doesn't support
@@ -944,6 +952,16 @@
return -1;
}
+ /* This might save some space in the already existing bad sector
+ * map. But don't do this if we have erased the bad sector map.
+ */
+ if (opt->keepbsm) {
+ for (i=tpparms->frst_data_segment;
+ i <= tpparms->last_data_segment; i++) {
+ put_bsm_entry(i, tune_bsm_entry(get_bsm_entry(i)));
+ }
+ }
+
/* TODO: if this is a --verify-only pass, optionally erase the
* cartridge by writing zero bytes to it.
*/
@@ -1097,11 +1115,6 @@
put_bsm_entry((i+1) * fmt_opts->ft_spt - 1, EMPTY_SEGMENT);
}
}
- }
- /* This might save some space in the already existing bad sector map
- */
- for (i=tpparms->frst_data_segment; i <= tpparms->last_data_segment; i++) {
- put_bsm_entry(i, tune_bsm_entry(get_bsm_entry(i)));
}
return 0;
}
diff -u --recursive --new-file ftape-tools-1.08/src/ftformat/ftformat.c ftape-tools-1.09/src/ftformat/ftformat.c
--- ftape-tools-1.08/src/ftformat/ftformat.c Wed Mar 17 12:25:42 1999
+++ ftape-tools-1.09/src/ftformat/ftformat.c Sun Jul 23 15:56:45 2000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1997 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,8 +22,8 @@
*/
char src[] = "$RCSfile: ftformat.c,v $";
-char rev[] = "$Revision: 1.9 $";
-char dat[] = "$Date: 1999/03/17 11:25:42 $";
+char rev[] = "$Revision: 1.11 $";
+char dat[] = "$Date: 2000/07/23 13:56:45 $";
#ifdef HAVE_CONFIG_H
#include
@@ -45,14 +45,21 @@
#include "ftfmt-bsm.h"
#include "ftfmt-tapelib.h"
+extern void *xmalloc(size_t);
+extern void *xrealloc(void *, size_t);
+
+static struct opt_parms opts;
+static ftfmt_tpparms_t tpparms;
+
int main(int argc, char *argv[])
{
- struct opt_parms opts;
- ftfmt_tpparms_t tpparms;
int tape_fd = -1;
void *dma_buffer = NULL;
- u_int8_t hseg[FT_SEGMENT_SIZE];
+ u_int8_t *hseg;
+ /* don't allocate on stack to catch buffer overflows more easily
+ */
+ hseg = xmalloc(FT_SEGMENT_SIZE);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
@@ -103,6 +110,11 @@
} else {
memset(hseg, 0, FT_SEGMENT_SIZE);
hseg[FT_FMT_ERROR] = 0xff; /* flag as invalid */
+ /* initialize some missing fields to sane values */
+ tpparms.frst_header_segment = 0;
+ tpparms.scnd_header_segment = 1;
+ tpparms.frst_data_segment = 2;
+ tpparms.last_data_segment = 2; /* just to prevent buffer overflow */
}
if (opts.mode != FORCE) {
if (!opts.do_format) { /* verify only */
diff -u --recursive --new-file ftape-tools-1.08/src/ftformat/version.h ftape-tools-1.09/src/ftformat/version.h
--- ftape-tools-1.08/src/ftformat/version.h Sun Jun 25 23:40:06 2000
+++ ftape-tools-1.09/src/ftformat/version.h Sat Jul 22 22:23:21 2000
@@ -1 +1 @@
-static const char *version_string = "ftformat (ftape-tools) 1.08\n";
+static const char *version_string = "ftformat (ftape-tools) 1.09\n";
diff -u --recursive --new-file ftape-tools-1.08/src/ftmt/mt.c ftape-tools-1.09/src/ftmt/mt.c
--- ftape-tools-1.08/src/ftmt/mt.c Thu Mar 4 10:25:15 1999
+++ ftape-tools-1.09/src/ftmt/mt.c Fri Jul 21 09:47:13 2000
@@ -19,8 +19,8 @@
*/
char ftmt_src[] = "$RCSfile: mt.c,v $";
- char ftmt_rev[] = "$Revision: 1.6 $";
- char ftmt_dat[] = "$Date: 1999/03/04 09:25:15 $";
+ char ftmt_rev[] = "$Revision: 1.8 $";
+ char ftmt_dat[] = "$Date: 2000/07/21 07:47:13 $";
/* If -f is not given, the environment variable TAPE is used;
if that is not set, a default device defined in sys/mtio.h is used.
@@ -80,9 +80,9 @@
Imagine erasing the header segments ...
volinfo Query information about the current volume
getsize Query tape capacity
- ftcmd send a raw floppy tape command. Be careful. Be superuser.
+ ftmode Switch tape drive to raw-mode.
- Claus-Justus Heine
+ Claus-Justus Heine
*/
/*
@@ -94,7 +94,7 @@
unload
setpart
- Claus-Justus Heine
+ Claus-Justus Heine
*/
/*
@@ -112,7 +112,7 @@
Changed this to "-l" and "--long-numbers".
- Claus-Justus Heine
+ Claus-Justus Heine
*/
@@ -216,6 +216,9 @@
#ifdef MTIOCGETSIZE
"getsize",
#endif
+#ifdef MTIOCFTMODE
+ "ftmode",
+#endif
"status",
NULL
};
@@ -254,6 +257,9 @@
#ifdef MTIOCGETSIZE
MTIOCGETSIZE,
#endif
+#ifdef MTIOCFTMODE
+ MTIOCFTMODE,
+#endif
MTNOP
};
@@ -379,6 +385,12 @@
error (2, errno, "%s", tapedev);
break;
#endif
+#ifdef MTIOCFTMODE
+ case MTIOCFTMODE:
+ if (switch_ftmode(tapedev, tapedesc, count))
+ error (2, errno, "%s", tapedev);
+ break;
+#endif
default:
{
if (operation == MTASF)
@@ -620,6 +632,22 @@
}
#endif
+#ifdef MTIOCFTMODE
+int
+switch_ftmode(dev, desc, on)
+ char *dev;
+ int desc;
+ int on;
+{
+ struct mtftmode mode;
+ int result;
+
+ mode.ft_rawmode = on ? 1 : 0;
+ result = rmtioctl (desc, MTIOCFTMODE, &mode);
+ return result;
+}
+#endif
+
#ifdef MTIOCRDFTSEG
int
get_segment(dev, desc, seg_no)
@@ -629,14 +657,28 @@
{
struct mtftseg raw_seg;
int result;
+# ifdef MTIOCFTMODE
+ struct mtftmode mode;
+
+ mode.ft_rawmode = 1;
+ rmtioctl (desc, MTIOCFTMODE, &mode); /* ignore possible error */
+# endif
raw_seg.mt_data = (void *)xmalloc(32*1024);
raw_seg.mt_mode = 0;
raw_seg.mt_result = 0;
raw_seg.mt_segno = seg_no;
- if ((result = rmtioctl (desc, MTIOCRDFTSEG, &raw_seg)) >= 0)
+ result = rmtioctl (desc, MTIOCRDFTSEG, &raw_seg);
+
+# ifdef MTIOCFTMODE
+ mode.ft_rawmode = 0;
+ rmtioctl (desc, MTIOCFTMODE, &mode); /* ignore possible error */
+# endif
+
+ if (result >= 0)
{
+
if (raw_seg.mt_result >= 0 && raw_seg.mt_result <= 32*1024)
{
/* print the raw data to stdout.
diff -u --recursive --new-file ftape-tools-1.08/src/ftmt/version.h ftape-tools-1.09/src/ftmt/version.h
--- ftape-tools-1.08/src/ftmt/version.h Sun Jun 25 23:40:13 2000
+++ ftape-tools-1.09/src/ftmt/version.h Sat Jul 22 22:23:30 2000
@@ -1 +1 @@
-static const char *version_string = "GNU mt version 2.4.2, adapted for ftape-tools 1.08\n";
+static const char *version_string = "GNU mt version 2.4.2, adapted for ftape-tools 1.09\n";
diff -u --recursive --new-file ftape-tools-1.08/src/swapout/version.h ftape-tools-1.09/src/swapout/version.h
--- ftape-tools-1.08/src/swapout/version.h Sun Jun 25 23:40:22 2000
+++ ftape-tools-1.09/src/swapout/version.h Sat Jul 22 22:23:40 2000
@@ -1 +1 @@
-static const char *version_string = "swapout (ftape-tools) 1.08\n";
+static const char *version_string = "swapout (ftape-tools) 1.09\n";
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/Makefile.am ftape-tools-1.09/src/vtblc/Makefile.am
--- ftape-tools-1.08/src/vtblc/Makefile.am Tue Feb 23 16:10:50 1999
+++ ftape-tools-1.09/src/vtblc/Makefile.am Wed Jul 19 23:34:06 2000
@@ -16,8 +16,8 @@
#
#
# $RCSfile: Makefile.am,v $
-# $Revision: 1.10 $
-# $Date: 1999/02/23 15:10:50 $
+# $Revision: 1.11 $
+# $Date: 2000/07/17 18:07:11 $
#
# Process this file with automake to get a Makefile.in to be
# processed by autoconf
@@ -36,7 +36,7 @@
-DLOCALEDIR=\"$(localedir)\"
lib_LTLIBRARIES = libftvt.la
-libftvt_la_SOURCES = libftvt.c ftvt.h libftvt-version.h
+libftvt_la_SOURCES = libftvt.c libftvt-bsm.c ftvt.h libftvt-version.h
#
# see the libtool info manual for explanations about "-version-info"
# and "-release"
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/Makefile.in ftape-tools-1.09/src/vtblc/Makefile.in
--- ftape-tools-1.08/src/vtblc/Makefile.in Sun Jul 2 23:47:08 2000
+++ ftape-tools-1.09/src/vtblc/Makefile.in Mon Jul 24 01:05:37 2000
@@ -28,8 +28,8 @@
#
#
# $RCSfile: Makefile.am,v $
-# $Revision: 1.10 $
-# $Date: 1999/02/23 15:10:50 $
+# $Revision: 1.11 $
+# $Date: 2000/07/17 18:07:11 $
#
# Process this file with automake to get a Makefile.in to be
# processed by autoconf
@@ -149,7 +149,7 @@
lib_LTLIBRARIES = libftvt.la
-libftvt_la_SOURCES = libftvt.c ftvt.h libftvt-version.h
+libftvt_la_SOURCES = libftvt.c libftvt-bsm.c ftvt.h libftvt-version.h
#
# see the libtool info manual for explanations about "-version-info"
# and "-release"
@@ -168,7 +168,7 @@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libftvt_la_LIBADD =
-libftvt_la_OBJECTS = libftvt.lo
+libftvt_la_OBJECTS = libftvt.lo libftvt-bsm.lo
PROGRAMS = $(bin_PROGRAMS)
vtblc_OBJECTS = vtblc.o
@@ -427,6 +427,12 @@
|| exit 1; \
fi; \
done
+libftvt-bsm.lo libftvt-bsm.o : libftvt-bsm.c \
+ ../../include/ftape/linux/ftape.h \
+ ../../include/ftape/linux/mtio.h \
+ ../../include/ftape/linux/qic117.h \
+ ../../include/ftape/linux/ftape-header-segment.h ftvt.h \
+ ../../include/ftape/linux/zftape.h
libftvt.lo libftvt.o : libftvt.c ../../config.h \
../../include/ftape/linux/ftape.h \
../../include/ftape/linux/mtio.h \
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/ftvt.h ftape-tools-1.09/src/vtblc/ftvt.h
--- ftape-tools-1.08/src/vtblc/ftvt.h Fri Mar 5 14:13:05 1999
+++ ftape-tools-1.09/src/vtblc/ftvt.h Sat Jul 22 22:22:09 2000
@@ -1,7 +1,7 @@
#ifndef _FTVT_H_
#define _FTVT_H_
/*
- * Copyright (C) 1997-1999 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,14 +19,18 @@
*
* $RCSfile: ftvt.h,v $
- * $Revision: 1.4 $
- * $Date: 1999/03/05 13:13:05 $
+ * $Revision: 1.8 $
+ * $Date: 2000/07/22 18:53:01 $
*
* This file contains the definitions for the volume table
* manipulation tool for the the QIC-40/80/3010/3020 floppy-tape
* driver "ftape" for Linux.
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#include
#include
@@ -49,10 +53,10 @@
#define FTVT_FL_RESERVED_7 (1<<7)
#define FTVT_M_NO 57
#define FTVT_EXT 58
-#define FTVT_EXT_ZFTAPE_SIG 0
-#define FTVT_EXT_ZFTAPE_BLKSZ 10
-#define FTVT_EXT_ZFTAPE_CMAP 12
-#define FTVT_EXT_ZFTAPE_QIC113 13
+#define FTVT_EXT_ZFT_SIG 0
+#define FTVT_EXT_ZFT_BLKSZ 10
+#define FTVT_EXT_ZFT_CMAP 12
+#define FTVT_EXT_ZFT_QIC113 13
#define FTVT_PWD 84
#define FTVT_DIR_SIZE 92
#define FTVT_DATA_SIZE 96
@@ -72,9 +76,21 @@
/* the next is used by QIC-3020 tapes with format code 6 (>2^16
* segments) It is specified in QIC-113, Rev. G, Section 5 (SCSI
* volume table). The difference is simply, that we only store the
- * number of segments used, not the starting segment.
+ * number of segments used, not the starting segment. The starting
+ * and ending segment is stored at offset 76 and 80. The vendor
+ * extension data starts at 62.
+ *
*/
-#define FTVT_SCSI_SEGS 4 /* is a 4 byte value */
+#define VTBL_6_SEGS 4 /* is a 4 byte value */
+#define VTBL_6_MAJOR 58 /* set to 113 */
+#define VTBL_6_MINOR 60 /* Revision G, i.e. 7 */
+#define VTBL_6_EXT 62 /* 14 bytes */
+#define EXT_6_ZFT_SIG 0 /* signature, 3 bytes */
+#define EXT_6_ZFT_SIGV 3 /* version, 1 byte */
+#define EXT_6_ZFT_BLKSZ 4 /* block size, 2 bytes */
+#define EXT_6_ZFT_RES 6 /* reserved, 8 bytes */
+#define VTBL_6_START 76
+#define VTBL_6_END 80
/* one vtbl is 128 bytes, that results in a maximum number of
* 29*1024/128 = 232 volumes.
@@ -82,12 +98,37 @@
#define FTVT_MAX_VOLUMES (FT_SEGMENT_SIZE/FTVT_SIZE)
#define FTVT_IDS { "VTBL", "XTBL", "UTID", "EXVT" } /* valid ids */
+/* zftape extension signature */
+#define ZFT_SIG "LINUX ZFT" /* QIC-80/3010/3020 vendor extension */
+#define ZFT_SIGLEN 10
+#define ZFT_SIG2 "ZFT" /* QIC-113 vendor extension */
+#define ZFT_SIGLEN2 3
+
+typedef struct zft_ext_qic80 {
+ u_int8_t sig[ZFT_SIGLEN];
+ u_int16_t blksz;
+ u_int8_t cmap;
+ u_int8_t qic113;
+ u_int8_t reserved[26-ZFT_SIGLEN-2-1-1];
+} zft_ext_qic80_t __attribute__ ((packed));
+
+typedef struct zft_ext_qic113 {
+ u_int8_t sig[ZFT_SIGLEN2];
+ u_int8_t version;
+ u_int16_t blksz;
+ u_int8_t reserved[8];
+} zft_ext_qic113_t __attribute__ ((packed));
+
+/* for bsm map stuff
+ */
+#define FTVT_EMPTY_SEGMENT (0xffffffff)
+
typedef struct ftvt_entry {
u_int8_t sig[4];
union {
- struct { u_int16_t start, end; } se;
- u_int32_t scsi_segs;
- } size;
+ struct { u_int16_t start, end; } se __attribute__ ((packed));
+ u_int32_t fmt6_segs;
+ } size __attribute__ ((packed));
u_int8_t desc[44];
u_int32_t date;
u_int8_t vendor_specific:1;
@@ -99,7 +140,16 @@
u_int8_t fl_reserved_6:1;
u_int8_t fl_reserved_7:1;
u_int8_t m_no;
- u_int8_t ext[26];
+ union {
+ u_int8_t ext[26];
+ struct {
+ u_int16_t major;
+ u_int16_t minor;
+ u_int8_t ext[14];
+ u_int8_t start[4];
+ u_int8_t end[4];
+ } qic113 __attribute__ ((packed));
+ } ext __attribute__ ((packed));
u_int8_t pwd[8];
u_int32_t dir_size;
u_int64_t data_size;
@@ -116,18 +166,51 @@
typedef struct ftvt {
int num;
int fmt_code;
- int start, end;
+ int start, end, num_segments;
unsigned int modified:1;
+ unsigned int zft_bug:1;
ftvt_entry entry;
+#if 0
+ u_int8_t bytes[128];
+#else
+ u_int8_t *bytes;
+#endif
} ftvt;
#define ftvt_start entry.size.se.start
+#define ftvt_6_start entry.ext.qic113.start
#define ftvt_end entry.size.se.end
-#define ftvt_space entry.size.scsi_segs
+#define ftvt_6_end entry.ext.qic113.end
+#define ftvt_space entry.size.fmt6_segs
#define ftvt_sig entry.sig
#define ftvt_desc entry.desc
#define ftvt_date entry.date
+/* volume table entry extension "XTBL" */
+
+/* offsets within the volume table entry */
+#define XTBL_SIG 0 /* signature, "XTBL", 4 bytes */
+#define XTBL_NAME 4 /* volume name, unicode, 88 bytes */
+#define XTBL_PWD 92 /* password, unicode, 16 bytes */
+#define XTBL_RES 108 /* reserved, 20 bytes, set to 0 */
+
+/* volume table extension for unicode tape names */
+
+/* offsets within the volume table entry */
+#define UTID_SIG 0 /* signature, "UTID", 4 bytes */
+#define UTID_NAME 4 /* tape name, unicode, 88 bytes, space filled */
+#define UTID_RES 92 /* reserved, 36 bytes, set to 0 */
+
+/* volume table overflow extension */
+
+/* offsets within the volume table entry */
+#define EXVT_SIG 0 /* signature, "EXVT", 4 bytes */
+#define EXVT_PARENT 4 /* parent segment, 2 bytes, little endian */
+#define EXVT_CHILD 6 /* child segment, 2 bytes, little endian */
+#define EXVT_RES 8 /* the standard says this is 119 bytes. So what
+ * happened to the last byte? :-)
+ */
+
#define FTAPE_DEF_TAPE "/dev/rawft0"
/* Control flags
@@ -135,6 +218,8 @@
#define FTVT_VERBOSE (1 << 0)
#define FTVT_TAGGED (1 << 1)
+#define NR_ITEMS(x) (int)(sizeof(x)/ sizeof(*x))
+
/* This is return by ftvt_get_ctrl
*/
typedef struct ftvt_ctrl {
@@ -148,13 +233,22 @@
const char *drivetype;
} ftvt_ctrl;
+/* format code 4 bad sector entry, ftape uses this
+ * internally for all format codes
+ */
+typedef u_int32_t SectorMap;
+
/* exported functions
*/
+
+extern int ftvt_read_header_segment(int tape_fd, u_int8_t *hseg);
extern void ftvt_set_ctrl(unsigned long flags);
extern const struct ftvt_ctrl *ftvt_get_ctrl(void);
extern int ftvt_open(const char *name, mode_t mode);
extern int ftvt_close(int tape_fd);
extern int ftvt_read(int tape_fd, ftvt *volumes, u_int8_t *buffer);
+extern int ftvt_read_vtbl(int tape_fd, u_int8_t *hseg, int fmt_code,
+ ftvt *volumes, u_int8_t *buffer);
extern int ftvt_write(int tape_fd, const ftvt *volumes, u_int8_t *buffer,
int vtbl_cnt, int do_write);
extern void ftvt_print(const ftvt *volumes, int maxnum);
@@ -170,6 +264,16 @@
extern int ftvt_set_bounds(ftvt *volumes, int maxnum,
int start, int end, int vtbl_no);
extern int ftvt_set_id(ftvt *volumes, int maxnum, const char *id, int vtbl_no);
+
+/* bsm functions */
+void ftvt_init_bsm(u_int8_t * buffer, ft_format_type code, int erase);
+void ftvt_put_bsm_entry(int segment_id, SectorMap new_map);
+SectorMap ftvt_get_bsm_entry(int segment_id);
+void ftvt_print_bad_sector_map(int verbose);
+
+#ifdef __cplusplus
+}
+#endif
#endif _FTVT_H_
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/libftvt-bsm.c ftape-tools-1.09/src/vtblc/libftvt-bsm.c
--- ftape-tools-1.08/src/vtblc/libftvt-bsm.c Thu Jan 1 01:00:00 1970
+++ ftape-tools-1.09/src/vtblc/libftvt-bsm.c Fri Jul 21 11:16:53 2000
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 1994-1996 Bas Laarhoven,
+ * (C) 1996-1997 Claus Heine.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ *
+ * $RCSfile: libftvt-bsm.c,v $
+ * $Revision: 1.2 $
+ * $Date: 2000/07/21 09:16:53 $
+ *
+ * This file contains the bad-sector map handling code for
+ * the QIC-117 floppy tape driver for Linux.
+ * QIC-40, QIC-80, QIC-3010 and QIC-3020 maps are implemented.
+ *
+ * This is a clone of drivers/ftape/ftape-bsm.c
+ */
+
+#include
+#include
+#include
+#include
+#define _(String) gettext (String)
+
+#include
+
+#include
+#include
+#include
+
+#include "ftvt.h"
+
+/* maximum (format code 4) bad sector map size (bytes).
+ */
+#define BAD_SECTOR_MAP_SIZE (FT_SEGMENT_SIZE - FT_HEADER_END)
+
+/* variable and 1100 ft bad sector map entry. These three bytes represent
+ * a single sector address measured from BOT.
+ */
+typedef struct NewSectorMap {
+ u_int8_t bytes[3];
+} SectorCount __attribute__((packed));
+
+static u_int8_t *bad_sector_map = NULL;
+static u_int8_t *bad_sector_end = NULL;
+static SectorCount *bsm_hash_ptr = NULL;
+static ft_format_type format_code = fmt_normal;
+static int frst_data_segment;
+static int last_data_segment;
+
+/* count the number of bits set in mask
+ */
+static inline int count_ones(unsigned long mask)
+{
+ int bits;
+
+ for (bits = 0; mask != 0; mask >>= 1) {
+ if (mask & 1) {
+ ++bits;
+ }
+ }
+ return bits;
+}
+
+static inline void put_sector(SectorCount *ptr, unsigned int sector)
+{
+ ptr->bytes[0] = sector & 0xff;
+ sector >>= 8;
+ ptr->bytes[1] = sector & 0xff;
+ sector >>= 8;
+ ptr->bytes[2] = sector & 0xff;
+}
+
+static inline unsigned int get_sector(SectorCount *ptr)
+{
+ unsigned int sector;
+
+ sector = ptr->bytes[0];
+ sector += ptr->bytes[1] << 8;
+ sector += ptr->bytes[2] << 16;
+
+ return sector;
+}
+
+void ftvt_init_bsm(u_int8_t * buffer, ft_format_type code, int erase)
+{
+ format_code = code;
+ if (erase) {
+ memset(buffer + FT_HEADER_END, 0, FT_SEGMENT_SIZE - FT_HEADER_END);
+ }
+
+ bad_sector_end = buffer + FT_SEGMENT_SIZE;
+
+ if (format_code == fmt_var || format_code == fmt_big) {
+ /* QIC-3010/3020 and wide QIC-80 tapes no longer have a failed
+ * sector log but use this area to extend the bad sector map.
+ */
+ bad_sector_map = &buffer[FT_HEADER_END];
+ } else {
+ /* non-wide QIC-80 tapes have a failed sector log area that
+ * mustn't be included in the bad sector map.
+ */
+ bad_sector_map = &buffer[FT_FSL + FT_FSL_SIZE];
+ }
+ if (format_code == fmt_1100ft ||
+ format_code == fmt_var ||
+ format_code == fmt_big) {
+ bsm_hash_ptr = (SectorCount *)bad_sector_map;
+ } else {
+ bsm_hash_ptr = NULL;
+ }
+ if (format_code == fmt_big) {
+ frst_data_segment = (int)*((u_int32_t *)&buffer[FT_6_FRST_SEG]);
+ last_data_segment = (int)*((u_int32_t *)&buffer[FT_6_LAST_SEG]);
+ } else {
+ frst_data_segment = (int)*((u_int16_t *)&buffer[FT_FRST_SEG]);
+ last_data_segment = (int)*((u_int16_t *)&buffer[FT_LAST_SEG]);
+ }
+}
+
+static inline SectorMap cvt2map(unsigned int sector)
+{
+ return 1 << (((sector & 0x7fffff) - 1) % FT_SECTORS_PER_SEGMENT);
+}
+
+static inline int cvt2segment(unsigned int sector)
+{
+ return ((sector & 0x7fffff) - 1) / FT_SECTORS_PER_SEGMENT;
+}
+
+static int forward_seek_entry(int segment_id,
+ SectorCount **ptr,
+ SectorMap *map)
+{
+ unsigned int sector;
+ int segment;
+
+ do {
+ sector = get_sector((*ptr)++);
+ segment = cvt2segment(sector);
+ } while (sector != 0 && segment < segment_id);
+ (*ptr) --; /* point to first sector >= segment_id */
+
+ assert((u_int8_t *)(*ptr) < bad_sector_end);
+
+ /* Get all sectors in segment_id
+ */
+ if (sector == 0 || segment != segment_id) {
+ *map = 0;
+ return 0;
+ } else if ((sector & 0x800000) &&
+ (format_code == fmt_var || format_code == fmt_big)) {
+ *map = FTVT_EMPTY_SEGMENT;
+ return FT_SECTORS_PER_SEGMENT;
+ } else {
+ int count = 1;
+ SectorCount *tmp_ptr = (*ptr) + 1;
+
+ assert((u_int8_t *)tmp_ptr < bad_sector_end);
+
+ *map = cvt2map(sector);
+ while ((sector = get_sector(tmp_ptr++)) != 0 &&
+ (segment = cvt2segment(sector)) == segment_id) {
+ *map |= cvt2map(sector);
+ ++count;
+ }
+ return count;
+ }
+}
+
+static int backwards_seek_entry(int segment_id,
+ SectorCount **ptr,
+ SectorMap *map)
+{
+ unsigned int sector;
+ int segment; /* max unsigned int */
+
+ if (*ptr <= (SectorCount *)bad_sector_map) {
+ *map = 0;
+ return 0;
+ }
+ do {
+ sector = get_sector(--(*ptr));
+ segment = cvt2segment(sector);
+ } while (*ptr > (SectorCount *)bad_sector_map && segment > segment_id);
+ if (segment > segment_id) { /* at start of list, no entry found */
+ *map = 0;
+ return 0;
+ } else if (segment < segment_id) {
+ /* before smaller entry, adjust for overshoot */
+ (*ptr) ++;
+ *map = 0;
+ return 0;
+ } else if ((sector & 0x800000) &&
+ (format_code == fmt_big || format_code == fmt_var)) {
+ *map = FTVT_EMPTY_SEGMENT;
+ return FT_SECTORS_PER_SEGMENT;
+ } else { /* get all sectors in segment_id */
+ int count = 1;
+
+ *map = cvt2map(sector);
+ while(*ptr > (SectorCount *)bad_sector_map) {
+ sector = get_sector(--(*ptr));
+ segment = cvt2segment(sector);
+ if (segment != segment_id) {
+ break;
+ }
+ *map |= cvt2map(sector);
+ ++count;
+ }
+ if (segment < segment_id) {
+ (*ptr) ++;
+ }
+ return count;
+ }
+}
+
+/* Check for buffer overflows in case there are too many bad sectors!!!
+ */
+void ftvt_put_bsm_entry(int segment_id, SectorMap new_map)
+{
+ SectorCount *ptr = (SectorCount *)bad_sector_map;
+ int count;
+ int new_count;
+ SectorMap map;
+
+ if (bsm_hash_ptr == NULL) {
+ ((SectorMap *) bad_sector_map)[segment_id] = new_map;
+ return;
+ }
+
+ count = forward_seek_entry(segment_id, &ptr, &map);
+ new_count = count_ones(new_map);
+ /* If format code == 4 put empty segment instead of 32
+ * bad sectors.
+ */
+ if (format_code == fmt_var || format_code == fmt_big) {
+ if (new_count == FT_SECTORS_PER_SEGMENT) {
+ new_count = 1;
+ }
+ if (count == FT_SECTORS_PER_SEGMENT) {
+ count = 1;
+ }
+ }
+ if (count != new_count) {
+ /* insert (or delete if < 0) new_count - count
+ * entries. Move trailing part of list
+ * including terminating 0.
+ */
+ SectorCount *hi_ptr = ptr;
+ size_t gap;
+
+ do {
+ } while (get_sector(hi_ptr++) != 0);
+ /* check for buffer overflow. If there are too many
+ * bad sectors, then exit with an error message.
+ */
+ gap = (size_t)(hi_ptr - (ptr + count))*sizeof(SectorCount);
+ if (gap < 0) {
+ ftvt_error(_("Too many bad sectors, "
+ "no space left in the bad sector map"));
+ exit(1);
+ } else {
+ /* Note: ptr is of type byte *, and each bad
+ * sector consumes 3 bytes.
+ */
+
+ assert((u_int8_t *)ptr < bad_sector_end);
+
+ memmove(ptr + new_count, ptr + count, gap);
+ }
+ }
+
+ assert((u_int8_t *)ptr < bad_sector_end);
+
+ if (new_count == 1 && new_map == FTVT_EMPTY_SEGMENT) {
+ put_sector(ptr++, (0x800001 +
+ segment_id * FT_SECTORS_PER_SEGMENT));
+ } else {
+ int i = 0;
+
+ while (new_map) {
+ if (new_map & 1) {
+ put_sector(ptr++,
+ 1 + segment_id *
+ FT_SECTORS_PER_SEGMENT + i);
+ }
+ ++i;
+ new_map >>= 1;
+ }
+ }
+}
+
+SectorMap ftvt_get_bsm_entry(int segment_id)
+{
+ static int last_reference = -1;
+ static SectorMap map = 0;
+
+ if (bsm_hash_ptr == NULL) {
+ return ((SectorMap *) bad_sector_map)[segment_id];
+ }
+ /* Invariants:
+ * map - mask value returned on last call.
+ * bsm_hash_ptr - points to first sector greater or equal to
+ * first sector in last_referenced segment.
+ * last_referenced - segment id used in the last call,
+ * sector and map belong to this id.
+ * This code is designed for sequential access and retries.
+ * For true random access it may have to be redesigned.
+ */
+ if (segment_id > last_reference) {
+ /* Skip all sectors before segment_id
+ */
+ forward_seek_entry(segment_id, &bsm_hash_ptr, &map);
+ } else if (segment_id < last_reference) {
+ /* Skip backwards until begin of buffer or
+ * first sector in segment_id
+ */
+ backwards_seek_entry(segment_id, &bsm_hash_ptr, &map);
+ } /* segment_id == last_reference : keep map */
+ last_reference = segment_id;
+ return map;
+}
+
+void ftvt_print_bad_sector_map(int verbose)
+{
+ unsigned int good_sectors;
+ unsigned int total_bad = 0;
+ SectorMap map;
+ int i;
+ /* we use our helper function to print the bad sector map on a
+ * segment-by-segment basis
+ */
+ for (i=frst_data_segment; i <= last_data_segment; ++i) {
+
+ map = ftvt_get_bsm_entry(i);
+
+ if (map) {
+ if (verbose) {
+ printf("bsm[%4d] = 0x%08x\n", i, (unsigned int)map);
+ }
+ total_bad += ((map == FTVT_EMPTY_SEGMENT)
+ ? FT_SECTORS_PER_SEGMENT - 3
+ : count_ones(map));
+ }
+ }
+ good_sectors = ((1 + last_data_segment - frst_data_segment)
+ * (FT_SECTORS_PER_SEGMENT - 3)) - total_bad;
+ printf(_("\ntotal number of sectors: %d\n"), good_sectors + total_bad);
+ printf(_("number of bad sectors : %d (%2.2f%%)\n"), total_bad,
+ (double)total_bad/(double)(good_sectors + total_bad)*100.0);
+ printf(_("number of good sectors : %d (%2.2f%%)\n"), good_sectors,
+ (double)good_sectors/(double)(good_sectors + total_bad)*100.0);
+}
+
+/*
+ * Local variables:
+ * version-control: t
+ * kept-new-versions: 5
+ * c-basic-offset: 4
+ * End:
+ */
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/libftvt-version.h ftape-tools-1.09/src/vtblc/libftvt-version.h
--- ftape-tools-1.08/src/vtblc/libftvt-version.h Sun Jun 25 23:40:27 2000
+++ ftape-tools-1.09/src/vtblc/libftvt-version.h Sat Jul 22 22:23:45 2000
@@ -1 +1 @@
-const char *version_string = "libftvt.la (ftape-tools) 1.08\n";
+const char *version_string = "libftvt.la (ftape-tools) 1.09\n";
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/libftvt.c ftape-tools-1.09/src/vtblc/libftvt.c
--- ftape-tools-1.08/src/vtblc/libftvt.c Sun Jun 25 18:05:47 2000
+++ ftape-tools-1.09/src/vtblc/libftvt.c Sat Jul 22 22:22:20 2000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1997-1999 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,11 +22,11 @@
*/
char src[] = "$RCSfile: libftvt.c,v $";
-char rev[] = "$Revision: 1.10 $";
-char dat[] = "$Date: 2000/06/25 16:05:47 $";
+char rev[] = "$Revision: 1.14 $";
+char dat[] = "$Date: 2000/07/22 18:53:01 $";
#ifdef HAVE_CONFIG_H
-#include
+# include
#endif
#include
@@ -43,6 +43,8 @@
#include
#include
#include
+#include
+#include
#include
#define _(String) gettext (String)
@@ -54,6 +56,14 @@
#include "ftvt.h"
#include "libftvt-version.h"
+#if !HAVE_MINOR
+# ifdef minor
+# undef minor
+# endif
+/* glibc-2.0 seems not to include the "minor()" macro by default */
+# define minor(dev) ((int)((dev) & 0xff))
+#endif
+
extern void *xmalloc(size_t size);
extern void *xrealloc(void *old, size_t size);
@@ -75,9 +85,6 @@
static void ftvt_error(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));
static void ftvt_perror(const char *msg);
-static int ftvt_read_header_segment(int tape_fd,
- int *first_data_segment,
- int *last_data_segment);
static char *ftvt_gets(FILE *fp, char *buffer, int *len);
@@ -196,7 +203,7 @@
mtftmode.ft_rawmode = 0;
if (ioctl(tape_fd, MTIOCFTMODE, &mtftmode) == -1) {
/* not supported */
-#ifdef ZFT_OBSOLETE
+#ifdef CONFIG_ZFT_OBSOLETE
/* Ok, in this case we don't really switch to and from raw
* mode, but simply check for the correct device.
*/
@@ -343,20 +350,59 @@
*/
int ftvt_read(int tape_fd, ftvt *volumes, u_int8_t *buffer)
{
- const struct mtop rewind = { MTREW, 1 };
+ u_int8_t hseg[FT_SEGMENT_SIZE];
+
+ if ((fmt_code = ftvt_read_header_segment(tape_fd, hseg)) == -1) {
+ return -1;
+ }
+
+ return ftvt_read_vtbl(tape_fd, hseg, fmt_code, volumes, buffer);
+}
+
+/* Read the volume table. This function requires the header segment
+ * of the tape cartridge to determine the location of the volume table
+ * segment, and then reads volume table segment.
+ *
+ * Arguments:
+ *
+ * int tape_fd : The file descriptor previously return by ftvt_open()
+ *
+ * u_int8_t *hseg:Buffer which should contain an image of the header segment.
+ *
+ * fmt_code : Format code of the tape, returned by ftvt_read_header_segment.
+ *
+ * ftvt *volumes: Buffer to hold the volume table in. The size of the
+ * buffer must be FTVT_MAX_VOLUMES (i.e. 29*1024/128)
+ *
+ * u_int8_t : The buffer to hold the contents of the volume table
+ * segment. It must be of size 29*1024.
+ *
+ * Return value : The number of volumes found in the volume table segment.
+ *
+ * Side effects : The internal variable "max_volumes" is set to the
+ * number of volumes which would fit into the volume
+ * table segment. Normally this should be FTVT_MAX_VOLUMES,
+ * but some cartridges use volume table segments which
+ * contain bad sectors.
+ */
+int ftvt_read_vtbl(int tape_fd, u_int8_t *hseg, int fmt_code, ftvt *volumes,
+ u_int8_t *buffer)
+{
struct mtftseg ft_seg;
int vtbl_cnt;
int end_seg = 0;
const char *ids[] = FTVT_IDS;
- if (ioctl(tape_fd, MTIOCTOP, &rewind) == -1) {
- ftvt_perror(_("Ioctl error rewinding tape"));
- return -1;
- }
- if ((fmt_code = ftvt_read_header_segment(tape_fd,
- &first_seg, &last_seg)) == -1) {
- return -1;
+ if (fmt_code == fmt_big) {
+ memcpy(&first_seg, &hseg[FT_6_FRST_SEG], 4);
+ memcpy(&last_seg, &hseg[FT_6_LAST_SEG], 4);
+ } else {
+ memcpy(&first_seg, &hseg[FT_FRST_SEG], 2);
+ memcpy(&last_seg, &hseg[FT_LAST_SEG], 2);
+ first_seg &= 0x0000ffff;
+ last_seg &= 0x0000ffff;
}
+
if (verbose) {
printf(_("Reading volume table segment ... "));
fflush(stdout);
@@ -396,16 +442,35 @@
memcmp(buffer, ids[3], 4) == 0) {
memcpy(&volumes[vtbl_cnt].entry, buffer, FTVT_SIZE);
+#if 0
+ memcpy(&volumes[vtbl_cnt].bytes, buffer, FTVT_SIZE);
+#else
+ volumes[vtbl_cnt].bytes = (u_int8_t *)&volumes[vtbl_cnt].entry;
+#endif
if (memcmp(&volumes[vtbl_cnt].ftvt_sig, "VTBL", 4) == 0) {
volumes[vtbl_cnt].fmt_code = fmt_code;
if (fmt_code == fmt_big) {
- volumes[vtbl_cnt].start = end_seg + 1;
- volumes[vtbl_cnt].end = (end_seg +
- volumes[vtbl_cnt].ftvt_space);
+ /* work-around for ftape-4.03 bug */
+ if (memcmp(volumes[vtbl_cnt].entry.ext.ext, ZFT_SIG,
+ ZFT_SIGLEN) == 0) {
+ volumes[vtbl_cnt].zft_bug = 1;
+ volumes[vtbl_cnt].start = end_seg + 1;
+ volumes[vtbl_cnt].end = (end_seg +
+ volumes[vtbl_cnt].ftvt_space);
+ } else {
+ volumes[vtbl_cnt].zft_bug = 0;
+ volumes[vtbl_cnt].start =
+ *(u_int32_t *)volumes[vtbl_cnt].ftvt_6_start;
+ volumes[vtbl_cnt].end =
+ *(u_int32_t *)volumes[vtbl_cnt].ftvt_6_end;
+ }
+ volumes[vtbl_cnt].num_segments = volumes[vtbl_cnt].ftvt_space;
end_seg = volumes[vtbl_cnt].end;
} else {
volumes[vtbl_cnt].start = volumes[vtbl_cnt].ftvt_start;
volumes[vtbl_cnt].end = volumes[vtbl_cnt].ftvt_end;
+ volumes[vtbl_cnt].num_segments =
+ volumes[vtbl_cnt].end - volumes[vtbl_cnt].start + 1;
}
volumes[vtbl_cnt].fmt_code = fmt_code;
}
@@ -417,16 +482,24 @@
}
/* Try to read the header segments. Return the format code of this
- * cartridge, and set *first_data_segment and *last_data_segment.
+ * cartridge.
+ *
+ * Arguments:
+ *
+ * int tape_fd : The file descriptor previously return by ftvt_open()
+ *
+ * u_int8_t *hseg: The buffer to hold the contents of the header
+ * segment. It must be of size 29*1024 (FT_SEGMENT_SIZE).
+ *
+ * Return value : The format code of the tape.
+ *
+ * Side effects : None
*/
-static int ftvt_read_header_segment(int tape_fd,
- int *first_data_segment,
- int *last_data_segment)
+int ftvt_read_header_segment(int tape_fd, u_int8_t *hseg)
{
struct mtftseg ft_seg;
int i;
const unsigned long hseg_magic = FT_HSEG_MAGIC;
- u_int8_t hseg[FT_SEGMENT_SIZE];
if (verbose) {
printf(_("Reading header segment ... "));
@@ -452,15 +525,6 @@
if (verbose) {
printf(_("done.\n"));
}
- if (hseg[FT_FMT_CODE] == fmt_big) {
- memcpy(first_data_segment, &hseg[FT_6_FRST_SEG], 4);
- memcpy(last_data_segment, &hseg[FT_6_LAST_SEG], 4);
- } else {
- memcpy(first_data_segment, &hseg[FT_FRST_SEG], 2);
- memcpy(last_data_segment, &hseg[FT_LAST_SEG], 2);
- *first_data_segment &= 0x0000ffff;
- *last_data_segment &= 0x0000ffff;
- }
return (int)hseg[FT_FMT_CODE];
}
@@ -528,29 +592,71 @@
}
}
-/* Print one volume table in tagged output format (i.e. keyword-value
- * pairs)
- *
- * Arguments:
- *
- * const ftvt *volume: pointer to the volume table entry to print
- */
-void ftvt_print_one_tagged(const ftvt *volume)
+static void print_a_char(FILE *where,
+ const char *prefix, char c, const char *suffix)
+{
+ if (isprint(c)) {
+ fprintf(where, "%s%c%s", prefix, c, suffix);
+ } else {
+ fprintf(where, "%s\\%03o%s", prefix, (unsigned int)c, suffix);
+ }
+}
+
+static void print_hex_line(FILE *where,
+ const char *prefix,
+ const char *what,
+ const char *suffix,
+ int howmuch)
+{
+ int i;
+
+ fprintf(where, "%s", prefix);
+ for (i = 0; i < howmuch-1; i++) {
+ printf("0x%02x ", what[i]);
+ }
+ printf("0x%02x%s", what[i], suffix);
+}
+
+static void print_char_line(FILE *where,
+ const char *prefix,
+ const char *what,
+ const char *suffix,
+ int howmuch)
+{
+ int i;
+
+ fprintf(where, "%s", prefix);
+ for (i = 0; i < howmuch-1; i++) {
+ print_a_char(where, "", what[i], " ");
+ }
+ print_a_char(where, "", what[i], "");
+ fprintf(where, "%s", suffix);
+}
+
+/* print a volume table entry with signature "VTBL" */
+static void print_one_vtbl(const ftvt *volume)
{
char sig[5];
char label[45];
int i;
-
- memcpy(sig, volume->ftvt_sig, 4);
- sig[4] = '\0';
- memcpy(label, volume->ftvt_desc, 44);
- label[44] = '\0';
- printf("SIGNATURE \"%s\"\n", sig);
- if (strcmp(sig, "VTBL") == 0) {
- printf("START %d\n", volume->start);
- printf("END %d\n", volume->end);
- printf("DESCRIPTION \"%s\"\n", label);
- printf("DATE \"%s\"\n", ftvt_decode_date(volume->ftvt_date));
+ const char *formats[] = { "Extended Format",
+ "DOS Basic Format",
+ "Unix",
+ "OS/2",
+ "Novell NetWare",
+ "Windows NT",
+ "DOS Extended Format",
+ "Windows 95" };
+
+ printf("START %d\n", volume->start);
+ printf("END %d\n", volume->end);
+ printf("NUM_SEGMENTS %d\n", volume->num_segments);
+ printf("DESCRIPTION \"%s\"\n", label);
+ printf("DATE \"%s\"\n", ftvt_decode_date(volume->ftvt_date));
+ if (!volume->entry.vendor_specific ||
+ (volume->entry.vendor_specific &&
+ volume->entry.ext.qic113.major == 113 &&
+ volume->fmt_code != fmt_big)) {
printf("FLAG_VENDOR_SPECIFIC %d\n", volume->entry.vendor_specific);
printf("FLAG_MULTI_CARTRIDGE %d\n", volume->entry.multi_cartridge);
printf("FLAG_NOT_VERIFIED %d\n", volume->entry.not_verified);
@@ -561,16 +667,35 @@
printf("FLAG_RESERVED_6 %d\n", volume->entry.fl_reserved_6);
printf("FLAG_RESERVED_7 %d\n", volume->entry.fl_reserved_7);
printf("MULTI_CARTRIDGE_COUNT %d\n", volume->entry.m_no);
- printf("VENDOR_EXTENSION \"");
- for (i = 0; i < sizeof(volume->entry.ext)-1; i ++) {
- printf("0x%02x ", volume->entry.ext[i]);
- }
- printf("0x%02x\"\n", volume->entry.ext[i]);
- printf("PASSWORD \"");
- for (i = 0; i < sizeof(volume->entry.pwd)-1; i ++) {
- printf("0x%02x ", volume->entry.pwd[i]);
+ if (volume->entry.ext.qic113.major == 113) {
+ printf("QIC_MAJOR %d\n", volume->entry.ext.qic113.major);
+ printf("QIC_MINOR %d\n", volume->entry.ext.qic113.minor);
+ print_hex_line(stdout,
+ "VENDOR_EXTENSION \"",
+ volume->entry.ext.qic113.ext,
+ "\"\n", sizeof(volume->entry.ext.qic113.ext));
+ print_char_line(stdout,
+ "# ",
+ volume->entry.ext.qic113.ext,
+ "\n", sizeof(volume->entry.ext.qic113.ext));
+ } else {
+ print_hex_line(stdout,
+ "VENDOR_EXTENSION \"",
+ volume->entry.ext.ext,
+ "\"\n", sizeof(volume->entry.ext.ext));
+ print_char_line(stdout,
+ "# ",
+ volume->entry.ext.ext,
+ "\n", sizeof(volume->entry.ext.ext));
+ }
+ print_hex_line(stdout, "PASSWORD \"", volume->entry.pwd, "\"\n",
+ sizeof(volume->entry.pwd));
+ if (volume->entry.pwd[0] != '\0') {
+ print_char_line(stdout, "# ", volume->entry.pwd, "\n",
+ sizeof(volume->entry.pwd));
+ } else {
+ printf("# no password\n");
}
- printf("0x%02x\"\n", volume->entry.pwd[i]);
printf("DIRECTORY_SIZE %d\n", volume->entry.dir_size);
printf("DATA_SIZE %Ld\n", volume->entry.data_size);
printf("OS_VERSION 0x%04x\n", volume->entry.os_version);
@@ -579,8 +704,167 @@
printf("RESERVED_1 0x%02x\n", volume->entry.reserved_1);
printf("COMPRESSION_FLAGS 0x%02x\n", volume->entry.cmpr);
printf("FORMAT 0x%02x\n", volume->entry.format);
+ if (volume->entry.format < NR_ITEMS(formats)) {
+ printf("# %s\n", formats[volume->entry.format]);
+ } else {
+ printf("# unknown format and OS Type\n");
+ }
printf("RESERVED_2 0x%02x\n", volume->entry.reserved_1);
printf("RESERVED_3 0x%02x\n", volume->entry.reserved_1);
+ } else {
+ /* print remaining values as hex string */
+ print_hex_line(stdout,
+ "VENDOR_DATA \"", &volume->bytes[56], "\"\n", 72);
+ print_char_line(stdout,
+ "# ", &volume->bytes[56], "\n", 72);
+ }
+}
+
+#if 0 /* to be implemented */
+/* convert between character sets, return amount of data stored in
+ * outbuf or -1 on error. Stolen from info manual of GNU libc (iconv
+ * example).
+ */
+static size_t char_conv(const char *to, char *outbuf, size_t outsize,
+ const char *from, const char *inbuf, size_t insize)
+{
+ char *wrptr = outbuf;
+ const char *rdptr = inbuf;
+ iconv_t cd;
+ size_t nconv;
+
+ cd = iconv_open (to, from);
+ if (cd == (iconv_t) -1) {
+ /* Something went wrong. */
+ if (errno == EINVAL) {
+ ftvt_error("conversion from `%s' to `%s' no available", from, to);
+ } else {
+ ftvt_perror("iconv_open");
+ }
+
+ /* Terminate the output string. */
+ *outbuf = '\0';
+ return (size_t)-1;
+ }
+
+ nconv = iconv (cd, (const char **)&rdptr, &insize, &wrptr, &outsize);
+ if (nconv == (size_t) -1) {
+ /* Not everything went right. It might only be
+ * an unfinished byte sequence at the end of the
+ * buffer. Or it is a real problem.
+ */
+ if (errno != EINVAL) {
+ ftvt_perror("iconv");
+ }
+ return (size_t)-1;
+ }
+
+ if (iconv_close (cd) != 0) {
+ ftvt_perror("iconv_close");
+ }
+
+ return (size_t)(wrptr - outbuf);
+}
+
+static void print_ucs2(FILE *where,
+ const char *prefix,
+ const char *what,
+ const char *suffix,
+ int howmuch)
+{
+ wchar_t *ucs4 = (wchar_t *)alloca(howmuch*2);
+ char *str = (char *)alloca(howmuch/2+1);
+ int nconv;
+
+ nconv = char_conv("UCS4", ucs4, howmuch*2, "UCS2", what, howmuch);
+
+ if (nconv > 0 && nconv < howmuch) {
+
+ }
+}
+#endif
+
+/* print a volume table entry with signature "XTBL". The entry
+ * contains the volume name and password in unicode UCS2 format
+ * (i.e. 16 bit characters).
+ *
+ * We print the unicode entry as hex-byte string in the form "0x01
+ * 0x02". We do NOT use 4 digit hex notation to not have to care about
+ * byte ordering. Two of our 2 digit hex numbers make one unicode
+ * character, which probably is in big endian order.
+ *
+ * TODO:
+ *
+ * We print a representation of the uni code field using the current's
+ * locale charset as comment.
+ *
+ * FIXME: how to tell iconv to convert to the current locale's
+ * charset? Or how to determine the standard name of the charset of
+ * the current locale? :(
+ */
+static void print_one_xtbl(const ftvt *volume)
+{
+ print_hex_line(stdout,
+ "NAME \"", &volume->bytes[XTBL_NAME], "\"\n", 88);
+ print_hex_line(stdout,
+ "PASSWORD \"", &volume->bytes[XTBL_PWD], "\"\n", 16);
+ print_hex_line(stdout,
+ "RESERVED \"", &volume->bytes[XTBL_RES], "\"\n", 20);
+}
+
+static void print_one_utid(const ftvt *volume)
+{
+ print_hex_line(stdout,
+ "NAME \"", &volume->bytes[UTID_NAME], "\"\n", 88);
+ print_hex_line(stdout,
+ "RESERVED \"", &volume->bytes[XTBL_RES], "\"\n", 36);
+}
+
+static void print_one_exvt(const ftvt *volume)
+{
+ printf("PARENT %d\n", *(u_int16_t *)&volume->bytes[EXVT_PARENT]);
+ printf("CHILD %d\n", *(u_int16_t *)&volume->bytes[EXVT_CHILD]);
+ print_hex_line(stdout,
+ "RESERVED \"", &volume->bytes[EXVT_RES], "\"\n", 120);
+}
+
+/* Print one volume table in tagged output format (i.e. keyword-value
+ * pairs)
+ *
+ * Arguments:
+ *
+ * const ftvt *volume: pointer to the volume table entry to print
+ */
+void ftvt_print_one_tagged(const ftvt *volume)
+{
+ struct {
+ const char *sig;
+ void (*prt_fct)(const ftvt *volume);
+ } prt_handler[] = {
+ { "VTBL", print_one_vtbl },
+ { "XTBL", print_one_xtbl },
+ { "UTID", print_one_utid },
+ { "EXVT", print_one_exvt }
+ };
+ char sig[5];
+ char label[45];
+ int i;
+
+ memcpy(sig, volume->ftvt_sig, 4);
+ sig[4] = '\0';
+ memcpy(label, volume->ftvt_desc, 44);
+ label[44] = '\0';
+ printf("SIGNATURE \"%s\"\n", sig);
+ for (i = 0; i < NR_ITEMS(prt_handler); i++) {
+ if (memcmp(sig, prt_handler[i].sig, 4) == 0) {
+ prt_handler[i].prt_fct(volume);
+ break;
+ }
+ }
+ if (i == NR_ITEMS(prt_handler)) { /* unknown signature */
+ print_hex_line(stdout,
+ "ENTRY_DATA \"", &volume->bytes[4], "\"\n", 124);
+ print_char_line(stdout, "# ", &volume->bytes[4], "\n", 124);
}
}
@@ -666,9 +950,14 @@
} \
if (strrchr(value, '\"')) { \
*strrchr(value, '\"') = '\0'; \
+ \
+ } \
+ if (dest) { \
+ memset((dest), 0, max); \
+ strncpy((dest), value, max); \
} \
- if (dest) memcpy((dest), value, max); \
action; \
+ non_signature_seen = 1; \
continue; \
} \
}
@@ -691,11 +980,14 @@
char *new;
int len = 1024;
int in_volume = 0;
+ int non_signature_seen = 0;
+ enum { vtbl = 0, xtbl = 1, utid = 2, exvt = 3 } vtbl_id;
int num;
ftvt *volume = NULL;
int get_data = 0;
int maxnum = 0;
char dummy[6];
+ const char *ftvt_ids[] = FTVT_IDS;
while ((new = ftvt_gets(stdin, buffer, &len))) {
buffer = new;
@@ -737,6 +1029,8 @@
return -1;
}
in_volume = 1;
+ non_signature_seen = 0;
+ vtbl_id = vtbl;
volume = &volumes[num];
volume->modified = 1;
volume->num = num;
@@ -751,87 +1045,216 @@
ftvt_error(_("Corrupt volume input data\n"));
return -1;
}
- if (strncmp("SIGNATURE", buffer, sizeof("SIGNATURE")-1) == 0) {
- if (!strstr(buffer, "VTBL")) {
+ GET_STRING_VALUE(SIGNATURE, volume->ftvt_sig, 4,
+ {
+ int i;
+
+ if (non_signature_seen) {
+ ftvt_error(_("SIGNATURE tag must follow ENTRY at once.\n"));
+ return -1;
+ }
+ for (i = 0; i < NR_ITEMS(ftvt_ids); i++) {
+ if (memcmp(volume->ftvt_sig, ftvt_ids[i], 4) == 0) {
+ break;
+ }
+ }
+ if (i == NR_ITEMS(ftvt_ids)) {
ftvt_error(_("Corrupt volume input data: %s\n"), buffer);
return -1;
}
- memcpy(volume->ftvt_sig, "VTBL", 4);
- continue;
+ if (i != 0) {
+ vtbl_id = i;
+ }
+ });
+ switch (vtbl_id) {
+ case vtbl:
+ GET_SINGLE_VALUE(START, i, volume->start);
+ GET_SINGLE_VALUE(END, i, volume->end);
+ GET_SINGLE_VALUE(NUM_SEGMENTS, i, volume->num_segments);
+ GET_STRING_VALUE(DESCRIPTION, volume->ftvt_desc, 44,
+ memset(volume->ftvt_desc + strlen(value), ' ',
+ 44 - strlen(value)));
+ GET_STRING_VALUE(DATE, NULL, 1024,
+ { if (ftvt_set_date(volumes, maxnum, value, num)) {
+ return -1;
+ } });
+ GET_SINGLE_VALUE(FLAG_VENDOR_SPECIFIC, i,
+ volume->entry.vendor_specific);
+ GET_SINGLE_VALUE(QIC_MAJOR, i, volume->entry.ext.qic113.major);
+ GET_SINGLE_VALUE(QIC_MINOR, i, volume->entry.ext.qic113.minor);
+ GET_STRING_VALUE(VENDOR_DATA, &volume->bytes[56], 72, /**/);
+ if (volume->entry.vendor_specific &&
+ (volume->fmt_code == fmt_big ||
+ (volume->fmt_code != fmt_big &&
+ volume->entry.ext.qic113.major != 113))) {
+ continue; /* ignore all other tags */
+ }
+ GET_SINGLE_VALUE(FLAG_MULTI_CARTRIDGE, i,
+ volume->entry.multi_cartridge);
+ GET_SINGLE_VALUE(FLAG_NOT_VERIFIED, i,
+ volume->entry.not_verified);
+ GET_SINGLE_VALUE(FLAG_REDIRECTION_INHIBIT, i,
+ volume->entry.inhibit_redirection);
+ GET_SINGLE_VALUE(FLAG_SEGMENT_SPANNING, i,
+ volume->entry.segment_spanning);
+ GET_SINGLE_VALUE(FLAG_DIRECTORY_LAST, i,
+ volume->entry.directory_last);
+ GET_SINGLE_VALUE(FLAG_RESERVED_6, i,
+ volume->entry.fl_reserved_6);
+ GET_SINGLE_VALUE(FLAG_RESERVED_7, i,
+ volume->entry.fl_reserved_7);
+ GET_SINGLE_VALUE(MULTI_CARTRIDGE_COUNT, i,
+ volume->entry.m_no);
+ GET_SINGLE_VALUE(DIRECTORY_SIZE, i,
+ volume->entry.dir_size);
+ GET_SINGLE_VALUE(DEVICE, i,
+ volume->entry.device);
+ GET_SINGLE_VALUE(RESERVED_1, i,
+ volume->entry.reserved_1);
+ GET_SINGLE_VALUE(COMPRESSION_FLAGS, i,
+ volume->entry.cmpr);
+ GET_SINGLE_VALUE(FORMAT, i,
+ volume->entry.format);
+ GET_SINGLE_VALUE(RESERVED_2, i,
+ volume->entry.reserved_1);
+ GET_SINGLE_VALUE(RESERVED_3, i,
+ volume->entry.reserved_1);
+ GET_SINGLE_VALUE(DATA_SIZE, Lu,
+ volume->entry.data_size);
+ GET_SINGLE_VALUE(OS_VERSION, i,
+ volume->entry.os_version);
+
+ GET_STRING_VALUE(VENDOR_EXTENSION, NULL, 1024,
+ { char *p = value; int i; int val; int len;
+
+ if (volume->entry.ext.qic113.major == 113) {
+ len = 14;
+ } else {
+ len = 26;
+ }
+
+ for (i = 0; i < len; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ if (volume->entry.ext.qic113.major == 113) {
+ volume->entry.ext.qic113.ext[i] = val;
+ } else {
+ volume->entry.ext.ext[i] = val;
+ }
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ GET_STRING_VALUE(PASSWORD, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < sizeof(volume->entry.pwd); i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->entry.pwd[i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ GET_STRING_VALUE(SOURCE_DRIVE, volume->entry.source_drive, 16,
+ /**/);
+ break;
+ case xtbl:
+ GET_STRING_VALUE(NAME, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 88; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[XTBL_NAME+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ GET_STRING_VALUE(PASSWORD, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 16; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[XTBL_PWD+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ GET_STRING_VALUE(RESERVED, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 20; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[XTBL_RES+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ break;
+ case utid:
+ GET_STRING_VALUE(NAME, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 88; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[UTID_NAME+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ GET_STRING_VALUE(RESERVED, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 36; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[UTID_RES+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ break;
+ case exvt: {
+ u_int16_t parent, child;
+ GET_SINGLE_VALUE(PARENT, i, parent);
+ memcpy(&volume->bytes[EXVT_PARENT], &parent, 2);
+ GET_SINGLE_VALUE(CHILD, i, child);
+ memcpy(&volume->bytes[EXVT_CHILD], &child, 2);
+ GET_STRING_VALUE(RESERVED, NULL, 1024,
+ { char *p = value; int i; int val;
+ for (i = 0; i < 120; i ++) {
+ if (sscanf(p, "%i", &val) != 1) {
+ ftvt_error(
+ _("Corrupt volume input data: %s\n"),
+ buffer);
+ return -1;
+ }
+ volume->bytes[EXVT_RES+i] = val;
+ while (isspace(*p)) p++;
+ while (*p != '\0' && !isspace(*p)) p++;
+ } });
+ break;
+ }
}
- GET_SINGLE_VALUE(START, i, volume->start);
- GET_SINGLE_VALUE(END, i, volume->end);
- GET_SINGLE_VALUE(FLAG_VENDOR_SPECIFIC, i,
- volume->entry.vendor_specific);
- GET_SINGLE_VALUE(FLAG_MULTI_CARTRIDGE, i,
- volume->entry.multi_cartridge);
- GET_SINGLE_VALUE(FLAG_NOT_VERIFIED, i,
- volume->entry.not_verified);
- GET_SINGLE_VALUE(FLAG_REDIRECTION_INHIBIT, i,
- volume->entry.inhibit_redirection);
- GET_SINGLE_VALUE(FLAG_SEGMENT_SPANNING, i,
- volume->entry.segment_spanning);
- GET_SINGLE_VALUE(FLAG_DIRECTORY_LAST, i,
- volume->entry.directory_last);
- GET_SINGLE_VALUE(FLAG_RESERVED_6, i,
- volume->entry.fl_reserved_6);
- GET_SINGLE_VALUE(FLAG_RESERVED_7, i,
- volume->entry.fl_reserved_7);
- GET_SINGLE_VALUE(MULTI_CARTRIDGE_COUNT, i,
- volume->entry.m_no);
- GET_SINGLE_VALUE(DIRECTORY_SIZE, i,
- volume->entry.dir_size);
- GET_SINGLE_VALUE(DEVICE, i,
- volume->entry.device);
- GET_SINGLE_VALUE(RESERVED_1, i,
- volume->entry.reserved_1);
- GET_SINGLE_VALUE(COMPRESSION_FLAGS, i,
- volume->entry.cmpr);
- GET_SINGLE_VALUE(FORMAT, i,
- volume->entry.format);
- GET_SINGLE_VALUE(RESERVED_2, i,
- volume->entry.reserved_1);
- GET_SINGLE_VALUE(RESERVED_3, i,
- volume->entry.reserved_1);
- GET_SINGLE_VALUE(DATA_SIZE, Lu,
- volume->entry.data_size);
- GET_SINGLE_VALUE(OS_VERSION, i,
- volume->entry.os_version);
- GET_STRING_VALUE(DESCRIPTION, volume->ftvt_desc, 44,
- memset(volume->ftvt_desc + strlen(value), ' ',
- 44 - strlen(value)));
- GET_STRING_VALUE(DATE, NULL, 1024,
- { if (ftvt_set_date(volumes, maxnum, value, num)) {
- return -1;
- } });
- GET_STRING_VALUE(VENDOR_EXTENSION, NULL, 1024,
- { char *p = value; int i; int val;
- for (i = 0; i < sizeof(volume->entry.ext)-1; i ++) {
- if (sscanf(p, "%i", &val) != 1) {
- ftvt_error(
- _("Corrupt volume input data: %s\n"),
- buffer);
- return -1;
- }
- volume->entry.ext[i] = val;
- while (isspace(*p)) p++;
- while (*p != '\0' && !isspace(*p)) p++;
- } });
- GET_STRING_VALUE(PASSWORD, NULL, 1024,
- { char *p = value; int i; int val;
- for (i = 0; i < sizeof(volume->entry.pwd)-1; i ++) {
- if (sscanf(p, "%i", &val) != 1) {
- ftvt_error(
- _("Corrupt volume input data: %s\n"),
- buffer);
- return -1;
- }
- volume->entry.pwd[i] = val;
- while (isspace(*p)) p++;
- while (*p != '\0' && !isspace(*p)) p++;
- } });
- GET_STRING_VALUE(SOURCE_DRIVE, volume->entry.source_drive, 16,
- /**/);
}
ftvt_error(_("Premature end of volume table\n"));
return -1;
@@ -913,7 +1336,13 @@
memcpy(p, &volumes[i].entry, FTVT_SIZE);
if (volumes[i].fmt_code == fmt_big) {
- vt->size.scsi_segs = (volumes[i].end - volumes[i].start + 1);
+ vt->size.fmt6_segs = volumes[i].num_segments;
+ /* this will fix some pre-ftape-4.04 volumes Note that
+ * the start and end field do not overlap with the
+ * pre-ftape-4.04 extension field
+ */
+ memcpy(vt->ext.qic113.start, &volumes[i].start, 4);
+ memcpy(vt->ext.qic113.end, &volumes[i].end, 4);
} else {
vt->size.se.start = volumes[i].start;
vt->size.se.end = volumes[i].end;
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/vtblc-version.h ftape-tools-1.09/src/vtblc/vtblc-version.h
--- ftape-tools-1.08/src/vtblc/vtblc-version.h Sun Jun 25 23:40:27 2000
+++ ftape-tools-1.09/src/vtblc/vtblc-version.h Sat Jul 22 22:23:45 2000
@@ -1 +1 @@
-const char *version_string = "vtblc (ftape-tools) 1.08\n";
+const char *version_string = "vtblc (ftape-tools) 1.09\n";
diff -u --recursive --new-file ftape-tools-1.08/src/vtblc/vtblc.c ftape-tools-1.09/src/vtblc/vtblc.c
--- ftape-tools-1.08/src/vtblc/vtblc.c Tue Feb 23 16:14:39 1999
+++ ftape-tools-1.09/src/vtblc/vtblc.c Fri Jul 21 09:48:09 2000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1997-1999 Claus-Justus Heine
+ * Copyright (C) 1997-2000 Claus-Justus Heine
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,8 +22,8 @@
*/
char src[] = "$RCSfile: vtblc.c,v $";
-char rev[] = "$Revision: 1.11 $";
-char dat[] = "$Date: 1999/02/23 15:14:39 $";
+char rev[] = "$Revision: 1.15 $";
+char dat[] = "$Date: 2000/07/21 07:48:09 $";
#ifdef HAVE_CONFIG_H
#include
@@ -63,13 +63,16 @@
static char *tape_dev = FTAPE_DEF_TAPE;
+static u_int8_t hseg[FT_SEGMENT_SIZE];
+static int fmt_code;
static ftvt volumes[FTVT_MAX_VOLUMES];
static u_int8_t vtbl_buffer[FT_SEGMENT_SIZE];
static int num_volumes;
static int tagged;
static int trunc;
-static const char *short_options = "f:Vdvqh?pa:t::m:#:";
+static const char *short_options = "f:Vdvqh?p::a:t::m:#:b";
+
static const struct option long_options[] =
{
{"file", 1, 0, 'f'}, /* full path to device */
@@ -84,6 +87,7 @@
{"truncate", 2, 0, 't'}, /* truncate to given size */
{"modify", 1, 0, 'm'}, /* modify given vtbl */
{"vtbl-entry", 1, 0, '#'}, /* vtbl to print or modify */
+ {"bsm", 0, 0, 'b'}, /* print the bsm */
{0, 0, 0, 0}
};
@@ -123,6 +127,7 @@
static int verbose = 1;
static int debug = 0;
static int taggedinput = 0;
+static int bsm = 0;
static void usage(FILE *file, int exit_val, char *message, ...);
@@ -209,6 +214,9 @@
case 'f':
tape_dev = optarg;
break;
+ case 'b':
+ bsm = 1;
+ break;
case 'V':
printf(version_string);
exit(0);
@@ -241,7 +249,18 @@
? O_RDONLY : O_RDWR)) == -1) {
exit(1);
}
- if ((num_volumes = ftvt_read(tapefd, volumes, vtbl_buffer)) == -1) {
+ if ((fmt_code = ftvt_read_header_segment(tapefd, hseg)) == -1) {
+ (void)ftvt_close(tapefd);
+ exit(1);
+ }
+ if (bsm) {
+ ftvt_init_bsm(hseg, fmt_code, 0);
+ ftvt_print_bad_sector_map(verbose);
+ (void)ftvt_close(tapefd);
+ exit(0);
+ }
+ if ((num_volumes = ftvt_read_vtbl(tapefd, hseg, fmt_code, volumes,
+ vtbl_buffer)) == -1) {
(void)ftvt_close(tapefd);
exit(1);
}
@@ -341,6 +360,7 @@
" -d, --debug Unused yet.\n"
" -v, --verbose Be verbose (default).\n"
" -q, --quiet Don't be verbose.\n"
+" -b, --bsm Print the bad sector map and quit.\n"
" -#, --vtbl-entry=NR Specify the volume number for \"--print\" and\n"
" \"--modify\".\n"
" -p, --print[=tagged] Print the volume table entry given by\n"
@@ -359,7 +379,7 @@
" \"--vtbl-entry\". If \"--vtbl-entry\" has been\n"
" omitted then the last entry is modified.\n"
"\n"
-"\"--apend\" and \"--modify\" understand the following sub-options:\n"
+"\"--append\" and \"--modify\" understand the following sub-options:\n"
"\n"
" label=LABEL The description for this volume table entry.\n"
" LABEL will be truncated to 44 bytes.\n"
@@ -377,9 +397,12 @@
" space characters (SPACE or TAB).\n"
" `vtblc` understands the following keywords and values:\n"
"\n"
-" ENTRY NUM Starts the description for the volume NUM. This may\n"
-" be ommitted if the \"--vtbl-entry=NUM\" has been\n"
-" given.\n"
+" VTBL START\n"
+" VTBL END Marks the start of vtbl data. Maybe useful when\n"
+" sending volume table entries via email :-).\n"
+" However, the entire volume table data must be\n"
+" surrounded by a \"VTBL START\" - \"VTBL END\" pair.\n"
+" ENTRY NUM Starts the description for the volume NUM.\n"
" ENTRY END Here END is not a placeholder, but means the\n"
" word \"END\". Ends the description for the volume\n"
" table entry previously started by \"ENTRY NUM\".\n"
@@ -387,10 +410,25 @@
" modifies the volume number NUM. This provides means\n"
" to modify the entire volume table in a single run.\n"
"\n"
-" SIGNATURE \"SIG\" Valid signature string. Only \"VTBL\" is\n"
-" for now.\n"
+" SIGNATURE \"SIG\" Valid signature string. Must be one out of\n"
+" \"VTBL\", \"XTBL\", \"EXVT\" and \"UTID\".\n"
+" If this tag is used it MUST be the first entry\n"
+" after the \"ENTRY\" tag. If the \"SIGNATURE\" tag\n"
+" is missing, \"VTBL\" is assumed.\n"
+"\n"
+"The following entry is for signatures other than \"VTBL\":\n"
+"\n"
+" ENTRY_DATA \"HEX\" Data following the signature \"HEX\" is a string\n"
+" of hexadecimal byte values, e.g. \"0x01 0x4f ...\",\n"
+" of length at most 124. If less bytes are presented\n"
+" the entry will be padded with zeroes.\n"
+"\n"
+"Following entries are for for signature \"VTBL\":\n"
+"\n"
" START STARTSEG First segment of this volume.\n"
" END ENDSEG Last segment of this volume.\n"
+" NUM_SEGMENTS NUM Number of segments occupied (optional).\n"
+" If omitted, will be set to (ENDSEG-STARTSEG+1)\n"
" DESCRIPTION \"DESC\" Description for this volume table. Will be\n"
" truncated to 44 characters.\n"
" DATE \"DATESTR\" Date for the volume. If \"DATESTR\" is ommitted,\n"
@@ -404,12 +442,26 @@
" FLAG_RESERVED_6 VAL\n"
" FLAG_RESERVED_7 VAL\n"
" MULTI_CARTRIDGE_COUNT VAL\n"
+"\n"
+"The following tags are understood only if FLAG_VENDOR_SPECIFIC is 0\n"
+"or if FLAG_VENDOR_SPECIFIC is 1 and QIC_MAJOR is 113:\n"
+"\n"
+" QIC_MAJOR VAL Major number of QIC spec cartridge conforms to,\n"
+" only for cartridges with more than 65536 segments.\n"
+" VAL should be 113 for all cases.\n"
+" QIC_MINOR VAL Minor revision number of QIC spec. Only for\n"
+" cartridges with more thatn 65536 segments.\n"
+" At the time of this writing, QIC-113, Rev. G, is\n"
+" is the latest one, so VAL should be 7.\n"
" VENDOR_EXTENSION \"HEX\" Vendor extension data. \"HEX\" is a string\n"
" of hexadecimal byte values, i.e. \"0x01 0x4f ...\"\n"
+" The maximal lenght of this string is 14 bytes for\n"
+" cartridges with more thatn 2^16 = 65536 segments\n"
+" and 26 bytes for smaller cartridges\n"
" PASSWORD \"HEX\" Password. \"HEX\" as above.\n"
" DIRECTORY_SIZE VAL\n"
" DATA_SIZE VAL64 64 bit value (a decimal count)\n"
-" OS_VERSION HEX Here \"HEX\" is a hexadecimal 4 bytes value.\n"
+" OS_VERSION HEX Here \"HEX\" is a hexadecimal 2 bytes value.\n"
" SOURCE_DRIVE DRVSTR Source drive. \"DRVSTR\" is a 16 byte string.\n"
" DEVICE HEXBYTE A single byte in hexadecimal notation.\n"
" RESERVED_1 HEXBYTE\n"
@@ -417,6 +469,12 @@
" FORMAT HEYBYTE\n"
" RESERVED_2 HEXBYTE\n"
" RESERVED_3 HEXBYTE\n"
+"\n"
+"If FLAG_VENDOR_SPECIFIC is 1, then the following tag is allowed:\n"
+"\n"
+" VENDOR_DATA \"HEX\" A string of hexadecimal values of lenght at most\n"
+" 72 to fill the remainder of the volume table entry.\n"
+" Smaller strings will be padded with zero bytes.\n"
"\n"
"Strings with spaces have to be surrounded by double quotes \"...\"\n"
"\"VAL\" is some decimal number.\n"