font_convert.sh 4.45 KB
Newer Older
1
#! /bin/bash
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#
# 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
#
19 20 21

# default settings
TMPDIR=/tmp/fconv.$$;
22 23 24 25 26
if [ -f `which mktemp` ]; then
  TFILE=`mktemp -q /tmp/fconv.XXXXXX`
else
  TFILE=`tempfile`;
fi
27

28
# Where the fnt2bdf utility resides
29 30 31
FC=`which fnt2bdf`;
if [ -z "$FC" ]; then FC=$HOME""/wine/tools/fnt2bdf; fi;

32 33 34 35 36 37
# which OEM_CHARSET to use
CHARSET="winsys";
TARGET=/usr/X11R6/lib/X11/fonts/misc;
BDFTOPCF=/usr/X11R6/bin/bdftopcf;
PAT="*.fon";
Q="";
38
OLDPWD=`pwd`;
39 40 41 42

usage () {
    echo "usage: "`basename $0`" [-q] [-c charset] [-t fontdir] [-b bdftopcf] [-f fnt2bdf]"
    echo "       [-p pattern] windir"
43
    echo
44 45 46
    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."
47
    echo
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
    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; ;;
74
	* ) if [ "$WIND" ]; then usage; else WIND=$1; shift; fi; ;;
75 76 77 78 79 80 81 82 83
    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; }

84 85
$Q echo -n "looking for bitmap fonts (\"$PAT\") in directory \"$WIND\"... ";
FONTS=`find $WIND -iname "$PAT" 1>$TFILE 2>/dev/null`;
86
if [ $? -ne 0 ]; then
87
    $Q echo "$PAT is an invalid search expression"; exit 1;
88 89
fi;
i=0;
90

91 92 93 94
{ while read dummy; do FONTS[$i]="$dummy"; i=$[$i+1]; done; } < $TFILE
rm $TFILE;
$Q echo "done."

95
if [ -z "$FONTS" ]; then $Q echo "Can't find any fonts in $WIND"; exit 1; fi;
96

97
mkdir "$TMPDIR"
98
for i in "${FONTS[@]}"; do cp $i $TMPDIR; done
99
cd "$TMPDIR"
100

101
for i in "${FONTS[@]}"; do
102 103
    FNT=`basename "$i"`; FNT=${FNT%.???};
    $Q echo "converting $i";
104
    if [ "$Q" ]; then
105 106 107 108 109 110 111
	$FC -c $CHARSET -f $FNT "$i" 2>/dev/null;
    else
	$FC -c $CHARSET -f $FNT "$i";
    fi;
done;

for i in *.bdf; do
112
    if [ "$i" = "*.bdf" ]; then
113 114 115 116 117
       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
118
    if [ $? -ne 0 ]; then
119 120 121
	$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;
122 123 124 125
    rm "$i";
done;

cd $TARGET;
126
$Q echo "running mkfontdir";
127 128 129 130 131
if [ "$Q" ]; then
    mkfontdir 1>/dev/null 2>/dev/null;
else
    mkfontdir
fi;
132
rm -rf "$TMPDIR"
133 134

if [ "$DISPLAY" ]; then $Q echo "adjusting X font database"; xset fp rehash; fi;