From d62b7f1f8a3c27c3cd51d4eb41d51e8aba545217 Mon Sep 17 00:00:00 2001
From: Peter Breitenlohner <peb@mppmu.mpg.de>
Date: Sun, 19 Dec 2010 15:40:03 +0000
Subject: cjk/utils 4.8.2 plus changes from Akira

git-svn-id: svn://tug.org/texlive/trunk@20806 c570f23f-e606-0410-a88d-b1316a301751
---
 Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex | 2928 --------------------------
 1 file changed, 2928 deletions(-)
 delete mode 100644 Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex

(limited to 'Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex')

diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex
deleted file mode 100644
index c637786b20e..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex
+++ /dev/null
@@ -1,2928 +0,0 @@
-\input cwebmac
-% This is the cweb file hbf2gf.w of the CJK package ver. 4.7.0  17-Oct-2006
-
-% Copyright (C) 1994-2006  Werner Lemberg <wl@gnu.org>
-%
-% 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 in doc/COPYING; if not, write to the Free
-% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-% MA 02110-1301 USA
-
-% To print this CWEB file you should (but not must) use the CWEAVE of the
-% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say
-%
-%           cweave +ai hbf2gf.w
-%
-% This (fully compatible) CWEAVE can transform CWEB-files with alternative
-% output rules (look at the position of braces below!) the author (it's me
-% too :-) prefer. Otherwise this file will be formatted traditionally.
-
-\font\meta=logo10
-\def\mf{{\meta META}\-{\meta FONT}}
-\def\Om{\char "0A}                      % Omega symbol
-
-\def\title{hbf2gf (CJK Version 4.7.0)}
-
-\def\topofcontents{
-  \null\vfill
-  \centerline{\titlefont The {\ttitlefont hbf2gf} program}
-  \vskip 20pt
-  \centerline{(CJK Version 4.7.0)}
-  \vfill}
-
-\def\botofcontents{
-  \vfill
-  \noindent
-  Copyright \copyright~1996-1999 by Werner Lemberg
-  \bigskip\noindent
-  Permission is granted to make and distribute verbatim copies of this
-  document provided that the copyright notice and this permission notice are
-  preserved on all copies.
-
-  \smallskip\noindent
-  Permission is granted to copy and distribute modified versions of this
-  document under the conditions for verbatim copying, provided that the
-  entire resulting derived work is distributed under the terms of a
-  permission notice identical to this one.}
-
-\pageno=\contentspagenumber \advance\pageno by 1
-\let\maybe=\iftrue
-\fullpageheight=240mm
-\pageheight=223mm
-\pagewidth=158mm
-\setpage
-\frenchspacing
-
-
-\def\msdos{\.{msdos}}
-
-
-
-
-
-\N{1}{1}Introduction.
-This is the \.{hbf2gf} program by Werner Lemberg
-(\.{wl@gnu.org}).
-
-The ``banner line'' defined here should be changed whenever \.{hbf2gf} is
-modified.
-
-\Y\B\4\D$\\{banner}$ \5
-\.{"hbf2gf\ (CJK\ ver.\ 4.}\)\.{7.0)"}\par
-\fi
-
-\M{2}
-\.{hbf2gf} is intended to convert Hanzi Bitmap Fonts (HBF) into \TeX\
-generic font files (\.{GF} files) according to the \\{CJK} package, which
-\.{hbf2gf} is part of.
-
-The outline of \.{hbf2gf} is simple: a CJK (Chinese/Japanese/Korean) bitmap
-file will be scaled and written in at most \PB{\\{nmb\_files}} \.{GF} files,
-each
-file containing \PB{\T{256}}~characters (except the last and possibly the first
-one). In the normal case it's not necessary to compute the right value of
-\PB{\\{nmb\_files}} because \.{hbf2gf} will do this; you should use \PB{${-}%
-\T{1}$} instead to
-indicate this. See the last section for an example.
-
-Alternatively you can call \.{hbf2gf} similar to \mf, i.e., the program will
-compute one font on demand. This mode will be used if two or three input
-parameters instead of one are given: the font name, the horizontal
-resolution, and optionally a vertical scaling factor or resolution to allow
-modes for e.g.\ $300\times600\,\hbox{dpi}$ printers. \.{hbf2gf} will extract
-the configuration file name from the font name; if this file isn't found,
-the program exits with error code~\PB{\T{2}} (this is useful for scripts like
-\.{mktexpk}). If the configuration file is found but an error occurs while
-computing the font, error code~\PB{\T{1}} is returned. In case of success, the
-exit
-code is zero.
-
-The characters in the input font files are completely described by the HBF
-header file. This program uses the HBF API implementation of Ross Paterson
-(\.{ross@soi.city.ac.uk}; with small extensions). You will find a
-description of the HBF standard at \.{ftp.ifcss.org}.
-
-A batch file created by \.{hbf2gf} too (if the program computes a whole set
-of subfonts) will convert the \.{GF} files to \.{PK} files using
-\.{GFtoPK}, a part of every \TeX\ package.
-
-\Y\B\4\D$\.{TRUE}$ \5
-\T{1}\par
-\B\4\D$\.{FALSE}$ \5
-\T{0}\Y\par
-\B\4\D$\.{STRING\_LENGTH}$ \5
-\T{255}\C{ the maximal length of an input string in the configuration file }\par
-\B\4\D$\.{FILE\_NAME\_LENGTH}$ \5
-\T{1024}\C{ the maximal length (including the path) of a filename }\Y\par
-\Y\B\4\X2:Global variables\X${}\E{}$\6
-\&{int} \\{nmb\_files}${}\K{-}\T{1}{}$;\C{ create all files by default }\6
-\&{int} \\{unicode}${}\K\.{FALSE}{}$;\C{ whether a Unicode font should be
-processed }\7
-\&{int} \\{testing}${}\K\.{FALSE}{}$;\C{ whether we test only the font name }\7
-\&{int} \\{mf\_like}${}\K\.{FALSE}{}$;\C{ whether we are in the \mf-like mode }%
-\6
-\&{int} \\{file\_number}${}\K\T{0}{}$;\C{ the subfont number }\7
-\&{double} \\{x\_resolution}${}\K\T{0.0}{}$;\C{ the second and third input
-parameter }\6
-\&{double} \\{y\_scale}${}\K\T{1.0}{}$;\7
-\&{int} \\{pk\_files}${}\K\.{TRUE}{}$;\C{ command line options }\6
-\&{int} \\{tfm\_files}${}\K\.{TRUE};{}$\6
-\&{int} \\{long\_extension}${}\K\.{TRUE};{}$\6
-\&{int} \\{quiet}${}\K\.{FALSE}{}$;\7
-\&{char} ${}\\{config\_file}[\.{FILE\_NAME\_LENGTH}+\T{4}+\T{1}]{}$;\C{ we
-probably must add `\.{.cfg}' }\6
-\&{char} ${}\\{output\_name}[\.{STRING\_LENGTH}+\T{1}]{}$;\7
-\&{FILE} ${}{*}\\{config},{}$ ${}{*}\\{out};{}$\6
-\&{HBF} ${}{*}\\{hbf}{}$;\7
-\8\#\&{ifdef} ${}\msdos{}$\C{ if we compile under DOS or OS/2 }\6
-\8\#\&{define} \.{WRITE\_BIN} \5\.{"wb"}\6
-\8\#\&{define} \.{WRITE\_TXT} \5\.{"wt"}\6
-\8\#\&{define} \.{READ\_BIN} \5\.{"rb"}\6
-\8\#\&{define} \.{READ\_TXT} \5\.{"rt"}\6
-\8\#\&{else}\6
-\8\#\&{define} \.{WRITE\_BIN} \5\.{"w"}\6
-\8\#\&{define} \.{WRITE\_TXT} \5\.{"w"}\6
-\8\#\&{define} \.{READ\_BIN} \5\.{"r"}\6
-\8\#\&{define} \.{READ\_TXT} \5\.{"r"}\6
-\8\#\&{endif}\7
-\&{int} \\{end\_of\_file}${}\K\.{FALSE}{}$;\par
-\As15, 19, 27, 38, 49, 53, 58, 60, 62, 70, 73\ETs76.
-\U4.\fi
-
-\M{3}
-One \.{PL} file will be created additionally, which describes the font
-metrics in a readable way. Because all CJK characters have identical
-bounding boxes, one metrics file is enough---the batch job created by
-\.{hbf2gf} calls \.{PLtoTF} to produce this \.{TFM} file and then copies
-it into \PB{\\{nmb\_files}} metrics files. There usually will be a discrepancy
-between the number of characters in the last \.{GF} file and the
-\.{TFM} file, but this does not harm.
-
-If you specify the \.{ofm\_file} option in the configuration file, an
-extended virtual property file (such files have the extension \.{.ovp}) for
-the \Om\ system is written; this will be then converted with
-\.{ovp2ovf} into an \.{OFM} and an \.{OVF} file to map all the subfonts
-into one large virtual font.
-
-
-
-\fi
-
-\N{1}{4}The main routine.
-The main routine takes \PB{\\{file\_name}}, \PB{\\{x\_resolution}}, and \PB{%
-\\{y\_scale}} as command
-line parameters if in \mf-like mode, otherwise \PB{\\{config\_file}} as the
-only
-argument. \PB{\\{read\_config}(\,)} scans the configuration file and fills the
-global
-variables, \PB{\\{write\_file}(\,)} writes the \.{GF} files, \PB{\\{write\_pl}(%
-\,)} and
-\PB{\\{write\_ovp}(\,)} write the \.{PL} and \.{OVP} files respectively, and
-\PB{\\{write\_job}(\,)} the batch file.
-
-\Y\B\X10:Include files\X\6
-\X11:Prototypes\X\6
-\X2:Global variables\X\7
-\&{int} \\{main}(\&{int} \\{argc}${},\39{}$\&{char} ${}{*}\\{argv}[\,]){}$\1\1%
-\2\2\6
-${}\{{}$\1\6
-\&{char} ${}{*}\|p;{}$\7
-\X78:Initialize \TeX\ file searching\X\7
-\X7:Scan options\X\7
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"\\n\%s\\n\\n"},\39\\{banner}){}$;\2\7
-${}\\{strncpy}(\\{config\_file},\39\\{argv}[\T{1}],\39\.{FILE\_NAME%
-\_LENGTH});{}$\6
-${}\\{config\_file}[\.{FILE\_NAME\_LENGTH}]\K\.{'\\0'}{}$;\7
-\&{if} ${}(\\{argc}>\T{2}\V\\{testing}){}$\5
-${}\{{}$\1\6
-\&{int} \|l${}\K\\{strlen}(\\{config\_file});{}$\7
-\&{if} ${}(\|l>\T{2}){}$\1\5
-${}\\{config\_file}[\|l-\T{2}]\K\.{'\\0'}{}$;\C{ strip subfont number from file
-name }\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"`\%s'\ can't\ be\ a\ sub}\)\.{font\ created\ by\ hbf2}\)\.{gf%
-\\n"},\39\\{config\_file});{}$\2\6
-\\{exit}(\T{2});\6
-\4${}\}{}$\2\7
-${}\\{mf\_like}\K\.{TRUE};{}$\6
-\4${}\}{}$\2\7
-\\{read\_config}(\,);\C{ will call \PB{\\{exit}(\T{1})} on errors }\7
-\&{if} (\\{mf\_like})\1\5
-\X8:Check other arguments\X\2\7
-\X28:Initialize variables\X\7
-\X9:Write files\X\7
-\&{if} (\\{tfm\_files})\1\5
-\\{write\_pl}(\,);\2\6
-\&{if} (\\{ofm\_file})\1\5
-\\{write\_ovp}(\,);\2\6
-\&{if} ${}(\R\\{mf\_like}){}$\1\5
-\\{write\_job}(\,);\2\7
-\\{hbfClose}(\\{hbf});\7
-\\{exit}(\T{0});\6
-\&{return} \T{0};\C{ never reached }\6
-\4${}\}{}$\2\par
-\fi
-
-\M{5}
-\Y\B\4\D$\.{HBF2GF\_VERSION}$ \6
-\.{"\\n"}\6
-\.{"Copyright\ (C)\ 1996-}\)\.{1999\ Werner\ Lemberg.}\)\.{\\n"}\6
-\.{"There\ is\ NO\ warrant}\)\.{y.\ \ You\ may\ redistri}\)\.{bute\ this\
-software\\n}\)\.{"}\6
-\.{"under\ the\ terms\ of\ }\)\.{the\ GNU\ General\ Publ}\)\.{ic\ License\\n"}\6
-\.{"and\ the\ HBF\ library}\)\.{\ copyright.\\n"}\6
-\.{"\\n"}\6
-\.{"For\ more\ informatio}\)\.{n\ about\ these\ matter}\)\.{s,\ see\ the\ files%
-\\n"}\6
-\.{"named\ COPYING\ and\ h}\)\.{bf.c.\\n"}\6
-\.{"\\n"}\par
-\Y\B\4\X5:Print version\X${}\E{}$\6
-${}\{{}$\1\6
-\\{printf}(\.{"\\n"});\6
-\\{printf}(\\{banner});\6
-${}\\{printf}(\.{"\ (\%s)\\n"},\39\\{TeX\_search\_version}(\,));{}$\6
-\\{printf}(\.{HBF2GF\_VERSION});\6
-\\{exit}(\T{0});\6
-\4${}\}{}$\2\par
-\U7.\fi
-
-\M{6}
-\Y\B\4\D$\.{USAGE}$ \6
-\.{"\\n"}\6
-\.{"Usage:\ hbf2gf\ [-q]\ }\)\.{configuration\_file[.}\)\.{cfg]\\n"}\6
-\.{"\ \ \ \ \ \ \ hbf2gf\ [opti}\)\.{ons]\ font\_name\ x\_res}\)\.{olution\ [y%
-\_scale\ |\ y}\)\.{\_resolution]\\n"}\6
-\.{"\ \ \ \ \ \ \ hbf2gf\ -t\ [-}\)\.{q]\ font\_name\\n"}\6
-\.{"\\n"}\6
-\.{"\ \ Convert\ a\ font\ in}\)\.{\ HBF\ format\ to\ TeX's}\)\.{\ GF\ resp.\ PK%
-\ format.}\)\.{\\n"}\6
-\.{"\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ -q\ \ \ \ \ \ \ \ }\)\.{\ \ \ \ \ be\ silent\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ -p\ \ \ \ \ \ \ \ }\)\.{\ \ \ \ \ don't\ produce\ a}\)\.{%
-\ PL\ file\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ -g\ \ \ \ \ \ \ \ }\)\.{\ \ \ \ \ don't\ produce\ a}\)\.{%
-\ GF\ file\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ -n\ \ \ \ \ \ \ \ }\)\.{\ \ \ \ \ use\ no\ resoluti}\)%
-\.{on\ in\ extension\ (onl}\)\.{y\ `.gf')\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ -t\ \ \ \ \ \ \ \ }\)\.{\ \ \ \ \ test\ for\ font\_n}\)%
-\.{ame\ (returns\ 0\ on\ su}\)\.{ccess)\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ --help\ \ \ \ }\)\.{\ \ \ \ \ print\ this\ mess}\)\.{age\
-and\ exit\\n"}\6
-\.{"\ \ \ \ \ \ \ \ \ --version\ }\)\.{\ \ \ \ \ print\ version\ n}\)\.{umber\
-and\ exit\\n"}\6
-\.{"\\n"}\par
-\Y\B\4\X6:Print help information\X${}\E{}$\6
-${}\{{}$\1\6
-\\{printf}(\.{USAGE});\6
-\\{exit}(\T{0});\6
-\4${}\}{}$\2\par
-\U7.\fi
-
-\M{7}
-Three options can be specified to the program (\.{-p}, \.{-g}, and \.{-n})
-if in \mf-like mode to suppress creation of a \.{PL} resp.\ a
-\.{GF} file, and to force a `\.{.gf}' extension (instead of
-e.g.\ `\.{.300gf}'). The corresponding setting of a particular switch in the
-configuration file is ignored then.
-
-Additionally, the option \.{-t} tests whether the specified subfont name
-leads to an \.{hbf2gf} configuration file. It returns 0 on success and prints
-out the name of that configuration file (provided the \.{-q} switch isn't
-set). This test isn't a thorough one; it only removes the last two characters
-and checks whether a configuration file with that name exists.
-
-\Y\B\4\X7:Scan options\X${}\E{}$\6
-\&{if} ${}(\\{argc}\E\T{2}){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{strcmp}(\\{argv}[\T{1}],\39\.{"--help"})\E\T{0}){}$\1\5
-\X6:Print help information\X\2\6
-\&{else} \&{if} ${}(\\{strcmp}(\\{argv}[\T{1}],\39\.{"--version"})\E\T{0}){}$\1%
-\5
-\X5:Print version\X\2\6
-\4${}\}{}$\2\7
-\&{while} ${}(\\{argc}>\T{1}){}$\5
-${}\{{}$\1\6
-${}\|p\K\\{argv}[\T{1}];{}$\6
-\&{if} ${}(\|p[\T{0}]\I\.{'-'}){}$\1\5
-\&{break};\2\6
-\&{if} ${}(\|p[\T{1}]\E\.{'p'}){}$\1\5
-${}\\{tfm\_files}\K\.{FALSE};{}$\2\6
-\&{else} \&{if} ${}(\|p[\T{1}]\E\.{'g'}){}$\1\5
-${}\\{pk\_files}\K\.{FALSE};{}$\2\6
-\&{else} \&{if} ${}(\|p[\T{1}]\E\.{'n'}){}$\1\5
-${}\\{long\_extension}\K\.{FALSE};{}$\2\6
-\&{else} \&{if} ${}(\|p[\T{1}]\E\.{'q'}){}$\1\5
-${}\\{quiet}\K\.{TRUE};{}$\2\6
-\&{else} \&{if} ${}(\|p[\T{1}]\E\.{'t'}){}$\1\5
-${}\\{testing}\K\.{TRUE}{}$;\2\7
-${}\\{argv}\PP;{}$\6
-${}\\{argc}\MM;{}$\6
-\4${}\}{}$\2\7
-\&{if} (\\{testing})\5
-${}\{{}$\1\6
-\&{if} ${}(\\{argc}\I\T{2}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Need\ exactly\ one\ pa}\)\.{rameter\ for\ `-t'%
-\ opt}\)\.{ion.\\n"});{}$\6
-${}\\{fprintf}(\\{stderr},\39\.{"Try\ `hbf2gf\ --help'}\)\.{\ for\ more\
-informatio}\)\.{n.\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else} \&{if} ${}(\\{argc}<\T{2}\V\\{argc}>\T{4}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ number\ of\ p}\)\.{arameters.%
-\\n"});{}$\6
-${}\\{fprintf}(\\{stderr},\39\.{"Try\ `hbf2gf\ --help'}\)\.{\ for\ more\
-informatio}\)\.{n.\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\Y\par
-\U4.\fi
-
-\M{8}
-If the (optional) argument is larger than~\PB{\T{10}}, we treat it as a value
-for
-the vertical resolution (in dpi), otherwise as a vertical scaling factor.
-
-\Y\B\4\X8:Check other arguments\X${}\E{}$\6
-${}\{{}$\1\6
-\&{if} (\\{unicode})\1\5
-${}\\{file\_number}\K{}$(\&{int}) \\{strtol}${}({\AND}\\{argv}[\T{1}][%
-\\{strlen}(\\{argv}[\T{1}])-\T{2}],\39{}$(\&{char} ${}{*}{*}){}$ ${}\NULL,\39%
-\T{16});{}$\2\6
-\&{else}\1\5
-${}\\{file\_number}\K\\{atoi}({\AND}\\{argv}[\T{1}][\\{strlen}(\\{argv}[%
-\T{1}])-\T{2}]){}$;\2\7
-${}\\{x\_resolution}\K\\{atof}(\\{argv}[\T{2}]);{}$\6
-\&{if} ${}(\\{x\_resolution}<\.{PRINTER\_MIN\_RES\_X}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ horizontal\ }\)\.{resolution%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{if} ${}(\\{argc}>\T{3}){}$\5
-${}\{{}$\1\6
-${}\\{y\_scale}\K\\{atof}(\\{argv}[\T{3}]);{}$\6
-\&{if} ${}(\\{y\_scale}<\T{0.01}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ vertical\ sc}\)\.{aling\ factor\ or\
-reso}\)\.{lution\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{y\_scale}>\T{10.0}){}$\1\5
-${}\\{y\_scale}\K{}$(\&{double}) \\{x\_resolution}${}/\\{y\_scale};{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\U4.\fi
-
-\M{9}
-If \PB{\\{unicode}} is \PB{\.{TRUE}}, the start value of the running number
-appended to
-the base name of the output font files is taken from the HBF header file,
-otherwise it starts with~`\.{01}'. \PB{\\{min\_char}} represents the lower
-bound of
-the code range.
-
-If we are in \mf-like mode, \PB{\\{file\_number}} is taken from the command
-line,
-and \PB{\\{max\_numb}} will be set to~\PB{\T{1}}.
-
-\Y\B\4\X9:Write files\X${}\E{}$\6
-${}\{{}$\1\6
-\&{int} \|j${},{}$ \\{max\_numb};\7
-\&{if} ${}(\R\\{mf\_like}){}$\5
-${}\{{}$\1\6
-${}\\{file\_number}\K(\\{unicode}\E\.{TRUE}\?(\\{min\_char}\GG\T{8}):\T{1});{}$%
-\6
-\&{if} ${}(\\{nmb\_files}\E{-}\T{1}){}$\1\5
-${}\\{max\_numb}\K(\\{unicode}\E\.{TRUE}\?\T{\^100}:\T{100});{}$\2\6
-\&{else}\1\5
-${}\\{max\_numb}\K\\{nmb\_files};{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-${}\\{max\_numb}\K\T{1}{}$;\2\7
-\&{for} ${}(\|j\K\T{0};{}$ ${}(\|j<\\{max\_numb})\W\R\\{end\_of\_file};{}$ ${}%
-\\{file\_number}\PP,\39\|j\PP){}$\1\5
-\\{write\_file}(\,);\2\7
-${}\\{nmb\_files}\K\|j{}$;\C{ the real number of output font files }\6
-\4${}\}{}$\2\par
-\U4.\fi
-
-\M{10}
-\Y\B\4\X10:Include files\X${}\E{}$\6
-\8\#\&{ifdef} \.{HAVE\_CONFIG\_H}\6
-\8\#\&{include} \.{"c-auto.h"}\6
-\8\#\&{endif}\6
-\8\#\&{include} \.{<ctype.h>}\6
-\8\#\&{include} \.{<stdio.h>}\6
-\8\#\&{include} \.{<stdlib.h>}\6
-\8\#\&{include} \.{<string.h>}\6
-\8\#\&{include} \.{<time.h>}\6
-\8\#\&{ifdef} \.{TM\_IN\_SYS\_TIME}\6
-\8\#\&{include} \.{<sys/time.h>}\6
-\8\#\&{endif}\6
-\8\#\&{include} \.{"hbf.h"}\par
-\A69.
-\U4.\fi
-
-\N{1}{11}The functions.
-The first function to be described is \PB{\\{write\_file}(\,)}. Each \.{GF}
-file
-consists of three sections: a preamble, a data section, and a postamble. The
-functions \PB{\\{write\_pre}(\,)}, \PB{\\{write\_data}(\,)}, and \PB{\\{write%
-\_post}(\,)} handle this.
-
-\Y\B\4\X11:Prototypes\X${}\E{}$\6
-\&{void} \\{write\_file}(\&{void});\par
-\As13, 16, 20, 25, 29, 36, 39, 41, 45, 47, 50, 54, 64, 67, 71, 74\ETs79.
-\U4.\fi
-
-\M{12}
-In \mf-like mode we create font file name extensions similar to \mf\ if
-the \.{-n} option isn't specified; otherwise only `\.{.gf}' will be appended.
-
-\Y\B\&{void} \\{write\_file}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{char} ${}\\{output\_file}[\.{FILE\_NAME\_LENGTH}+\T{1}];{}$\7
-\&{if} (\\{pk\_files})\5
-${}\{{}$\1\6
-\&{if} (\\{mf\_like})\5
-${}\{{}$\1\6
-\&{if} (\\{unicode})\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02x.\%.0igf"},{}$\6
-\\{output\_name}${},\39\\{file\_number},\39\\{long\_extension}\?(\&{int})(\\{x%
-\_resolution}+\T{0.5}):\T{0});{}$\2\6
-\&{else}\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02i.\%.0igf"},{}$\6
-\\{output\_name}${},\39\\{file\_number},\39\\{long\_extension}\?(\&{int})(\\{x%
-\_resolution}+\T{0.5}):\T{0});{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} (\\{unicode})\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02x.gf"},\39\\{output\_name},\39%
-\\{file\_number});{}$\2\6
-\&{else}\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02i.gf"},\39\\{output\_name},\39%
-\\{file\_number});{}$\2\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R(\\{out}\K\\{fopen}(\\{output\_file},\39\.{WRITE\_BIN}))){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ open\ `\%s'\\}\)\.{n"},\39\\{output%
-\_file});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"Writing\ `\%s'\ "},\39\\{output\_file}){}$;\2\7
-\\{write\_pre}(\,);\6
-\\{write\_data}(\,);\6
-\\{write\_post}(\,);\6
-\\{fclose}(\\{out});\7
-\&{if} ${}(\R\\{quiet}){}$\1\5
-\\{printf}(\.{"\\n"});\2\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-\\{write\_data}(\,);\2\6
-\4${}\}{}$\2\par
-\fi
-
-\M{13}
-The preamble has two bytes at the very beginning, \PB{\.{PRE}} and \PB{\.{GF%
-\_ID}}. \PB{\.{PRE}}
-starts the preamble, and \PB{\.{GF\_ID}} is the Generic Font Identity Byte. The
-next
-bytes are a string in Pascal format containing a header, the date, and the
-time. Strings in Pascal format start with the length of the string and have
-no terminating NULL byte.
-
-\Y\B\4\D$\.{GF\_ID}$ \5
-\T{131}\par
-\B\4\D$\.{PRE}$ \5
-\T{247}\Y\par
-\B\4\D$\\{header}$ \5
-\.{"\ hbf2gf\ output\ "}\par
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_pre}(\&{void});\par
-\fi
-
-\M{14}
-\Y\B\&{void} \\{write\_pre}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{char} \\{out\_s}[\T{40}]${},{}$ \|s[\T{20}];\6
-\&{time\_t} \\{secs\_now};\6
-\&{struct} \&{tm} ${}{*}\\{time\_now};{}$\7
-${}\\{strcpy}(\\{out\_s},\39\\{header}){}$;\7
-${}\\{secs\_now}\K\\{time}(\NULL){}$;\C{ system date and time }\6
-${}\\{time\_now}\K\\{localtime}({\AND}\\{secs\_now});{}$\6
-${}\\{strftime}(\|s,\39\T{20},\39\.{"\%Y.\%m.\%d:\%H.\%M"},\39\\{time%
-\_now});{}$\6
-${}\\{strcat}(\\{out\_s},\39\|s){}$;\7
-${}\\{fputc}(\.{PRE},\39\\{out});{}$\6
-${}\\{fputc}(\.{GF\_ID},\39\\{out});{}$\6
-${}\\{fputc}(\\{strlen}(\\{out\_s}),\39\\{out});{}$\6
-${}\\{fputs}(\\{out\_s},\39\\{out});{}$\6
-\4${}\}{}$\2\par
-\fi
-
-\M{15}
-\PB{\\{write\_data}(\,)} produces the middle part of the \.{GF} file. It first
-sets
-\PB{\\{char\_adr\_p}} equal to the address of \PB{\\{char\_adr}[\,]} which will
-contain file
-offsets of the compressed characters.
-
-\PB{\\{input\_size\_x}} and \PB{\\{input\_size\_y}} reflect the original
-dimensions of the
-bitmap font, \PB{\\{pk\_output\_size\_x}} and \PB{\\{pk\_output\_size\_y}}
-contain the width and
-height of the output character box (in pixels), \PB{\\{pk\_offset\_x}} and
-\PB{\\{pk\_offset\_y}} define the baseline of the font. The same names starting
-with
-`\\{tfm\_}' instead of `\\{pk\_}' are used for \.{TFM} files (values are
-multiples of design size). \PB{\\{mag\_x}} and \PB{\\{mag\_y}} hold the scaling
-factors
-which are needed to reach \PB{\\{design\_size}}. \PB{\\{slant}} defines the
-slant ($\Delta
-x / \Delta y$), \PB{\\{target\_size\_x}} and \PB{\\{target\_size\_y}} will be
-the final
-dimensions; \PB{$\\{magstep\_x}\K\\{target\_size\_x}/\\{design\_size}$} is %
-\TeX's
-\.{\\magstep}.
-
-The \CEE/ standard specifies that all global values will be automatically
-set to~\PB{\T{0}} if no initialization value is given.
-
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{long} \\{char\_adr}[\T{256}];\6
-\&{long} ${}{*}\\{char\_adr\_p}{}$;\7
-\&{int} \\{pk\_offset\_x};\C{ horizontal offset (increase character width a
-bit; will be applied on          both the left and the right side) }\6
-\&{double} \\{tfm\_offset\_x};\6
-\&{int} \\{pk\_offset\_y};\C{ vertical offset (must be configured to desired
-font size) }\6
-\&{double} \\{tfm\_offset\_y};\7
-\&{int} \\{input\_size\_x};\6
-\&{int} \\{input\_size\_y};\6
-\&{const} \&{char} ${}{*}\\{font\_encoding}{}$;\C{ taken from the HBF file }\6
-\&{int} \\{pk\_width};\C{ without slant }\6
-\&{int} \\{pk\_output\_size\_x};\C{ the output character box dimensions without
-offsets }\6
-\&{double} \\{tfm\_output\_size\_x};\6
-\&{int} \\{pk\_output\_size\_y};\6
-\&{double} \\{tfm\_output\_size\_y};\7
-\&{double} \\{design\_size}${}\K\T{10.0}{}$;\C{ in points }\6
-\&{double} \\{target\_size\_x};\C{ in points }\6
-\&{double} \\{target\_size\_y};\6
-\&{double} \\{magstep\_x};\6
-\&{double} \\{magstep\_y};\6
-\&{double} \\{slant};\6
-\&{int} \\{rotation};\7
-\&{double} \\{mag\_x};\C{ horizontal and vertical magnification values }\6
-\&{double} \\{mag\_y};\7
-\&{int} \\{empty\_char};\C{ a flag whether the character does not exist or is
-empty }\6
-\&{int} \\{last\_char};\C{ the last valid character in a \.{GF} file }\7
-\&{int} \\{dot\_count};\C{ this counts the processed characters;
-   every ten characters a dot is output to the screen }\par
-\fi
-
-\M{16}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_data}(\&{void});\par
-\fi
-
-\M{17}
-\Y\B\&{void} \\{write\_data}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-${}\\{dot\_count}\K\T{0};{}$\6
-${}\\{char\_adr\_p}\K\\{char\_adr}{}$;\7
-\&{for} ${}(\\{last\_char}\K\T{0};{}$ ${}(\\{last\_char}<\T{256})\W\R\\{end\_of%
-\_file};{}$ ${}\\{last\_char}\PP){}$\1\5
-\X18:Write character\X\2\6
-\4${}\}{}$\2\par
-\fi
-
-\M{18}
-The code in this section saves the current file position first and calls
-\PB{\\{make\_pixel\_array}(\,)}, which expands and scales the character bitmap.
-
-\PB{\.{BOC}} (and \PB{\.{BOC1}}), the Begin Of Character command byte, must be
-followed by
-the character code and the dimensions of the character as explained in
-``\mf---the program'' (corrected by vertical and horizontal offsets).
-
-\PB{\\{write\_coding}(\,)} compresses and outputs the bitmap; \PB{\.{EOC}} (End
-Of Character)
-finishes the current character.
-
-\Y\B\4\D$\.{BOC}$ \5
-\T{67}\par
-\B\4\D$\.{BOC1}$ \5
-\T{68}\C{ simplified version of \PB{\.{BOC}} }\par
-\B\4\D$\.{EOC}$ \5
-\T{69}\par
-\Y\B\4\X18:Write character\X${}\E{}$\6
-${}\{{}$\1\6
-\&{if} ${}(\\{dot\_count}\PP\MOD\T{10}\E\T{0}{}$)\C{ a progress report for
-impatient users }\1\6
-\&{if} ${}(\\{pk\_files}\W\R\\{quiet}){}$\5
-${}\{{}$\1\6
-\\{printf}(\.{"."});\6
-\\{fflush}(\\{stdout});\6
-\4${}\}{}$\2\2\7
-${}\\{empty\_char}\K\.{FALSE};{}$\6
-\\{make\_pixel\_array}(\,);\6
-\&{if} (\\{end\_of\_file})\1\5
-\&{return};\2\7
-\&{if} (\\{pk\_files})\5
-${}\{{}$\1\6
-${}{*}\\{char\_adr\_p}\K\\{ftell}(\\{out});{}$\6
-${}\\{char\_adr\_p}\PP{}$;\7
-\&{if} (\\{empty\_char})\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{BOC1},\39\\{out});{}$\6
-\\{fputc}((\&{unsigned} \&{char}) \\{last\_char}${},\39\\{out});{}$\6
-${}\\{fputc}(\T{0},\39\\{out});{}$\6
-${}\\{fputc}(\T{0},\39\\{out});{}$\6
-${}\\{fputc}(\T{0},\39\\{out});{}$\6
-${}\\{fputc}(\T{0},\39\\{out});{}$\6
-${}\\{fputc}(\.{EOC},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{BOC},\39\\{out});{}$\6
-${}\\{fputl}(\\{last\_char},\39\\{out});{}$\6
-${}\\{fputl}({-}\T{1\$L},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_offset\_x},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_output\_size\_x}+\\{pk\_offset\_x},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_offset\_y},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_output\_size\_y}+\\{pk\_offset\_y},\39\\{out}){}$;\7
-\\{write\_coding}(\,);\7
-${}\\{fputc}(\.{EOC},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\U17.\fi
-
-\M{19}
-The current \.{GF} file will be completed with data written by
-\PB{\\{write\_post}(\,)}. The end consists of three sections: ``special'',
-``post'',
-and ``postpost''. The first contains material not used by \TeX\ itself but
-which can be used by other programs like \.{GFtoDVI} or for documentary
-purposes (\PB{\\{coding}[\,]} and \PB{\\{comment}[\,]}). The second describes
-the font as a
-whole, and the last marks the end of the file.
-
-\PB{\\{pk\_total\_min\_x}} up to \PB{\\{pk\_total\_max\_y}} define the greatest
-bounding box of
-this file (including offsets); the horizontal character escapement after
-drawing the character is \PB{\\{pk\_dx}}. \PB{\\{tfm\_width}} is the width in
-multiples of
-the design size ignoring the target size.
-
-\Y\B\4\D$\.{\_2\_16}$ \5
-\T{65536.0}\C{ $2^{16}$ }\par
-\B\4\D$\.{\_2\_20}$ \5
-\T{1048576.0}\C{ $2^{20}$ }\par
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{char} ${}\\{coding}[\.{STRING\_LENGTH}+\T{1}]{}$;\C{ a comment describing
-the font encoding }\6
-\&{char} ${}\\{comment}[\.{STRING\_LENGTH}+\T{1}]{}$;\C{ a comment describing
-the font }\7
-\&{unsigned} \&{long} \\{checksum};\7
-\&{long} \\{pk\_total\_min\_x};\6
-\&{long} \\{pk\_total\_max\_x};\6
-\&{long} \\{pk\_total\_min\_y};\6
-\&{long} \\{pk\_total\_max\_y};\7
-\&{int} \\{dpi\_x};\C{ printer resolution }\6
-\&{int} \\{dpi\_y};\6
-\&{double} \\{ppp\_x};\C{ pixels per point }\6
-\&{double} \\{ppp\_y};\par
-\fi
-
-\M{20}
-To clarify the meaning of these values see the sections about the metrics
-and configuration file also.
-
-\TeX\ defines that 72.27~points are exactly 1~inch.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_post}(\&{void});\par
-\fi
-
-\M{21}
-\Y\B\&{void} \\{write\_post}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{long} \\{special\_adr};\6
-\&{long} \\{post\_adr};\7
-\&{long} \\{designsize}${}\K\\{design\_size}*\.{\_2\_20}{}$;\C{ design size $*
-2^{20}$ }\7
-\&{int} \\{pk\_dx};\6
-\&{long} \\{tfm\_width};\7
-\&{int} \|i;\6
-\&{long} \\{temp};\7
-${}\\{ppp\_x}\K\\{dpi\_x}/\T{72.27}*\\{magstep\_x};{}$\6
-${}\\{ppp\_y}\K\\{dpi\_y}/\T{72.27}*\\{magstep\_y}{}$;\7
-${}\\{pk\_total\_min\_x}\K\\{pk\_offset\_x};{}$\6
-${}\\{pk\_total\_max\_x}\K\\{pk\_output\_size\_x}+\T{2}*\\{pk\_offset\_x};{}$\6
-${}\\{pk\_total\_min\_y}\K\\{pk\_offset\_y};{}$\6
-${}\\{pk\_total\_max\_y}\K\\{pk\_output\_size\_y}+\\{pk\_offset\_y}{}$;\7
-${}\\{pk\_dx}\K\\{pk\_width}+\T{2}*\\{pk\_offset\_x}{}$;\C{ no slant }\6
-${}\\{tfm\_width}\K(\\{tfm\_output\_size\_x}+\T{2}*\\{tfm\_offset\_x})*\.{\_2%
-\_20}{}$;\C{ width in multiples of design size $* 2^{20}$ }\7
-\X22:Special section\X\6
-\X23:Post section\X\6
-\X24:Postpost section\X\6
-\4${}\}{}$\2\par
-\fi
-
-\M{22}
-\.{XXXn} will be followed by n~bytes representing the length of a string
-which follows immediately. \PB{\.{YYY}} is a 32~bit integer which is normally
-connected with the preceding string (but not used here). \PB{\\{special\_adr}}
-contains the address of the ``special section''. All items here are
-optional.
-
-\Y\B\4\D$\.{XXX1}$ \5
-\T{239}\C{ these are all special command bytes }\par
-\B\4\D$\.{XXX2}$ \5
-\T{240}\C{ not used }\par
-\B\4\D$\.{XXX3}$ \5
-\T{241}\C{ not used }\par
-\B\4\D$\.{XXX4}$ \5
-\T{242}\C{ not used }\Y\par
-\B\4\D$\.{YYY}$ \5
-\T{243}\C{ not used }\par
-\Y\B\4\X22:Special section\X${}\E{}$\6
-$\\{special\_adr}\K\\{ftell}(\\{out}){}$;\7
-\&{if} ${}({*}\\{coding}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{XXX1},\39\\{out}){}$;\C{ \PB{\.{XXX1}} implies a string length %
-\PB{$<$ \T{256}} }\6
-${}\\{fputc}(\\{strlen}(\\{coding}),\39\\{out});{}$\6
-${}\\{fputs}(\\{coding},\39\\{out});{}$\6
-\4${}\}{}$\2\7
-\&{if} ${}({*}\\{comment}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{XXX1},\39\\{out});{}$\6
-${}\\{fputc}(\\{strlen}(\\{comment}),\39\\{out});{}$\6
-${}\\{fputs}(\\{comment},\39\\{out});{}$\6
-\4${}\}{}$\2\par
-\U21.\fi
-
-\M{23}
-All character offsets collected in \PB{\\{char\_adr}} will be written to the
-output
-file. \PB{\\{fputl}(\,)} writes a 32~bit integer into a file.
-
-\PB{\.{CHAR\_LOC0}} (and \PB{\.{CHAR\_LOC}}) is the first byte of a character
-locator
-(i.e., offset, character code, and width information). \PB{\.{POST}} starts the
-postamble, and \PB{\\{post\_adr}} points to the beginning byte of the
-postamble.
-
-\Y\B\4\D$\.{POST}$ \5
-\T{248}\Y\par
-\B\4\D$\.{CHAR\_LOC}$ \5
-\T{245}\par
-\B\4\D$\.{CHAR\_LOC0}$ \5
-\T{246}\C{ simplified version of \PB{\.{CHAR\_LOC}} }\par
-\Y\B\4\X23:Post section\X${}\E{}$\6
-$\\{post\_adr}\K\\{ftell}(\\{out});{}$\6
-${}\\{fputc}(\.{POST},\39\\{out});{}$\6
-${}\\{fputl}(\\{special\_adr},\39\\{out}){}$;\7
-${}\\{fputl}(\\{designsize},\39\\{out});{}$\6
-${}\\{fputl}(\\{checksum},\39\\{out});{}$\6
-${}\\{fputl}(\\{ppp\_x}*\.{\_2\_16},\39\\{out});{}$\6
-${}\\{fputl}(\\{ppp\_y}*\.{\_2\_16},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_total\_min\_x},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_total\_max\_x},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_total\_min\_y},\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_total\_max\_y},\39\\{out}){}$;\7
-${}\\{char\_adr\_p}\K\\{char\_adr}{}$;\7
-\&{if} ${}(\\{pk\_dx}<\T{256}){}$\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{last\_char};{}$ ${}\|i\PP{}$)\C{ the
-character locators }\6
-${}\{{}$\1\6
-${}\\{fputc}(\.{CHAR\_LOC0},\39\\{out});{}$\6
-${}\\{fputc}(\|i,\39\\{out});{}$\6
-${}\\{fputc}(\\{pk\_dx},\39\\{out});{}$\6
-${}\\{fputl}(\\{tfm\_width},\39\\{out});{}$\6
-${}\\{fputl}({*}\\{char\_adr\_p}\PP,\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\C{ will only happen if \PB{$\.{MAX\_CHAR\_SIZE}\G\T{256}$} }\6
-${}\{{}$\1\6
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{last\_char};{}$ ${}\|i\PP){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{CHAR\_LOC},\39\\{out});{}$\6
-${}\\{fputc}(\|i,\39\\{out});{}$\6
-${}\\{fputl}(\\{pk\_dx}*\.{\_2\_16},\39\\{out});{}$\6
-${}\\{fputl}(\T{0},\39\\{out});{}$\6
-${}\\{fputl}(\\{tfm\_width},\39\\{out});{}$\6
-${}\\{fputl}({*}\\{char\_adr\_p}\PP,\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\U21.\fi
-
-\M{24}
-\PB{\.{POSTPOST}} starts the section after the postamble. To get all
-information in
-a \.{GF} file, you must start here. The very last bytes of the file have
-the value \PB{\.{POSTPOST\_ID}} (the file is filled with at least 4 of these
-bytes
-until a file length of a multiple of~4 is reached). Going backwards a
-\PB{\.{GF\_ID}} will be next, then comes the address of the postamble section.
-
-Jumping to the postamble, a \PB{\.{POST}} byte comes first, then the address of
-the special section, and afterwards all character offsets. These offsets and
-addresses describe the whole file.
-
-\Y\B\4\D$\.{POSTPOST}$ \5
-\T{249}\par
-\B\4\D$\.{POSTPOST\_ID}$ \5
-\T{223}\par
-\Y\B\4\X24:Postpost section\X${}\E{}$\6
-$\\{fputc}(\.{POSTPOST},\39\\{out});{}$\6
-${}\\{fputl}(\\{post\_adr},\39\\{out});{}$\6
-${}\\{fputc}(\.{GF\_ID},\39\\{out});{}$\6
-${}\\{temp}\K\\{ftell}(\\{out});{}$\6
-${}\|i\K(\&{int})(\\{temp}\MOD\T{4})+\T{4};{}$\6
-\&{while} ${}(\|i\MM){}$\1\5
-${}\\{fputc}(\.{POSTPOST\_ID},\39\\{out}){}$;\2\par
-\U21.\fi
-
-\M{25}
-\TeX\ wants the most significant byte first.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} ${}\\{fputl}(\&{long},\39{}$\&{FILE} ${}{*}){}$;\par
-\fi
-
-\M{26}
-\Y\B\&{void} \\{fputl}(\&{long} \\{num}${},\39{}$\&{FILE} ${}{*}\|f){}$\1\1\2\2%
-\6
-${}\{{}$\1\6
-${}\\{fputc}(\\{num}\GG\T{24},\39\|f);{}$\6
-${}\\{fputc}(\\{num}\GG\T{16},\39\|f);{}$\6
-${}\\{fputc}(\\{num}\GG\T{8},\39\|f);{}$\6
-${}\\{fputc}(\\{num},\39\|f);{}$\6
-\4${}\}{}$\2\par
-\fi
-
-\M{27}
-\PB{\\{make\_pixel\_array}(\,)} scales a character into the array \PB{\\{out%
-\_char}[\,]} where
-each \\{byte} represents one pixel, contrary to the input file where each
-\\{bit} is used to store the character bitmap. \PB{\.{BLACK}} indicates a black
-pixel.
-
-The scaling routine was modeled after the program \.{pnmscale} of the
-\.{pbmplus} package. \.{pbmplus} was designed to handle arbitrary pictures,
-and bitmaps are only a special case of a graymap with values from~0 for
-white up to \PB{$\.{PIXEL\_MAXVAL}\K\T{255}$} for black.
-
-If \PB{\.{EOF}} is encountered, \PB{\\{end\_of\_file}} is set and the function
-returns
-immediately.
-
-\Y\B\4\D$\.{BLACK}$ \5
-\T{1}\par
-\B\4\D$\.{WHITE}$ \5
-\T{0}\Y\par
-\B\4\D$\.{PIXEL\_MAXVAL}$ \5
-\T{255}\par
-\B\4\D$\.{SCALE}$ \5
-\T{4096}\par
-\B\4\D$\.{HALFSCALE}$ \5
-\T{2048}\Y\par
-\B\4\D$\.{MAX\_CHAR\_SIZE}$ \5
-\T{1023}\par
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{HBF\_CHAR} \\{code};\6
-\&{const} \&{unsigned} \&{char} ${}{*}\\{bitmap}{}$;\C{ a proper input bitmap
-array will be allocated by the HBF API }\6
-\&{const} \&{unsigned} \&{char} ${}{*}\\{bP}{}$;\7
-\&{unsigned} \&{char} ${}\\{out\_char}[\.{MAX\_CHAR\_SIZE}*\.{MAX\_CHAR\_SIZE}+%
-\T{1}]{}$;\C{ the output bitmap array }\6
-\&{unsigned} \&{char} ${}{*}\\{out\_char\_p}{}$;\7
-\&{unsigned} \&{char} \\{pixelrow}[\.{MAX\_CHAR\_SIZE}];\6
-\&{unsigned} \&{char} \\{temp\_pixelrow}[\.{MAX\_CHAR\_SIZE}];\6
-\&{unsigned} \&{char} ${}\\{new\_pixelrow}[\.{MAX\_CHAR\_SIZE}+\T{1}]{}$;\C{ we
-need space to append a white pixel }\7
-\&{int} \\{curr\_row};\C{ for \PB{\\{read\_row}(\,)} if we access the glyph
-rotated }\6
-\&{long} \\{grayrow}[\.{MAX\_CHAR\_SIZE}];\7
-\&{long} \\{s\_mag\_x}${},{}$ \\{s\_mag\_y}${},{}$ \\{s\_slant};\par
-\fi
-
-\M{28}
-We need to initialize the \PB{\\{grayrow}[\,]} array together with some other
-variables.
-
-Two steps are necessary to compute the \PB{\\{code}} if we are in the \mf-like
-mode. Assuming that we search the code \.{0xXXYY}, we first set \PB{\\{code}}
-to
-the value \.{0xXXAA}, where \.{0xAA} is equal to \PB{\\{min\_2\_byte}} (getting
-\PB{\\{offset}} as the number of remaining characters to reach the first
-character
-in our given subfont), then we increment \PB{\\{code}} (and decrement \PB{%
-\\{offset}})
-until \PB{\\{offset}} equals~0.
-
-\Y\B\4\X28:Initialize variables\X${}\E{}$\6
-${}\{{}$\1\6
-\&{int} \\{col}${},{}$ \\{offset};\7
-\&{if} (\\{rotation})\5
-${}\{{}$\1\6
-\&{int} \\{tmp};\7
-${}\\{tmp}\K\\{input\_size\_x};{}$\6
-${}\\{input\_size\_x}\K\\{input\_size\_y};{}$\6
-${}\\{input\_size\_y}\K\\{tmp};{}$\6
-\4${}\}{}$\2\7
-\&{if} (\\{mf\_like})\5
-${}\{{}$\1\6
-${}\\{target\_size\_x}\K\\{design\_size}*(\\{x\_resolution}/\\{dpi\_x});{}$\6
-${}\\{target\_size\_y}\K\\{design\_size}*(\\{x\_resolution}*\\{y\_scale}/\\{dpi%
-\_y});{}$\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-${}\\{target\_size\_x}\K\\{target\_size\_y}\K\\{design\_size};{}$\2\6
-${}\\{magstep\_x}\K\\{target\_size\_x}/\\{design\_size};{}$\6
-${}\\{magstep\_y}\K\\{target\_size\_y}/\\{design\_size}{}$;\7
-${}\\{pk\_offset\_x}\K\\{offset\_x}*\\{magstep\_x}+\T{0.5};{}$\6
-${}\\{pk\_offset\_y}\K\\{offset\_y}*\\{magstep\_y}+\T{0.5};{}$\6
-${}\\{tfm\_offset\_x}\K\\{offset\_x}/(\\{dpi\_x}/\T{72.27})/\\{design%
-\_size};{}$\6
-${}\\{tfm\_offset\_y}\K\\{offset\_y}/(\\{dpi\_y}/\T{72.27})/\\{design%
-\_size}{}$;\7
-${}\\{pk\_width}\K\\{input\_size\_x}*\\{mag\_x}*\\{magstep\_x}+\T{0.5}{}$;\C{
-without slant }\6
-${}\\{pk\_output\_size\_x}\K\\{input\_size\_x}*\\{mag\_x}*\\{magstep\_x}+%
-\\{input\_size\_y}*\\{mag\_y}*\\{magstep\_y}*\\{slant}+\T{0.5};{}$\6
-${}\\{pk\_output\_size\_y}\K\\{input\_size\_y}*\\{mag\_y}*\\{magstep\_y}+%
-\T{0.5};{}$\6
-${}\\{tfm\_output\_size\_x}\K\\{input\_size\_x}*\\{mag\_x}/(\\{dpi\_x}/%
-\T{72.27})/\\{design\_size};{}$\6
-${}\\{tfm\_output\_size\_y}\K\\{input\_size\_y}*\\{mag\_y}/(\\{dpi\_y}/%
-\T{72.27})/\\{design\_size};{}$\6
-\&{if} ${}(\\{pk\_output\_size\_x}>\.{MAX\_CHAR\_SIZE}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Output\ character\ bo}\)\.{x\ width\ too\ big%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{pk\_output\_size\_y}>\.{MAX\_CHAR\_SIZE}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Output\ character\ bo}\)\.{x\ height\ too\ big%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{for} ${}(\\{col}\K\T{0};{}$ ${}\\{col}<\\{input\_size\_x};{}$ ${}\PP%
-\\{col}){}$\1\5
-${}\\{grayrow}[\\{col}]\K\.{HALFSCALE}{}$;\2\7
-\&{if} ${}(\R\\{mf\_like}){}$\1\5
-${}\\{code}\K(\\{min\_char}\AND\T{\^FF00})+\\{min\_2\_byte};{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}((\\{file\_number}<(\\{unicode}\?\T{0}:\T{1}))\V(\\{file\_number}\G%
-\T{\^100})){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ subfile\ num}\)\.{ber\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{if} (\\{unicode})\5
-${}\{{}$\1\6
-${}\\{offset}\K\T{0};{}$\6
-${}\\{code}\K\\{file\_number}*\T{\^100};{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{offset}\K(\\{file\_number}-\T{1})*\T{256}\MOD\\{nmb\_2\_bytes};{}$\6
-${}\\{code}\K(\\{min\_char}\AND\T{\^FF00})+\\{min\_2\_byte}+(\\{file\_number}-%
-\T{1})*\T{256}/\\{nmb\_2\_bytes}*\T{\^100};{}$\6
-\4${}\}{}$\2\7
-\&{while} ${}(\\{offset}\MM){}$\1\6
-\&{while} ${}(\R\\{b2\_codes}[\\{code}\PP\AND\T{\^FF}]{}$)\C{ eliminate invalid
-\PB{\\{b2\_codes}} }\1\6
-;\2\2\7
-\&{if} ${}(\\{code}>\\{max\_char}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ subfile\ num}\)\.{ber\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-${}\\{s\_mag\_x}\K\\{mag\_x}*\\{magstep\_x}*\.{SCALE};{}$\6
-${}\\{s\_mag\_y}\K\\{mag\_y}*\\{magstep\_y}*\.{SCALE};{}$\6
-${}\\{s\_slant}\K\\{slant}*\.{SCALE};{}$\6
-\4${}\}{}$\2\par
-\U4.\fi
-
-\M{29}
-All arrays of the \\{pixelrow} family contain gray values. While scaling
-with non-integer values a pixel of the input bitmap will normally not align
-with the pixel grid of the output bitmap (geometrically spoken). In this
-case we first compute the fractions of input pixel rows scaled vertically
-and add the corresponding gray values until a temporary row is produced.
-Then we repeat this procedure horizontally pixel by pixel and write the
-result into an output array.
-
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{make\_pixel\_array}(\&{void});\par
-\fi
-
-\M{30}
-\Y\B\&{void} \\{make\_pixel\_array}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{unsigned} \&{char} ${}{*}\\{prP};{}$\6
-\&{unsigned} \&{char} ${}{*}\\{temp\_prP};{}$\6
-\&{unsigned} \&{char} ${}{*}\\{new\_prP};{}$\6
-\&{long} ${}{*}\\{grP}{}$;\7
-\&{register} \&{unsigned} \&{char} ${}{*}\\{xP};{}$\6
-\&{register} \&{unsigned} \&{char} ${}{*}\\{nxP}{}$;\7
-\&{register} \&{int} \\{row}${},{}$ \\{col};\6
-\&{int} \\{rows\_read}${}\K\T{0};{}$\6
-\&{register} \&{int} \\{need\_to\_read\_row}${}\K\T{1}{}$;\7
-\&{long} \\{frac\_row\_to\_fill}${}\K\.{SCALE};{}$\6
-\&{long} \\{frac\_row\_left}${}\K\\{s\_mag\_y}{}$;\7
-\&{int} \\{no\_code}${}\K\.{FALSE};{}$\7
-${}\\{prP}\K\\{pixelrow};{}$\6
-${}\\{temp\_prP}\K\\{temp\_pixelrow};{}$\6
-${}\\{new\_prP}\K\\{new\_pixelrow};{}$\6
-${}\\{grP}\K\\{grayrow};{}$\6
-${}\\{out\_char\_p}\K\\{out\_char}{}$;\C{ will be increased by \PB{\\{write%
-\_row}(\,)} }\7
-\4\\{again}:\6
-\&{if} ${}(\\{b2\_codes}[\\{code}\AND\T{\^FF}]{}$)\C{ a valid second byte? }\6
-${}\{{}$\1\6
-\&{if} (\\{pk\_files})\5
-${}\{{}$\1\6
-${}\\{bitmap}\K\\{hbfGetBitmap}(\\{hbf},\39\\{code});{}$\6
-${}\\{bP}\K\\{bitmap}{}$;\C{ will be increased by \PB{\\{read\_row}(\,)} }\7
-\&{if} ${}(\R\\{bitmap}){}$\1\5
-${}\\{empty\_char}\K\.{TRUE};{}$\2\6
-\&{else}\1\5
-\X31:Scale row by row\X\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-${}\\{no\_code}\K\.{TRUE}{}$;\2\7
-\&{if} ${}((\\{code}\AND\T{\^FF})\E\\{max\_2\_byte}){}$\1\5
-${}\\{code}\MRL{+{\K}}\T{\^FF}-(\\{max\_2\_byte}-\\{min\_2\_byte}){}$;\C{ go to
-next plane }\2\6
-\&{if} ${}(\\{code}\G\\{max\_char}){}$\5
-${}\{{}$\1\6
-${}\\{end\_of\_file}\K\.{TRUE};{}$\6
-\&{return};\6
-\4${}\}{}$\2\7
-${}\\{code}\PP{}$;\7
-\&{if} (\\{no\_code})\5
-${}\{{}$\1\6
-${}\\{no\_code}\K\.{FALSE};{}$\6
-\&{goto} \\{again};\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\fi
-
-\M{31}
-\Y\B\4\X31:Scale row by row\X${}\E{}$\6
-${}\{{}$\1\6
-\&{if} ${}(\\{pk\_output\_size\_y}\E\\{input\_size\_y}{}$)\C{ shortcut
-Y~scaling if possible }\1\6
-${}\\{temp\_prP}\K\\{prP}{}$;\2\7
-${}\\{curr\_row}\K\\{input\_size\_y}-\T{1}{}$;\C{ only needed for rotated
-glyphs }\6
-\&{for} ${}(\\{row}\K\T{0};{}$ ${}\\{row}<\\{pk\_output\_size\_y};{}$ ${}\PP%
-\\{row}){}$\5
-${}\{{}$\1\6
-\X32:Scale Y from \PB{\\{pixelrow}[\,]} into \PB{\\{temp\_pixelrow}[\,]}\X\6
-\X34:Scale X from \PB{\\{temp\_pixelrow}[\,]} into \PB{\\{new\_pixelrow}[\,]}
-and write it into \PB{\\{out\_char}[\,]}\X\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\U30.\fi
-
-\M{32}
-\Y\B\4\X32:Scale Y from \PB{\\{pixelrow}[\,]} into \PB{\\{temp\_pixelrow}[\,]}%
-\X${}\E{}$\6
-\&{if} ${}(\\{pk\_output\_size\_y}\E\\{input\_size\_y}{}$)\C{ shortcut
-Y~scaling if possible }\1\6
-\\{read\_row}(\\{prP});\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{while} ${}(\\{frac\_row\_left}<\\{frac\_row\_to\_fill}){}$\5
-${}\{{}$\1\6
-\&{if} (\\{need\_to\_read\_row})\1\6
-\&{if} ${}(\\{rows\_read}<\\{input\_size\_y}){}$\5
-${}\{{}$\1\6
-\\{read\_row}(\\{prP});\6
-${}\PP\\{rows\_read};{}$\6
-\4${}\}{}$\2\2\7
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{prP};{}$ ${}\\{col}<\\{input\_size%
-\_x};{}$ ${}\PP\\{col},\39\PP\\{xP}){}$\1\5
-${}\\{grP}[\\{col}]\MRL{+{\K}}\\{frac\_row\_left}*({*}\\{xP}){}$;\2\7
-${}\\{frac\_row\_to\_fill}\MRL{-{\K}}\\{frac\_row\_left};{}$\6
-${}\\{frac\_row\_left}\K\\{s\_mag\_y};{}$\6
-${}\\{need\_to\_read\_row}\K\T{1};{}$\6
-\4${}\}{}$\2\7
-\X33:Produce a temporary row\X\6
-\4${}\}{}$\2\par
-\U31.\fi
-
-\M{33}
-Now \PB{$\\{frac\_row\_left}\G\\{frac\_row\_to\_fill}$}, so we can produce a
-row.
-
-\Y\B\4\X33:Produce a temporary row\X${}\E{}$\6
-\&{if} (\\{need\_to\_read\_row})\1\6
-\&{if} ${}(\\{rows\_read}<\\{input\_size\_y}){}$\5
-${}\{{}$\1\6
-\\{read\_row}(\\{prP});\6
-${}\PP\\{rows\_read};{}$\6
-${}\\{need\_to\_read\_row}\K\T{0};{}$\6
-\4${}\}{}$\2\2\7
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{prP},\39\\{nxP}\K\\{temp\_prP};{}$ ${}%
-\\{col}<\\{input\_size\_x};{}$ ${}\PP\\{col},\39\PP\\{xP},\39\PP\\{nxP}){}$\5
-${}\{{}$\1\6
-\&{register} \&{long} \|g;\7
-${}\|g\K\\{grP}[\\{col}]+\\{frac\_row\_to\_fill}*({*}\\{xP});{}$\6
-${}\|g\MRL{{/}{\K}}\.{SCALE};{}$\6
-\&{if} ${}(\|g>\.{PIXEL\_MAXVAL}){}$\1\5
-${}\|g\K\.{PIXEL\_MAXVAL}{}$;\2\7
-${}{*}\\{nxP}\K\|g;{}$\6
-${}\\{grP}[\\{col}]\K\.{HALFSCALE};{}$\6
-\4${}\}{}$\2\7
-${}\\{frac\_row\_left}\MRL{-{\K}}\\{frac\_row\_to\_fill};{}$\6
-\&{if} ${}(\\{frac\_row\_left}\E\T{0}){}$\5
-${}\{{}$\1\6
-${}\\{frac\_row\_left}\K\\{s\_mag\_y};{}$\6
-${}\\{need\_to\_read\_row}\K\T{1};{}$\6
-\4${}\}{}$\2\6
-${}\\{frac\_row\_to\_fill}\K\.{SCALE}{}$;\par
-\U32.\fi
-
-\M{34}
-To implement the slant we move the starting point \PB{\\{nxP}} to the right
-according to the corresponding \PB{\|y}~value. To simplify life only positive
-shift values are allowed.
-
-We always append a white pixel to avoid artefacts at the end of the line
-produced by the last line. This rule sets the second condition that the
-slant must not be greater than~\PB{\T{1}}---such a large slant would be
-unusable
-anyway for typesetting purposes.
-
-\Y\B\4\X34:Scale X from \PB{\\{temp\_pixelrow}[\,]} into \PB{\\{new\_pixelrow}[%
-\,]} and write it into \PB{\\{out\_char}[\,]}\X${}\E{}$\6
-\&{if} ${}(\\{pk\_width}\E\\{input\_size\_x}\W\\{s\_slant}\E\T{0}{}$)\C{
-shortcut X~scaling if possible }\1\6
-\\{write\_row}(\\{temp\_prP});\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{register} \&{long} \|g${}\K\.{HALFSCALE};{}$\6
-\&{register} \&{long} \\{frac\_col\_to\_fill}${}\K\.{SCALE};{}$\6
-\&{register} \&{long} \\{frac\_col\_left};\6
-\&{register} \&{int} \\{need\_col}${}\K\T{0};{}$\7
-${}\\{nxP}\K\\{new\_prP}{}$;\7
-${}\\{frac\_col\_left}\K(\\{pk\_output\_size\_y}-\\{row})*\\{s\_slant};{}$\6
-\&{while} ${}(\\{frac\_col\_left}\G\\{frac\_col\_to\_fill}){}$\5
-${}\{{}$\1\6
-${}{*}(\\{nxP}\PP)\K\T{0};{}$\6
-${}\\{frac\_col\_left}\MRL{-{\K}}\\{frac\_col\_to\_fill};{}$\6
-\4${}\}{}$\2\7
-\&{if} ${}(\\{frac\_col\_left}>\T{0}){}$\1\5
-${}\\{frac\_col\_to\_fill}\MRL{-{\K}}\\{frac\_col\_left}{}$;\2\7
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{temp\_prP};{}$ ${}\\{col}<\\{input%
-\_size\_x};{}$ ${}\PP\\{col},\39\PP\\{xP}){}$\5
-${}\{{}$\1\6
-${}\\{frac\_col\_left}\K\\{s\_mag\_x};{}$\6
-\&{while} ${}(\\{frac\_col\_left}\G\\{frac\_col\_to\_fill}){}$\5
-${}\{{}$\1\6
-\&{if} (\\{need\_col})\5
-${}\{{}$\1\6
-${}\PP\\{nxP};{}$\6
-${}\|g\K\.{HALFSCALE};{}$\6
-\4${}\}{}$\2\7
-${}\|g\MRL{+{\K}}\\{frac\_col\_to\_fill}*({*}\\{xP});{}$\6
-${}\|g\MRL{{/}{\K}}\.{SCALE};{}$\6
-\&{if} ${}(\|g>\.{PIXEL\_MAXVAL}){}$\1\5
-${}\|g\K\.{PIXEL\_MAXVAL}{}$;\2\7
-${}{*}\\{nxP}\K\|g;{}$\6
-${}\\{frac\_col\_left}\MRL{-{\K}}\\{frac\_col\_to\_fill};{}$\6
-${}\\{frac\_col\_to\_fill}\K\.{SCALE};{}$\6
-${}\\{need\_col}\K\T{1};{}$\6
-\4${}\}{}$\2\7
-\&{if} ${}(\\{frac\_col\_left}>\T{0}){}$\5
-${}\{{}$\1\6
-\&{if} (\\{need\_col})\5
-${}\{{}$\1\6
-${}\PP\\{nxP};{}$\6
-${}\|g\K\.{HALFSCALE};{}$\6
-${}\\{need\_col}\K\T{0};{}$\6
-\4${}\}{}$\2\7
-${}\|g\MRL{+{\K}}\\{frac\_col\_left}*({*}\\{xP});{}$\6
-${}\\{frac\_col\_to\_fill}\MRL{-{\K}}\\{frac\_col\_left};{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\7
-\X35:Write out a row\X\6
-\4${}\}{}$\2\par
-\U31.\fi
-
-\M{35}
-\Y\B\4\X35:Write out a row\X${}\E{}$\6
-\&{if} ${}(\\{frac\_col\_to\_fill}>\T{0}){}$\5
-${}\{{}$\1\6
-${}\MM\\{xP};{}$\6
-${}\|g\MRL{+{\K}}\\{frac\_col\_to\_fill}*({*}\\{xP});{}$\6
-\4${}\}{}$\2\7
-\&{if} ${}(\R\\{need\_col}){}$\5
-${}\{{}$\1\6
-${}\|g\MRL{{/}{\K}}\.{SCALE};{}$\6
-\&{if} ${}(\|g>\.{PIXEL\_MAXVAL}){}$\1\5
-${}\|g\K\.{PIXEL\_MAXVAL};{}$\2\6
-${}{*}\\{nxP}\K\|g;{}$\6
-\4${}\}{}$\2\7
-${}{*}(\PP\\{nxP})\K\T{0}{}$;\C{ append a blank pixel }\7
-\\{write\_row}(\\{new\_prP});\par
-\U34.\fi
-
-\M{36}
-\PB{\\{read\_row}(\,)} reads a row from \PB{\\{bitmap}[\,]} and converts it
-into a graymap row.
-If the \PB{\\{rotation}} flag has been set, we get the proper column instead
-(note
-that in this case \PB{\\{input\_size\_x}} already reflects the width of the
-rotated
-glyph).
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\8\#\&{ifdef} \.{\_\_GNUC\_\_}\6
-\&{\_\_inline\_\_}\6
-\8\#\&{endif}\6
-\&{void} \\{read\_row}(\&{unsigned} \&{char} ${}{*}){}$;\par
-\fi
-
-\M{37}
-\Y\B\8\#\&{ifdef} \.{\_\_GNUC\_\_}\6
-\&{\_\_inline\_\_}\6
-\8\#\&{endif}\6
-\&{void} \\{read\_row}(\&{unsigned} \&{char} ${}{*}\\{pixelrow}){}$\1\1\2\2\6
-${}\{{}$\1\6
-\&{register} \&{int} \\{col}${},{}$ \\{bitshift}${},{}$ \\{offset};\6
-\&{register} \&{unsigned} \&{char} ${}{*}\\{xP};{}$\6
-\&{register} \&{unsigned} \&{char} \\{item}${}\K\T{0};{}$\7
-\&{if} (\\{rotation})\5
-${}\{{}$\1\6
-${}\\{bitshift}\K\T{7}-(\\{curr\_row}\MOD\T{8});{}$\6
-${}\\{offset}\K(\\{input\_size\_y}+\T{7})/\T{8};{}$\6
-${}\\{bP}\K\\{bitmap}+\\{curr\_row}/\T{8};{}$\6
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{pixelrow};{}$ ${}\\{col}<\\{input%
-\_size\_x};{}$ ${}\PP\\{col},\39\PP\\{xP}){}$\5
-${}\{{}$\1\6
-${}{*}\\{xP}\K(({*}\\{bP}\GG\\{bitshift})\AND\T{1})\E\T{1}\?\.{PIXEL\_MAXVAL}:%
-\T{0};{}$\6
-${}\\{bP}\MRL{+{\K}}\\{offset};{}$\6
-\4${}\}{}$\2\6
-${}\\{curr\_row}\MM;{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{bitshift}\K{-}\T{1};{}$\6
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{pixelrow};{}$ ${}\\{col}<\\{input%
-\_size\_x};{}$ ${}\PP\\{col},\39\PP\\{xP}){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{bitshift}\E{-}\T{1}){}$\5
-${}\{{}$\1\6
-${}\\{item}\K{*}(\\{bP}\PP){}$;\C{ increase input bitmap pointer }\6
-${}\\{bitshift}\K\T{7};{}$\6
-\4${}\}{}$\2\6
-${}{*}\\{xP}\K((\\{item}\GG\\{bitshift})\AND\T{1})\E\T{1}\?\.{PIXEL\_MAXVAL}:%
-\T{0};{}$\6
-${}\MM\\{bitshift};{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\fi
-
-\M{38}
-\PB{\\{write\_row}(\,)} converts the graymap back into a bitmap using a simple
-threshold.
-
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{int} \\{threshold}${}\K\T{128}{}$;\par
-\fi
-
-\M{39}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\8\#\&{ifdef} \.{\_\_GNUC\_\_}\6
-\&{\_\_inline\_\_}\6
-\8\#\&{endif}\6
-\&{void} \\{write\_row}(\&{unsigned} \&{char} ${}{*}){}$;\par
-\fi
-
-\M{40}
-\Y\B\8\#\&{ifdef} \.{\_\_GNUC\_\_}\6
-\&{\_\_inline\_\_}\6
-\8\#\&{endif}\6
-\&{void} \\{write\_row}(\&{unsigned} \&{char} ${}{*}\\{pixelrow}){}$\1\1\2\2\6
-${}\{{}$\1\6
-\&{register} \&{int} \\{col};\6
-\&{register} \&{unsigned} \&{char} ${}{*}\\{xP};{}$\7
-\&{for} ${}(\\{col}\K\T{0},\39\\{xP}\K\\{pixelrow};{}$ ${}\\{col}<\\{pk\_output%
-\_size\_x};{}$ ${}\PP\\{col},\39\PP\\{xP}){}$\1\5
-${}{*}(\\{out\_char\_p}\PP)\K({*}\\{xP}\G\\{threshold})\?\T{1}:\T{0}{}$;\C{
-increase output bitmap pointer }\2\6
-\4${}\}{}$\2\par
-\fi
-
-\M{41}
-Now comes the most interesting routine. The pixel array will be compressed
-in sequences of black and white pixels.
-
-\PB{\.{SKIP0}}, \PB{\.{SKIP1}}, and \PB{\.{SKIP2}} indicate how many blank
-lines will be skipped.
-\PB{\.{PAINT\_}(\|x)} means that the next x~pixels will have the same color,
-then the
-color changes. \PB{\.{NEW\_ROW\_}(\|x)} is the first black pixel in the next
-row.
-
-An example: the pixel sequence 111100011001 [new row] 000111011110 will be
-output as 4 3 2 2 1 77 3 1 4 1.
-
-Commands with an ending~`n' in its name indicate that the next n~bytes
-should be read as the counter. Example: \PB{\.{SKIP1}}~26 means `skip the next
-26~rows'.
-
-For further details please refer to ``\mf---the program''.
-
-\Y\B\4\D$\.{PAINT\_}(\|x)$ \5
-(\|x)\C{ $0 \le x \le 63$ }\par
-\B\4\D$\.{PAINT1}$ \5
-\T{64}\par
-\B\4\D$\.{PAINT2}$ \5
-\T{65}\par
-\B\4\D$\.{PAINT3}$ \5
-\T{66}\C{ not used }\Y\par
-\B\4\D$\.{SKIP0}$ \5
-\T{70}\par
-\B\4\D$\.{SKIP1}$ \5
-\T{71}\par
-\B\4\D$\.{SKIP2}$ \5
-\T{72}\par
-\B\4\D$\.{SKIP3}$ \5
-\T{73}\C{ not used }\Y\par
-\B\4\D$\.{NEW\_ROW\_}(\|x)$ \5
-$((\|x)+\T{74}{}$)\C{ $0 \le x \le 164$ }\Y\par
-\B\4\D$\.{NOOP}$ \5
-\T{244}\C{ not used }\par
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_coding}(\&{void});\par
-\fi
-
-\M{42}
-The \PB{\&{goto} \\{start}} instruction causes some compilers to complain about
-``Unreachable code $\ldots$'' or something similar.
-
-\Y\B\&{void} \\{write\_coding}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{register} \&{int} \\{count}${},{}$ \\{skip};\6
-\&{register} \&{unsigned} \&{char} \\{paint};\6
-\&{register} \&{int} \|x${},{}$ \|y;\6
-\&{register} \&{unsigned} \&{char} ${}{*}\\{cp};{}$\7
-${}\|x\K\T{0};{}$\6
-${}\|y\K\T{0};{}$\6
-${}\\{cp}\K\\{out\_char}+\|y*\\{pk\_output\_size\_x}+\|x;{}$\6
-${}\\{count}\K\\{skip}\K\T{0};{}$\6
-${}\\{paint}\K\.{WHITE};{}$\6
-\&{goto} \\{start};\7
-\&{while} ${}(\|y<\\{pk\_output\_size\_y}){}$\5
-${}\{{}$\1\6
-\X43:Search blank lines\X\6
-\4\\{start}:\5
-\X44:Process rest of line\X\6
-${}\|y\PP;{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\Y\par
-\fi
-
-\M{43}
-\Y\B\4\X43:Search blank lines\X${}\E{}$\6
-$\\{count}\K\T{0};{}$\6
-${}\|x\K\T{0};{}$\6
-${}\\{cp}\K\\{out\_char}+\|y*\\{pk\_output\_size\_x}+\|x{}$;\7
-\&{while} ${}(\|x<\\{pk\_output\_size\_x}){}$\5
-${}\{{}$\1\6
-\&{if} ${}({*}\\{cp}\E\\{paint}){}$\1\5
-${}\\{count}\PP;{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}(\\{skip}\E\T{0}){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{count}\Z\T{164}){}$\1\5
-${}\\{fputc}(\.{NEW\_ROW\_}(\\{count}),\39\\{out});{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{SKIP0},\39\\{out}){}$;\7
-\&{if} ${}(\\{count}<\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT1},\39\\{out});{}$\6
-${}\\{fputc}(\\{count},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT2},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\GG\T{8},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\AND\T{\^FF},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}(\\{skip}\E\T{1}){}$\1\5
-${}\\{fputc}(\.{SKIP0},\39\\{out});{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}(\\{skip}<\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{SKIP1},\39\\{out});{}$\6
-${}\\{fputc}(\\{skip},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{SKIP2},\39\\{out});{}$\6
-${}\\{fputc}(\\{skip}\GG\T{8},\39\\{out});{}$\6
-${}\\{fputc}(\\{skip}\AND\T{\^FF},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-${}\\{skip}\K\T{0};{}$\6
-\&{if} ${}(\\{count}<\T{64}){}$\1\5
-${}\\{fputc}(\.{PAINT\_}(\\{count}),\39\\{out});{}$\2\6
-\&{else} \&{if} ${}(\\{count}<\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT1},\39\\{out});{}$\6
-${}\\{fputc}(\\{count},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT2},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\GG\T{8},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\AND\T{\^FF},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-${}\\{count}\K\T{0};{}$\6
-${}\\{paint}\K\.{BLACK};{}$\6
-\&{break};\6
-\4${}\}{}$\2\6
-${}\|x\PP;{}$\6
-${}\\{cp}\PP;{}$\6
-\4${}\}{}$\2\6
-\&{if} ${}(\|x\G\\{pk\_output\_size\_x}){}$\5
-${}\{{}$\1\6
-${}\\{skip}\PP;{}$\6
-${}\|y\PP;{}$\6
-\&{continue};\6
-\4${}\}{}$\2\par
-\U42.\fi
-
-\M{44}
-\Y\B\4\X44:Process rest of line\X${}\E{}$\6
-\&{while} ${}(\|x<\\{pk\_output\_size\_x}){}$\5
-${}\{{}$\1\6
-\&{if} ${}({*}\\{cp}\E\\{paint}){}$\1\5
-${}\\{count}\PP;{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{if} ${}(\\{count}<\T{64}){}$\1\5
-${}\\{fputc}(\.{PAINT\_}(\\{count}),\39\\{out});{}$\2\6
-\&{else} \&{if} ${}(\\{count}<\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT1},\39\\{out});{}$\6
-${}\\{fputc}(\\{count},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT2},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\GG\T{8},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\AND\T{\^FF},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-${}\\{count}\K\T{1};{}$\6
-${}\\{paint}\K\.{BLACK}-\\{paint};{}$\6
-\4${}\}{}$\2\6
-${}\|x\PP;{}$\6
-${}\\{cp}\PP;{}$\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{paint}\E\.{BLACK}){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{count}<\T{64}){}$\1\5
-${}\\{fputc}(\.{PAINT\_}(\\{count}),\39\\{out});{}$\2\6
-\&{else} \&{if} ${}(\\{count}<\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT1},\39\\{out});{}$\6
-${}\\{fputc}(\\{count},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fputc}(\.{PAINT2},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\GG\T{8},\39\\{out});{}$\6
-${}\\{fputc}(\\{count}\AND\T{\^FF},\39\\{out});{}$\6
-\4${}\}{}$\2\6
-${}\\{paint}\K\.{WHITE};{}$\6
-\4${}\}{}$\2\par
-\U42.\fi
-
-\N{1}{45}The font metrics file.
-This routine creates one \.{PL} file with the font properties. None of the
-\TeX\ font dimensions are needed because you never will use CJK fonts
-directly, and intercharacter stretching is handled by the \\{CJK} macro
-\.{\\CJKglue}. (Other packages may define similar commands.)
-
-The name of the \.{PL} file will contain the running two digits in
-\mf-like mode only.
-
-It makes sense \\{not} to compute the check sum automatically for two
-reasons. Firstly, since \TeX's checksum algorithm is based on the character
-width, the number of valid characters, and the designsize, there is a much
-higher chance that two subfonts from different HBF fonts have the same check
-sum than it is for ordinary fonts, because all characters have the same
-width, usually 256~characters in a subfont, and very often the same design
-size. Secondly, and this is more important, we create just one
-\.{TFM} file for all subfonts regardless of the real number of characters
-in a particular subfont.
-
-To have an identification string in the \.{TFM} file, we split it into
-single bytes and use the \.{HEADER} command repeatedly.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_pl}(\&{void});\par
-\fi
-
-\M{46}
-\Y\B\&{void} \\{write\_pl}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{int} \|i${},{}$ \\{pos};\6
-\&{char} ${}\\{output\_file}[\.{FILE\_NAME\_LENGTH}+\T{1}];{}$\6
-\&{long} \|t${},{}$ \\{sc};\6
-\&{char} ${}{*}\|s;{}$\6
-\&{char} \\{tfm\_header}[\,]${}\K\.{"Created\ by\ hbf2gf"};{}$\7
-${}\\{file\_number}\MM{}$;\C{ for \mf-like mode }\7
-\&{if} (\\{mf\_like})\5
-${}\{{}$\1\6
-\&{if} (\\{unicode})\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02x.pl"},\39\\{output\_name},\39%
-\\{file\_number});{}$\2\6
-\&{else}\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s\%02i.pl"},\39\\{output\_name},\39%
-\\{file\_number});{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s.pl"},\39\\{output\_name}){}$;\2\7
-\&{if} ${}(\R(\\{out}\K\\{fopen}(\\{output\_file},\39\.{WRITE\_TXT}))){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ open\ `\%s'\\}\)\.{n"},\39\\{output%
-\_file});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"\\nWriting\ `\%s'\\n"},\39\\{output\_file}){}$;\2\7
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(FAMILY\ \%s\%d)"}\6
-\.{"\\n(CODINGSCHEME\ CJK}\)\.{-\%s)"}${},\39\\{output\_name},\39\\{file%
-\_number},\39\\{font\_encoding}){}$;\7
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(DESIGNSIZE\ R\ \%.6}\)\.{f)"}\6
-\.{"\\n(COMMENT\ DESIGNSI}\)\.{ZE\ IS\ IN\ POINTS)"}\6
-\.{"\\n(COMMENT\ OTHER\ SI}\)\.{ZES\ ARE\ MULTIPLES\ OF}\)\.{\ DESIGNSIZE)"}\6
-\.{"\\n(CHECKSUM\ O\ \%lo)"}\6
-\.{"\\n(FONTDIMEN"}\6
-\.{"\\n\ \ \ (SLANT\ R\ \%.6f)}\)\.{"}\6
-\.{"\\n\ \ \ (SPACE\ R\ 0.0)"}\6
-\.{"\\n\ \ \ (STRETCH\ R\ 0.0}\)\.{)"}\6
-\.{"\\n\ \ \ (SHRINK\ R\ 0.0)}\)\.{"}\6
-\.{"\\n\ \ \ (XHEIGHT\ R\ 1.0}\)\.{)"}\6
-\.{"\\n\ \ \ (QUAD\ R\ 1.0)"}\6
-\.{"\\n\ \ \ (EXTRASPACE\ R\ }\)\.{0.0)"}\6
-\.{"\\n\ \ \ )"}${},\39\\{design\_size},\39\\{checksum},\39\\{slant}){}$;\7
-${}\|s\K\\{tfm\_header};{}$\6
-${}\|i\K\\{strlen}(\|s);{}$\6
-${}\|t\K{}$((\&{long}) \|i)${}\LL\T{24};{}$\6
-${}\\{sc}\K\T{16};{}$\6
-${}\\{pos}\K\T{18}{}$;\7
-${}\\{fprintf}(\\{out},\39\.{"\\n"});{}$\6
-\&{while} ${}(\|i>\T{0}){}$\5
-${}\{{}$\1\6
-${}\|t\MRL{{\OR}{\K}}((\&{long})({*}{}$(\&{unsigned} \&{char} ${}{*}){}$ \|s${}%
-\PP))\LL\\{sc};{}$\6
-${}\\{sc}\MRL{-{\K}}\T{8};{}$\6
-\&{if} ${}(\\{sc}<\T{0}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},\39\.{"\\n(HEADER\ D\ \%d\ O\ \%l}\)\.{o)"},\39\\{pos},%
-\39\|t);{}$\6
-${}\|t\K\T{0};{}$\6
-${}\\{sc}\K\T{24};{}$\6
-${}\\{pos}\PP;{}$\6
-\4${}\}{}$\2\6
-${}\|i\MM;{}$\6
-\4${}\}{}$\2\6
-\&{if} (\|t)\1\5
-${}\\{fprintf}(\\{out},\39\.{"\\n(HEADER\ D\ \%d\ O\ \%l}\)\.{o)"},\39\\{pos},%
-\39\|t);{}$\2\6
-${}\\{fprintf}(\\{out},\39\.{"\\n"}){}$;\7
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\T{256};{}$ ${}\|i\PP){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(CHARACTER\ O\ \%o"}\6
-\.{"\\n\ \ \ (CHARWD\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARHT\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARDP\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARIC\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ )"}${},{}$\6
-\|i${},\39\\{tfm\_output\_size\_x}+\T{2}*\\{tfm\_offset\_x},\39\\{tfm\_output%
-\_size\_y}+\\{tfm\_offset\_y},\39{-}\\{tfm\_offset\_y},\39\\{slant}*(\\{tfm%
-\_output\_size\_y}+\\{tfm\_offset\_y}));{}$\6
-\4${}\}{}$\2\7
-\\{fclose}(\\{out});\6
-\4${}\}{}$\2\par
-\fi
-
-\N{1}{47}The extended virtual font file for \Om.
-The following is very similar to \PB{\\{write\_pl}(\,)}; we simply map the
-glyphs
-of the subfonts back to the original encoding positions.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_ovp}(\&{void});\par
-\fi
-
-\M{48}
-\Y\B\&{void} \\{write\_ovp}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{int} \|c${},{}$ \|i${},{}$ \\{nmb\_subfonts}${},{}$ \\{remainder}${},{}$ %
-\\{count}${},{}$ \\{pos};\6
-\&{char} ${}\\{output\_file}[\.{FILE\_NAME\_LENGTH}+\T{1}];{}$\6
-\&{long} \|t${},{}$ \\{sc};\6
-\&{char} ${}{*}\|s;{}$\6
-\&{char} \\{ofm\_header}[\,]${}\K\.{"Created\ by\ hbf2gf"};{}$\7
-${}\\{nmb\_subfonts}\K((\\{max\_char}-(\\{min\_char}\AND\T{\^FF00}))/\T{256}*%
-\\{nmb\_2\_bytes})/\T{256}+\T{1};{}$\6
-${}\\{remainder}\K((\\{max\_char}-(\\{min\_char}\AND\T{\^FF00}))/\T{256}*\\{nmb%
-\_2\_bytes})\MOD\T{256}{}$;\C{ correction for the last incomplete second byte
-range }\6
-\&{for} ${}(\\{count}\K\T{0};{}$ ${}\\{count}<(\\{max\_char}\AND\T{\^FF});{}$
-${}\\{count}\PP){}$\1\6
-\&{if} (\\{b2\_codes}[\\{count}])\1\5
-${}\\{remainder}\PP;{}$\2\2\6
-\&{if} ${}(\\{remainder}\G\T{256}){}$\1\5
-${}\\{nmb\_subfonts}\PP{}$;\2\7
-${}\\{sprintf}(\\{output\_file},\39\.{"\%s.ovp"},\39\\{output\_name}){}$;\7
-\&{if} ${}(\R(\\{out}\K\\{fopen}(\\{output\_file},\39\.{WRITE\_TXT}))){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ open\ `\%s'\\}\)\.{n"},\39\\{output%
-\_file});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"\\nWriting\ `\%s'\\n"},\39\\{output\_file}){}$;\2\7
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(VTITLE\ Omega\ vir}\)\.{tual\ font\ created\ by}\)\.{\ hbf2gf)"}\6
-\.{"\\n(DESIGNSIZE\ R\ \%.6}\)\.{f)"}\6
-\.{"\\n(COMMENT\ DESIGNSI}\)\.{ZE\ IS\ IN\ POINTS)"}\6
-\.{"\\n(COMMENT\ OTHER\ SI}\)\.{ZES\ ARE\ MULTIPLES\ OF}\)\.{\ DESIGNSIZE)"}\6
-\.{"\\n(CHECKSUM\ O\ \%lo)"}\6
-\.{"\\n(FONTDIMEN"}\6
-\.{"\\n\ \ \ (SLANT\ R\ \%.6f)}\)\.{"}\6
-\.{"\\n\ \ \ (SPACE\ R\ 0.0)"}\6
-\.{"\\n\ \ \ (STRETCH\ R\ 0.0}\)\.{)"}\6
-\.{"\\n\ \ \ (SHRINK\ R\ 0.0)}\)\.{"}\6
-\.{"\\n\ \ \ (XHEIGHT\ R\ 1.0}\)\.{)"}\6
-\.{"\\n\ \ \ (QUAD\ R\ 1.0)"}\6
-\.{"\\n\ \ \ (EXTRASPACE\ R\ }\)\.{0.0)"}\6
-\.{"\\n\ \ \ )"}${},\39\\{design\_size},\39\\{checksum},\39\\{slant}){}$;\7
-${}\|s\K\\{ofm\_header};{}$\6
-${}\|i\K\\{strlen}(\|s);{}$\6
-${}\|t\K{}$((\&{long}) \|i)${}\LL\T{24};{}$\6
-${}\\{sc}\K\T{16};{}$\6
-${}\\{pos}\K\T{18}{}$;\7
-${}\\{fprintf}(\\{out},\39\.{"\\n"});{}$\6
-\&{while} ${}(\|i>\T{0}){}$\5
-${}\{{}$\1\6
-${}\|t\MRL{{\OR}{\K}}((\&{long})({*}{}$(\&{unsigned} \&{char} ${}{*}){}$ \|s${}%
-\PP))\LL\\{sc};{}$\6
-${}\\{sc}\MRL{-{\K}}\T{8};{}$\6
-\&{if} ${}(\\{sc}<\T{0}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},\39\.{"\\n(HEADER\ D\ \%d\ O\ \%l}\)\.{o)"},\39\\{pos},%
-\39\|t);{}$\6
-${}\|t\K\T{0};{}$\6
-${}\\{sc}\K\T{24};{}$\6
-${}\\{pos}\PP;{}$\6
-\4${}\}{}$\2\6
-${}\|i\MM;{}$\6
-\4${}\}{}$\2\6
-\&{if} (\|t)\1\5
-${}\\{fprintf}(\\{out},\39\.{"\\n(HEADER\ D\ \%d\ O\ \%l}\)\.{o)"},\39\\{pos},%
-\39\|t);{}$\2\6
-${}\\{fprintf}(\\{out},\39\.{"\\n"}){}$;\7
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{nmb\_subfonts};{}$ ${}\|i\PP){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(MAPFONT\ D\ \%i"}\6
-\.{"\\n\ \ \ (FONTNAME\ \%s\%0}\)\.{2i)"}\6
-\.{"\\n\ \ \ (FONTCHECKSUM\ }\)\.{O\ \%lo)"}\6
-\.{"\\n\ \ \ (FONTAT\ R\ 1.0)}\)\.{"}\6
-\.{"\\n\ \ \ (FONTDSIZE\ R\ \%}\)\.{.6f)"}\6
-\.{"\\n\ \ \ )"}${},\39\|i,\39\\{output\_name},\39\|i+\T{1},\39\\{checksum},\39%
-\\{design\_size});{}$\6
-\4${}\}{}$\2\7
-\&{for} ${}(\|c\K\\{min\_char},\39\|i\K\T{0},\39\\{count}\K\T{0};{}$ ${}\|c\Z%
-\\{max\_char};{}$ ${}\|c\PP){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{b2\_codes}[\|c\AND\T{\^FF}]\E\.{VALID\_SUBCODE}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n(CHARACTER\ O\ \%o"}\6
-\.{"\\n\ \ \ (CHARWD\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARHT\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARDP\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (CHARIC\ R\ \%.6f}\)\.{)"}\6
-\.{"\\n\ \ \ (MAP"}\6
-\.{"\\n\ \ \ \ \ \ (SELECTFONT}\)\.{\ D\ \%i)"}\6
-\.{"\\n\ \ \ \ \ \ (SETCHAR\ O\ }\)\.{\%o)"}\6
-\.{"\\n\ \ \ \ \ \ )"}\6
-\.{"\\n\ \ \ )"}${},{}$\6
-\|c${},\39\\{tfm\_output\_size\_x}+\T{2}*\\{tfm\_offset\_x},\39\\{tfm\_output%
-\_size\_y}+\\{tfm\_offset\_y},\39{-}\\{tfm\_offset\_y},\39\\{slant}*(\\{tfm%
-\_output\_size\_y}+\\{tfm\_offset\_y}),\39\|i,\39\\{count}){}$;\7
-${}\\{count}\PP;{}$\6
-\&{if} ${}(\\{count}\E\T{256}){}$\5
-${}\{{}$\1\6
-${}\\{count}\K\T{0};{}$\6
-${}\|i\PP;{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\1\5
-\&{continue};\2\6
-\4${}\}{}$\2\7
-\\{fclose}(\\{out});\6
-\4${}\}{}$\2\par
-\fi
-
-\N{1}{49}The job file.
-This routine is the most system specific one. If your operating system needs
-a different outline, make appropriate changes here.
-
-You have to call this batch file after \.{hbf2gf} has finished (if not in
-\mf-like mode). It will transform the \.{GF} files into \.{PK} files and
-delete the now unnecessary \.{GF} files, then transform the \.{PL} file into
-a \.{TFM} file and copy it \PB{\\{nmb\_files}} times. The name of the job file
-is
-\PB{\\{output\_name}}.
-
-\Y\B\4\D$\.{EXTENSION\_LENGTH}$ \5
-\T{8}\C{ the maximal length of a file extension }\Y\par
-\B\4\D$\.{GFTOPK\_NAME}$ \5
-\.{"gftopk"}\par
-\B\4\D$\.{PLTOTF\_NAME}$ \5
-\.{"pltotf"}\par
-\B\4\D$\.{OVP2OVF\_NAME}$ \5
-\.{"ovp2ovf"}\par
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{char} ${}\\{job\_extension}[\.{EXTENSION\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}\\{rm\_command}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}\\{cp\_command}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}\\{pk\_directory}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}\\{tfm\_directory}[\.{STRING\_LENGTH}+\T{1}]{}$;\7
-\&{int} \\{ofm\_file}${}\K\.{FALSE}{}$;\par
-\fi
-
-\M{50}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{write\_job}(\&{void});\par
-\fi
-
-\M{51}
-\Y\B\&{void} \\{write\_job}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{FILE} ${}{*}\\{out};{}$\6
-\&{int} \|i${},{}$ \|j;\6
-\&{char} ${}\\{buffer}[\.{FILE\_NAME\_LENGTH}+\T{1}];{}$\7
-${}\\{strcpy}(\\{buffer},\39\\{output\_name});{}$\6
-${}\\{strcat}(\\{buffer},\39\\{job\_extension});{}$\6
-\&{if} ${}(\R(\\{out}\K\\{fopen}(\\{buffer},\39\.{WRITE\_TXT}))){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ open\ `\%s'\\}\)\.{n"},\39%
-\\{buffer});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"\\nWriting\ `\%s'\\n"},\39\\{buffer}){}$;\2\7
-\&{if} (\\{pk\_files})\5
-${}\{{}$\1\6
-\&{if} (\\{unicode})\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K(\\{min\_char}\GG\T{8}),\39\|j\K\T{0};{}$ ${}\|j<\\{nmb%
-\_files};{}$ ${}\|i\PP,\39\|j\PP){}$\1\5
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\%s\ \%s\%02x.gf\ \%s\%s\%0}\)\.{2x.\%.0ipk\\n"}\6
-\.{"\%s\ \%s\%02x.gf\\n"}${},{}$\6
-\.{GFTOPK\_NAME}${},\39\\{output\_name},\39\|i,{}$\6
-\\{pk\_directory}${},\39\\{output\_name},\39\|i,\39\\{long\_extension}\?(%
-\&{int})(\\{dpi\_x}*\\{magstep\_x}+\T{0.5}):\T{0},{}$\6
-\\{rm\_command}${},\39\\{output\_name},\39\|i);{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K\T{1};{}$ ${}\|i\Z\\{nmb\_files};{}$ ${}\|i\PP){}$\1\5
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\%s\ \%s\%02i.gf\ \%s\%s\%0}\)\.{2i.\%.0ipk\\n"}\6
-\.{"\%s\ \%s\%02i.gf\\n"}${},{}$\6
-\.{GFTOPK\_NAME}${},\39\\{output\_name},\39\|i,{}$\6
-\\{pk\_directory}${},\39\\{output\_name},\39\|i,\39\\{long\_extension}\?(%
-\&{int})(\\{dpi\_x}*\\{magstep\_x}+\T{0.5}):\T{0},{}$\6
-\\{rm\_command}${},\39\\{output\_name},\39\|i);{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\7
-\&{if} (\\{tfm\_files})\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n"}\6
-\.{"\%s\ \%s.pl\ \%s.tfm\\n"}\6
-\.{"\%s\ \%s.pl\\n"}\6
-\.{"\\n"}${},{}$\6
-\.{PLTOTF\_NAME}${},\39\\{output\_name},\39\\{output\_name},{}$\6
-\\{rm\_command}${},\39\\{output\_name}){}$;\7
-\&{if} (\\{unicode})\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K(\\{min\_char}\GG\T{8}),\39\|j\K\T{0};{}$ ${}\|j<\\{nmb%
-\_files};{}$ ${}\|i\PP,\39\|j\PP){}$\1\5
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\%s\ \%s.tfm\ \%s\%s\%02x.}\)\.{tfm\\n"}${},{}$\6
-\\{cp\_command}${},\39\\{output\_name},\39\\{tfm\_directory},\39\\{output%
-\_name},\39\|i);{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K\T{1};{}$ ${}\|i\Z\\{nmb\_files};{}$ ${}\|i\PP){}$\1\5
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\%s\ \%s.tfm\ \%s\%s\%02i.}\)\.{tfm\\n"}${},{}$\6
-\\{cp\_command}${},\39\\{output\_name},\39\\{tfm\_directory},\39\\{output%
-\_name},\39\|i);{}$\2\6
-\4${}\}{}$\2\7
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n"}\6
-\.{"\%s\ \%s.tfm"}${},{}$\6
-\\{rm\_command}${},\39\\{output\_name});{}$\6
-\4${}\}{}$\2\7
-\&{if} (\\{ofm\_file})\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{out},{}$\6
-\.{"\\n"}\6
-\.{"\%s\ \%s.ovp\ \%s.ovf\ \%s}\)\.{.ofm\\n"}\6
-\.{"\%s\ \%s.ovp\\n"}\6
-\.{"\\n"}${},{}$\6
-\.{OVP2OVF\_NAME}${},\39\\{output\_name},\39\\{output\_name},\39\\{output%
-\_name},{}$\6
-\\{rm\_command}${},\39\\{output\_name});{}$\6
-\4${}\}{}$\2\7
-\\{fclose}(\\{out});\6
-\4${}\}{}$\2\par
-\fi
-
-\N{1}{52}The configuration file.
-Here is a list with all necessary keywords (and parameters):
-\medskip
-\halign{\quad\.{#}\hfil&\quad#\hfil\cr
-hbf\_header   & the HBF header file name of the input font(s). \cr
-output\_name  & the name stem of the output files. \cr
-& Should be equal to the name of the configuration file
-in most cases.\cr
-& A running two digit decimal number starting with
-\.{01} will be appended. \cr
-& (For Unicode fonts see the keyword \.{unicode}
-below.) \cr
-}
-\bigskip
-And now all optional keywords:
-\medskip
-\halign{\quad\.{#}\hfil&\quad#\hfil\cr
-x\_offset            & increases the character width. \cr
-& Will be applied on both sides; \cr
-& default is the value given in the HBF header
-(\.{HBF\_BITMAP\_BOUNDING\_BOX}) \cr
-& scaled to \\{design\/}size (in pixels). \cr
-y\_offset            & shifts all characters up or down; \cr
-& default is the value given in the HBF header
-(\.{HBF\_BITMAP\_BOUNDING\_BOX}) \cr
-& scaled to \\{design\/}size (in pixels). \cr
-design\_size         & the design size (in points) of the font. \cr
-& \.{x\_offset} and \.{y\_offset} refer to this
-size. \cr
-& Default is \PB{\T{10.0}} \cr
-target\_size         & This command is obsolete now and will be
-ignored.\cr
-& \cr
-slant                & the slant of the font (given as $\Delta x /
-\Delta y$). \cr
-& Only values in the range \PB{$\T{0}\Z\\{slant}\Z\T{1}$}
-are allowed. \cr
-& Default is \PB{\T{0.0}} \cr
-rotation             & if set to `yes'. the glyphs are rotated
-90~degrees counter-clockwise. \cr
-& The default offsets as given in the HBF header
-will be ignored (and set to~\PB{\T{0}}). \cr
-& Default is `no'. \cr
-& \cr
-mag\_x               & \cr
-mag\_y               & scaling values of the characters to reach
-design size. \cr
-& If only one magnification is given, x and y
-values are assumed to be equal. \cr
-& Default is \.{mag\_x} $=$ \.{mag\_y} $=$ \PB{\T{1.0}}
-\cr
-threshold            & A value between \PB{\T{1}} and \PB{\T{254}} defining a
-threshold for converting the internal \cr
-& graymap into the output bitmap; lower values
-cut more pixels. \cr
-& Default value is \PB{\T{128}}. \cr
-& \cr
-comment              & a comment describing the font; \cr
-& default is none. \cr
-& \cr
-nmb\_fonts           & the number of the fonts. \cr
-& Default value is~\PB{${-}\T{1}$} for creating all
-fonts. \cr
-unicode              & if `yes', a two digit hexadecimal number will
-be used as a running number, \cr
-& starting with the value of the first byte of
-the first code range. \cr
-& Default is `no'. \cr
-min\_char            & the minimum of the encoding range. \cr
-& Specify this value if it is not identical to
-the lowest code value \cr
-& in the HBF file (to which it defaults). \cr
-& \cr
-dpi\_x               & \cr
-dpi\_y               & the horizontal and vertical resolution (in
-dpi) of the printer. \cr
-& If only one resolution is given, x and y
-values are assumed to be equal. \cr
-& Default is \PB{\T{300}}. \cr
-checksum             & a checksum to identify the \.{GF} files
-with the appropriate \.{TFM} files. \cr
-& The default of this 32~bit unsigned integer
-is \PB{\T{0}}. \cr
-coding               & a comment describing the coding scheme; \cr
-& default is none. \cr
-& \cr
-pk\_directory        & the destination directory of the
-\.{PK} files; \cr
-& default: none. \cr
-& Attention! The batch file will not check
-whether this directory exists. \cr
-tfm\_directory       & the destination directory of the
-\.{TFM} files; \cr
-& default: none. \cr
-& Attention! The batch file will not check
-whether this directory exists. \cr
-pk\_files            & whether to create \.{PK} files or not; \cr
-& default is `yes'. \cr
-tfm\_files           & whether to create \.{TFM} files or not; \cr
-& default is `yes'. \cr
-ofm\_file            & whether to create an \.{OFM} and an
-\.{OVF} file or not; \cr
-& default is `no'. \cr
-long\_extension      & if `yes', \.{PK} files will include the
-resolution in the extension \cr
-& (e.g. \.{gsso1201.300pk}). \cr
-& This affects the batch file only (default is
-`yes'). \cr
-rm\_command          & this shell command removes files; \cr
-& default: `rm'. \cr
-cp\_command          & this shell command copies files; \cr
-& default: `cp'. \cr
-job\_extension       & the extension of the batch file which calls
-\.{GFtoPK} and \.{PLtoTF} \cr
-& to convert the \.{GF} and the
-\.{PL} files into \.{PK} and
-\.{TFM} files; \cr
-& default is none. \cr
-}
-\bigskip
-
-The searching algorithm (for the keywords) of \.{hbf2gf} is case
-insensitive; it makes no difference whether you write for example \.{comment}
-or \.{CommenT}. The keywords must start a line (be in the first column), and
-the corresponding parameters must be on the same line with the keyword and
-separated by at least one space or tabulator stop. Lines starting not with a
-keyword are ignored.
-
-Key values \\{are} case sensitive (except \.{yes} and \.{no}).
-
-The default system dependent values are for \UNIX/-like operating systems;
-if you use for example DOS, you must write
-\medskip
-\halign{\quad\.{#}\hfil&\quad\.{#}\hfil\cr
-long\_extension     & no  \cr
-rm\_command         & del  \cr
-cp\_command         & copy \cr
-job\_extension      & .bat \cr
-}
-\medskip
-
-Both the values \PB{\\{pk\_output\_size\_x}} and \PB{\\{pk\_output\_size\_y}}
-must not exceed
-\PB{\.{MAX\_CHAR\_SIZE}}; \.{x\_offset} and \.{y\_offset} are related to the
-design size (and not to the input size).
-
-In \mf-like mode, one \.{GF} file and one \.{PL} file will be computed
-(depending on the command line options \.{-g} and \.{-p}), taking
-\PB{\\{x\_resolution}} and \PB{\\{y\_scale}} from the command line. \.{nmb%
-\_fonts} will
-always be set to~\PB{\T{1}}; no job file will be created.
-
-
-\fi
-
-\M{53}
-\Y\B\4\D$\.{PRINTER\_MIN\_RES\_X}$ \5
-\T{50}\par
-\B\4\D$\.{PRINTER\_MIN\_RES\_Y}$ \5
-\T{50}\par
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{char} ${}\\{Buffer}[\.{STRING\_LENGTH}+\T{1}]{}$;\par
-\fi
-
-\M{54}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{read\_config}(\&{void});\par
-\fi
-
-\M{55}
-If \PB{\\{config\_file}} isn't found in \mf-like mode we assume that the font
-isn't a HBF font at all.
-
-\Y\B\&{void} \\{read\_config}(\&{void})\1\1\2\2\6
-${}\{{}$\1\6
-\&{HBF\_BBOX} ${}{*}\\{boxp};{}$\6
-\&{char} ${}{*}\\{real\_config\_file};{}$\7
-\X56:Handle extension\X\7
-${}\\{real\_config\_file}\K\\{TeX\_search\_cfg\_file}(\\{config\_file});{}$\6
-\&{if} ${}(\R\\{real\_config\_file}){}$\5
-${}\{{}$\1\6
-\&{if} (\\{mf\_like})\5
-${}\{{}$\1\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"Couldn't\ find\ `\%s'\\}\)\.{n"},\39\\{config\_file});{}$\2\6
-\\{exit}(\T{2});\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ find\ `\%s'\\}\)\.{n"},\39\\{config%
-\_file});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\7
-\&{if} ${}(\R(\\{config}\K\\{fopen}(\\{real\_config\_file},\39\.{READ%
-\_TXT}))){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\R\\{testing}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ open\ `\%s'\\}\)\.{n"},\39\\{config%
-\_file});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{else}\C{ We reach this point only if no searching library is used }\6
-${}\{{}$\1\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ find\ or\ op}\)\.{en\ `\%s'\\n"},\39%
-\\{config\_file});{}$\2\6
-\\{exit}(\T{2});\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\7
-\&{if} (\\{testing})\5
-${}\{{}$\1\6
-\&{if} ${}(\R\\{quiet}){}$\1\5
-${}\\{printf}(\.{"\%s\\n"},\39\\{real\_config\_file});{}$\2\6
-\\{exit}(\T{0});\6
-\4${}\}{}$\2\6
-\X57:Necessary parameters\X\6
-\X59:Optional parameters\X\7
-\X61:Get code range\X\6
-\X63:Get sub code range\X\7
-\\{fclose}(\\{config});\6
-\4${}\}{}$\2\par
-\fi
-
-\M{56}
-Here we check whether we have to add an extension.
-
-\Y\B\4\X56:Handle extension\X${}\E{}$\6
-${}\{{}$\1\6
-\&{int} \|i${},{}$ \\{lastext}${}\K{-}\T{1};{}$\7
-\&{for} ${}(\|i\K\T{0};{}$ \\{config\_file}[\|i]; ${}\|i\PP){}$\1\6
-\&{if} ${}(\\{config\_file}[\|i]\E\.{'.'}){}$\1\5
-${}\\{lastext}\K\|i;{}$\2\6
-\&{else} \&{if} ${}(\\{config\_file}[\|i]\E\.{'/'}\V\\{config\_file}[\|i]\E%
-\.{':'}\V\\{config\_file}[\|i]\E\.{'\\\\'}){}$\1\5
-${}\\{lastext}\K{-}\T{1}{}$;\2\2\7
-\&{if} ${}(\\{lastext}\E{-}\T{1}){}$\1\5
-${}\\{strcat}(\\{config\_file},\39\.{".cfg"});{}$\2\6
-\4${}\}{}$\2\par
-\U55.\fi
-
-\M{57}
-\Y\B\4\X57:Necessary parameters\X${}\E{}$\6
-${}\{{}$\1\6
-\&{char} ${}\\{hbf\_header}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}{*}\\{real\_hbf\_header};{}$\7
-\&{if} ${}(\R\\{fsearch}(\.{"hbf\_header"})){}$\1\5
-\\{config\_error}(\.{"hbf\_header"});\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{hbf\_header},\39\\{Buffer}){}$;\2\7
-${}\\{real\_hbf\_header}\K\\{TeX\_search\_hbf\_file}(\\{hbf\_header});{}$\6
-\&{if} ${}(\R\\{real\_hbf\_header}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ find\ `\%s'\\}\)\.{n"},\39\\{hbf%
-\_header});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-${}\\{hbfDebug}\K\T{1}{}$;\C{ we activate error messages of the HBF API
-                               while scanning the HBF header file }\7
-\&{if} ${}(\R(\\{hbf}\K\\{hbfOpen}(\\{real\_hbf\_header}))){}$\1\5
-\\{exit}(\T{1});\2\7
-${}\\{hbfDebug}\K\T{0}{}$;\7
-${}\\{boxp}\K\\{hbfBitmapBBox}(\\{hbf});{}$\6
-${}\\{input\_size\_x}\K\\{boxp}\MG\\{hbf\_height}{}$;\C{ will be checked later
-for rotation }\6
-${}\\{input\_size\_y}\K\\{boxp}\MG\\{hbf\_width};{}$\6
-${}\\{font\_encoding}\K\\{hbfProperty}(\\{hbf},\39\.{"HBF\_CODE\_SCHEME"}){}$;\7
-\&{if} ${}(\R\\{fsearch}(\.{"output\_name"})){}$\1\5
-\\{config\_error}(\.{"output\_name"});\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{output\_name},\39\\{Buffer});{}$\2\6
-\4${}\}{}$\2\par
-\U55.\fi
-
-\M{58}
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{int} \\{offset\_x};\6
-\&{int} \\{offset\_y};\7
-\&{HBF\_CHAR} \\{user\_min\_char};\6
-\&{int} \\{have\_min\_char}${}\K\.{FALSE}{}$;\par
-\fi
-
-\M{59}
-\Y\B\4\X59:Optional parameters\X${}\E{}$\6
-${}\{{}$\1\6
-\&{if} (\\{fsearch}(\.{"nmb\_files"}))\1\5
-${}\\{nmb\_files}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{if} (\\{fsearch}(\.{"unicode"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'y'}\V\\{Buffer}[\T{0}]\E\.{'Y'}){}$\1\5
-${}\\{unicode}\K\.{TRUE};{}$\2\2\6
-\&{if} (\\{fsearch}(\.{"min\_char"}))\5
-${}\{{}$\1\6
-${}\\{user\_min\_char}\K\\{strtoul}(\\{Buffer},\39{}$(\&{char} ${}{*}{*}){}$
-${}\NULL,\39\T{0});{}$\6
-${}\\{have\_min\_char}\K\.{TRUE};{}$\6
-\4${}\}{}$\2\7
-\&{if} ${}(\R\\{mf\_like}){}$\5
-${}\{{}$\1\6
-\&{if} (\\{fsearch}(\.{"pk\_files"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'n'}\V\\{Buffer}[\T{0}]\E\.{'N'}){}$\1\5
-${}\\{pk\_files}\K\.{FALSE};{}$\2\2\6
-\&{if} (\\{fsearch}(\.{"tfm\_files"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'n'}\V\\{Buffer}[\T{0}]\E\.{'N'}){}$\1\5
-${}\\{tfm\_files}\K\.{FALSE};{}$\2\2\6
-\&{if} (\\{fsearch}(\.{"ofm\_file"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'y'}\V\\{Buffer}[\T{0}]\E\.{'Y'}){}$\1\5
-${}\\{ofm\_file}\K\.{TRUE};{}$\2\2\6
-\&{if} (\\{fsearch}(\.{"long\_extension"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'n'}\V\\{Buffer}[\T{0}]\E\.{'N'}){}$\1\5
-${}\\{long\_extension}\K\.{FALSE};{}$\2\2\6
-\4${}\}{}$\2\7
-\&{if} (\\{fsearch}(\.{"slant"}))\1\5
-${}\\{slant}\K\\{atof}(\\{Buffer});{}$\2\6
-\&{if} ${}(\\{slant}<\T{0.0}\V\\{slant}>\T{1.0}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ slant\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} (\\{fsearch}(\.{"rotation"}))\1\6
-\&{if} ${}(\\{Buffer}[\T{0}]\E\.{'y'}\V\\{Buffer}[\T{0}]\E\.{'Y'}){}$\1\5
-${}\\{rotation}\K\.{TRUE}{}$;\2\2\7
-\&{if} (\\{fsearch}(\.{"mag\_x"}))\1\5
-${}\\{mag\_x}\K\\{atof}(\\{Buffer});{}$\2\6
-\&{if} (\\{fsearch}(\.{"mag\_y"}))\1\5
-${}\\{mag\_y}\K\\{atof}(\\{Buffer});{}$\2\6
-\&{if} ${}(\R\\{mag\_x}\W\R\\{mag\_y}){}$\5
-${}\{{}$\1\6
-${}\\{mag\_x}\K\T{1.0};{}$\6
-${}\\{mag\_y}\K\T{1.0};{}$\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{mag\_x}\W\R\\{mag\_y}){}$\1\5
-${}\\{mag\_y}\K\\{mag\_x};{}$\2\6
-\&{if} ${}(\\{mag\_y}\W\R\\{mag\_x}){}$\1\5
-${}\\{mag\_x}\K\\{mag\_y};{}$\2\6
-\&{if} ${}(\\{mag\_x}\Z\T{0.0}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ horizontal\ }\)\.{magnification%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{mag\_y}\Z\T{0.0}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ vertical\ ma}\)\.{gnification%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{if} (\\{fsearch}(\.{"dpi\_x"}))\1\5
-${}\\{dpi\_x}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{if} (\\{fsearch}(\.{"dpi\_y"}))\1\5
-${}\\{dpi\_y}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{if} ${}(\R\\{dpi\_x}\W\R\\{dpi\_y}){}$\5
-${}\{{}$\1\6
-${}\\{dpi\_x}\K\T{300};{}$\6
-${}\\{dpi\_y}\K\T{300};{}$\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{dpi\_x}\W\R\\{dpi\_y}){}$\1\5
-${}\\{dpi\_y}\K\\{dpi\_x};{}$\2\6
-\&{if} ${}(\\{dpi\_y}\W\R\\{dpi\_x}){}$\1\5
-${}\\{dpi\_x}\K\\{dpi\_y};{}$\2\6
-\&{if} ${}(\\{dpi\_x}\Z\.{PRINTER\_MIN\_RES\_X}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ horizontal\ }\)\.{printer\ resolution%
-\\n}\)\.{"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\\{dpi\_y}\Z\.{PRINTER\_MIN\_RES\_Y}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ vertical\ pr}\)\.{inter\ resolution%
-\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{if} (\\{fsearch}(\.{"design\_size"}))\1\5
-${}\\{design\_size}\K\\{atof}(\\{Buffer}){}$;\2\7
-\&{if} (\\{fsearch}(\.{"x\_offset"}))\1\5
-${}\\{offset\_x}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{else}\1\5
-${}\\{offset\_x}\K\\{rotation}\?\T{0}:(\\{boxp}\MG\\{hbf\_xDisplacement}*\\{mag%
-\_x}+\T{0.5});{}$\2\6
-\&{if} (\\{fsearch}(\.{"y\_offset"}))\1\5
-${}\\{offset\_y}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{else}\1\5
-${}\\{offset\_y}\K\\{rotation}\?\T{0}:(\\{boxp}\MG\\{hbf\_yDisplacement}*\\{mag%
-\_y}+\T{0.5});{}$\2\6
-\&{if} ${}(\R\\{fsearch}(\.{"comment"})){}$\1\5
-${}\\{comment}[\T{0}]\K\.{'\\0'};{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{comment},\39\\{Buffer}){}$;\2\7
-\&{if} (\\{fsearch}(\.{"threshold"}))\1\5
-${}\\{threshold}\K\\{atoi}(\\{Buffer});{}$\2\6
-\&{if} ${}(\\{threshold}\Z\T{0}\V\\{threshold}\G\T{255}){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Invalid\ threshold\\n}\)\.{"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\7
-\&{if} ${}(\R\\{fsearch}(\.{"checksum"})){}$\1\5
-${}\\{checksum}\K\T{0};{}$\2\6
-\&{else}\1\5
-${}\\{checksum}\K\\{strtoul}(\\{Buffer},\39{}$(\&{char} ${}{*}{*}){}$ ${}\NULL,%
-\39\T{0}){}$;\2\7
-\&{if} ${}(\R\\{fsearch}(\.{"coding"})){}$\1\5
-${}\\{coding}[\T{0}]\K\.{'\\0'};{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{coding},\39\\{Buffer}){}$;\2\7
-\&{if} ${}(\R\\{fsearch}(\.{"pk\_directory"})){}$\1\5
-${}\\{pk\_directory}[\T{0}]\K\.{'\\0'};{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{pk\_directory},\39\\{Buffer}){}$;\2\7
-\&{if} ${}(\R\\{fsearch}(\.{"tfm\_directory"})){}$\1\5
-${}\\{tfm\_directory}[\T{0}]\K\.{'\\0'};{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{tfm\_directory},\39\\{Buffer}){}$;\2\7
-\&{if} (\\{fsearch}(\.{"rm\_command"}))\1\5
-${}\\{strcpy}(\\{rm\_command},\39\\{Buffer});{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{rm\_command},\39\.{"rm"}){}$;\2\7
-\&{if} (\\{fsearch}(\.{"cp\_command"}))\1\5
-${}\\{strcpy}(\\{cp\_command},\39\\{Buffer});{}$\2\6
-\&{else}\1\5
-${}\\{strcpy}(\\{cp\_command},\39\.{"cp"}){}$;\2\7
-\&{if} ${}(\R\\{fsearch}(\.{"job\_extension"})){}$\1\5
-${}\\{job\_extension}[\T{0}]\K\.{'\\0'};{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}\\{strncpy}(\\{job\_extension},\39\\{Buffer},\39\.{EXTENSION\_LENGTH});{}$\6
-${}\\{job\_extension}[\.{EXTENSION\_LENGTH}]\K\.{'\\0'};{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\par
-\U55.\fi
-
-\M{60}
-The function \PB{\\{hbfGetCodeRange}(\,)} is an extension to the HBF API.
-
-Successive calls return the code ranges in ascending order; we only need the
-extrema of the whole code range.
-
-In case \PB{\\{min\_char}} has been supplied in the configuration file, we use
-that
-value instead.
-
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{HBF\_CHAR} \\{min\_char}${},{}$ \\{max\_char};\par
-\fi
-
-\M{61}
-\Y\B\4\X61:Get code range\X${}\E{}$\6
-${}\{{}$\1\6
-\&{const} \&{void} ${}{*}\\{cp};{}$\6
-\&{HBF\_CHAR} \\{dummy};\7
-${}\\{cp}\K\\{hbfGetCodeRange}(\\{hbf},\39\NULL,\39{\AND}\\{min\_char},\39{%
-\AND}\\{max\_char});{}$\6
-\&{for} ( ; ${}\\{cp}\I\NULL;{}$ ${}\\{cp}\K\\{hbfGetCodeRange}(\\{hbf},\39%
-\\{cp},\39{\AND}\\{dummy},\39{\AND}\\{max\_char})){}$\1\5
-;\2\7
-\&{if} (\\{have\_min\_char})\1\5
-${}\\{min\_char}\K\\{user\_min\_char};{}$\2\6
-\4${}\}{}$\2\par
-\U55.\fi
-
-\M{62}
-The function \PB{\\{hbfGetByte2Range}(\,)} is an extension to the HBF API.
-
-Successive calls return the byte~2 ranges in ascending order. We raise
-\PB{\.{VALID\_SUBCODE}} in the array \PB{\\{b2\_codes}[\,]} for all characters
-in subcode
-ranges.
-
-\Y\B\4\D$\.{VALID\_SUBCODE}$ \5
-\T{1}\par
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{char} \\{b2\_codes}[\T{256}];\6
-\&{unsigned} \&{char} \\{min\_2\_byte}${},{}$ \\{max\_2\_byte};\6
-\&{int} \\{nmb\_2\_bytes}${}\K\T{0}{}$;\par
-\fi
-
-\M{63}
-\Y\B\4\X63:Get sub code range\X${}\E{}$\6
-${}\{{}$\1\6
-\&{const} \&{void} ${}{*}\\{b2r};{}$\6
-\&{unsigned} \&{char} \\{dummy};\6
-\&{int} \|i;\7
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\T{256};{}$ ${}\|i\PP){}$\1\5
-${}\\{b2\_codes}[\|i]\K\T{0}{}$;\2\7
-${}\\{b2r}\K\\{hbfGetByte2Range}(\\{hbf},\39\NULL,\39{\AND}\\{min\_2\_byte},%
-\39{\AND}\\{max\_2\_byte});{}$\6
-${}\\{dummy}\K\\{min\_2\_byte};{}$\6
-\&{for} ( ; ${}\\{b2r}\I\NULL;{}$ ${}\\{b2r}\K\\{hbfGetByte2Range}(\\{hbf},\39%
-\\{b2r},\39{\AND}\\{dummy},\39{\AND}\\{max\_2\_byte})){}$\5
-${}\{{}$\1\6
-\&{for} ${}(\|i\K\\{dummy};{}$ ${}\|i\Z\\{max\_2\_byte};{}$ ${}\|i\PP){}$\1\5
-${}\\{b2\_codes}[\|i]\K\.{VALID\_SUBCODE};{}$\2\6
-\4${}\}{}$\2\7
-\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\T{256};{}$ ${}\|i\PP{}$)\C{ compute the
-number of valid \PB{\\{b2\_codes}} }\1\6
-\&{if} ${}(\\{b2\_codes}[\|i]\E\.{VALID\_SUBCODE}){}$\1\5
-${}\\{nmb\_2\_bytes}\PP;{}$\2\2\6
-\4${}\}{}$\2\par
-\U55.\fi
-
-\M{64}
-This search routine is case insignificant. Each keyword must start a line;
-the function checks whether the character before the keyword is a newline
-character (\PB{\.{'\\n'}}). It also checks the presence of a parameter and
-fills
-\PB{\\{Buffer}} if existent. \PB{\\{fsearch}(\,)} returns~1 on success.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{int} \\{fsearch}(\&{const} \&{char} ${}{*}){}$;\par
-\fi
-
-\M{65}
-\Y\B\&{int} \\{fsearch}(\&{const} \&{char} ${}{*}\\{search\_string}){}$\1\1\2\2%
-\6
-${}\{{}$\1\6
-\&{char} ${}{*}\|P,{}$ \|p;\6
-\&{const} \&{char} ${}{*}\|Q;{}$\6
-\&{char} ${}\\{temp\_buffer}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}\\{env\_name}[\.{STRING\_LENGTH}+\T{1}];{}$\6
-\&{char} ${}{*}\\{env\_p};{}$\6
-\&{char} ${}{*}\\{env\_value};{}$\6
-\&{char} ${}{*}\\{Buf\_p};{}$\6
-\&{int} \\{Ch}${},{}$ \\{ch}${},{}$ \\{old\_ch}${}\K\.{'\\n'};{}$\6
-\&{int} \\{count}${}\K\.{STRING\_LENGTH};{}$\7
-\\{rewind}(\\{config});\C{ we start at offset~0 }\7
-\&{do}\5
-${}\{{}$\1\6
-${}\|Q\K\\{search\_string};{}$\6
-${}\|p\K\\{tolower}({*}\|Q);{}$\6
-${}\\{Ch}\K\\{fgetc}(\\{config});{}$\6
-${}\\{ch}\K\\{tolower}(\\{Ch});{}$\6
-\&{while} ${}(\R(\\{ch}\E\|p\W\\{old\_ch}\E\.{'\\n'})\W\\{Ch}\I\.{EOF}{}$)\C{
-search first character of \PB{\\{search\_string}};
-           \PB{\.{'\\n'}} must be the character before }\6
-${}\{{}$\1\6
-${}\\{old\_ch}\K\\{ch};{}$\6
-${}\\{Ch}\K\\{fgetc}(\\{config});{}$\6
-${}\\{ch}\K\\{tolower}(\\{Ch});{}$\6
-\4${}\}{}$\2\7
-\&{for} ( ;  ; \,)\5
-${}\{{}$\1\6
-\&{if} ${}({*}(\PP\|Q)\E\.{'\\0'}){}$\1\6
-\&{if} ${}((\\{Ch}\K\\{fgetc}(\\{config}))\E\.{'\ '}\V\\{Ch}\E\.{'\\t'}{}$)\C{
-there must be a space or a tab stop after the keyword }\1\6
-\&{goto} \\{success};\2\2\6
-${}\\{Ch}\K\\{fgetc}(\\{config});{}$\6
-\&{if} ${}(\\{tolower}(\\{Ch})\I\\{tolower}({*}\|Q)){}$\1\5
-\&{break};\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\5
-\&{while} ${}(\\{Ch}\I\.{EOF}){}$;\7
-\&{return} \T{0};\7
-\4\\{success}:\5
-${}\|P\K\\{temp\_buffer}{}$;\7
-\&{while} ${}((\\{Ch}\K\\{fgetc}(\\{config}))\E\.{'\ '}\V\\{Ch}\E\.{'\\t'}{}$)%
-\C{ remove leading blanks and tabs }\1\6
-;\2\6
-\&{while} ${}(\\{Ch}\I\.{'\\n'}\W\MM\\{count}>\T{0}\W\\{Ch}\I\.{EOF}{}$)\C{
-fill \PB{\\{Buffer}} }\6
-${}\{{}$\1\6
-${}{*}\|P\PP\K\\{Ch};{}$\6
-${}\\{Ch}\K\\{fgetc}(\\{config});{}$\6
-\4${}\}{}$\2\6
-${}{*}\|P\K\.{'\\0'}{}$;\7
-\&{if} ${}({*}\\{temp\_buffer}){}$\1\5
-\X66:Check for environment variables\X\2\6
-\&{else}\1\5
-${}{*}\\{Buffer}\K\.{'\\0'}{}$;\2\7
-\&{return} ${}({*}\\{Buffer})\?\T{1}:\T{0}{}$;\C{ is there something in the
-buffer? }\6
-\4${}\}{}$\2\par
-\fi
-
-\M{66}
-To make the configuration file more flexible we allow environment variables
-in the arguments. We scan the parameter stored in \PB{\\{temp\_buffer}} whether
-it
-contains a `\.{\$}' character. If yes, the following code fragment tries to
-get an environment variable name whose value will be then fetched with
-\PB{\\{getenv}(\,)}. An environment variable name recognized by \.{hbf2gf} must
-start
-with a letter or underscore; the other characters may be alphanumeric or an
-underscore. You can surround the environment variable name with braces to
-indicate where the name ends, e.g. \.{\$\{FOO\}}. The interpolated
-configuration parameter will be truncated to \PB{\.{STRING\_LENGTH}}
-characters. If
-you want to have `\.{\$}' you must write `\.{\$\$}'.
-
-Note that you should avoid to use such environment variables for specifying
-the location of the configuration file in case you have support for a file
-searching library like kpathsea. Its primary aim is to specify the target
-directories for the \.{pk\_directory} and the \.{tfm\_directory} keywords.
-
-\Y\B\4\X66:Check for environment variables\X${}\E{}$\6
-${}\{{}$\1\6
-${}\|P\K\\{temp\_buffer};{}$\6
-${}\\{Buf\_p}\K\\{Buffer};{}$\6
-${}\\{count}\K\.{STRING\_LENGTH}-\T{1}{}$;\7
-\&{while} ${}({*}\|P\W\\{count}>\T{0}){}$\5
-${}\{{}$\1\6
-${}\\{env\_p}\K\\{env\_name}{}$;\7
-\&{if} ${}({*}\|P\E\.{'\$'}){}$\5
-${}\{{}$\1\6
-${}\|P\PP;{}$\6
-\&{if} ${}({*}\|P\E\.{'\$'}){}$\5
-${}\{{}$\1\6
-${}{*}(\\{Buf\_p}\PP)\K{*}(\|P\PP);{}$\6
-${}\\{count}\MM;{}$\6
-\&{continue};\6
-\4${}\}{}$\2\6
-\&{while} ${}({*}\|P\E\.{'\{'}){}$\1\5
-${}\|P\PP;{}$\2\6
-\&{if} ${}(\R(\\{isalpha}({*}\|P)\V{*}\|P\E\.{'\_'})){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},{}$\6
-\.{"Invalid\ environment}\)\.{\ variable\ name\ in\ co}\)\.{nfiguration\ file%
-\\n"});\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-${}{*}(\\{env\_p}\PP)\K{*}(\|P\PP);{}$\6
-\&{while} ${}({*}\|P){}$\5
-${}\{{}$\1\6
-\&{if} ${}(\\{isalnum}({*}\|P)\V{*}\|P\E\.{'\_'}){}$\1\5
-${}{*}(\\{env\_p}\PP)\K{*}(\|P\PP);{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-\&{while} ${}({*}\|P\E\.{'\}'}){}$\1\5
-${}\|P\PP;{}$\2\6
-${}{*}\\{env\_p}\K\.{'\\0'};{}$\6
-\&{break};\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\7
-${}\\{env\_value}\K\\{getenv}(\\{env\_name});{}$\6
-\&{if} (\\{env\_value})\C{ append the environment value to \PB{\\{Buffer}} }\6
-${}\{{}$\1\6
-\&{while} ${}({*}\\{env\_value}\W\\{count}>\T{0}){}$\5
-${}\{{}$\1\6
-${}{*}(\\{Buf\_p}\PP)\K{*}(\\{env\_value}\PP);{}$\6
-${}\\{count}\MM;{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-\&{else}\5
-${}\{{}$\1\6
-${}{*}(\\{Buf\_p}\PP)\K{*}(\|P\PP);{}$\6
-${}\\{count}\MM;{}$\6
-\4${}\}{}$\2\6
-\4${}\}{}$\2\6
-${}{*}\\{Buf\_p}\K\.{'\\0'};{}$\6
-\4${}\}{}$\2\par
-\U65.\fi
-
-\M{67}
-If an error occurs, \PB{\\{config\_error}(\,)} will leave the program with an
-error
-message.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{void} \\{config\_error}(\&{const} \&{char} ${}{*}){}$;\par
-\fi
-
-\M{68}
-\Y\B\&{void} \\{config\_error}(\&{const} \&{char} ${}{*}\\{message}){}$\1\1\2\2%
-\6
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ find\ `\%s'\ }\)\.{entry\ in\
-configurati}\)\.{on\ file\\n"},\39\\{message});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\par
-\fi
-
-\N{1}{69}File searching.
-
-We support three searching engines: emtexdir, kpathsea, and MiKTeX (which is
-a Win32 port of kpathsea). For emtexdir, define \PB{\.{HAVE\_EMTEXDIR}} while
-compiling. For kpathsea, define \PB{\.{HAVE\_LIBKPATHSEA}}. For MikTeX, define
-\PB{\.{HAVE\_MIKTEX}}. If none of these macros is defined, a simple \PB{%
-\\{fopen}(\,)} will
-be used instead.
-
-\Y\B\4\X10:Include files\X${}\mathrel+\E{}$\6
-\8\#\&{if} \&{defined} (\.{HAVE\_LIBKPATHSEA})\6
-\8\#\&{include} \.{"kpathsea/kpathsea.h}\)\.{"}\6
-\8\#\&{elif} \&{defined} (\.{HAVE\_EMTEXDIR})\6
-\8\#\&{include} \.{"emtexdir.h"}\6
-\8\#\&{elif} \&{defined} (\.{HAVE\_MIKTEX})\6
-\8\#\&{include} \.{"miktex.h"}\6
-\8\#\&{endif}\par
-\fi
-
-\M{70}
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\8\#\&{if} \&{defined} (\.{HAVE\_EMTEXDIR})\6
-\&{char} \\{emtex\_version\_string}[\,]${}\K\.{"emTeXdir"};{}$\6
-\8\#\&{elif} ${}\R{}$\&{defined} (\.{HAVE\_MIKTEX})\6
-\&{char} \\{no\_version\_string}[\,]${}\K\.{"no\ search\ library"};{}$\6
-\8\#\&{endif}\par
-\fi
-
-\M{71}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{const} \&{char} ${}{*}\\{TeX\_search\_version}(\&{void}){}$;\par
-\fi
-
-\M{72}
-\Y\B\&{const} \&{char} ${}{*}\\{TeX\_search\_version}(\&{void}){}$\1\1\2\2\6
-${}\{{}$\6
-\8\#\&{if} \&{defined} (\.{HAVE\_LIBKPATHSEA})\1\6
-\&{return} \\{kpathsea\_version\_string};\6
-\8\#\&{elif} \&{defined} (\.{HAVE\_EMTEXDIR})\6
-\&{return} \\{emtex\_version\_string};\6
-\8\#\&{elif} \&{defined} (\.{HAVE\_MIKTEX})\7
-\&{char} \\{buf}[\T{200}];\7
-${}\\{strcpy}(\\{buf},\39\.{"MiKTeX\ "});{}$\6
-${}\\{miktex\_get\_miktex\_version\_string\_ex}(\\{buf}+\T{7},\39{}$\&{sizeof}
-(\\{buf})${}-\T{7});{}$\6
-\&{return} \\{buf};\6
-\8\#\&{else}\6
-\&{return} \\{no\_version\_string};\6
-\8\#\&{endif}\6
-\4${}\}{}$\2\par
-\fi
-
-\M{73}
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\8\#\&{ifdef} \.{HAVE\_EMTEXDIR}\6
-\&{struct} \&{emtex\_dir} \\{cfg\_path}${},{}$ \\{hbf\_path};\6
-\8\#\&{endif}\par
-\fi
-
-\M{74}
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\8\#\&{ifdef} \.{HAVE\_EMTEXDIR}\6
-\&{extern} \&{int} \\{setup\_list}(\&{struct} \&{emtex\_dir} ${}{*},\39{}$%
-\&{char} ${}{*},\39{}$\&{const} \&{char} ${}{*},\39\&{unsigned});{}$\6
-\&{int} \\{dir\_setup}(\&{struct} \&{emtex\_dir} ${}{*},\39{}$\&{const} %
-\&{char} ${}{*},\39{}$\&{const} \&{char} ${}{*},\39\&{unsigned});{}$\6
-\&{char} ${}{*}{}$\\{file\_find}(\&{char} ${}{*},\39{}$\&{struct} \&{emtex%
-\_dir} ${}{*});{}$\6
-\8\#\&{endif}\par
-\fi
-
-\M{75}
-We slightly modify \PB{\\{emtex\_dir\_setup}(\,)} (from the file %
-\.{emtexdir.c}) to
-output a warning in case the environment variable \PB{\\{env}} isn't set
-properly.
-
-\Y\B\8\#\&{ifdef} \.{HAVE\_EMTEXDIR}\6
-\&{int} ${}\\{dir\_setup}(\\{ed},\39\\{env},\39\\{dir},\39\\{flags}){}$\1\1\6
-\&{struct} \&{emtex\_dir} ${}{*}\\{ed};{}$\6
-\&{const} \&{char} ${}{*}\\{env};{}$\6
-\&{const} \&{char} ${}{*}\\{dir};{}$\6
-\&{unsigned} \\{flags};\2\2\6
-${}\{{}$\1\6
-\&{const} \&{char} ${}{*}\\{val};{}$\6
-\&{char} \\{path}[\T{260}];\7
-${}\\{ed}\MG\\{alloc}\K\T{0};{}$\6
-${}\\{ed}\MG\\{used}\K\T{0};{}$\6
-${}\\{ed}\MG\\{list}\K\NULL{}$;\7
-\&{if} ${}(\\{env}\I\NULL\W(\\{val}\K\\{getenv}(\\{env}))\I\NULL){}$\1\5
-\&{return} \\{setup\_list}${}(\\{ed},\39\\{path},\39\\{val},\39\\{flags});{}$\2%
-\6
-\&{else}\1\5
-${}\\{fprintf}(\\{stderr},\39\.{"Environment\ variabl}\)\.{e\ `\%s'\ not\ set;\
-use\ }\)\.{current\ directory\\n"},\39\\{env}){}$;\2\7
-\&{return} \.{TRUE};\6
-\4${}\}{}$\2\par
-\fi
-
-\M{76}
-\Y\B\4\X2:Global variables\X${}\mathrel+\E{}$\6
-\&{char} ${}\\{name\_buffer}[\.{FILE\_NAME\_LENGTH}+\T{1}]{}$;\par
-\fi
-
-\M{77}
-\Y\B\&{char} ${}{*}\\{file\_find}(\\{name},\39\\{list}){}$\1\1\6
-\&{char} ${}{*}\\{name};{}$\6
-\&{struct} \&{emtex\_dir} ${}{*}\\{list};\2\2{}$\6
-${}\{{}$\1\6
-\&{if} ${}(\\{emtex\_dir\_find}(\\{name\_buffer},\39{}$\&{sizeof} (\\{name%
-\_buffer})${},\39\\{list},\39\\{name},\39\.{EDF\_CWD})){}$\1\5
-\&{return} \\{name\_buffer};\2\7
-\&{return} ${}\NULL;{}$\6
-\4${}\}{}$\2\6
-\8\#\&{endif}\par
-\fi
-
-\M{78}
-For emtexdir we use the environment variables \.{HBFCFG} and \.{HBFONTS} for
-configuration resp.\ HBF header files.
-
-\Y\B\4\X78:Initialize \TeX\ file searching\X${}\E{}$\6
-\8\#\&{if} \&{defined} (\.{HAVE\_LIBKPATHSEA})\6
-$\\{kpse\_set\_program\_name}(\\{argv}[\T{0}],\39\.{"hbf2gf"});{}$\6
-${}\\{kpse\_init\_prog}(\.{"HBF2GF"},\39\T{300},\39\.{"cx"},\39\.{"cmr10"}){}$;%
-\7
-\8\#\&{elif} \&{defined} (\.{HAVE\_EMTEXDIR})\6
-\&{if} ${}(\R\\{dir\_setup}({\AND}\\{cfg\_path},\39\.{"HBFCFG"},\39\NULL,\39%
-\.{EDS\_BANG})){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ setup\ sear}\)\.{ch\ path\ for\
-configur}\)\.{ation\ files\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\&{if} ${}(\R\\{dir\_setup}({\AND}\\{hbf\_path},\39\.{"HBFONTS"},\39\NULL,\39%
-\.{EDS\_BANG})){}$\5
-${}\{{}$\1\6
-${}\\{fprintf}(\\{stderr},\39\.{"Couldn't\ setup\ sear}\)\.{ch\ path\ for\ HBF\
-head}\)\.{er\ files\\n"});{}$\6
-\\{exit}(\T{1});\6
-\4${}\}{}$\2\6
-\8\#\&{endif}\par
-\U4.\fi
-
-\M{79}
-Finally, here are the searching routines. A special format in the kpathsea
-library for fonts which are neither PostScript nor TrueType (\.{MISCFONTS})
-is available with version~3.3 and newer. For older versions we use the path
-for PostScript fonts (\.{T1FONTS}) to find HBF files. Configuration files
-are searched in the path specified within \.{TEXCONFIG} for old kpathsea
-versions, and within \.{HBF2GFINPUTS} for new versions.
-
-\Y\B\4\X11:Prototypes\X${}\mathrel+\E{}$\6
-\&{char} ${}{*}{}$\\{TeX\_search\_cfg\_file}(\&{char} ${}{*});{}$\6
-\&{char} ${}{*}{}$\\{TeX\_search\_hbf\_file}(\&{char} ${}{*}){}$;\par
-\fi
-
-\M{80}
-\Y\B\8\#\&{if} \&{defined} (\.{HAVE\_LIBKPATHSEA})\6
-\&{char} ${}{*}{}$\\{TeX\_search\_cfg\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{kpse\_find\_file}${}(\\{name},\39\\{kpse\_program\_text\_format},%
-\39\.{TRUE});{}$\6
-\4${}\}{}$\2\7
-\&{char} ${}{*}{}$\\{TeX\_search\_hbf\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{kpse\_find\_file}${}(\\{name},\39\\{kpse\_miscfonts\_format},\39%
-\.{TRUE});{}$\6
-\4${}\}{}$\2\7
-\8\#\&{elif} \&{defined} (\.{HAVE\_EMTEXDIR})\7
-\&{char} ${}{*}{}$\\{TeX\_search\_cfg\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{file\_find}${}(\\{name},\39{\AND}\\{cfg\_path});{}$\6
-\4${}\}{}$\2\7
-\&{char} ${}{*}{}$\\{TeX\_search\_hbf\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{file\_find}${}(\\{name},\39{\AND}\\{hbf\_path});{}$\6
-\4${}\}{}$\2\7
-\8\#\&{elif} \&{defined} (\.{HAVE\_MIKTEX})\7
-\&{char} ${}{*}{}$\\{TeX\_search\_cfg\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{char} \\{result}[\.{\_MAX\_PATH}];\7
-\&{if} ${}(\R\\{miktex\_find\_input\_file}(\.{"hbf2gf"},\39{*}\\{name},\39%
-\\{result})){}$\1\5
-\&{return} \T{0};\2\6
-\&{return} \\{strdup}(\\{result});\6
-\4${}\}{}$\2\7
-\&{char} ${}{*}{}$\\{TeX\_search\_hbf\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{char} \\{result}[\.{\_MAX\_PATH}];\7
-\&{if} ${}(\R\\{miktex\_find\_miscfont\_file}({*}\\{name},\39\\{result})){}$\1\5
-\&{return} \T{0};\2\6
-\&{return} \\{strdup}(\\{result});\6
-\4${}\}{}$\2\7
-\8\#\&{else}\7
-\&{char} ${}{*}{}$\\{TeX\_search\_cfg\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{name};\6
-\4${}\}{}$\2\7
-\&{char} ${}{*}{}$\\{TeX\_search\_hbf\_file}(\&{char} ${}{*}\\{name}){}$\1\1\2%
-\2\6
-${}\{{}$\1\6
-\&{return} \\{name};\6
-\4${}\}{}$\2\6
-\8\#\&{endif}\par
-\fi
-
-\N{1}{81}An example.
-This is the example configuration file \.{b5so12.cfg} (for use with DOS or
-OS/2 and the emtexdir searching engine):
-\bigskip
-\halign{\quad\.{#}\hfil&\quad\.{#}\hfil\cr
-hbf\_header          & et24.hbf \cr
-mag\_x               & 2.076 \cr
-x\_offset            & 3 \cr
-y\_offset            & -8 \cr
-comment              & fanti songti 24x24 pixel font scaled and
-adapted to 12 pt \cr
-& \cr
-design\_size         & 12.0 \cr
-& \cr
-nmb\_fonts           & -1 \cr
-& \cr
-output\_name         & b5so12 \cr
-& \cr
-dpi\_x               & 300 \cr
-checksum             & 123456789 \cr
-coding               & codingscheme Big 5 encoded TeX text \cr
-& \cr
-long\_extension      & no \cr
-job\_extension       & .cmd \cr
-rm\_command          & del \cr
-cp\_command          & copy \cr
-pk\_directory        & \$HBF\_TARGET\\pk\\360dpi\\ \cr
-tfm\_directory       & \$HBF\_TARGET\\tfm\\ \cr
-}
-\bigskip
-If you say e.g.
-\medskip
-\quad \.{set HBF\_TARGET=c:\\emtex\\texfonts}
-\medskip
-on your DOS prompt (or in your \.{autoexec.bat} file), then the interpolated
-value of the \.{tfm\_directory} keyword is \.{c:\\emtex\\texfonts\\tfm\\}.
-The HBF header file \.{et24.hbf} will be searched in the path specified by
-the \.{HBFCFG} environment variable.
-\bigskip
-The call
-\medskip
-\quad \.{hbf2gf b5so12.cfg}
-\medskip
-creates the files
-\medskip
-\quad \.{b5so1201.gf}, \.{b5so1202.gf}, $\ldots$ , \.{b5so1255.gf},
-\.{b5so12.pl}, and \.{b5so12.cmd}
-\bigskip
-After calling
-\medskip
-\quad \.{b5so12.cmd}
-\medskip
-you will find the \.{PK} files in the
-\.{c:\\emtex\\texfonts\\pk\\360dpi} directory and the \.{TFM} files in
-the \.{c:\\emtex\\texfonts\\tfm} directory; all \.{GF} files and
-\.{b5so12.pl} will be deleted.
-\bigskip
-The call
-\medskip
-\quad \.{hbf2gf -n b5so1220 417}
-\medskip
-creates two files:
-\medskip
-\quad \.{b5so1220.gf} and \.{b5so1220.pl}
-\medskip
-using the configuration file \.{b5so12.cfg}. The \.{GF} file would be
-named \.{b5so1220.417gf} if the flag \.{-n} had not been used.
-
-\medskip
-
-It is possible to convert bitmap fonts to \.{PK} files almost
-automatically. The HBF header file already has the entry
-\.{HBF\_BITMAP\_BOUNDING\_BOX} which defines vertical and horizontal offsets
-(in pixels), but these values are not in all cases optimal. If you omit
-\.{x\_offset} and \.{y\_offset} in the configuration file, the third and
-fourth parameter of \.{HBF\_BITMAP\_BOUNDING\_BOX} is used, scaled to design
-size (to say it with other words: \.{x\_offset} and \.{y\_offset} will always
-apply to the design size to be synchronous with the \.{TFM} files).
-
-Don't confuse scaling and magnification: Scaling here means that you choose
-a (arbitrary) design size and compute scaling values (\.{mag\_x} and
-\.{mag\_y}) which scales the bitmap to this particular design size at a
-certain (arbitrarily chosen) resolution (\.{dpi\_x} and \.{dpi\_y}).
-Magnification means that the scaled bitmap will be then magnified to a
-certain target size while still using the font parameters (i.e., the
-\.{TFM} file) of the design size.
-
-In the sample, you have a $24 \times 24$ bitmap font which will be scaled to
-$12\,\hbox{pt}$ having a resolution of $300\,\hbox{dpi}$:
-\medskip
-\quad $1\,\hbox{pt}$ are $300 / 72.27 = 4.1511$ pixel;
-
-\quad $12\,\hbox{pt}$ are $4.1511 * 12 = 49.813$ pixel;
-
-\quad thus the theoretical scaling value is $49.813 / 24 = 2.076$.
-
-\medskip
-
-But especially for small sizes, this may not be the best value if the font
-should harmonize with, say, Knuth's Computer Modern fonts. I recommend to
-compute, say, 5~\.{PK} fonts, then check the CJK font with different \TeX\
-fonts to see whether the offsets and/or the scaling value is good. The
-greater the design size the finer you can control the offsets---as an
-example you could use a design size of $30\,\hbox{pt}$ (nevertheless there
-is a compile-time constant \PB{\.{MAX\_CHAR\_SIZE}} which limits the maximal
-character size; default is 255~pixels).
-
-If you have found optimal offsets, you can produce many different
-magnifications of the CJK font using the same set of \.{TFM} files
-analogous to ordinary \TeX\ fonts; as a simplification, we assume that
-\.{PK} files with a resolution of $300\,\hbox{dpi}$ and a design size of
-$10\,\hbox{pt}$ have the extension `\.{.300pk}' (respectively come into a
-`\.{300dpi}' subdirectory)---this is the reason why in the above example for
-the $12\,\hbox{pt}$ design size a `\.{360dpi}' target directory has been
-used. Now we can use the following formula:
-
-$$ \\{needed\_dpi} = \\{your\_horizontal\_resolution} *
-{\\{your\_target\_size} \over 10.0} $$
-
-Example: assuming that your printer has a resolution of
-$300\times400\,\hbox{dpi}$, and you want $14.4\,\hbox{pt}$:
-
-$$ 300 * {14.4 \over 10.0} = 432 $$
-
-The vertical scaling value is $400 / 300 = 1.3333$. Use these values now to
-call \.{hbf2gf} in \mf-like mode:
-
-\quad \.{hbf2gf b5so1220 432 1.3333}
-
-
-
-\fi
-
-\N{1}{82}Index.
-\fi
-
-\inx
-\fin
-\con
-- 
cgit v1.2.3

