summaryrefslogtreecommitdiff
path: root/Build/source/texk/cjkutils/hbf2gf
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2010-12-19 15:40:03 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2010-12-19 15:40:03 +0000
commitd62b7f1f8a3c27c3cd51d4eb41d51e8aba545217 (patch)
tree5edb6f096e0c7d59e5965a264c481f37637de8aa /Build/source/texk/cjkutils/hbf2gf
parent377cf2466444797e8b16032144a606930d520cb1 (diff)
cjk/utils 4.8.2 plus changes from Akira
git-svn-id: svn://tug.org/texlive/trunk@20806 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/cjkutils/hbf2gf')
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/Makefile.am63
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/Makefile.in655
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/c-auto.in192
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/README10
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/b5ka12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/b5kr12.cfg30
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/b5so12.cfg31
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c1so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c2so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c3so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c4so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c5so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c6so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/c7so12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/csso12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/gsfs14.cfg27
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/j2so12.cfg30
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/jsso12.cfg28
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/cfg/ksso17.cfg27
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/emdir.c109
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/emdir.h25
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/emtexdir.c405
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/emtexdir.h57
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf.c1496
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf.h215
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.1754
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.c2242
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.def3
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.dvibin182440 -> 0 bytes
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.idx326
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.scn56
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.tex2928
-rw-r--r--Build/source/texk/cjkutils/hbf2gf/hbf2gf.w2808
33 files changed, 0 insertions, 12769 deletions
diff --git a/Build/source/texk/cjkutils/hbf2gf/Makefile.am b/Build/source/texk/cjkutils/hbf2gf/Makefile.am
deleted file mode 100644
index 4137e3977d1..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-## Makefile.am for the TeX Live subdirectory texk/cjkutils/hbf2gf/
-##
-## Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
-## You may freely use, modify and/or distribute this file.
-##
-INCLUDES = $(KPATHSEA_INCLUDES)
-AM_CPPFLAGS = -Dunix -DHAVE_LIBKPATHSEA $(XX_CPPFLAGS)
-AM_CFLAGS = $(XX_CFLAGS)
-
-bin_PROGRAMS = hbf2gf
-
-hbf2gf_SOURCES = \
- hbf.c \
- hbf.h \
- hbf2gf.c
-
-CWEB_SRC = hbf2gf.w
-CWEB_TEX = hbf2gf.tex hbf2gf.idx hbf2gf.scn
-CWEB_DVI = hbf2gf.dvi
-
-hbf2gf_DEPENDENCIES = $(KPATHSEA_DEPEND)
-
-LDADD = $(KPATHSEA_LIBS)
-
-## Rebuild libkpathsea
-@KPATHSEA_RULE@
-
-dist_man1_MANS = hbf2gf.1
-
-EXTRA_DIST = $(CWEB_SRC) $(CWEB_TEX) $(CWEB_DVI) cfg
-
-CLEANFILES = hbf2gf.log hbf2gf.toc
-
-hbf2gf.dvi: $(CWEB_TEX)
- TEXINPUTS=.:$(srcdir):$$TEXINPUTS $(TEX) hbf2gf.tex
-
-# Running cweave in order to create hbf2gf.tex generates in addition
-# hbf2gf.idx and hbf2gf.scn; we must rerun cweave when they are not
-# up to date (even if hbf2gf.tex is up to date). Thus the sub-make.
-#
-hbf2gf.tex hbf2gf.idx hbf2gf.scn: hbf2gf.w
- $(MAKE) $(AM_MAKEFLAGS) do-cweave
-do-cweave: hbf2gf.w .FORCE
- $(CWEAVE) +ai $<
-.PHONY: do-cweave .FORCE
-
-if do_cweb
-all-local: hbf2gf.dvi
-hbf2gf.c: hbf2gf.w
- $(CTANGLE) $<
-else
-all-local:
-endif
-
-## Not used
-##
-EXTRA_DIST += \
- emdir.c \
- emdir.h \
- emtexdir.c \
- emtexdir.h \
- hbf2gf.def
-
diff --git a/Build/source/texk/cjkutils/hbf2gf/Makefile.in b/Build/source/texk/cjkutils/hbf2gf/Makefile.in
deleted file mode 100644
index 77b5ea82aae..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/Makefile.in
+++ /dev/null
@@ -1,655 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-bin_PROGRAMS = hbf2gf$(EXEEXT)
-subdir = hbf2gf
-DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/c-auto.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/kpse-common.m4 \
- $(top_srcdir)/../../m4/kpse-kpathsea-flags.m4 \
- $(top_srcdir)/../../m4/kpse-warnings.m4 \
- $(top_srcdir)/../../m4/libtool.m4 \
- $(top_srcdir)/../../m4/ltoptions.m4 \
- $(top_srcdir)/../../m4/ltsugar.m4 \
- $(top_srcdir)/../../m4/ltversion.m4 \
- $(top_srcdir)/../../m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = c-auto.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
-PROGRAMS = $(bin_PROGRAMS)
-am_hbf2gf_OBJECTS = hbf.$(OBJEXT) hbf2gf.$(OBJEXT)
-hbf2gf_OBJECTS = $(am_hbf2gf_OBJECTS)
-hbf2gf_LDADD = $(LDADD)
-am__DEPENDENCIES_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
-SOURCES = $(hbf2gf_SOURCES)
-DIST_SOURCES = $(hbf2gf_SOURCES)
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-man1dir = $(mandir)/man1
-NROFF = nroff
-MANS = $(dist_man1_MANS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CTANGLE = @CTANGLE@
-CWEAVE = @CWEAVE@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-KPATHSEA_DEPEND = @KPATHSEA_DEPEND@
-KPATHSEA_INCLUDES = @KPATHSEA_INCLUDES@
-KPATHSEA_LIBS = @KPATHSEA_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TEX = @TEX@
-VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-XX_CFLAGS = @XX_CFLAGS@
-XX_CPPFLAGS = @XX_CPPFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-INCLUDES = $(KPATHSEA_INCLUDES)
-AM_CPPFLAGS = -Dunix -DHAVE_LIBKPATHSEA $(XX_CPPFLAGS)
-AM_CFLAGS = $(XX_CFLAGS)
-hbf2gf_SOURCES = \
- hbf.c \
- hbf.h \
- hbf2gf.c
-
-CWEB_SRC = hbf2gf.w
-CWEB_TEX = hbf2gf.tex hbf2gf.idx hbf2gf.scn
-CWEB_DVI = hbf2gf.dvi
-hbf2gf_DEPENDENCIES = $(KPATHSEA_DEPEND)
-LDADD = $(KPATHSEA_LIBS)
-dist_man1_MANS = hbf2gf.1
-EXTRA_DIST = $(CWEB_SRC) $(CWEB_TEX) $(CWEB_DVI) cfg emdir.c emdir.h \
- emtexdir.c emtexdir.h hbf2gf.def
-CLEANFILES = hbf2gf.log hbf2gf.toc
-all: c-auto.h
- $(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hbf2gf/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign hbf2gf/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-c-auto.h: stamp-h1
- @if test ! -f $@; then \
- rm -f stamp-h1; \
- $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
- else :; fi
-
-stamp-h1: $(srcdir)/c-auto.in $(top_builddir)/config.status
- @rm -f stamp-h1
- cd $(top_builddir) && $(SHELL) ./config.status hbf2gf/c-auto.h
-$(srcdir)/c-auto.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
- rm -f stamp-h1
- touch $@
-
-distclean-hdr:
- -rm -f c-auto.h stamp-h1
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p || test -f $$p1; \
- then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
-hbf2gf$(EXEEXT): $(hbf2gf_OBJECTS) $(hbf2gf_DEPENDENCIES)
- @rm -f hbf2gf$(EXEEXT)
- $(LINK) $(hbf2gf_OBJECTS) $(hbf2gf_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbf2gf.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-man1: $(dist_man1_MANS)
- @$(NORMAL_INSTALL)
- test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
- @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
- { for i in $$list; do echo "$$i"; done; \
- } | while read p; do \
- if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; echo "$$p"; \
- done | \
- sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
- -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
- sed 'N;N;s,\n, ,g' | { \
- list=; while read file base inst; do \
- if test "$$base" = "$$inst"; then list="$$list $$file"; else \
- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
- fi; \
- done; \
- for i in $$list; do echo "$$i"; done | $(am__base_list) | \
- while read files; do \
- test -z "$$files" || { \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
- done; }
-
-uninstall-man1:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
- files=`{ for i in $$list; do echo "$$i"; done; \
- } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
- -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
- test -z "$$files" || { \
- echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) c-auto.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) c-auto.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) c-auto.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) c-auto.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @list='$(MANS)'; if test -n "$$list"; then \
- list=`for p in $$list; do \
- if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
- if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
- if test -n "$$list" && \
- grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
- echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
- grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
- echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
- echo " typically \`make maintainer-clean' will remove them" >&2; \
- exit 1; \
- else :; fi; \
- else :; fi
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS) c-auto.h all-local
-installdirs:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-hdr distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man: install-man1
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-man
-
-uninstall-man: uninstall-man1
-
-.MAKE: all install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
- clean-binPROGRAMS clean-generic clean-libtool ctags distclean \
- distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-binPROGRAMS \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-man1 \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags uninstall uninstall-am \
- uninstall-binPROGRAMS uninstall-man uninstall-man1
-
-
-@KPATHSEA_RULE@
-
-hbf2gf.dvi: $(CWEB_TEX)
- TEXINPUTS=.:$(srcdir):$$TEXINPUTS $(TEX) hbf2gf.tex
-
-# Running cweave in order to create hbf2gf.tex generates in addition
-# hbf2gf.idx and hbf2gf.scn; we must rerun cweave when they are not
-# up to date (even if hbf2gf.tex is up to date). Thus the sub-make.
-#
-hbf2gf.tex hbf2gf.idx hbf2gf.scn: hbf2gf.w
- $(MAKE) $(AM_MAKEFLAGS) do-cweave
-do-cweave: hbf2gf.w .FORCE
- $(CWEAVE) +ai $<
-.PHONY: do-cweave .FORCE
-
-@do_cweb_TRUE@all-local: hbf2gf.dvi
-@do_cweb_TRUE@hbf2gf.c: hbf2gf.w
-@do_cweb_TRUE@ $(CTANGLE) $<
-@do_cweb_FALSE@all-local:
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/texk/cjkutils/hbf2gf/c-auto.in b/Build/source/texk/cjkutils/hbf2gf/c-auto.in
deleted file mode 100644
index 4505a71684d..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/c-auto.in
+++ /dev/null
@@ -1,192 +0,0 @@
-/* hbf2gf/c-auto.in. Generated from configure.ac by autoheader. */
-
-/* Define to 1 if the `closedir' function returns void instead of `int'. */
-#undef CLOSEDIR_VOID
-
-/* Define to 1 if you have the <assert.h> header file. */
-#undef HAVE_ASSERT_H
-
-/* Define to 1 if you have the `bcmp' function. */
-#undef HAVE_BCMP
-
-/* Define to 1 if you have the `bcopy' function. */
-#undef HAVE_BCOPY
-
-/* Define to 1 if you have the `bzero' function. */
-#undef HAVE_BZERO
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
- */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define to 1 if you have the <float.h> header file. */
-#undef HAVE_FLOAT_H
-
-/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
-#undef HAVE_FSEEKO
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getwd' function. */
-#undef HAVE_GETWD
-
-/* Define to 1 if you have the `index' function. */
-#undef HAVE_INDEX
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the `memcmp' function. */
-#undef HAVE_MEMCMP
-
-/* Define to 1 if you have the `memcpy' function. */
-#undef HAVE_MEMCPY
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `mkstemp' function. */
-#undef HAVE_MKSTEMP
-
-/* Define to 1 if you have the `mktemp' function. */
-#undef HAVE_MKTEMP
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
-/* Define to 1 if you are using GNU libc or otherwise have global variables
- `program_invocation_name' and `program_invocation_short_name'. */
-#undef HAVE_PROGRAM_INVOCATION_NAME
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#undef HAVE_PWD_H
-
-/* Define to 1 if you have the `rindex' function. */
-#undef HAVE_RINDEX
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strrchr' function. */
-#undef HAVE_STRRCHR
-
-/* Define to 1 if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if `st_mtim' is a member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_MTIM
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_DIR_H
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_NDIR_H
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#undef LT_OBJDIR
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#undef TM_IN_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
-#undef _LARGEFILE_SOURCE
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/README b/Build/source/texk/cjkutils/hbf2gf/cfg/README
deleted file mode 100644
index 689d59e7397..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/README
+++ /dev/null
@@ -1,10 +0,0 @@
-In this directory you find some hbf2gf configuration files for common CJK
-bitmap fonts.
-
-No paths are specified for the HBF files -- under web2c you should add the
-path for these fonts to the `MISCFONTS' variable in texmf.cnf; under emTeX
-you should set the environment variable `HBFONTS'.
-
-The font paths used here in the config files of this directory are TDS
-compliant; only the `HBF_TARGET' environment variable is used (an example
-would be `set HBF_TARGET=/usr/local/TeX/texmf/fonts').
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/b5ka12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/b5ka12.cfg
deleted file mode 100644
index f5c142f0235..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/b5ka12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header ntukai48.hbf
-mag_x 1
-threshold 128
-comment Big 5 normal 48x48 pixel font scaled and adapted to 12pt
-
-design_size 12
-
-x_offset 2
-y_offset -12
-
-nmb_files -1
-
-output_name b5ka12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme Big 5 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/ntu/b5ka12/
-tfm_directory $HBF_TARGET/tfm/ntu/b5ka12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/b5kr12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/b5kr12.cfg
deleted file mode 100644
index 9d9da2c1a2f..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/b5kr12.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-
-hbf_header ntukai48.hbf
-mag_x 1
-threshold 128
-comment Big 5 normal 48x48 pixel font rotated, scaled and adapted to 12pt
-
-design_size 12
-
-x_offset 2
-y_offset -10
-
-rotation yes
-
-nmb_files -1
-
-output_name b5kr12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme Big 5 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/ntu/b5kr12/
-tfm_directory $HBF_TARGET/tfm/ntu/b5kr12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/b5so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/b5so12.cfg
deleted file mode 100644
index dc0bcd9fbf0..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/b5so12.cfg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hbf_header et24.hbf
-mag_x 2.076
-threshold 128
-comment fanti songti 24x24 pixel font magnified and adapted for 12pt
-
-design_size 12.0
-
-x_offset 3
-y_offset -8
-
-nmb_files -1
-
-output_name b5so12
-
-checksum 123456789
-
-dpi_x 300
-
-tfm_files yes
-pk_files no
-
-coding codingscheme Big 5 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/eten/b5so12/
-tfm_directory $HBF_TARGET/tfm/eten/b5so12/
-
- rm_command del
- cp_command copy
- long_extension no
- job_extension .cmd
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c1so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c1so12.cfg
deleted file mode 100644
index de5b32b3efc..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c1so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-1.hbf
-mag_x 1
-threshold 128
-comment CNS plane 1 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c1so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 1 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c1so12/
-tfm_directory $HBF_TARGET/tfm/cns/c1so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c2so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c2so12.cfg
deleted file mode 100644
index 969af8fae14..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c2so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-2.hbf
-mag_x 1
-threshold 128
-comment CNS plane 2 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c2so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 2 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c2so12/
-tfm_directory $HBF_TARGET/tfm/cns/c2so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c3so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c3so12.cfg
deleted file mode 100644
index 0e65768ee5e..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c3so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-3.hbf
-mag_x 1
-threshold 128
-comment CNS plane 3 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c3so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 3 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c3so12/
-tfm_directory $HBF_TARGET/tfm/cns/c3so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c4so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c4so12.cfg
deleted file mode 100644
index 8ea3a8b270c..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c4so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-4.hbf
-mag_x 1
-threshold 128
-comment CNS plane 4 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c4so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 4 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c4so12/
-tfm_directory $HBF_TARGET/tfm/cns/c4so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c5so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c5so12.cfg
deleted file mode 100644
index 1b81c90a0d3..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c5so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-5.hbf
-mag_x 1
-threshold 128
-comment CNS plane 5 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c5so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 5 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c5so12/
-tfm_directory $HBF_TARGET/tfm/cns/c5so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c6so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c6so12.cfg
deleted file mode 100644
index 5b9c912ce53..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c6so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-6.hbf
-mag_x 1
-threshold 128
-comment CNS plane 6 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c6so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 6 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c6so12/
-tfm_directory $HBF_TARGET/tfm/cns/c6so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/c7so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/c7so12.cfg
deleted file mode 100644
index 051b2601426..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/c7so12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-7.hbf
-mag_x 1
-threshold 128
-comment CNS plane 7 song 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name c7so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme CNS plane 7 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/c7so12/
-tfm_directory $HBF_TARGET/tfm/cns/c7so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/csso12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/csso12.cfg
deleted file mode 100644
index 9ad91b0c574..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/csso12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header cns40-b5.hbf
-mag_x 1
-threshold 128
-comment CNS song 40x40 pixel font (Bg5 encoded) scaled and adapted to 12pt
-
-design_size 12.0
-
-x_offset 2
-y_offset -8
-
-nmb_files -1
-
-output_name csso12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme Big 5 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/cns/csso12/
-tfm_directory $HBF_TARGET/tfm/cns/csso12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/gsfs14.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/gsfs14.cfg
deleted file mode 100644
index 4b397aca464..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/gsfs14.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-hbf_header jfs56.hbf
-mag_x 1
-threshold 128
-comment jianti fansongti 56x56 pixel font scaled and adapted to 14.4pt
-
-design_size 14.4
-
-y_offset -13
-
-nmb_files -1
-
-output_name gsfs14
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme GuoBiao encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/ccdos/gsfs14/
-tfm_directory $HBF_TARGET/tfm/ccdos/gsfs14/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/j2so12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/j2so12.cfg
deleted file mode 100644
index 7e0d70b5c0f..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/j2so12.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-
-hbf_header jisksp40.hbf
-mag_x 1.0
-threshold 128
-comment supplemental kanji normal 40x40 pixel font scaled and adapted to 12pt
-
-design_size 12
-
-min_char 0x2121
-
-x_offset 2
-y_offset -7
-
-nmb_files -1
-
-output_name j2so12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme JIS2 encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/jisx0212/j2so12/
-tfm_directory $HBF_TARGET/tfm/jisx0212/j2so12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/jsso12.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/jsso12.cfg
deleted file mode 100644
index 9bdfc7b1e8a..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/jsso12.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-hbf_header kanji48.hbf
-mag_x 0.83
-threshold 128
-comment kanji normal 48x48 pixel font scaled and adapted to 12pt
-
-design_size 12
-
-x_offset 2
-y_offset -7
-
-nmb_files -1
-
-output_name jsso12
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme JIS encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/jisx0208/jsso12/
-tfm_directory $HBF_TARGET/tfm/jisx0208/jsso12/
diff --git a/Build/source/texk/cjkutils/hbf2gf/cfg/ksso17.cfg b/Build/source/texk/cjkutils/hbf2gf/cfg/ksso17.cfg
deleted file mode 100644
index c82f7e7eee4..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/cfg/ksso17.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-hbf_header hanja65.hbf
-mag_x 1
-threshold 128
-comment hanja normal 65x65 pixel font scaled and adapted to 17.28pt
-
-design_size 17.28
-
-y_offset -16
-
-nmb_files -1
-
-output_name ksso17
-
-checksum 123456789
-
-dpi_x 300
-
-pk_files no
-tfm_files yes
-
- long_extension no
-
-coding codingscheme KS encoded TeX text
-
-pk_directory $HBF_TARGET/pk/modeless/ksc5601/ksso17/
-tfm_directory $HBF_TARGET/tfm/ksc5601/ksso17/
diff --git a/Build/source/texk/cjkutils/hbf2gf/emdir.c b/Build/source/texk/cjkutils/hbf2gf/emdir.c
deleted file mode 100644
index 4e759c83eb2..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/emdir.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* emdir.c -- Written by Eberhard Mattes, donated to the public domain */
-
-#include "emdir.h"
-
-#ifdef OS2
-
-#undef HPS
-#define INCL_DOSFILEMGR
-#include <os2.h>
-#include <string.h>
-
-#define FHDIR(b) (*(HDIR *)(b)->reserved)
-
-static void fconv (struct ll_findbuffer *dst, const FILEFINDBUF *src)
-{
- dst->attr = src->attrFile;
- dst->time = *(unsigned *)&src->ftimeLastWrite;
- dst->date = *(unsigned *)&src->fdateLastWrite;
- dst->size = src->cbFile;
- strcpy (dst->name, src->achName);
-}
-
-
-int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer)
-{
- USHORT rc;
- ULONG count;
- HDIR hdir;
- FILEFINDBUF ffbuf;
-
- hdir = HDIR_CREATE;
- count = 1;
- rc = DosFindFirst ((PSZ)path, &hdir, attr, &ffbuf, sizeof (ffbuf),
- &count, 0L);
- if (rc != 0 || count != 1)
- return 0;
- FHDIR (buffer) = hdir;
- fconv (buffer, &ffbuf);
- return 1;
-}
-
-
-int ll_findnext (struct ll_findbuffer *buffer)
-{
- USHORT rc;
- ULONG count;
- HDIR hdir;
- FILEFINDBUF ffbuf;
-
- hdir = FHDIR (buffer);
- count = 1;
- rc = DosFindNext (hdir, &ffbuf, sizeof (ffbuf), &count);
- if (rc != 0 || count != 1)
- {
- DosFindClose (hdir);
- return 0;
- }
- fconv (buffer, &ffbuf);
- return 1;
-}
-
-
-#elif defined(DJGPP)
-
-/* djgpp support by Hartmut Schirmer (hsc@techfak.uni-kiel.de), May 30, 1997 */
-
-#include <dos.h>
-#include <dir.h>
-
-static int ll_attr = 0;
-int ll_findnext (struct ll_findbuffer *buffer)
-{
- int res;
- do {
- res = _dos_findnext ((struct find_t *)buffer);
- if (res != 0) return 0;
- } while ( (buffer->attrib&ll_attr) == 0);
- return 1;
-}
-
-int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer)
-{
- int res;
- ll_attr = attr;
- res = _dos_findfirst((char *)path, attr, (struct find_t *)buffer);
- if (res != 0) return 0;
- if ( (buffer->attrib&ll_attr) == 0)
- return ll_findnext(buffer);
- return 1;
-}
-
-#elif !defined(__EMX__) /* if not OS2 nor DJGPP nor __EMX__ defined */
-
-/* Not tested */
-
-#include <dos.h>
-
-int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer)
-{
- return _dos_findfirst (path, attr, (struct find_t *)buffer) == 0;
-}
-
-
-int ll_findnext (struct ll_findbuffer *buffer)
-{
- return _dos_findnext ((struct find_t *)buffer) == 0;
-}
-
-#endif
diff --git a/Build/source/texk/cjkutils/hbf2gf/emdir.h b/Build/source/texk/cjkutils/hbf2gf/emdir.h
deleted file mode 100644
index 0606d476ab1..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/emdir.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* emdir.h -- Written by Eberhard Mattes, donated to the public domain */
-
-#if defined(DJGPP)
-
-/* djgpp support by Hartmut Schirmer (hsc@techfak.uni-kiel.de), May 30, 1997 */
-#include <dos.h>
-#define ll_findbuffer find_t
-#define attr attrib
-
-#else
-
-struct ll_findbuffer
-{
- char reserved[21];
- unsigned char attr;
- unsigned time;
- unsigned date;
- long size;
- char name[257];
-};
-
-#endif
-
-int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer);
-int ll_findnext (struct ll_findbuffer *buffer);
diff --git a/Build/source/texk/cjkutils/hbf2gf/emtexdir.c b/Build/source/texk/cjkutils/hbf2gf/emtexdir.c
deleted file mode 100644
index 9a35570adb3..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/emtexdir.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* emtexdir.c -- written by Eberhard Mattes, donated to the public domain */
-
-#if defined (__EMX__)
-#include <emx/syscalls.h>
-#else
-#include "emdir.h"
-#endif
-#if defined(DJGPP) || defined(GO32)
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <io.h>
-#include "emtexdir.h"
-
-#define FALSE 0
-#define TRUE 1
-
-void (*emtex_dir_find_callback)(const char *name, int ok) = NULL;
-
-static int setup_add (struct emtex_dir *dst, const char *path)
-{
- char *p;
-
- if (dst->used >= dst->alloc)
- {
- dst->alloc += 8;
- dst->list = realloc (dst->list, dst->alloc * sizeof (*dst->list));
- if (dst->list == NULL)
- return (FALSE);
- }
- p = strdup (path);
- if (p == NULL)
- return (FALSE);
- dst->list[dst->used++] = p;
- return (TRUE);
-}
-
-
-static int setup_subdir (struct emtex_dir *dst, char *path, size_t add,
- unsigned flags, int recurse)
-{
- int ok, i, end, len;
-#if defined (__EMX__)
- struct _find find;
-#else
- struct ll_findbuffer find;
-#endif
-
- i = dst->used;
- strcpy (path + add, "*.*");
-#if defined (__EMX__)
- ok = __findfirst (path, 0x10, &find) == 0;
-#else
- ok = ll_findfirst (path, 0x10, &find);
-#endif
- while (ok)
- {
- if ((find.attr & 0x10)
- && !(strcmp (find.name, ".") == 0 || strcmp (find.name, "..") == 0))
- {
- len = strlen (find.name);
- memcpy (path + add, find.name, len);
- path[add+len] = '\\';
- path[add+len+1] = 0;
- if (!setup_add (dst, path))
- return (FALSE);
- }
-#if defined (__EMX__)
- ok = __findnext (&find) == 0;
-#else
- ok = ll_findnext (&find);
-#endif
- }
- if (recurse)
- {
- end = dst->used;
- while (i < end)
- {
- strcpy (path, dst->list[i]);
- if (!setup_subdir (dst, path, strlen (path), flags, TRUE))
- return (FALSE);
- ++i;
- }
- }
- return (TRUE);
-}
-
-
-static int setup_dir (struct emtex_dir *dst, char *path,
- const char *base_dir, size_t base_dir_len,
- const char *sub_dir,
- unsigned flags)
-{
- size_t i, len;
-
- memcpy (path, base_dir, base_dir_len);
- i = base_dir_len;
- if ((flags & EDS_BANG) && sub_dir == NULL)
- {
- flags &= ~(EDS_ONESUBDIR|EDS_ALLSUBDIR);
- if (i >= 2 && path[i-1] == '!' && path[i-2] == '!')
- {
- flags |= EDS_ALLSUBDIR;
- i -= 2;
- }
- else if (i >= 1 && path[i-1] == '!')
- {
- flags |= EDS_ONESUBDIR;
- --i;
- }
- }
- if (sub_dir != NULL && *sub_dir != 0)
- {
- if (i != 0 && path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\')
- path[i++] = '\\';
- len = strlen (sub_dir);
- memcpy (path+i, sub_dir, len);
- i += len;
- }
- if (path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\')
- path[i++] = '\\';
- path[i] = 0;
- if (!setup_add (dst, path))
- return (FALSE);
- if (flags & EDS_ALLSUBDIR)
- return (setup_subdir (dst, path, i, flags, TRUE));
- else if (flags & EDS_ONESUBDIR)
- return (setup_subdir (dst, path, i, flags, FALSE));
- else
- return (TRUE);
-}
-
-
-/*static */int setup_list (struct emtex_dir *dst, char *path,
- const char *list, unsigned flags)
-{
- const char *end;
- size_t i;
-
- for (;;)
- {
- while (*list == ' ' || *list == '\t')
- ++list;
- if (*list == 0)
- return (TRUE);
- end = list;
- while (*end != 0 && *end != ';')
- ++end;
- i = end - list;
- while (i > 0 && (list[i-1] == ' ' || list[i-1] == '\t'))
- --i;
- if (i != 0 && !setup_dir (dst, path, list, i, NULL, flags))
- return (FALSE);
- if (*end == 0)
- return (TRUE);
- list = end + 1;
- }
-}
-
-
-int emtex_dir_setup (struct emtex_dir *ed, const char *env, const char *dir,
- unsigned flags)
-{
- const char *val;
- char path[260];
-
- ed->alloc = 0;
- ed->used = 0;
- ed->list = NULL;
- if (env != NULL && (val = getenv (env)) != NULL)
- return (setup_list (ed, path, val, flags));
- else if ((val = getenv ("EMTEXDIR")) != NULL)
- return (setup_dir (ed, path, val, strlen (val), dir, flags));
- else
- return (setup_dir (ed, path, "\\emtex", 6, dir, flags));
-}
-
-
-static void pretty (char *path, unsigned flags)
-{
- char *p;
-
- if (flags & EDF_FSLASH)
- for (p = path; *p != 0; ++p)
- if (*p == '\\')
- *p = '/';
-}
-
-
-#define ADDCHAR(C) \
- if (dst_size < 1) return (EDT_TOOLONG); \
- *dst++ = (C); --dst_size
-
-int emtex_dir_trunc (char *dst, size_t dst_size, const char *src,
- unsigned flags, int method)
-{
- int len, truncated, dot;
-
- if (src[0] != 0 && src[1] == ':')
- {
- ADDCHAR (src[0]);
- ADDCHAR (src[1]);
- src += 2;
- }
-
- truncated = FALSE; dot = FALSE; len = 0;
- for (;;)
- {
- switch (*src)
- {
- case 0:
- ADDCHAR (0);
- return (truncated ? EDT_CHANGED : EDT_UNCHANGED);
-
- case ':':
- return (EDT_INVALID);
-
- case '/':
- case '\\':
- ADDCHAR (*src);
- len = 0; dot = FALSE;
- break;
-
- case '.':
- if (dot)
- return (EDT_INVALID);
- ADDCHAR (*src);
-
- /* ".." is allowed -- don't return EDT_INVALID for the next
- dot. */
-
- if (!(len == 0 && src[1] == '.'
- && (src[2] == 0 || src[2] == '/' || src[2] == '\\')))
- {
- len = 0; dot = TRUE;
- }
- break;
-
- default:
- if (dot && len == 3)
- truncated = TRUE;
- else if (!dot && len == 8)
- {
- truncated = TRUE;
- if (method == 0)
- {
- dst[-3] = dst[-2];
- dst[-2] = dst[-1];
- dst[-1] = *src;
- }
- }
- else
- {
- ADDCHAR (*src);
- ++len;
- }
- break;
- }
- ++src;
- }
-}
-
-
-static int find2 (const char *name, unsigned flags)
-{
- int ok;
-
- ok = (access (name, 4) == 0);
- if (flags & EDF_TRACE)
- emtex_dir_find_callback (name, ok);
- return (ok);
-}
-
-
-static int find1 (char *path, size_t path_size, const char *dir,
- const char *fname, unsigned flags)
-{
- char buf[260];
- int method, rc;
- size_t len, tmp;
-
- len = 0;
- if (dir != NULL)
- {
- tmp = strlen (dir);
- if (tmp >= sizeof (buf))
- return (FALSE);
- memcpy (buf, dir, tmp);
- len = tmp;
- }
- tmp = strlen (fname);
- if (len + tmp >= sizeof (buf))
- return (FALSE);
- memcpy (buf + len, fname, tmp + 1);
- len += tmp;
-#if 0 /* wkim */
-/* disabled for Win95's long file name support */
-/* -- Wonkoo Kim (wkim+@pitt.edu), May 18, 1997 */
- if (_osmode == DOS_MODE)
- {
- rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_5_PLUS_3);
- if ((rc == EDT_UNCHANGED || rc == EDT_CHANGED) && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_8);
- if (rc == EDT_CHANGED && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- return (FALSE);
- }
- else
-#endif /* wkim */
- {
- if (len < path_size && find2 (buf, flags))
- {
- memcpy (path, buf, len + 1);
- pretty (path, flags);
- return (TRUE);
- }
- for (method = 0; method < 2; ++method)
- {
- rc = emtex_dir_trunc (path, path_size, buf, flags, method);
- if (rc == EDT_CHANGED && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- }
- return (FALSE);
- }
-}
-
-
-int emtex_dir_find (char *path, size_t path_size,
- const struct emtex_dir *ed,
- const char *fname, unsigned flags)
-{
- int i, absp;
- const char *p;
-
- absp = FALSE;
- for (p = fname; *p != 0; ++p)
- if (*p == ':' || *p == '/' || *p == '\\')
- {
- absp = TRUE;
- break;
- }
-
- if (absp)
- return (find1 (path, path_size, NULL, fname, flags));
-
- if ((flags & EDF_CWD) && find1 (path, path_size, NULL, fname, flags))
- return (TRUE);
-
- for (i = 0; i < ed->used; ++i)
- if (find1 (path, path_size, ed->list[i], fname, flags))
- return (TRUE);
- return (FALSE);
-}
-
-
-#if defined (TEST)
-
-#include <stdio.h>
-
-int main (int argc, char *argv[])
-{
- struct emtex_dir ed;
- int i;
- unsigned flags1, flags2;
- char path[260];
-
- if (argc != 6)
- {
- puts ("Usage: emtexdir <flags> <flags> <env> <dir> <fname>");
- return (1);
- }
-
- flags1 = (unsigned)strtol (argv[1], NULL, 0);
- flags2 = (unsigned)strtol (argv[2], NULL, 0);
-
- if (!emtex_dir_setup (&ed, argv[3], argv[4], flags1))
- {
- fputs ("emtex_dir_setup failed\n", stderr);
- return (2);
- }
-
- printf ("Directories:\n");
- for (i = 0; i < ed.used; ++i)
- printf (" %s\n", ed.list[i]);
-
- if (!emtex_dir_find (path, sizeof (path), &ed, argv[5], flags2))
- puts ("File not found");
- else
- printf ("Path: %s\n", path);
- return (0);
-}
-
-#endif
diff --git a/Build/source/texk/cjkutils/hbf2gf/emtexdir.h b/Build/source/texk/cjkutils/hbf2gf/emtexdir.h
deleted file mode 100644
index a9a986db05b..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/emtexdir.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* emtexdir.h -- written by Eberhard Mattes, donated to the public domain */
-
-#if !defined (_EMTEXDIR_H)
-#define _EMTEXDIR_H
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-
-/* Flags for emtex_dir_setup */
-
-#define EDS_ONESUBDIR 0x0001
-#define EDS_ALLSUBDIR 0x0002
-#define EDS_BANG 0x0004
-
-/* Flags for emtex_dir_find */
-
-#define EDF_CWD 0x0001
-#define EDF_FSLASH 0x0002
-#define EDF_TRACE 0x8000
-
-/* Methods for emtex_dir_trunc */
-
-#define EDT_5_PLUS_3 0 /* 5+3.3 */
-#define EDT_8 1 /* 8.3 */
-
-/* Return values for emtex_dir_trunc */
-
-#define EDT_UNCHANGED 0 /* Path name not changed */
-#define EDT_CHANGED 1 /* Path name truncated */
-#define EDT_TOOLONG 2 /* Path name too long */
-#define EDT_INVALID 3 /* Path name invalid */
-
-struct emtex_dir
-{
- char **list;
- int used;
- int alloc;
-};
-
-extern void (*emtex_dir_find_callback)(const char *name, int ok);
-
-int emtex_dir_setup (struct emtex_dir *ed, const char *env, const char *dir,
- unsigned flags);
-
-int emtex_dir_find (char *path, size_t path_size, const struct emtex_dir *ed,
- const char *fname, unsigned flags);
-
-int emtex_dir_trunc (char *dst, size_t dst_size, const char *src,
- unsigned flags, int method);
-
-#if defined (__cplusplus)
-}
-#endif
-
-#endif /* !defined (_EMTEXDIR_H) */
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf.c b/Build/source/texk/cjkutils/hbf2gf/hbf.c
deleted file mode 100644
index 6056555d704..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf.c
+++ /dev/null
@@ -1,1496 +0,0 @@
-/*
- * Copyright 1993,1994,1995,2005 by Ross Paterson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Ross Paterson <ross@soi.city.ac.uk>
- * 17 October 1995
- *
- * The following people have supplied bug fixes:
- *
- * Simon Chow <khsc@synoptics.com>
- * Fung Fung Lee <lee@simd.stanford.edu>
- * Man-Chi Pong <mcpong@cs.ust.hk>
- * Steven Simpson <simpson@math.psu.edu>
- * Charles Wang <charles.wang@infores.com>
- * Werner Lemberg <wl@gnu.org>
- *
- * Ross no longer maintains this code. Please send bug reports to
- * Werner Lemberg <wl@gnu.org>.
- *
- */
-
-/*
- * Two C interfaces to HBF files.
- *
- * The multiple interfaces make this code rather messy; I intend
- * to clean it up as experience is gained on what is really needed.
- *
- * There are also two modes of operation:
- * - the default is to read each bitmap from its file as demanded
- * - if IN_MEMORY is defined, the whole bitmap file is held in memory.
- * In this case, if running under Unix, the bitmap files may be gzipped
- * (but the filename used in the HBF file should be the name of the
- * file before it was gzipped).
- */
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include "hbf.h"
-
-#ifdef __MSDOS__
-#define msdos
-#endif
-
-/*
- * if the linker complains about an unresolved identifier '_strdup',
- * uncomment the following definition.
- */
-/* #define NO_STRDUP */
-
-#ifdef __STDC__
-# define _(x) x
-#else
-# define _(x) ()
-#endif
-
-#define reg register
-
-typedef int bool;
-#define TRUE 1
-#define FALSE 0
-
-#define Bit(n) (1<<(7 - (n)))
-
-/*
- * Messy file system issues
- */
-
-#ifdef unix
-#define PATH_DELIMITER ':'
-#define RelativeFileName(fn) ((fn)[0] != '/')
-#define LocalFileName(fn) (strchr(fn, '/') == NULL)
-#endif /* unix */
-#ifdef msdos
-#define PATH_DELIMITER ';'
-#define HasDrive(fn) (isalpha((fn)[0]) && (fn)[1] == ':')
-#ifdef __EMX__
-#define RelativeFileName(fn) (! HasDrive(fn) && \
- !((fn)[0] == '\\' || (fn)[0] == '/'))
-#define LocalFileName(fn) (! HasDrive(fn) && \
- strchr(fn, '\\') == NULL && \
- strchr(fn, '/') == NULL)
-#else
-#define RelativeFileName(fn) (! HasDrive(fn) && (fn)[0] != '\\')
-#define LocalFileName(fn) (! HasDrive(fn) && strchr(fn, '\\') == NULL)
-#endif /* __EMX__ */
-#define READ_BINARY "rb"
-#endif /* msdos */
-#ifdef vms
-#define PATH_DELIMITER ','
-#define RelativeFileName(fn) (strchr(fn, ':') == NULL && ((fn)[0] != '[' || (fn)[1] == '.' || (fn)[1] == '-'))
-#define LocalFileName(fn) (strchr(fn, ':') == NULL && strchr(fn, ']') == NULL)
-#endif
-
-#ifndef RelativeFileName
-#define RelativeFileName(fn) FALSE
-#endif
-
-#ifndef LocalFileName
-#define LocalFileName(fn) FALSE
-#endif
-
-#ifndef READ_BINARY
-#define READ_BINARY "r"
-#endif
-
-#define MAX_FILENAME 1024
-
-/*
- * Internal structures
- */
-
-typedef unsigned char byte;
-
-#define PROPERTY struct _PROPERTY
-#define BM_FILE struct _BM_FILE
-#define B2_RANGE struct _B2_RANGE
-#define CODE_RANGE struct _CODE_RANGE
-
-PROPERTY {
- char *prop_name;
- char *prop_value;
- PROPERTY *prop_next;
-};
-
-BM_FILE {
- char *bmf_name;
-#ifdef IN_MEMORY
- byte *bmf_contents;
-#else
- FILE *bmf_file;
-#endif
- long bmf_size;
- BM_FILE *bmf_next;
-};
-
-B2_RANGE {
- byte b2r_start;
- byte b2r_finish;
- B2_RANGE *b2r_next;
-};
-
-typedef unsigned short CHAR;
-typedef unsigned int CHAR_INDEX; /* character index in file */
-#define BAD_CHAR_INDEX 0xffff
-
-CODE_RANGE {
- CHAR code_start;
- CHAR code_finish;
- BM_FILE *code_bm_file;
- long code_offset;
- CHAR_INDEX code_pos;
- bool code_transposed;
- bool code_inverted;
- CODE_RANGE *code_next;
-};
-
-/*
- * Extended internal version of HBF
- */
-
-typedef struct {
- /* fields corresponding to the definition */
- HBF public;
- /* plus internal stuff */
- char *filename;
- byte *bitmap_buffer;
- unsigned int b2_size; /* number of legal byte-2's */
- PROPERTY *property;
- B2_RANGE *byte_2_range;
- CODE_RANGE *code_range;
- BM_FILE *bm_file;
-} HBF_STRUCT;
-
-#define FirstByte(code) ((code)>>8)
-#define SecondByte(code) ((code)&0xff)
-#define MakeCode(byte1,byte2) (((byte1)<<8)|(byte2))
-
-/* size of a bitmap in the file (may be affected by transposition) */
-#define FileBitmapSize(hbfFile,cp) \
- ((cp)->code_transposed ? \
- (hbfBitmapBBox(hbfFile)->hbf_height + 7)/8 * \
- hbfBitmapBBox(hbfFile)->hbf_width : \
- HBF_BitmapSize(hbfFile))
-
-#define NEW(type) ((type *)malloc((unsigned)(sizeof(type))))
-
-#define QUOTE '"'
-
-#define MAXLINE 1024
-
-#ifdef WIN32
-#define strdup(x) _strdup(x)
-#else
- extern char *strdup _((const char *s));
-#endif
-
-static void add_b2r _((B2_RANGE **last_b2r, int start, int finish));
-static bool add_code_range _((HBF_STRUCT *hbf, const char *line));
-static void add_property _((HBF_STRUCT *hbf, const char *lp));
-static CHAR_INDEX b2_pos _((HBF_STRUCT *hbf, HBF_CHAR code));
-static int b2_size _((B2_RANGE *b2r));
-static void clear_bbox _((HBF_BBOX *bbox));
-static void clear_record _((HBF_STRUCT *hbf));
-static char *concat _((const char *dir, int dirlen, const char *stem));
-static char *expand_filename _((const char *name, const char *filename));
-static const byte *get_bitmap
- _((HBF_STRUCT *hbf, HBF_CHAR code, byte *buffer));
-static byte *local_buffer _((HBF_STRUCT *hbf));
-static void invert _((byte *buffer, unsigned length));
-#ifdef IN_MEMORY
-static bool read_bitmap_file _((BM_FILE *bmf, FILE *f));
-static bool copy_transposed
- _((HBF *hbf, byte *bitmap, const byte *source));
-#else
-static bool get_transposed _((HBF *hbf, FILE *f, byte *bitmap));
-#endif
-static bool match _((const char *lp, const char *sp));
-static bool parse_file _((FILE *f, HBF_STRUCT *hbf));
-static FILE *path_open
- _((const char *path, const char *filename, char **fullp));
-static bool real_open _((const char *filename, HBF_STRUCT *hbf));
-
-/* Error reporting */
-
-int hbfDebug; /* set this for error reporting */
-
-#ifdef __STDC__
-#include <stdarg.h>
-
-static void
-eprintf(const char *fmt, ...)
-{
- if (hbfDebug) {
- va_list args;
-
- (void)fprintf(stderr, "HBF: ");
- va_start(args, fmt);
- (void)vfprintf(stderr, fmt, args);
- va_end(args);
- (void)fprintf(stderr, "\n");
- }
-}
-#else /* ! __STDC__ */
-/* poor man's variable-length argument list */
-static void
-eprintf(fmt, x1, x2, x3, x4, x5, x6, x7, x8, x9)
- const char *fmt;
- int x1, x2, x3, x4, x5, x6, x7, x8, x9;
-{
- if (hbfDebug) {
- (void)fprintf(stderr, "HBF: ");
- (void)fprintf(stderr, fmt, x1, x2, x3, x4, x5, x6, x7, x8, x9);
- (void)fprintf(stderr, "\n");
- }
-}
-#endif /* __STDC__ */
-
-static void
-clear_bbox(HBF_BBOX *bbox)
-{
- bbox->hbf_width = bbox->hbf_height = 0;
- bbox->hbf_xDisplacement = bbox->hbf_yDisplacement = 0;
-}
-
-static void
-clear_record(HBF_STRUCT *hbf)
-{
- clear_bbox(&(hbf->public.hbf_bitmap_bbox));
- clear_bbox(&(hbf->public.hbf_font_bbox));
- hbf->property = NULL;
- hbf->filename = NULL;
- hbf->bitmap_buffer = NULL;
- hbf->byte_2_range = NULL;
- hbf->code_range = NULL;
- hbf->bm_file = NULL;
-}
-
-/*
- * Byte-2 ranges
- */
-
-static void
-add_b2r(reg B2_RANGE **last_b2r, int start, int finish)
-{
-reg B2_RANGE *b2r;
-
- b2r = NEW(B2_RANGE);
- while (*last_b2r != NULL && (*last_b2r)->b2r_start < start)
- last_b2r = &((*last_b2r)->b2r_next);
- b2r->b2r_next = *last_b2r;
- b2r->b2r_start = start;
- b2r->b2r_finish = finish;
- *last_b2r = b2r;
-}
-
-static CHAR_INDEX
-b2_pos(HBF_STRUCT *hbf, HBF_CHAR code)
-{
-reg B2_RANGE *b2r;
-reg unsigned c;
-reg CHAR_INDEX pos;
-
- c = SecondByte(code);
- pos = 0;
- for (b2r = hbf->byte_2_range; b2r != NULL; b2r = b2r->b2r_next)
- if (b2r->b2r_start <= c && c <= b2r->b2r_finish)
- return pos + c - b2r->b2r_start;
- else
- pos += b2r->b2r_finish - b2r->b2r_start + 1;
- return BAD_CHAR_INDEX;
-}
-
-static int
-b2_size(reg B2_RANGE *b2r)
-{
-reg int size;
-
- size = 0;
- for ( ; b2r != NULL; b2r = b2r->b2r_next)
- size += b2r->b2r_finish - b2r->b2r_start + 1;
- return size;
-}
-
-/* map a position to a character code */
-static long
-code_of(HBF_STRUCT *hbf, long pos)
-{
- long code;
- int residue;
-reg B2_RANGE *b2r;
-
- code = pos / hbf->b2_size * 256;
- residue = pos % hbf->b2_size;
- for (b2r = hbf->byte_2_range; b2r != NULL; b2r = b2r->b2r_next)
- if (b2r->b2r_start + residue <= b2r->b2r_finish)
- return code + b2r->b2r_start + residue;
- else
- residue -= b2r->b2r_finish - b2r->b2r_start + 1;
- /* should never get here */
- return 0L;
-}
-
-/*
- * String stuff
- */
-
-static bool
-match(reg const char *lp, reg const char *sp)
-{
- while (*lp == *sp && *sp != '\0') {
- lp++;
- sp++;
- }
- return (*lp == '\0' || isspace(*lp)) && *sp == '\0';
-}
-
-#ifdef NO_STRDUP
-char *
-strdup(const char *s)
-{
- char *new_s;
-
- new_s = malloc((unsigned)strlen(s) + 1);
- strcpy(new_s, s);
- return new_s;
-}
-#endif
-
-/*
- * Properties
- */
-
-static void
-add_property(reg HBF_STRUCT *hbf, const char *lp)
-{
-reg PROPERTY *prop;
- char tmp[MAXLINE];
-reg char *tp;
-
- prop = NEW(PROPERTY);
-
- tp = tmp;
- while (*lp != '\0' && ! isspace(*lp))
- *tp++ = *lp++;
- *tp = '\0';
- prop->prop_name = strdup(tmp);
-
- while (*lp != '\0' && isspace(*lp))
- lp++;
-
- tp = tmp;
- if (*lp == QUOTE) {
- lp++;
- while (*lp != '\0' && ! (*lp == QUOTE && *++lp != QUOTE))
- *tp++ = *lp++;
- }
- else
- for (;;) {
- while (*lp != '\0' && ! isspace(*lp))
- *tp++ = *lp++;
- while (*lp != '\0' && isspace(*lp))
- lp++;
- if (*lp == '\0')
- break;
- *tp++ = ' ';
- }
- *tp = '\0';
- prop->prop_value = strdup(tmp);
-
- prop->prop_next = hbf->property;
- hbf->property = prop;
-}
-
-const char *
-hbfProperty(HBF *hbfFile, const char *propName)
-{
-reg HBF_STRUCT *hbf;
-reg PROPERTY *prop;
-
- hbf = (HBF_STRUCT *)hbfFile;
- for (prop = hbf->property; prop != NULL; prop = prop->prop_next)
- if (strcmp(prop->prop_name, propName) == 0)
- return prop->prop_value;
- return NULL;
-}
-
-/*
- * Compatability routines
- */
-
-const char *
-HBF_GetProperty(HBF *handle, const char *propertyName)
-{
- return hbfProperty(handle, propertyName);
-}
-
-int
-HBF_GetFontBoundingBox(HBF_Handle handle,
- unsigned int *width, unsigned int *height,
- int *xDisplacement, int *yDisplacement)
-{
- if (width != NULL)
- *width = hbfFontBBox(handle)->hbf_width;
- if (height != NULL)
- *height = hbfFontBBox(handle)->hbf_height;
- if (xDisplacement != NULL)
- *xDisplacement = hbfFontBBox(handle)->hbf_xDisplacement;
- if (yDisplacement != NULL)
- *yDisplacement = hbfFontBBox(handle)->hbf_yDisplacement;
- return 0;
-}
-
-int
-HBF_GetBitmapBoundingBox(HBF_Handle handle,
- unsigned int *width, unsigned int *height,
- int *xDisplacement, int *yDisplacement)
-{
- if (width != NULL)
- *width = hbfBitmapBBox(handle)->hbf_width;
- if (height != NULL)
- *height = hbfBitmapBBox(handle)->hbf_height;
- if (xDisplacement != NULL)
- *xDisplacement = hbfBitmapBBox(handle)->hbf_xDisplacement;
- if (yDisplacement != NULL)
- *yDisplacement = hbfBitmapBBox(handle)->hbf_yDisplacement;
- return 0;
-}
-
-/*
- * Prepend a directory to a relative filename.
- */
-static char *
-concat(const char *dir, /* not necessarily null-terminated */
- int dirlen, /* number of significant chars in dir */
- const char *stem) /* relative filename */
-{
- char *fullname;
-
- if (dirlen == 0) /* null: current directory */
- return strdup(stem);
-#ifdef unix
- fullname = malloc(dirlen + strlen(stem) + 2);
- (void)sprintf(fullname, "%.*s/%s", dirlen, dir, stem);
-#else
-#ifdef msdos
- fullname = malloc(dirlen + strlen(stem) + 2);
- (void)sprintf(fullname, "%.*s\\%s", dirlen, dir, stem);
-#else
-#ifdef vms
- if (dir[dirlen-1] == ']' && stem[0] == '[' && stem[1] == '-') {
- dirlen--;
- stem++;
- fullname = malloc(dirlen + strlen(stem) + 2);
- (void)sprintf(fullname, "%.*s.%s", dirlen, dir, stem);
- }
- else {
- if (dir[dirlen-1] == ']' && stem[0] == '[' && stem[1] == '.') {
- dirlen--;
- stem++;
- }
- fullname = malloc(dirlen + strlen(stem) + 1);
- (void)sprintf(fullname, "%.*s%s", dirlen, dir, stem);
- }
-#else
- fullname = strdup(stem);
-#endif /* vms */
-#endif /* msdos */
-#endif /* unix */
- return fullname;
-}
-
-/*
- * Bitmap files
- *
- * If the host operating system has a heirarchical file system and
- * the bitmap file name is relative, it is relative to the directory
- * containing the HBF file.
- */
-static char *
-expand_filename(const char *name, const char *hbf_name)
-{
-#ifdef unix
-reg char *s;
-reg int size;
-
- size = name[0] != '/' && (s = strrchr(hbf_name, '/')) != NULL ?
- s - hbf_name + 1 : 0;
- s = malloc((unsigned)size + strlen(name) + 1);
- (void)sprintf(s, "%.*s%s", size, hbf_name, name);
- return s;
-#else
-#ifdef msdos
-reg char *s;
-reg int size;
-
-#ifdef __EMX__
- s = (unsigned char *)hbf_name + strlen((unsigned char *)hbf_name) - 1;
- for(;;) {
- if (*s == '\\' || *s == '/')
- break;
- if (s == hbf_name) {
- s = NULL;
- break;
- }
- s--;
- }
-
- size = HasDrive(name) ? 0 :
- (name[0] == '\\' || name[0] == '/') ?
- (HasDrive(hbf_name) ? 2 : 0) :
- s != NULL ? s - hbf_name + 1 : 0;
-#else
- size = HasDrive(name) ? 0 :
- name[0] == '\\' ? (HasDrive(hbf_name) ? 2 : 0) :
- (s = strrchr(hbf_name, '\\')) != NULL ?
- s - hbf_name + 1 : 0;
-#endif /* __EMX__ */
- s = malloc((unsigned)size + strlen(name) + 1);
- (void)sprintf(s, "%.*s%s", size, hbf_name, name);
- return s;
-#else
-#ifdef vms
-reg char *s;
-reg const char *copyto;
-reg int size;
-
- if ((s = strchr(hbf_name, ']')) != NULL && RelativeFileName(name))
- return concat(hbf_name, (s - hbf_name) + 1, name);
-
- copyto = hbf_name;
- if ((s = strstr(copyto, "::")) != NULL && strstr(name, "::") == NULL)
- copyto = s+2;
- if ((s = strchr(copyto, ':')) != NULL && strchr(name, ':') == NULL)
- copyto = s+1;
- size = copyto - hbf_name;
- s = malloc((unsigned)size + strlen(name) + 1);
- (void)sprintf(s, "%.*s%s", size, hbf_name, name);
- return s;
-#else
- return strdup(name);
-#endif /* vms */
-#endif /* msdos */
-#endif /* unix */
-}
-
-static BM_FILE *
-find_file(HBF_STRUCT *hbf, const char *filename)
-{
- BM_FILE **fp;
-reg BM_FILE *file;
- FILE *f;
- char *bmfname;
-#ifdef IN_MEMORY
-#ifdef unix
- bool from_pipe;
-#endif
-#endif
-
- for (fp = &(hbf->bm_file); *fp != NULL; fp = &((*fp)->bmf_next)) {
- bmfname = strrchr((*fp)->bmf_name, '/');
- bmfname = (bmfname) ? bmfname + 1 : (*fp)->bmf_name;
- if (strcmp(bmfname, filename) == 0)
- return *fp;
- }
-
- file = NEW(BM_FILE);
- if (file == NULL) {
- eprintf("out of memory");
- return NULL;
- }
- file->bmf_name = expand_filename(filename, hbf->filename);
- if (file->bmf_name == NULL) {
- free((char *)file);
- return NULL;
- }
- f = fopen(file->bmf_name, READ_BINARY);
-#ifdef IN_MEMORY
-#ifdef unix
- from_pipe = FALSE;
- if (f == NULL) {
- char tmp[400];
-
- sprintf(tmp, "%s.gz", file->bmf_name);
- if ((f = fopen(tmp, "r")) != NULL) {
- fclose(f);
- sprintf(tmp, "gzcat %s.gz", file->bmf_name);
- if ((f = popen(tmp, "r")) != NULL)
- from_pipe = TRUE;
- }
- }
-#endif /* unix */
-#endif /* IN_MEMORY */
- if (f == NULL) {
- eprintf("can't open bitmap file '%s'", file->bmf_name);
- free(file->bmf_name);
- free((char *)file);
- return NULL;
- }
-#ifdef IN_MEMORY
- if (! read_bitmap_file(file, f)) {
- free(file->bmf_name);
- free((char *)file);
- return NULL;
- }
-#ifdef unix
- if (from_pipe)
- pclose(f);
- else
- fclose(f);
-#else /* ! unix */
- fclose(f);
-#endif /* ! unix */
-#else /* ! IN_MEMORY */
- file->bmf_file = f;
- fseek(f, 0L, 2);
- file->bmf_size = ftell(f);
-#endif /* ! IN_MEMORY */
- file->bmf_next = NULL;
- *fp = file;
- return file;
-}
-
-#ifdef IN_MEMORY
-#define GRAIN_SIZE 512
-
-static bool
-read_bitmap_file(BM_FILE *bmf, FILE *f)
-{
- byte *contents, *cp;
- long size;
- int c;
-
- size = 0;
- cp = contents = (byte *)malloc((unsigned)GRAIN_SIZE);
- if (contents == NULL) {
- eprintf("not enough space for bitmap file");
- return NULL;
- }
- while ((c = getc(f)) != EOF) {
- if (size%GRAIN_SIZE == 0) {
- contents = (byte *)realloc((char *)contents,
- (unsigned)(size + GRAIN_SIZE));
- if (contents == NULL) {
- eprintf("not enough space for bitmap file");
- return NULL;
- }
- cp = contents + size;
- }
- *cp++ = c;
- size++;
- }
- bmf->bmf_size = size;
- bmf->bmf_contents = (byte *)realloc((char *)contents, (unsigned)size);
- return TRUE;
-}
-#endif /* IN_MEMORY */
-
-/*
- * Code ranges
- */
-
-/* check that a code range fits within its bitmap file */
-static bool
-too_short(HBF_STRUCT *hbf, CODE_RANGE *cp)
-{
- int bm_size;
- long offset, end_offset;
- BM_FILE *bmf;
- long start, finish;
-
- bm_size = FileBitmapSize(&(hbf->public), cp);
- offset = cp->code_offset;
- start = cp->code_start;
- finish = cp->code_finish;
- end_offset = offset + bm_size *
- (hbf->b2_size*(long)FirstByte(finish) +
- b2_pos(hbf, finish) - cp->code_pos + 1);
- bmf = cp->code_bm_file;
- if (end_offset <= bmf->bmf_size)
- return FALSE;
- /* bitmap file is too short: produce a specific error message */
- if (offset > bmf->bmf_size)
- eprintf("bitmap file '%s' is shorter than offset 0x%04lx",
- bmf->bmf_name, offset);
- else if (offset + bm_size > bmf->bmf_size)
- eprintf("bitmap file '%s' too short: no room for any bitmaps at offset 0x%04lx",
- bmf->bmf_name, offset);
- else
- eprintf("bitmap file '%s' is too short - code range appears to be 0x%04lx-0x%04lx",
- bmf->bmf_name,
- start,
- code_of(hbf, cp->code_pos +
- (bmf->bmf_size - offset)/bm_size) - 1);
- return TRUE;
-}
-
-static const char *
-skip_word(int n, const char *s)
-{
- for ( ; n > 0; n--) {
- while (*s != '\0' && ! isspace(*s))
- s++;
- while (*s != '\0' && isspace(*s))
- s++;
- }
- return s;
-}
-
-/* optional keywords at the end of a CODE_RANGE line */
-static void
-parse_keywords(CODE_RANGE *cp, const char *s)
-{
- for (s = skip_word(4, s) ; *s != '\0'; s = skip_word(1, s)) {
- switch (*s) {
- case 's': case 'S': case 't': case 'T':
- /* keyword "sideways" or "transposed" */
- cp->code_transposed = TRUE;
- break;
- case 'i': case 'I':
- /* keyword "inverted" */
- cp->code_inverted = TRUE;
- }
- }
-}
-
-static bool
-add_code_range(HBF_STRUCT *hbf, const char *line)
-{
- CODE_RANGE *cp;
- CODE_RANGE **cpp;
- long start, finish;
- long offset;
- char filename[MAXLINE];
- BM_FILE *bmf;
- CHAR_INDEX b2pos;
-
- if (sscanf(line, "HBF_CODE_RANGE %li-%li %s %li",
- &start, &finish, filename, &offset) != 4) {
- eprintf("syntax error in HBF_CODE_RANGE");
- return FALSE;
- }
- /* code ranges are checked in real_open() */
- if ((bmf = find_file(hbf, filename)) == NULL)
- return FALSE;
- if ((cp = NEW(CODE_RANGE)) == NULL) {
- eprintf("out of memory");
- return FALSE;
- }
-
- cp->code_start = (CHAR)start;
- cp->code_finish = (CHAR)finish;
- cp->code_bm_file = bmf;
- cp->code_offset = offset;
- cp->code_transposed = cp->code_inverted = FALSE;
- parse_keywords(cp, line);
- /* insert it in order */
- for (cpp = &hbf->code_range;
- *cpp != NULL && (*cpp)->code_finish < start;
- cpp = &((*cpp)->code_next))
- ;
- if (*cpp != NULL && (*cpp)->code_start <= finish) {
- eprintf("code ranges overlap");
- return FALSE;
- }
- cp->code_next = *cpp;
- *cpp = cp;
-
- /* set code_pos, and check range */
- if (start > finish) {
- eprintf("illegal code range 0x%04lx-0x%04lx", start, finish);
- return FALSE;
- }
- if ((b2pos = b2_pos(hbf, start)) == BAD_CHAR_INDEX) {
- eprintf("illegal start code 0x%04lx", start);
- return FALSE;
- }
- cp->code_pos = hbf->b2_size*(long)FirstByte(start) + b2pos;
- if ((b2pos = b2_pos(hbf, finish)) == BAD_CHAR_INDEX) {
- eprintf("illegal finish code 0x%04lx", finish);
- return FALSE;
- }
- /* check that the bitmap file has enough bitmaps */
- return ! too_short(hbf, cp);
-}
-
-/*
- * Reading and parsing of an HBF file
- */
-
-/* get line, truncating to len, and trimming trailing spaces */
-static bool
-get_line(char *buf, int len, FILE *f)
-{
- int c;
- char *bp;
-
- bp = buf;
- for (;;) {
- if ((c = getc(f)) == EOF) {
- eprintf("unexpected end of file");
- return FALSE;
- }
- if (c == '\n' || c == '\r') {
- /* trim trailing space */
- while (bp > buf && isspace(*(bp-1)))
- bp--;
- *bp = '\0';
- return TRUE;
- }
- if (len > 0) {
- *bp++ = c;
- len--;
- }
- }
-}
-
-/* get next non-COMMENT line */
-static bool
-get_text_line(char *buf, int len, FILE *f)
-{
- while (get_line(buf, len, f))
- if (*buf != '\0' && ! match(buf, "COMMENT"))
- return TRUE;
- return FALSE;
-}
-
-static bool
-get_property(const char *line, const char *keyword, HBF_STRUCT *hbf)
-{
- if (! match(line, keyword)) {
- eprintf("%s expected", keyword);
- return FALSE;
- }
- add_property(hbf, line);
- return TRUE;
-}
-
-static bool
-get_bbox(const char *line, const char *keyword, HBF_BBOX *bbox)
-{
- int w, h, xd, yd;
-
- if (! match(line, keyword) ||
- sscanf(line + strlen(keyword), "%i %i %i %i",
- &w, &h, &xd, &yd) != 4) {
- eprintf("%s expected", keyword);
- return FALSE;
- }
- if (w <= 0 || h <= 0) {
- eprintf("illegal %s dimensions %dx%d", keyword, w, h);
- return FALSE;
- }
- bbox->hbf_width = w;
- bbox->hbf_height = h;
- bbox->hbf_xDisplacement = xd;
- bbox->hbf_yDisplacement = yd;
- return TRUE;
-}
-
-/*
- * HBFHeaderFile ::=
- * 'HBF_START_FONT' version EOLN
- * 'HBF_CODE_SCHEME' word ... EOLN
- * 'FONT' fontName EOLN
- * 'SIZE' ptsize xres yres EOLN
- * 'HBF_BITMAP_BOUNDING_BOX' w h xd yd EOLN
- * 'FONTBOUNDINGBOX' w h xd yd EOLN
- * X11R5FontPropertySection
- * 'CHARS' n EOLN
- * HBFByte2RangeSection
- * HBFCodeRangeSection
- * 'HBF_END_FONT' EOLN .
- *
- * This implementation allows extra lines before HBF_END_FONT.
- * Anything after HBF_END_FONT is ignored.
- */
-
-static bool
-parse_file(FILE *f, reg HBF_STRUCT *hbf)
-{
- char line[MAXLINE];
- int start, finish;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_property(line, "HBF_START_FONT", hbf))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_property(line, "HBF_CODE_SCHEME", hbf))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_property(line, "FONT", hbf))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_property(line, "SIZE", hbf))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_bbox(line, "HBF_BITMAP_BOUNDING_BOX",
- &(hbf->public.hbf_bitmap_bbox)))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f) ||
- ! get_bbox(line, "FONTBOUNDINGBOX", &(hbf->public.hbf_font_bbox)))
- return FALSE;
-
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- if (match(line, "STARTPROPERTIES")) {
- for (;;) {
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- if (match(line, "ENDPROPERTIES"))
- break;
- add_property(hbf, line);
- }
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- }
-
- if (match(line, "CHARS"))
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
-
- if (match(line, "HBF_START_BYTE_2_RANGES")) {
- for (;;) {
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- if (match(line, "HBF_END_BYTE_2_RANGES"))
- break;
- if (sscanf(line, "HBF_BYTE_2_RANGE %i-%i",
- &start, &finish) != 2) {
- eprintf("HBF_BYTE_2_RANGE expected");
- return FALSE;
- }
- add_b2r(&(hbf->byte_2_range), start, finish);
- }
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- }
- else
- add_b2r(&(hbf->byte_2_range), 0, 0xff);
- hbf->b2_size = b2_size(hbf->byte_2_range);
-
- if (! match(line, "HBF_START_CODE_RANGES")) {
- eprintf("HBF_START_CODE_RANGES expected");
- return FALSE;
- }
- for (;;) {
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- if (match(line, "HBF_END_CODE_RANGES"))
- break;
- if (! add_code_range(hbf, line))
- return FALSE;
- }
-
- for (;;) {
- if (! get_text_line(line, MAXLINE, f))
- return FALSE;
- if (match(line, "HBF_END_FONT"))
- break;
- /* treat extra lines as properties (for private extensions) */
- add_property(hbf, line);
- }
-
- return TRUE;
-}
-
-static FILE *
-path_open(const char *path, const char *filename, char **fullp)
-{
- if (LocalFileName(filename) && path != NULL) {
-#ifdef PATH_DELIMITER
- int len;
- char *fullname;
- FILE *f;
- const char *p_next;
-
- len = strlen(filename);
- for (;;) {
- p_next = strchr(path, PATH_DELIMITER);
- if (p_next == NULL)
- p_next = path + strlen(path);
- fullname = concat(path, p_next - path, filename);
- if ((f = fopen(fullname, "r")) != NULL) {
- *fullp = fullname;
- return f;
- }
- free(fullname);
- if (*p_next == '\0')
- break;
- path = p_next + 1;
- }
-#endif
- return NULL;
- }
- else {
- *fullp = strdup(filename);
- return fopen(*fullp, "r");
- }
-}
-
-static bool
-real_open(const char *filename, reg HBF_STRUCT *hbf)
-{
- FILE *f;
-
- f = path_open(getenv("HBFPATH"), filename, &(hbf->filename));
- if (f == NULL) {
- eprintf("can't read file '%s'", filename);
- return FALSE;
- }
- if (! parse_file(f, hbf)) {
- fclose(f);
- return FALSE;
- }
- fclose(f);
- return TRUE;
-}
-
-HBF *
-hbfOpen(const char *filename)
-{
-reg HBF_STRUCT *hbf;
-
- if ((hbf = NEW(HBF_STRUCT)) == NULL) {
- eprintf("can't allocate HBF structure");
- return NULL;
- }
- clear_record(hbf);
- if (real_open(filename, hbf))
- return &(hbf->public);
- hbfClose(&(hbf->public));
- return NULL;
-}
-
-int
-HBF_OpenFont(const char *filename, HBF **ptrHandleStorage)
-{
- return (*ptrHandleStorage = hbfOpen(filename)) == NULL ? -1 : 0;
-}
-
-/*
- * Close files, free everything associated with the HBF.
- */
-
-int
-HBF_CloseFont(HBF *hbfFile)
-{
-reg HBF_STRUCT *hbf;
- PROPERTY *prop_ptr, *prop_next;
- B2_RANGE *b2r_ptr, *b2r_next;
- CODE_RANGE *code_ptr, *code_next;
- BM_FILE *bmf_ptr, *bmf_next;
- int status;
-
- status = 0;
- hbf = (HBF_STRUCT *)hbfFile;
-
- if (hbf->filename != NULL)
- free(hbf->filename);
- if (hbf->bitmap_buffer != NULL)
- free(hbf->bitmap_buffer);
-
- for (prop_ptr = hbf->property;
- prop_ptr != NULL;
- prop_ptr = prop_next) {
- prop_next = prop_ptr->prop_next;
- free(prop_ptr->prop_name);
- free(prop_ptr->prop_value);
- free((char *)prop_ptr);
- }
-
- for (b2r_ptr = hbf->byte_2_range;
- b2r_ptr != NULL;
- b2r_ptr = b2r_next) {
- b2r_next = b2r_ptr->b2r_next;
- free((char *)b2r_ptr);
- }
-
- for (code_ptr = hbf->code_range;
- code_ptr != NULL;
- code_ptr = code_next) {
- code_next = code_ptr->code_next;
- free((char *)code_ptr);
- }
-
- for (bmf_ptr = hbf->bm_file;
- bmf_ptr != NULL;
- bmf_ptr = bmf_next) {
- bmf_next = bmf_ptr->bmf_next;
-#ifdef IN_MEMORY
- free((char *)(bmf_ptr->bmf_contents));
-#else
- if (bmf_ptr->bmf_file != NULL &&
- fclose(bmf_ptr->bmf_file) < 0)
- status = -1;
-#endif
- free(bmf_ptr->bmf_name);
- free((char *)bmf_ptr);
- }
-
- free((char *)hbf);
-
- return status;
-}
-
-void
-hbfClose(HBF *hbfFile)
-{
- (void)HBF_CloseFont(hbfFile);
-}
-
-/*
- * Fetch a bitmap
- */
-
-const byte *
-hbfGetBitmap(HBF *hbf, HBF_CHAR code)
-{
- return get_bitmap((HBF_STRUCT *)hbf, code, (byte *)NULL);
-}
-
-int
-HBF_GetBitmap(HBF *hbf, HBF_CHAR code, byte *buffer)
-{
- return get_bitmap((HBF_STRUCT *)hbf, code, buffer) == NULL ? -1 : 0;
-}
-
-/*
- * Internal function to fetch a bitmap.
- * If buffer is non-null, it must be used.
- */
-static const byte *
-get_bitmap(reg HBF_STRUCT *hbf, HBF_CHAR code, byte *buffer)
-{
- CHAR_INDEX pos, b2pos;
-reg CODE_RANGE *cp;
- BM_FILE *bmf;
- int bm_size;
- long offset;
-
- if ((b2pos = b2_pos(hbf, code)) == BAD_CHAR_INDEX)
- return NULL;
- pos = hbf->b2_size*FirstByte(code) + b2pos;
- for (cp = hbf->code_range; cp != NULL; cp = cp->code_next)
- if (cp->code_start <= code && code <= cp->code_finish) {
- bmf = cp->code_bm_file;
- bm_size = FileBitmapSize(&(hbf->public), cp);
- offset = cp->code_offset +
- (long)(pos - cp->code_pos) * bm_size;
-#ifdef IN_MEMORY
- if (buffer == NULL &&
- ! cp->code_transposed && ! cp->code_inverted)
- return bmf->bmf_contents + offset;
-#endif /* IN_MEMORY */
- if (buffer == NULL &&
- ((buffer = local_buffer(hbf)) == NULL))
- return NULL;
-#ifdef IN_MEMORY
- if (cp->code_transposed)
- copy_transposed(&(hbf->public),
- buffer,
- bmf->bmf_contents + offset);
- else
- memcpy((char *)buffer,
- (char *)(bmf->bmf_contents + offset),
- bm_size);
-#else /* ! IN_MEMORY */
- if (fseek(bmf->bmf_file, offset, 0) != 0) {
- eprintf("seek error on code 0x%04x", code);
- return NULL;
- }
- if (cp->code_transposed ?
- ! get_transposed(&(hbf->public), bmf->bmf_file,
- buffer) :
- fread((char *)buffer,
- bm_size, 1, bmf->bmf_file) != 1) {
- eprintf("read error on code 0x%04x", code);
- return NULL;
- }
-#endif /* IN_MEMORY */
- if (cp->code_inverted)
- invert(buffer, HBF_BitmapSize(&(hbf->public)));
- return buffer;
- }
- eprintf("code 0x%04x out of range", code);
- return NULL;
-}
-
-static byte *
-local_buffer(HBF_STRUCT *hbf)
-{
- if (hbf->bitmap_buffer == NULL &&
- (hbf->bitmap_buffer = (byte *)malloc(HBF_BitmapSize(&(hbf->public)))) == NULL) {
- eprintf("out of memory");
- return NULL;
- }
- return hbf->bitmap_buffer;
-}
-
-static void
-invert(byte *buffer, unsigned int length)
-{
- for ( ; length > 0; length--)
- *buffer++ ^= 0xff;
-}
-
-#ifdef IN_MEMORY
-static bool
-copy_transposed(HBF *hbf, reg byte *bitmap, reg const byte *source)
-{
-reg byte *pos;
-reg byte *bm_end;
- int x;
- int width;
-reg int row_size;
-reg int c;
-reg int imask, omask;
-
- width = hbfBitmapBBox(hbf)->hbf_width;
- row_size = HBF_RowSize(hbf);
- bm_end = bitmap + HBF_BitmapSize(hbf);
- (void)memset((char *)bitmap, '\0', HBF_BitmapSize(hbf));
- for (x = 0; x < width; x++) {
- pos = bitmap + x/8;
- omask = Bit(x%8);
- /* y = 0 */
- for (;;) {
- c = *source++;
- for (imask = Bit(0); imask != 0; imask >>= 1) {
- /*
- * At this point,
- *
- * imask == Bit(y%8)
- * pos == bitmap + y*row_size + x/8
- *
- * We examine bit y of row x of the input,
- * setting bit x of row y of the output if
- * required, by applying omask to *pos.
- */
- if ((c & imask) != 0)
- *pos |= omask;
- /* if (++y > height) goto end_column */
- pos += row_size;
- if (pos >= bm_end)
- goto end_column;
- }
- }
-end_column:
- ;
- }
- return TRUE;
-}
-#else /* ! IN_MEMORY */
-static bool
-get_transposed(HBF *hbf, FILE *f, reg byte *bitmap)
-{
-reg byte *pos;
-reg byte *bm_end;
- int x;
- int width;
-reg int row_size;
-reg int c;
-reg int imask, omask;
-
- width = hbfBitmapBBox(hbf)->hbf_width;
- row_size = HBF_RowSize(hbf);
- bm_end = bitmap + HBF_BitmapSize(hbf);
- (void)memset((char *)bitmap, '\0', HBF_BitmapSize(hbf));
- for (x = 0; x < width; x++) {
- pos = bitmap + x/8;
- omask = Bit(x%8);
- /* y = 0 */
- for (;;) {
- if ((c = getc(f)) == EOF)
- return FALSE;
- for (imask = Bit(0); imask != 0; imask >>= 1) {
- /*
- * At this point,
- *
- * imask == Bit(y%8)
- * pos == bitmap + y*row_size + x/8
- *
- * We examine bit y of row x of the input,
- * setting bit x of row y of the output if
- * required, by applying omask to *pos.
- */
- if ((c & imask) != 0)
- *pos |= omask;
- /* if (++y > height) goto end_column */
- pos += row_size;
- if (pos >= bm_end)
- goto end_column;
- }
- }
-end_column:
- ;
- }
- return TRUE;
-}
-#endif /* ! IN_MEMORY */
-
-/*
- * Call function on each valid code in ascending order.
- */
-void
-hbfForEach(reg HBF *hbfFile, void (*func)(HBF *, HBF_CHAR))
-{
- HBF_STRUCT *hbf;
- CODE_RANGE *cp;
-reg B2_RANGE *b2r;
-reg unsigned byte1, byte2;
-reg unsigned finish;
-
- hbf = (HBF_STRUCT *)hbfFile;
- for (cp = hbf->code_range; cp != NULL; cp = cp->code_next) {
- byte1 = FirstByte(cp->code_start);
- byte2 = SecondByte(cp->code_start);
- while (MakeCode(byte1, byte2) <= cp->code_finish) {
- for (b2r = hbf->byte_2_range;
- b2r != NULL;
- b2r = b2r->b2r_next) {
- if (byte2 < b2r->b2r_start)
- byte2 = b2r->b2r_start;
- finish = b2r->b2r_finish;
- if (byte1 == FirstByte(cp->code_finish) &&
- finish > SecondByte(cp->code_finish))
- finish = SecondByte(cp->code_finish);
- while (byte2 <= finish) {
- (*func)(hbfFile,
- MakeCode(byte1, byte2));
- byte2++;
- }
- }
- byte1++;
- byte2 = 0;
- }
- }
-}
-
-const char *
-hbfFileName(HBF *hbf)
-{
- return ((HBF_STRUCT *)hbf)->filename;
-}
-
-long
-hbfChars(HBF *hbfFile)
-{
- HBF_STRUCT *hbf;
- CODE_RANGE *cp;
- long num_chars;
-
- hbf = (HBF_STRUCT *)hbfFile;
- num_chars = 0;
- for (cp = hbf->code_range; cp != NULL; cp = cp->code_next)
- num_chars +=
- hbf->b2_size*FirstByte(cp->code_finish) +
- b2_pos(hbf, cp->code_finish) -
- (hbf->b2_size*FirstByte(cp->code_start) +
- b2_pos(hbf, cp->code_start)) + 1;
- return num_chars;
-}
-
-/*
- * Functions also implemented as macros
- */
-
-#ifdef hbfBitmapBBox
-#undef hbfBitmapBBox
-#endif
-
-HBF_BBOX *
-hbfBitmapBBox(HBF *hbf)
-{
- return &(hbf->hbf_bitmap_bbox);
-}
-
-#ifdef hbfFontBBox
-#undef hbfFontBBox
-#endif
-
-HBF_BBOX *
-hbfFontBBox(HBF *hbf)
-{
- return &(hbf->hbf_font_bbox);
-}
-
-const void *
-hbfGetByte2Range(HBF *hbfFile, const void *b2r_pointer,
- byte *startp, byte *finishp)
-{
- HBF_STRUCT *hbf;
- const B2_RANGE *b2r;
-
- hbf = (HBF_STRUCT *)hbfFile;
- if (b2r_pointer == NULL)
- b2r = hbf->byte_2_range;
- else
- b2r = ((const B2_RANGE *)b2r_pointer)->b2r_next;
- if(b2r == NULL)
- return NULL;
- *startp = b2r->b2r_start;
- *finishp = b2r->b2r_finish;
- return (const void *)b2r;
-}
-
-const void *
-hbfGetCodeRange(HBF *hbfFile, const void *code_pointer,
- HBF_CHAR *startp, HBF_CHAR *finishp)
-{
- HBF_STRUCT *hbf;
- const CODE_RANGE *cp;
-
- hbf = (HBF_STRUCT *)hbfFile;
- if (code_pointer == NULL)
- cp = hbf->code_range;
- else
- cp = ((const CODE_RANGE *)code_pointer)->code_next;
- if(cp == NULL)
- return NULL;
- *startp = cp->code_start;
- *finishp = cp->code_finish;
- return (const void *)cp;
-}
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf.h b/Build/source/texk/cjkutils/hbf2gf/hbf.h
deleted file mode 100644
index 34f5940a71b..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright 1993,1994,1995,2005 by Ross Paterson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Two interfaces to HBF files -- take your pick.
- *
- * Ross Paterson <ross@soi.city.ac.uk>
- *
- * Ross no longer maintains this code. Please send bug reports to
- * Werner Lemberg <wl@gnu.org>.
- *
- */
-#ifndef _HBF_
-#define _HBF_
-
-#ifndef __STDC__
-# ifndef const
-# define const
-# endif
-#endif
-
-/*
- * #1: a lightweight C interface.
- */
-
-typedef unsigned int HBF_CHAR;
-
-typedef struct {
- unsigned short hbf_width;
- unsigned short hbf_height;
- short hbf_xDisplacement;
- short hbf_yDisplacement;
-} HBF_BBOX;
-
-typedef struct {
- /* fields corresponding to the definition */
- HBF_BBOX hbf_bitmap_bbox; /* HBF_BITMAP_BOUNDING_BOX */
- HBF_BBOX hbf_font_bbox; /* FONTBOUNDINGBOX */
-} HBF;
-
-extern HBF *hbfOpen(
-#ifdef __STDC__
- const char *filename
-#endif
- );
-
-extern void hbfClose(
-#ifdef __STDC__
- HBF *hbf
-#endif
- );
-
-extern const char *hbfProperty(
-#ifdef __STDC__
- HBF *hbf,
- const char *propName
-#endif
- );
-
-extern const unsigned char *hbfGetBitmap(
-#ifdef __STDC__
- HBF *hbf,
- HBF_CHAR code
-#endif
- );
-
-extern void hbfForEach(
-#ifdef __STDC__
- HBF *hbf,
- void (*func)(HBF *sameHbf, HBF_CHAR code)
-#endif
- );
-
-extern const char *hbfFileName(
-#ifdef __STDC__
- HBF *hbf
-#endif
- );
-
-extern long hbfChars(
-#ifdef __STDC__
- HBF *hbf
-#endif
- );
-
-extern HBF_BBOX *hbfBitmapBBox(
-#ifdef __STDC__
- HBF *hbf
-#endif
- );
-/* but defined here as a macro */
-#define hbfBitmapBBox(hbf) (&((hbf)->hbf_bitmap_bbox))
-
-extern HBF_BBOX *hbfFontBBox(
-#ifdef __STDC__
- HBF *hbf
-#endif
- );
-/* but defined here as a macro */
-#define hbfFontBBox(hbf) (&((hbf)->hbf_font_bbox))
-
-#define HBF_RowSize(hbf)\
- ((hbfBitmapBBox(hbf)->hbf_width + 7)/8)
-
-#define HBF_BitmapSize(hbf)\
- (HBF_RowSize(hbf) * hbfBitmapBBox(hbf)->hbf_height)
-
-#define HBF_GetBit(hbf,bitmap,x,y)\
- (((bitmap)[(y)*HBF_RowSize(hbf) + (x)/8]>>(7 - (x)%8))&01)
-
-extern int hbfDebug; /* set non-zero for error reporting */
-
-extern const void *hbfGetCodeRange(
-#ifdef __STDC__
- HBF *hbfFile,
- const void *code_pointer,
- HBF_CHAR *startp,
- HBF_CHAR *finishp
-#endif
- );
-
-extern const void *hbfGetByte2Range(
-#ifdef __STDC__
- HBF *hbfFile,
- const void *b2r_pointer,
- unsigned char *startp,
- unsigned char *finishp
-#endif
- );
-
-/*
- * #2: taken from Appendix 2 of the HBF draft.
- */
-
-typedef unsigned int HBF_HzCode;
-typedef unsigned char HBF_Byte ;
-typedef HBF_Byte * HBF_BytePtr ;
-typedef HBF * HBF_Handle ;
-typedef HBF_Handle * HBF_HandlePtr ;
-typedef char * String ;
-
-extern int HBF_OpenFont(
-#ifdef __STDC__
- const char * filename,
- HBF_HandlePtr ptrHandleStorage
-#endif
-);
-
-extern int HBF_CloseFont(
-#ifdef __STDC__
- HBF_Handle handle
-#endif
-);
-
-extern const char * HBF_GetProperty(
-#ifdef __STDC__
- HBF_Handle handle,
- const char * propertyName
-#endif
-);
-
-extern int HBF_GetFontBoundingBox(
-#ifdef __STDC__
- HBF_Handle handle,
- unsigned int *width,
- unsigned int *height,
- int *xDisplacement,
- int *yDisplacement
-#endif
-);
-
-extern int HBF_GetBitmapBoundingBox(
-#ifdef __STDC__
- HBF_Handle handle,
- unsigned int *width,
- unsigned int *height,
- int *xDisplacement,
- int *yDisplacement
-#endif
-);
-
-extern int HBF_GetBitmap(
-#ifdef __STDC__
- HBF_Handle handle,
- HBF_HzCode hanziCode,
- HBF_BytePtr ptrBitmapBuffer
-#endif
-);
-
-#endif /* ! _HBF_ */
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.1 b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.1
deleted file mode 100644
index 1fdff00cee1..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.1
+++ /dev/null
@@ -1,754 +0,0 @@
-.\" man page for hbf2gf
-.\"
-.\" 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
-.\"
-.
-.TH HBF2GF 1 17-Oct-2006 "CJK Version 4.7.0"
-.SH NAME
-hbf2gf \- convert a CJK bitmap font into subfonts usable by TeX and Omega.
-.
-.
-.SH SYNOPSIS
-.na
-.nh
-.B hbf2gf
-.RB [ -q ]
-.IR \%configuration-file [ .cfg ]
-.br
-.B hbf2gf
-'in +\n(.ku
-.RB [ -q ]
-.RB [ -p ]
-.RB [ -g ]
-.RB [ -n ]
-.I \%subfont-name \%x-resolution
-.RI [ \%y-scale \ | \ \%y-resolution ]
-.br
-.in
-.B hbf2gf
-.B -t
-.RB [ -q ]
-.I \%subfont-name
-.br
-.B "hbf2gf --version"
-|
-.B --help
-.ad
-.hy
-.
-.
-.
-.\" ====
-.\" ==== macro definitions
-.\" ====
-.
-.\" here we define \TeX for troff and nroff
-.if t .ds TX \fRT\h'-0.1667m'\v'0.20v'E\v'-0.20v'\h'-0.125m'X\fP
-.if n .ds TX TeX
-.
-.\" and here the same for \LaTeX
-.if t \{\
-.ie '\*(.T'dvi' \
-.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX
-.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX
-.\}
-.if n .ds LX LaTeX
-.
-.\" \LaTeXe
-.\" note that we need \vareps for TeX instead of \eps which can only be
-.\" accessed with the \N escape sequence (in the Math Italic font)
-.if t \{\
-.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v'
-.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v'
-.\}
-.if n .ds LE LaTeX\ 2e
-.
-.\" a definition for \Delta
-.if t .ds DE \(*D
-.if n .ds DE Delta_
-.
-.\" a typewriter font
-.if t \{\
-.de C
-\fC\\$1\fP\\$2
-..
-.\}
-.if n \{\
-.de C
-\\$1\\$2
-..
-.\}
-.
-.\" an addition to .TP to allow two labels for the same item
-.de TQ
-.br
-.ns
-.TP
-..
-.
-.\" ====
-.\" ==== end of macro definitions
-.\" ====
-.
-.
-.
-.SH DESCRIPTION
-CJK bitmap fonts can't be directly used with \*(TX
-because the number of characters in such fonts exceeds\ 256, the limit of a
-\*(TX
-font.
-Thus it is necessary to split these fonts into subfonts, and this is
-exactly what
-.B hbf2gf
-does.
-.PP
-As the name says,
-.B hbf2gf
-uses CJK fonts in a certain format which is called
-.B Hanzi Bitmap Font
-.RB ( HBF )
-format.
-It simply consists of the CJK bitmap file(s) and a text file in a format
-very similar to the BDF format of the X\ Window System which describes the
-bitmap font files: the encoding, the size, etc.
-The produced
-.C GF
-files can then be converted with
-.B gftopk
-into standard
-.C PK
-files.
-.PP
-.B hbf2gf
-can be called in three modes:
-.
-.PP
-.in +2m
-.B hbf2gf
-.RB [ -q ]
-.IR configuration-file [ .cfg ]
-.PP
-.in +5m
-This call normally creates a set of
-.C GF
-files, one
-.C PL
-file, and a batch file which must be executed after
-.B hbf2gf
-has finished.
-This script will then call
-.B gftopk
-to convert all
-.C GF
-files into
-.C PK
-files, and it will call
-.B pltotf
-to convert the
-.C PL
-file into a
-.C TFM
-file.
-Finally it will copy the
-.C TFM
-file so that each
-.C PK
-file has its
-.C TFM
-file (which are all identical).
-.PP
-.in +5m
-If
-.B ofm_file
-is set to \(oqyes\(cq in the configuration file,
-.C OFM
-and
-.C OVF
-files will be created too.
-.
-.PP
-.in +5m
-.B -q
-makes
-.B hbf2gf
-quiet.
-.PP
-.in +2m
-.na
-.nh
-.B hbf2gf
-'in +\n(.ku
-.RB [ -q ]
-.RB [ -p ]
-.RB [ -g ]
-.RB [ -n ]
-.I \%subfont-name \%x-resolution
-.RI [ \%y-scale \ | \ \%y-resolution ]
-.ad
-.hy
-.PP
-.in +5m
-This mode is intended for use with
-.B \%mktexpk
-and its derivates.
-Only one
-.C GF
-file together with a
-.C PL
-file for the given subfont will be computed, taking the horizontal
-resolution and a vertical scaling factor (if the value is smaller than\ 10)
-resp. the vertical resolution (otherwise) from the command line, ignoring
-the
-.B nmb_fonts
-parameter of the configuration file.
-The last two characters (which are interpreted as the subfont number) are
-stripped to get the name for the configuration file (which must end with
-\(oq\c
-.C \&.cfg \(cq).
-No job file will be created.
-If option
-.B -p
-is set, no
-.C PL
-file is created.
-If
-.B -g
-is set, no
-.C GF
-file is created.
-The extension can be controlled with
-.BR -n ;
-if set, the extension is \(oq\c
-.C \&.gf \(cq,
-otherwise \(oq\c
-.C \&. <\c
-.IR resolution >\c
-.C gf \(cq.
-.B -q
-makes
-.B hbf2gf
-quiet.
-.
-.PP
-.in +2m
-.na
-.nh
-.B hbf2gf
-'in +\n(.ku
-.B -t
-.RB [ -q ]
-.I \%subfont-name
-.ad
-.hy
-.PP
-.in +5m
-This mode is intended for use with scripts like
-.BR \%mktexpk ;
-it tests whether the specified subfont name leads to an
-.B hbf2gf
-configuration file.
-It returns 0 on success and prints out the name of that configuration file
-(provided the
-.B -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.
-.PP
-See the next section for more details about configuration files.
-.PP
-Specifying the option
-.B --version
-returns the current version of
-.B hbf2gf
-and the used file search library (e.g.\ \c
-.BR kpathsea ).
-Usage information is shown with the
-.B --help
-parameter.
-.
-.
-.SH "CONFIGURATION FILE"
-Here a sample configuration file (\c
-.C gsfs14.cfg )
-for a 56\(mu56 Chinese font in GB encoding; note that all information
-about the font is in the
-.C jfs56.hbf
-file.
-See the
-.B "FILE SEARCHING"
-section how HBF fonts and
-.B hbf2gf
-configuration files are found.
-See the
-.B AVAILABILITY
-section where to get CJK fonts together with its
-.C HBF
-files:
-.PP
-.if t \fC
-.nf
- hbf_header jfs56.hbf
- mag_x 1
- threshold 128
- comment jianti fansongti 56x56 pixel font
-
- design_size 14.4
-
- y_offset -13
-
- nmb_files -1
-
- output_name gsfs14
-
- checksum 123456789
-
- dpi_x 300
-
- pk_files no
- tfm_files yes
-
- coding codingscheme GuoBiao encoded TeX text
-
- pk_directory $HBF_TARGET/pk/modeless/gb2312/gsfs14/
- tfm_directory $HBF_TARGET/tfm/gb2312/gsfs14/
-.fi
-.if t \fP
-.PP
-A configuration file is a plain text file consisting of keywords and its
-arguments.
-A keyword must start a line, otherwise the whole line will be ignored.
-If the word starting a line is not a keyword, the line will be ignored too.
-Empty lines will also be skipped.
-The search for keywords is case insensitive; in contrast, the arguments will
-be taken exactly as given (except \(oqyes\(cq and \(oqno\(cq which can be written with
-uppercase or lowercase letters).
-Each keyword has one argument which must be separated by whitespace (blanks
-or tabs) from the keyword and must be on the same line.
-Each line must not be longer than 256 characters.
-.PP
-You can use environment variables in the configuration file.
-The escape character starting an environment variable in the configuration
-file is always \(oq\c
-.C $ \(cq,
-even for operating systems like DOS which has other conventions.
-.B hbf2gf
-recognizes only environment variable names which start with a letter or an
-underscore, followed by alphanumeric characters or underscores.
-You can surround the variable with braces to indicate where the variable
-name ends, for example
-.C ${FOO} .
-To get a dollar sign you must write \(oq\c
-.C $$ \(cq.
-The expansion of environment variables in hbf2gf itself (without the help of
-either kpathsea, emtexdir, or MiKTeX searching routines) is very limited;
-this feature has been carried over from previous versions.
-It can't expand variables set in texmf.cnf; it also can't handle more than
-one directory as the variable's value.
-.B Don't use it except for the \(oqpk_directory\(cq and \(oqtfm_directory\(cq
-.B parameters!
-.PP
-This is the list of all necessary keywords:
-.TP
-.B hbf_header
-The HBF header file name of the input font(s).
-.B hbf2gf
-uses the given searching mechanism (kpathsea, emtexdir, or MiKTeX) to locate
-this file.
-.TP
-.B output_name
-The name stem of the output files.
-A running two digit decimal number starting with \(oq\c
-.C 01 \(cq
-will be appended.
-For Unicode fonts see the keyword
-.B unicode
-below.
-This value is in almost all cases identical to the name of the configuration
-file.
-.PP
-And now all optional keywords:
-.TP
-.B x_offset
-Increases the character width.
-Will be applied on both sides; default for non-rotated glyphs is the value
-given in the HBF header
-.RB ( HBF_BITMAP_BOUNDING_BOX )
-scaled to
-.B design_size
-(in pixels).
-.TP
-.B y_offset
-Shifts all characters up or down; default for non-rotated glyphs is the value
-given in the HBF header
-.RB ( HBF_BITMAP_BOUNDING_BOX )
-scaled to
-.B design_size
-(in pixels).
-.TP
-.B design_size
-The design size (in points) of the font.
-.B x_offset
-and
-.B y_offset
-refer to this size.
-Default is\ 10.0.
-.TP
-.B slant
-The slant of the font (given as \*(DEx\ /\ \*(DEy).
-Only values in the range 0\ \(<=\ \fBslant\fP\ \(<=\ 1 are allowed.
-Default is\ 0.0.
-.TP
-.B rotation
-If set to \(oqyes\(cq, all glyphs will be rotated 90\ degrees counter-clockwise.
-The default offsets as given in the HBF header will be ignored (and set
-to\ 0).
-Default is \(oqno\(cq.
-.TP
-.B mag_x
-.TQ
-.B mag_y
-Scaling values of the characters to reach design size.
-If only one magnification is given, x and y values are assumed to be equal.
-Default is \fBmag_x\fP\ =\ \fBmag_y\fP\ =\ 1.0.
-.PP
-.TP
-.B threshold
-A value between 1 and\ 254 defining a threshold for converting the internal
-graymap into the output bitmap; lower values cut more pixels.
-Default value is\ 128.
-.PP
-.TP
-.B comment
-A comment describing the font; default is none.
-.PP
-.TP
-.B nmb_fonts
-The number of subfonts to create.
-Default value is -1 for creating all fonts.
-.TP
-.B unicode
-If \(oqyes\(cq, a two digit hexadecimal number will be used as a running number,
-starting with the value of the first byte of the first code range.
-Default is \(oqno\(cq.
-.TP
-.B min_char
-The minimum value of the encoding.
-You should set this value to get correct subfile offsets if it is not
-identical to the lowest character code in the HBF file.
-.PP
-.TP
-.B dpi_x
-.TQ
-.B dpi_y
-The horizontal and vertical resolution (in dpi) of the printer.
-If only one resolution is given, x and y values are assumed to be equal.
-Default is\ 300.
-.TP
-.B checksum
-A checksum to identify the
-.C GF
-files with the appropriate
-.C TFM
-files.
-The default value of this unsigned 32bit integer is\ 0.
-.TP
-.B coding
-A comment describing the coding scheme; default is none.
-.PP
-.TP
-.B pk_directory
-The destination directory of the
-.C PK
-files; default: none.
-Attention!
-The batch file will not check whether this directory exists.
-.TP
-.B tfm_directory
-The destination directory of the
-.C TFM
-files; default: none.
-Attention!
-The batch file will not check whether this directory exists.
-.TP
-.B pk_files
-Whether to create
-.C PK
-files or not; default is \(oqyes\(cq.
-.TP
-.B tfm_files
-Whether to create
-.C TFM
-files or not; default is \(oqyes\(cq.
-.TP
-.B ofm_file
-Whether to create an
-.C OPL
-file or not; default is \(oqno\(cq.
-The batch file will then use
-.B ovp2ovf
-of the Omega distribution to convert it into an
-.C OFM
-and an
-.C OVF
-file.
-The
-.C OPL
-file simply maps all subfonts back to a single Omega font.
-.TP
-.B long_extension
-If \(oqyes\(cq,
-.C PK
-files will include the resolution in the extension (e.g.
-.C gsso1201.300pk ).
-This affects the batch file only (default is \(oqyes\(cq).
-.TP
-.B rm_command
-The shell command to remove files; default: \(oqrm\(cq.
-.TP
-.B cp_command
-The shell command to copy files; default: \(oqcp\(cq.
-.TP
-.B job_extension
-The extension of the batch file which calls
-.B gftopk
-and
-.B pltotf
-to convert the
-.C GF
-and the
-.C PL
-files into
-.C PK
-and
-.C TFM
-files respectively; default is none.
-.
-.
-.SH "FILE SEARCHING"
-.B hbf2gf
-uses either the
-.BR kpathsea ,
-.BR emtexdir ,
-or
-.B MiKTeX
-library for searching files
-.RB ( emtexdir
-will work only on operating systems which have an MS-DOSish background,
-i.e., MS-DOS, OS/2, Windows;
-.B MiKTeX
-is for Win32 systems).
-.
-.SS kpathsea
-Please note that older versions of
-.B kpathsea
-(<3.2) have no special means to seach for program related files.
-Additionally, versions older than 3.3 have no default path for miscellaneous
-fonts, thus we use the paths for PostScript related stuff if necessary for
-fonts resp. configuration files.
-The actual version of kpathsea is displayed on screen if you call
-.B hbf2gf
-.BR --version .
-.PP
-Here is a table of the file type and the corresponding
-.B kpathsea
-variables.
-.PP
-Version\ 3.3 and newer (this won't change again in the future!):
-.PP
-.in +4m
-.ta 2i
-.br
-.C "\&.hbf MISCFONTS"
-.br
-.C "\&.cfg HBF2GFINPUTS"
-.PP
-Version\ 3.2:
-.PP
-.in +4m
-.ta 2i
-.br
-.C "\&.hbf T1FONTS"
-.br
-.C "\&.cfg HBF2GFINPUTS"
-.PP
-And here the same for pre-3.2-versions of
-.B kpathsea:
-.PP
-.in +4m
-.ta 2i
-.br
-.C "\&.hbf T1FONTS"
-.br
-.C "\&.cfg TEXCONFIG"
-.PP
-Finally, the same for versions\ \(<=2.6:
-.PP
-.in +4m
-.ta 2i
-.br
-.C "\&.hbf DVIPSHEADERS"
-.br
-.C "\&.cfg TEXCONFIG"
-.PP
-Please consult the info files of
-.B kpathsea
-for details on these variables.
-The decision which naming scheme to use for variables will be done during
-compilation.
-.PP
-You should set the
-.C TEXMFCNF
-variable to the directory where your
-.C texmf.cnf
-configuration file resides.
-.PP
-Here is the proper command to find out to which value a
-.B kpathsea
-variable is set (we use
-.C MISCFONTS
-as an example).
-This is especially useful if a variable isn't set in
-.C texmf.cnf
-or in the environment, thus pointing to the default value which is
-hard-coded into the
-.B kpathsea
-library.
-.PP
-.in +2m
-.C "kpsewhich -progname=hbf2gf -expand-var='$MISCFONTS'"
-.PP
-We select the program name also since it is possible to specify
-variables which are searched only for a certain program -- in our
-example it would be
-.C MISCFONTS.hbf2gf .
-.PP
-A similar but not identical method is to say
-.PP
-.in +2m
-.C "kpsewhich -progname=hbf2gf -show-path='misc fonts'"
-.PP
-[A full list of format types can be obtained by saying \(oq\c
-.C "kpsewhich --help" \(cq
-on the command line prompt.]
-This is exactly the how
-.B hbf2gf
-searches for files; the disadvantage is that all variables are expanded
-which can cause very long strings.
-.
-.SS emtexdir
-.PP
-Here the list of suffixes and its related environment variables to be set in
-.C autoexec.bat
-(resp. in
-.C config.sys
-for OS/2):
-.PP
-.in +4m
-.ta 2i
-.br
-.C "\&.hbf HBFONTS"
-.br
-.C "\&.cfg HBFCFG"
-.PP
-If one of the variables isn't set, a warning message is emitted.
-The current directory will always be searched.
-As usual, one exclamation mark appended to a directory path causes
-subdirectories one level deep to be searched, two exclamation marks causes
-all subdirectories to be searched.
-Example:
-.PP
-.in +2m
-.C HBFONTS=c:\\\\fonts\\\\hbf!!;d:\\\\myfonts\\\\hbf!
-.PP
-Constructions like \(oq\c
-.C c:\\\\fonts!!\\\\hbf \(cq
-aren't possible.
-.
-.SS MikTeX
-.PP
-Please consult the documentation files of
-.B MiKTeX
-for more details.
-.
-.
-.SH LIMITATIONS
-The x and y output size must not exceed
-.BR MAX_CHAR_SIZE ,
-which is defined at compile time; its default value is 1023\ (pixel).
-.
-.
-.SH "SEE ALSO"
-.BR ttf2pk (1)
-.PP
-.C hbf2gf.w :
-'in +\n(.ku
-this is the source code written in
-.B CWEB
-which can be converted into a pretty-printed \*(TX
-document using
-.BR cweave .
-The CJK package also contains a preformatted
-.C hbf2gf.dvi
-file.
-.PP
-the
-.B CJK
-documentation files (\c
-.C hbf2gf.txt ).
-.PP
-the
-.B Hanzi Bitmap File
-.RB ( HBF )
-standard version\ 1.3; available at
-.C ftp.ifcss.org
-.PP
-the Omega documentation available at
-.C ftp.ens.fr
-and the CTAN hosts and mirrors.
-.
-.
-.SH FILES
-.TP
-.C *.cfg
-The
-.B hbf2gf
-configuration scripts
-.TP
-.C *.hbf
-HBF header files which describe fixed-width bitmap fonts.
-Note that the bitmap font name(s) themselves as specified in the header files
-are irrelevant for
-.BR hbf2gf .
-.
-.
-.SH AVAILABILITY
-.B hbf2gf
-is part of the CJK macro package for \*(LE
-available at the CTAN hosts and its mirrors.
-.PP
-CJK fonts together with HBF header files can be found at
-.C ftp.ifcss.org
-and its mirrors.
-.
-.
-.SH AUTHORS
-Werner Lemberg
-.C <wl@gnu.org>
-.br
-Ross Paterson (the HBF API)
-.C <ross@soi.city.ac.uk>
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.c b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.c
deleted file mode 100644
index 5ff4bf891a8..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.c
+++ /dev/null
@@ -1,2242 +0,0 @@
-#define banner \
-"hbf2gf (CJK ver. 4.7.0)" \
- \
-
-#define TRUE 1
-#define FALSE 0 \
-
-#define STRING_LENGTH 255 \
-
-#define FILE_NAME_LENGTH 1024 \
- \
-
-#define HBF2GF_VERSION \
-"\n" \
-"Copyright (C) 1996-1999 Werner Lemberg.\n" \
-"There is NO warranty. You may redistribute this software\n" \
-"under the terms of the GNU General Public License\n" \
-"and the HBF library copyright.\n" \
-"\n" \
-"For more information about these matters, see the files\n" \
-"named COPYING and hbf.c.\n" \
-"\n" \
-
-#define USAGE \
-"\n" \
-"Usage: hbf2gf [-q] configuration_file[.cfg]\n" \
-" hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n" \
-" hbf2gf -t [-q] font_name\n" \
-"\n" \
-" Convert a font in HBF format to TeX's GF resp. PK format.\n" \
-"\n" \
-" -q be silent\n" \
-" -p don't produce a PL file\n" \
-" -g don't produce a GF file\n" \
-" -n use no resolution in extension (only `.gf')\n" \
-" -t test for font_name (returns 0 on success)\n" \
-" --help print this message and exit\n" \
-" --version print version number and exit\n" \
-"\n" \
-
-#define GF_ID 131
-#define PRE 247 \
-
-#define header " hbf2gf output " \
-
-#define BOC 67
-#define BOC1 68
-#define EOC 69 \
-
-#define _2_16 65536.0
-#define _2_20 1048576.0 \
-
-#define XXX1 239
-#define XXX2 240
-#define XXX3 241
-#define XXX4 242 \
-
-#define YYY 243 \
-
-#define POST 248 \
-
-#define CHAR_LOC 245
-#define CHAR_LOC0 246 \
-
-#define POSTPOST 249
-#define POSTPOST_ID 223 \
-
-#define BLACK 1
-#define WHITE 0 \
-
-#define PIXEL_MAXVAL 255
-#define SCALE 4096
-#define HALFSCALE 2048 \
-
-#define MAX_CHAR_SIZE 1023 \
-
-#define PAINT_(x) (x)
-#define PAINT1 64
-#define PAINT2 65
-#define PAINT3 66 \
-
-#define SKIP0 70
-#define SKIP1 71
-#define SKIP2 72
-#define SKIP3 73 \
-
-#define NEW_ROW_(x) ((x) +74) \
-
-#define NOOP 244 \
-
-#define EXTENSION_LENGTH 8 \
-
-#define GFTOPK_NAME "gftopk"
-#define PLTOTF_NAME "pltotf"
-#define OVP2OVF_NAME "ovp2ovf" \
-
-#define PRINTER_MIN_RES_X 50
-#define PRINTER_MIN_RES_Y 50 \
-
-#define VALID_SUBCODE 1 \
-
-/*4:*/
-#line 191 "hbf2gf.w"
-
-/*10:*/
-#line 408 "hbf2gf.w"
-
-#ifdef HAVE_CONFIG_H
-#include "c-auto.h"
-#endif
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#ifdef TM_IN_SYS_TIME
-#include <sys/time.h>
-#endif
-#include "hbf.h"
-
-
-
-/*:10*//*69:*/
-#line 2469 "hbf2gf.w"
-
-#if defined(HAVE_LIBKPATHSEA)
-#include "kpathsea/kpathsea.h"
-
-#elif defined(HAVE_EMTEXDIR)
-#include "emtexdir.h"
-
-#elif defined(HAVE_MIKTEX)
-#include "miktex.h"
-#endif
-
-/*:69*/
-#line 192 "hbf2gf.w"
-
-/*11:*/
-#line 429 "hbf2gf.w"
-
-void write_file(void);
-
-
-/*:11*//*13:*/
-#line 491 "hbf2gf.w"
-
-void write_pre(void);
-
-
-/*:13*//*16:*/
-#line 579 "hbf2gf.w"
-
-void write_data(void);
-
-
-/*:16*//*20:*/
-#line 690 "hbf2gf.w"
-
-void write_post(void);
-
-
-/*:20*//*25:*/
-#line 834 "hbf2gf.w"
-
-void fputl(long,FILE*);
-
-
-/*:25*//*29:*/
-#line 994 "hbf2gf.w"
-
-void make_pixel_array(void);
-
-
-/*:29*//*36:*/
-#line 1222 "hbf2gf.w"
-
-#ifdef __GNUC__
-__inline__
-#endif
-void read_row(unsigned char*);
-
-
-/*:36*//*39:*/
-#line 1272 "hbf2gf.w"
-
-#ifdef __GNUC__
-__inline__
-#endif
-void write_row(unsigned char*);
-
-
-/*:39*//*41:*/
-#line 1325 "hbf2gf.w"
-
-void write_coding(void);
-
-
-/*:41*//*45:*/
-#line 1486 "hbf2gf.w"
-
-void write_pl(void);
-
-
-/*:45*//*47:*/
-#line 1583 "hbf2gf.w"
-
-void write_ovp(void);
-
-
-/*:47*//*50:*/
-#line 1728 "hbf2gf.w"
-
-void write_job(void);
-
-
-/*:50*//*54:*/
-#line 1977 "hbf2gf.w"
-
-void read_config(void);
-
-
-/*:54*//*64:*/
-#line 2308 "hbf2gf.w"
-
-int fsearch(const char*);
-
-
-/*:64*//*67:*/
-#line 2447 "hbf2gf.w"
-
-void config_error(const char*);
-
-
-/*:67*//*71:*/
-#line 2490 "hbf2gf.w"
-
-const char*TeX_search_version(void);
-
-
-/*:71*//*74:*/
-#line 2525 "hbf2gf.w"
-
-#ifdef HAVE_EMTEXDIR
-extern int setup_list(struct emtex_dir*,char*,const char*,unsigned);
-int dir_setup(struct emtex_dir*,const char*,const char*,unsigned);
-char*file_find(char*,struct emtex_dir*);
-#endif
-
-
-/*:74*//*79:*/
-#line 2613 "hbf2gf.w"
-
-char*TeX_search_cfg_file(char*);
-char*TeX_search_hbf_file(char*);
-
-
-/*:79*/
-#line 193 "hbf2gf.w"
-
-/*2:*/
-#line 127 "hbf2gf.w"
-
-int nmb_files= -1;
-int unicode= FALSE;
-
-int testing= FALSE;
-
-int mf_like= FALSE;
-int file_number= 0;
-
-double x_resolution= 0.0;
-double y_scale= 1.0;
-
-int pk_files= TRUE;
-int tfm_files= TRUE;
-int long_extension= TRUE;
-int quiet= FALSE;
-
-char config_file[FILE_NAME_LENGTH+4+1];
-
-char output_name[STRING_LENGTH+1];
-
-FILE*config,*out;
-HBF*hbf;
-
-#ifdef msdos
-#define WRITE_BIN "wb"
-#define WRITE_TXT "wt"
-#define READ_BIN "rb"
-#define READ_TXT "rt"
-#else
-#define WRITE_BIN "w"
-#define WRITE_TXT "w"
-#define READ_BIN "r"
-#define READ_TXT "r"
-#endif
-
-int end_of_file= FALSE;
-
-
-/*:2*//*15:*/
-#line 538 "hbf2gf.w"
-
-long char_adr[256];
-long*char_adr_p;
-
-int pk_offset_x;
-
-
-double tfm_offset_x;
-int pk_offset_y;
-
-double tfm_offset_y;
-
-int input_size_x;
-int input_size_y;
-const char*font_encoding;
-int pk_width;
-int pk_output_size_x;
-
-double tfm_output_size_x;
-int pk_output_size_y;
-double tfm_output_size_y;
-
-double design_size= 10.0;
-double target_size_x;
-double target_size_y;
-double magstep_x;
-double magstep_y;
-double slant;
-int rotation;
-
-double mag_x;
-double mag_y;
-
-int empty_char;
-int last_char;
-
-int dot_count;
-
-
-
-/*:15*//*19:*/
-#line 667 "hbf2gf.w"
-
-char coding[STRING_LENGTH+1];
-char comment[STRING_LENGTH+1];
-
-unsigned long checksum;
-
-long pk_total_min_x;
-long pk_total_max_x;
-long pk_total_min_y;
-long pk_total_max_y;
-
-int dpi_x;
-int dpi_y;
-double ppp_x;
-double ppp_y;
-
-
-/*:19*//*27:*/
-#line 871 "hbf2gf.w"
-
-HBF_CHAR code;
-const unsigned char*bitmap;
-
-const unsigned char*bP;
-
-unsigned char out_char[MAX_CHAR_SIZE*MAX_CHAR_SIZE+1];
-
-unsigned char*out_char_p;
-
-unsigned char pixelrow[MAX_CHAR_SIZE];
-unsigned char temp_pixelrow[MAX_CHAR_SIZE];
-unsigned char new_pixelrow[MAX_CHAR_SIZE+1];
-
-int curr_row;
-
-long grayrow[MAX_CHAR_SIZE];
-
-long s_mag_x,s_mag_y,s_slant;
-
-
-/*:27*//*38:*/
-#line 1267 "hbf2gf.w"
-
-int threshold= 128;
-
-
-/*:38*//*49:*/
-#line 1717 "hbf2gf.w"
-
-char job_extension[EXTENSION_LENGTH+1];
-char rm_command[STRING_LENGTH+1];
-char cp_command[STRING_LENGTH+1];
-char pk_directory[STRING_LENGTH+1];
-char tfm_directory[STRING_LENGTH+1];
-
-int ofm_file= FALSE;
-
-
-/*:49*//*53:*/
-#line 1972 "hbf2gf.w"
-
-char Buffer[STRING_LENGTH+1];
-
-
-/*:53*//*58:*/
-#line 2090 "hbf2gf.w"
-
-int offset_x;
-int offset_y;
-
-HBF_CHAR user_min_char;
-int have_min_char= FALSE;
-
-/*:58*//*60:*/
-#line 2247 "hbf2gf.w"
-
-HBF_CHAR min_char,max_char;
-
-
-/*:60*//*62:*/
-#line 2274 "hbf2gf.w"
-
-char b2_codes[256];
-unsigned char min_2_byte,max_2_byte;
-int nmb_2_bytes= 0;
-
-
-/*:62*//*70:*/
-#line 2481 "hbf2gf.w"
-
-#if defined(HAVE_EMTEXDIR)
-char emtex_version_string[]= "emTeXdir";
-#elif !defined(HAVE_MIKTEX)
-char no_version_string[]= "no search library";
-#endif
-
-
-/*:70*//*73:*/
-#line 2518 "hbf2gf.w"
-
-#ifdef HAVE_EMTEXDIR
-struct emtex_dir cfg_path,hbf_path;
-#endif
-
-
-/*:73*//*76:*/
-#line 2564 "hbf2gf.w"
-
-char name_buffer[FILE_NAME_LENGTH+1];
-
-
-/*:76*/
-#line 194 "hbf2gf.w"
-
-
-
-int main(int argc,char*argv[])
-{char*p;
-
-/*78:*/
-#line 2586 "hbf2gf.w"
-
-#if defined(HAVE_LIBKPATHSEA)
-kpse_set_program_name(argv[0],"hbf2gf");
-kpse_init_prog("HBF2GF",300,"cx","cmr10");
-
-#elif defined(HAVE_EMTEXDIR)
-if(!dir_setup(&cfg_path,"HBFCFG",NULL,EDS_BANG))
-{fprintf(stderr,
-"Couldn't setup search path for configuration files\n");
-exit(1);
-}
-if(!dir_setup(&hbf_path,"HBFONTS",NULL,EDS_BANG))
-{fprintf(stderr,
-"Couldn't setup search path for HBF header files\n");
-exit(1);
-}
-#endif
-
-
-/*:78*/
-#line 200 "hbf2gf.w"
-
-
-/*7:*/
-#line 307 "hbf2gf.w"
-
-if(argc==2)
-{if(strcmp(argv[1],"--help")==0)
-/*6:*/
-#line 288 "hbf2gf.w"
-
-{printf(USAGE);
-exit(0);
-}
-
-
-/*:6*/
-#line 310 "hbf2gf.w"
-
-else if(strcmp(argv[1],"--version")==0)
-/*5:*/
-#line 261 "hbf2gf.w"
-
-{printf("\n");
-printf(banner);
-printf(" (%s)\n",TeX_search_version());
-printf(HBF2GF_VERSION);
-exit(0);
-}
-
-
-/*:5*/
-#line 312 "hbf2gf.w"
-
-}
-
-while(argc> 1)
-{p= argv[1];
-if(p[0]!='-')
-break;
-if(p[1]=='p')
-tfm_files= FALSE;
-else if(p[1]=='g')
-pk_files= FALSE;
-else if(p[1]=='n')
-long_extension= FALSE;
-else if(p[1]=='q')
-quiet= TRUE;
-else if(p[1]=='t')
-testing= TRUE;
-
-argv++;
-argc--;
-}
-
-if(testing)
-{if(argc!=2)
-{fprintf(stderr,"Need exactly one parameter for `-t' option.\n");
-fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
-exit(1);
-}
-}
-else if(argc<2||argc> 4)
-{fprintf(stderr,"Invalid number of parameters.\n");
-fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
-exit(1);
-}
-
-
-/*:7*/
-#line 202 "hbf2gf.w"
-
-
-if(!quiet)
-printf("\n%s\n\n",banner);
-
-strncpy(config_file,argv[1],FILE_NAME_LENGTH);
-config_file[FILE_NAME_LENGTH]= '\0';
-
-if(argc> 2||testing)
-{int l= strlen(config_file);
-
-if(l> 2)
-config_file[l-2]= '\0';
-
-else
-{if(!quiet)
-printf("`%s' can't be a subfont created by hbf2gf\n",
-config_file);
-exit(2);
-}
-
-mf_like= TRUE;
-}
-
-read_config();
-
-if(mf_like)
-/*8:*/
-#line 352 "hbf2gf.w"
-
-{if(unicode)
-file_number= (int)strtol(&argv[1][strlen(argv[1])-2],
-(char**)NULL,16);
-else
-file_number= atoi(&argv[1][strlen(argv[1])-2]);
-
-x_resolution= atof(argv[2]);
-if(x_resolution<PRINTER_MIN_RES_X)
-{fprintf(stderr,"Invalid horizontal resolution\n");
-exit(1);
-}
-
-if(argc> 3)
-{y_scale= atof(argv[3]);
-if(y_scale<0.01)
-{fprintf(stderr,
-"Invalid vertical scaling factor or resolution\n");
-exit(1);
-}
-if(y_scale> 10.0)
-y_scale= (double)x_resolution/y_scale;
-}
-}
-
-
-/*:8*/
-#line 229 "hbf2gf.w"
-
-
-/*28:*/
-#line 903 "hbf2gf.w"
-
-{int col,offset;
-
-if(rotation)
-{int tmp;
-
-
-tmp= input_size_x;
-input_size_x= input_size_y;
-input_size_y= tmp;
-}
-
-if(mf_like)
-{target_size_x= design_size*(x_resolution/dpi_x);
-target_size_y= design_size*(x_resolution*y_scale/dpi_y);
-}
-else
-target_size_x= target_size_y= design_size;
-magstep_x= target_size_x/design_size;
-magstep_y= target_size_y/design_size;
-
-pk_offset_x= offset_x*magstep_x+0.5;
-pk_offset_y= offset_y*magstep_y+0.5;
-tfm_offset_x= offset_x/(dpi_x/72.27)/design_size;
-tfm_offset_y= offset_y/(dpi_y/72.27)/design_size;
-
-pk_width= input_size_x*mag_x*magstep_x+0.5;
-pk_output_size_x= input_size_x*mag_x*magstep_x+
-input_size_y*mag_y*magstep_y*slant+0.5;
-pk_output_size_y= input_size_y*mag_y*magstep_y+0.5;
-tfm_output_size_x= input_size_x*mag_x/
-(dpi_x/72.27)/design_size;
-tfm_output_size_y= input_size_y*mag_y/
-(dpi_y/72.27)/design_size;
-if(pk_output_size_x> MAX_CHAR_SIZE)
-{fprintf(stderr,"Output character box width too big\n");
-exit(1);
-}
-if(pk_output_size_y> MAX_CHAR_SIZE)
-{fprintf(stderr,"Output character box height too big\n");
-exit(1);
-}
-
-for(col= 0;col<input_size_x;++col)
-grayrow[col]= HALFSCALE;
-
-if(!mf_like)
-code= (min_char&0xFF00)+min_2_byte;
-else
-{if((file_number<(unicode?0:1))||(file_number>=0x100))
-{fprintf(stderr,"Invalid subfile number\n");
-exit(1);
-}
-
-if(unicode)
-{offset= 0;
-code= file_number*0x100;
-}
-else
-{offset= (file_number-1)*256%nmb_2_bytes;
-code= (min_char&0xFF00)+min_2_byte+
-(file_number-1)*256/nmb_2_bytes*0x100;
-}
-
-while(offset--)
-while(!b2_codes[code++&0xFF])
-
-;
-
-if(code> max_char)
-{fprintf(stderr,"Invalid subfile number\n");
-exit(1);
-}
-}
-
-s_mag_x= mag_x*magstep_x*SCALE;
-s_mag_y= mag_y*magstep_y*SCALE;
-s_slant= slant*SCALE;
-}
-
-
-/*:28*/
-#line 231 "hbf2gf.w"
-
-
-/*9:*/
-#line 387 "hbf2gf.w"
-
-{int j,max_numb;
-
-if(!mf_like)
-{file_number= (unicode==TRUE?(min_char>>8):1);
-if(nmb_files==-1)
-max_numb= (unicode==TRUE?0x100:100);
-else
-max_numb= nmb_files;
-}
-else
-max_numb= 1;
-
-for(j= 0;(j<max_numb)&&!end_of_file;file_number++,j++)
-write_file();
-
-nmb_files= j;
-}
-
-
-/*:9*/
-#line 233 "hbf2gf.w"
-
-
-if(tfm_files)
-write_pl();
-if(ofm_file)
-write_ovp();
-if(!mf_like)
-write_job();
-
-hbfClose(hbf);
-
-exit(0);
-return 0;
-}
-
-
-/*:4*//*12:*/
-#line 437 "hbf2gf.w"
-
-void write_file(void)
-{char output_file[FILE_NAME_LENGTH+1];
-
-
-if(pk_files)
-{if(mf_like)
-{if(unicode)
-sprintf(output_file,"%s%02x.%.0igf",
-output_name,file_number,
-long_extension?(int)(x_resolution+0.5):0);
-else
-sprintf(output_file,"%s%02i.%.0igf",
-output_name,file_number,
-long_extension?(int)(x_resolution+0.5):0);
-}
-else
-{if(unicode)
-sprintf(output_file,"%s%02x.gf",output_name,file_number);
-else
-sprintf(output_file,"%s%02i.gf",output_name,file_number);
-}
-if(!(out= fopen(output_file,WRITE_BIN)))
-{fprintf(stderr,"Couldn't open `%s'\n",output_file);
-exit(1);
-}
-if(!quiet)
-printf("Writing `%s' ",output_file);
-
-write_pre();
-write_data();
-write_post();
-fclose(out);
-
-if(!quiet)
-printf("\n");
-}
-else
-write_data();
-}
-
-
-/*:12*//*14:*/
-#line 498 "hbf2gf.w"
-
-void write_pre(void)
-{char out_s[40],s[20];
-time_t secs_now;
-struct tm*time_now;
-
-
-strcpy(out_s,header);
-
-secs_now= time(NULL);
-time_now= localtime(&secs_now);
-strftime(s,20,"%Y.%m.%d:%H.%M",time_now);
-strcat(out_s,s);
-
-fputc(PRE,out);
-fputc(GF_ID,out);
-fputc(strlen(out_s),out);
-fputs(out_s,out);
-}
-
-
-/*:14*//*17:*/
-#line 584 "hbf2gf.w"
-
-void write_data(void)
-{dot_count= 0;
-char_adr_p= char_adr;
-
-for(last_char= 0;(last_char<256)&&!end_of_file;last_char++)
-/*18:*/
-#line 609 "hbf2gf.w"
-
-{if(dot_count++%10==0)
-if(pk_files&&!quiet)
-{printf(".");
-fflush(stdout);
-}
-
-empty_char= FALSE;
-make_pixel_array();
-if(end_of_file)
-return;
-
-if(pk_files)
-{*char_adr_p= ftell(out);
-char_adr_p++;
-
-if(empty_char)
-{fputc(BOC1,out);
-fputc((unsigned char)last_char,out);
-fputc(0,out);
-fputc(0,out);
-fputc(0,out);
-fputc(0,out);
-fputc(EOC,out);
-}
-else
-{fputc(BOC,out);
-fputl(last_char,out);
-fputl(-1L,out);
-fputl(pk_offset_x,out);
-fputl(pk_output_size_x+pk_offset_x,out);
-fputl(pk_offset_y,out);
-fputl(pk_output_size_y+pk_offset_y,out);
-
-write_coding();
-
-fputc(EOC,out);
-}
-}
-}
-
-
-/*:18*/
-#line 590 "hbf2gf.w"
-
-}
-
-
-/*:17*//*21:*/
-#line 695 "hbf2gf.w"
-
-void write_post(void)
-{long special_adr;
-long post_adr;
-
-long designsize= design_size*_2_20;
-
-int pk_dx;
-long tfm_width;
-
-int i;
-long temp;
-
-
-ppp_x= dpi_x/72.27*magstep_x;
-ppp_y= dpi_y/72.27*magstep_y;
-
-pk_total_min_x= pk_offset_x;
-pk_total_max_x= pk_output_size_x+2*pk_offset_x;
-pk_total_min_y= pk_offset_y;
-pk_total_max_y= pk_output_size_y+pk_offset_y;
-
-pk_dx= pk_width+2*pk_offset_x;
-tfm_width= (tfm_output_size_x+2*tfm_offset_x)*_2_20;
-
-
-/*22:*/
-#line 741 "hbf2gf.w"
-
-special_adr= ftell(out);
-
-if(*coding)
-{fputc(XXX1,out);
-fputc(strlen(coding),out);
-fputs(coding,out);
-}
-
-if(*comment)
-{fputc(XXX1,out);
-fputc(strlen(comment),out);
-fputs(comment,out);
-}
-
-
-/*:22*/
-#line 721 "hbf2gf.w"
-
-/*23:*/
-#line 770 "hbf2gf.w"
-
-post_adr= ftell(out);
-fputc(POST,out);
-fputl(special_adr,out);
-
-fputl(designsize,out);
-fputl(checksum,out);
-fputl(ppp_x*_2_16,out);
-fputl(ppp_y*_2_16,out);
-fputl(pk_total_min_x,out);
-fputl(pk_total_max_x,out);
-fputl(pk_total_min_y,out);
-fputl(pk_total_max_y,out);
-
-char_adr_p= char_adr;
-
-if(pk_dx<256)
-{for(i= 0;i<last_char;i++)
-{fputc(CHAR_LOC0,out);
-fputc(i,out);
-fputc(pk_dx,out);
-fputl(tfm_width,out);
-fputl(*char_adr_p++,out);
-}
-}
-else
-{for(i= 0;i<last_char;i++)
-{fputc(CHAR_LOC,out);
-fputc(i,out);
-fputl(pk_dx*_2_16,out);
-fputl(0,out);
-fputl(tfm_width,out);
-fputl(*char_adr_p++,out);
-}
-}
-
-
-/*:23*/
-#line 722 "hbf2gf.w"
-
-/*24:*/
-#line 821 "hbf2gf.w"
-
-fputc(POSTPOST,out);
-fputl(post_adr,out);
-fputc(GF_ID,out);
-temp= ftell(out);
-i= (int)(temp%4)+4;
-while(i--)
-fputc(POSTPOST_ID,out);
-
-
-/*:24*/
-#line 723 "hbf2gf.w"
-
-}
-
-
-/*:21*//*26:*/
-#line 839 "hbf2gf.w"
-
-void fputl(long num,FILE*f)
-{fputc(num>>24,f);
-fputc(num>>16,f);
-fputc(num>>8,f);
-fputc(num,f);
-}
-
-
-/*:26*//*30:*/
-#line 999 "hbf2gf.w"
-
-void make_pixel_array(void)
-{unsigned char*prP;
-unsigned char*temp_prP;
-unsigned char*new_prP;
-long*grP;
-
-register unsigned char*xP;
-register unsigned char*nxP;
-
-register int row,col;
-int rows_read= 0;
-register int need_to_read_row= 1;
-
-long frac_row_to_fill= SCALE;
-long frac_row_left= s_mag_y;
-
-int no_code= FALSE;
-
-
-prP= pixelrow;
-temp_prP= temp_pixelrow;
-new_prP= new_pixelrow;
-grP= grayrow;
-out_char_p= out_char;
-
-again:
-if(b2_codes[code&0xFF])
-{if(pk_files)
-{bitmap= hbfGetBitmap(hbf,code);
-bP= bitmap;
-
-
-if(!bitmap)
-empty_char= TRUE;
-else
-/*31:*/
-#line 1058 "hbf2gf.w"
-
-{if(pk_output_size_y==input_size_y)
-temp_prP= prP;
-
-curr_row= input_size_y-1;
-for(row= 0;row<pk_output_size_y;++row)
-{/*32:*/
-#line 1072 "hbf2gf.w"
-
-if(pk_output_size_y==input_size_y)
-
-read_row(prP);
-else
-{while(frac_row_left<frac_row_to_fill)
-{if(need_to_read_row)
-if(rows_read<input_size_y)
-{read_row(prP);
-++rows_read;
-}
-
-for(col= 0,xP= prP;col<input_size_x;++col,++xP)
-grP[col]+= frac_row_left*(*xP);
-
-frac_row_to_fill-= frac_row_left;
-frac_row_left= s_mag_y;
-need_to_read_row= 1;
-}
-
-/*33:*/
-#line 1099 "hbf2gf.w"
-
-if(need_to_read_row)
-if(rows_read<input_size_y)
-{read_row(prP);
-++rows_read;
-need_to_read_row= 0;
-}
-
-for(col= 0,xP= prP,nxP= temp_prP;
-col<input_size_x;++col,++xP,++nxP)
-{register long g;
-
-
-g= grP[col]+frac_row_to_fill*(*xP);
-g/= SCALE;
-if(g> PIXEL_MAXVAL)
-g= PIXEL_MAXVAL;
-
-*nxP= g;
-grP[col]= HALFSCALE;
-}
-
-frac_row_left-= frac_row_to_fill;
-if(frac_row_left==0)
-{frac_row_left= s_mag_y;
-need_to_read_row= 1;
-}
-frac_row_to_fill= SCALE;
-
-
-/*:33*/
-#line 1092 "hbf2gf.w"
-
-}
-
-
-/*:32*/
-#line 1064 "hbf2gf.w"
-
-/*34:*/
-#line 1140 "hbf2gf.w"
-
-if(pk_width==input_size_x&&s_slant==0)
-
-write_row(temp_prP);
-else
-{register long g= HALFSCALE;
-register long frac_col_to_fill= SCALE;
-register long frac_col_left;
-register int need_col= 0;
-
-
-nxP= new_prP;
-
-frac_col_left= (pk_output_size_y-row)*s_slant;
-while(frac_col_left>=frac_col_to_fill)
-{*(nxP++)= 0;
-frac_col_left-= frac_col_to_fill;
-}
-
-if(frac_col_left> 0)
-frac_col_to_fill-= frac_col_left;
-
-for(col= 0,xP= temp_prP;col<input_size_x;++col,++xP)
-{frac_col_left= s_mag_x;
-while(frac_col_left>=frac_col_to_fill)
-{if(need_col)
-{++nxP;
-g= HALFSCALE;
-}
-
-g+= frac_col_to_fill*(*xP);
-g/= SCALE;
-if(g> PIXEL_MAXVAL)
-g= PIXEL_MAXVAL;
-
-*nxP= g;
-frac_col_left-= frac_col_to_fill;
-frac_col_to_fill= SCALE;
-need_col= 1;
-}
-
-if(frac_col_left> 0)
-{if(need_col)
-{++nxP;
-g= HALFSCALE;
-need_col= 0;
-}
-
-g+= frac_col_left*(*xP);
-frac_col_to_fill-= frac_col_left;
-}
-}
-
-/*35:*/
-#line 1198 "hbf2gf.w"
-
-if(frac_col_to_fill> 0)
-{--xP;
-g+= frac_col_to_fill*(*xP);
-}
-
-if(!need_col)
-{g/= SCALE;
-if(g> PIXEL_MAXVAL)
-g= PIXEL_MAXVAL;
-*nxP= g;
-}
-
-*(++nxP)= 0;
-
-write_row(new_prP);
-
-
-/*:35*/
-#line 1193 "hbf2gf.w"
-
-}
-
-
-/*:34*/
-#line 1066 "hbf2gf.w"
-
-}
-}
-
-
-/*:31*/
-#line 1035 "hbf2gf.w"
-
-}
-}
-else
-no_code= TRUE;
-
-if((code&0xFF)==max_2_byte)
-code+= 0xFF-(max_2_byte-min_2_byte);
-if(code>=max_char)
-{end_of_file= TRUE;
-return;
-}
-
-code++;
-
-if(no_code)
-{no_code= FALSE;
-goto again;
-}
-}
-
-
-/*:30*//*37:*/
-#line 1230 "hbf2gf.w"
-
-#ifdef __GNUC__
-__inline__
-#endif
-void read_row(unsigned char*pixelrow)
-{register int col,bitshift,offset;
-register unsigned char*xP;
-register unsigned char item= 0;
-
-if(rotation)
-{bitshift= 7-(curr_row%8);
-offset= (input_size_y+7)/8;
-bP= bitmap+curr_row/8;
-for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
-{*xP= ((*bP>>bitshift)&1)==1?PIXEL_MAXVAL:0;
-bP+= offset;
-}
-curr_row--;
-}
-else
-{bitshift= -1;
-for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
-{if(bitshift==-1)
-{item= *(bP++);
-bitshift= 7;
-}
-*xP= ((item>>bitshift)&1)==1?PIXEL_MAXVAL:0;
---bitshift;
-}
-}
-}
-
-
-/*:37*//*40:*/
-#line 1280 "hbf2gf.w"
-
-#ifdef __GNUC__
-__inline__
-#endif
-void write_row(unsigned char*pixelrow)
-{register int col;
-register unsigned char*xP;
-
-for(col= 0,xP= pixelrow;col<pk_output_size_x;++col,++xP)
-*(out_char_p++)= (*xP>=threshold)?1:0;
-
-}
-
-
-/*:40*//*42:*/
-#line 1333 "hbf2gf.w"
-
-void write_coding(void)
-{register int count,skip;
-register unsigned char paint;
-register int x,y;
-register unsigned char*cp;
-
-x= 0;
-y= 0;
-cp= out_char+y*pk_output_size_x+x;
-count= skip= 0;
-paint= WHITE;
-goto start;
-
-while(y<pk_output_size_y)
-{/*43:*/
-#line 1357 "hbf2gf.w"
-
-count= 0;
-x= 0;
-cp= out_char+y*pk_output_size_x+x;
-
-while(x<pk_output_size_x)
-{if(*cp==paint)
-count++;
-else
-{if(skip==0)
-{if(count<=164)
-fputc(NEW_ROW_(count),out);
-else
-{fputc(SKIP0,out);
-
-if(count<256)
-{fputc(PAINT1,out);
-fputc(count,out);
-}
-else
-{fputc(PAINT2,out);
-fputc(count>>8,out);
-fputc(count&0xFF,out);
-}
-}
-}
-else
-{if(skip==1)
-fputc(SKIP0,out);
-else
-{if(skip<256)
-{fputc(SKIP1,out);
-fputc(skip,out);
-}
-else
-{fputc(SKIP2,out);
-fputc(skip>>8,out);
-fputc(skip&0xFF,out);
-}
-}
-skip= 0;
-if(count<64)
-fputc(PAINT_(count),out);
-else if(count<256)
-{fputc(PAINT1,out);
-fputc(count,out);
-}
-else
-{fputc(PAINT2,out);
-fputc(count>>8,out);
-fputc(count&0xFF,out);
-}
-}
-count= 0;
-paint= BLACK;
-break;
-}
-x++;
-cp++;
-}
-if(x>=pk_output_size_x)
-{skip++;
-y++;
-continue;
-}
-
-
-/*:43*/
-#line 1348 "hbf2gf.w"
-
-start:
-/*44:*/
-#line 1425 "hbf2gf.w"
-
-while(x<pk_output_size_x)
-{if(*cp==paint)
-count++;
-else
-{if(count<64)
-fputc(PAINT_(count),out);
-else if(count<256)
-{fputc(PAINT1,out);
-fputc(count,out);
-}
-else
-{fputc(PAINT2,out);
-fputc(count>>8,out);
-fputc(count&0xFF,out);
-}
-count= 1;
-paint= BLACK-paint;
-}
-x++;
-cp++;
-}
-if(paint==BLACK)
-{if(count<64)
-fputc(PAINT_(count),out);
-else if(count<256)
-{fputc(PAINT1,out);
-fputc(count,out);
-}
-else
-{fputc(PAINT2,out);
-fputc(count>>8,out);
-fputc(count&0xFF,out);
-}
-paint= WHITE;
-}
-
-
-
-/*:44*/
-#line 1350 "hbf2gf.w"
-
-y++;
-}
-}
-
-
-/*:42*//*46:*/
-#line 1491 "hbf2gf.w"
-
-void write_pl(void)
-{int i,pos;
-char output_file[FILE_NAME_LENGTH+1];
-long t,sc;
-char*s;
-char tfm_header[]= "Created by hbf2gf";
-
-file_number--;
-
-if(mf_like)
-{if(unicode)
-sprintf(output_file,"%s%02x.pl",output_name,file_number);
-else
-sprintf(output_file,"%s%02i.pl",output_name,file_number);
-}
-else
-sprintf(output_file,"%s.pl",output_name);
-
-if(!(out= fopen(output_file,WRITE_TXT)))
-{fprintf(stderr,"Couldn't open `%s'\n",output_file);
-exit(1);
-}
-if(!quiet)
-printf("\nWriting `%s'\n",output_file);
-
-fprintf(out,
-"\n(FAMILY %s%d)"
-"\n(CODINGSCHEME CJK-%s)",
-output_name,file_number,font_encoding);
-
-fprintf(out,
-"\n(DESIGNSIZE R %.6f)"
-"\n(COMMENT DESIGNSIZE IS IN POINTS)"
-"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
-"\n(CHECKSUM O %lo)"
-"\n(FONTDIMEN"
-"\n (SLANT R %.6f)"
-"\n (SPACE R 0.0)"
-"\n (STRETCH R 0.0)"
-"\n (SHRINK R 0.0)"
-"\n (XHEIGHT R 1.0)"
-"\n (QUAD R 1.0)"
-"\n (EXTRASPACE R 0.0)"
-"\n )",design_size,checksum,slant);
-
-s= tfm_header;
-i= strlen(s);
-t= ((long)i)<<24;
-sc= 16;
-pos= 18;
-
-fprintf(out,"\n");
-while(i> 0)
-{t|= ((long)(*(unsigned char*)s++))<<sc;
-sc-= 8;
-if(sc<0)
-{fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
-t= 0;
-sc= 24;
-pos++;
-}
-i--;
-}
-if(t)
-fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
-fprintf(out,"\n");
-
-for(i= 0;i<256;i++)
-{fprintf(out,
-"\n(CHARACTER O %o"
-"\n (CHARWD R %.6f)"
-"\n (CHARHT R %.6f)"
-"\n (CHARDP R %.6f)"
-"\n (CHARIC R %.6f)"
-"\n )",
-i,
-tfm_output_size_x+2*tfm_offset_x,
-tfm_output_size_y+tfm_offset_y,
--tfm_offset_y,
-slant*(tfm_output_size_y+tfm_offset_y));
-}
-
-fclose(out);
-}
-
-
-
-/*:46*//*48:*/
-#line 1588 "hbf2gf.w"
-
-void write_ovp(void)
-{int c,i,nmb_subfonts,remainder,count,pos;
-char output_file[FILE_NAME_LENGTH+1];
-long t,sc;
-char*s;
-char ofm_header[]= "Created by hbf2gf";
-
-nmb_subfonts= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
-/256+1;
-remainder= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
-%256;
-
-
-for(count= 0;count<(max_char&0xFF);count++)
-if(b2_codes[count])
-remainder++;
-if(remainder>=256)
-nmb_subfonts++;
-
-sprintf(output_file,"%s.ovp",output_name);
-
-if(!(out= fopen(output_file,WRITE_TXT)))
-{fprintf(stderr,"Couldn't open `%s'\n",output_file);
-exit(1);
-}
-if(!quiet)
-printf("\nWriting `%s'\n",output_file);
-
-fprintf(out,
-"\n(VTITLE Omega virtual font created by hbf2gf)"
-"\n(DESIGNSIZE R %.6f)"
-"\n(COMMENT DESIGNSIZE IS IN POINTS)"
-"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
-"\n(CHECKSUM O %lo)"
-"\n(FONTDIMEN"
-"\n (SLANT R %.6f)"
-"\n (SPACE R 0.0)"
-"\n (STRETCH R 0.0)"
-"\n (SHRINK R 0.0)"
-"\n (XHEIGHT R 1.0)"
-"\n (QUAD R 1.0)"
-"\n (EXTRASPACE R 0.0)"
-"\n )",design_size,checksum,slant);
-
-s= ofm_header;
-i= strlen(s);
-t= ((long)i)<<24;
-sc= 16;
-pos= 18;
-
-fprintf(out,"\n");
-while(i> 0)
-{t|= ((long)(*(unsigned char*)s++))<<sc;
-sc-= 8;
-if(sc<0)
-{fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
-t= 0;
-sc= 24;
-pos++;
-}
-i--;
-}
-if(t)
-fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
-fprintf(out,"\n");
-
-for(i= 0;i<nmb_subfonts;i++)
-{fprintf(out,
-"\n(MAPFONT D %i"
-"\n (FONTNAME %s%02i)"
-"\n (FONTCHECKSUM O %lo)"
-"\n (FONTAT R 1.0)"
-"\n (FONTDSIZE R %.6f)"
-"\n )",i,output_name,i+1,checksum,design_size);
-}
-
-for(c= min_char,i= 0,count= 0;c<=max_char;c++)
-{if(b2_codes[c&0xFF]==VALID_SUBCODE)
-{fprintf(out,
-"\n(CHARACTER O %o"
-"\n (CHARWD R %.6f)"
-"\n (CHARHT R %.6f)"
-"\n (CHARDP R %.6f)"
-"\n (CHARIC R %.6f)"
-"\n (MAP"
-"\n (SELECTFONT D %i)"
-"\n (SETCHAR O %o)"
-"\n )"
-"\n )",
-c,
-tfm_output_size_x+2*tfm_offset_x,
-tfm_output_size_y+tfm_offset_y,
--tfm_offset_y,
-slant*(tfm_output_size_y+tfm_offset_y),
-i,
-count);
-
-count++;
-if(count==256)
-{count= 0;
-i++;
-}
-}
-else
-continue;
-}
-
-fclose(out);
-}
-
-
-
-/*:48*//*51:*/
-#line 1733 "hbf2gf.w"
-
-void write_job(void)
-{FILE*out;
-int i,j;
-char buffer[FILE_NAME_LENGTH+1];
-
-
-strcpy(buffer,output_name);
-strcat(buffer,job_extension);
-if(!(out= fopen(buffer,WRITE_TXT)))
-{fprintf(stderr,"Couldn't open `%s'\n",buffer);
-exit(1);
-}
-if(!quiet)
-printf("\nWriting `%s'\n",buffer);
-
-if(pk_files)
-{if(unicode)
-{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
-fprintf(out,
-"%s %s%02x.gf %s%s%02x.%.0ipk\n"
-"%s %s%02x.gf\n",
-GFTOPK_NAME,output_name,i,
-pk_directory,output_name,i,
-long_extension?(int)(dpi_x*magstep_x+0.5):0,
-rm_command,output_name,i);
-}
-else
-{for(i= 1;i<=nmb_files;i++)
-fprintf(out,
-"%s %s%02i.gf %s%s%02i.%.0ipk\n"
-"%s %s%02i.gf\n",
-GFTOPK_NAME,output_name,i,
-pk_directory,output_name,i,
-long_extension?(int)(dpi_x*magstep_x+0.5):0,
-rm_command,output_name,i);
-}
-}
-
-if(tfm_files)
-{fprintf(out,
-"\n"
-"%s %s.pl %s.tfm\n"
-"%s %s.pl\n"
-"\n",
-PLTOTF_NAME,output_name,output_name,
-rm_command,output_name);
-
-if(unicode)
-{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
-fprintf(out,
-"%s %s.tfm %s%s%02x.tfm\n",
-cp_command,output_name,
-tfm_directory,output_name,i);
-}
-else
-{for(i= 1;i<=nmb_files;i++)
-fprintf(out,
-"%s %s.tfm %s%s%02i.tfm\n",
-cp_command,output_name,
-tfm_directory,output_name,i);
-}
-
-fprintf(out,
-"\n"
-"%s %s.tfm",
-rm_command,output_name);
-}
-
-if(ofm_file)
-{fprintf(out,
-"\n"
-"%s %s.ovp %s.ovf %s.ofm\n"
-"%s %s.ovp\n"
-"\n",
-OVP2OVF_NAME,output_name,output_name,output_name,
-rm_command,output_name);
-}
-
-fclose(out);
-}
-
-
-
-/*:51*//*55:*/
-#line 1985 "hbf2gf.w"
-
-void read_config(void)
-{HBF_BBOX*boxp;
-char*real_config_file;
-
-
-/*56:*/
-#line 2037 "hbf2gf.w"
-
-{int i,lastext= -1;
-
-for(i= 0;config_file[i];i++)
-if(config_file[i]=='.')
-lastext= i;
-else if(config_file[i]=='/'||
-config_file[i]==':'||
-config_file[i]=='\\')
-lastext= -1;
-
-if(lastext==-1)
-strcat(config_file,".cfg");
-}
-
-
-/*:56*/
-#line 1991 "hbf2gf.w"
-
-
-real_config_file= TeX_search_cfg_file(config_file);
-if(!real_config_file)
-{if(mf_like)
-{if(!quiet)
-printf("Couldn't find `%s'\n",config_file);
-exit(2);
-}
-else
-{fprintf(stderr,"Couldn't find `%s'\n",config_file);
-exit(1);
-}
-}
-
-if(!(config= fopen(real_config_file,READ_TXT)))
-{if(!testing)
-{fprintf(stderr,"Couldn't open `%s'\n",config_file);
-exit(1);
-}
-else
-{if(!quiet)
-fprintf(stderr,"Couldn't find or open `%s'\n",config_file);
-exit(2);
-}
-}
-
-if(testing)
-{if(!quiet)
-printf("%s\n",real_config_file);
-exit(0);
-}
-
-/*57:*/
-#line 2054 "hbf2gf.w"
-
-{char hbf_header[STRING_LENGTH+1];
-char*real_hbf_header;
-
-if(!fsearch("hbf_header"))
-config_error("hbf_header");
-else
-strcpy(hbf_header,Buffer);
-
-real_hbf_header= TeX_search_hbf_file(hbf_header);
-if(!real_hbf_header)
-{fprintf(stderr,"Couldn't find `%s'\n",hbf_header);
-exit(1);
-}
-
-hbfDebug= 1;
-
-
-if(!(hbf= hbfOpen(real_hbf_header)))
-exit(1);
-
-hbfDebug= 0;
-
-boxp= hbfBitmapBBox(hbf);
-input_size_x= boxp->hbf_height;
-input_size_y= boxp->hbf_width;
-font_encoding= hbfProperty(hbf,"HBF_CODE_SCHEME");
-
-if(!fsearch("output_name"))
-config_error("output_name");
-else
-strcpy(output_name,Buffer);
-}
-
-
-/*:57*/
-#line 2024 "hbf2gf.w"
-
-/*59:*/
-#line 2098 "hbf2gf.w"
-
-{if(fsearch("nmb_files"))
-nmb_files= atoi(Buffer);
-if(fsearch("unicode"))
-if(Buffer[0]=='y'||Buffer[0]=='Y')
-unicode= TRUE;
-if(fsearch("min_char"))
-{user_min_char= strtoul(Buffer,(char**)NULL,0);
-have_min_char= TRUE;
-}
-
-if(!mf_like)
-{if(fsearch("pk_files"))
-if(Buffer[0]=='n'||Buffer[0]=='N')
-pk_files= FALSE;
-if(fsearch("tfm_files"))
-if(Buffer[0]=='n'||Buffer[0]=='N')
-tfm_files= FALSE;
-if(fsearch("ofm_file"))
-if(Buffer[0]=='y'||Buffer[0]=='Y')
-ofm_file= TRUE;
-if(fsearch("long_extension"))
-if(Buffer[0]=='n'||Buffer[0]=='N')
-long_extension= FALSE;
-}
-
-if(fsearch("slant"))
-slant= atof(Buffer);
-if(slant<0.0||slant> 1.0)
-{fprintf(stderr,"Invalid slant\n");
-exit(1);
-}
-if(fsearch("rotation"))
-if(Buffer[0]=='y'||Buffer[0]=='Y')
-rotation= TRUE;
-
-if(fsearch("mag_x"))
-mag_x= atof(Buffer);
-if(fsearch("mag_y"))
-mag_y= atof(Buffer);
-if(!mag_x&&!mag_y)
-{mag_x= 1.0;
-mag_y= 1.0;
-}
-if(mag_x&&!mag_y)
-mag_y= mag_x;
-if(mag_y&&!mag_x)
-mag_x= mag_y;
-if(mag_x<=0.0)
-{fprintf(stderr,"Invalid horizontal magnification\n");
-exit(1);
-}
-if(mag_y<=0.0)
-{fprintf(stderr,"Invalid vertical magnification\n");
-exit(1);
-}
-
-if(fsearch("dpi_x"))
-dpi_x= atoi(Buffer);
-if(fsearch("dpi_y"))
-dpi_y= atoi(Buffer);
-if(!dpi_x&&!dpi_y)
-{dpi_x= 300;
-dpi_y= 300;
-}
-if(dpi_x&&!dpi_y)
-dpi_y= dpi_x;
-if(dpi_y&&!dpi_x)
-dpi_x= dpi_y;
-if(dpi_x<=PRINTER_MIN_RES_X)
-{fprintf(stderr,"Invalid horizontal printer resolution\n");
-exit(1);
-}
-if(dpi_y<=PRINTER_MIN_RES_Y)
-{fprintf(stderr,"Invalid vertical printer resolution\n");
-exit(1);
-}
-
-if(fsearch("design_size"))
-design_size= atof(Buffer);
-
-if(fsearch("x_offset"))
-offset_x= atoi(Buffer);
-else
-offset_x= rotation?0:(boxp->hbf_xDisplacement*mag_x+0.5);
-if(fsearch("y_offset"))
-offset_y= atoi(Buffer);
-else
-offset_y= rotation?0:(boxp->hbf_yDisplacement*mag_y+0.5);
-if(!fsearch("comment"))
-comment[0]= '\0';
-else
-strcpy(comment,Buffer);
-
-if(fsearch("threshold"))
-threshold= atoi(Buffer);
-if(threshold<=0||threshold>=255)
-{fprintf(stderr,"Invalid threshold\n");
-exit(1);
-}
-
-if(!fsearch("checksum"))
-checksum= 0;
-else
-checksum= strtoul(Buffer,(char**)NULL,0);
-
-if(!fsearch("coding"))
-coding[0]= '\0';
-else
-strcpy(coding,Buffer);
-
-if(!fsearch("pk_directory"))
-pk_directory[0]= '\0';
-else
-strcpy(pk_directory,Buffer);
-
-if(!fsearch("tfm_directory"))
-tfm_directory[0]= '\0';
-else
-strcpy(tfm_directory,Buffer);
-
-if(fsearch("rm_command"))
-strcpy(rm_command,Buffer);
-else
-strcpy(rm_command,"rm");
-
-if(fsearch("cp_command"))
-strcpy(cp_command,Buffer);
-else
-strcpy(cp_command,"cp");
-
-if(!fsearch("job_extension"))
-job_extension[0]= '\0';
-else
-{strncpy(job_extension,Buffer,EXTENSION_LENGTH);
-job_extension[EXTENSION_LENGTH]= '\0';
-}
-}
-
-
-/*:59*/
-#line 2025 "hbf2gf.w"
-
-
-/*61:*/
-#line 2252 "hbf2gf.w"
-
-{const void*cp;
-HBF_CHAR dummy;
-
-cp= hbfGetCodeRange(hbf,NULL,&min_char,&max_char);
-for(;cp!=NULL;cp= hbfGetCodeRange(hbf,cp,&dummy,&max_char))
-;
-
-if(have_min_char)
-min_char= user_min_char;
-}
-
-
-/*:61*/
-#line 2027 "hbf2gf.w"
-
-/*63:*/
-#line 2281 "hbf2gf.w"
-
-{const void*b2r;
-unsigned char dummy;
-int i;
-
-for(i= 0;i<256;i++)
-b2_codes[i]= 0;
-
-b2r= hbfGetByte2Range(hbf,NULL,&min_2_byte,&max_2_byte);
-dummy= min_2_byte;
-for(;b2r!=NULL;b2r= hbfGetByte2Range(hbf,b2r,&dummy,&max_2_byte))
-{for(i= dummy;i<=max_2_byte;i++)
-b2_codes[i]= VALID_SUBCODE;
-}
-
-for(i= 0;i<256;i++)
-if(b2_codes[i]==VALID_SUBCODE)
-nmb_2_bytes++;
-}
-
-
-/*:63*/
-#line 2028 "hbf2gf.w"
-
-
-fclose(config);
-}
-
-
-/*:55*//*65:*/
-#line 2313 "hbf2gf.w"
-
-int fsearch(const char*search_string)
-{char*P,p;
-const char*Q;
-char temp_buffer[STRING_LENGTH+1];
-char env_name[STRING_LENGTH+1];
-char*env_p;
-char*env_value;
-char*Buf_p;
-int Ch,ch,old_ch= '\n';
-int count= STRING_LENGTH;
-
-rewind(config);
-
-do
-{Q= search_string;
-p= tolower(*Q);
-Ch= fgetc(config);
-ch= tolower(Ch);
-while(!(ch==p&&old_ch=='\n')&&Ch!=EOF)
-
-
-{old_ch= ch;
-Ch= fgetc(config);
-ch= tolower(Ch);
-}
-
-for(;;)
-{if(*(++Q)=='\0')
-if((Ch= fgetc(config))==' '||Ch=='\t')
-
-goto success;
-Ch= fgetc(config);
-if(tolower(Ch)!=tolower(*Q))
-break;
-}
-}
-while(Ch!=EOF);
-
-return 0;
-
-success:
-P= temp_buffer;
-
-while((Ch= fgetc(config))==' '||Ch=='\t')
-
-;
-while(Ch!='\n'&&--count> 0&&Ch!=EOF)
-{*P++= Ch;
-Ch= fgetc(config);
-}
-*P= '\0';
-
-if(*temp_buffer)
-/*66:*/
-#line 2392 "hbf2gf.w"
-
-{P= temp_buffer;
-Buf_p= Buffer;
-count= STRING_LENGTH-1;
-
-while(*P&&count> 0)
-{env_p= env_name;
-
-if(*P=='$')
-{P++;
-if(*P=='$')
-{*(Buf_p++)= *(P++);
-count--;
-continue;
-}
-while(*P=='{')
-P++;
-if(!(isalpha(*P)||*P=='_'))
-{fprintf(stderr,
-"Invalid environment variable name in configuration file\n");
-exit(1);
-}
-*(env_p++)= *(P++);
-while(*P)
-{if(isalnum(*P)||*P=='_')
-*(env_p++)= *(P++);
-else
-{while(*P=='}')
-P++;
-*env_p= '\0';
-break;
-}
-}
-
-env_value= getenv(env_name);
-if(env_value)
-{while(*env_value&&count> 0)
-{*(Buf_p++)= *(env_value++);
-count--;
-}
-}
-}
-else
-{*(Buf_p++)= *(P++);
-count--;
-}
-}
-*Buf_p= '\0';
-}
-
-
-/*:66*/
-#line 2367 "hbf2gf.w"
-
-else
-*Buffer= '\0';
-
-return(*Buffer)?1:0;
-}
-
-
-/*:65*//*68:*/
-#line 2452 "hbf2gf.w"
-
-void config_error(const char*message)
-{fprintf(stderr,"Couldn't find `%s' entry in configuration file\n",
-message);
-exit(1);
-}
-
-
-
-/*:68*//*72:*/
-#line 2495 "hbf2gf.w"
-
-const char*TeX_search_version(void)
-{
-#if defined(HAVE_LIBKPATHSEA)
-return kpathsea_version_string;
-#elif defined(HAVE_EMTEXDIR)
-return emtex_version_string;
-#elif defined(HAVE_MIKTEX)
-char buf[200];
-
-strcpy(buf,"MiKTeX ");
-miktex_get_miktex_version_string_ex(buf+7,sizeof(buf)-7);
-
-return buf;
-#else
-return no_version_string;
-#endif
-}
-
-
-/*:72*//*75:*/
-#line 2537 "hbf2gf.w"
-
-#ifdef HAVE_EMTEXDIR
-int dir_setup(ed,env,dir,flags)
-struct emtex_dir*ed;
-const char*env;
-const char*dir;
-unsigned flags;
-
-{const char*val;
-char path[260];
-
-ed->alloc= 0;
-ed->used= 0;
-ed->list= NULL;
-
-if(env!=NULL&&(val= getenv(env))!=NULL)
-return setup_list(ed,path,val,flags);
-else
-fprintf(stderr,
-"Environment variable `%s' not set; use current directory\n",
-env);
-
-return TRUE;
-}
-
-
-/*:75*//*77:*/
-#line 2569 "hbf2gf.w"
-
-char*file_find(name,list)
-char*name;
-struct emtex_dir*list;
-
-{if(emtex_dir_find(name_buffer,sizeof(name_buffer),list,name,EDF_CWD))
-return name_buffer;
-
-return NULL;
-}
-#endif
-
-
-/*:77*//*80:*/
-#line 2619 "hbf2gf.w"
-
-#if defined(HAVE_LIBKPATHSEA)
-char*TeX_search_cfg_file(char*name)
-{
-return kpse_find_file(name,kpse_program_text_format,TRUE);
-}
-
-
-char*TeX_search_hbf_file(char*name)
-{
-return kpse_find_file(name,kpse_miscfonts_format,TRUE);
-}
-
-
-#elif defined(HAVE_EMTEXDIR)
-char*TeX_search_cfg_file(char*name)
-{return file_find(name,&cfg_path);
-}
-
-
-char*TeX_search_hbf_file(char*name)
-{return file_find(name,&hbf_path);
-}
-
-
-#elif defined(HAVE_MIKTEX)
-char*TeX_search_cfg_file(char*name)
-{char result[_MAX_PATH];
-
-if(!miktex_find_input_file("hbf2gf",*name,result))
-return 0;
-return strdup(result);
-}
-
-
-char*TeX_search_hbf_file(char*name)
-{char result[_MAX_PATH];
-
-
-if(!miktex_find_miscfont_file(*name,result))
-return 0;
-return strdup(result);
-}
-
-
-#else
-char*TeX_search_cfg_file(char*name)
-{return name;
-}
-
-
-char*TeX_search_hbf_file(char*name)
-{return name;
-}
-#endif
-
-
-
-/*:80*/
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.def b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.def
deleted file mode 100644
index 25eeb107b7e..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.def
+++ /dev/null
@@ -1,3 +0,0 @@
-NAME HBF2GF WINDOWCOMPAT
-DESCRIPTION 'hbf2gf (CJK Ver. 4.7.0)'
-STACKSIZE 0x80000
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.dvi b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.dvi
deleted file mode 100644
index 8eb81e334d7..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.dvi
+++ /dev/null
Binary files differ
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.idx b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.idx
deleted file mode 100644
index fdf1ac2a8d1..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.idx
+++ /dev/null
@@ -1,326 +0,0 @@
-\I\.{\_\_GNUC\_\_}, 36, 37, 39, 40.
-\I\&{\_\_inline\_\_}, 36, 37, 39, 40.
-\I\.{\_MAX\_PATH}, 80.
-\I\.{\_2\_16}, \[19], 23.
-\I\.{\_2\_20}, \[19], 21.
-\I\\{again}, \[30].
-\I\\{alloc}, 75.
-\I\\{argc}, \[4], 7, 8.
-\I\\{argv}, \[4], 7, 8, 78.
-\I\\{atof}, 8, 59.
-\I\\{atoi}, 8, 59.
-\I\\{banner}, \[1], 4, 5.
-\I\\{bitmap}, \[27], 30, 36, 37.
-\I\\{bitshift}, \[37].
-\I\.{BLACK}, \[27], 43, 44.
-\I\.{BOC}, \[18].
-\I\.{BOC1}, \[18].
-\I\\{boxp}, \[55], 57, 59.
-\I\\{bP}, \[27], 30, 37.
-\I\\{buf}, \[72].
-\I\\{Buf\_p}, \[65], 66.
-\I\\{buffer}, \[51].
-\I\\{Buffer}, \[53], 57, 59, 64, 65, 66.
-\I\\{b2\_codes}, 28, 30, 48, \[62], 63.
-\I\\{b2r}, \[63].
-\I\|{c}, \[48].
-\I\\{cfg\_path}, \[73], 78, 80.
-\I\\{ch}, \[65].
-\I\\{Ch}, \[65].
-\I\\{char\_adr}, \[15], 17, 23.
-\I\\{char\_adr\_p}, \[15], 17, 18, 23.
-\I\.{CHAR\_LOC}, \[23].
-\I\.{CHAR\_LOC0}, \[23].
-\I\\{checksum}, \[19], 23, 46, 48, 59.
-\I\\{code}, \[27], 28, 30.
-\I\\{coding}, \[19], 22, 59.
-\I\\{col}, \[28], \[30], 32, 33, 34, \[37], \[40].
-\I\\{comment}, \[19], 22, 59.
-\I\\{config}, \[2], 55, 65.
-\I\\{config\_error}, 57, \[67], \[68].
-\I\\{config\_file}, \[2], 4, 55, 56.
-\I\\{count}, \[42], 43, 44, \[48], \[65], 66.
-\I\\{cp}, \[42], 43, 44, \[61].
-\I\\{cp\_command}, \[49], 51, 59.
-\I\\{curr\_row}, \[27], 31, 37.
-\I\\{design\_size}, \[15], 21, 28, 46, 48, 59.
-\I\\{designsize}, \[21], 23.
-\I\\{dir}, \[75].
-\I\\{dir\_setup}, \[74], \[75], 78.
-\I\\{dot\_count}, \[15], 17, 18.
-\I\\{dpi\_x}, \[19], 21, 28, 51, 59.
-\I\\{dpi\_y}, \[19], 21, 28, 59.
-\I\\{dummy}, \[61], \[63].
-\I\\{ed}, \[75].
-\I\.{EDF\_CWD}, 77.
-\I\.{EDS\_BANG}, 78.
-\I\\{empty\_char}, \[15], 18, 30.
-\I\&{emtex\_dir}, 73, 74, 75, 77.
-\I\\{emtex\_dir\_find}, 77.
-\I\\{emtex\_dir\_setup}, 75.
-\I\\{emtex\_version\_string}, \[70], 72.
-\I\\{end\_of\_file}, \[2], 9, 17, 18, 27, 30.
-\I\\{env}, \[75].
-\I\\{env\_name}, \[65], 66.
-\I\\{env\_p}, \[65], 66.
-\I\\{env\_value}, \[65], 66.
-\I\.{EOC}, \[18].
-\I\.{EOF}, 27, 65.
-\I\\{exit}, 4, 5, 6, 7, 8, 12, 28, 46, 48, 51, 55, 57, 59, 66, 68, 78.
-\I\.{EXTENSION\_LENGTH}, \[49], 59.
-\I\|{f}, \[26].
-\I\.{FALSE}, \[2], 7, 18, 30, 49, 58, 59.
-\I\\{fclose}, 12, 46, 48, 51, 55.
-\I\\{fflush}, 18.
-\I\\{fgetc}, 65.
-\I\\{file\_find}, \[74], \[77], 80.
-\I\\{file\_name}, 4.
-\I\.{FILE\_NAME\_LENGTH}, \[2], 4, 12, 46, 48, 51, 76.
-\I\\{file\_number}, \[2], 8, 9, 12, 28, 46.
-\I\\{flags}, \[75].
-\I\\{font\_encoding}, \[15], 46, 57.
-\I\\{fopen}, 12, 46, 48, 51, 55, 69.
-\I\\{fprintf}, 7, 8, 12, 28, 46, 48, 51, 55, 57, 59, 66, 68, 75, 78.
-\I\\{fputc}, 14, 18, 22, 23, 24, 26, 43, 44.
-\I\\{fputl}, 18, 23, 24, \[25], \[26].
-\I\\{fputs}, 14, 22.
-\I\\{frac\_col\_left}, \[34].
-\I\\{frac\_col\_to\_fill}, \[34], 35.
-\I\\{frac\_row\_left}, \[30], 32, 33.
-\I\\{frac\_row\_to\_fill}, \[30], 32, 33.
-\I\\{fsearch}, 57, 59, \[64], \[65].
-\I\\{ftell}, 18, 22, 23, 24.
-\I\|{g}, \[33], \[34].
-\I\\{getenv}, 66, 75.
-\I\.{GF\_ID}, \[13], 14, 24.
-\I\.{GFTOPK\_NAME}, \[49], 51.
-\I\\{grayrow}, \[27], 28, 30.
-\I\\{grP}, \[30], 32, 33.
-\I\.{HALFSCALE}, \[27], 28, 33, 34.
-\I\.{HAVE\_CONFIG\_H}, 10.
-\I\.{HAVE\_EMTEXDIR}, 69, 70, 72, 73, 74, 75, 78, 80.
-\I\.{HAVE\_LIBKPATHSEA}, 69, 72, 78, 80.
-\I\.{HAVE\_MIKTEX}, 69, 70, 72, 80.
-\I\\{have\_min\_char}, \[58], 59, 61.
-\I\&{HBF}, 2.
-\I\\{hbf}, \[2], 4, 30, 57, 61, 63.
-\I\&{HBF\_BBOX}, 55.
-\I\&{HBF\_CHAR}, 27, 58, 60, 61.
-\I\\{hbf\_header}, \[57].
-\I\\{hbf\_height}, 57.
-\I\\{hbf\_path}, \[73], 78, 80.
-\I\\{hbf\_width}, 57.
-\I\\{hbf\_xDisplacement}, 59.
-\I\\{hbf\_yDisplacement}, 59.
-\I\\{hbfBitmapBBox}, 57.
-\I\\{hbfClose}, 4.
-\I\\{hbfDebug}, 57.
-\I\\{hbfGetBitmap}, 30.
-\I\\{hbfGetByte2Range}, 62, 63.
-\I\\{hbfGetCodeRange}, 60, 61.
-\I\\{hbfOpen}, 57.
-\I\\{hbfProperty}, 57.
-\I\.{HBF2GF\_VERSION}, \[5].
-\I\\{header}, \[13], 14.
-\I\|{i}, \[21], \[46], \[48], \[51], \[56], \[63].
-\I\\{input\_size\_x}, \[15], 28, 32, 33, 34, 36, 37, 57.
-\I\\{input\_size\_y}, \[15], 28, 31, 32, 33, 37, 57.
-\I\\{isalnum}, 66.
-\I\\{isalpha}, 66.
-\I\\{item}, \[37].
-\I\|{j}, \[9], \[51].
-\I\\{job\_extension}, \[49], 51, 59.
-\I\\{kpathsea\_version\_string}, 72.
-\I\\{kpse\_find\_file}, 80.
-\I\\{kpse\_init\_prog}, 78.
-\I\\{kpse\_miscfonts\_format}, 80.
-\I\\{kpse\_program\_text\_format}, 80.
-\I\\{kpse\_set\_program\_name}, 78.
-\I\|{l}, \[4].
-\I\\{last\_char}, \[15], 17, 18, 23.
-\I\\{lastext}, \[56].
-\I\\{list}, 75, \[77].
-\I\\{localtime}, 14.
-\I\\{long\_extension}, \[2], 7, 12, 51, 59.
-\I\\{mag\_x}, \[15], 28, 59.
-\I\\{mag\_y}, \[15], 28, 59.
-\I\\{magstep\_x}, \[15], 21, 28, 51.
-\I\\{magstep\_y}, \[15], 21, 28.
-\I\\{main}, \[4].
-\I\\{make\_pixel\_array}, 18, 27, \[29], \[30].
-\I\\{max\_char}, 28, 30, 48, \[60], 61.
-\I\.{MAX\_CHAR\_SIZE}, 23, \[27], 28, 52, 81.
-\I\\{max\_numb}, \[9].
-\I\\{max\_2\_byte}, 30, \[62], 63.
-\I\\{message}, \[68].
-\I\\{mf\_like}, \[2], 4, 9, 12, 28, 46, 55, 59.
-\I\\{miktex\_find\_input\_file}, 80.
-\I\\{miktex\_find\_miscfont\_file}, 80.
-\I\\{miktex\_get\_miktex\_version\_string\_ex}, 72.
-\I\\{min\_char}, 9, 28, 48, 51, \[60], 61.
-\I\\{min\_2\_byte}, 28, 30, \[62], 63.
-\I$\msdos$, 2.
-\I\\{name}, \[77], \[80].
-\I\\{name\_buffer}, \[76], 77.
-\I\\{need\_col}, \[34], 35.
-\I\\{need\_to\_read\_row}, \[30], 32, 33.
-\I\\{new\_pixelrow}, \[27], 30.
-\I\\{new\_prP}, \[30], 34, 35.
-\I\.{NEW\_ROW\_}, \[41], 43.
-\I\\{nmb\_files}, \[2], 3, 9, 49, 51, 59.
-\I\\{nmb\_subfonts}, \[48].
-\I\\{nmb\_2\_bytes}, 28, 48, \[62], 63.
-\I\\{no\_code}, \[30].
-\I\\{no\_version\_string}, \[70], 72.
-\I\.{NOOP}, \[41].
-\I\\{num}, \[26].
-\I\\{nxP}, \[30], 33, 34, 35.
-\I\\{offset}, \[28], \[37].
-\I\\{offset\_x}, 28, \[58], 59.
-\I\\{offset\_y}, 28, \[58], 59.
-\I\\{ofm\_file}, 4, \[49], 51, 59.
-\I\\{ofm\_header}, \[48].
-\I\\{old\_ch}, \[65].
-\I\\{out}, \[2], 12, 14, 18, 22, 23, 24, 43, 44, 46, 48, \[51].
-\I\\{out\_char}, \[27], 30, 42, 43.
-\I\\{out\_char\_p}, \[27], 30, 40.
-\I\\{out\_s}, \[14].
-\I\\{output\_file}, \[12], \[46], \[48].
-\I\\{output\_name}, \[2], 12, 46, 48, 49, 51, 57.
-\I\.{OVP2OVF\_NAME}, \[49], 51.
-\I\|{P}, \[65].
-\I\|{p}, \[4], \[65].
-\I\\{paint}, \[42], 43, 44.
-\I\.{PAINT\_}, \[41], 43, 44.
-\I\.{PAINT1}, \[41], 43, 44.
-\I\.{PAINT2}, \[41], 43, 44.
-\I\.{PAINT3}, \[41].
-\I\\{path}, \[75].
-\I\.{PIXEL\_MAXVAL}, \[27], 33, 34, 35, 37.
-\I\\{pixelrow}, \[27], 30, \[37], \[40].
-\I\\{pk\_directory}, \[49], 51, 59.
-\I\\{pk\_dx}, 19, \[21], 23.
-\I\\{pk\_files}, \[2], 7, 12, 18, 30, 51, 59.
-\I\\{pk\_offset\_x}, \[15], 18, 21, 28.
-\I\\{pk\_offset\_y}, \[15], 18, 21, 28.
-\I\\{pk\_output\_size\_x}, \[15], 18, 21, 28, 40, 42, 43, 44, 52.
-\I\\{pk\_output\_size\_y}, \[15], 18, 21, 28, 31, 32, 34, 42, 52.
-\I\\{pk\_total\_max\_x}, \[19], 21, 23.
-\I\\{pk\_total\_max\_y}, \[19], 21, 23.
-\I\\{pk\_total\_min\_x}, \[19], 21, 23.
-\I\\{pk\_total\_min\_y}, \[19], 21, 23.
-\I\\{pk\_width}, \[15], 21, 28, 34.
-\I\.{PLTOTF\_NAME}, \[49], 51.
-\I\\{pos}, \[46], \[48].
-\I\.{POST}, \[23], 24.
-\I\\{post\_adr}, \[21], 23, 24.
-\I\.{POSTPOST}, \[24].
-\I\.{POSTPOST\_ID}, \[24].
-\I\\{ppp\_x}, \[19], 21, 23.
-\I\\{ppp\_y}, \[19], 21, 23.
-\I\.{PRE}, \[13], 14.
-\I\.{PRINTER\_MIN\_RES\_X}, 8, \[53], 59.
-\I\.{PRINTER\_MIN\_RES\_Y}, \[53], 59.
-\I\\{printf}, 4, 5, 6, 12, 18, 46, 48, 51, 55.
-\I\\{prP}, \[30], 31, 32, 33.
-\I\|{Q}, \[65].
-\I\\{quiet}, \[2], 4, 7, 12, 18, 46, 48, 51, 55.
-\I\.{READ\_BIN}, \[2].
-\I\\{read\_config}, 4, \[54], \[55].
-\I\\{read\_row}, 27, 30, 32, 33, \[36], \[37].
-\I\.{READ\_TXT}, \[2], 55.
-\I\\{real\_config\_file}, \[55].
-\I\\{real\_hbf\_header}, \[57].
-\I\\{remainder}, \[48].
-\I\\{result}, \[80].
-\I\\{rewind}, 65.
-\I\\{rm\_command}, \[49], 51, 59.
-\I\\{rotation}, \[15], 28, 36, 37, 59.
-\I\\{row}, \[30], 31, 34.
-\I\\{rows\_read}, \[30], 32, 33.
-\I\|{s}, \[14], \[46], \[48].
-\I\\{s\_mag\_x}, \[27], 28, 34.
-\I\\{s\_mag\_y}, \[27], 28, 30, 32, 33.
-\I\\{s\_slant}, \[27], 28, 34.
-\I\\{sc}, \[46], \[48].
-\I\.{SCALE}, \[27], 28, 30, 33, 34, 35.
-\I\\{search\_string}, \[65].
-\I\\{secs\_now}, \[14].
-\I\\{setup\_list}, \[74], 75.
-\I\\{skip}, \[42], 43.
-\I\.{SKIP0}, \[41], 43.
-\I\.{SKIP1}, \[41], 43.
-\I\.{SKIP2}, \[41], 43.
-\I\.{SKIP3}, \[41].
-\I\\{slant}, \[15], 28, 46, 48, 52, 59.
-\I\\{special\_adr}, \[21], 22, 23.
-\I\\{sprintf}, 12, 46, 48.
-\I\\{start}, \[42].
-\I\\{stderr}, 7, 8, 12, 28, 46, 48, 51, 55, 57, 59, 66, 68, 75, 78.
-\I\\{stdout}, 18.
-\I\\{strcat}, 14, 51, 56.
-\I\\{strcmp}, 7.
-\I\\{strcpy}, 14, 51, 57, 59, 72.
-\I\\{strdup}, 80.
-\I\\{strftime}, 14.
-\I\.{STRING\_LENGTH}, \[2], 19, 49, 53, 57, 65, 66.
-\I\\{strlen}, 4, 8, 14, 22, 46, 48.
-\I\\{strncpy}, 4, 59.
-\I\\{strtol}, 8.
-\I\\{strtoul}, 59.
-\I\\{success}, \[65].
-\I\|{t}, \[46], \[48].
-\I\\{target\_size\_x}, \[15], 28.
-\I\\{target\_size\_y}, \[15], 28.
-\I\\{temp}, \[21], 24.
-\I\\{temp\_buffer}, \[65], 66.
-\I\\{temp\_pixelrow}, \[27], 30.
-\I\\{temp\_prP}, \[30], 31, 33, 34.
-\I\\{testing}, \[2], 4, 7, 55.
-\I\\{TeX\_search\_cfg\_file}, 55, \[79], \[80].
-\I\\{TeX\_search\_hbf\_file}, 57, \[79], \[80].
-\I\\{TeX\_search\_version}, 5, \[71], \[72].
-\I\\{tfm\_directory}, \[49], 51, 59.
-\I\\{tfm\_files}, \[2], 4, 7, 51, 59.
-\I\\{tfm\_header}, \[46].
-\I\\{tfm\_offset\_x}, \[15], 21, 28, 46, 48.
-\I\\{tfm\_offset\_y}, \[15], 28, 46, 48.
-\I\\{tfm\_output\_size\_x}, \[15], 21, 28, 46, 48.
-\I\\{tfm\_output\_size\_y}, \[15], 28, 46, 48.
-\I\\{tfm\_width}, 19, \[21], 23.
-\I\\{threshold}, \[38], 40, 59.
-\I\\{time}, 14.
-\I\\{time\_now}, \[14].
-\I\&{tm}, 14.
-\I\.{TM\_IN\_SYS\_TIME}, 10.
-\I\\{tmp}, \[28].
-\I\\{tolower}, 65.
-\I\.{TRUE}, \[2], 4, 7, 9, 30, 59, 75, 80.
-\I\\{unicode}, \[2], 8, 9, 12, 28, 46, 51, 59.
-\I\.{USAGE}, \[6].
-\I\\{used}, 75.
-\I\\{user\_min\_char}, \[58], 59, 61.
-\I\\{val}, \[75].
-\I\.{VALID\_SUBCODE}, 48, \[62], 63.
-\I\.{WHITE}, \[27], 42, 44.
-\I\.{WRITE\_BIN}, \[2], 12.
-\I\\{write\_coding}, 18, \[41], \[42].
-\I\\{write\_data}, 11, 12, 15, \[16], \[17].
-\I\\{write\_file}, 4, 9, \[11], \[12].
-\I\\{write\_job}, 4, \[50], \[51].
-\I\\{write\_ovp}, 4, \[47], \[48].
-\I\\{write\_pl}, 4, \[45], \[46], 47.
-\I\\{write\_post}, 11, 12, 19, \[20], \[21].
-\I\\{write\_pre}, 11, 12, \[13], \[14].
-\I\\{write\_row}, 30, 34, 35, 38, \[39], \[40].
-\I\.{WRITE\_TXT}, \[2], 46, 48, 51.
-\I\|{x}, \[42].
-\I\\{x\_resolution}, \[2], 4, 8, 12, 28, 52.
-\I\\{xP}, \[30], 32, 33, 34, 35, \[37], \[40].
-\I\.{XXX1}, \[22].
-\I\.{XXX2}, \[22].
-\I\.{XXX3}, \[22].
-\I\.{XXX4}, \[22].
-\I\|{y}, \[42].
-\I\\{y\_scale}, \[2], 4, 8, 28, 52.
-\I\.{YYY}, \[22].
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.scn b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.scn
deleted file mode 100644
index 0d39715d758..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.scn
+++ /dev/null
@@ -1,56 +0,0 @@
-\I\X66:Check for environment variables\X
-\U65.
-\I\X8:Check other arguments\X
-\U4.
-\I\X61:Get code range\X
-\U55.
-\I\X63:Get sub code range\X
-\U55.
-\I\X2, 15, 19, 27, 38, 49, 53, 58, 60, 62, 70, 73, 76:Global variables\X
-\U4.
-\I\X56:Handle extension\X
-\U55.
-\I\X10, 69:Include files\X
-\U4.
-\I\X78:Initialize \TeX\ file searching\X
-\U4.
-\I\X28:Initialize variables\X
-\U4.
-\I\X57:Necessary parameters\X
-\U55.
-\I\X59:Optional parameters\X
-\U55.
-\I\X23:Post section\X
-\U21.
-\I\X24:Postpost section\X
-\U21.
-\I\X6:Print help information\X
-\U7.
-\I\X5:Print version\X
-\U7.
-\I\X44:Process rest of line\X
-\U42.
-\I\X33:Produce a temporary row\X
-\U32.
-\I\X11, 13, 16, 20, 25, 29, 36, 39, 41, 45, 47, 50, 54, 64, 67, 71, 74,
-79:Prototypes\X
-\U4.
-\I\X34:Scale X from \PB{\\{temp\_pixelrow}[\,]} into \PB{\\{new\_pixelrow}[\,]}
-and write it into \PB{\\{out\_char}[\,]}\X
-\U31.
-\I\X32:Scale Y from \PB{\\{pixelrow}[\,]} into \PB{\\{temp\_pixelrow}[\,]}\X
-\U31.
-\I\X31:Scale row by row\X
-\U30.
-\I\X7:Scan options\X
-\U4.
-\I\X43:Search blank lines\X
-\U42.
-\I\X22:Special section\X
-\U21.
-\I\X18:Write character\X
-\U17.
-\I\X9:Write files\X
-\U4.
-\I\X35:Write out a row\X
-\U34.
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
diff --git a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.w b/Build/source/texk/cjkutils/hbf2gf/hbf2gf.w
deleted file mode 100644
index 19a6cb6425b..00000000000
--- a/Build/source/texk/cjkutils/hbf2gf/hbf2gf.w
+++ /dev/null
@@ -1,2808 +0,0 @@
-% 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}}
-@s msdos TeX
-
-@s HBF int
-@s HBF_CHAR int
-@s HBF_BBOX int
-
-@s __inline__ int
-
-
-@* Introduction.
-This is the \.{hbf2gf} program by Werner Lemberg
-(\.{wl@@gnu.org}).
-
-The ``banner line'' defined here should be changed whenever \.{hbf2gf} is
-modified.
-
-@d banner
-"hbf2gf (CJK ver. 4.7.0)"
-
-
-@
-\.{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 |nmb_files| \.{GF} files, each
-file containing |256|~characters (except the last and possibly the first
-one). In the normal case it's not necessary to compute the right value of
-|nmb_files| because \.{hbf2gf} will do this; you should use |-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~|2| (this is useful for scripts like
-\.{mktexpk}). If the configuration file is found but an error occurs while
-computing the font, error code~|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.
-
-@d TRUE 1
-@d FALSE 0@#
-
-@d STRING_LENGTH 255
- /* the maximal length of an input string in the configuration file */
-@d FILE_NAME_LENGTH 1024
- /* the maximal length (including the path) of a filename */@#
-
-@<Global variables@>=
-int nmb_files = -1; /* create all files by default */
-int unicode = FALSE; /* whether a Unicode font should be processed */@#
-
-int testing = FALSE; /* whether we test only the font name */@#
-
-int mf_like = FALSE; /* whether we are in the \mf-like mode */
-int file_number = 0; /* the subfont number */@#
-
-double x_resolution = 0.0; /* the second and third input parameter */
-double y_scale = 1.0;@#
-
-int pk_files = TRUE; /* command line options */
-int tfm_files = TRUE;
-int long_extension = TRUE;
-int quiet = FALSE;@#
-
-char config_file[FILE_NAME_LENGTH + 4 + 1];
- /* we probably must add `\.{.cfg}' */
-char output_name[STRING_LENGTH + 1];@#
-
-FILE *config, *out;
-HBF *hbf;@#
-
-#ifdef msdos /* if we compile under DOS or OS/2 */
-#define WRITE_BIN "wb"
-#define WRITE_TXT "wt"
-#define READ_BIN "rb"
-#define READ_TXT "rt"
-#else
-#define WRITE_BIN "w"
-#define WRITE_TXT "w"
-#define READ_BIN "r"
-#define READ_TXT "r"
-#endif@#
-
-int end_of_file = FALSE;
-
-
-@
-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 |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.
-
-
-
-@* The main routine.
-The main routine takes |file_name|, |x_resolution|, and |y_scale| as command
-line parameters if in \mf-like mode, otherwise |config_file| as the only
-argument. |read_config()| scans the configuration file and fills the global
-variables, |write_file()| writes the \.{GF} files, |write_pl()| and
-|write_ovp()| write the \.{PL} and \.{OVP} files respectively, and
-|write_job()| the batch file.
-
-@c
-@<Include files@>@;
-@<Prototypes@>@;
-@<Global variables@>@;@#
-
-
-int main(int argc, char *argv[])
- {char *p;
-
- @<Initialize \TeX\ file searching@>@;@#
-
- @<Scan options@>@;@#
-
- if(!quiet)
- printf("\n%s\n\n", banner);@#
-
- strncpy(config_file, argv[1], FILE_NAME_LENGTH);
- config_file[FILE_NAME_LENGTH] = '\0';@#
-
- if(argc > 2 || testing)
- {int l = strlen(config_file);
-
- if(l > 2)
- config_file[l - 2] = '\0';
- /* strip subfont number from file name */
- else
- {if(!quiet)
- printf("`%s' can't be a subfont created by hbf2gf\n",
- config_file);
- exit(2);
- }@#
-
- mf_like = TRUE;
- }@#
-
- read_config(); /* will call |exit(1)| on errors */@#
-
- if(mf_like)
- @<Check other arguments@>@;@#
-
- @<Initialize variables@>@;@#
-
- @<Write files@>@;@#
-
- if(tfm_files)
- write_pl();
- if(ofm_file)
- write_ovp();
- if(!mf_like)
- write_job();@#
-
- hbfClose(hbf);@#
-
- exit(0);
- return 0; /* never reached */
- }
-
-
-@
-@d HBF2GF_VERSION @/
-"\n"@/
-"Copyright (C) 1996-1999 Werner Lemberg.\n"@/
-"There is NO warranty. You may redistribute this software\n"@/
-"under the terms of the GNU General Public License\n"@/
-"and the HBF library copyright.\n"@/
-"\n"@/
-"For more information about these matters, see the files\n"@/
-"named COPYING and hbf.c.\n"@/
-"\n"
-
-@<Print version@>=
- {printf("\n");
- printf(banner);
- printf(" (%s)\n", TeX_search_version());
- printf(HBF2GF_VERSION);
- exit(0);
- }
-
-
-@
-@d USAGE @/
-"\n"@/
-"Usage: hbf2gf [-q] configuration_file[.cfg]\n"@/
-" hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n"@/
-" hbf2gf -t [-q] font_name\n"@/
-"\n"@/
-" Convert a font in HBF format to TeX's GF resp. PK format.\n"@/
-"\n"@/
-" -q be silent\n"@/
-" -p don't produce a PL file\n"@/
-" -g don't produce a GF file\n"@/
-" -n use no resolution in extension (only `.gf')\n"@/
-" -t test for font_name (returns 0 on success)\n"@/
-" --help print this message and exit\n"@/
-" --version print version number and exit\n"@/
-"\n"
-
-@<Print help information@>=
- {printf(USAGE);
- exit(0);
- }
-
-
-@
-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.
-
-@<Scan options@>=
- if(argc == 2)
- {if(strcmp(argv[1], "--help") == 0)
- @<Print help information@>@;
- else if(strcmp(argv[1], "--version") == 0)
- @<Print version@>@;
- }@#
-
- while(argc > 1)
- {p = argv[1];
- if(p[0] != '-')
- break;
- if(p[1] == 'p')
- tfm_files = FALSE;
- else if(p[1] == 'g')
- pk_files = FALSE;
- else if(p[1] == 'n')
- long_extension = FALSE;
- else if(p[1] == 'q')
- quiet = TRUE;
- else if(p[1] == 't')
- testing = TRUE;@#
-
- argv++;
- argc--;
- }@#
-
- if(testing)
- {if(argc != 2)
- {fprintf(stderr, "Need exactly one parameter for `-t' option.\n");
- fprintf(stderr, "Try `hbf2gf --help' for more information.\n");
- exit(1);
- }
- }
- else if(argc < 2 || argc > 4)
- {fprintf(stderr, "Invalid number of parameters.\n");
- fprintf(stderr, "Try `hbf2gf --help' for more information.\n");
- exit(1);
- }@#
-
-
-@
-If the (optional) argument is larger than~|10|, we treat it as a value for
-the vertical resolution (in dpi), otherwise as a vertical scaling factor.
-
-@<Check other arguments@>=
- {if(unicode)
- file_number = (int)strtol(&argv[1][strlen(argv[1]) - 2],
- (char **)NULL, 16);
- else
- file_number = atoi(&argv[1][strlen(argv[1]) - 2]);@#
-
- x_resolution = atof(argv[2]);
- if(x_resolution < PRINTER_MIN_RES_X)
- {fprintf(stderr, "Invalid horizontal resolution\n");
- exit(1);
- }@#
-
- if(argc > 3)
- {y_scale = atof(argv[3]);
- if(y_scale < 0.01)
- {fprintf(stderr,
- "Invalid vertical scaling factor or resolution\n");
- exit(1);
- }
- if(y_scale > 10.0)
- y_scale = (double)x_resolution / y_scale;
- }
- }
-
-
-@
-If |unicode| is |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}'. |min_char| represents the lower bound of
-the code range.
-
-If we are in \mf-like mode, |file_number| is taken from the command line,
-and |max_numb| will be set to~|1|.
-
-@<Write files@>=
- {int j, max_numb;
-
- if(!mf_like)
- {file_number = (unicode == TRUE ? (min_char >> 8) : 1);
- if(nmb_files == -1)
- max_numb = (unicode == TRUE ? 0x100 : 100);
- else
- max_numb = nmb_files;
- }
- else
- max_numb = 1;@#
-
- for(j = 0; (j < max_numb) && !end_of_file; file_number++, j++)
- write_file();@#
-
- nmb_files = j; /* the real number of output font files */
- }
-
-
-@
-@<Include files@>=
-#ifdef HAVE_CONFIG_H
-#include "c-auto.h"
-#endif
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#ifdef TM_IN_SYS_TIME
-#include <sys/time.h>
-#endif
-#include "hbf.h"
-
-
-
-@* The functions.
-The first function to be described is |write_file()|. Each \.{GF} file
-consists of three sections: a preamble, a data section, and a postamble. The
-functions |write_pre()|, |write_data()|, and |write_post()| handle this.
-
-@<Prototypes@>=
-void write_file(void);
-
-
-@
-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.
-
-@c
-void write_file(void)
- {char output_file[FILE_NAME_LENGTH + 1];
-
-
- if(pk_files)
- {if(mf_like)
- {if(unicode)
- sprintf(output_file, "%s%02x.%.0igf",@/
- output_name, file_number,
- long_extension ? (int)(x_resolution + 0.5) : 0);
- else
- sprintf(output_file, "%s%02i.%.0igf",@/
- output_name, file_number,
- long_extension ? (int)(x_resolution + 0.5) : 0);
- }
- else
- {if(unicode)
- sprintf(output_file, "%s%02x.gf", output_name, file_number);
- else
- sprintf(output_file, "%s%02i.gf", output_name, file_number);
- }
- if(!(out = fopen(output_file, WRITE_BIN)))
- {fprintf(stderr, "Couldn't open `%s'\n", output_file);
- exit(1);
- }
- if(!quiet)
- printf("Writing `%s' ", output_file);@#
-
- write_pre();
- write_data();
- write_post();
- fclose(out);@#
-
- if(!quiet)
- printf("\n");
- }
- else
- write_data();
- }
-
-
-@
-The preamble has two bytes at the very beginning, |PRE| and |GF_ID|. |PRE|
-starts the preamble, and |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.
-
-@d GF_ID 131
-@d PRE 247@#
-
-@d header " hbf2gf output "
-
-@<Prototypes@>=
-void write_pre(void);
-
-
-@
-@s tm int
-
-@c
-void write_pre(void)
- {char out_s[40], s[20];
- time_t secs_now;
- struct tm *time_now;
-
-
- strcpy(out_s, header);@#
-
- secs_now = time(NULL); /* system date and time */
- time_now = localtime(&secs_now);
- strftime(s, 20, "%Y.%m.%d:%H.%M", time_now);
- strcat(out_s, s);@#
-
- fputc(PRE, out);
- fputc(GF_ID, out);
- fputc(strlen(out_s), out);
- fputs(out_s, out);
- }
-
-
-@
-|write_data()| produces the middle part of the \.{GF} file. It first sets
-|char_adr_p| equal to the address of |char_adr[]| which will contain file
-offsets of the compressed characters.
-
-|input_size_x| and |input_size_y| reflect the original dimensions of the
-bitmap font, |pk_output_size_x| and |pk_output_size_y| contain the width and
-height of the output character box (in pixels), |pk_offset_x| and
-|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). |mag_x| and |mag_y| hold the scaling factors
-which are needed to reach |design_size|. |slant| defines the slant ($\Delta
-x / \Delta y$), |target_size_x| and |target_size_y| will be the final
-dimensions; |magstep_x = target_size_x / design_size| is \TeX's
-\.{\\magstep}.
-
-The \CEE/ standard specifies that all global values will be automatically
-set to~|0| if no initialization value is given.
-
-@<Global...@>=
-long char_adr[256];
-long *char_adr_p;@#
-
-int pk_offset_x;
- /* horizontal offset (increase character width a bit; will be applied on
- both the left and the right side) */
-double tfm_offset_x;
-int pk_offset_y;
- /* vertical offset (must be configured to desired font size) */
-double tfm_offset_y;@#
-
-int input_size_x;
-int input_size_y;
-const char *font_encoding; /* taken from the HBF file */
-int pk_width; /* without slant */
-int pk_output_size_x;
- /* the output character box dimensions without offsets */
-double tfm_output_size_x;
-int pk_output_size_y;
-double tfm_output_size_y;@#
-
-double design_size = 10.0; /* in points */
-double target_size_x; /* in points */
-double target_size_y;
-double magstep_x;
-double magstep_y;
-double slant;
-int rotation;@#
-
-double mag_x; /* horizontal and vertical magnification values */
-double mag_y;@#
-
-int empty_char; /* a flag whether the character does not exist or is empty */
-int last_char; /* the last valid character in a \.{GF} file */@#
-
-int dot_count; /* this counts the processed characters;
- every ten characters a dot is output to the screen */
-
-
-@
-@<Prototypes@>=
-void write_data(void);
-
-
-@
-@c
-void write_data(void)
- {dot_count = 0;
- char_adr_p = char_adr;@#
-
- for(last_char = 0; (last_char < 256) && !end_of_file; last_char++)
- @<Write character@>@;
- }
-
-
-@
-The code in this section saves the current file position first and calls
-|make_pixel_array()|, which expands and scales the character bitmap.
-
-|BOC| (and |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).
-
-|write_coding()| compresses and outputs the bitmap; |EOC| (End Of Character)
-finishes the current character.
-
-@d BOC 67
-@d BOC1 68 /* simplified version of |BOC| */
-@d EOC 69
-
-@<Write character@>=
- {if(dot_count++ % 10 == 0) /* a progress report for impatient users */
- if(pk_files && !quiet)
- {printf(".");
- fflush(stdout);
- }@#
-
- empty_char = FALSE;
- make_pixel_array();
- if(end_of_file)
- return;@#
-
- if(pk_files)
- {*char_adr_p = ftell(out);
- char_adr_p++;@#
-
- if(empty_char)
- {fputc(BOC1, out);
- fputc((unsigned char)last_char, out);
- fputc(0, out);
- fputc(0, out);
- fputc(0, out);
- fputc(0, out);
- fputc(EOC, out);
- }
- else
- {fputc(BOC, out);
- fputl(last_char, out);
- fputl(-1L, out);
- fputl(pk_offset_x, out);
- fputl(pk_output_size_x + pk_offset_x, out);
- fputl(pk_offset_y, out);
- fputl(pk_output_size_y + pk_offset_y, out);@#
-
- write_coding();@#
-
- fputc(EOC, out);
- }
- }
- }
-
-
-@
-The current \.{GF} file will be completed with data written by
-|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 (|coding[]| and |comment[]|). The second describes the font as a
-whole, and the last marks the end of the file.
-
-|pk_total_min_x| up to |pk_total_max_y| define the greatest bounding box of
-this file (including offsets); the horizontal character escapement after
-drawing the character is |pk_dx|. |tfm_width| is the width in multiples of
-the design size ignoring the target size.
-
-@d _2_16 65536.0 /* $2^{16}$ */
-@d _2_20 1048576.0 /* $2^{20}$ */
-
-@<Global...@>=
-char coding[STRING_LENGTH + 1]; /* a comment describing the font encoding */
-char comment[STRING_LENGTH + 1]; /* a comment describing the font */@#
-
-unsigned long checksum;@#
-
-long pk_total_min_x;
-long pk_total_max_x;
-long pk_total_min_y;
-long pk_total_max_y;@#
-
-int dpi_x; /* printer resolution */
-int dpi_y;
-double ppp_x; /* pixels per point */
-double ppp_y;
-
-
-@
-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.
-
-@<Prototypes@>=
-void write_post(void);
-
-
-@
-@c
-void write_post(void)
- {long special_adr;
- long post_adr;@#
-
- long designsize = design_size * _2_20; /* design size $* 2^{20}$ */@#
-
- int pk_dx;
- long tfm_width;@#
-
- int i;
- long temp;
-
-
- ppp_x = dpi_x / 72.27 * magstep_x;
- ppp_y = dpi_y / 72.27 * magstep_y;@#
-
- pk_total_min_x = pk_offset_x;
- pk_total_max_x = pk_output_size_x + 2 * pk_offset_x;
- pk_total_min_y = pk_offset_y;
- pk_total_max_y = pk_output_size_y + pk_offset_y;@#
-
- pk_dx = pk_width + 2 * pk_offset_x; /* no slant */
- tfm_width = (tfm_output_size_x + 2 * tfm_offset_x) * _2_20;
- /* width in multiples of design size $* 2^{20}$ */@#
-
- @<Special section@>@;
- @<Post section@>@;
- @<Postpost section@>@;
- }
-
-
-@
-\.{XXXn} will be followed by n~bytes representing the length of a string
-which follows immediately. |YYY| is a 32~bit integer which is normally
-connected with the preceding string (but not used here). |special_adr|
-contains the address of the ``special section''. All items here are
-optional.
-
-@d XXX1 239 /* these are all special command bytes */
-@d XXX2 240 /* not used */
-@d XXX3 241 /* not used */
-@d XXX4 242 /* not used */@#
-
-@d YYY 243 /* not used */
-
-@<Special section@>=
- special_adr = ftell(out);@#
-
- if(*coding)
- {fputc(XXX1, out); /* |XXX1| implies a string length |< 256| */
- fputc(strlen(coding), out);
- fputs(coding, out);
- }@#
-
- if(*comment)
- {fputc(XXX1, out);
- fputc(strlen(comment), out);
- fputs(comment, out);
- }
-
-
-@
-All character offsets collected in |char_adr| will be written to the output
-file. |fputl()| writes a 32~bit integer into a file.
-
-|CHAR_LOC0| (and |CHAR_LOC|) is the first byte of a character locator
-(i.e., offset, character code, and width information). |POST| starts the
-postamble, and |post_adr| points to the beginning byte of the postamble.
-
-@d POST 248@#
-
-@d CHAR_LOC 245
-@d CHAR_LOC0 246 /* simplified version of |CHAR_LOC| */
-
-@<Post section@>=
- post_adr = ftell(out);
- fputc(POST, out);
- fputl(special_adr, out);@#
-
- fputl(designsize, out);
- fputl(checksum, out);
- fputl(ppp_x * _2_16, out);
- fputl(ppp_y * _2_16, out);
- fputl(pk_total_min_x, out);
- fputl(pk_total_max_x, out);
- fputl(pk_total_min_y, out);
- fputl(pk_total_max_y, out);@#
-
- char_adr_p = char_adr;@#
-
- if(pk_dx < 256)
- {for(i = 0; i < last_char; i++) /* the character locators */
- {fputc(CHAR_LOC0, out);
- fputc(i, out);
- fputc(pk_dx, out);
- fputl(tfm_width, out);
- fputl(*char_adr_p++, out);
- }
- }
- else /* will only happen if |MAX_CHAR_SIZE >= 256| */
- {for(i = 0; i < last_char; i++)
- {fputc(CHAR_LOC, out);
- fputc(i, out);
- fputl(pk_dx * _2_16, out);
- fputl(0, out);
- fputl(tfm_width, out);
- fputl(*char_adr_p++, out);
- }
- }
-
-
-@
-|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 |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
-|GF_ID| will be next, then comes the address of the postamble section.
-
-Jumping to the postamble, a |POST| byte comes first, then the address of
-the special section, and afterwards all character offsets. These offsets and
-addresses describe the whole file.
-
-@d POSTPOST 249
-@d POSTPOST_ID 223
-
-@<Postpost section@>=
- fputc(POSTPOST, out);
- fputl(post_adr, out);
- fputc(GF_ID, out);
- temp = ftell(out);
- i = (int)(temp % 4) + 4;
- while(i--)
- fputc(POSTPOST_ID, out);
-
-
-@
-\TeX\ wants the most significant byte first.
-
-@<Prototypes@>=
-void fputl(long, FILE *);
-
-
-@
-@c
-void fputl(long num, FILE *f)
- {fputc(num >> 24, f);
- fputc(num >> 16, f);
- fputc(num >> 8, f);
- fputc(num, f);
- }
-
-
-@
-|make_pixel_array()| scales a character into the array |out_char[]| where
-each \\{byte} represents one pixel, contrary to the input file where each
-\\{bit} is used to store the character bitmap. |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 |PIXEL_MAXVAL = 255| for black.
-
-If |EOF| is encountered, |end_of_file| is set and the function returns
-immediately.
-
-@d BLACK 1
-@d WHITE 0@#
-
-@d PIXEL_MAXVAL 255
-@d SCALE 4096
-@d HALFSCALE 2048@#
-
-@d MAX_CHAR_SIZE 1023
-
-@<Global...@>=
-HBF_CHAR code;
-const unsigned char *bitmap;
- /* a proper input bitmap array will be allocated by the HBF API */
-const unsigned char *bP;@#
-
-unsigned char out_char[MAX_CHAR_SIZE * MAX_CHAR_SIZE + 1];
- /* the output bitmap array */
-unsigned char *out_char_p;@#
-
-unsigned char pixelrow[MAX_CHAR_SIZE];
-unsigned char temp_pixelrow[MAX_CHAR_SIZE];
-unsigned char new_pixelrow[MAX_CHAR_SIZE + 1];
- /* we need space to append a white pixel */@#
-int curr_row; /* for |read_row()| if we access the glyph rotated */
-
-long grayrow[MAX_CHAR_SIZE];@#
-
-long s_mag_x, s_mag_y, s_slant;
-
-
-@
-We need to initialize the |grayrow[]| array together with some other
-variables.
-
-Two steps are necessary to compute the |code| if we are in the \mf-like
-mode. Assuming that we search the code \.{0xXXYY}, we first set |code| to
-the value \.{0xXXAA}, where \.{0xAA} is equal to |min_2_byte| (getting
-|offset| as the number of remaining characters to reach the first character
-in our given subfont), then we increment |code| (and decrement |offset|)
-until |offset| equals~0.
-
-@<Initialize variables@>=
- {int col, offset;
-
- if(rotation)
- {int tmp;
-
-
- tmp = input_size_x;
- input_size_x = input_size_y;
- input_size_y = tmp;
- }@#
-
- if(mf_like)
- {target_size_x = design_size * (x_resolution / dpi_x);
- target_size_y = design_size * (x_resolution * y_scale / dpi_y);
- }
- else
- target_size_x = target_size_y = design_size;
- magstep_x = target_size_x / design_size;
- magstep_y = target_size_y / design_size;@#
-
- pk_offset_x = offset_x * magstep_x + 0.5;
- pk_offset_y = offset_y * magstep_y + 0.5;
- tfm_offset_x = offset_x / (dpi_x / 72.27) / design_size;
- tfm_offset_y = offset_y / (dpi_y / 72.27) / design_size;@#
-
- pk_width = input_size_x * mag_x * magstep_x + 0.5; /* without slant */
- pk_output_size_x = input_size_x * mag_x * magstep_x +
- input_size_y * mag_y * magstep_y * slant + 0.5;
- pk_output_size_y = input_size_y * mag_y * magstep_y + 0.5;
- tfm_output_size_x = input_size_x * mag_x /
- (dpi_x / 72.27) / design_size;
- tfm_output_size_y = input_size_y * mag_y /
- (dpi_y / 72.27) / design_size;
- if(pk_output_size_x > MAX_CHAR_SIZE)
- {fprintf(stderr, "Output character box width too big\n");
- exit(1);
- }
- if(pk_output_size_y > MAX_CHAR_SIZE)
- {fprintf(stderr, "Output character box height too big\n");
- exit(1);
- }@#
-
- for(col = 0; col < input_size_x; ++col)
- grayrow[col] = HALFSCALE;@#
-
- if(!mf_like)
- code = (min_char & 0xFF00) + min_2_byte;
- else
- {if((file_number < (unicode ? 0 : 1)) || (file_number >= 0x100))
- {fprintf(stderr, "Invalid subfile number\n");
- exit(1);
- }@#
-
- if(unicode)
- {offset = 0;
- code = file_number * 0x100;
- }
- else
- {offset = (file_number - 1) * 256 % nmb_2_bytes;
- code = (min_char & 0xFF00) + min_2_byte +
- (file_number - 1) * 256 / nmb_2_bytes * 0x100;
- }@#
-
- while(offset--)
- while(!b2_codes[code++ & 0xFF])
- /* eliminate invalid |b2_codes| */
- ;@#
-
- if(code > max_char)
- {fprintf(stderr, "Invalid subfile number\n");
- exit(1);
- }
- }
-
- s_mag_x = mag_x * magstep_x * SCALE;
- s_mag_y = mag_y * magstep_y * SCALE;
- s_slant = slant * SCALE;
- }
-
-
-@
-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.
-
-
-@<Prototypes@>=
-void make_pixel_array(void);
-
-
-@
-@c
-void make_pixel_array(void)
- {unsigned char *prP;
- unsigned char *temp_prP;
- unsigned char *new_prP;
- long *grP;@#
-
- register unsigned char *xP;
- register unsigned char *nxP;@#
-
- register int row, col;
- int rows_read = 0;
- register int need_to_read_row = 1;@#
-
- long frac_row_to_fill = SCALE;
- long frac_row_left = s_mag_y;@#
-
- int no_code = FALSE;
-
-
- prP = pixelrow;
- temp_prP = temp_pixelrow;
- new_prP = new_pixelrow;
- grP = grayrow;
- out_char_p = out_char; /* will be increased by |write_row()| */@#
-
-again:
- if(b2_codes[code & 0xFF]) /* a valid second byte? */
- {if(pk_files)
- {bitmap = hbfGetBitmap(hbf, code);
- bP = bitmap;
- /* will be increased by |read_row()| */@#
-
- if(!bitmap)
- empty_char = TRUE;
- else
- @<Scale row by row@>@;
- }
- }
- else
- no_code = TRUE;@#
-
- if((code & 0xFF) == max_2_byte)
- code += 0xFF - (max_2_byte - min_2_byte); /* go to next plane */
- if(code >= max_char)
- {end_of_file = TRUE;
- return;
- }@#
-
- code++;@#
-
- if(no_code)
- {no_code = FALSE;
- goto again;
- }
- }
-
-
-@
-@<Scale row by row@>=
- {if(pk_output_size_y == input_size_y) /* shortcut Y~scaling if possible */
- temp_prP = prP;@#
-
- curr_row = input_size_y - 1; /* only needed for rotated glyphs */
- for(row = 0; row < pk_output_size_y; ++row)
- {@<Scale Y from |pixelrow[]| into |temp_pixelrow[]|@>@;
- @<Scale X from |temp_pixelrow[]| into |new_pixelrow[]|
- and write it into |out_char[]|@>@;
- }
- }
-
-
-@
-@<Scale Y from |pixelrow[]| into |temp_pixelrow[]|@>=
- if(pk_output_size_y == input_size_y)
- /* shortcut Y~scaling if possible */
- read_row(prP);
- else
- {while(frac_row_left < frac_row_to_fill)
- {if(need_to_read_row)
- if(rows_read < input_size_y)
- {read_row(prP);
- ++rows_read;
- }@#
-
- for(col = 0, xP = prP; col < input_size_x; ++col, ++xP)
- grP[col] += frac_row_left * (*xP);@#
-
- frac_row_to_fill -= frac_row_left;
- frac_row_left = s_mag_y;
- need_to_read_row = 1;
- }@#
-
- @<Produce a temporary row@>@;
- }
-
-
-@
-Now |frac_row_left >= frac_row_to_fill|, so we can produce a row.
-
-@<Produce a temporary row@>=
- if(need_to_read_row)
- if(rows_read < input_size_y)
- {read_row(prP);
- ++rows_read;
- need_to_read_row = 0;
- }@#
-
- for(col = 0, xP = prP, nxP = temp_prP;
- col < input_size_x; ++col, ++xP, ++nxP)
- {register long g;
-
-
- g = grP[col] + frac_row_to_fill * (*xP);
- g /= SCALE;
- if(g > PIXEL_MAXVAL)
- g = PIXEL_MAXVAL;@#
-
- *nxP = g;
- grP[col] = HALFSCALE;
- }@#
-
- frac_row_left -= frac_row_to_fill;
- if(frac_row_left == 0)
- {frac_row_left = s_mag_y;
- need_to_read_row = 1;
- }
- frac_row_to_fill = SCALE;
-
-
-@
-To implement the slant we move the starting point |nxP| to the right
-according to the corresponding |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~|1|---such a large slant would be unusable
-anyway for typesetting purposes.
-
-@<Scale X from |temp_pixelrow[]| into |new_pixelrow[]|
- and write it into |out_char[]|@>=
- if(pk_width == input_size_x && s_slant == 0)
- /* shortcut X~scaling if possible */
- write_row(temp_prP);
- else
- {register long g = HALFSCALE;
- register long frac_col_to_fill = SCALE;
- register long frac_col_left;
- register int need_col = 0;
-
-
- nxP = new_prP;@#
-
- frac_col_left = (pk_output_size_y - row) * s_slant;
- while(frac_col_left >= frac_col_to_fill)
- {*(nxP++) = 0;
- frac_col_left -= frac_col_to_fill;
- }@#
-
- if(frac_col_left > 0)
- frac_col_to_fill -= frac_col_left;@#
-
- for(col = 0, xP = temp_prP; col < input_size_x; ++col, ++xP)
- {frac_col_left = s_mag_x;
- while(frac_col_left >= frac_col_to_fill)
- {if(need_col)
- {++nxP;
- g = HALFSCALE;
- }@#
-
- g += frac_col_to_fill * (*xP);
- g /= SCALE;
- if(g > PIXEL_MAXVAL)
- g = PIXEL_MAXVAL;@#
-
- *nxP = g;
- frac_col_left -= frac_col_to_fill;
- frac_col_to_fill = SCALE;
- need_col = 1;
- }@#
-
- if(frac_col_left > 0)
- {if(need_col)
- {++nxP;
- g = HALFSCALE;
- need_col = 0;
- }@#
-
- g += frac_col_left * (*xP);
- frac_col_to_fill -= frac_col_left;
- }
- }@#
-
- @<Write out a row@>@;
- }
-
-
-@
-@<Write out a row@>=
- if(frac_col_to_fill > 0)
- {--xP;
- g += frac_col_to_fill * (*xP);
- }@#
-
- if(!need_col)
- {g /= SCALE;
- if(g > PIXEL_MAXVAL)
- g = PIXEL_MAXVAL;
- *nxP = g;
- }@#
-
- *(++nxP) = 0; /* append a blank pixel */@#
-
- write_row(new_prP);
-
-
-@
-|read_row()| reads a row from |bitmap[]| and converts it into a graymap row.
-If the |rotation| flag has been set, we get the proper column instead (note
-that in this case |input_size_x| already reflects the width of the rotated
-glyph).
-
-@<Prototypes@>=
-#ifdef __GNUC__
-__inline__
-#endif
-void read_row(unsigned char *);
-
-
-@
-@c
-#ifdef __GNUC__
-__inline__
-#endif
-void read_row(unsigned char *pixelrow)
- {register int col, bitshift, offset;
- register unsigned char *xP;
- register unsigned char item = 0;
-
- if(rotation)
- {bitshift = 7 - (curr_row % 8);
- offset = (input_size_y + 7) / 8;
- bP = bitmap + curr_row / 8;
- for(col = 0, xP = pixelrow; col < input_size_x; ++col, ++xP)
- {*xP = ((*bP >> bitshift) & 1) == 1 ? PIXEL_MAXVAL : 0;
- bP += offset;
- }
- curr_row--;
- }
- else
- {bitshift = -1;
- for(col = 0, xP = pixelrow; col < input_size_x; ++col, ++xP)
- {if(bitshift == -1)
- {item = *(bP++); /* increase input bitmap pointer */
- bitshift = 7;
- }
- *xP = ((item >> bitshift) & 1) == 1 ? PIXEL_MAXVAL : 0;
- --bitshift;
- }
- }
- }
-
-
-@
-|write_row()| converts the graymap back into a bitmap using a simple
-threshold.
-
-@<Global...@>=
-int threshold = 128;
-
-
-@
-@<Prototypes@>=
-#ifdef __GNUC__
-__inline__
-#endif
-void write_row(unsigned char *);
-
-
-@
-@c
-#ifdef __GNUC__
-__inline__
-#endif
-void write_row(unsigned char *pixelrow)
- {register int col;
- register unsigned char *xP;
-
- for(col = 0, xP = pixelrow; col < pk_output_size_x; ++col, ++xP)
- *(out_char_p++) = (*xP >= threshold) ? 1 : 0;
- /* increase output bitmap pointer */
- }
-
-
-@
-Now comes the most interesting routine. The pixel array will be compressed
-in sequences of black and white pixels.
-
-|SKIP0|, |SKIP1|, and |SKIP2| indicate how many blank lines will be skipped.
-|PAINT_(x)| means that the next x~pixels will have the same color, then the
-color changes. |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: |SKIP1|~26 means `skip the next
-26~rows'.
-
-For further details please refer to ``\mf---the program''.
-
-@d PAINT_(x) (x) /* $0 \le x \le 63$ */
-@d PAINT1 64
-@d PAINT2 65
-@d PAINT3 66 /* not used */@#
-
-@d SKIP0 70
-@d SKIP1 71
-@d SKIP2 72
-@d SKIP3 73 /* not used */@#
-
-@d NEW_ROW_(x) ((x) + 74) /* $0 \le x \le 164$ */@#
-
-@d NOOP 244 /* not used */
-
-@<Prototypes@>=
-void write_coding(void);
-
-
-@
-The |goto start| instruction causes some compilers to complain about
-``Unreachable code $\ldots$'' or something similar.
-
-@c
-void write_coding(void)
- {register int count, skip;
- register unsigned char paint;
- register int x, y;
- register unsigned char *cp;
-
- x = 0;
- y = 0;
- cp = out_char + y * pk_output_size_x + x;
- count = skip = 0;
- paint = WHITE;
- goto start;@#
-
- while (y < pk_output_size_y)
- {@<Search blank lines@>@;
-start:
- @<Process rest of line@>@;
- y++;
- }
- }@#
-
-
-@
-@<Search blank lines@>=
- count = 0;
- x = 0;
- cp = out_char + y * pk_output_size_x + x;@#
-
- while(x < pk_output_size_x)
- {if(*cp == paint)
- count++;
- else
- {if(skip == 0)
- {if(count <= 164)
- fputc(NEW_ROW_(count), out);
- else
- {fputc(SKIP0, out);@#
-
- if(count < 256)
- {fputc(PAINT1, out);
- fputc(count, out);
- }
- else
- {fputc(PAINT2, out);
- fputc(count >> 8, out);
- fputc(count & 0xFF, out);
- }
- }
- }
- else
- {if(skip == 1)
- fputc(SKIP0, out);
- else
- {if(skip < 256)
- {fputc(SKIP1, out);
- fputc(skip, out);
- }
- else
- {fputc(SKIP2, out);
- fputc(skip >> 8, out);
- fputc(skip & 0xFF, out);
- }
- }
- skip = 0;
- if(count < 64)
- fputc(PAINT_(count), out);
- else if(count < 256)
- {fputc(PAINT1, out);
- fputc(count, out);
- }
- else
- {fputc(PAINT2, out);
- fputc(count >> 8, out);
- fputc(count & 0xFF, out);
- }
- }
- count = 0;
- paint = BLACK;
- break;
- }
- x++;
- cp++;
- }
- if(x >= pk_output_size_x)
- {skip++;
- y++;
- continue;
- }
-
-
-@
-@<Process rest of line@>=
- while(x < pk_output_size_x)
- {if(*cp == paint)
- count++;
- else
- {if(count < 64)
- fputc(PAINT_(count), out);
- else if(count < 256)
- {fputc(PAINT1, out);
- fputc(count, out);
- }
- else
- {fputc(PAINT2, out);
- fputc(count >> 8, out);
- fputc(count & 0xFF, out);
- }
- count = 1;
- paint = BLACK - paint;
- }
- x++;
- cp++;
- }
- if(paint == BLACK)
- {if(count < 64)
- fputc(PAINT_(count), out);
- else if(count < 256)
- {fputc(PAINT1, out);
- fputc(count, out);
- }
- else
- {fputc(PAINT2, out);
- fputc(count >> 8, out);
- fputc(count & 0xFF, out);
- }
- paint = WHITE;
- }
-
-
-
-@* 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.
-
-@<Prototypes@>=
-void write_pl(void);
-
-
-@
-@c
-void write_pl(void)
- {int i, pos;
- char output_file[FILE_NAME_LENGTH + 1];
- long t, sc;
- char *s;
- char tfm_header[] = "Created by hbf2gf";
-
- file_number--; /* for \mf-like mode */@#
-
- if(mf_like)
- {if(unicode)
- sprintf(output_file, "%s%02x.pl", output_name, file_number);
- else
- sprintf(output_file, "%s%02i.pl", output_name, file_number);
- }
- else
- sprintf(output_file, "%s.pl", output_name);@#
-
- if(!(out = fopen(output_file, WRITE_TXT)))
- {fprintf(stderr, "Couldn't open `%s'\n", output_file);
- exit(1);
- }
- if(!quiet)
- printf("\nWriting `%s'\n", output_file);@#
-
- fprintf(out,@/
- "\n(FAMILY %s%d)"@/
- "\n(CODINGSCHEME CJK-%s)",
- output_name, file_number, font_encoding);@#
-
- fprintf(out,@/
- "\n(DESIGNSIZE R %.6f)"@/
- "\n(COMMENT DESIGNSIZE IS IN POINTS)"@/
- "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"@/
- "\n(CHECKSUM O %lo)"@/
- "\n(FONTDIMEN"@/
- "\n (SLANT R %.6f)"@/
- "\n (SPACE R 0.0)"@/
- "\n (STRETCH R 0.0)"@/
- "\n (SHRINK R 0.0)"@/
- "\n (XHEIGHT R 1.0)"@/
- "\n (QUAD R 1.0)"@/
- "\n (EXTRASPACE R 0.0)"@/
- "\n )", design_size, checksum, slant);@#
-
- s = tfm_header;
- i = strlen(s);
- t = ((long)i) << 24;
- sc = 16;
- pos = 18;@#
-
- fprintf(out, "\n");
- while(i > 0)
- {t |= ((long)(*(unsigned char *)s++)) << sc;
- sc -= 8;
- if(sc < 0)
- {fprintf(out, "\n(HEADER D %d O %lo)", pos, t);
- t = 0;
- sc = 24;
- pos++;
- }
- i--;
- }
- if(t)
- fprintf(out, "\n(HEADER D %d O %lo)", pos, t);
- fprintf(out, "\n");@#
-
- for(i = 0; i < 256; i++)
- {fprintf(out,@/
- "\n(CHARACTER O %o"@/
- "\n (CHARWD R %.6f)"@/
- "\n (CHARHT R %.6f)"@/
- "\n (CHARDP R %.6f)"@/
- "\n (CHARIC R %.6f)"@/
- "\n )",@/
- i,
- tfm_output_size_x + 2 * tfm_offset_x,
- tfm_output_size_y + tfm_offset_y,
- -tfm_offset_y,
- slant * (tfm_output_size_y + tfm_offset_y));
- }@#
-
- fclose(out);
- }
-
-
-
-@* The extended virtual font file for \Om.
-The following is very similar to |write_pl()|; we simply map the glyphs
-of the subfonts back to the original encoding positions.
-
-@<Prototypes@>=
-void write_ovp(void);
-
-
-@
-@c
-void write_ovp(void)
- {int c, i, nmb_subfonts, remainder, count, pos;
- char output_file[FILE_NAME_LENGTH + 1];
- long t, sc;
- char *s;
- char ofm_header[] = "Created by hbf2gf";
-
- nmb_subfonts = ((max_char - (min_char & 0xFF00)) / 256 * nmb_2_bytes)
- / 256 + 1;
- remainder = ((max_char - (min_char & 0xFF00)) / 256 * nmb_2_bytes)
- % 256;@#
-
- /* correction for the last incomplete second byte range */
- for(count = 0; count < (max_char & 0xFF); count++)
- if(b2_codes[count])
- remainder++;
- if(remainder >= 256)
- nmb_subfonts++;@#
-
- sprintf(output_file, "%s.ovp", output_name);@#
-
- if(!(out = fopen(output_file, WRITE_TXT)))
- {fprintf(stderr, "Couldn't open `%s'\n", output_file);
- exit(1);
- }
- if(!quiet)
- printf("\nWriting `%s'\n", output_file);@#
-
- fprintf(out,@/
- "\n(VTITLE Omega virtual font created by hbf2gf)"@/
- "\n(DESIGNSIZE R %.6f)"@/
- "\n(COMMENT DESIGNSIZE IS IN POINTS)"@/
- "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"@/
- "\n(CHECKSUM O %lo)"@/
- "\n(FONTDIMEN"@/
- "\n (SLANT R %.6f)"@/
- "\n (SPACE R 0.0)"@/
- "\n (STRETCH R 0.0)"@/
- "\n (SHRINK R 0.0)"@/
- "\n (XHEIGHT R 1.0)"@/
- "\n (QUAD R 1.0)"@/
- "\n (EXTRASPACE R 0.0)"@/
- "\n )", design_size, checksum, slant);@#
-
- s = ofm_header;
- i = strlen(s);
- t = ((long)i) << 24;
- sc = 16;
- pos = 18;@#
-
- fprintf(out, "\n");
- while(i > 0)
- {t |= ((long)(*(unsigned char *)s++)) << sc;
- sc -= 8;
- if(sc < 0)
- {fprintf(out, "\n(HEADER D %d O %lo)", pos, t);
- t = 0;
- sc = 24;
- pos++;
- }
- i--;
- }
- if(t)
- fprintf(out, "\n(HEADER D %d O %lo)", pos, t);
- fprintf(out, "\n");@#
-
- for(i = 0; i < nmb_subfonts; i++)
- {fprintf(out,@/
- "\n(MAPFONT D %i"@/
- "\n (FONTNAME %s%02i)"@/
- "\n (FONTCHECKSUM O %lo)"@/
- "\n (FONTAT R 1.0)"@/
- "\n (FONTDSIZE R %.6f)"@/
- "\n )", i, output_name, i + 1, checksum, design_size);
- }@#
-
- for(c = min_char, i = 0, count = 0; c <= max_char; c++)
- {if(b2_codes[c & 0xFF] == VALID_SUBCODE)
- {fprintf(out,@/
- "\n(CHARACTER O %o"@/
- "\n (CHARWD R %.6f)"@/
- "\n (CHARHT R %.6f)"@/
- "\n (CHARDP R %.6f)"@/
- "\n (CHARIC R %.6f)"@/
- "\n (MAP"@/
- "\n (SELECTFONT D %i)"@/
- "\n (SETCHAR O %o)"@/
- "\n )"@/
- "\n )",@/
- c,
- tfm_output_size_x + 2 * tfm_offset_x,
- tfm_output_size_y + tfm_offset_y,
- -tfm_offset_y,
- slant * (tfm_output_size_y + tfm_offset_y),
- i,
- count);@#
-
- count++;
- if(count == 256)
- {count = 0;
- i++;
- }
- }
- else
- continue;
- }@#
-
- fclose(out);
- }
-
-
-
-@* 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 |nmb_files| times. The name of the job file is
-|output_name|.
-
-@d EXTENSION_LENGTH 8 /* the maximal length of a file extension */@#
-
-@d GFTOPK_NAME "gftopk"
-@d PLTOTF_NAME "pltotf"
-@d OVP2OVF_NAME "ovp2ovf"
-
-@<Global...@>=
-char job_extension[EXTENSION_LENGTH + 1];
-char rm_command[STRING_LENGTH + 1];
-char cp_command[STRING_LENGTH + 1];
-char pk_directory[STRING_LENGTH + 1];
-char tfm_directory[STRING_LENGTH + 1];@#
-
-int ofm_file = FALSE;
-
-
-@
-@<Prototypes@>=
-void write_job(void);
-
-
-@
-@c
-void write_job(void)
- {FILE *out;
- int i, j;
- char buffer[FILE_NAME_LENGTH + 1];
-
-
- strcpy(buffer, output_name);
- strcat(buffer, job_extension);
- if(!(out = fopen(buffer, WRITE_TXT)))
- {fprintf(stderr, "Couldn't open `%s'\n", buffer);
- exit(1);
- }
- if(!quiet)
- printf("\nWriting `%s'\n", buffer);@#
-
- if(pk_files)
- {if(unicode)
- {for(i = (min_char >> 8), j = 0; j < nmb_files; i++, j++)
- fprintf(out,@/
- "%s %s%02x.gf %s%s%02x.%.0ipk\n"@/
- "%s %s%02x.gf\n",@/
- GFTOPK_NAME, output_name, i,@/
- pk_directory, output_name, i,
- long_extension ? (int)(dpi_x * magstep_x + 0.5) : 0,@/
- rm_command, output_name, i);
- }
- else
- {for(i = 1; i <= nmb_files; i++)
- fprintf(out,@/
- "%s %s%02i.gf %s%s%02i.%.0ipk\n"@/
- "%s %s%02i.gf\n",@/
- GFTOPK_NAME, output_name, i,@/
- pk_directory, output_name, i,
- long_extension ? (int)(dpi_x * magstep_x + 0.5) : 0,@/
- rm_command, output_name, i);
- }
- }@#
-
- if(tfm_files)
- {fprintf(out,@/
- "\n"@/
- "%s %s.pl %s.tfm\n"@/
- "%s %s.pl\n"@/
- "\n",@/
- PLTOTF_NAME, output_name, output_name,@/
- rm_command, output_name);@#
-
- if(unicode)
- {for(i = (min_char >> 8), j = 0; j < nmb_files; i++, j++)
- fprintf(out,@/
- "%s %s.tfm %s%s%02x.tfm\n",@/
- cp_command, output_name,
- tfm_directory, output_name, i);
- }
- else
- {for(i = 1; i <= nmb_files; i++)
- fprintf(out,@/
- "%s %s.tfm %s%s%02i.tfm\n",@/
- cp_command, output_name,
- tfm_directory, output_name, i);
- }@#
-
- fprintf(out,@/
- "\n"@/
- "%s %s.tfm",@/
- rm_command, output_name);
- }@#
-
- if(ofm_file)
- {fprintf(out,@/
- "\n"@/
- "%s %s.ovp %s.ovf %s.ofm\n"@/
- "%s %s.ovp\n"@/
- "\n",@/
- OVP2OVF_NAME, output_name, output_name, output_name,@/
- rm_command, output_name);
- }@#
-
- fclose(out);
- }
-
-
-
-@* 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 |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 |0 <= slant <= 1|
- are allowed. \cr
- & Default is |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~|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} $=$ |1.0|
- \cr
- threshold & A value between |1| and |254| defining a
- threshold for converting the internal \cr
- & graymap into the output bitmap; lower values
- cut more pixels. \cr
- & Default value is |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~|-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 |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 |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 |pk_output_size_x| and |pk_output_size_y| must not exceed
-|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
-|x_resolution| and |y_scale| from the command line. \.{nmb\_fonts} will
-always be set to~|1|; no job file will be created.
-
-
-@
-@d PRINTER_MIN_RES_X 50
-@d PRINTER_MIN_RES_Y 50
-
-@<Global...@>=
-char Buffer[STRING_LENGTH + 1];
-
-
-@
-@<Prototypes@>=
-void read_config(void);
-
-
-@
-If |config_file| isn't found in \mf-like mode we assume that the font
-isn't a HBF font at all.
-
-@c
-void read_config(void)
- {HBF_BBOX *boxp;
- char *real_config_file;
-
-
- @<Handle extension@>@;@#
-
- real_config_file = TeX_search_cfg_file(config_file);
- if(!real_config_file)
- {if(mf_like)
- {if(!quiet)
- printf("Couldn't find `%s'\n", config_file);
- exit(2);
- }
- else
- {fprintf(stderr, "Couldn't find `%s'\n", config_file);
- exit(1);
- }
- }@#
-
- if(!(config = fopen(real_config_file, READ_TXT)))
- {if(!testing)
- {fprintf(stderr, "Couldn't open `%s'\n", config_file);
- exit(1);
- }
- else /* We reach this point only if no searching library is used */
- {if(!quiet)
- fprintf(stderr, "Couldn't find or open `%s'\n", config_file);
- exit(2);
- }
- }@#
-
- if(testing)
- {if(!quiet)
- printf("%s\n", real_config_file);
- exit(0);
- }
-
- @<Necessary parameters@>@;
- @<Optional parameters@>@;@#
-
- @<Get code range@>@;
- @<Get sub code range@>@;@#
-
- fclose(config);
- }
-
-
-@
-Here we check whether we have to add an extension.
-
-@<Handle extension@>=
- {int i, lastext = -1;
-
- for(i = 0; config_file[i]; i++)
- if(config_file[i] == '.')
- lastext = i;
- else if (config_file[i] == '/' ||
- config_file[i] == ':' ||
- config_file[i] == '\\')
- lastext = -1;@#
-
- if(lastext == -1)
- strcat(config_file, ".cfg");
- }
-
-
-@
-@<Necess...@>=
- {char hbf_header[STRING_LENGTH + 1];
- char *real_hbf_header;
-
- if(!fsearch("hbf_header"))
- config_error("hbf_header");
- else
- strcpy(hbf_header, Buffer);@#
-
- real_hbf_header = TeX_search_hbf_file(hbf_header);
- if(!real_hbf_header)
- {fprintf(stderr, "Couldn't find `%s'\n", hbf_header);
- exit(1);
- }@#
-
- hbfDebug = 1; /* we activate error messages of the HBF API
- while scanning the HBF header file */@#
-
- if(!(hbf = hbfOpen(real_hbf_header)))
- exit(1);@#
-
- hbfDebug = 0;@#
-
- boxp = hbfBitmapBBox(hbf);
- input_size_x = boxp->hbf_height; /* will be checked later for rotation */
- input_size_y = boxp->hbf_width;
- font_encoding = hbfProperty(hbf, "HBF_CODE_SCHEME");@#
-
- if(!fsearch("output_name"))
- config_error("output_name");
- else
- strcpy(output_name, Buffer);
- }
-
-
-@
-@<Global...@>=
-int offset_x;
-int offset_y;@#
-
-HBF_CHAR user_min_char;
-int have_min_char = FALSE;
-
-@
-@<Opt...@>=
- {if(fsearch("nmb_files"))
- nmb_files = atoi(Buffer);
- if(fsearch("unicode"))
- if(Buffer[0] == 'y' || Buffer[0] == 'Y')
- unicode = TRUE;
- if(fsearch("min_char"))
- {user_min_char = strtoul(Buffer, (char **)NULL, 0);
- have_min_char = TRUE;
- }@#
-
- if(!mf_like)
- {if(fsearch("pk_files"))
- if(Buffer[0] == 'n' || Buffer[0] == 'N')
- pk_files = FALSE;
- if(fsearch("tfm_files"))
- if(Buffer[0] == 'n' || Buffer[0] == 'N')
- tfm_files = FALSE;
- if(fsearch("ofm_file"))
- if(Buffer[0] == 'y' || Buffer[0] == 'Y')
- ofm_file = TRUE;
- if(fsearch("long_extension"))
- if(Buffer[0] == 'n' || Buffer[0] == 'N')
- long_extension = FALSE;
- }@#
-
- if(fsearch("slant"))
- slant = atof(Buffer);
- if(slant < 0.0 || slant > 1.0)
- {fprintf(stderr, "Invalid slant\n");
- exit(1);
- }
- if(fsearch("rotation"))
- if(Buffer[0] == 'y' || Buffer[0] == 'Y')
- rotation = TRUE;@#
-
- if(fsearch("mag_x"))
- mag_x = atof(Buffer);
- if(fsearch("mag_y"))
- mag_y = atof(Buffer);
- if(!mag_x && !mag_y)
- {mag_x = 1.0;
- mag_y = 1.0;
- }
- if(mag_x && !mag_y)
- mag_y = mag_x;
- if(mag_y && !mag_x)
- mag_x = mag_y;
- if(mag_x <= 0.0)
- {fprintf(stderr, "Invalid horizontal magnification\n");
- exit(1);
- }
- if(mag_y <= 0.0)
- {fprintf(stderr, "Invalid vertical magnification\n");
- exit(1);
- }@#
-
- if(fsearch("dpi_x"))
- dpi_x = atoi(Buffer);
- if(fsearch("dpi_y"))
- dpi_y = atoi(Buffer);
- if(!dpi_x && !dpi_y)
- {dpi_x = 300;
- dpi_y = 300;
- }
- if(dpi_x && !dpi_y)
- dpi_y = dpi_x;
- if(dpi_y && !dpi_x)
- dpi_x = dpi_y;
- if(dpi_x <= PRINTER_MIN_RES_X)
- {fprintf(stderr, "Invalid horizontal printer resolution\n");
- exit(1);
- }
- if(dpi_y <= PRINTER_MIN_RES_Y)
- {fprintf(stderr, "Invalid vertical printer resolution\n");
- exit(1);
- }@#
-
- if(fsearch("design_size"))
- design_size = atof(Buffer);@#
-
- if(fsearch("x_offset"))
- offset_x = atoi(Buffer);
- else
- offset_x = rotation ? 0 : (boxp->hbf_xDisplacement * mag_x + 0.5);
- if(fsearch("y_offset"))
- offset_y = atoi(Buffer);
- else
- offset_y = rotation ? 0 : (boxp->hbf_yDisplacement * mag_y + 0.5);
- if(!fsearch("comment"))
- comment[0] = '\0';
- else
- strcpy(comment, Buffer);@#
-
- if(fsearch("threshold"))
- threshold = atoi(Buffer);
- if(threshold <= 0 || threshold >= 255)
- {fprintf(stderr, "Invalid threshold\n");
- exit(1);
- }@#
-
- if(!fsearch("checksum"))
- checksum = 0;
- else
- checksum = strtoul(Buffer, (char **)NULL, 0);@#
-
- if(!fsearch("coding"))
- coding[0] = '\0';
- else
- strcpy(coding, Buffer);@#
-
- if(!fsearch("pk_directory"))
- pk_directory[0] = '\0';
- else
- strcpy(pk_directory, Buffer);@#
-
- if(!fsearch("tfm_directory"))
- tfm_directory[0] = '\0';
- else
- strcpy(tfm_directory, Buffer);@#
-
- if(fsearch("rm_command"))
- strcpy(rm_command, Buffer);
- else
- strcpy(rm_command, "rm");@#
-
- if(fsearch("cp_command"))
- strcpy(cp_command, Buffer);
- else
- strcpy(cp_command, "cp");@#
-
- if(!fsearch("job_extension"))
- job_extension[0] = '\0';
- else
- {strncpy(job_extension, Buffer, EXTENSION_LENGTH);
- job_extension[EXTENSION_LENGTH] = '\0';
- }
- }
-
-
-@
-The function |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 |min_char| has been supplied in the configuration file, we use that
-value instead.
-
-@<Global...@>=
-HBF_CHAR min_char, max_char;
-
-
-@
-@<Get code range@>=
- {const void *cp;
- HBF_CHAR dummy;
-
- cp = hbfGetCodeRange(hbf, NULL, &min_char, &max_char);
- for(; cp != NULL; cp = hbfGetCodeRange(hbf, cp, &dummy, &max_char))
- ;@#
-
- if(have_min_char)
- min_char = user_min_char;
- }
-
-
-@
-The function |hbfGetByte2Range()| is an extension to the HBF API.
-
-Successive calls return the byte~2 ranges in ascending order. We raise
-|VALID_SUBCODE| in the array |b2_codes[]| for all characters in subcode
-ranges.
-
-@d VALID_SUBCODE 1
-
-@<Global...@>=
-char b2_codes[256];
-unsigned char min_2_byte, max_2_byte;
-int nmb_2_bytes = 0;
-
-
-@
-@<Get sub code range@>=
- {const void *b2r;
- unsigned char dummy;
- int i;
-
- for(i = 0; i < 256; i++)
- b2_codes[i] = 0;@#
-
- b2r = hbfGetByte2Range(hbf, NULL, &min_2_byte, &max_2_byte);
- dummy = min_2_byte;
- for(; b2r != NULL; b2r = hbfGetByte2Range(hbf, b2r, &dummy, &max_2_byte))
- {for(i = dummy; i <= max_2_byte; i++)
- b2_codes[i] = VALID_SUBCODE;
- }@#
-
- for(i = 0; i < 256; i++) /* compute the number of valid |b2_codes| */
- if(b2_codes[i] == VALID_SUBCODE)
- nmb_2_bytes++;
- }
-
-
-@
-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 (|'\n'|). It also checks the presence of a parameter and fills
-|Buffer| if existent. |fsearch()| returns~1 on success.
-
-@<Prototypes@>=
-int fsearch(const char *);
-
-
-@
-@c
-int fsearch(const char *search_string)
- {char *P, p;
- const char *Q;
- char temp_buffer[STRING_LENGTH + 1];
- char env_name[STRING_LENGTH + 1];
- char *env_p;
- char *env_value;
- char *Buf_p;
- int Ch, ch, old_ch = '\n';
- int count = STRING_LENGTH;
-
- rewind(config); /* we start at offset~0 */@#
-
- do
- {Q = search_string;
- p = tolower(*Q);
- Ch = fgetc(config);
- ch = tolower(Ch);
- while(!(ch == p && old_ch == '\n') && Ch != EOF)
- /* search first character of |search_string|;
- |'\n'| must be the character before */
- {old_ch = ch;
- Ch = fgetc(config);
- ch = tolower(Ch);
- }@#
-
- for(;;)
- {if(*(++Q) == '\0')
- if((Ch = fgetc(config)) == ' ' || Ch == '\t')
- /* there must be a space or a tab stop after the keyword */
- goto success;
- Ch = fgetc(config);
- if(tolower(Ch) != tolower(*Q))
- break;
- }
- }
- while(Ch != EOF);@#
-
- return 0;@#
-
-success:
- P = temp_buffer;@#
-
- while((Ch = fgetc(config)) == ' ' || Ch == '\t')
- /* remove leading blanks and tabs */
- ;
- while(Ch != '\n' && --count > 0 && Ch != EOF) /* fill |Buffer| */
- {*P++ = Ch;
- Ch = fgetc(config);
- }
- *P = '\0';@#
-
- if (*temp_buffer)
- @<Check for environment variables@>@;
- else
- *Buffer = '\0';@#
-
- return (*Buffer) ? 1 : 0; /* is there something in the buffer? */
- }
-
-
-@
-To make the configuration file more flexible we allow environment variables
-in the arguments. We scan the parameter stored in |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
-|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 |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.
-
-@<Check for environment variables@>=
- {P = temp_buffer;
- Buf_p = Buffer;
- count = STRING_LENGTH - 1;@#
-
- while(*P && count > 0)
- {env_p = env_name;@#
-
- if(*P == '$')
- {P++;
- if(*P == '$')
- {*(Buf_p++) = *(P++);
- count--;
- continue;
- }
- while(*P == '{') @q } @>
- P++;
- if(!(isalpha(*P) || *P == '_'))
- {fprintf(stderr,@/
- "Invalid environment variable name in configuration file\n");
- exit(1);
- }
- *(env_p++) = *(P++);
- while(*P)
- {if(isalnum(*P) || *P == '_')
- *(env_p++) = *(P++);
- else
- {@q { @> while(*P == '}')
- P++;
- *env_p = '\0';
- break;
- }
- }@#
-
- env_value = getenv(env_name);
- if(env_value) /* append the environment value to |Buffer| */
- {while(*env_value && count > 0)
- {*(Buf_p++) = *(env_value++);
- count--;
- }
- }
- }
- else
- {*(Buf_p++) = *(P++);
- count--;
- }
- }
- *Buf_p = '\0';
- }
-
-
-@
-If an error occurs, |config_error()| will leave the program with an error
-message.
-
-@<Prototypes@>=
-void config_error(const char *);
-
-
-@
-@c
-void config_error(const char *message)
- {fprintf(stderr, "Couldn't find `%s' entry in configuration file\n",
- message);
- exit(1);
- }
-
-
-
-@* File searching.
-
-We support three searching engines: emtexdir, kpathsea, and MiKTeX (which is
-a Win32 port of kpathsea). For emtexdir, define |HAVE_EMTEXDIR| while
-compiling. For kpathsea, define |HAVE_LIBKPATHSEA|. For MikTeX, define
-|HAVE_MIKTEX|. If none of these macros is defined, a simple |fopen()| will
-be used instead.
-
-@<Include files@>=
-#if defined(HAVE_LIBKPATHSEA)
-#include "kpathsea/kpathsea.h"
-
-#elif defined(HAVE_EMTEXDIR)
-#include "emtexdir.h"
-
-#elif defined(HAVE_MIKTEX)
-#include "miktex.h"
-#endif
-
-@
-@<Global variables@>=
-#if defined(HAVE_EMTEXDIR)
-char emtex_version_string[] = "emTeXdir";
-#elif !defined(HAVE_MIKTEX)
-char no_version_string[] = "no search library";
-#endif
-
-
-@
-@<Prototypes@>=
-const char *TeX_search_version(void);
-
-
-@
-@c
-const char *TeX_search_version(void)
- {
-#if defined(HAVE_LIBKPATHSEA)
- return kpathsea_version_string;
-#elif defined(HAVE_EMTEXDIR)
- return emtex_version_string;
-#elif defined(HAVE_MIKTEX)
- char buf[200];
-
- strcpy(buf, "MiKTeX ");
- miktex_get_miktex_version_string_ex(buf + 7, sizeof (buf) - 7);
-
- return buf;
-#else
- return no_version_string;
-#endif
- }
-
-
-@
-@s emtex_dir int
-
-@<Global variables@>=
-#ifdef HAVE_EMTEXDIR
-struct emtex_dir cfg_path, hbf_path;
-#endif
-
-
-@
-@<Prototypes@>=
-#ifdef HAVE_EMTEXDIR
-extern int setup_list(struct emtex_dir *, char *, const char *, unsigned);
-int dir_setup(struct emtex_dir *, const char *, const char *, unsigned);
-char *file_find(char *, struct emtex_dir *);
-#endif
-
-
-@
-We slightly modify |emtex_dir_setup()| (from the file \.{emtexdir.c}) to
-output a warning in case the environment variable |env| isn't set properly.
-
-@c
-#ifdef HAVE_EMTEXDIR
-int dir_setup(ed, env, dir, flags)
- struct emtex_dir *ed;
- const char *env;
- const char *dir;
- unsigned flags;
-
- {const char *val;
- char path[260];
-
- ed->alloc = 0;
- ed->used = 0;
- ed->list = NULL;@#
-
- if(env != NULL && (val = getenv(env)) != NULL)
- return setup_list(ed, path, val, flags);
- else
- fprintf(stderr,
- "Environment variable `%s' not set; use current directory\n",
- env);@#
-
- return TRUE;
- }
-
-
-@
-@<Global variables@>=
-char name_buffer[FILE_NAME_LENGTH + 1];
-
-
-@
-@c
-char *file_find(name, list)
- char *name;
- struct emtex_dir *list;
-
- {if(emtex_dir_find(name_buffer, sizeof(name_buffer), list, name, EDF_CWD))
- return name_buffer;@#
-
- return NULL;
- }
-#endif
-
-
-@
-For emtexdir we use the environment variables \.{HBFCFG} and \.{HBFONTS} for
-configuration resp.\ HBF header files.
-
-@<Initialize \TeX\ file searching@>=
-#if defined(HAVE_LIBKPATHSEA)
- kpse_set_program_name(argv[0], "hbf2gf");
- kpse_init_prog("HBF2GF", 300, "cx", "cmr10");@#
-
-#elif defined(HAVE_EMTEXDIR)
- if(!dir_setup(&cfg_path, "HBFCFG", NULL, EDS_BANG))
- {fprintf(stderr,
- "Couldn't setup search path for configuration files\n");
- exit(1);
- }
- if(!dir_setup(&hbf_path, "HBFONTS", NULL, EDS_BANG))
- {fprintf(stderr,
- "Couldn't setup search path for HBF header files\n");
- exit(1);
- }
-#endif
-
-
-@
-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.
-
-@<Prototypes@>=
-char *TeX_search_cfg_file(char *);
-char *TeX_search_hbf_file(char *);
-
-
-@
-@c
-#if defined(HAVE_LIBKPATHSEA)
-char *TeX_search_cfg_file(char *name)
- {
- return kpse_find_file(name, kpse_program_text_format, TRUE);
- }@#
-
-
-char *TeX_search_hbf_file(char *name)
- {
- return kpse_find_file(name, kpse_miscfonts_format, TRUE);
- }@#
-
-
-#elif defined(HAVE_EMTEXDIR)
-char *TeX_search_cfg_file(char *name)
- {return file_find(name, &cfg_path);
- }@#
-
-
-char *TeX_search_hbf_file(char *name)
- {return file_find(name, &hbf_path);
- }@#
-
-
-#elif defined(HAVE_MIKTEX)
-char *TeX_search_cfg_file(char *name)
- {char result[_MAX_PATH];
-
- if (!miktex_find_input_file("hbf2gf", *name, result))
- return 0;
- return strdup(result);
- }@#
-
-
-char *TeX_search_hbf_file(char *name)
- {char result[_MAX_PATH];
-
-
- if (!miktex_find_miscfont_file(*name, result))
- return 0;
- return strdup(result);
- }@#
-
-
-#else
-char *TeX_search_cfg_file(char *name)
- {return name;
- }@#
-
-
-char *TeX_search_hbf_file(char *name)
- {return name;
- }
-#endif
-
-
-
-@* 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 |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}
-
-
-
-@* Index.