135 lines
4.5 KiB
Bash
Executable File
135 lines
4.5 KiB
Bash
Executable File
#! /bin/bash
|
|
#
|
|
# Copyright 2000 Peter Ganten
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
#
|
|
# This library 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
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
|
|
# default settings
|
|
TMPDIR=/tmp/fconv.$$;
|
|
if [ -f `which mktemp` ]; then
|
|
TFILE=`mktemp -q /tmp/fconv.XXXXXX`
|
|
else
|
|
TFILE=`tempfile`;
|
|
fi
|
|
|
|
# Where the fnt2bdf utility resides
|
|
FC=`which fnt2bdf`;
|
|
if [ -z "$FC" ]; then FC=$HOME""/wine/tools/fnt2bdf; fi;
|
|
|
|
# which OEM_CHARSET to use
|
|
CHARSET="winsys";
|
|
TARGET=/usr/X11R6/lib/X11/fonts/misc;
|
|
BDFTOPCF=/usr/X11R6/bin/bdftopcf;
|
|
PAT="*.fon";
|
|
Q="";
|
|
OLDPWD=`pwd`;
|
|
|
|
usage () {
|
|
echo "usage: "`basename $0`" [-q] [-c charset] [-t fontdir] [-b bdftopcf] [-f fnt2bdf]"
|
|
echo " [-p pattern] windir"
|
|
echo
|
|
echo "this utility scans a directory and its subdirectories for bitmap-fonts"
|
|
echo "in Windows format, converts them to PCF-fons and installs them. If X"
|
|
echo "is running, the X fontpath is re-adjusted."
|
|
echo
|
|
echo "options:"
|
|
echo " -q quit operation."
|
|
echo " -c charset charset name for OEM_CHARSET fonts, default: $CHARSET"
|
|
echo " -t fontdir directory to install the converted fonts in. This"
|
|
echo " directory should be a known fontdirectory to X, default:"
|
|
echo " $TARGET";
|
|
echo " -b bdftopcf name of the program to call for bdf to pcf conversion,"
|
|
echo " default: $BDFTOPCF";
|
|
echo " -f fnt2bdf name of the program to call for winfont to bdf conversion,"
|
|
echo " default: $FC"
|
|
echo " -p pattern Shell-Pattern of the filenames to look for. By default, the"
|
|
echo " utility will look for the pattern "$PAT" (case insensitive)."
|
|
echo " windir base directory to search."
|
|
exit 1;
|
|
}
|
|
|
|
|
|
while [ "$1" ]; do
|
|
case $1 in
|
|
-c ) shift; if [ "$1" ]; then CHARSET=$1; shift; else usage; fi; ;;
|
|
-t ) shift; if [ "$1" ]; then TARGET=$1; shift; else usage; fi; ;;
|
|
-b ) shift; if [ "$1" ]; then BDFTOPCF=$1; shift; else usage; fi; ;;
|
|
-f ) shift; if [ "$1" ]; then FC=$1; shift; else usage; fi; ;;
|
|
-p ) shift; if [ "$1" ]; then PAT=$1; shift; else usage; fi; ;;
|
|
-q ) shift; Q=":"; ;;
|
|
-* ) usage; ;;
|
|
* ) if [ "$WIND" ]; then usage; else WIND=$1; shift; fi; ;;
|
|
esac;
|
|
done;
|
|
|
|
if [ ! "$WIND" ]; then usage; fi;
|
|
if [ ! -d "$WIND" ]; then $Q echo "$WIND is not a directory"; exit 1; fi;
|
|
if [ ! -d "$TARGET" ]; then $Q echo "$TARGET is not a directory"; exit 1; fi;
|
|
type -p $BDFTOPCF 1>/dev/null || { $Q echo "Can 't execute $BDFTOPCF"; exit 1; }
|
|
type -p $FC 1>/dev/null || { $Q echo "Can't execute $FC"; exit 1; }
|
|
|
|
$Q echo -n "looking for bitmap fonts (\"$PAT\") in directory \"$WIND\"... ";
|
|
FONTS=`find $WIND -iname "$PAT" 1>$TFILE 2>/dev/null`;
|
|
if [ $? -ne 0 ]; then
|
|
$Q echo "$PAT is a invalid search expression"; exit 1;
|
|
fi;
|
|
i=0;
|
|
|
|
{ while read dummy; do FONTS[$i]="$dummy"; i=$[$i+1]; done; } < $TFILE
|
|
rm $TFILE;
|
|
$Q echo "done."
|
|
|
|
if [ -z "$FONTS" ]; then $Q echo "Can't find any fonts in $WIND"; exit 1; fi;
|
|
|
|
mkdir "$TMPDIR"
|
|
for i in "${FONTS[@]}"; do cp $i $TMPDIR; done
|
|
cd "$TMPDIR"
|
|
|
|
for i in "${FONTS[@]}"; do
|
|
FNT=`basename "$i"`; FNT=${FNT%.???};
|
|
$Q echo "converting $i";
|
|
if [ "$Q" ]; then
|
|
$FC -c $CHARSET -f $FNT "$i" 2>/dev/null;
|
|
else
|
|
$FC -c $CHARSET -f $FNT "$i";
|
|
fi;
|
|
done;
|
|
|
|
for i in *.bdf; do
|
|
if [ "$i" == "*.bdf" ]; then
|
|
echo "No fonts extracted"; rm -rf "$TMPDIR"; exit 0;
|
|
fi;
|
|
bdftopcf "$i" | gzip -c > ${i%.???}.pcf.gz;
|
|
$Q echo "installing ${i%.???}.pcfi.gz";
|
|
mv "${i%.???}.pcf.gz" $TARGET 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
$Q echo "Can't install fonts to $TARGET. Try again as the root user.";
|
|
$Q echo "Cleaning up..."; cd "$OLDPWD"; rm -rf "$TMPDIR"; exit 1;
|
|
fi;
|
|
rm "$i";
|
|
done;
|
|
|
|
cd $TARGET;
|
|
$Q echo "running mkfontdir";
|
|
if [ "$Q" ]; then
|
|
mkfontdir 1>/dev/null 2>/dev/null;
|
|
else
|
|
mkfontdir
|
|
fi;
|
|
rm -rf "$TMPDIR"
|
|
|
|
if [ "$DISPLAY" ]; then $Q echo "adjusting X font database"; xset fp rehash; fi;
|