#!/bin/sh
+#
+# mapsector -- Map sector number to file name(s)
+#
+# Copyright (C) 2009,2010 Stefan Bund <stefan@j32.de>
+#
+# 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 of the License, 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; if not, write to the
+# Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
###########################################################################
mappers=""
scanners=""
version="unknown"
+name="`basename "$0"`"
+
+# Don't use custom language since we parse the output of lots of standard
+# utilities
+unset LANG
register_mapper()
{
load()
{
- for lib in `ls "$1"/[0-9][0-9]_*.sh | sort`; do
- source $lib
+ local X
+ local lib
+
+ X="`dirname "$0"`"
+ if [ "`basename "$X"`" == "bin" ]; then # `"
+ libdir="`dirname "$X"`/share/$name" #`"
+ fi
+ if [ -z "$libdir" -o ! -d "$libdir" ]; then
+ libdir="$X/lib"
+ fi
+
+ if [ ! -d "$libdir" ]; then
+ echo "! Library directory not found" 1>&2
+ exit 1
+ fi
+
+ for lib in `ls "$libdir"/[0-9][0-9]_*.sh | sort`; do
+ source $lib
done
}
local found
found=1
while [ -n "$found" ]; do
- found=""
- for name in $mappers; do
- if detect_$name; then
- found=1
- if do_$name; then
- return
- fi
- break
- fi
- done
+ found=""
+ for name in $mappers; do
+ if detect_$name; then
+ found=1
+ if do_$name; then
+ return
+ fi
+ break
+ fi
+ done
done
}
scan()
{
for name in $scanners; do
- if detect_$name; then
- if do_$name; then
- return
- fi
- fi
+ if detect_$name; then
+ if do_$name; then
+ return
+ fi
+ fi
done
}
###########################################################################
-unset LANG
-
-#### Find library directory and load library files
-
-name="`basename "$0"`"
-X="`dirname "$0"`"
-if [ "`basename "$X"`" == "bin" ]; then # `"
- libdir="`dirname "$X"`/share/$name" #`"
-fi
-if [ -z "$libdir" -o ! -d "$libdir" ]; then
- libdir="$X/lib"
-fi
-
-if [ ! -d "$libdir" ]; then
- echo "! Library directory not found" 1>&2
- exit 1
-fi
+#### Load library modules
-load "$libdir"
+load
#### Parse command line arguments
while true; do
case "$1" in
- -h|--help) help="0"; shift ;;
- --noscan) noscan="0"; shift ;;
- -V|--version) echo "$name $version"; exit 0 ;;
- --) shift; break ;;
- *) echo "! internal error"; exit 1 ;;
+ -h|--help) help="0"; shift ;;
+ --noscan) noscan="0"; shift ;;
+ -V|--version) echo "$name $version"; exit 0 ;;
+ --) shift; break ;;
+ *) echo "! internal error"; exit 1 ;;
esac
done
cat <<EOF
Usage: $name [-h|--help] [--noscan] <device> <sector>"
-mapsector -- Map sector numbers to file name(s)
+mapsector -- Map sector number to file name(s)
Given a device and a sector number, mapsector will try to find the
file name(s) mapping to this sector. It will try to gather as much
EOF
for mapper in $mappers; do
- describe_$mapper
+ describe_$mapper
done
cat <<EOF
EOF
for scanner in $scanners; do
- describe_$scanner
+ describe_$scanner
done
cat <<EOF
if '--noscan' is given, the possibly lengthy (!!) filesystem scan for
filenames is skipped.
--- mapsector Version $version
+-- mapsector $version
EOF
exit "${help:-1}"
fi