mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
- Support for Japanese names which are converted to UTF-8 with 'recode'
- Support for files starting with '-' (avoid clash with options)
- Support for files contianing '{' (avoid hfs globbing clash)
- Support for files containing '/', it is replaced with ':'
- Support for empty directories, no more warnings
For Japanese mode filenames are correctly recoded back to HFS names, so
hutils are happy
175 lines
3.0 KiB
Bash
Executable File
175 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
usage() {
|
|
cat << EOF
|
|
Usage: $0 [OPTIONS]...
|
|
|
|
Dumping Mac files into MacBinary format
|
|
|
|
There are 2 operation modes. Direct MacBinary encoding (Mac-only) and dumping ISO
|
|
contents with hfsutils.
|
|
|
|
Mode 1:
|
|
$0 macbinary
|
|
Operate in MacBinary encoding mode
|
|
|
|
Mode 2:
|
|
$0 [jap] <file.iso>
|
|
Operate in disk dumping mode
|
|
Optionally specify 'jap' for using 'recode' for converting Japanese file names
|
|
|
|
Miscellaneous:
|
|
-h, --help display this help and exit
|
|
EOF
|
|
}
|
|
|
|
path=
|
|
jap=
|
|
|
|
macbinarydump() {
|
|
mypath=`realpath $0`
|
|
|
|
for i in *
|
|
do
|
|
if test -d "$i" ; then
|
|
cd "$i"
|
|
if [ "$(ls -A .)" ] ; then # directory is not empty
|
|
bash $mypath macbinary-phase2 "$path/$i"
|
|
fi
|
|
cd ..
|
|
else
|
|
echo -ne "$path/$i... \r"
|
|
macbinary encode "$i"
|
|
touch -r "$i" "$i.bin"
|
|
mv "$i.bin" "$i"
|
|
fi
|
|
done
|
|
}
|
|
|
|
hfsdump() {
|
|
mypath=`realpath $0`
|
|
|
|
if [[ jap == "jap" ]] ; then
|
|
flist=`hls -F1a|recode SJIS..utf-8`
|
|
else
|
|
flist=`hls -F1a`
|
|
fi
|
|
|
|
echo "$flist" | while read i ; do
|
|
if [[ jap == "jap" ]] ; then
|
|
macname=`echo "$i"|recode utf-8..SJIS`
|
|
else
|
|
macname="$i"
|
|
fi
|
|
|
|
# Guard empty directories
|
|
if [[ "$i" == "" ]] ; then
|
|
continue
|
|
fi
|
|
|
|
if [[ "$i" =~ ":" ]] ; then
|
|
dir="${i%?}" # Strip trailing ':'
|
|
dir="${dir//\//:}" # Files could contain '/', replace those with ':'
|
|
macdir="${macname%?}"
|
|
hcd "$macdir"
|
|
mkdir -- "$dir"
|
|
cd -- "$dir"
|
|
bash $mypath $jap hfsutils-phase2 "$path:$i"
|
|
hcd ::
|
|
cd ..
|
|
else
|
|
echo -ne "$path$i... \r"
|
|
# Executable files have star at their end. Strip it
|
|
if [[ "$i" =~ \*$ ]] ; then
|
|
macfile="${macname%?}"
|
|
file="${i%?}"
|
|
else
|
|
macfile="$macname"
|
|
file="$i"
|
|
fi
|
|
fileunix="${file//\//:}" # Files could contain '/', replace those with ':'
|
|
|
|
# Files could contain '*', '{', so backslash them to avoid globbing
|
|
macfile="${macfile//\*/\\*}"
|
|
macfile="${macfile//{/\\{}"
|
|
hcopy -m -- "$macfile" "./$fileunix"
|
|
fi
|
|
done
|
|
}
|
|
|
|
for parm in "$@" ; do
|
|
if test "$parm" = "--help" || test "$parm" = "-help" || test "$parm" = "-h" ; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
done # for parm in ...
|
|
|
|
if [[ $1 == "macbinary" ]] ; then
|
|
if ! `command -v macbinary >/dev/null 2>/dev/null` ; then
|
|
echo "macbinary not found. Exiting"
|
|
exit 1
|
|
fi
|
|
macbinarydump
|
|
echo
|
|
exit 0
|
|
fi
|
|
|
|
if [[ $1 == "macbinary-phase2" ]] ; then
|
|
path=$2
|
|
macbinarydump
|
|
exit 0
|
|
fi
|
|
|
|
###########
|
|
# hfsutils mode
|
|
if [ "$#" -lt 1 ] ; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $1 == "jap" ]] ; then
|
|
if ! `command -v recode >/dev/null 2>/dev/null` ; then
|
|
echo "recode not found. Exiting"
|
|
exit 1
|
|
fi
|
|
|
|
jap=jap
|
|
shift
|
|
fi
|
|
|
|
if [[ $1 == "hfsutils-phase2" ]] ; then
|
|
path=$2
|
|
hfsdump
|
|
exit 0
|
|
fi
|
|
|
|
if ! `type hmount >/dev/null 2>/dev/null` ; then
|
|
echo "hfsutils not found. Exiting"
|
|
exit 1
|
|
fi
|
|
|
|
isofile="$1"
|
|
|
|
echo -n "Mounting ISO..."
|
|
hmount "$isofile" >/dev/null 2>/dev/null
|
|
if test -z $? ; then
|
|
echo error
|
|
exit 1
|
|
fi
|
|
|
|
echo done
|
|
|
|
echo "Dumping..."
|
|
|
|
hfsdump
|
|
echo
|
|
|
|
echo -n "Unmounting ISO..."
|
|
humount >/dev/null 2>/dev/null
|
|
if test -z $? ; then
|
|
echo error
|
|
exit 1
|
|
fi
|
|
|
|
echo done
|