diff -u --recursive --new-file ftape-tools-1.08/AUTHORS ftape-tools-1.09/AUTHORS --- ftape-tools-1.08/AUTHORS Sun Jun 25 20:16:31 2000 +++ ftape-tools-1.09/AUTHORS Thu Jul 20 18:48:14 2000 @@ -1,13 +1,12 @@ Hey, Emacs, we're -*-Text-*- mode! -Authors of the ftape-tools package +Authors of the ftape-tools package (alphabetical order w.r.t. last names): -Also see files ChangeLog and THANKS. - - -This package was put together by me, +Robie Basak + enhancements and bug fixes for vtblc. Claus-Justus Heine + original author of the ftape-tools package. Some programs contained in this package have been written by other people, and many (or maybe all) are based on work of other diff -u --recursive --new-file ftape-tools-1.08/ChangeLog ftape-tools-1.09/ChangeLog --- ftape-tools-1.08/ChangeLog Fri Jun 30 14:14:22 2000 +++ ftape-tools-1.09/ChangeLog Mon Jul 24 01:03:30 2000 @@ -1,3 +1,194 @@ +2000-07-24 Claus-Justus Heine + + * Release of version 1.09 + +2000-07-23 heine + + * po/de.po, po/en.po, NEWS: Update for release of version 1.09. + + * src/ftformat/ftfmt-tapelib.c: Fix a typo. + + * doc/texi/Ftformat.texi: + Document "erase-cartridge" suboption of --verify-only. + + * po/de.po, po/en.po: + Update. verify-only suboptions erase-cartridge wasn't documented. + + * src/ftformat/ftformat.c: Update copyright notice. + + * src/ftformat/ftfmt-options.c: Cosmetic changes. + + * src/ftformat/ftfmt-tapelib.c, src/ftformat/ftformat.c: + tpparms.frst_data_segment and tpparms.last_data_segment was not + initialized when the header segment could not be read. This lead to + buffer overflows for cartridges with a fixed-size bad sector map + (i.e. format code 2). + + * src/ftape-tool/ftape-command.tcl, src/ftape-tool/ftape-tool.tcl: + Add support for load and setpart commands + +2000-07-22 heine + + * configure.in: Check for endianess. Unused yet. + + * src/vtblc/ftvt.h, src/vtblc/libftvt.c: + Add support for XTBL, UTID and EXVT (EXVT entry still not used). + + * doc/texi/Introduction.texi, doc/texi/Vtblc.texi: + Fix some TeXinfo problems (wrong macros used). + +2000-07-21 heine + + * po/de.po, po/en.po, po/POTFILES.in: Updates for changed messages. + + * src/vtblc/libftvt-bsm.c: + Use ftvt_error() instead of fprintf(stderr, ...). Internationalization + for some printf statements. + + * src/vtblc/vtblc.c: Slight changes to help message. + + * src/ftmt/mt.c: Support MTIOCFTMODE ioctl. + + * doc/texi/Ftmt.texi, doc/texi/Vtblc.texi: Update. + + * NEWS: Updated to latest changes. + + * doc/configure.in, configure.in: Bump version to 1.09. + +2000-07-21 heine + + * src/vtblc/vtblc.c: Slight changes to help message. + + * src/ftmt/mt.c: Support MTIOCFTMODE ioctl. + + * doc/texi/Ftmt.texi, doc/texi/Vtblc.texi: Update. + + * NEWS: Updated to latest changes. + + * doc/configure.in, configure.in: Bump version to 1.09. + +2000-07-20 basak + + * src/vtblc/vtblc.c: Fixed typo. + +2000-07-20 heine + + * src/vtblc/ftvt.h, src/vtblc/libftvt.c, src/vtblc/vtblc.c: + Resolved conflicts from merge of FTAPE_TOOLS_1_08_FIX merge. + Assigned FTAPE_TOOLS_1_08_FIXED_1 tag to bug fix branch (use it when + merging again). + + * AUTHORS, THANKS: Added Robie. + + * acconfig.h: ZFT_OBSOLETE macro changed to CONFIG_ZFT_OBSOLETE macro. + + * include/ftape/linux/ftape.h, + include/ftape/linux/ftape-header-segment.h, + include/ftape/linux/ftape-vendors.h, include/ftape/linux/qic117.h, + include/ftape/linux/zftape.h: Updated to latest version from ftape + distribution. + + * src/vtblc/vtblc.c, src/vtblc/ftvt.h, src/vtblc/libftvt.c: + Bug fix for cartridges with format code 6. + + Handle XTBL, UTID and EXVT volume table entries. Without checking, + just recognize the signature and copy the remainder of the entry as + byte stream. + + Pretty print password and extension fields (if characters are + printable). + + * include/ftape/linux/ftape.h, include/ftape/linux/qic117.h, + include/ftape/linux/zftape.h, + include/ftape/linux/ftape-header-segment.h, + include/ftape/linux/ftape-vendors.h: Latest versions from + ftape-4.x repository. + + * acconfig.h: Define CONFIG_ZFT_OBSOLETE instead of ZFT_OBSOLETE. + +2000-07-17 basak + + * src/vtblc/vtblc.c: + Added -b, --bsm option to vtblc for a bad sector map printout. + + * src/vtblc/ftvt.h, src/vtblc/libftvt.c: + Added parameter to ftvt_read_header_segment: u_int8_t *hseg + - ftvt_read_header_segment must now be passed a pointer (at least + FT_SEGMENT_SIZE) rather than allocating the memory itself (so that + the header segment is accessible to the outside). + + Removed the rewind code; not needed for raw tape access, and it seems + to be failing in any case; it still appears to work wherever the tape + was initially. + + Removed first_data_segment and last_data_segment parameters from + ftvt_read_header_segment; moved the corresponding parsing code to + ftvt_read. + + ftvt_read_header_segment now purely finds and reads the header + segment, so that it can be made external. + + Prototypes and only caller (ftvt_read) changed appropriately; static + on ftvt_read_header_segment removed. + + ftvt_read split into ftvt_read and ftvt_read_vtbl. ftvt_read behaves + the same as before, but now calls ftvt_read_vtbl to do all processing. + + Added extern prototypes for ftvt_read_header_segment, ftvt_read_vtbl + to ftvt.h, removed old prototype for ftvt_read_header_segment from + libftvt.c. + + Added external functions from new file libftvt-bsm.c to ftvt.h. + + * src/vtblc/libftvt-bsm.c: + Added file libftvt-bsm.c (cloned from ftformat/ftfmt-bsm.c). Changed external + functions names to start with ftvt_. Modified ftvt_print_bad_sector map to take + start and end data segment values from those calculated in ftvt_init_bsm. + + * src/vtblc/Makefile.am: + Added file libftvt-bsm.c (cloned from ftformat/ftfmt-bsm.c); this adds bad + sector map processing to libftvt. + +2000-07-12 heine + + * ChangeLog: *** empty log message *** + + * src/vtblc/ftvt.h: + Surround everything by `extern "C" {' and `}' in the presence of C++. + + * src/vtblc/libftvt.c, src/ftformat/ftfmt-tapelib.c: + Check for presence of minor() macro before using it. + + * src/ftmt/mt.c: Use new MTIOCFTMODE ioctl if possible. + + * src/ftape-tool/ftape-tool.tcl: Fix a typo. + + * po/de.po, po/en.po: Update time stamp. + + * acconfig.h, acinclude.m4, configure.in: + Check for presence of "minor()" macro (problems with glibc-2.0.*). + +2000-07-12 heine + + * src/vtblc/ftvt.h: + Surround everything by `extern "C" {' and `}' in the presence of C++. + + * src/vtblc/libftvt.c, src/ftformat/ftfmt-tapelib.c: + Check for presence of minor() macro before using it. + + * src/ftmt/mt.c: Use new MTIOCFTMODE ioctl if possible. + + * src/ftape-tool/ftape-tool.tcl: Fix a typo. + + * po/de.po, po/en.po: Update time stamp. + + * acconfig.h, acinclude.m4, configure.in: + Check for presence of "minor()" macro (problems with glibc-2.0.*). + +2000-06-30 heine + + * ChangeLog: Update for release. + 2000-06-30 Claus-Justus Heine * Release version 1.08. @@ -346,6 +537,12 @@ Start documenting libftvt.a (hence the newly created function index) * doc/texi/Makefile.am: Remove the $Log: ChangeLog,v $ + * doc/texi/Makefile.am: Remove the Revision 1.27 2000/07/21 07:59:22 heine + * doc/texi/Makefile.am: Remove the *** empty log message *** + * doc/texi/Makefile.am: Remove the + * doc/texi/Makefile.am: Remove the Revision 1.26 2000/07/12 06:05:29 heine + * doc/texi/Makefile.am: Remove the *** empty log message *** + * doc/texi/Makefile.am: Remove the * doc/texi/Makefile.am: Remove the Revision 1.25 2000/06/30 12:14:22 heine * doc/texi/Makefile.am: Remove the Update for release. * doc/texi/Makefile.am: Remove the @@ -369,6 +566,12 @@ that texinfo-update-multiple-files works correctly. * doc/sgml/Makefile.am: Remove the "$Log: ChangeLog,v $ + * doc/sgml/Makefile.am: Remove the "Revision 1.27 2000/07/21 07:59:22 heine + * doc/sgml/Makefile.am: Remove the "*** empty log message *** + * doc/sgml/Makefile.am: Remove the " + * doc/sgml/Makefile.am: Remove the "Revision 1.26 2000/07/12 06:05:29 heine + * doc/sgml/Makefile.am: Remove the "*** empty log message *** + * doc/sgml/Makefile.am: Remove the " * doc/sgml/Makefile.am: Remove the "Revision 1.25 2000/06/30 12:14:22 heine * doc/sgml/Makefile.am: Remove the "Update for release. * doc/sgml/Makefile.am: Remove the " @@ -384,6 +587,12 @@ * doc/html/Makefile.am: Remove the "$Log: ChangeLog,v $ + Remove the "Revision 1.27 2000/07/21 07:59:22 heine + Remove the "*** empty log message *** + Remove the " + Remove the "Revision 1.26 2000/07/12 06:05:29 heine + Remove the "*** empty log message *** + Remove the " Remove the "Revision 1.25 2000/06/30 12:14:22 heine Remove the "Update for release. Remove the " @@ -410,6 +619,12 @@ * doc/acinclude.m4: Remove the CVS log information ($Log: ChangeLog,v $ + Remove the CVS log information (Revision 1.27 2000/07/21 07:59:22 heine + Remove the CVS log information (*** empty log message *** + Remove the CVS log information ( + Remove the CVS log information (Revision 1.26 2000/07/12 06:05:29 heine + Remove the CVS log information (*** empty log message *** + Remove the CVS log information ( Remove the CVS log information (Revision 1.25 2000/06/30 12:14:22 heine Remove the CVS log information (Update for release. Remove the CVS log information ( diff -u --recursive --new-file ftape-tools-1.08/NEWS ftape-tools-1.09/NEWS --- ftape-tools-1.08/NEWS Sun Jun 25 20:16:13 2000 +++ ftape-tools-1.09/NEWS Mon Jul 24 00:54:30 2000 @@ -1,5 +1,18 @@ Hey, Emacs, we're -*-Text-*- mode! +Version 1.09 + +Bug fixed: ftformat was broken w.r.t. 120MB cartridges when the header +segment could not be read. + +Bug fixed: vtblc now can handle cartridges with more than 2^16 +segments. + +Limited support for UTID, XTBL and EXVT volume table entries. EXVT is +recognized, but the volume table overflow extension is not used. + +vtblc is able to print the bad sector map (-b switch). + Version 1.08 Nothing new. Just a `stable' release. diff -u --recursive --new-file ftape-tools-1.08/THANKS ftape-tools-1.09/THANKS --- ftape-tools-1.08/THANKS Sun Jun 25 18:16:08 2000 +++ ftape-tools-1.09/THANKS Thu Jul 20 18:47:14 2000 @@ -6,6 +6,9 @@ you think somebody is missing. +Robie Basak + enhancements and bug fixes for vtblc. + Tim Jones hardware equipment and fruitful discussions. diff -u --recursive --new-file ftape-tools-1.08/acconfig.h ftape-tools-1.09/acconfig.h --- ftape-tools-1.08/acconfig.h Tue Aug 31 11:19:04 1999 +++ ftape-tools-1.09/acconfig.h Thu Jul 20 18:36:16 2000 @@ -41,8 +41,11 @@ /* Define if strptime is present AND works */ #undef HAVE_STRPTIME +/* Define to 1 if minor() macro (or function) is present */ +#undef HAVE_MINOR + @BOTTOM@ /* Define for backwards compatibility */ -#define ZFT_OBSOLETE +#define CONFIG_ZFT_OBSOLETE diff -u --recursive --new-file ftape-tools-1.08/acinclude.m4 ftape-tools-1.09/acinclude.m4 --- ftape-tools-1.08/acinclude.m4 Fri Feb 26 01:30:03 1999 +++ ftape-tools-1.09/acinclude.m4 Wed Jul 12 07:25:33 2000 @@ -1,4 +1,4 @@ -dnl Copyright (C) 1998 Claus-Justus Heine +dnl Copyright (C) 1998-2000 Claus-Justus Heine dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -16,8 +16,8 @@ dnl $RCSfile: acinclude.m4,v $ -dnl $Revision: 1.5 $ -dnl $Date: 1999/02/25 19:22:46 $ +dnl $Revision: 1.6 $ +dnl $Date: 2000/07/12 05:25:33 $ dnl set prefix to its proper value, so that one can define substitutions dnl depending on the value of prefix @@ -26,6 +26,14 @@ [test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +]) + +AC_DEFUN(FT_FUNC_MINOR, +[AC_CACHE_CHECK([for minor() macro], ft_cv_func_minor_defined, + [AC_TRY_COMPILE([#include ],[int a = minor(15)], + [ft_cv_func_minor_defined=yes + AC_DEFINE(HAVE_MINOR)], + [ft_cv_func_minor_defined=no])]) ]) define([AC_FIND_PROGRAM],dnl diff -u --recursive --new-file ftape-tools-1.08/aclocal.m4 ftape-tools-1.09/aclocal.m4 --- ftape-tools-1.08/aclocal.m4 Sun Jun 25 23:39:43 2000 +++ ftape-tools-1.09/aclocal.m4 Sat Jul 22 22:22:58 2000 @@ -10,7 +10,7 @@ dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. -dnl Copyright (C) 1998 Claus-Justus Heine +dnl Copyright (C) 1998-2000 Claus-Justus Heine dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -28,8 +28,8 @@ dnl $RCSfile: acinclude.m4,v $ -dnl $Revision: 1.5 $ -dnl $Date: 1999/02/25 19:22:46 $ +dnl $Revision: 1.6 $ +dnl $Date: 2000/07/12 05:25:33 $ dnl set prefix to its proper value, so that one can define substitutions dnl depending on the value of prefix @@ -38,6 +38,14 @@ [test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +]) + +AC_DEFUN(FT_FUNC_MINOR, +[AC_CACHE_CHECK([for minor() macro], ft_cv_func_minor_defined, + [AC_TRY_COMPILE([#include ],[int a = minor(15)], + [ft_cv_func_minor_defined=yes + AC_DEFINE(HAVE_MINOR)], + [ft_cv_func_minor_defined=no])]) ]) define([AC_FIND_PROGRAM],dnl diff -u --recursive --new-file ftape-tools-1.08/config.h.in ftape-tools-1.09/config.h.in --- ftape-tools-1.08/config.h.in Sun Jun 25 20:56:47 2000 +++ ftape-tools-1.09/config.h.in Sat Jul 22 21:05:28 2000 @@ -63,6 +63,10 @@ /* Define if your declares struct tm. */ #undef TM_IN_SYS_TIME +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + /* Define to 1 if NLS is requested. */ #undef ENABLE_NLS @@ -84,6 +88,9 @@ /* Define if strptime is present AND works */ #undef HAVE_STRPTIME +/* Define to 1 if minor() macro (or function) is present */ +#undef HAVE_MINOR + /* Define if you have the __argz_count function. */ #undef HAVE___ARGZ_COUNT @@ -191,5 +198,5 @@ /* Define for backwards compatibility */ -#define ZFT_OBSOLETE +#define CONFIG_ZFT_OBSOLETE diff -u --recursive --new-file ftape-tools-1.08/configure ftape-tools-1.09/configure --- ftape-tools-1.08/configure Sun Jun 25 23:39:45 2000 +++ ftape-tools-1.09/configure Sat Jul 22 22:22:59 2000 @@ -784,7 +784,7 @@ PACKAGE=ftape-tools -VERSION=1.08 +VERSION=1.09 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -2455,13 +2455,103 @@ ;; esac +echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +echo "configure:2460: checking whether byte ordering is bigendian" >&5 +if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_bigendian=unknown +# See if sys/param.h defines the BYTE_ORDER macro. +cat > conftest.$ac_ext < +#include +int main() { + +#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN + bogus endian macros +#endif +; return 0; } +EOF +if { (eval echo configure:2478: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. +cat > conftest.$ac_ext < +#include +int main() { + +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +; return 0; } +EOF +if { (eval echo configure:2493: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_bigendian=no +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +if test $ac_cv_c_bigendian = unknown; then +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_bigendian=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_bigendian=yes +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_bigendian" 1>&6 +if test $ac_cv_c_bigendian = yes; then + cat >> confdefs.h <<\EOF +#define WORDS_BIGENDIAN 1 +EOF + +fi + echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:2460: checking for off_t" >&5 +echo "configure:2550: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2489,12 +2579,12 @@ fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:2493: checking for size_t" >&5 +echo "configure:2583: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2522,12 +2612,12 @@ fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:2526: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:2616: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2535,7 +2625,7 @@ struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:2539: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -2558,13 +2648,13 @@ if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:2562: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:2652: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -2582,7 +2672,7 @@ if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -2604,7 +2694,7 @@ fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:2608: checking for 8-bit clean memcmp" >&5 +echo "configure:2698: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2612,7 +2702,7 @@ ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -2643,17 +2733,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2647: checking for $ac_hdr" >&5 +echo "configure:2737: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2747: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2682,12 +2772,12 @@ for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2686: checking for $ac_func" >&5 +echo "configure:2776: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2735,7 +2825,7 @@ done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:2739: checking for working mmap" >&5 +echo "configure:2829: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2743,7 +2833,7 @@ ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -2906,7 +2996,7 @@ fi echo $ac_n "checking whether setvbuf arguments are reversed""... $ac_c" 1>&6 -echo "configure:2910: checking whether setvbuf arguments are reversed" >&5 +echo "configure:3000: checking whether setvbuf arguments are reversed" >&5 if eval "test \"`echo '$''{'ac_cv_func_setvbuf_reversed'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2914,7 +3004,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < /* If setvbuf has the reversed format, exit 0. */ @@ -2928,7 +3018,7 @@ exit(0); /* Non-reversed systems segv here. */ } EOF -if { (eval echo configure:2932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_setvbuf_reversed=yes else @@ -2952,12 +3042,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2956: checking return type of signal handlers" >&5 +echo "configure:3046: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2974,7 +3064,7 @@ int i; ; return 0; } EOF -if { (eval echo configure:2978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2993,12 +3083,12 @@ echo $ac_n "checking for strftime""... $ac_c" 1>&6 -echo "configure:2997: checking for strftime" >&5 +echo "configure:3087: checking for strftime" >&5 if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_strftime=yes" else @@ -3043,7 +3133,7 @@ echo "$ac_t""no" 1>&6 # strftime is in -lintl on SCO UNIX. echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 -echo "configure:3047: checking for strftime in -lintl" >&5 +echo "configure:3137: checking for strftime in -lintl" >&5 ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3051,7 +3141,7 @@ ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3089,12 +3179,12 @@ fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:3093: checking for vprintf" >&5 +echo "configure:3183: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else @@ -3141,12 +3231,12 @@ if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:3145: checking for _doprnt" >&5 +echo "configure:3235: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else @@ -3196,12 +3286,12 @@ for ac_func in mktime strerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3200: checking for $ac_func" >&5 +echo "configure:3290: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3251,12 +3341,12 @@ for ac_func in getsubopt strtol error do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3255: checking for $ac_func" >&5 +echo "configure:3345: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3306,12 +3396,12 @@ echo $ac_n "checking for working strptime()""... $ac_c" 1>&6 -echo "configure:3310: checking for working strptime()" >&5 +echo "configure:3400: checking for working strptime()" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < void main() { @@ -3328,7 +3418,7 @@ } } EOF -if { (eval echo configure:3332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define HAVE_STRPTIME 1 @@ -3347,6 +3437,37 @@ fi +echo $ac_n "checking for minor() macro""... $ac_c" 1>&6 +echo "configure:3442: checking for minor() macro" >&5 +if eval "test \"`echo '$''{'ft_cv_func_minor_defined'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +int a = minor(15) +; return 0; } +EOF +if { (eval echo configure:3454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ft_cv_func_minor_defined=yes + cat >> confdefs.h <<\EOF +#define HAVE_MINOR 1 +EOF + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ft_cv_func_minor_defined=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ft_cv_func_minor_defined" 1>&6 + GNATS_ADDR=ftape-bugs@instmath.rwth-aachen.de @@ -3403,19 +3524,19 @@ # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:3407: checking for working alloca.h" >&5 +echo "configure:3528: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:3419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -3436,12 +3557,12 @@ fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:3440: checking for alloca" >&5 +echo "configure:3561: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -3501,12 +3622,12 @@ echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:3505: checking whether alloca needs Cray hooks" >&5 +echo "configure:3626: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 -echo "configure:3535: checking for $ac_func" >&5 +echo "configure:3656: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3586,7 +3707,7 @@ fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:3590: checking stack direction for C alloca" >&5 +echo "configure:3711: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3594,7 +3715,7 @@ ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -3640,17 +3761,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3644: checking for $ac_hdr" >&5 +echo "configure:3765: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3775: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3680,12 +3801,12 @@ strdup __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3684: checking for $ac_func" >&5 +echo "configure:3805: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3737,12 +3858,12 @@ for ac_func in stpcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3741: checking for $ac_func" >&5 +echo "configure:3862: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3799,19 +3920,19 @@ if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 -echo "configure:3803: checking for LC_MESSAGES" >&5 +echo "configure:3924: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return LC_MESSAGES ; return 0; } EOF -if { (eval echo configure:3815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else @@ -3832,7 +3953,7 @@ fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 -echo "configure:3836: checking whether NLS is requested" >&5 +echo "configure:3957: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" @@ -3852,7 +3973,7 @@ EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 -echo "configure:3856: checking whether included gettext is requested" >&5 +echo "configure:3977: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" @@ -3871,17 +3992,17 @@ ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 -echo "configure:3875: checking for libintl.h" >&5 +echo "configure:3996: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3885: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4006: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3898,19 +4019,19 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 -echo "configure:3902: checking for gettext in libc" >&5 +echo "configure:4023: checking for gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:3914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libc=yes else @@ -3926,7 +4047,7 @@ if test "$gt_cv_func_gettext_libc" != "yes"; then echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 -echo "configure:3930: checking for bindtextdomain in -lintl" >&5 +echo "configure:4051: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3934,7 +4055,7 @@ ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3961,12 +4082,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 -echo "configure:3965: checking for gettext in libintl" >&5 +echo "configure:4086: checking for gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 -echo "configure:3970: checking for gettext in -lintl" >&5 +echo "configure:4091: checking for gettext in -lintl" >&5 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3974,7 +4095,7 @@ ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4024,7 +4145,7 @@ # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4028: checking for $ac_word" >&5 +echo "configure:4149: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4058,12 +4179,12 @@ for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4062: checking for $ac_func" >&5 +echo "configure:4183: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4113,7 +4234,7 @@ # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4117: checking for $ac_word" >&5 +echo "configure:4238: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4149,7 +4270,7 @@ # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4153: checking for $ac_word" >&5 +echo "configure:4274: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4181,7 +4302,7 @@ fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* CATOBJEXT=.gmo DATADIRNAME=share @@ -4212,7 +4333,7 @@ if test "$CATOBJEXT" = "NONE"; then echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6 -echo "configure:4216: checking whether catgets can be used" >&5 +echo "configure:4337: checking whether catgets can be used" >&5 # Check whether --with-catgets or --without-catgets was given. if test "${with_catgets+set}" = set; then withval="$with_catgets" @@ -4225,7 +4346,7 @@ if test "$nls_cv_use_catgets" = "yes"; then echo $ac_n "checking for main in -li""... $ac_c" 1>&6 -echo "configure:4229: checking for main in -li" >&5 +echo "configure:4350: checking for main in -li" >&5 ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4233,14 +4354,14 @@ ac_save_LIBS="$LIBS" LIBS="-li $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4268,12 +4389,12 @@ fi echo $ac_n "checking for catgets""... $ac_c" 1>&6 -echo "configure:4272: checking for catgets" >&5 +echo "configure:4393: checking for catgets" >&5 if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_catgets=yes" else @@ -4318,7 +4439,7 @@ # Extract the first word of "gencat", so it can be a program name with args. set dummy gencat; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4322: checking for $ac_word" >&5 +echo "configure:4443: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4354,7 +4475,7 @@ # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4358: checking for $ac_word" >&5 +echo "configure:4479: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4391,7 +4512,7 @@ # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4395: checking for $ac_word" >&5 +echo "configure:4516: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4426,7 +4547,7 @@ # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4430: checking for $ac_word" >&5 +echo "configure:4551: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4484,7 +4605,7 @@ # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4488: checking for $ac_word" >&5 +echo "configure:4609: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4518,7 +4639,7 @@ # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4522: checking for $ac_word" >&5 +echo "configure:4643: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4554,7 +4675,7 @@ # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4558: checking for $ac_word" >&5 +echo "configure:4679: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4647,7 +4768,7 @@ LINGUAS= else echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 -echo "configure:4651: checking for catalogs to be installed" >&5 +echo "configure:4772: checking for catalogs to be installed" >&5 NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in @@ -4675,17 +4796,17 @@ if test "$CATOBJEXT" = ".cat"; then ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 -echo "configure:4679: checking for linux/version.h" >&5 +echo "configure:4800: checking for linux/version.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4689: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* diff -u --recursive --new-file ftape-tools-1.08/configure.in ftape-tools-1.09/configure.in --- ftape-tools-1.08/configure.in Sun Jun 25 23:04:40 2000 +++ ftape-tools-1.09/configure.in Sat Jul 22 22:14:26 2000 @@ -16,14 +16,14 @@ dnl $RCSfile: configure.in,v $ -dnl $Revision: 1.33 $ -dnl $Date: 2000/06/25 21:04:40 $ +dnl $Revision: 1.36 $ +dnl $Date: 2000/07/22 20:14:26 $ dnl Process this file with autoconf to produce a configure script. AC_INIT(lib/getsubopt.c) AC_CONFIG_SUBDIRS(doc) -AM_INIT_AUTOMAKE(ftape-tools, 1.08) +AM_INIT_AUTOMAKE(ftape-tools, 1.09) AM_CONFIG_HEADER(config.h) AM_PROG_LIBTOOL @@ -123,6 +123,7 @@ dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE +AC_C_BIGENDIAN AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_STRUCT_TM @@ -138,6 +139,7 @@ AC_CHECK_FUNCS(mktime strerror) AC_REPLACE_FUNCS(getsubopt strtol error) AC_FUNC_STRPTIME +FT_FUNC_MINOR dnl check for fttoolsbug.sh settings diff -u --recursive --new-file ftape-tools-1.08/contrib/Linux/v1.2/README ftape-tools-1.09/contrib/Linux/v1.2/README --- ftape-tools-1.08/contrib/Linux/v1.2/README Sun Jul 2 23:47:12 2000 +++ ftape-tools-1.09/contrib/Linux/v1.2/README Mon Jul 24 01:05:42 2000 @@ -14,10 +14,10 @@ similar and use the `patch' command like follows: cd /usr/src/linux/ -patch -p1 < /usr/src/ftape-tools-1.08/Linux/v1.2/linux-1.2.13.dif -patch -p1 < /usr/src/ftape-tools-1.08/Linux/v1.2/linux-1.2.13.dif2 +patch -p1 < /usr/src/ftape-tools-1.09/Linux/v1.2/linux-1.2.13.dif +patch -p1 < /usr/src/ftape-tools-1.09/Linux/v1.2/linux-1.2.13.dif2 -where you have to replace `/usr/src/ftape-tools-1.08/' by the +where you have to replace `/usr/src/ftape-tools-1.09/' by the name of the directory where the ftape-tools sources are located in. Afterwards you have to recompile your kernel and reinstall it. The diff -u --recursive --new-file ftape-tools-1.08/contrib/Linux/v2.0/README ftape-tools-1.09/contrib/Linux/v2.0/README --- ftape-tools-1.08/contrib/Linux/v2.0/README Sun Jul 2 23:47:12 2000 +++ ftape-tools-1.09/contrib/Linux/v2.0/README Mon Jul 24 01:05:42 2000 @@ -42,11 +42,11 @@ similar and use the `patch' command like follows: cd /usr/src/linux/ -patch -p1 < /usr/src/ftape-tools-1.08/Linux/v2.0/floppy.c.dif +patch -p1 < /usr/src/ftape-tools-1.09/Linux/v2.0/floppy.c.dif where you have to replace -/usr/src/ftape-tools-1.08/Linux/v2.0/floppy.c.dif +/usr/src/ftape-tools-1.09/Linux/v2.0/floppy.c.dif by the real pathname of the `floppy.c.dif' which is located in the same directory as this `README' file. diff -u --recursive --new-file ftape-tools-1.08/contrib/Linux/v2.1/README ftape-tools-1.09/contrib/Linux/v2.1/README --- ftape-tools-1.08/contrib/Linux/v2.1/README Sun Jul 2 23:47:12 2000 +++ ftape-tools-1.09/contrib/Linux/v2.1/README Mon Jul 24 01:05:42 2000 @@ -29,11 +29,11 @@ the buggy floppy driver. cd /usr/src/linux/ -patch -p1 < /usr/src/ftape-tools-1.08/Linux/v2.1/floppy.c.dif +patch -p1 < /usr/src/ftape-tools-1.09/Linux/v2.1/floppy.c.dif where you have to replace -/usr/src/ftape-tools-1.08/Linux/v2.1/floppy.c.dif +/usr/src/ftape-tools-1.09/Linux/v2.1/floppy.c.dif by the real pathname of the `floppy.c.dif' which is located in the same directory as this `README' file. diff -u --recursive --new-file ftape-tools-1.08/doc/configure ftape-tools-1.09/doc/configure --- ftape-tools-1.08/doc/configure Sun Jun 25 20:56:52 2000 +++ ftape-tools-1.09/doc/configure Fri Jul 21 09:38:46 2000 @@ -715,7 +715,7 @@ PACKAGE=ftape-tools -VERSION=1.08 +VERSION=1.09 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } diff -u --recursive --new-file ftape-tools-1.08/doc/configure.in ftape-tools-1.09/doc/configure.in --- ftape-tools-1.08/doc/configure.in Sun Jun 25 20:31:51 2000 +++ ftape-tools-1.09/doc/configure.in Fri Jul 21 09:32:57 2000 @@ -16,13 +16,13 @@ dnl $RCSfile: configure.in,v $ -dnl $Revision: 1.26 $ -dnl $Date: 2000/06/25 18:31:51 $ +dnl $Revision: 1.27 $ +dnl $Date: 2000/07/21 07:32:57 $ dnl Process this file with autoconf to produce a configure script. AC_INIT(texi/ftape-tools.texi) AC_CONFIG_AUX_DIR(etc) -AM_INIT_AUTOMAKE(ftape-tools, 1.08) +AM_INIT_AUTOMAKE(ftape-tools, 1.09) AM_CONDITIONAL(FTAPE_MANUAL, test $PACKAGE = ftape-manual) AC_SUBST(manualhtmldir) DOCNAME=ftape-tools diff -u --recursive --new-file ftape-tools-1.08/doc/html/API.html ftape-tools-1.09/doc/html/API.html --- ftape-tools-1.08/doc/html/API.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/API.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + API diff -u --recursive --new-file ftape-tools-1.08/doc/html/Building.html ftape-tools-1.09/doc/html/Building.html --- ftape-tools-1.08/doc/html/Building.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Building.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Building diff -u --recursive --new-file ftape-tools-1.08/doc/html/Concept_Index.html ftape-tools-1.09/doc/html/Concept_Index.html --- ftape-tools-1.08/doc/html/Concept_Index.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Concept_Index.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - + Concept Index diff -u --recursive --new-file ftape-tools-1.08/doc/html/Configuration.html ftape-tools-1.09/doc/html/Configuration.html --- ftape-tools-1.08/doc/html/Configuration.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Configuration.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Configuration diff -u --recursive --new-file ftape-tools-1.08/doc/html/Contrib.html ftape-tools-1.09/doc/html/Contrib.html --- ftape-tools-1.08/doc/html/Contrib.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Contrib.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - + Contrib diff -u --recursive --new-file ftape-tools-1.08/doc/html/Copying.html ftape-tools-1.09/doc/html/Copying.html --- ftape-tools-1.08/doc/html/Copying.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Copying.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Copying diff -u --recursive --new-file ftape-tools-1.08/doc/html/Documentation_formatting.html ftape-tools-1.09/doc/html/Documentation_formatting.html --- ftape-tools-1.08/doc/html/Documentation_formatting.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Documentation_formatting.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Documentation formatting diff -u --recursive --new-file ftape-tools-1.08/doc/html/Examples.html ftape-tools-1.09/doc/html/Examples.html --- ftape-tools-1.08/doc/html/Examples.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Examples.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Examples diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftape-Tool_Overview.html ftape-tools-1.09/doc/html/Ftape-Tool_Overview.html --- ftape-tools-1.08/doc/html/Ftape-Tool_Overview.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Ftape-Tool_Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftape-Tool Overview diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftape-tool.html ftape-tools-1.09/doc/html/Ftape-tool.html --- ftape-tools-1.08/doc/html/Ftape-tool.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Ftape-tool.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftape-tool diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat.html ftape-tools-1.09/doc/html/Ftformat.html --- ftape-tools-1.08/doc/html/Ftformat.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Ftformat.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat_Examples.html ftape-tools-1.09/doc/html/Ftformat_Examples.html --- ftape-tools-1.08/doc/html/Ftformat_Examples.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Ftformat_Examples.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat Examples diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat_Options.html ftape-tools-1.09/doc/html/Ftformat_Options.html --- ftape-tools-1.08/doc/html/Ftformat_Options.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Ftformat_Options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat Options @@ -103,7 +103,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 @@ -134,6 +134,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.

diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat_Overview.html ftape-tools-1.09/doc/html/Ftformat_Overview.html --- ftape-tools-1.08/doc/html/Ftformat_Overview.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Ftformat_Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat Overview @@ -51,7 +51,7 @@
 root@anaxagoras:claus# ftformat --version
-ftformat (ftape-tools) 1.08
+ftformat (ftape-tools) 1.09
 

diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat_Problems.html ftape-tools-1.09/doc/html/Ftformat_Problems.html --- ftape-tools-1.08/doc/html/Ftformat_Problems.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Ftformat_Problems.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat Problems diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftformat_Synopsis.html ftape-tools-1.09/doc/html/Ftformat_Synopsis.html --- ftape-tools-1.08/doc/html/Ftformat_Synopsis.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Ftformat_Synopsis.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftformat Synopsis @@ -25,7 +25,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/html/Ftmt.html ftape-tools-1.09/doc/html/Ftmt.html --- ftape-tools-1.08/doc/html/Ftmt.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Ftmt.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftmt diff -u --recursive --new-file ftape-tools-1.08/doc/html/Ftmt_Overview.html ftape-tools-1.09/doc/html/Ftmt_Overview.html --- ftape-tools-1.08/doc/html/Ftmt_Overview.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Ftmt_Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Ftmt Overview diff -u --recursive --new-file ftape-tools-1.08/doc/html/Function_Index.html ftape-tools-1.09/doc/html/Function_Index.html --- ftape-tools-1.08/doc/html/Function_Index.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Function_Index.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - + Function Index diff -u --recursive --new-file ftape-tools-1.08/doc/html/Installation.html ftape-tools-1.09/doc/html/Installation.html --- ftape-tools-1.08/doc/html/Installation.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Installation.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Installation diff -u --recursive --new-file ftape-tools-1.08/doc/html/Introduction.html ftape-tools-1.09/doc/html/Introduction.html --- ftape-tools-1.08/doc/html/Introduction.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Introduction.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Introduction diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Ftape-Tool.html ftape-tools-1.09/doc/html/Invoking_Ftape-Tool.html --- ftape-tools-1.08/doc/html/Invoking_Ftape-Tool.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Invoking_Ftape-Tool.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Ftape-Tool diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Ftformat.html ftape-tools-1.09/doc/html/Invoking_Ftformat.html --- ftape-tools-1.08/doc/html/Invoking_Ftformat.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Invoking_Ftformat.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Ftformat diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Ftmt.html ftape-tools-1.09/doc/html/Invoking_Ftmt.html --- ftape-tools-1.08/doc/html/Invoking_Ftmt.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Invoking_Ftmt.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Ftmt diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Listtape.html ftape-tools-1.09/doc/html/Invoking_Listtape.html --- ftape-tools-1.08/doc/html/Invoking_Listtape.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Invoking_Listtape.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Listtape diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Swapout.html ftape-tools-1.09/doc/html/Invoking_Swapout.html --- ftape-tools-1.08/doc/html/Invoking_Swapout.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Invoking_Swapout.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Swapout diff -u --recursive --new-file ftape-tools-1.08/doc/html/Invoking_Vtblc.html ftape-tools-1.09/doc/html/Invoking_Vtblc.html --- ftape-tools-1.08/doc/html/Invoking_Vtblc.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Invoking_Vtblc.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Invoking Vtblc diff -u --recursive --new-file ftape-tools-1.08/doc/html/Libftvt.html ftape-tools-1.09/doc/html/Libftvt.html --- ftape-tools-1.08/doc/html/Libftvt.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Libftvt.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Libftvt @@ -22,7 +22,7 @@ - + diff -u --recursive --new-file ftape-tools-1.08/doc/html/Libvtblc_compatibility.html ftape-tools-1.09/doc/html/Libvtblc_compatibility.html --- ftape-tools-1.08/doc/html/Libvtblc_compatibility.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Libvtblc_compatibility.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Libvtblc compatibility diff -u --recursive --new-file ftape-tools-1.08/doc/html/Listtape.html ftape-tools-1.09/doc/html/Listtape.html --- ftape-tools-1.08/doc/html/Listtape.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Listtape.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Listtape diff -u --recursive --new-file ftape-tools-1.08/doc/html/Listtape_Examples.html ftape-tools-1.09/doc/html/Listtape_Examples.html --- ftape-tools-1.08/doc/html/Listtape_Examples.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Listtape_Examples.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Listtape Examples diff -u --recursive --new-file ftape-tools-1.08/doc/html/Listtape_Options.html ftape-tools-1.09/doc/html/Listtape_Options.html --- ftape-tools-1.08/doc/html/Listtape_Options.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Listtape_Options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Listtape Options diff -u --recursive --new-file ftape-tools-1.08/doc/html/Listtape_Overview.html ftape-tools-1.09/doc/html/Listtape_Overview.html --- ftape-tools-1.08/doc/html/Listtape_Overview.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Listtape_Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Listtape Overview diff -u --recursive --new-file ftape-tools-1.08/doc/html/Listtape_Synopsis.html ftape-tools-1.09/doc/html/Listtape_Synopsis.html --- ftape-tools-1.08/doc/html/Listtape_Synopsis.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Listtape_Synopsis.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Listtape Synopsis diff -u --recursive --new-file ftape-tools-1.08/doc/html/Modifying_Entries.html ftape-tools-1.09/doc/html/Modifying_Entries.html --- ftape-tools-1.08/doc/html/Modifying_Entries.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Modifying_Entries.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - +Modifying Entries diff -u --recursive --new-file ftape-tools-1.08/doc/html/NLS_support.html ftape-tools-1.09/doc/html/NLS_support.html --- ftape-tools-1.08/doc/html/NLS_support.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/NLS_support.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +NLS support diff -u --recursive --new-file ftape-tools-1.08/doc/html/Option_Settings.html ftape-tools-1.09/doc/html/Option_Settings.html --- ftape-tools-1.08/doc/html/Option_Settings.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Option_Settings.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Option Settings @@ -82,7 +82,7 @@ diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing.html ftape-tools-1.09/doc/html/Testing.html --- ftape-tools-1.08/doc/html/Testing.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Testing.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Testing @@ -85,7 +85,7 @@ + + + + + + + +
Libvtblc compatibilityGuess what it is.
Compatibility with libvtblc.
API The application program interface.

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 diff -u --recursive --new-file ftape-tools-1.08/doc/html/Options.html ftape-tools-1.09/doc/html/Options.html --- ftape-tools-1.08/doc/html/Options.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Options diff -u --recursive --new-file ftape-tools-1.08/doc/html/Overview.html ftape-tools-1.09/doc/html/Overview.html --- ftape-tools-1.08/doc/html/Overview.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Overview @@ -23,7 +23,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 Contrib) subdirectory. +(see Contrib) subdirectory.

All compiled programs of this distribution show a banner of the @@ -32,7 +32,7 @@

 root@anaxagoras:claus# PROGRAM --version
-PROGRAM (ftape-tools) 1.08
+PROGRAM (ftape-tools) 1.09
 

diff -u --recursive --new-file ftape-tools-1.08/doc/html/Printing_and_Parsing.html ftape-tools-1.09/doc/html/Printing_and_Parsing.html --- ftape-tools-1.08/doc/html/Printing_and_Parsing.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Printing_and_Parsing.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - + Printing and Parsing diff -u --recursive --new-file ftape-tools-1.08/doc/html/Requirements.html ftape-tools-1.09/doc/html/Requirements.html --- ftape-tools-1.08/doc/html/Requirements.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Requirements.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Requirements diff -u --recursive --new-file ftape-tools-1.08/doc/html/Swapout.html ftape-tools-1.09/doc/html/Swapout.html --- ftape-tools-1.08/doc/html/Swapout.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Swapout.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Swapout diff -u --recursive --new-file ftape-tools-1.08/doc/html/Swapout_Examples.html ftape-tools-1.09/doc/html/Swapout_Examples.html --- ftape-tools-1.08/doc/html/Swapout_Examples.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Swapout_Examples.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Swapout Examples diff -u --recursive --new-file ftape-tools-1.08/doc/html/Swapout_Options.html ftape-tools-1.09/doc/html/Swapout_Options.html --- ftape-tools-1.08/doc/html/Swapout_Options.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Swapout_Options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Swapout Options diff -u --recursive --new-file ftape-tools-1.08/doc/html/Swapout_Overview.html ftape-tools-1.09/doc/html/Swapout_Overview.html --- ftape-tools-1.08/doc/html/Swapout_Overview.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Swapout_Overview.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Swapout Overview diff -u --recursive --new-file ftape-tools-1.08/doc/html/Swapout_Synopsis.html ftape-tools-1.09/doc/html/Swapout_Synopsis.html --- ftape-tools-1.08/doc/html/Swapout_Synopsis.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Swapout_Synopsis.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Swapout Synopsis diff -u --recursive --new-file ftape-tools-1.08/doc/html/Synopsis.html ftape-tools-1.09/doc/html/Synopsis.html --- ftape-tools-1.08/doc/html/Synopsis.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Synopsis.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Synopsis @@ -32,7 +32,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
 

diff -u --recursive --new-file ftape-tools-1.08/doc/html/Tape_I@2f@O.html ftape-tools-1.09/doc/html/Tape_I@2f@O.html --- ftape-tools-1.08/doc/html/Tape_I@2f@O.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Tape_I@2f@O.html Sun Jul 23 15:59:00 2000 @@ -1,5 +1,5 @@ - + Tape I/O @@ -351,7 +351,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. @@ -376,7 +376,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().


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/'. +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.

@@ -98,7 +98,7 @@

-[/usr/src/ftape-tools-1.08/]testsuite/ftsignal
+[/usr/src/ftape-tools-1.09/]testsuite/ftsignal
 

diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Ftape-Tool.html ftape-tools-1.09/doc/html/Testing_Ftape-Tool.html --- ftape-tools-1.08/doc/html/Testing_Ftape-Tool.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Testing_Ftape-Tool.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Ftape-Tool diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Ftformat.html ftape-tools-1.09/doc/html/Testing_Ftformat.html --- ftape-tools-1.08/doc/html/Testing_Ftformat.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Testing_Ftformat.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Ftformat diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Ftmt.html ftape-tools-1.09/doc/html/Testing_Ftmt.html --- ftape-tools-1.08/doc/html/Testing_Ftmt.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Testing_Ftmt.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Ftmt diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Listtape.html ftape-tools-1.09/doc/html/Testing_Listtape.html --- ftape-tools-1.08/doc/html/Testing_Listtape.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Testing_Listtape.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Listtape diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Swapout.html ftape-tools-1.09/doc/html/Testing_Swapout.html --- ftape-tools-1.08/doc/html/Testing_Swapout.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Testing_Swapout.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Swapout diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_Vtblc.html ftape-tools-1.09/doc/html/Testing_Vtblc.html --- ftape-tools-1.08/doc/html/Testing_Vtblc.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Testing_Vtblc.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing Vtblc diff -u --recursive --new-file ftape-tools-1.08/doc/html/Testing_options.html ftape-tools-1.09/doc/html/Testing_options.html --- ftape-tools-1.08/doc/html/Testing_options.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Testing_options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - + Testing options diff -u --recursive --new-file ftape-tools-1.08/doc/html/Top.html ftape-tools-1.09/doc/html/Top.html --- ftape-tools-1.08/doc/html/Top.html Sun Jun 25 19:56:15 2000 +++ ftape-tools-1.09/doc/html/Top.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

Claus-Justus Heine


Copyright © 25 June 2000 Claus-Justus Heine +

The Ftape Tools Manual

Ftape-Tools version 1.09

Ftape version 4.03

22 July 2000

Claus-Justus Heine


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/html/Vtblc.html ftape-tools-1.09/doc/html/Vtblc.html --- ftape-tools-1.08/doc/html/Vtblc.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Vtblc.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Vtblc diff -u --recursive --new-file ftape-tools-1.08/doc/html/Vtblc_Examples.html ftape-tools-1.09/doc/html/Vtblc_Examples.html --- ftape-tools-1.08/doc/html/Vtblc_Examples.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Vtblc_Examples.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Vtblc Examples diff -u --recursive --new-file ftape-tools-1.08/doc/html/Vtblc_Options.html ftape-tools-1.09/doc/html/Vtblc_Options.html --- ftape-tools-1.08/doc/html/Vtblc_Options.html Sun Jun 25 19:56:16 2000 +++ ftape-tools-1.09/doc/html/Vtblc_Options.html Sun Jul 23 15:58:59 2000 @@ -1,5 +1,5 @@ - +Vtblc Options @@ -13,22 +13,25 @@

8.2.2: 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 @@ -37,47 +40,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 @@ -130,6 +102,40 @@

+
-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. +

@@ -176,9 +182,38 @@ 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

@@ -191,6 +226,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

@@ -208,63 +251,82 @@

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.

-
FLAG_MULTI_CARTRIDGE VAL +

+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

-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 @@ -288,7 +350,7 @@
OS_VERSION HEX

-Here HEX is a hexadecimal 4 bytes value. +Here HEX is a hexadecimal 2 bytes value.


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

Claus-Justus Heine


Copyright © 25 June 2000 Claus-Justus Heine +

The Ftape Tools Manual

Ftape-Tools version 1.09

Ftape version 4.03

22 July 2000

Claus-Justus Heine


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

--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<>'''' - ````OOppttiioonnss,, <>ffttmmtt<>'''' ````OOppttiioonnss,, <>lliissttttaappee<>'''' @@ -4089,7 +4183,6 @@ ````SSwwaappoouutt,, ssyynnooppssiiss'''' - ````SSwwaappoouutt,, tteessttiinngg'''' ````SSyynnooppssiiss,, <>ffttffoorrmmaatt<>'''' @@ -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"