summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/omegaware
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2009-11-10 10:27:09 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2009-11-10 10:27:09 +0000
commit5e8e9500102800e68c9e7fcac9e85c1668b71a36 (patch)
tree81d79ac70ffbb127e8063f18c8f55475ca169ee1 /Build/source/texk/web2c/omegaware
parente6a9c88ada2f11dd61e4c4e39dff84944bed5787 (diff)
towards TL2010: texk/web2c
git-svn-id: svn://tug.org/texlive/trunk@15964 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/omegaware')
-rw-r--r--Build/source/texk/web2c/omegaware/ChangeLog72
-rw-r--r--Build/source/texk/web2c/omegaware/README10
-rw-r--r--Build/source/texk/web2c/omegaware/am/omegaware.am100
-rwxr-xr-xBuild/source/texk/web2c/omegaware/level1.test10
-rw-r--r--Build/source/texk/web2c/omegaware/odvicopy.ch89
-rwxr-xr-xBuild/source/texk/web2c/omegaware/odvicopy.test56
-rw-r--r--Build/source/texk/web2c/omegaware/odvicopy.web110
-rw-r--r--Build/source/texk/web2c/omegaware/odvitype.ch37
-rwxr-xr-xBuild/source/texk/web2c/omegaware/odvitype.test15
-rw-r--r--Build/source/texk/web2c/omegaware/odvitype.web14
-rw-r--r--Build/source/texk/web2c/omegaware/ofm2opl.ch26
-rw-r--r--Build/source/texk/web2c/omegaware/ofm2opl.web87
-rwxr-xr-xBuild/source/texk/web2c/omegaware/ofonts.test60
-rwxr-xr-xBuild/source/texk/web2c/omegaware/omfonts.test28
-rw-r--r--Build/source/texk/web2c/omegaware/opl2ofm.ch20
-rw-r--r--Build/source/texk/web2c/omegaware/opl2ofm.web634
-rw-r--r--Build/source/texk/web2c/omegaware/otangle.ch29
-rwxr-xr-xBuild/source/texk/web2c/omegaware/otangle.test2
-rw-r--r--Build/source/texk/web2c/omegaware/otangle.web2
-rw-r--r--Build/source/texk/web2c/omegaware/ovf2ovp.ch62
-rw-r--r--Build/source/texk/web2c/omegaware/ovf2ovp.web89
-rw-r--r--Build/source/texk/web2c/omegaware/ovp2ovf.ch18
-rw-r--r--Build/source/texk/web2c/omegaware/ovp2ovf.web647
-rwxr-xr-xBuild/source/texk/web2c/omegaware/specialhex.test22
-rw-r--r--Build/source/texk/web2c/omegaware/tests/Cherokee.pl420
-rw-r--r--Build/source/texk/web2c/omegaware/tests/OCherokee.ovp790
-rw-r--r--Build/source/texk/web2c/omegaware/tests/level1.opl24
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd0.dtl64
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd0.dvibin0 -> 556 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd0.typ91
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd1.dvibin0 -> 584 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd1.typ91
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd2.dvibin0 -> 460 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd2.typ99
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd3.dvibin0 -> 264 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontd3.typ76
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr0.pl47
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr0.tfmbin0 -> 208 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr1.pl27
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr1.tfmbin0 -> 172 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr1.vfbin0 -> 76 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr1.vpl40
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr2.ofmbin0 -> 212 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr2.opl29
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr2.ovfbin0 -> 92 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr2.ovp42
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr3.ofmbin0 -> 408 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr3.opl101
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr3.ovfbin0 -> 92 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontr3.ovp114
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv4.pl47
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv4.tfmbin0 -> 216 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv4.vfbin0 -> 172 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv4.vpl88
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv5.ofmbin0 -> 280 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv5.opl49
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv5.ovfbin0 -> 220 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv5.ovp90
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv6.ofmbin0 -> 488 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv6.opl121
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv6.ovfbin0 -> 220 bytes
-rw-r--r--Build/source/texk/web2c/omegaware/tests/ofontv6.ovp162
-rw-r--r--Build/source/texk/web2c/omegaware/tests/specialhex.ovp34
63 files changed, 3860 insertions, 1025 deletions
diff --git a/Build/source/texk/web2c/omegaware/ChangeLog b/Build/source/texk/web2c/omegaware/ChangeLog
index d40681925d0..322d35cfd79 100644
--- a/Build/source/texk/web2c/omegaware/ChangeLog
+++ b/Build/source/texk/web2c/omegaware/ChangeLog
@@ -1,3 +1,36 @@
+2009-09-29 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * opl2ofm.web, ovp2ovf.web: Rearrange property name codes to
+ simplify checking for legal properties.
+
+2009-09-28 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * o*.web, o*.ch: Remove trailing blanks.
+
+2009-09-26 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ofm2opl.web, opl2ofm.web, ovf2ovp.web, ovp2ovf.web: Bugfix.
+ Don't forget to output the mvalues.
+
+ * opl2ofm.web, ovp2ovf.web: Bugfix. Check input parameters for
+ character tables (ivalue & Co), fix table size computation.
+ Use out_int() for values that might be negative.
+
+2009-09-24 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * odvicopy.test (new): Shell script to test odvicopy.
+ * odvitype.test (new): Shell script to test odvitype.
+ * ofonts.test (new): Shell script to test ofm2opl etc.
+ * tests/ofont* (new): Test data.
+ * am/omegaware.am: Add new tests and test data.
+
+ * odvicopy.{ch,web}: Correctly identify TFM/OFM files by their
+ ofm_level, not by being found via TFMFONTS/OFMFONTS.
+ When assembling VF chracter packets use type of local font.
+
+ * ovf2ovp.ch: Somewhat reorganize, avoiding to move a largish
+ section of code.
+
2009-09-22 Peter Breitenlohner <peb@mppmu.mpg.de>
* ovf2ovp.{web,ch}: Bugfix in handling of local fonts with
@@ -11,6 +44,13 @@
* ovp2ovf.web: Bugfix in handling of ofm_level=-1.
+2009-09-20 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * odvicopy.web (load_font), odvitype.web (in_TFM): Bugfix in
+ handling of ofm_level=1 fonts.
+
+ * odvicopy.ch, odvitype.ch: Avoid compiler warnings.
+
2009-09-19 Peter Breitenlohner <peb@mppmu.mpg.de>
* opl2ofm.web (get_integer), ovp2ovf.web (get_integer):
@@ -45,6 +85,30 @@
* opl2ofm.web, ovp2ovf.web: Accept NATURALFONTDIR as alias for
NFONTDIR for compatibility with omegafonts (C) versions.
+2009-09-09 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/omegaware.am, ../am/web.am: Move test data from ../tests/
+ to tests.
+ * level1.test, omfonts.test, specialhex.test: Adjusted.
+
+2009-09-07 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * odvicopy.web: Version 1.6 (September 2009).
+ Import changes for dvicopy.web updating from V1.5 to V1.6:
+ Minor cleanup to avoid unused or uninitialized variables
+ and diagnose impossible cases.
+ (comp_char): Bugfix, 'o' was used uninitialized.
+
+ * odvicopy.ch (make_name): Eliminate unused variable.
+ (jump_out, confusion, overflow, bad_tfm, bad_font, bad_dvi):
+ Declare as noreturn procedures.
+
+ * odvitype.ch (first_par): Diagnose impossible cases.
+
+2009-09-06 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * odvicopy.ch: Declare comment as const_w2c_u_string.
+
2009-09-05 Peter Breitenlohner <peb@mppmu.mpg.de>
* ovf2ovp.ch (ASCII04 etc.): Declare as const_c_string.
@@ -57,6 +121,14 @@
(HEX): Declare as const_c_string.
(read_lig_kern): Eliminate unused variables.
+2009-09-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * otangle.ch: Eliminate the unused |end_of_TANGLE| label.
+
+2009-08-16 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/omegaware.am: Adapt to web2c-sh.
+
2009-07-15 Peter Breitenlohner <peb@mppmu.mpg.de>
* specialhex.test (new): Shell script to test specials.
diff --git a/Build/source/texk/web2c/omegaware/README b/Build/source/texk/web2c/omegaware/README
index 34593ad5ce2..ad3d049fae9 100644
--- a/Build/source/texk/web2c/omegaware/README
+++ b/Build/source/texk/web2c/omegaware/README
@@ -8,15 +8,11 @@ You may freely use, modify and/or distribute this file.
This directory contains a new Web Version 1.12 of the Omega font conversion
programs ofm2opl, opl2ofm, ovf2ovp, and ovp2ovf.
-After numerous bugfixes and with a slightly modification of one algorithm
-the programs are now able to process ofm_level=-1 (TFM/VF) as well as
-ofm_level=0,1 (OFM/OVF) files. A virtual font and the local fonts can use
+After numerous bugfixes and with a slight modification of one algorithm the
+programs are now able to process ofm_level=-1 (TFM/VF) as well as
+ofm_level=0,1 (OFM/OVF) files. A virtual font and the local fonts can have
any combination of these ofm levels.
-For the moment VF/OVF files read by ovf2ovp must have the extension '.ovf',
-allowing '.vf' as alternative requires a modification of the Kpathsea
-library that will not be present in TL2009.
-
Note, however, that all this is still somewhat preliminary. In particular
the programs still lack the thorough checking of all input data done in
TFtoPL&Co and required to diagnose problems with faulty binary files.
diff --git a/Build/source/texk/web2c/omegaware/am/omegaware.am b/Build/source/texk/web2c/omegaware/am/omegaware.am
index 0709ea1df30..2f12023bc33 100644
--- a/Build/source/texk/web2c/omegaware/am/omegaware.am
+++ b/Build/source/texk/web2c/omegaware/am/omegaware.am
@@ -23,10 +23,9 @@ ow_tangle = WEBINPUTS=$(srcdir)/omegaware $(buildenv) $(TANGLE)
nodist_odvicopy_SOURCES = odvicopy.c odvicopy.h
odvicopy.c odvicopy.h: odvicopy-web2c
-odvicopy-web2c: $(web2c_depend) odvicopy.p
- $(web2c) odvicopy
- echo timestamp >$@
- touch odvicopy.c odvicopy.h
+ @$(web2c) odvicopy
+odvicopy-web2c: odvicopy.p $(web2c_depend)
+ @$(web2c) odvicopy
EXTRA_DIST += $(odvicopy_sources)
odvicopy_sources = omegaware/odvicopy.web omegaware/odvicopy.ch
odvicopy.p: tangle$(EXEEXT) $(odvicopy_sources)
@@ -34,10 +33,9 @@ odvicopy.p: tangle$(EXEEXT) $(odvicopy_sources)
nodist_odvitype_SOURCES = odvitype.c odvitype.h
odvitype.c odvitype.h: odvitype-web2c
-odvitype-web2c: $(web2c_depend) odvitype.p
- $(web2c) odvitype
- echo timestamp >$@
- touch odvitype.c odvitype.h
+ @$(web2c) odvitype
+odvitype-web2c: odvitype.p $(web2c_depend)
+ @$(web2c) odvitype
EXTRA_DIST += $(odvitype_sources)
odvitype_sources = omegaware/odvitype.web omegaware/odvitype.ch
odvitype.p: tangle$(EXEEXT) $(odvitype_sources)
@@ -45,10 +43,9 @@ odvitype.p: tangle$(EXEEXT) $(odvitype_sources)
nodist_ofm2opl_SOURCES = ofm2opl.c ofm2opl.h
ofm2opl.c ofm2opl.h: ofm2opl-web2c
-ofm2opl-web2c: $(web2c_depend) ofm2opl.p
- $(web2c) ofm2opl
- echo timestamp >$@
- touch ofm2opl.c ofm2opl.h
+ @$(web2c) ofm2opl
+ofm2opl-web2c: ofm2opl.p $(web2c_depend)
+ @$(web2c) ofm2opl
EXTRA_DIST += $(ofm2opl_sources)
ofm2opl_sources = omegaware/ofm2opl.web omegaware/ofm2opl.ch
ofm2opl.p: tangle$(EXEEXT) $(ofm2opl_sources)
@@ -56,10 +53,9 @@ ofm2opl.p: tangle$(EXEEXT) $(ofm2opl_sources)
nodist_opl2ofm_SOURCES = opl2ofm.c opl2ofm.h
opl2ofm.c opl2ofm.h: opl2ofm-web2c
-opl2ofm-web2c: $(web2c_depend) opl2ofm.p
- $(web2c) opl2ofm
- echo timestamp >$@
- touch opl2ofm.c opl2ofm.h
+ @$(web2c) opl2ofm
+opl2ofm-web2c: opl2ofm.p $(web2c_depend)
+ @$(web2c) opl2ofm
EXTRA_DIST += $(opl2ofm_sources)
opl2ofm_sources = omegaware/opl2ofm.web omegaware/opl2ofm.ch
opl2ofm.p: tangle$(EXEEXT) $(opl2ofm_sources)
@@ -67,10 +63,9 @@ opl2ofm.p: tangle$(EXEEXT) $(opl2ofm_sources)
nodist_otangle_SOURCES = otangle.c otangle.h
otangle.c otangle.h: otangle-web2c
-otangle-web2c: $(web2c_depend) otangle.p
- $(web2c) otangle
- echo timestamp >$@
- touch otangle.c otangle.h
+ @$(web2c) otangle
+otangle-web2c: otangle.p $(web2c_depend)
+ @$(web2c) otangle
EXTRA_DIST += $(otangle_sources)
otangle_sources = omegaware/otangle.web omegaware/otangle.ch
otangle.p: tangle$(EXEEXT) $(otangle_sources)
@@ -78,10 +73,9 @@ otangle.p: tangle$(EXEEXT) $(otangle_sources)
nodist_ovf2ovp_SOURCES = ovf2ovp.c ovf2ovp.h
ovf2ovp.c ovf2ovp.h: ovf2ovp-web2c
-ovf2ovp-web2c: $(web2c_depend) ovf2ovp.p
- $(web2c) ovf2ovp
- echo timestamp >$@
- touch ovf2ovp.c ovf2ovp.h
+ @$(web2c) ovf2ovp
+ovf2ovp-web2c: ovf2ovp.p $(web2c_depend)
+ @$(web2c) ovf2ovp
EXTRA_DIST += $(ovf2ovp_sources)
ovf2ovp_sources = omegaware/ovf2ovp.web omegaware/ovf2ovp.ch
ovf2ovp.p: tangle$(EXEEXT) $(ovf2ovp_sources)
@@ -89,10 +83,9 @@ ovf2ovp.p: tangle$(EXEEXT) $(ovf2ovp_sources)
nodist_ovp2ovf_SOURCES = ovp2ovf.c ovp2ovf.h
ovp2ovf.c ovp2ovf.h: ovp2ovf-web2c
-ovp2ovf-web2c: $(web2c_depend) ovp2ovf.p
- $(web2c) ovp2ovf
- echo timestamp >$@
- touch ovp2ovf.c ovp2ovf.h
+ @$(web2c) ovp2ovf
+ovp2ovf-web2c: ovp2ovf.p $(web2c_depend)
+ @$(web2c) ovp2ovf
EXTRA_DIST += $(ovp2ovf_sources)
ovp2ovf_sources = omegaware/ovp2ovf.web omegaware/ovp2ovf.ch
ovp2ovf.p: tangle$(EXEEXT) $(ovp2ovf_sources)
@@ -100,27 +93,56 @@ ovp2ovf.p: tangle$(EXEEXT) $(ovp2ovf_sources)
## Tests
##
-EXTRA_DIST += omegaware/level1.test omegaware/omfonts.test \
+EXTRA_DIST += omegaware/level1.test \
+ omegaware/odvicopy.test omegaware/odvitype.test \
+ omegaware/ofonts.test omegaware/omfonts.test \
omegaware/otangle.test omegaware/specialhex.test
if OTANGLE
-TESTS += omegaware/otangle.test
+TESTS += omegaware/odvicopy.test omegaware/odvitype.test \
+ omegaware/otangle.test
if !OMFONTS
-TESTS += omegaware/level1.test omegaware/omfonts.test omegaware/specialhex.test
+TESTS += omegaware/level1.test omegaware/ofonts.test \
+ omegaware/omfonts.test omegaware/specialhex.test
endif !OMFONTS
endif OTANGLE
## omegaware/level1.test
-DISTCLEANFILES += tests/xlevel1.ofm tests/xlevel1.opl
+EXTRA_DIST += omegaware/tests/level1.opl
+DISTCLEANFILES += omegaware/tests/xlevel1.ofm omegaware/tests/xlevel1.opl
+## omegaware/odvicopy.test (and ofonts.test)
+EXTRA_DIST += \
+ omegaware/tests/ofontd1.dvi omegaware/tests/ofontd1.typ \
+ omegaware/tests/ofontd2.dvi omegaware/tests/ofontd2.typ \
+ omegaware/tests/ofontd3.dvi omegaware/tests/ofontd3.typ \
+ omegaware/tests/ofontr1.vf omegaware/tests/ofontr2.ovf \
+ omegaware/tests/ofontr3.ovf omegaware/tests/ofontv4.vf \
+ omegaware/tests/ofontv5.ovf omegaware/tests/ofontv6.ovf
+DISTCLEANFILES += ofont*vf
+## omegaware/odvitype.test (and odvicopy.test, ofonts.test)
+EXTRA_DIST += omegaware/tests/ofontd0.dtl omegaware/tests/ofontd0.dvi \
+ omegaware/tests/ofontd0.typ omegaware/tests/ofontr0.tfm \
+ omegaware/tests/ofontr1.tfm omegaware/tests/ofontr2.ofm \
+ omegaware/tests/ofontr3.ofm omegaware/tests/ofontv4.tfm \
+ omegaware/tests/ofontv5.ofm omegaware/tests/ofontv6.ofm
+DISTCLEANFILES += omegaware/tests/xofont*
+## omegaware/ofonts.test
+EXTRA_DIST += omegaware/tests/ofontr0.pl \
+ omegaware/tests/ofontr1.pl omegaware/tests/ofontr1.vpl \
+ omegaware/tests/ofontr2.opl omegaware/tests/ofontr2.ovp \
+ omegaware/tests/ofontr3.opl omegaware/tests/ofontr3.ovp \
+ omegaware/tests/ofontv4.pl omegaware/tests/ofontv4.vpl \
+ omegaware/tests/ofontv5.opl omegaware/tests/ofontv5.ovp \
+ omegaware/tests/ofontv6.opl omegaware/tests/ofontv6.ovp
## omegaware/omfonts.test
-DISTCLEANFILES += tests/Cherokee.tfm tests/OCherokee.ofm \
- tests/OCherokee.opl tests/OCherokee.ovf \
- tests/xCherokee.pl tests/xOCherokee.ofm \
- tests/xOCherokee.opl tests/xOCherokee.ovp
+EXTRA_DIST += omegaware/tests/Cherokee.pl omegaware/tests/OCherokee.ovp
+DISTCLEANFILES += omegaware/tests/Cherokee.tfm omegaware/tests/OCherokee.ofm \
+ omegaware/tests/OCherokee.opl omegaware/tests/OCherokee.ovf \
+ omegaware/tests/xCherokee.* omegaware/tests/xOCherokee.*
## omegaware/otangle.test
DISTCLEANFILES += cftest.p
## omegaware/specialhex.test
-DISTCLEANFILES += tests/specialhex.ofm tests/specialhex.opl \
- tests/specialhex.ovf tests/xspecialhex.ofm \
- tests/xspecialhex.opl tests/xspecialhex.ovp
+EXTRA_DIST += omegaware/tests/specialhex.ovp
+DISTCLEANFILES += omegaware/tests/specialhex.ofm omegaware/tests/specialhex.opl \
+ omegaware/tests/specialhex.ovf omegaware/tests/xspecialhex.*
diff --git a/Build/source/texk/web2c/omegaware/level1.test b/Build/source/texk/web2c/omegaware/level1.test
index e88e9a611e1..ed40ebde855 100755
--- a/Build/source/texk/web2c/omegaware/level1.test
+++ b/Build/source/texk/web2c/omegaware/level1.test
@@ -3,12 +3,14 @@
# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
# You may freely use, modify and/or distribute this file.
-test -d tests || mkdir -p tests
+tests=omegaware/tests
-./opl2ofm -verbose $srcdir/tests/level1 tests/xlevel1 || exit 1
+test -d $tests || mkdir -p $tests
+
+./opl2ofm -verbose $srcdir/$tests/level1 $tests/xlevel1 || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./ofm2opl -verbose tests/xlevel1 tests/xlevel1 || exit 1
+ ./ofm2opl -verbose $tests/xlevel1 $tests/xlevel1 || exit 1
-diff $srcdir/tests/level1.opl tests/xlevel1.opl || exit 1
+diff $srcdir/$tests/level1.opl $tests/xlevel1.opl || exit 1
diff --git a/Build/source/texk/web2c/omegaware/odvicopy.ch b/Build/source/texk/web2c/omegaware/odvicopy.ch
index c502aa52483..7215b186642 100644
--- a/Build/source/texk/web2c/omegaware/odvicopy.ch
+++ b/Build/source/texk/web2c/omegaware/odvicopy.ch
@@ -32,7 +32,7 @@ procedure initialize; {this procedure gets things started properly}
@<Define |parse_arguments|@>
procedure initialize; {this procedure gets things started properly}
var @<Local variables for initialization@>@/
- begin
+ begin
kpse_set_progname (argv[0]);
parse_arguments;
print (banner); print_ln (version_string);
@@ -111,7 +111,7 @@ procedure initialize; {this procedure gets things started properly}
@d last_text_char=255 {ordinal number of the largest element of |text_char|}
@z
-@x [23] Remove non-local goto
+@x [23] Remove non-local goto, declare jump_out as noreturn
@d abort(#)==begin print_ln(' ',#,'.'); jump_out;
end
@@ -131,12 +131,24 @@ end;
@<Basic printing procedures@>@;
procedure close_files_and_terminate; forward;
@#
-procedure jump_out;
+noreturn procedure jump_out;
begin mark_fatal; close_files_and_terminate;
uexit(1);
end;
@z
+@x [24] Declare confusion as noreturn
+procedure confusion(@!p:pckt_pointer);
+@y
+noreturn procedure confusion(@!p:pckt_pointer);
+@z
+
+@x [25] Declare overflow as noreturn
+procedure overflow(@!p:pckt_pointer;@!n:int_16u);
+@y
+noreturn procedure overflow(@!p:pckt_pointer;@!n:int_16u);
+@z
+
@x [51] Fix casting problem in C.
@d comp_spair(#) == if a<128 then #:=a*256+b @+ else #:=(a-256)*256+b
@d comp_upair(#) == #:=a*256+b
@@ -193,9 +205,9 @@ To reduce the required changes we simply ignore the parameters given
to |make_font_name|.
@^system dependencies@>
-@d append_to_name(#)== begin
+@d append_to_name(#)== begin
cur_name[l_cur_name]:=#;
- incr(l_cur_name);
+ incr(l_cur_name);
end
@d make_font_name_end(#)==
make_name
@@ -204,7 +216,12 @@ to |make_font_name|.
@z
% [67] No conversion of filenames in lower case, and initialize and
-% terminate for C strings.
+% terminate for C strings. Eliminate now unused variable.
+@x
+@!c:char; {a character to be appended to |cur_name|}
+@y
+@z
+
@x
cur_loc:=pckt_start[n]; cur_limit:=pckt_start[n+1];
@y
@@ -243,7 +260,7 @@ the default \.{TFM} directory, which is a system-dependent place where
the \.{TFM} files for standard fonts are kept.
The string variable |TFM_default_area| contains the name of this area.
@^system dependencies@>
-
+
@d TFM_default_area_name=='TeXfonts:' {change this to the correct name}
@d OFM_default_area_name=='TeXfonts:' {change this to the correct name}
@d TFM_default_area_name_length=9 {change this to the correct length}
@@ -264,6 +281,18 @@ OFM_default_area:=OFM_default_area_name;
@ (No initialization to be done. Keep this module to preserve numbering.)
@z
+@x [94] Declare bad_tfm as noreturn
+procedure bad_tfm;
+@y
+noreturn procedure bad_tfm;
+@z
+
+@x [94] Declare bad_font as noreturn
+procedure bad_font;
+@y
+noreturn procedure bad_font;
+@z
+
@x [96] Open TFM file
@<TFM: Open |tfm_file|@>=
make_font_name(TFM_default_area_name_length)(TFM_default_area)(tfm_ext);
@@ -274,10 +303,6 @@ if eof(tfm_file) then begin
if eof(tfm_file) then
@^system dependencies@>
abort('---not loaded, TFM or OFM file can''t be opened!')
- else font_extend(cur_fnt):=true
-@.TFM or OFM file can\'t be opened@>
- end
-else font_extend(cur_fnt):=false
@y
|TFM_default_area_name_length| and |TFM_default_area| will not
be used by |make_font_name|.
@@ -289,7 +314,6 @@ if full_name then begin
resetbin (tfm_file, full_name);
free (cur_name);
free (full_name);
- font_extend(cur_fnt):=false
end
else begin
make_font_name(OFM_default_area_name_length)(OFM_default_area)(ofm_ext);
@@ -298,10 +322,8 @@ else begin
resetbin (tfm_file, full_name);
free (cur_name);
free (full_name);
- font_extend(cur_fnt):=true
end
else abort('---not loaded, TFM or OFM file can''t be opened!')
- end
@z
@x
@@ -338,6 +360,13 @@ else #:=(((tfm_b0-intcast(256))*intcast(256)+tfm_b1)
(((tfm_b0*intcast(256)+tfm_b1)*intcast(256)+tfm_b2)*intcast(256)+tfm_b3)
@z
+@x [103] Avoid compiler warnings
+read_tfm_word; tfm_b01(first_two);
+@y
+nco:=0; extra_words:=0;
+read_tfm_word; tfm_b01(first_two);
+@z
+
@x [109] Declare full_name.
@!dvi_loc:int_32; {where we are about to look, in |dvi_file|}
@y
@@ -345,6 +374,12 @@ else #:=(((tfm_b0-intcast(256))*intcast(256)+tfm_b1)
@!full_name: ^char;
@z
+@x [109] Declare bad_dvi as noreturn
+procedure bad_dvi;
+@y
+noreturn procedure bad_dvi;
+@z
+
@x [111] Fix up opening the binary files
@ To prepare |dvi_file| for input, we |reset| it.
@@ -393,7 +428,7 @@ the default \.{VF} directory, which is a system-dependent place where
the \.{VF} files for standard fonts are kept.
The string variable |VF_default_area| contains the name of this area.
@^system dependencies@>
-
+
@d VF_default_area_name=='TeXvfonts:' {change this to the correct name}
@d VF_default_area_name_length=10 {change this to the correct length}
@d OVF_default_area_name=='TeXvfonts:' {change this to the correct name}
@@ -410,7 +445,7 @@ OVF_default_area:=OVF_default_area_name;
@ If no font directory has been specified, \.{\title} is supposed to use
the default \.{VF} directory, which is a system-dependent place where
the \.{VF} files for standard fonts are kept.
-
+
Actually, under UNIX the standard area is defined in an external
file \.{site.h}. And the users have a path searched for fonts,
by setting the \.{VFFONTS} environment variable.
@@ -442,7 +477,7 @@ if full_name then begin
end
else begin
make_font_name(OVF_default_area_name_length)(OVF_default_area)(ovf_ext);
- full_name := kpse_find_ovf (cur_name);
+ full_name := kpse_find_ovf (cur_name);
if full_name then begin
resetbin (vf_file, full_name);
free (cur_name);
@@ -542,7 +577,7 @@ rewrite(out_file); {prepares to write packed bytes to |out_file|}
@x [250] String declaration.
@!comment:packed array[1..comm_length] of char; {preamble comment prefix}
@y
-@!comment:^char; {preamble comment prefix}
+@!comment:const_w2c_u_string; {preamble comment prefix}
@z
@x [251] Output the string from 0 to len-1, not 1 to len.
@@ -598,13 +633,13 @@ begin
end else if argument_is ('magnification') then begin
out_mag := atou (optarg);
-
+
end else if argument_is ('max-pages') then begin
max_pages := atou (optarg);
-
+
end else if argument_is ('page-start') then begin
@<Determine the desired |start_count| values from |optarg|@>;
-
+
end; {Else it was a flag; |getopt| has already done the assignment.}
until getopt_return_val = -1;
@@ -614,17 +649,17 @@ begin
dvi_file := make_binary_file (stdin);
out_file := make_binary_file (stdout);
term_out := stderr;
-
+
end else if optind + 1 = argc then begin
resetbin (dvi_file, extend_filename (cmdline (optind), 'dvi'));
out_file := make_binary_file (stdout);
term_out := stderr;
-
+
end else if optind + 2 = argc then begin
resetbin (dvi_file, extend_filename (cmdline (optind), 'dvi'));
rewritebin (out_file, extend_filename (cmdline (optind + 1), 'dvi'));
term_out := stdout;
-
+
end else begin
write_ln (stderr, 'odvicopy: Need at most two file arguments.');
usage ('odvicopy');
@@ -682,7 +717,7 @@ long_options[current_option].flag := 0;
long_options[current_option].val := 0;
incr (current_option);
-@ Parsing the starting page specification is a bit complicated.
+@ Parsing the starting page specification is a bit complicated.
(This is the same as in \.{DVItype}.)
@<Determine the desired |start_count|...@> =
@@ -692,7 +727,7 @@ while optarg[m] do begin
if optarg[m] = "*" then begin
start_there[k] := false;
incr (m);
-
+
end else if optarg[m] = "." then begin
incr (k);
if k >= 10 then begin
@@ -700,7 +735,7 @@ while optarg[m] do begin
uexit (1);
end;
incr (m);
-
+
end else begin
start_count[k] := strtol (optarg + m, address_of (end_num), 10);
if end_num = optarg + m then begin
diff --git a/Build/source/texk/web2c/omegaware/odvicopy.test b/Build/source/texk/web2c/omegaware/odvicopy.test
new file mode 100755
index 00000000000..9b836657c25
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/odvicopy.test
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+tests=omegaware/tests
+
+test -d $tests || mkdir -p $tests
+
+# First a straight copy
+#
+rm -f ofont*vf
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ OVFFONTS=. \
+ ./odvicopy $srcdir/$tests/ofontd0 $tests/xofontd1 || exit 1
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ ./odvitype $tests/xofontd1 | sed '1s/ (.*)$//' >$tests/xofontd1.typ || exit 1
+
+diff $srcdir/$tests/ofontd1.typ $tests/xofontd1.typ || exit 1
+
+# Next with VF/OVF files for ofontv[4-6]
+#
+cp $srcdir/$tests/ofontv*vf .
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ OVFFONTS=. \
+ ./odvicopy $tests/xofontd1 $tests/xofontd2 || exit 1
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ ./odvitype $tests/xofontd2 | sed '1s/ (.*)$//' >$tests/xofontd2.typ || exit 1
+
+diff $srcdir/$tests/ofontd2.typ $tests/xofontd2.typ || exit 1
+
+# Finally with OVF files for ofontr[1-3] and ofontv[4-6]
+#
+cp $srcdir/$tests/ofontr*vf .
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ OVFFONTS=. \
+ ./odvicopy $srcdir/$tests/ofontd0 $tests/xofontd3 || exit 1
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ ./odvitype $tests/xofontd3 | sed '1s/ (.*)$//' >$tests/xofontd3.typ || exit 1
+
+diff $srcdir/$tests/ofontd3.typ $tests/xofontd3.typ || exit 1
+
+exit 0
+
diff --git a/Build/source/texk/web2c/omegaware/odvicopy.web b/Build/source/texk/web2c/omegaware/odvicopy.web
index cda08cc427f..a1bb27e5c78 100644
--- a/Build/source/texk/web2c/omegaware/odvicopy.web
+++ b/Build/source/texk/web2c/omegaware/odvicopy.web
@@ -1,5 +1,5 @@
% odvicopy.web: Omega version of file dvicopy.web
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -23,6 +23,8 @@
% don't load fonts that are never used (August 25, 1992).
% Version 1.4 fixed a typo (March 28, 1995).
% Version 1.5 avoided cur_name_length identifier conflict (October 15, 1995).
+% Version 1.6 minor cleanup: avoid unused or uninitialized variables,
+% diagnose impossible cases (September 2009).
% Here is TeX material that gets inserted after \input webmac
\def\hang{\hangindent 3em\indent\ignorespaces}
@@ -48,7 +50,7 @@
1994,97 John Plaice and Yannis Haralambous}
\centerline{Distributed under terms of GNU General Public License}
\vskip 15pt
- \centerline{(Version 1.5, March 1997)}
+ \centerline{(Version 1.6, September 2009)}
\vfill}
\def\botofcontents{\vfill
\centerline{\hsize 5in\baselineskip9pt
@@ -111,12 +113,12 @@ References to \.{DVIcopy} also apply to \.{ODVIcopy}.
The |banner| and |preamble_comment| strings defined here should be
changed whenever \.{ODVIcopy} gets modified.
-@d banner=='This is ODVIcopy, Version 1.5' {printed when the program starts}
+@d banner=='This is ODVIcopy, Version 1.6' {printed when the program starts}
@d title=='ODVIcopy' {the name of this program, used in some messages}
@d copyright==
- '(C) 1990,95 P. Breitenlohner, 1994,97 J. Plaice and Y. Haralambous'
+ '(C) 1990,2009 P. Breitenlohner, 1994,98 J. Plaice and Y. Haralambous'
@#
-@d preamble_comment=='ODVIcopy 1.5 output from '
+@d preamble_comment=='ODVIcopy 1.6 output from '
@d comm_length=25 {length of |preamble_comment|}
@d from_length=6 {length of its |' from '| part}
@@ -1116,10 +1118,10 @@ or, if |upd=false|, a |put| command.
var o:eight_bits; {|set1| or |put1|}
begin
@d comp_char(#) ==
+o:=dvi_char_cmd[upd]; {|set1| or |put1|}
if (res>=0) and (res<@"100) then begin
if (not upd)or(res>127)or(ext<>0) then
- begin o:=dvi_char_cmd[upd]; {|set1| or |put1|}
- if ext<0 then Incr(ext)(@"1000000);
+ begin if ext<0 then Incr(ext)(@"1000000);
if ext=0 then #(o) @+ else @;
begin if ext<@"100 then #(o+1) @+ else @;
begin if ext<@"10000 then #(o+2) @+ else @;
@@ -1639,8 +1641,8 @@ label found,exit;
var p,@!q:pckt_pointer; {current and next packet}
@!f:eight_bits; {a flag byte}
@!e:int_24; {extension for a packet}
-begin @<Locate a character packet and |goto found| if found@>;
-if font_packet(cur_fnt)(cur_res)=invalid_packet then
+begin q:=font_packet(cur_fnt)(cur_res);
+if q=invalid_packet then
begin if pckt_m_msg<10 then {stop telling after first 10 times}
begin print_ln('---missing character packet for character ',cur_res:1,
@.missing character packet...@>
@@ -1650,6 +1652,7 @@ if font_packet(cur_fnt)(cur_res)=invalid_packet then
end;
find_packet:=false; return;
end;
+@<Locate a character packet and |goto found| if found@>;
if pckt_s_msg<10 then {stop telling after first 10 times}
begin print_ln('---substituted character packet with extension ',
@.substituted character packet...@>
@@ -1663,9 +1666,7 @@ found: cur_pckt:=p; cur_type:=f; find_packet:=true;
exit: end;
@ @<Locate a character packet and |goto found| if found@>=
-q:=font_packet(cur_fnt)(cur_res);
-while q<>invalid_packet do
- begin p:=q; q:=invalid_packet;
+repeat p:=q; q:=invalid_packet;
cur_loc:=pckt_start[p]; cur_limit:=pckt_start[p+1];
if p=empty_packet then
begin e:=0; f:=0;
@@ -1675,13 +1676,13 @@ while q<>invalid_packet do
0: e:=0;
1: e:=pckt_ubyte;
2: e:=pckt_upair;
- 3: e:=pckt_strio;
- end; {there are no other cases}
+ othercases e:=pckt_strio; {|f div ext_flag = 3|}
+ endcases;
if (f mod ext_flag)>=chain_flag then q:=pckt_upair;
f:=f mod chain_flag;
end;
if e=cur_ext then goto found;
- end
+until q=invalid_packet
@ The |start_packet| procedure is used to create the header bytes of a
character packet for the character with residue~|cur_res| and
@@ -1696,7 +1697,8 @@ var p,@!q:pckt_pointer; {current and next packet}
@!e:int_32; {extension for a packet}
@!cur_loc: byte_pointer; {current location in a packet}
@!cur_limit: byte_pointer; {start of next packet}
-begin @<Locate a character packet and |goto found| if found@>;
+begin q:=font_packet(cur_fnt)(cur_res);
+if q<>invalid_packet then @<Locate a character packet...@>;
q:=font_packet(cur_fnt)(cur_res); pckt_dup:=false; goto not_found;
found: pckt_dup:=true; pckt_prev:=p;
not_found: pckt_ext:=cur_ext; pckt_res:=cur_res; pckt_room(6);
@@ -1798,7 +1800,8 @@ case font_type(cur_fnt) of
defined_font: confusion(str_fonts);
loaded_font: bad_tfm;
@<Cases for |bad_font|@>@;@/
- end; {there are no other cases}
+ othercases abort('internal error');
+ endcases;
end;
@ To prepare |tfm_file| for input we |reset| it.
@@ -1812,10 +1815,8 @@ if eof(tfm_file) then begin
if eof(tfm_file) then
@^system dependencies@>
abort('---not loaded, TFM or OFM file can''t be opened!')
- else font_extend(cur_fnt):=true
@.TFM or OFM file can\'t be opened@>
end
-else font_extend(cur_fnt):=false
@ It turns out to be convenient to read four bytes at a time, when we
are inputting from \.{TFM} files. The input goes into global variables
@@ -1999,13 +2000,14 @@ read_tfm_word;
if first_two<>0 then tfm_width:=tfm_b0
else begin
if # then read_tfm_word;
- tfm_b01(tfm_width);
+ tfm_width:=tfm_b0*256+tfm_b1;
end
end
@<TFM: Read past the header data@>=
read_tfm_word; tfm_b01(first_two);
if (first_two<>0) then begin
+ font_extend(cur_fnt):=false;
ofm_level:=-1;
tfm_b23(lh);
read_tfm_word; tfm_b01(bc); tfm_b23(ec);
@@ -2027,6 +2029,7 @@ if (first_two<>0) then begin
end
end
else begin
+ font_extend(cur_fnt):=true;
tfm_b23(ofm_level);
read_tfm_word; tfm_b03(lf);
read_tfm_word; tfm_b03(lh);
@@ -2044,7 +2047,7 @@ else begin
end;
if ofm_level=1 then begin
read_tfm_word;
- nco:=(((tfm_b0*256+tfm_b1)*256+tfm_b2)*256+tfm_b3) div 2;
+ nco:=((tfm_b0*256+tfm_b1)*256+tfm_b2)*256+tfm_b3;
read_tfm_word; read_tfm_word;
extra_words:=(((tfm_b0*256+tfm_b1)*256+tfm_b2)*256+tfm_b3) div 2;
for l:=1 to 12 do
@@ -2093,7 +2096,7 @@ else begin
if ec>=max_chars-font_chars(cur_fnt) then overflow(str_chars,max_chars);
font_ec(cur_fnt):=ec;
l:=bc;
- while l<ec do begin
+ while l<=ec do begin
read_tfm_word;
tfm_width:=tfm_b0*256+tfm_b1;
char_widths[n_chars]:=tfm_width; incr(n_chars);
@@ -2102,7 +2105,7 @@ else begin
for j:=l+1 to lprime do begin
char_widths[n_chars]:=tfm_width; incr(n_chars);
end;
- l:=lprime;
+ l:=lprime+1;
for j:=1 to extra_words do
read_tfm_word;
end;
@@ -2529,19 +2532,15 @@ if cur_cmd<set1 then
end
else begin cur_res:=#; cur_upd:=(cur_cmd<put1);
Decr(cur_cmd)(dvi_char_cmd[cur_upd]);
- if font_extend(cur_fnt) then
- begin
- cur_ext:=0;
- while cur_cmd>0 do
- begin
- cur_res:=cur_res*256+#; decr(cur_cmd);
- end
+ if (cur_cmd=3)and(cur_res>127) then cur_res:=cur_res-128;
+ while cur_cmd>0 do
+ begin cur_ext:=cur_ext*256+cur_res; cur_res:=#; decr(cur_cmd);
+ end;
+ set_cur_char_tail
+@d set_cur_char_tail(#)==
+ if font_extend(#) then
+ begin cur_res:=256*cur_ext+cur_res; cur_ext:=0;
end
- else
- while cur_cmd>0 do
- begin if cur_cmd=3 then if cur_res>127 then cur_ext:=-1;
- cur_ext:=cur_ext*256+cur_res; cur_res:=#; decr(cur_cmd);
- end;
end;
end
@@ -2549,7 +2548,7 @@ end
begin repeat cur_cmd:=dvi_ubyte;
until cur_cmd<>nop; {skip over |nop|s}
case dvi_par[cur_cmd] of
-char_par: set_cur_char(dvi_ubyte);
+char_par: set_cur_char(dvi_ubyte)(cur_fnt);
no_par: do_nothing;
dim1_par: cur_parm:=dvi_sbyte;
num1_par: cur_parm:=dvi_ubyte;
@@ -2793,7 +2792,6 @@ begin x:=vf_squad; if x<=0 then bad_font @+ else vf_pquad:=x;
end;
@#
function vf_fixp:int_31; {result must be positive}
-var x:int_32; {accumulator}
begin vf_byte(tfm_b0); vf_byte(tfm_b1); vf_byte(tfm_b2); vf_byte(tfm_b3);
Incr(vf_loc)(4);@/
if tfm_b0>0 then bad_font;
@@ -2817,7 +2815,7 @@ set_cur_wp_end
begin cur_cmd:=vf_ubyte;
case dvi_par[cur_cmd] of
char_par:
- begin set_cur_char(vf_ubyte); set_cur_wp(vf_cur_fnt)(bad_font);
+ begin set_cur_char(vf_ubyte)(vf_cur_fnt); set_cur_wp(vf_cur_fnt)(bad_font);
end;
no_par: do_nothing;
dim1_par: cur_parm:=vf_fix1;
@@ -2834,7 +2832,8 @@ rule_par:
cur_upd:=(cur_cmd=set_rule);
end;
fnt_par:cur_parm:=cur_cmd-fnt_num_0;
-end; {there are no other cases}
+othercases abort('internal error');
+endcases;
cur_class:=dvi_cl[cur_cmd];
end;
@@ -2907,8 +2906,7 @@ font type is changed to |vf_font_type|.
@p function do_vf:boolean; {read a \.{VF} file}
label reswitch,done,not_found,exit;
-var temp_int:int_32; {integer for temporary variables}
-@!temp_byte:int_8u; {byte for temporary variables}
+var temp_byte:int_8u; {byte for temporary variables}
@!k:byte_pointer; {index into |byte_mem|}
@!l:int_15; {general purpose variable}
@!save_ext:int_24; {used to save |cur_ext|}
@@ -3058,12 +3056,12 @@ begin if cur_cmd<long_char then
begin vf_limit:=cur_cmd;
cur_ext:=0; cur_res:=vf_ubyte; vf_wp:=check_width(vf_fix3u);
end
-else if font_extend(cur_fnt) then
- begin vf_limit:=vf_uquad;
- cur_ext:=0; cur_res:=vf_squad; vf_wp:=check_width(vf_fix4);
- end
else begin vf_limit:=vf_uquad;
- cur_ext:=vf_strio; cur_res:=vf_ubyte; vf_wp:=check_width(vf_fix4);
+ cur_ext:=vf_strio; cur_res:=vf_ubyte;
+ if font_extend(cur_fnt) then
+ begin cur_res:=256*cur_ext+cur_res; cur_ext:=0;
+ end;
+ vf_wp:=check_width(vf_fix4);
end;
Incr(vf_limit)(vf_loc);
vf_push_loc[0]:=byte_ptr; vf_last_end[0]:=byte_ptr;
@@ -3107,7 +3105,8 @@ reswitch:case cur_class of
fnt_cl: vf_font;
fnt_def_cl: bad_font;
invalid_cl: if cur_cmd<>nop then bad_font;
- end; {there are no other cases}
+ othercases abort('internal error');
+ endcases;
if vf_loc<vf_limit then vf_first_par
else if last_pop then goto done
else begin cur_class:=pop_cl; last_pop:=true; {final |pop|}
@@ -3150,7 +3149,8 @@ else case cur_class of
char_cl: move_zero:=(not cur_upd)or(vf_cur_fnt<>vf_fnt);
rule_cl: move_zero:=not cur_upd;
xxx_cl: move_zero:=true;
-end; {there are no other cases}
+othercases abort('internal error');
+endcases;
if move_zero then
begin decr(byte_ptr); decr(vf_ptr);
end;
@@ -3319,7 +3319,7 @@ processed.
@<Set init...@>=
n_opt:=0; {change this to indicate the presence of command line options}
k_opt:=0; {just in case}
-
+
@ The |input_ln| routine waits for the user to type a line at his or her
terminal; then it puts ASCII-code equivalents for the characters on that
line into the |byte_mem| array as a temporary string. \PASCAL's
@@ -3894,10 +3894,11 @@ and draw boxes or leave blank spaces in the output.
@p procedure do_font;@/
label done;@/
+var p:char_pointer; {index into |char_widths| and |char_pixels|}
@<OUT: Declare additional local variables for |do_font|@>@;
-@!p:char_pointer; {index into |char_widths| and |char_pixels|}
begin @!debug if font_type(cur_fnt)=defined_font then confusion(str_fonts);
gubed@;
+p:=0; {such that |p| is used}
@!device for p:=font_chars(cur_fnt)+font_bc(cur_fnt)
to font_chars(cur_fnt)+font_ec(cur_fnt) do
char_pixels[p]:=h_pixel_round(widths[char_widths[p]]);
@@ -3926,7 +3927,7 @@ first parameter (if any) and |cur_class| to the command class.
@p procedure pckt_first_par;
begin cur_cmd:=pckt_ubyte;
case dvi_par[cur_cmd] of
-char_par: set_cur_char(pckt_ubyte);
+char_par: set_cur_char(pckt_ubyte)(cur_fnt);
no_par: do_nothing;
dim1_par: cur_parm:=pckt_sbyte;
num1_par: cur_parm:=pckt_ubyte;
@@ -3940,7 +3941,8 @@ rule_par:
cur_upd:=(cur_cmd=set_rule);
end;
fnt_par:cur_parm:=cur_cmd-fnt_num_0;
-end; {there are no other cases}
+othercases abort('internal error');
+endcases;
cur_class:=dvi_cl[cur_cmd];
end;
@@ -4211,7 +4213,8 @@ loop begin
fnt_cl: dvi_font;
fnt_def_cl: dvi_do_font(random_reading);
invalid_cl: goto done;
- end; {there are no other cases}
+ othercases abort('internal error');
+ endcases;
dvi_first_par; {get the next command}
end
@@ -4590,7 +4593,6 @@ out_four(cur_v_dimen); out_four(cur_h_dimen);
the variable |@!p| is already declared.
@<OUT: Declare additional local variables for |do_font|@>=
-var
@ And here is the device dependent code for |do_font|; if the \.{VF} file
for a font could not be found, we simply assume this must be a real font.
diff --git a/Build/source/texk/web2c/omegaware/odvitype.ch b/Build/source/texk/web2c/omegaware/odvitype.ch
index c62e7bb17e0..be75e4196f7 100644
--- a/Build/source/texk/web2c/omegaware/odvitype.ch
+++ b/Build/source/texk/web2c/omegaware/odvitype.ch
@@ -1,5 +1,5 @@
% odvitype.ch: web2c changes for file odvitype.web
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -199,6 +199,14 @@ begin
end;
@z
+@x [35] Avoid compiler warnings
+read_tfm_word;
+@y
+nco:=0; extra_words:=0;
+read_tfm_word;
+@z
+
+
@x [35] Make 16-bit TFM calculations work.
if (b0*256+b1)<>0 then begin {TFM file}
ofm_level:=-1;
@@ -533,6 +541,15 @@ end;
cur_name[r] := 0; {Append null byte for C.}
@z
+@x [75] Diagnose impossible cases.
+sixty_four_cases(fnt_num_0): first_par:=o-fnt_num_0;
+end;
+@y
+sixty_four_cases(fnt_num_0): first_par:=o-fnt_num_0;
+othercases abort('internal error');
+endcases;
+@z
+
@x [80] (major,minor) optionally show opcode
@d show(#)==begin flush_text; showing:=true; print(a:1,': ',#);
end
@@ -608,26 +625,26 @@ begin
end else if argument_is ('version') then begin
print_version_and_exit
(banner, nil, 'J. Plaice, Y. Haralambous, D.E. Knuth', nil);
-
+
end else if argument_is ('output-level') then begin
out_mode := atou (optarg);
if (out_mode = 0) or (out_mode > 4) then begin
write_ln (stderr, 'Value for --output-level must be >= 1 and <= 4.');
uexit (1);
end;
-
+
end else if argument_is ('page-start') then begin
@<Determine the desired |start_count| values from |optarg|@>;
-
+
end else if argument_is ('max-pages') then begin
max_pages := atou (optarg);
-
+
end else if argument_is ('dpi') then begin
resolution := atof (optarg);
-
+
end else if argument_is ('magnification') then begin
new_mag := atou (optarg);
-
+
end; {Else it was a flag; |getopt| has already done the assignment.}
until getopt_return_val = -1;
@@ -680,7 +697,7 @@ long_options[current_option].flag := 0;
long_options[current_option].val := 0;
incr (current_option);
-@ Parsing the starting page specification is a bit complicated.
+@ Parsing the starting page specification is a bit complicated.
@<Determine the desired |start_count|...@> =
k := 0; {which \.{\\count} register we're on}
@@ -689,7 +706,7 @@ while optarg[m] do begin
if optarg[m] = "*" then begin
start_there[k] := false;
incr (m);
-
+
end else if optarg[m] = "." then begin
incr (k);
if k >= 10 then begin
@@ -697,7 +714,7 @@ while optarg[m] do begin
uexit (1);
end;
incr (m);
-
+
end else begin
start_count[k] := strtol (optarg + m, address_of (end_num), 10);
if end_num = optarg + m then begin
diff --git a/Build/source/texk/web2c/omegaware/odvitype.test b/Build/source/texk/web2c/omegaware/odvitype.test
new file mode 100755
index 00000000000..37f272a1daa
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/odvitype.test
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+tests=omegaware/tests
+
+test -d $tests || mkdir -p $tests
+
+TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=$srcdir/$tests \
+ ./odvitype $srcdir/$tests/ofontd0 | sed '1s/ (.*)$//' >$tests/xofontd0.typ || exit 1
+
+diff $srcdir/$tests/ofontd0.typ $tests/xofontd0.typ || exit 1
+
diff --git a/Build/source/texk/web2c/omegaware/odvitype.web b/Build/source/texk/web2c/omegaware/odvitype.web
index ef5136bb3f2..2fa9c6d0711 100644
--- a/Build/source/texk/web2c/omegaware/odvitype.web
+++ b/Build/source/texk/web2c/omegaware/odvitype.web
@@ -1,5 +1,5 @@
% odvitype.web: Omega version of file dvitype.web
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -1163,8 +1163,8 @@ else begin
if width_ptr+font_ec[nf]-font_bc[nf]+1>max_widths then
begin print_ln('---not loaded, ODVItype needs larger width table');
@.ODVItype needs larger...@>
- goto 9998;
- end;
+ goto 9998;
+ end;
wp:=width_ptr+font_ec[nf]-font_bc[nf]+1;
read_tfm_word; nw:=((b0*256+b1)*256+b2)*256+b3;
if (nw=0)or(nw>65536) then goto 9997;
@@ -1173,7 +1173,7 @@ else begin
read_tfm_word;
end;
if ofm_level=1 then begin
- read_tfm_word; nco:=(((b0*256+b1)*256+b2)*256+b3) div 2;
+ read_tfm_word; nco:=((b0*256+b1)*256+b2)*256+b3;
read_tfm_word;
read_tfm_word; extra_words:=(((b0*256+b1)*256+b2)*256+b3) div 2;
for k:=1 to 12 do
@@ -1225,14 +1225,14 @@ case ofm_level of
kprime:=k+(b0*256+b1);
for j:=k+1 to kprime do
width[j]:=width[k];
- k:=kprime;
+ k:=kprime+1;
for j:=1 to extra_words do
read_tfm_word;
end
end
end;
end;
-
+
@ The most important part of |in_TFM| is the width computation, which
involves multiplying the relative widths in the \.{TFM} file by the
@@ -2268,7 +2268,7 @@ while true do
end;
@<Skip until finding |eop|@>;
bop_seen:=false;
- end;
+ end;
9999:end;
@ @<Skip until finding |eop|@>=
diff --git a/Build/source/texk/web2c/omegaware/ofm2opl.ch b/Build/source/texk/web2c/omegaware/ofm2opl.ch
index 0ec25dd3792..d9a586bfcd8 100644
--- a/Build/source/texk/web2c/omegaware/ofm2opl.ch
+++ b/Build/source/texk/web2c/omegaware/ofm2opl.ch
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -6,7 +6,7 @@
% applies only to the changes to the original tftopl.ch.
%
% tftopl.ch for C compilation with web2c.
-%
+%
% 04/04/83 (PC) Original version, made to work with version 1.0 of TFtoPL,
% released with version 0.96 of TeX in February, 1983.
% 04/16/83 (PC) Brought up to version 1.0 released with version 0.97 of TeX
@@ -190,7 +190,7 @@ MBL_string:=' MBL'; RI_string:=' RI '; RCE_string:=' RCE';
@z
% [38] How we output the character code depends on |charcode_format|.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
begin if font_type>vanilla then
out_hex_char(c)
@@ -212,7 +212,7 @@ else out_hex_char(c);
@z
% [39] Don't output the face code as an integer.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
out(MBL_string[1+(b mod 3)]);
out(RI_string[1+s]);
@@ -230,7 +230,7 @@ f:=((tfm[k+1] mod 16)*intcast(@'400)+tfm[k+2])*@'400+tfm[k+3];
@z
% [78] No progress reports unless verbose.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
incr(chars_on_line);
end;
@@ -259,17 +259,17 @@ f:=((tfm[k+1] mod 16)*intcast(@'400)+tfm[k+2])*@'400+tfm[k+3];
% [89] Change the name of the variable `class', since AIX 3.1's <math.h>
% defines a function by that name.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@d pending=4 {$f(x,y)$ is being evaluated}
@y
@d pending=4 {$f(x,y)$ is being evaluated}
-@d class == class_var
+@d class == class_var
@z
% [90] Change name of the function `f'.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
r:=f(r,(hash[r]-1)div xmax_char,(hash[r]-1)mod xmax_char);
@y
@@ -284,8 +284,8 @@ f:=((tfm[k+1] mod 16)*intcast(@'400)+tfm[k+2])*@'400+tfm[k+3];
@p function f(@!h,@!x,@!y:index):index; forward;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
@y
-@p
-ifdef('notdef')
+@p
+ifdef('notdef')
function f_fn(@!h,@!x,@!y:index):index; begin end;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
endif('notdef')
@@ -297,11 +297,11 @@ else eval:=f_fn(h,x,y);
@z
% [95] The real definition of f.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@p function f;
@y
-@p function f_fn(@!h,@!x,@!y:index):index;
+@p function f_fn(@!h,@!x,@!y:index):index;
@z
@x
f:=lig_z[h];
@@ -310,7 +310,7 @@ f_fn:=lig_z[h];
@z
% [99] No final newline unless verbose.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
do_characters; print_ln('.');@/
@y
diff --git a/Build/source/texk/web2c/omegaware/ofm2opl.web b/Build/source/texk/web2c/omegaware/ofm2opl.web
index 8f4cc3fd963..1dd7039ba01 100644
--- a/Build/source/texk/web2c/omegaware/ofm2opl.web
+++ b/Build/source/texk/web2c/omegaware/ofm2opl.web
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -64,7 +64,7 @@ if \TeX\ or $\Omega$ complains that a \.{TFM} or an \.{OFM}
file is ``bad,'' this program will pinpoint the source or sources of
badness. A \.{PL} or \.{OPL} file output by this program can be edited
with a normal text editor, and the result can be converted back to \.{TFM}
-or \.{OFM} format using the companion program \.{OPLtoOFM}.
+or \.{OFM} format using the companion program \.{OPL2OFM}.
The first \.{TFtoPL} program was designed by Leo Guibas in the summer of
1978. Contributions by Frank Liang, Doug Wyatt, and Lyle Ramshaw
@@ -125,11 +125,11 @@ reduce \.{TFtoPL}'s capacity.
@!hash_size=130003; {preferably a prime number, a bit larger than the number
of character pairs in lig/kern steps}
@!hash_mult=16007; {another prime}
-@!max_char=65535; {the largest character number in a font}
-@!xmax_char=65536; {|max_char|+1}
-@!xxmax_char=65537;{|max_char|+2}
+@!max_char=65535; {the largest character number in a font}
+@!xmax_char=65536; {|max_char|+1}
+@!xxmax_char=65537;{|max_char|+2}
@!xmax_label=80001;{must be greater than |max_lig_steps|}
-@!mem_size=262152; {|max_char|*4+8}
+@!mem_size=262152; {|max_char|*4+8}
@ Here are some macros for common programming idioms.
@@ -139,7 +139,7 @@ reduce \.{TFtoPL}'s capacity.
@* Font metric data.
The following description of \.{TFM} files is not sufficient for
-\.{OFM} files. The additional documentation necessary for the
+\.{OFM} files. The additional documentation necessary for the
\.{OFM} files can be found in another file, such as the $\Omega$
change files.
@@ -585,7 +585,7 @@ else begin
eval_four_bytes(ec);
eval_four_bytes(nw);
eval_four_bytes(nh);
- eval_four_bytes(nd);
+ eval_four_bytes(nd);
eval_four_bytes(ni);
eval_four_bytes(nl);
eval_four_bytes(nk);
@@ -664,7 +664,7 @@ integer;
@!bytes_per_entry:integer;
@ @<Compute the base addresses@>=
-begin
+begin
ivalues_start:=header_length+lh;
fvalues_start:=ivalues_start+nki;
mvalues_start:=fvalues_start+nkf;
@@ -688,7 +688,7 @@ else if ofm_level=0 then begin
for i:=bc to ec do begin
char_start[i]:=4*char_base+8*(i-bc);
end;
- end
+ end
else begin
char_ptr:=4*char_base;
i:=bc;
@@ -794,7 +794,7 @@ end;
procedure set_no_ctag(c:char_type);
begin if not (ofm_level=1) then
- tfm[char_info(c)+5] :=
+ tfm[char_info(c)+5] :=
tfm[char_info(c)+5] div 8 * 8 + tfm[char_info(c)+5] mod 4;
end;
@@ -1443,10 +1443,10 @@ if nki>0 then begin
@ @<Check and output the $i$th ivalue table@>=
begin
-left; out('FONTIVALUE'); out_hex_number(i); out_ln;
+left; out('FONTIVALUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('IVALUE'); out_hex_number(j); out_ln;
+ left; out('IVALUE'); out_hex_number(j); out_ln;
value:=256*tfm[base_counter+2]+tfm[base_counter+3];
left; out('IVALUEVAL'); out_hex_number(value); right;
right;
@@ -1486,10 +1486,10 @@ if nkm>0 then begin
@ @<Check and output the $i$th mvalue table@>=
begin
-left; out('FONTMVALUE'); out_hex_number(i); out_ln;
+left; out('FONTMVALUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('MVALUE'); out_hex_number(j); out_ln;
+ left; out('MVALUE'); out_hex_number(j); out_ln;
left; out('MVALUEVAL'); out_fix(base_counter); right;
right;
base_counter:=base_counter+4;
@@ -1508,10 +1508,10 @@ if nkr>0 then
@ @<Check and output the $i$th rule table@>=
begin
-left; out('FONTRULE'); out_hex_number(i); out_ln;
+left; out('FONTRULE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('RULE'); out_hex_number(j); out_ln;
+ left; out('RULE'); out_hex_number(j); out_ln;
left; out('RULEWD'); out_fix(base_counter); right;
left; out('RULEHT'); out_fix(base_counter+4); right;
left; out('RULEDP'); out_fix(base_counter+8); right;
@@ -1535,17 +1535,17 @@ if nkg>0 then begin
@ @<Check and output the $i$th glue table@>=
begin
-left; out('FONTGLUE'); out_hex_number(i); out_ln;
+left; out('FONTGLUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('GLUE'); out_hex_number(j); out_ln;
+ left; out('GLUE'); out_hex_number(j); out_ln;
glue_subtype:=tfm[base_counter] div 16;
glue_argument_kind:=tfm[base_counter] mod 16;
glue_stretch_order:=tfm[base_counter+1] div 16;
glue_shrink_order:=tfm[base_counter+1] mod 16;
glue_argument:=tfm[base_counter+2]*256+tfm[base_counter+3];
left;
- out('GLUETYPE');
+ out('GLUETYPE');
case glue_subtype of
0: out(' H 0');
1: out(' H 1');
@@ -1556,13 +1556,13 @@ for j:=0 to number_entries-1 do begin
case glue_argument_kind of
1: begin
left; out('GLUERULE'); out_hex_number(glue_argument); right;
- end;
+ end;
2: begin
left; out('GLUECHAR'); out_hex_number(glue_argument); right;
- end;
+ end;
end;
left;
- out('GLUESTRETCHORDER');
+ out('GLUESTRETCHORDER');
case glue_stretch_order of
0: out(' H 0');
1: out(' H 1');
@@ -1572,7 +1572,7 @@ for j:=0 to number_entries-1 do begin
end;
right;
left;
- out('GLUESHRINKORDER');
+ out('GLUESHRINKORDER');
case glue_shrink_order of
0: out(' H 0');
1: out(' H 1');
@@ -1597,20 +1597,20 @@ if nkp>0 then begin
base_counter:=penalties_base*4;
for i:=0 to nkp-1 do @<Check and output the $i$th penalty table@>;
end;
-
+
@ @<Check and output the $i$th penalty table@>=
-begin
-left; out('FONTPENALTY'); out_hex_number(i); out_ln;
-number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
-for j:=0 to number_entries-1 do begin
+begin
+left; out('FONTPENALTY'); out_hex_number(i); out_ln;
+number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
+for j:=0 to number_entries-1 do begin
left; out('PENALTY'); out_hex_number(j); out_ln;
- value:=256*tfm[base_counter+2]+tfm[base_counter+3];
- left; out('PENALTYVAL'); out_hex_number(value); right;
- right;
- base_counter:=base_counter+4;
- end;
+ value:=256*tfm[base_counter+2]+tfm[base_counter+3];
+ left; out('PENALTYVAL'); out_hex_number(value); right;
+ right;
+ base_counter:=base_counter+4;
+ end;
right;
-start_counter:=start_counter+4;
+start_counter:=start_counter+4;
end;
@ We need to check the range of all the remaining |fix_word| values,
@@ -1959,14 +1959,17 @@ if width_index(c)>0 then begin
else if i<(nki+nkf) then begin
out('CHARFVALUE'); out_hex_number(i-nki);
end
- else if i<(nki+nkf+nkr) then begin
- out('CHARRULE'); out_hex_number(i-nki-nkf);
+ else if i<(nki+nkf+nkm) then begin
+ out('CHARMVALUE'); out_hex_number(i-nki-nkf);
+ end
+ else if i<(nki+nkf+nkm+nkr) then begin
+ out('CHARRULE'); out_hex_number(i-nki-nkf-nkm);
end
- else if i<(nki+nkf+nkr+nkg) then begin
- out('CHARGLUE'); out_hex_number(i-nki-nkf-nkr);
+ else if i<(nki+nkf+nkm+nkr+nkg) then begin
+ out('CHARGLUE'); out_hex_number(i-nki-nkf-nkm-nkr);
end
- else if i<(nki+nkf+nkr+nkg+nkp) then begin
- out('CHARPENALTY'); out_hex_number(i-nki-nkf-nkr-nkg);
+ else if i<(nki+nkf+nkm+nkr+nkg+nkp) then begin
+ out('CHARPENALTY'); out_hex_number(i-nki-nkf-nkm-nkr-nkg);
end;
out_hex_number(char_param(c,i));
right;
@@ -2272,7 +2275,7 @@ both_z: begin class[h]:=pending; lig_z[h]:=eval(eval(x,lig_z[h]),y);
end;
pending: begin x_lig_cycle:=x; y_lig_cycle:=y;
lig_z[h]:=xxmax_char; class[h]:=simple;
- end; {the value |xxmax_char| will break all cycles,
+ end; {the value |xxmax_char| will break all cycles,
since it's not in |hash|}
end; {there are no other cases}
f:=lig_z[h];
diff --git a/Build/source/texk/web2c/omegaware/ofonts.test b/Build/source/texk/web2c/omegaware/ofonts.test
new file mode 100755
index 00000000000..9cdad045234
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/ofonts.test
@@ -0,0 +1,60 @@
+#! /bin/sh
+
+# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+tests=omegaware/tests
+
+test -d $tests || mkdir -p $tests
+
+VPL='ofontr1 ofontv4'
+OVP='ofontr2 ofontr3 ofontv5 ofontv6'
+
+for f in $VPL; do
+ ./opl2ofm -verbose $srcdir/$tests/$f.pl $tests/x$f.tfm || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ofm2opl -verbose $tests/x$f.tfm $tests/x$f.pl || exit 1
+ diff $srcdir/$tests/$f.pl $tests/x$f.pl || exit 1
+done
+
+for f in $OVP; do
+ ./opl2ofm -verbose $srcdir/$tests/$f $tests/x$f || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ofm2opl -verbose $tests/x$f $tests/x$f || exit 1
+ diff $srcdir/$tests/$f.opl $tests/x$f.opl || exit 1
+done
+
+rm -rf $tests/xofont*
+
+for f in ofontr0; do
+ ./opl2ofm -verbose $srcdir/$tests/$f.pl $tests/x$f.tfm || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ofm2opl -verbose $tests/x$f.tfm $tests/x$f.pl || exit 1
+ diff $srcdir/$tests/$f.pl $tests/x$f.pl || exit 1
+done
+
+for f in $VPL; do
+ ./ovp2ovf -verbose $srcdir/$tests/$f.vpl $tests/x$f.vf $tests/x$f.tfm || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ofm2opl -verbose $tests/x$f.tfm $tests/x$f.pl || exit 1
+ diff $srcdir/$tests/$f.pl $tests/x$f.pl || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=.:$srcdir/$tests \
+ ./ovf2ovp -verbose $tests/x$f.vf $tests/x$f.tfm $tests/x$f.vpl || exit 1
+ diff $srcdir/$tests/$f.vpl $tests/x$f.vpl || exit 1
+done
+
+for f in $OVP; do
+ ./ovp2ovf -verbose $srcdir/$tests/$f $tests/x$f $tests/x$f || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ofm2opl -verbose $tests/x$f $tests/x$f || exit 1
+ diff $srcdir/$tests/$f.opl $tests/x$f.opl || exit 1
+ TEXMFCNF=$srcdir/../kpathsea \
+ OFMFONTS=.:$srcdir/$tests \
+ ./ovf2ovp -verbose $tests/x$f $tests/x$f $tests/x$f || exit 1
+ diff $srcdir/$tests/$f.ovp $tests/x$f.ovp || exit 1
+done
+
+exit 0
+
+
diff --git a/Build/source/texk/web2c/omegaware/omfonts.test b/Build/source/texk/web2c/omegaware/omfonts.test
index 4bf1e48fa4e..38fafef64a2 100755
--- a/Build/source/texk/web2c/omegaware/omfonts.test
+++ b/Build/source/texk/web2c/omegaware/omfonts.test
@@ -3,32 +3,34 @@
# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
# You may freely use, modify and/or distribute this file.
-test -d tests || mkdir -p tests
+tests=omegaware/tests
-./pltotf $srcdir/tests/Cherokee tests/Cherokee || exit 1
+test -d $tests || mkdir -p $tests
+
+./pltotf $srcdir/$tests/Cherokee $tests/Cherokee || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./tftopl tests/Cherokee tests/xCherokee || exit 1
+ ./tftopl $tests/Cherokee $tests/xCherokee || exit 1
-diff $srcdir/tests/Cherokee.pl tests/xCherokee.pl || exit 1
+diff $srcdir/$tests/Cherokee.pl $tests/xCherokee.pl || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- OFMFONTS=./tests \
- ./ovp2ovf -verbose $srcdir/tests/OCherokee tests/OCherokee tests/OCherokee || exit 1
+ OFMFONTS=./$tests \
+ ./ovp2ovf -verbose $srcdir/$tests/OCherokee $tests/OCherokee $tests/OCherokee || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./ofm2opl -verbose tests/OCherokee tests/OCherokee || exit 1
+ ./ofm2opl -verbose $tests/OCherokee $tests/OCherokee || exit 1
-./opl2ofm -verbose tests/OCherokee tests/xOCherokee || exit 1
+./opl2ofm -verbose $tests/OCherokee $tests/xOCherokee || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./ofm2opl -verbose tests/xOCherokee tests/xOCherokee || exit 1
+ ./ofm2opl -verbose $tests/xOCherokee $tests/xOCherokee || exit 1
-diff tests/OCherokee.opl tests/xOCherokee.opl || exit 1
+diff $tests/OCherokee.opl $tests/xOCherokee.opl || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- OFMFONTS=.:./tests \
- ./ovf2ovp -verbose tests/OCherokee tests/OCherokee tests/xOCherokee || exit 1
+ OFMFONTS=.:./$tests \
+ ./ovf2ovp -verbose $tests/OCherokee $tests/OCherokee $tests/xOCherokee || exit 1
-diff $srcdir/tests/OCherokee.ovp tests/xOCherokee.ovp || exit 1
+diff $srcdir/$tests/OCherokee.ovp $tests/xOCherokee.ovp || exit 1
diff --git a/Build/source/texk/web2c/omegaware/opl2ofm.ch b/Build/source/texk/web2c/omegaware/opl2ofm.ch
index 6fee355c5e4..ff626c22e37 100644
--- a/Build/source/texk/web2c/omegaware/opl2ofm.ch
+++ b/Build/source/texk/web2c/omegaware/opl2ofm.ch
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -151,7 +151,7 @@ MBL_string:=' MBL'; RI_string:=' RI '; RCE_string:=' RCE';
% [118] Change the name of the variable `class', since AIX 3.1's <math.h>
% defines a function by that name.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@d pending=4 {$f(x,y)$ is being evaluated}
@y
@@ -162,24 +162,24 @@ MBL_string:=' MBL'; RI_string:=' RI '; RCE_string:=' RCE';
% [123] web2c can't handle these mutually recursive procedures.
% But let's do a fake definition of f here, so that it gets into web2c's
% symbol table...
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@p function f(@!h,@!x,@!y:indx):indx; forward;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
@y
-@p
-ifdef('notdef')
+@p
+ifdef('notdef')
function f(@!h,@!x,@!y:indx):indx; begin end;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
endif('notdef')
@z
% [124] ... and then really define it now.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@p function f;
@y
-@p function f(@!h,@!x,@!y:indx):indx;
+@p function f(@!h,@!x,@!y:indx):indx;
@z
@x [127] Fix up output of bytes.
@@ -230,7 +230,7 @@ var @!krn_ptr:0..max_kerns; {an index into |kern|}
@y
@z
-@x [147?] Be quiet unless verbose.
+@x [147?] Be quiet unless verbose.
read_input; print('.');@/
@y
read_input;
@@ -286,7 +286,7 @@ begin
write_ln (stderr, 'opl2ofm: Need one or two file arguments.');
usage ('opl2ofm');
end;
-
+
pl_name := extend_filename (cmdline (optind), 'opl');
{If an explicit output filename isn't given, construct it from |pl_name|.}
@@ -327,7 +327,7 @@ long_options[current_option].flag := address_of (verbose);
long_options[current_option].val := 1;
incr (current_option);
-@
+@
@<Glob...@> =
@!verbose: c_int_type;
diff --git a/Build/source/texk/web2c/omegaware/opl2ofm.web b/Build/source/texk/web2c/omegaware/opl2ofm.web
index d249ce6e3f7..3b3be4ad807 100644
--- a/Build/source/texk/web2c/omegaware/opl2ofm.web
+++ b/Build/source/texk/web2c/omegaware/opl2ofm.web
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -77,11 +77,11 @@ in 1989.
Extensions to handle extended font metric files (``\.{OFM}'') were
added by John Plaice in December 1995 and January 1996, resulting in the
-new program \.{OPLtoOFM}. In the following documentation, all unchanged
+new program \.{OPL2OFM}. In the following documentation, all unchanged
references to the \.{PLtoTF} program and to \.{TFM} and \.{PL} files also
-apply to the \.{OPLtoOFM} program and to \.{OFM} and \.{OPL} files.
+apply to the \.{OPL2OFM} program and to \.{OFM} and \.{OPL} files.
-The |banner| string defined here should be changed whenever \.{OPLtoOFM}
+The |banner| string defined here should be changed whenever \.{OPL2OFM}
gets modified.
@d banner=='This is OPL2OFM, Version 1.12'
@@ -128,15 +128,15 @@ reduce \.{PLtoTF}'s capacity.
@!hash_mult=16007; {another prime}
@!tfm_size=2000000; {maximum length of |tfm| data, in bytes}
@!lig_size=800000; {maximum length of |lig_kern| program, in words}
-@!max_char=65535; {the largest character number in a font}
-@!xmax_char=65536; {|max_char|+1}
-@!xxmax_char=65537;{|max_char|+2}
-@!xxxmax_char=65538;{|max_char|+3}
-@!mem_size=262144; {|max_char|*4+8}
-@!max_width=65535; {the largest character width number}
-@!max_height=255; {the largest character height number}
-@!max_depth=255; {the largest character depth number}
-@!max_italic=255; {the largest character italic correction number}
+@!max_char=65535; {the largest character number in a font}
+@!xmax_char=65536; {|max_char|+1}
+@!xxmax_char=65537;{|max_char|+2}
+@!xxxmax_char=65538;{|max_char|+3}
+@!mem_size=262144; {|max_char|*4+8}
+@!max_width=65535; {the largest character width number}
+@!max_height=255; {the largest character height number}
+@!max_depth=255; {the largest character depth number}
+@!max_italic=255; {the largest character italic correction number}
@ Here are some macros for common programming idioms.
@@ -865,6 +865,7 @@ dictionary is kept in |equiv[k]|. The numeric |equiv| codes are given
symbolic meanings by the following definitions.
@d comment_code=0
+@#{property names at the outer level}
@d check_sum_code=1
@d design_size_code=2
@d design_units_code=3
@@ -876,10 +877,20 @@ symbolic meanings by the following definitions.
@d font_dimen_code=9
@d lig_table_code=10
@d boundary_char_code=11
-@d font_dir_code=14
-@d n_font_dir_code=15
-@d character_code=16
+@d character_code=14
+@d font_dir_code=15
+@d n_font_dir_code=16
+@d ofm_level_code=17
+@d font_rule_code=18
+@d font_glue_code=19
+@d font_penalty_code=20
+@d font_mvalue_code=21
+@d font_fvalue_code=22
+@d font_ivalue_code=23
+@d char_repeat_code=24
+@#{property names in a FONTDIMEN list}
@d parameter_code=30
+@#{property names in a CHARACTER list}
@d char_info_code=70
@d width=1
@d height=2
@@ -928,27 +939,31 @@ symbolic meanings by the following definitions.
@d sec_mid_vert_code=char_info_code+sec_mid_vert
@d sec_base_slant_code=char_info_code+sec_base_slant
@d next_larger_code=100
-@d var_char_code=102
+@d char_ivalue_code=111
+@d char_fvalue_code=112
+@d char_mvalue_code=113
+@d char_rule_code=114
+@d char_glue_code=115
+@d char_penalty_code=116
+@d var_char_code=117
+@#{property names in a LIGTABLE list}
@d label_code=130
@d stop_code=131
@d skip_code=132
@d krn_code=133
@d lig_code=134
-@d ofm_level_code=140
-@d char_repeat_code=150
-@d char_ivalue_code=151
-@d char_fvalue_code=152
-@d char_mvalue_code=153
-@d char_rule_code=154
-@d char_glue_code=155
-@d char_penalty_code=156
-@d font_rule_code=160
-@d rule_code=161
+@d clabel_code=150
+@d cpen_code=151
+@d cglue_code=152
+@d cpenglue_code=153
+@d ckrn_code=154
+@#{property names in a FONTRULE list}
+@d rule_code=161
@d rule_width_code=162
@d rule_height_code=163
@d rule_depth_code=164
-@d font_glue_code=170
-@d glue_code=171
+@#{property names in a FONTGLUE list}
+@d glue_code=171
@d glue_type_code=172
@d glue_stretch_order_code=173
@d glue_shrink_order_code=174
@@ -957,41 +972,18 @@ symbolic meanings by the following definitions.
@d glue_shrink_code=177
@d glue_char_code=178
@d glue_rule_code=179
-@d order_unit_code=181
-@d order_fi_code=182
-@d order_fil_code=183
-@d order_fill_code=184
-@d order_filll_code=185
-@d type_normal_code=186
-@d type_aleaders_code=187
-@d type_cleaders_code=188
-@d type_xleaders_code=189
-@d font_penalty_code=190
-@d penalty_code=191
+@#{property names in a FONTPENALTY list}
+@d penalty_code=191
@d penalty_val_code=192
-@d font_mvalue_code=200
-@d mvalue_code=201
-@d mvalue_val_code=202
-@d font_fvalue_code=210
-@d fvalue_code=211
-@d fvalue_val_code=212
-@d font_ivalue_code=220
-@d ivalue_code=221
-@d ivalue_val_code=222
-@d clabel_code=231
-@d cpen_code=232
-@d cglue_code=233
-@d cpenglue_code=234
-@d ckrn_code=235
-@d TL_dir_code=240
-@d LT_dir_code=241
-@d TR_dir_code=242
-@d LB_dir_code=243
-@d BL_dir_code=244
-@d RT_dir_code=245
-@d BR_dir_code=246
-@d RB_dir_code=247
-
+@#{property names in a FONTMVALUE list}
+@d mvalue_code=193
+@d mvalue_val_code=194
+@#{property names in a FONTFVALUE list}
+@d fvalue_code=195
+@d fvalue_val_code=196
+@#{property names in a FONTIVALUE list}
+@d ivalue_code=197
+@d ivalue_val_code=198
@<Glo...@>=
@!equiv:array[0..max_name_index] of byte;
@@ -1157,15 +1149,6 @@ load8("G")("L")("U")("E")("C")("H")("A")("R")(glue_char_code);@/
load6("G")("L")("U")("E")("W")("D")(glue_width_code);@/
load11("G")("L")("U")("E")("S")("T")("R")("E")("T")("C")("H")(glue_stretch_code);@/
load10("G")("L")("U")("E")("S")("H")("R")("I")("N")("K")(glue_shrink_code);@/
-load4("U")("N")("I")("T")(order_unit_code);@/
-load2("F")("I")(order_fi_code);@/
-load3("F")("I")("L")(order_fil_code);@/
-load4("F")("I")("L")("L")(order_fill_code);@/
-load5("F")("I")("L")("L")("L")(order_filll_code);@/
-load6("N")("O")("R")("M")("A")("L")(type_normal_code);@/
-load8("A")("L")("E")("A")("D")("E")("R")("S")(type_aleaders_code);@/
-load8("C")("L")("E")("A")("D")("E")("R")("S")(type_cleaders_code);@/
-load8("X")("L")("E")("A")("D")("E")("R")("S")(type_xleaders_code);@/
load11("F")("O")("N")("T")("P")("E")("N")("A")("L")("T")("Y")(font_penalty_code);@/
load7("P")("E")("N")("A")("L")("T")("Y")(penalty_code);@/
load10("P")("E")("N")("A")("L")("T")("Y")("V")("A")("L")(penalty_val_code);@/
@@ -1178,14 +1161,6 @@ load9("F")("V")("A")("L")("U")("E")("V")("A")("L")(fvalue_val_code);@/
load10("F")("O")("N")("T")("I")("V")("A")("L")("U")("E")(font_ivalue_code);@/
load6("I")("V")("A")("L")("U")("E")(ivalue_code);@/
load9("I")("V")("A")("L")("U")("E")("V")("A")("L")(ivalue_val_code);@/
-load2("T")("L")(TL_dir_code);
-load2("L")("T")(LT_dir_code);
-load2("T")("R")(TR_dir_code);
-load2("L")("B")(LB_dir_code);
-load2("B")("L")(BL_dir_code);
-load2("R")("T")(RT_dir_code);
-load2("B")("R")(BR_dir_code);
-load2("R")("B")(RB_dir_code);
@ @<Enter the parameter names@>=
load5("S")("L")("A")("N")("T")(parameter_code+1);@/
@@ -1787,9 +1762,7 @@ might arise.
@<Read a font property value@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code<110) and (cur_code>character_code) then
- flush_error('This property name doesn''t belong on the outer level')
-else if (cur_code>=110) and ((cur_code mod 10)<>0) then
+else if cur_code>char_repeat_code then
flush_error('This property name doesn''t belong on the outer level')
@.This property name doesn't belong...@>
else begin @<Read the font property value specified by |cur_code|@>;
@@ -1964,7 +1937,10 @@ end
@ @<Read a ligature/kern command@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code>=label_code) and (cur_code<=(lig_code+11)) then begin
+else if (cur_code<label_code)or(cur_code>ckrn_code) then
+ flush_error('This property name doesn''t belong in a LIGTABLE list')
+@.This property name doesn't belong...@>
+else begin
case cur_code of
label_code:@<Read a label step@>;
stop_code:@<Read a stop step@>;
@@ -1972,21 +1948,14 @@ else if (cur_code>=label_code) and (cur_code<=(lig_code+11)) then begin
krn_code:@<Read a kerning step@>;
lig_code,lig_code+1,lig_code+2,lig_code+3,lig_code+5,
lig_code+6,lig_code+7,lig_code+11:@<Read a ligature step@>;
- end; {there are no other cases |>=label_code|}
- finish_the_property;
-end
-else if (cur_code>=clabel_code) and (cur_code<=cpenglue_code) then begin
- case cur_code of
clabel_code:@<Read an extended label step@>;
cpen_code:@<Read an extended penalty step@>;
cglue_code:@<Read an extended glue step@>;
cpenglue_code:@<Read an extended penalty/glue step@>;
ckrn_code:@<Read an extended kern step@>;
- end; {there are no other cases |>=label_code|}
+ end; {there are no other cases |>=label_code| and |<=ckrn_code|}
finish_the_property;
-end
-else flush_error('This property name doesn''t belong in a LIGTABLE list');
-@.This property name doesn't belong...@>
+ end;
end
@ When a character is about to be tagged, we call the following
@@ -2157,27 +2126,27 @@ else incr(nl);
lk_step_ended:=true;
end
-@ @<Read an extended kern step@>=
+@ @<Read an extended kern step@>=
begin lig_kern[nl].b0:=256; lig_kern[nl].b1:=get_byte;
lig_kern[nl].b2:=20;
-kern[nk]:=get_fix; krn_ptr:=0;
-while kern[krn_ptr]<>kern[nk] do incr(krn_ptr);
+kern[nk]:=get_fix; krn_ptr:=0;
+while kern[krn_ptr]<>kern[nk] do incr(krn_ptr);
if krn_ptr=nk then begin
- if nk<max_kerns then incr(nk)
+ if nk<max_kerns then incr(nk)
else begin
err_print('Sorry, too many different kerns for me to handle');
-@.Sorry, too many different kerns...@>
- decr(krn_ptr);
- end;
- end;
-if krn_ptr>65535 then
- err_print('Sorry, too many different kerns for me to handle');
+@.Sorry, too many different kerns...@>
+ decr(krn_ptr);
+ end;
+ end;
+if krn_ptr>65535 then
+ err_print('Sorry, too many different kerns for me to handle');
lig_kern[nl].b3:=krn_ptr;
-if nl>=max_lig_steps-1 then
- err_print('Sorry, LIGTABLE too long for me to handle')
-@.Sorry, LIGTABLE too long...@>
-else incr(nl);
-lk_step_ended:=true;
+if nl>=max_lig_steps-1 then
+ err_print('Sorry, LIGTABLE too long for me to handle')
+@.Sorry, LIGTABLE too long...@>
+else incr(nl);
+lk_step_ended:=true;
end
@ @<Globals...@>=
@@ -2297,7 +2266,7 @@ for c:=(cprime+1) to (cprime+crange) do begin
char_ht[c]:=char_ht[cprime];
char_dp[c]:=char_dp[cprime];
char_ic[c]:=char_ic[cprime];
- for tab:=0 to (nki+nkf+nkr+nkg+nkp-1) do begin
+ for tab:=0 to (nki+nkf+nkm+nkr+nkg+nkp-1) do begin
char_table[c,tab]:= char_table[cprime,tab];
end;
end;
@@ -2317,13 +2286,28 @@ for c:=0 to max_char do
for ch_table:=0 to char_param_tables do
char_table[c,ch_table]:=0;
-@ @<Read a character property@>=
+@ @d get_char_table_entry(#)==
+ begin ch_table:=get_integer;
+ if (ch_table<0)or(ch_table>=#) then
+ flush_error('Character property index out of range')
+@.Character property index...@>
+ else begin get_char_table_entry_end
+@d get_char_table_entry_end(#)==
+ ch_table:=ch_table+#;
+ if ch_table>char_param_tables then
+ flush_error('Character property exceeds table size')
+@.Character property exceeds...@>
+ else begin
+ if ch_table>npc then npc:=ch_table;
+ char_table[c,ch_table]:=get_integer;
+ end;
+ end;
+ end
+
+@<Read a character property@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code<char_wd_code)or
- ((cur_code>var_char_code)and
- ((cur_code<char_ivalue_code)or(cur_code>char_penalty_code)))
-then
+else if (cur_code<char_wd_code)or(cur_code>var_char_code) then
flush_error('This property name doesn''t belong in a CHARACTER list')
@.This property name doesn't belong...@>
else begin
@@ -2332,65 +2316,35 @@ else begin
char_ht_code:char_ht[c]:=sort_in(height,get_fix);
char_dp_code:char_dp[c]:=sort_in(depth,get_fix);
char_ic_code:char_ic[c]:=sort_in(italic,get_fix);
- sec_width_code:temp_value:=get_fix;
- sec_height_code:temp_value:=get_fix;
- sec_depth_code:temp_value:=get_fix;
- sec_italic_code:temp_value:=get_fix;
- accent_code:temp_value:=get_fix;
- prim_top_axis_code:temp_value:=get_fix;
- prim_top_axis_bis_code:temp_value:=get_fix;
- prim_bot_axis_code:temp_value:=get_fix;
- prim_bot_axis_bis_code:temp_value:=get_fix;
- prim_mid_hor_code:temp_value:=get_fix;
- prim_mid_vert_code:temp_value:=get_fix;
- prim_base_slant_code:temp_value:=get_fix;
- sec_top_axis_code:temp_value:=get_fix;
- sec_top_axis_bis_code:temp_value:=get_fix;
- sec_bot_axis_code:temp_value:=get_fix;
- sec_bot_axis_bis_code:temp_value:=get_fix;
- sec_mid_hor_code:temp_value:=get_fix;
- sec_mid_vert_code:temp_value:=get_fix;
+ sec_width_code,
+ sec_height_code,
+ sec_depth_code,
+ sec_italic_code,
+ accent_code,
+ prim_top_axis_code,
+ prim_top_axis_bis_code,
+ prim_bot_axis_code,
+ prim_bot_axis_bis_code,
+ prim_mid_hor_code,
+ prim_mid_vert_code,
+ prim_base_slant_code,
+ sec_top_axis_code,
+ sec_top_axis_bis_code,
+ sec_bot_axis_code,
+ sec_bot_axis_bis_code,
+ sec_mid_hor_code,
+ sec_mid_vert_code,
sec_base_slant_code:temp_value:=get_fix;
next_larger_code:begin check_tag(c); char_tag[c]:=list_tag;
char_remainder[c]:=get_byte;
end;
var_char_code:@<Read an extensible recipe for |c|@>;
- char_ivalue_code: begin
- ch_table:=get_integer;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkci then nkci:=ch_table;
- end;
- char_fvalue_code: begin
- ch_table:=get_integer+nki;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcf then nkcf:=ch_table;
- end;
- char_mvalue_code: begin
- ch_table:=get_integer+nki+nkf;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcm then nkcm:=ch_table;
- end;
- char_rule_code: begin
- ch_table:=get_integer+nki+nkf+nkm;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcr then nkcr:=ch_table;
- end;
- char_glue_code: begin
- ch_table:=get_integer+nki+nkf+nkm+nkr;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcg then nkcg:=ch_table;
- end;
- char_penalty_code: begin
- ch_table:=get_integer+nki+nkf+nkm+nkr+nkg;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcp then nkcp:=ch_table;
- end;
+ char_ivalue_code: get_char_table_entry(nki)(0);
+ char_fvalue_code: get_char_table_entry(nkf)(nki);
+ char_mvalue_code: get_char_table_entry(nkm)(nki+nkf);
+ char_rule_code: get_char_table_entry(nkr)(nki+nkf+nkm);
+ char_glue_code: get_char_table_entry(nkg)(nki+nkf+nkm+nkr);
+ char_penalty_code: get_char_table_entry(nkp)(nki+nkf+nkm+nkr+nkg);
end;@/
finish_the_property;
end;
@@ -2438,22 +2392,22 @@ which prints a progress report as the file is being read.
{strings for output in the user's external character set}
@!MBL_string,@!RI_string,@!RCE_string:packed array [1..3] of char;
{handy string constants for |face| codes}
-
+
@ @<Set init...@>=
ASCII_04:=' !"#$%&''()*+,-./0123456789:;<=>?';@/
ASCII_10:='@@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_';@/
ASCII_14:='`abcdefghijklmnopqrstuvwxyz{|}~ ';@/
HEX:='0123456789ABCDEF';@/
MBL_string:='MBL'; RI_string:='RI '; RCE_string:='RCE';
-
+
@ The array |dig| will hold a sequence of digits to be output.
-
+
@<Glob...@>=
@!dig:array[0..32] of integer;
@ Here, in fact, are two procedures that output
|dig[j-1]|$\,\ldots\,$|dig[0]|, given $j>0$.
-
+
@p procedure out_digs(j:integer); {outputs |j| digits}
begin repeat decr(j); out(HEX[1+dig[j]]);
until j=0;
@@ -2467,11 +2421,11 @@ end;
@ The |print_number| procedure indicates how |print_digs| can be used.
This procedure can print in octal, decimal or hex notation.
-
+
@d print_hex(#)==print_number(#,16)
@d print_octal(#)==print_number(#,8)
@d print_decimal(#)==print_number(#,10)
-
+
@p procedure print_number(c:integer; form:integer); {prints value of |c|}
var j:0..32; {index into |dig|}
begin
@@ -2845,6 +2799,18 @@ First of all, it is convenient to have an abbreviation for output to the
@d out(#)==write(tfm_file,#)
+@p procedure out_int(@!x:integer); {output a possibly negative value}
+begin if x<0 then begin
+ x:=x+@"40000000;
+ x:=x+@"40000000;
+ out((x div @"1000000)+@"80);
+ end
+else out(x div @"1000000);
+out((x mod @"1000000) div @"10000);
+out((x mod @"10000) div @"100);
+out(x mod @"100);
+end;
+
@ The general plan for producing \.{TFM} files is long but simple:
@<Do the font metric output@>=
@@ -2874,6 +2840,9 @@ and the total number of words in the \.{TFM} file (|lf|).
@!temp_width:fix_word; {width being used to compute a check sum}
@!ncw,@!nco,@!npc:integer;
+@ @<Set init...@>=
+npc:=-1;
+
@ It might turn out that no characters exist at all. But \.{PLtoTF} keeps
going and writes the \.{TFM} anyway. In this case |ec| will be~0 and |bc|
will be~1.
@@ -3020,18 +2989,7 @@ end
@<Compute the character info size@>=
if ofm_level=1 then begin
ncw:=0;
- if nkcp>-1 then
- npc:=nki+nkf+nkr+nkg+nkcp+1
- else if nkcg>-1 then
- npc:=nki+nkf+nkr+nkcg+1
- else if nkcr>-1 then
- npc:=nki+nkf+nkcr+1
- else if nkcf>-1 then
- npc:=nki+nkcf+1
- else if nkci>-1 then
- npc:=nkci+1
- else
- npc:=0;
+ incr(npc);
needed_space:=(12+npc*2) div 4;
extra_bytes:=(needed_space*4) - (10+npc*2);
for c:=bc to ec do begin
@@ -3521,7 +3479,6 @@ end;
@!rules:array[rule_array_type,rule_entry_type] of rule_node;
@!npr:array[rule_array_type] of integer;
@!nkr:integer;
-@!nkcr:integer;
@!nwr:integer;
@!r_array:integer;
@!r_number:integer;
@@ -3532,7 +3489,6 @@ for r_array := 0 to rule_arrays do begin
@<Null out the rule@>;
end;
nkr:=-1;
-nkcr:=-1;
@ @<Read font rule list@>=
begin
@@ -3554,28 +3510,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a rule@>=
+
+@ @<Read a rule@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>rule_code then
- flush_error('This property name doesn''t belong in a RULE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>rule_code then
+ flush_error('This property name doesn''t belong in a FONTRULE list')
else begin
r_number:=get_integer;
- if r_number>rule_entries then
- flush_error('This RULE index is too big for my present table size')
+ if r_number>rule_entries then
+ flush_error('This RULE index is too big for my present table size')
else if r_number<0 then
flush_error('This RULE index is negative')
else begin
while npr[r_array]<r_number do begin
incr(npr[r_array]); @<Null out the rule@>;
- end;
+ end;
@<Read all of a rule's values@>;
- finish_the_property;
+ finish_the_property;
end;
- end;
-end
+ end;
+end
@ @<Null out the rule@>=
begin
@@ -3598,15 +3554,20 @@ end
@ @<Read a single rule value@>=
begin
get_name;
-case cur_code of
- rule_width_code:
- rules[r_array,r_number].rn_width:=get_fix;
- rule_height_code:
- rules[r_array,r_number].rn_height:=get_fix;
- rule_depth_code:
- rules[r_array,r_number].rn_depth:=get_fix;
+if cur_code=comment_code then skip_to_end_of_item
+else if (cur_code<rule_width_code)or(cur_code>rule_depth_code) then
+ flush_error('This property name doesn''t belong in a RULE list')
+else begin
+ case cur_code of
+ rule_width_code:
+ rules[r_array,r_number].rn_width:=get_fix;
+ rule_height_code:
+ rules[r_array,r_number].rn_height:=get_fix;
+ rule_depth_code:
+ rules[r_array,r_number].rn_depth:=get_fix;
+ end;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for rules@>=
@@ -3640,7 +3601,7 @@ end
@!glue_arrays=arrays_per_kind;
@!glue_entries=entries_per_array;
-@
+@
@d t_normal==0
@d t_aleaders==1
@d t_cleaders==2
@@ -3675,7 +3636,6 @@ end;
@!glues:array[glue_array_type,glue_entry_type] of glue_node;
@!npg:array[glue_array_type] of integer;
@!nkg:integer;
-@!nkcg:integer;
@!nwg:integer;
@!g_array:integer;
@!g_byte:integer;
@@ -3688,7 +3648,6 @@ begin
@<Null out the glue@>;
end;
nkg:=-1;
-nkcg:=-1;
@ @<Read font glue list@>=
begin
@@ -3710,28 +3669,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a glue@>=
+
+@ @<Read a glue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>glue_code then
- flush_error('This property name doesn''t belong in a GLUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>glue_code then
+ flush_error('This property name doesn''t belong in a FONTGLUE list')
else begin
g_number:=get_integer;
- if g_number>glue_entries then
- flush_error('This GLUE index is too big for my present table size')
+ if g_number>glue_entries then
+ flush_error('This GLUE index is too big for my present table size')
else if g_number<0 then
flush_error('This GLUE index is negative')
else begin
while npg[g_array]<g_number do begin
incr(npg[g_array]); @<Null out the glue@>;
- end;
+ end;
@<Read all of a glue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the glue@>=
begin
@@ -3759,44 +3718,49 @@ end
@ @<Read a single glue value@>=
begin
get_name;
-case cur_code of
- glue_width_code:
- glues[g_array,g_number].gn_width:=get_fix;
- glue_stretch_code:
- glues[g_array,g_number].gn_stretch:=get_fix;
- glue_shrink_code:
- glues[g_array,g_number].gn_shrink:=get_fix;
- glue_type_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>3) then begin
- g_byte:=0;
+if cur_code=comment_code then skip_to_end_of_item
+else if (cur_code<glue_type_code)or(cur_code>glue_rule_code) then
+ flush_error('This property name doesn''t belong in a GLUE list')
+else begin
+ case cur_code of
+ glue_width_code:
+ glues[g_array,g_number].gn_width:=get_fix;
+ glue_stretch_code:
+ glues[g_array,g_number].gn_stretch:=get_fix;
+ glue_shrink_code:
+ glues[g_array,g_number].gn_shrink:=get_fix;
+ glue_type_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>3) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_type:=g_byte;
end;
- glues[g_array,g_number].gn_type:=g_byte;
- end;
- glue_stretch_order_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>4) then begin
- g_byte:=0;
+ glue_stretch_order_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>4) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_stretch_order:=g_byte;
end;
- glues[g_array,g_number].gn_stretch_order:=g_byte;
- end;
- glue_shrink_order_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>4) then begin
- g_byte:=0;
+ glue_shrink_order_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>4) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_shrink_order:=g_byte;
+ end;
+ glue_char_code: begin
+ glues[g_array,g_number].gn_argument:=get_integer;
+ glues[g_array,g_number].gn_arg_type:=g_char;
+ end;
+ glue_rule_code: begin
+ glues[g_array,g_number].gn_argument:=get_integer;
+ glues[g_array,g_number].gn_arg_type:=g_rule;
end;
- glues[g_array,g_number].gn_shrink_order:=g_byte;
- end;
- glue_char_code: begin
- glues[g_array,g_number].gn_argument:=get_integer;
- glues[g_array,g_number].gn_arg_type:=g_char;
- end;
- glue_rule_code: begin
- glues[g_array,g_number].gn_argument:=get_integer;
- glues[g_array,g_number].gn_arg_type:=g_rule;
end;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for glues@>=
@@ -3852,7 +3816,6 @@ end;
@!penalties:array[penalty_array_type,penalty_entry_type] of penalty_node;
@!npp:array[penalty_array_type] of integer;
@!nkp:integer;
-@!nkcp:integer;
@!nwp:integer;
@!p_array:integer;
@!p_number:integer;
@@ -3863,7 +3826,6 @@ for p_array := 0 to penalty_arrays do begin
@<Null out the penalty@>;
end;
nkp:=-1;
-nkcp:=-1;
@ @<Read font penalty list@>=
begin
@@ -3885,28 +3847,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a penalty@>=
+
+@ @<Read a penalty@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>penalty_code then
- flush_error('This property name doesn''t belong in a PENALTY list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>penalty_code then
+ flush_error('This property name doesn''t belong in a FONTPENALTY list')
else begin
p_number:=get_integer;
- if p_number>penalty_entries then
- flush_error('This PENALTY index is too big for my present table size')
+ if p_number>penalty_entries then
+ flush_error('This PENALTY index is too big for my present table size')
else if p_number<0 then
flush_error('This PENALTY index is negative')
else begin
while npp[p_array]<p_number do begin
incr(npp[p_array]); @<Null out the penalty@>;
- end;
+ end;
@<Read all of a penalty's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the penalty@>=
begin
@@ -3927,11 +3889,13 @@ end
@ @<Read a single penalty value@>=
begin
get_name;
-case cur_code of
- penalty_val_code:
- penalties[p_array,p_number].pn_val:=get_integer;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>penalty_val_code then
+ flush_error('This property name doesn''t belong in a PENALTY list')
+else begin
+ penalties[p_array,p_number].pn_val:=get_integer;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for penalties@>=
@@ -3948,7 +3912,7 @@ end
begin
for p_array:= 0 to nkp-1 do
for p_number:=0 to npp[p_array]-1 do begin
- out_integer(penalties[p_array,p_number].pn_val);
+ out_int(penalties[p_array,p_number].pn_val);
end;
end
@@ -3975,7 +3939,6 @@ end;
@!mvalues:array[mvalue_array_type,mvalue_entry_type] of mvalue_node;
@!npm:array[mvalue_array_type] of integer;
@!nkm:integer;
-@!nkcm:integer;
@!nwm:integer;
@!m_array:integer;
@!m_number:integer;
@@ -3986,7 +3949,6 @@ for m_array := 0 to mvalue_arrays do begin
@<Null out the mvalue@>;
end;
nkm:=-1;
-nkcm:=-1;
@ @<Read font mvalue list@>=
begin
@@ -4008,28 +3970,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an mvalue@>=
+
+@ @<Read an mvalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>mvalue_code then
- flush_error('This property name doesn''t belong in an MVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>mvalue_code then
+ flush_error('This property name doesn''t belong in an FONTMVALUE list')
else begin
m_number:=get_integer;
- if m_number>mvalue_entries then
- flush_error('This MVALUE index is too big for my present table size')
+ if m_number>mvalue_entries then
+ flush_error('This MVALUE index is too big for my present table size')
else if m_number<0 then
flush_error('This MVALUE index is negative')
else begin
while npm[m_array]<m_number do begin
incr(npm[m_array]); @<Null out the mvalue@>;
- end;
+ end;
@<Read all of an mvalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the mvalue@>=
begin
@@ -4050,11 +4012,13 @@ end
@ @<Read a single mvalue value@>=
begin
get_name;
-case cur_code of
- mvalue_val_code:
- mvalues[m_array,m_number].fn_val:=get_fix;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>mvalue_val_code then
+ flush_error('This property name doesn''t belong in a MVALUE list')
+else begin
+ mvalues[m_array,m_number].fn_val:=get_fix;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for mvalues@>=
@@ -4098,7 +4062,6 @@ end;
@!fvalues:array[fvalue_array_type,fvalue_entry_type] of fvalue_node;
@!npf:array[fvalue_array_type] of integer;
@!nkf:integer;
-@!nkcf:integer;
@!nwf:integer;
@!f_array:integer;
@!f_number:integer;
@@ -4109,7 +4072,6 @@ for f_array := 0 to fvalue_arrays do begin
@<Null out the fvalue@>;
end;
nkf:=-1;
-nkcf:=-1;
@ @<Read font fvalue list@>=
begin
@@ -4131,28 +4093,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an fvalue@>=
+
+@ @<Read an fvalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>fvalue_code then
- flush_error('This property name doesn''t belong in an FVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>fvalue_code then
+ flush_error('This property name doesn''t belong in an FONTFVALUE list')
else begin
f_number:=get_integer;
- if f_number>fvalue_entries then
- flush_error('This FVALUE index is too big for my present table size')
+ if f_number>fvalue_entries then
+ flush_error('This FVALUE index is too big for my present table size')
else if f_number<0 then
flush_error('This FVALUE index is negative')
else begin
while npf[f_array]<f_number do begin
incr(npf[f_array]); @<Null out the fvalue@>;
- end;
+ end;
@<Read all of an fvalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the fvalue@>=
begin
@@ -4173,11 +4135,13 @@ end
@ @<Read a single fvalue value@>=
begin
get_name;
-case cur_code of
- fvalue_val_code:
- fvalues[f_array,f_number].fn_val:=get_fix;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>fvalue_val_code then
+ flush_error('This property name doesn''t belong in a FVALUE list')
+else begin
+ fvalues[f_array,f_number].fn_val:=get_fix;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for fvalues@>=
@@ -4222,7 +4186,6 @@ end;
@!npi:array[ivalue_array_type] of integer;
@!font_i_array:boolean;
@!nki:integer;
-@!nkci:integer;
@!nwi:integer;
@!i_array:integer;
@!i_number:integer;
@@ -4233,7 +4196,6 @@ for i_array := 0 to ivalue_arrays do begin
@<Null out the ivalue@>;
end;
nki:=-1;
-nkci:=-1;
@ @<Read font ivalue list@>=
begin
@@ -4255,28 +4217,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an ivalue@>=
+
+@ @<Read an ivalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>ivalue_code then
- flush_error('This property name doesn''t belong in an IVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>ivalue_code then
+ flush_error('This property name doesn''t belong in an FONTIVALUE list')
else begin
i_number:=get_integer;
- if i_number>ivalue_entries then
- flush_error('This IVALUE index is too big for my present table size')
+ if i_number>ivalue_entries then
+ flush_error('This IVALUE index is too big for my present table size')
else if i_number<0 then
flush_error('This IVALUE index is negative')
else begin
while npi[i_array]<i_number do begin
incr(npi[i_array]); @<Null out the ivalue@>;
- end;
+ end;
@<Read all of an ivalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the ivalue@>=
begin
@@ -4297,11 +4259,13 @@ end
@ @<Read a single ivalue value@>=
begin
get_name;
-case cur_code of
- ivalue_val_code:
- ivalues[i_array,i_number].in_val:=get_integer;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>ivalue_val_code then
+ flush_error('This property name doesn''t belong in a IVALUE list')
+else begin
+ ivalues[i_array,i_number].in_val:=get_integer;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for ivalues@>=
@@ -4318,7 +4282,7 @@ end
begin
for i_array:= 0 to nki-1 do
for i_number:=0 to npi[i_array]-1 do begin
- out_integer(ivalues[i_array,i_number].in_val);
+ out_int(ivalues[i_array,i_number].in_val);
end;
end
diff --git a/Build/source/texk/web2c/omegaware/otangle.ch b/Build/source/texk/web2c/omegaware/otangle.ch
index ec6437a3a6a..8fc89c42d15 100644
--- a/Build/source/texk/web2c/omegaware/otangle.ch
+++ b/Build/source/texk/web2c/omegaware/otangle.ch
@@ -1,5 +1,5 @@
% otangle.ch: web2c changes to file tangle.ch
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -52,6 +52,16 @@
\def\title{TANGLE changes for C}
@z
+@x [2] Eliminate the |end_of_TANGLE| label.
+@d end_of_TANGLE = 9999 {go here to wrap it up}
+
+@y
+@z
+@x
+label end_of_TANGLE; {go here to finish}
+@y
+@z
+
@x [?] Define and call parse_arguments.
procedure initialize;
var @<Local variables for initialization@>@/
@@ -97,7 +107,7 @@ procedure initialize;
% [??] The text_char type is used as an array index into xord. The
% default type `char' produces signed integers, which are bad array
% indices in C.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
@d text_char == char {the data type of characters in text files}
@y
@@ -185,7 +195,7 @@ begin goto end_of_TANGLE;
end;
@y
@d jump_out==uexit(1)
-@d fatal_error(#)==begin new_line; write(stderr, #);
+@d fatal_error(#)==begin new_line; write(stderr, #);
error; mark_fatal; uexit(1);
end
@z
@@ -208,7 +218,7 @@ end;
@x [63] Remove conversion to uppercase
begin if c>="a" then c:=c-@'40; {merge lowercase with uppercase}
@y
- begin
+ begin
@z
@x [64] Delayed pool file opening.
@@ -370,6 +380,11 @@ print (banner); {print a ``banner line''}
print_ln (version_string);
@z
+@x Eliminate the |end_of_TANGLE| label.
+end_of_TANGLE:
+@y
+@z
+
@x
@<Print the job |history|@>;
@y
@@ -408,7 +423,7 @@ begin
address_of (option_index));
if getopt_return_val = -1 then begin
{End of arguments; we exit the loop below.} ;
-
+
end else if getopt_return_val = "?" then begin
usage ('otangle');
@@ -427,13 +442,13 @@ begin
write_ln (stderr, 'otangle: Need one or two file arguments.');
usage ('otangle');
end;
-
+
{Supply |".web"| and |".ch"| extensions if necessary.}
web_name := extend_filename (cmdline (optind), 'web');
if optind + 2 = argc then begin
chg_name := extend_filename (cmdline (optind + 1), 'ch');
end;
-
+
{Change |".web"| to |".p"| and use the current directory.}
pascal_name := basename_change_suffix (web_name, '.web', '.p');
end;
diff --git a/Build/source/texk/web2c/omegaware/otangle.test b/Build/source/texk/web2c/omegaware/otangle.test
index edc0fcf3759..5bccef12ad0 100755
--- a/Build/source/texk/web2c/omegaware/otangle.test
+++ b/Build/source/texk/web2c/omegaware/otangle.test
@@ -4,7 +4,7 @@
# You may freely use, modify and/or distribute this file.
TEXMFCNF=$srcdir/../kpathsea WEBINPUTS=$srcdir/cftests \
- ./otangle cftest cftest || exit 1
+ ./otangle cftest cftest || exit 1
diff cftest.p $srcdir/cftests/ocftest.p || exit 1
diff --git a/Build/source/texk/web2c/omegaware/otangle.web b/Build/source/texk/web2c/omegaware/otangle.web
index 4bd5a028ee2..02cf54e2c86 100644
--- a/Build/source/texk/web2c/omegaware/otangle.web
+++ b/Build/source/texk/web2c/omegaware/otangle.web
@@ -1,5 +1,5 @@
% otangle.web: Omega version of file tangle.web
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
diff --git a/Build/source/texk/web2c/omegaware/ovf2ovp.ch b/Build/source/texk/web2c/omegaware/ovf2ovp.ch
index 2e40680f093..ee8adc26d57 100644
--- a/Build/source/texk/web2c/omegaware/ovf2ovp.ch
+++ b/Build/source/texk/web2c/omegaware/ovf2ovp.ch
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -354,8 +354,8 @@ f:=((tfm[k+1] mod 16)*intcast(@'400)+tfm[k+2])*@'400+tfm[k+3];
@p function f(@!h,@!x,@!y:index):index; forward;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
@y
-@p
-ifdef('notdef')
+@p
+ifdef('notdef')
function lig_f(@!h,@!x,@!y:index):index; begin end;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
endif('notdef')
@@ -382,32 +382,11 @@ lig_f:=lig_z[h];
@x [124] Some cc's can't handle 136 case labels.
o:=vf[vf_ptr]; incr(vf_ptr);
case o of
- @<Cases of \.{DVI} instructions that can appear in character packets@>@;
@y
o:=vf[vf_ptr]; incr(vf_ptr);
if (o<=set1+3)or((o>=put1)and(o<=put1+3)) then
-begin if o>=set1 then
- if o>=put1 then c:=get_bytes(o-put1+1,false)
- else c:=get_bytes(o-set1+1,false)
- else c:=o;
- if (c<0)or(c>65535) then
- bad_vf('Character ',c:1,' is out of range and will be ignored')
- else if f=font_ptr then
- bad_vf('Character ',c:1,' in undeclared font will be ignored')
-@.Character...will be ignored@>
- else begin vc[font_chars[f+1]-1]:=c; {store |c| in the ``hole'' we left}
- k:=font_chars[f];@+while vc[k]<>c do incr(k);
- if k=font_chars[f+1]-1 then
- bad_vf('Character ',c:1,' in font ',f:1,' will be ignored')
- else begin if o>=put1 then out('(PUSH)');
- left; out('SETCHAR'); out_char(c);
- if o>=put1 then out(')(POP');
- right;
- end;
- end;
- end
+ @<Special cases of \.{DVI} instructions to typeset characters@>@;
else case o of
- @<Cases of \.{DVI} instructions that can appear in character packets@>
@z
@x [125] `signed' is a reserved word in ANSI C.
@@ -423,34 +402,23 @@ begin if o>=set1 then
begin write_ln(stderr, 'Stack overflow!'); uexit(1);
@z
-@x [129] This code moved outside the case statement
+@x [129] This block of code moved outside the case statement.
@ Before we typeset a character we make sure that it exists.
@<Cases...@>=
sixty_four_cases(set_char_0),sixty_four_cases(set_char_0+64),
four_cases(set1),four_cases(put1):begin if o>=set1 then
- if o>=put1 then c:=get_bytes(o-put1+1,false)
- else c:=get_bytes(o-set1+1,false)
- else c:=o;
- if (c<0)or(c>65535) then
- bad_vf('Character ',c:1,' is out of range and will be ignored')
- else if f=font_ptr then
- bad_vf('Character ',c:1,' in undeclared font will be ignored')
-@.Character...will be ignored@>
- else begin vc[font_chars[f+1]-1]:=c; {store |c| in the ``hole'' we left}
- k:=font_chars[f];@+while vc[k]<>c do incr(k);
- if k=font_chars[f+1]-1 then
- bad_vf('Character ',c:1,' in font ',f:1,' will be ignored')
- else begin if o>=put1 then out('(PUSH)');
- left; out('SETCHAR'); out_char(c);
- if o>=put1 then out(')(POP');
- right;
- end;
- end;
- end;
@y
@ Before we typeset a character we make sure that it exists.
-(These cases moved outside the case statement, section 124.)
+
+@<Special cases...@>=
+begin if o>=set1 then
+@z
+
+@x [129] End of block of code moved outside the case statement.
+ end;
+@y
+ end
@z
@x [132] Eliminate the |final_end| and |exit| labels.
@@ -549,7 +517,7 @@ begin
{Now |optind| is the index of first non-option on the command line.
We must have one two three remaining arguments.}
- if (optind + 1 <> argc) and (optind + 2 <> argc)
+ if (optind + 1 <> argc) and (optind + 2 <> argc)
and (optind + 3 <> argc) then begin
write_ln (stderr, 'ovf2ovp: Need one to three file arguments.');
usage ('ovf2ovp');
diff --git a/Build/source/texk/web2c/omegaware/ovf2ovp.web b/Build/source/texk/web2c/omegaware/ovf2ovp.web
index edc2c5c8b39..589271cd5ec 100644
--- a/Build/source/texk/web2c/omegaware/ovf2ovp.web
+++ b/Build/source/texk/web2c/omegaware/ovf2ovp.web
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -160,7 +160,7 @@ purposes, when fonts designed for one output device are unavailable on another.
@ A \.{VF} file is organized as a stream of 8-bit bytes, using conventions
borrowed from \.{DVI} and \.{PK} files. Thus, a device driver that knows
about \.{DVI} and \.{PK} format will already
-contain most of the mechanisms necessary to process \.{VF} files.
+contain most of the mechanisms necessary to process \.{VF} files.
We shall assume that \.{DVI} format is understood; the conventions in the
\.{DVI} documentation (see, for example, {\sl \TeX: The Program}, part 31)
are adopted here to define \.{VF} format.
@@ -204,7 +204,7 @@ is a |fix_word| relative to the design size of the virtual font.
Thus if the local font is to be used at the same size
as the design size of the virtual font itself, |s| will be the
integer value $2^{20}$. The value of |s| must be positive and less than
-$2^{24}$ (thus less than 16 when considered as a |fix_word|).
+$2^{24}$ (thus less than 16 when considered as a |fix_word|).
The dimension~|d| is a |fix_word| in units of printer's points; hence it
is identical to the design size found in the corresponding \.{TFM} file.
@@ -615,7 +615,7 @@ bytes, |tfm[0..(4*lf-1)]|.
@!xxchar_type=0..65537;
@!xxxchar_type=0..65538;
-@
+@
@<Glob...@>=
@!tfm:array [-1000..tfm_size] of byte; {the input data all goes here}
{the negative addresses avoid range checks for invalid characters}
@@ -730,7 +730,7 @@ else begin
eval_four_bytes(ec);
eval_four_bytes(nw);
eval_four_bytes(nh);
- eval_four_bytes(nd);
+ eval_four_bytes(nd);
eval_four_bytes(ni);
eval_four_bytes(nl);
eval_four_bytes(nk);
@@ -809,7 +809,7 @@ integer;
@!bytes_per_entry:integer;
@ @<Compute the base addresses@>=
-begin
+begin
ivalues_start:=header_length+lh;
fvalues_start:=ivalues_start+nki;
mvalues_start:=fvalues_start+nkf;
@@ -833,7 +833,7 @@ else if ofm_level=0 then begin
for i:=bc to ec do begin
char_start[i]:=4*char_base+8*(i-bc);
end;
- end
+ end
else begin
char_ptr:=4*char_base;
i:=bc;
@@ -939,7 +939,7 @@ end;
procedure set_no_ctag(c:char_type);
begin if not (ofm_level=1) then
- tfm[char_info(c)+5] :=
+ tfm[char_info(c)+5] :=
tfm[char_info(c)+5] div 8 * 8 + tfm[char_info(c)+5] mod 4;
end;
@@ -1263,7 +1263,7 @@ else begin
read_tfm_word; font_bc:=((b0*256+b1)*256+b2)*256+b3;
read_tfm_word; font_ec:=((b0*256+b1)*256+b2)*256+b3;
if font_ec<font_bc then font_bc:=font_ec+1;
- read_tfm_word;
+ read_tfm_word;
for k:=1 to 8 do begin
read_tfm_word;
end;
@@ -1983,10 +1983,10 @@ if nki>0 then begin
@ @<Check and output the $i$th ivalue table@>=
begin
-left; out('FONTIVALUE'); out_hex_number(i); out_ln;
+left; out('FONTIVALUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('IVALUE'); out_hex_number(j); out_ln;
+ left; out('IVALUE'); out_hex_number(j); out_ln;
value:=256*tfm[base_counter+2]+tfm[base_counter+3];
left; out('IVALUEVAL'); out_hex_number(value); right;
right;
@@ -2005,10 +2005,10 @@ if nkf>0 then begin
@ @<Check and output the $i$th fvalue table@>=
begin
-left; out('FONTFVALUE'); out_hex_number(i); out_ln;
+left; out('FONTFVALUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('FVALUE'); out_hex_number(j); out_ln;
+ left; out('FVALUE'); out_hex_number(j); out_ln;
left; out('FVALUEVAL'); out_fix(base_counter); right;
right;
base_counter:=base_counter+4;
@@ -2026,10 +2026,10 @@ if nkm>0 then begin
@ @<Check and output the $i$th mvalue table@>=
begin
-left; out('FONTMVALUE'); out_hex_number(i); out_ln;
+left; out('FONTMVALUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('MVALUE'); out_hex_number(j); out_ln;
+ left; out('MVALUE'); out_hex_number(j); out_ln;
left; out('MVALUEVAL'); out_fix(base_counter); right;
right;
base_counter:=base_counter+4;
@@ -2047,10 +2047,10 @@ if nkr>0 then begin
@ @<Check and output the $i$th rule table@>=
begin
-left; out('FONTRULE'); out_hex_number(i); out_ln;
+left; out('FONTRULE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('RULE'); out_hex_number(j); out_ln;
+ left; out('RULE'); out_hex_number(j); out_ln;
left; out('RULEWD'); out_fix(base_counter); right;
left; out('RULEHT'); out_fix(base_counter+4); right;
left; out('RULEDP'); out_fix(base_counter+8); right;
@@ -2074,17 +2074,17 @@ if nkg>0 then begin
@ @<Check and output the $i$th glue table@>=
begin
-left; out('FONTGLUE'); out_hex_number(i); out_ln;
+left; out('FONTGLUE'); out_hex_number(i); out_ln;
number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
for j:=0 to number_entries-1 do begin
- left; out('GLUE'); out_hex_number(j); out_ln;
+ left; out('GLUE'); out_hex_number(j); out_ln;
glue_subtype:=tfm[base_counter] div 16;
glue_argument_kind:=tfm[base_counter] mod 16;
glue_stretch_order:=tfm[base_counter+1] div 16;
glue_shrink_order:=tfm[base_counter+1] mod 16;
glue_argument:=tfm[base_counter+2]*256+tfm[base_counter+3];
left;
- out('GLUETYPE');
+ out('GLUETYPE');
case glue_subtype of
0: out(' H 0');
1: out(' H 1');
@@ -2095,13 +2095,13 @@ for j:=0 to number_entries-1 do begin
case glue_argument_kind of
1: begin
left; out('GLUERULE'); out_hex_number(glue_argument); right;
- end;
+ end;
2: begin
left; out('GLUECHAR'); out_hex_number(glue_argument); right;
- end;
+ end;
end;
left;
- out('GLUESTRETCHORDER');
+ out('GLUESTRETCHORDER');
case glue_stretch_order of
0: out(' H 0');
1: out(' H 1');
@@ -2111,7 +2111,7 @@ for j:=0 to number_entries-1 do begin
end;
right;
left;
- out('GLUESHRINKORDER');
+ out('GLUESHRINKORDER');
case glue_shrink_order of
0: out(' H 0');
1: out(' H 1');
@@ -2136,20 +2136,20 @@ if nkp>0 then begin
base_counter:=penalties_base*4;
for i:=0 to nkp-1 do @<Check and output the $i$th penalty table@>;
end;
-
+
@ @<Check and output the $i$th penalty table@>=
-begin
-left; out('FONTPENALTY'); out_hex_number(i); out_ln;
-number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
-for j:=0 to number_entries-1 do begin
+begin
+left; out('FONTPENALTY'); out_hex_number(i); out_ln;
+number_entries:=256*tfm[start_counter+2]+tfm[start_counter+3];
+for j:=0 to number_entries-1 do begin
left; out('PENALTY'); out_hex_number(j); out_ln;
- value:=256*tfm[base_counter+2]+tfm[base_counter+3];
- left; out('PENALTYVAL'); out_hex_number(value); right;
- right;
- base_counter:=base_counter+4;
- end;
+ value:=256*tfm[base_counter+2]+tfm[base_counter+3];
+ left; out('PENALTYVAL'); out_hex_number(value); right;
+ right;
+ base_counter:=base_counter+4;
+ end;
right;
-start_counter:=start_counter+4;
+start_counter:=start_counter+4;
end;
@ We need to check the range of all the remaining |fix_word| values,
@@ -2491,14 +2491,17 @@ while (c<=ec) do begin
else if i<(nki+nkf) then begin
out('CHARFVALUE'); out_hex_number(i-nki);
end
- else if i<(nki+nkf+nkr) then begin
- out('CHARRULE'); out_hex_number(i-nki-nkf);
+ else if i<(nki+nkf+nkm) then begin
+ out('CHARMVALUE'); out_hex_number(i-nki-nkf);
end
- else if i<(nki+nkf+nkr+nkg) then begin
- out('CHARGLUE'); out_hex_number(i-nki-nkf-nkr);
+ else if i<(nki+nkf+nkm+nkr) then begin
+ out('CHARRULE'); out_hex_number(i-nki-nkf-nkm);
end
- else if i<(nki+nkf+nkr+nkg+nkp) then begin
- out('CHARPENALTY'); out_hex_number(i-nki-nkf-nkr-nkg);
+ else if i<(nki+nkf+nkm+nkr+nkg) then begin
+ out('CHARGLUE'); out_hex_number(i-nki-nkf-nkm-nkr);
+ end
+ else if i<(nki+nkf+nkm+nkr+nkg+nkp) then begin
+ out('CHARPENALTY'); out_hex_number(i-nki-nkf-nkm-nkr-nkg);
end;
out_hex_number(char_param(c,i));
right;
@@ -2809,7 +2812,7 @@ both_z: begin class[h]:=pending; lig_z[h]:=eval(eval(x,lig_z[h]),y);
end;
pending: begin x_lig_cycle:=x; y_lig_cycle:=y;
lig_z[h]:=xxmax_char; class[h]:=simple;
- end; {the value |xxmax_char| will break all cycles,
+ end; {the value |xxmax_char| will break all cycles,
since it's not in |hash|}
end; {there are no other cases}
f:=lig_z[h];
@@ -2973,7 +2976,7 @@ push:begin if top=max_stack then
incr(top); wstack[top]:=wstack[top-1]; xstack[top]:=xstack[top-1];
ystack[top]:=ystack[top-1]; zstack[top]:=zstack[top-1]; out('(PUSH)');
out_ln;
- end;
+ end;
pop:if top=0 then bad_vf('More pops than pushes!')
@.More pops than pushes@>
else begin decr(top); out('(POP)'); out_ln;
diff --git a/Build/source/texk/web2c/omegaware/ovp2ovf.ch b/Build/source/texk/web2c/omegaware/ovp2ovf.ch
index 503a32fef37..d96af15c18c 100644
--- a/Build/source/texk/web2c/omegaware/ovp2ovf.ch
+++ b/Build/source/texk/web2c/omegaware/ovp2ovf.ch
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -91,7 +91,7 @@ rewritebin (tfm_file, tfm_name);
% [89] `index' is not a good choice for an identifier on Unix systems.
% Neither is `class', on AIX.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
|k|th element of its list.
@y
@@ -134,8 +134,8 @@ HEX:=' 0123456789ABCDEF';@/
@p function f(@!h,@!x,@!y:indx):indx; forward;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
@y
-@p
-ifdef('notdef')
+@p
+ifdef('notdef')
function f(@!h,@!x,@!y:indx):indx; begin end;@t\2@>
{compute $f$ for arguments known to be in |hash[h]|}
endif('notdef')
@@ -144,7 +144,7 @@ endif('notdef')
@x [153] Finish fixing up f.
@p function f;
@y
-@p function f(@!h,@!x,@!y:indx):indx;
+@p function f(@!h,@!x,@!y:indx):indx;
@z
@x [156] Change TFM-byte output to fix ranges.
@@ -183,7 +183,7 @@ begin if fabs(x/design_units)>=16.0 then begin
% [141] char_remainder[c] is unsigned, and label_table[sort_ptr].rr
% might be -1, and if -1 is coerced to being unsigned, it will be bigger
% than anything else.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
while label_table[sort_ptr].rr>char_remainder[c] do begin
@y
@@ -202,7 +202,7 @@ var @!krn_ptr:0..max_kerns; {an index into |kern|}
@y
@z
-@x [181?] Be quiet unless verbose.
+@x [181?] Be quiet unless verbose.
read_input; print_ln('.');@/
@y
read_input;
@@ -238,7 +238,7 @@ begin
address_of (option_index));
if getopt_return_val = -1 then begin
{End of arguments; we exit the loop below.} ;
-
+
end else if getopt_return_val = "?" then begin
usage ('ovp2ovf'); {|getopt| has already given an error message.}
@@ -254,7 +254,7 @@ begin
{Now |optind| is the index of first non-option on the command line.
We must have one to three remaining arguments.}
- if (optind + 1 <> argc) and (optind + 2 <> argc)
+ if (optind + 1 <> argc) and (optind + 2 <> argc)
and (optind + 3 <> argc) then begin
write_ln (stderr, 'ovp2ovf: Need one to three file arguments.');
usage ('ovp2ovf');
diff --git a/Build/source/texk/web2c/omegaware/ovp2ovf.web b/Build/source/texk/web2c/omegaware/ovp2ovf.web
index 69c1ded4d6b..5591ce52d88 100644
--- a/Build/source/texk/web2c/omegaware/ovp2ovf.web
+++ b/Build/source/texk/web2c/omegaware/ovp2ovf.web
@@ -1,4 +1,4 @@
-%
+%
% This file is part of the Omega project, which
% is based in the web2c distribution of TeX.
%
@@ -1057,7 +1057,7 @@ var k:0..longest_name; {index into |cur_name|}
@!cur_hash_reset:boolean;
begin @<Compute the hash code, |cur_hash|, for |cur_name|@>;
not_found:=true;
-cur_hash_reset:=false;
+cur_hash_reset:=false;
while not_found do begin
if (cur_hash=0) and (cur_hash_reset) then
not_found:=false
@@ -1075,7 +1075,7 @@ while not_found do begin
for k:=1 to name_length do
if dictionary[j+k-1]<>cur_name[k] then not_found:=true;
end
- end
+ end
end
end;
name_ptr:=nhash[cur_hash];
@@ -1091,6 +1091,7 @@ dictionary is kept in |equiv[k]|. The numeric |equiv| codes are given
symbolic meanings by the following definitions.
@d comment_code=0
+@#{property names at the outer level}
@d check_sum_code=1
@d design_size_code=2
@d design_units_code=3
@@ -1104,15 +1105,20 @@ symbolic meanings by the following definitions.
@d boundary_char_code=11
@d virtual_title_code=12
@d map_font_code=13
-@d font_dir_code=14
-@d n_font_dir_code=15
-@d character_code=16
-@d font_name_code=21
-@d font_area_code=22
-@d font_checksum_code=23
-@d font_at_code=24
-@d font_dsize_code=25
+@d character_code=14
+@d font_dir_code=15
+@d n_font_dir_code=16
+@d ofm_level_code=17
+@d font_rule_code=18
+@d font_glue_code=19
+@d font_penalty_code=20
+@d font_mvalue_code=21
+@d font_fvalue_code=22
+@d font_ivalue_code=23
+@d char_repeat_code=24
+@#{property names in a FONTDIMEN list}
@d parameter_code=30
+@#{property names in a CHARACTER list}
@d char_info_code=70
@d width=1
@d height=2
@@ -1162,36 +1168,31 @@ symbolic meanings by the following definitions.
@d sec_base_slant_code=char_info_code+sec_base_slant
@d next_larger_code=100
@d map_code=101
-@d var_char_code=102
-@d select_font_code=110
-@d set_char_code=111
-@d set_rule_code=112
-@d move_right_code=113
-@d move_down_code=115
-@d push_code=117
-@d pop_code=118
-@d special_code=119
-@d special_hex_code=120
+@d char_ivalue_code=111
+@d char_fvalue_code=112
+@d char_mvalue_code=113
+@d char_rule_code=114
+@d char_glue_code=115
+@d char_penalty_code=116
+@d var_char_code=117
+@#{property names in a LIGTABLE list}
@d label_code=130
@d stop_code=131
@d skip_code=132
@d krn_code=133
@d lig_code=134
-@d ofm_level_code=140
-@d char_repeat_code=150
-@d char_ivalue_code=151
-@d char_fvalue_code=152
-@d char_mvalue_code=153
-@d char_rule_code=154
-@d char_glue_code=155
-@d char_penalty_code=156
-@d font_rule_code=160
-@d rule_code=161
+@d clabel_code=150
+@d cpen_code=151
+@d cglue_code=152
+@d cpenglue_code=153
+@d ckrn_code=154
+@#{property names in a FONTRULE list}
+@d rule_code=161
@d rule_width_code=162
@d rule_height_code=163
@d rule_depth_code=164
-@d font_glue_code=170
-@d glue_code=171
+@#{property names in a FONTGLUE list}
+@d glue_code=171
@d glue_type_code=172
@d glue_stretch_order_code=173
@d glue_shrink_order_code=174
@@ -1200,40 +1201,34 @@ symbolic meanings by the following definitions.
@d glue_shrink_code=177
@d glue_char_code=178
@d glue_rule_code=179
-@d order_unit_code=181
-@d order_fi_code=182
-@d order_fil_code=183
-@d order_fill_code=184
-@d order_filll_code=185
-@d type_normal_code=186
-@d type_aleaders_code=187
-@d type_cleaders_code=188
-@d type_xleaders_code=189
-@d font_penalty_code=190
-@d penalty_code=191
+@#{property names in a FONTPENALTY list}
+@d penalty_code=191
@d penalty_val_code=192
-@d font_mvalue_code=200
-@d mvalue_code=201
-@d mvalue_val_code=202
-@d font_fvalue_code=210
-@d fvalue_code=211
-@d fvalue_val_code=212
-@d font_ivalue_code=220
-@d ivalue_code=221
-@d ivalue_val_code=222
-@d clabel_code=231
-@d cpen_code=232
-@d cglue_code=233
-@d cpenglue_code=234
-@d ckrn_code=235
-@d TL_dir_code=240
-@d LT_dir_code=241
-@d TR_dir_code=242
-@d LB_dir_code=243
-@d BL_dir_code=244
-@d RT_dir_code=245
-@d BR_dir_code=246
-@d RB_dir_code=247
+@#{property names in a FONTMVALUE list}
+@d mvalue_code=193
+@d mvalue_val_code=194
+@#{property names in a FONTFVALUE list}
+@d fvalue_code=195
+@d fvalue_val_code=196
+@#{property names in a FONTIVALUE list}
+@d ivalue_code=197
+@d ivalue_val_code=198
+@#{property names in a MAPFONT list}
+@d font_name_code=200
+@d font_area_code=201
+@d font_checksum_code=202
+@d font_at_code=203
+@d font_dsize_code=204
+@#{property names in a MAP list}
+@d select_font_code=210
+@d set_char_code=211
+@d set_rule_code=212
+@d move_right_code=213
+@d move_down_code=215
+@d push_code=217
+@d pop_code=218
+@d special_code=219
+@d special_hex_code=220
@<Glo...@>=
@!equiv:array[0..max_name_index] of byte;
@@ -1400,15 +1395,6 @@ load8("G")("L")("U")("E")("C")("H")("A")("R")(glue_char_code);@/
load6("G")("L")("U")("E")("W")("D")(glue_width_code);@/
load11("G")("L")("U")("E")("S")("T")("R")("E")("T")("C")("H")(glue_stretch_code);@/
load10("G")("L")("U")("E")("S")("H")("R")("I")("N")("K")(glue_shrink_code);@/
-load4("U")("N")("I")("T")(order_unit_code);@/
-load2("F")("I")(order_fi_code);@/
-load3("F")("I")("L")(order_fil_code);@/
-load4("F")("I")("L")("L")(order_fill_code);@/
-load5("F")("I")("L")("L")("L")(order_filll_code);@/
-load6("N")("O")("R")("M")("A")("L")(type_normal_code);@/
-load8("A")("L")("E")("A")("D")("E")("R")("S")(type_aleaders_code);@/
-load8("C")("L")("E")("A")("D")("E")("R")("S")(type_cleaders_code);@/
-load8("X")("L")("E")("A")("D")("E")("R")("S")(type_xleaders_code);@/
load11("F")("O")("N")("T")("P")("E")("N")("A")("L")("T")("Y")(font_penalty_code);@/
load7("P")("E")("N")("A")("L")("T")("Y")(penalty_code);@/
load10("P")("E")("N")("A")("L")("T")("Y")("V")("A")("L")(penalty_val_code);@/
@@ -1421,14 +1407,6 @@ load9("F")("V")("A")("L")("U")("E")("V")("A")("L")(fvalue_val_code);@/
load10("F")("O")("N")("T")("I")("V")("A")("L")("U")("E")(font_ivalue_code);@/
load6("I")("V")("A")("L")("U")("E")(ivalue_code);@/
load9("I")("V")("A")("L")("U")("E")("V")("A")("L")(ivalue_val_code);@/
-load2("T")("L")(TL_dir_code);
-load2("L")("T")(LT_dir_code);
-load2("T")("R")(TR_dir_code);
-load2("L")("B")(LB_dir_code);
-load2("B")("L")(BL_dir_code);
-load2("R")("T")(RT_dir_code);
-load2("B")("R")(BR_dir_code);
-load2("R")("B")(RB_dir_code);
@ \.{VPL} files may contain the following in addition to the \.{PL} names.
@@ -2081,9 +2059,7 @@ might arise.
@<Read a font property value@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code<110) and (cur_code>character_code) then
- flush_error('This property name doesn''t belong on the outer level')
-else if (cur_code>=110) and ((cur_code mod 10)<>0) then
+else if cur_code>char_repeat_code then
flush_error('This property name doesn''t belong on the outer level')
@.This property name doesn't belong...@>
else begin
@@ -2335,7 +2311,10 @@ end
@ @<Read a ligature/kern command@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code>=label_code) and (cur_code<=(lig_code+11)) then begin
+else if (cur_code<label_code)or(cur_code>ckrn_code) then
+ flush_error('This property name doesn''t belong in a LIGTABLE list')
+@.This property name doesn't belong...@>
+else begin
case cur_code of
label_code:@<Read a label step@>;
stop_code:@<Read a stop step@>;
@@ -2343,21 +2322,14 @@ else if (cur_code>=label_code) and (cur_code<=(lig_code+11)) then begin
krn_code:@<Read a kerning step@>;
lig_code,lig_code+1,lig_code+2,lig_code+3,lig_code+5,lig_code+6,
lig_code+7,lig_code+11:@<Read a ligature step@>;
- end; {there are no other cases |>=label_code|}
- finish_the_property;
- end
-else if (cur_code>=clabel_code) and (cur_code<=cpenglue_code) then begin
- case cur_code of
clabel_code:@<Read an extended label step@>;
cpen_code:@<Read an extended penalty step@>;
cglue_code:@<Read an extended glue step@>;
cpenglue_code:@<Read an extended penalty/glue step@>;
ckrn_code:@<Read an extended kern step@>;
- end; {there are no other cases |>=label_code|}
+ end; {there are no other cases |>=label_code| and |<=ckrn_code|}
finish_the_property;
- end
-else flush_error('This property name doesn''t belong in a LIGTABLE list');
-@.This property name doesn't belong...@>
+ end;
end
@ When a character is about to be tagged, we call the following
@@ -2445,11 +2417,11 @@ if krn_ptr=nk then begin
decr(krn_ptr);
end;
end;
-if ofm_level=-1 then begin
+if ofm_level=-1 then begin
lig_kern[nl].b2:=kern_flag+(krn_ptr div 256);
lig_kern[nl].b3:=krn_ptr mod 256;
- end
-else begin
+ end
+else begin
lig_kern[nl].b2:=kern_flag+(krn_ptr div 65536);
lig_kern[nl].b3:=krn_ptr mod 65536;
end;
@@ -2592,9 +2564,9 @@ if max_ivalue_category>0 then begin
end;
end;
end;
- end;
- end;
- end;
+ end;
+ end;
+ end;
end
@ @<Global...@>=
@@ -2610,7 +2582,7 @@ that is used most, the processing of individual character data.
begin
if not tables_read then begin
@<Compute the new header information for OFM files@>;
- tables_read:=true;
+ tables_read:=true;
end;
c:=get_byte; {read the character code that is being specified}
@<Print |c| in hex notation@>;
@@ -2668,7 +2640,7 @@ for c:=(cprime+1) to (cprime+crange) do begin
char_ht[c]:=char_ht[cprime];
char_dp[c]:=char_dp[cprime];
char_ic[c]:=char_ic[cprime];
- for tab:=0 to (nki+nkf+nkr+nkg+nkp-1) do begin
+ for tab:=0 to (nki+nkf+nkm+nkr+nkg+nkp-1) do begin
char_table[c,tab]:= char_table[cprime,tab];
end;
end;
@@ -2688,13 +2660,28 @@ for c:=0 to max_char do
for ch_table:=0 to char_param_tables do
char_table[c,ch_table]:=0;
-@ @<Read a character property@>=
+@ @d get_char_table_entry(#)==
+ begin ch_table:=get_integer;
+ if (ch_table<0)or(ch_table>=#) then
+ flush_error('Character property index out of range')
+@.Character property index...@>
+ else begin get_char_table_entry_end
+@d get_char_table_entry_end(#)==
+ ch_table:=ch_table+#;
+ if ch_table>char_param_tables then
+ flush_error('Character property exceeds table size')
+@.Character property exceeds...@>
+ else begin
+ if ch_table>npc then npc:=ch_table;
+ char_table[c,ch_table]:=get_integer;
+ end;
+ end;
+ end
+
+@<Read a character property@>=
begin get_name;
if cur_code=comment_code then skip_to_end_of_item
-else if (cur_code<char_wd_code) or
- ((cur_code>var_char_code) and not
- ((cur_code>=char_ivalue_code) and (cur_code<=char_penalty_code)))
- then
+else if (cur_code<char_wd_code)or(cur_code>var_char_code) then
flush_error('This property name doesn''t belong in a CHARACTER list')
@.This property name doesn't belong...@>
else begin
@@ -2703,66 +2690,36 @@ else begin
char_ht_code:char_ht[c]:=sort_in(height,get_fix);
char_dp_code:char_dp[c]:=sort_in(depth,get_fix);
char_ic_code:char_ic[c]:=sort_in(italic,get_fix);
- sec_width_code:temp_value:=get_fix;
- sec_height_code:temp_value:=get_fix;
- sec_depth_code:temp_value:=get_fix;
- sec_italic_code:temp_value:=get_fix;
- accent_code:temp_value:=get_fix;
- prim_top_axis_code:temp_value:=get_fix;
- prim_top_axis_bis_code:temp_value:=get_fix;
- prim_bot_axis_code:temp_value:=get_fix;
- prim_bot_axis_bis_code:temp_value:=get_fix;
- prim_mid_hor_code:temp_value:=get_fix;
- prim_mid_vert_code:temp_value:=get_fix;
- prim_base_slant_code:temp_value:=get_fix;
- sec_top_axis_code:temp_value:=get_fix;
- sec_top_axis_bis_code:temp_value:=get_fix;
- sec_bot_axis_code:temp_value:=get_fix;
- sec_bot_axis_bis_code:temp_value:=get_fix;
- sec_mid_hor_code:temp_value:=get_fix;
- sec_mid_vert_code:temp_value:=get_fix;
+ sec_width_code,
+ sec_height_code,
+ sec_depth_code,
+ sec_italic_code,
+ accent_code,
+ prim_top_axis_code,
+ prim_top_axis_bis_code,
+ prim_bot_axis_code,
+ prim_bot_axis_bis_code,
+ prim_mid_hor_code,
+ prim_mid_vert_code,
+ prim_base_slant_code,
+ sec_top_axis_code,
+ sec_top_axis_bis_code,
+ sec_bot_axis_code,
+ sec_bot_axis_bis_code,
+ sec_mid_hor_code,
+ sec_mid_vert_code,
sec_base_slant_code:temp_value:=get_fix;
next_larger_code:begin check_tag(c); char_tag[c]:=list_tag;
char_remainder[c]:=get_byte;
end;
map_code:read_packet(c);
var_char_code:@<Read an extensible recipe for |c|@>;
- char_ivalue_code: begin
- ch_table:=get_integer;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkci then nkci:=ch_table;
- end;
- char_fvalue_code: begin
- ch_table:=get_integer+nki;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcf then nkcf:=ch_table;
- end;
- char_mvalue_code: begin
- ch_table:=get_integer+nki+nkf;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcm then nkcm:=ch_table;
- end;
- char_rule_code: begin
- ch_table:=get_integer+nki+nkf+nkm;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcr then nkcr:=ch_table;
- end;
- char_glue_code: begin
- ch_table:=get_integer+nki+nkf+nkm+nkr;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcg then nkcg:=ch_table;
- end;
- char_penalty_code: begin
- ch_table:=get_integer+nki+nkf+nkm+nkr+nkg;
- ch_entry:=get_integer;
- char_table[c,ch_table]:=ch_entry;
- if ch_table>nkcp then nkcp:=ch_table;
- end;
+ char_ivalue_code: get_char_table_entry(nki)(0);
+ char_fvalue_code: get_char_table_entry(nkf)(nki);
+ char_mvalue_code: get_char_table_entry(nkm)(nki+nkf);
+ char_rule_code: get_char_table_entry(nkr)(nki+nkf+nkm);
+ char_glue_code: get_char_table_entry(nkg)(nki+nkf+nkm+nkr);
+ char_penalty_code: get_char_table_entry(nkp)(nki+nkf+nkm+nkr+nkg);
end;@/
finish_the_property;
end;
@@ -2808,18 +2765,18 @@ which prints a progress report as the file is being read.
@ @<Glob...@>=
@!HEX: packed array [1..32] of char;
-
+
@ @<Set init...@>=
HEX:='0123456789ABCDEF';@/
-
+
@ The array |dig| will hold a sequence of digits to be output.
-
+
@<Glob...@>=
@!dig:array[0..32] of integer;
-
+
@ Here, in fact, are two procedures that output
|dig[j-1]|$\,\ldots\,$|dig[0]|, given $j>0$.
-
+
@p procedure out_digs(j:integer); {outputs |j| digits}
begin repeat decr(j); out(HEX[1+dig[j]]);
until j=0;
@@ -2829,10 +2786,10 @@ procedure print_digs(j:integer); {prints |j| digits}
begin repeat decr(j); print(HEX[1+dig[j]]);
until j=0;
end;
-
+
@ The |print_number| procedure indicates how |print_digs| can be used.
This procedure can print in octal, decimal or hex notation.
-
+
@d print_hex(#)==print_number(#,16)
@d print_octal(#)==print_number(#,8)
@d print_decimal(#)==print_number(#,10)
@@ -3235,7 +3192,7 @@ case ofm_level of
-1: begin
top_width:=255; top_depth:=15; top_height:=15; top_italic:=63;
end;
- 0: begin
+ 0: begin
top_width:=65535; top_depth:=255; top_height:=255; top_italic:=255;
end;
1: begin
@@ -3504,6 +3461,9 @@ and the total number of words in the \.{TFM} file (|lf|).
@!temp_width:fix_word; {width being used to compute a check sum}
@!ncw,@!nco,@!npc:integer;
+@ @<Set init...@>=
+npc:=-1;
+
@ It might turn out that no characters exist at all. But \.{VPtoVF} keeps
going and writes the \.{TFM} anyway. In this case |ec| will be~0 and |bc|
will be~1.
@@ -3650,18 +3610,7 @@ end
@<Compute the character info size@>=
if ofm_level=1 then begin
ncw:=0;
- if nkcp>-1 then
- npc:=nki+nkf+nkr+nkg+nkcp+1
- else if nkcg>-1 then
- npc:=nki+nkf+nkr+nkcg+1
- else if nkcr>-1 then
- npc:=nki+nkf+nkcr+1
- else if nkcf>-1 then
- npc:=nki+nkcf+1
- else if nkci>-1 then
- npc:=nkci+1
- else
- npc:=0;
+ incr(npc);
needed_space:=(12+npc*2) div 4;
extra_bytes:=(needed_space*4) - (10+npc*2);
for c:=bc to ec do begin
@@ -3687,7 +3636,7 @@ if ofm_level=1 then begin
end;
ncw:=ncw+needed_space;
end;
- end;
+ end;
end;
@ The next block contains packed |char_info|.
@@ -3712,7 +3661,7 @@ case ofm_level of
out(index[char_ht[c]]); out(index[char_dp[c]]);
out(index[char_ic[c]]); out(char_tag[c]);
out(char_remainder[c] div 256); out(char_remainder[c] mod 256);
- end;
+ end;
1: begin
if c=char_original[c] then begin
out(index[char_wd[c]] div 256); out(index[char_wd[c]] mod 256);
@@ -3721,18 +3670,18 @@ case ofm_level of
tab:=char_tag[c];
if char_extended_tag[c] then begin
tab:=5;
- end;
+ end;
out(tab);
out(char_remainder[c] div 256); out(char_remainder[c] mod 256);
out_size(char_repeats[c]);
for tab:=0 to npc-1 do begin
out(char_table[c,tab] div 256); out(char_table[c,tab] mod 256);
- end;
+ end;
for tab:=1 to extra_bytes do begin
out(0);
- end;
- end;
- end;
+ end;
+ end;
+ end;
end;
@ When a scaled quantity is output, we may need to divide it by |design_units|.
@@ -3825,7 +3774,7 @@ for c:=bc to ec do if char_tag[c]=lig_tag then begin
@ @<Find the minimum |lk_offset| and adjust all remainders@>=
begin sort_ptr:=label_ptr; {the largest unallocated label}
-if ofm_level=-1 then begin
+if ofm_level=-1 then begin
if label_table[sort_ptr].rr+lk_offset > 255 then begin
lk_offset:=0; extra_loc_needed:=false; {location 0 can do double duty}
repeat char_remainder[label_table[sort_ptr].cc]:=lk_offset;
@@ -3836,8 +3785,8 @@ if ofm_level=-1 then begin
until lk_offset+label_table[sort_ptr].rr<256;
{N.B.: |lk_offset=256| satisfies this when |sort_ptr=0|}
end;
- end
-else begin
+ end
+else begin
if label_table[sort_ptr].rr+lk_offset > 65535 then begin
lk_offset:=0; extra_loc_needed:=false; {location 0 can do double duty}
repeat char_remainder[label_table[sort_ptr].cc]:=lk_offset;
@@ -3896,7 +3845,7 @@ else begin
out_size((t+lk_offset) div 256);
out_size((t+lk_offset) mod 256);
repeat decr(label_ptr); until label_table[label_ptr].rr<t;
- end;
+ end;
if nl>0 then for lig_ptr:=0 to nl-1 do begin
out_size(lig_kern[lig_ptr].b0);
out_size(lig_kern[lig_ptr].b1);
@@ -4171,7 +4120,7 @@ case cur_char of
end;
while cur_char<>")" do get_next;
if font_dir = -1 then begin
- flush_error('FONTDIR must be valid direction, -- TR assumed');
+ flush_error('FONTDIR must be valid direction, -- TL assumed');
font_dir:=0;
end;
end
@@ -4201,7 +4150,7 @@ case cur_char of
end;
while cur_char<>")" do get_next;
if font_dir = -1 then begin
- flush_error('NFONTDIR must be valid direction, -- TR assumed');
+ flush_error('NFONTDIR must be valid direction, -- TL assumed');
font_dir:=8;
end;
end
@@ -4231,7 +4180,6 @@ end;
@!rules:array[rule_array_type,rule_entry_type] of rule_node;
@!npr:array[rule_array_type] of integer;
@!nkr:integer;
-@!nkcr:integer;
@!nwr:integer;
@!r_array:integer;
@!r_number:integer;
@@ -4242,7 +4190,6 @@ for r_array := 0 to rule_arrays do begin
@<Null out the rule@>;
end;
nkr:=-1;
-nkcr:=-1;
@ @<Read font rule list@>=
begin
@@ -4264,28 +4211,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a rule@>=
+
+@ @<Read a rule@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>rule_code then
- flush_error('This property name doesn''t belong in a RULE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>rule_code then
+ flush_error('This property name doesn''t belong in a FONTRULE list')
else begin
r_number:=get_integer;
- if r_number>rule_entries then
- flush_error('This RULE index is too big for my present table size')
+ if r_number>rule_entries then
+ flush_error('This RULE index is too big for my present table size')
else if r_number<0 then
flush_error('This RULE index is negative')
else begin
while npr[r_array]<r_number do begin
incr(npr[r_array]); @<Null out the rule@>;
- end;
+ end;
@<Read all of a rule's values@>;
- finish_the_property;
+ finish_the_property;
end;
- end;
-end
+ end;
+end
@ @<Null out the rule@>=
begin
@@ -4308,15 +4255,20 @@ end
@ @<Read a single rule value@>=
begin
get_name;
-case cur_code of
- rule_width_code:
- rules[r_array,r_number].rn_width:=get_fix;
- rule_height_code:
- rules[r_array,r_number].rn_height:=get_fix;
- rule_depth_code:
- rules[r_array,r_number].rn_depth:=get_fix;
- end;
-finish_the_property;
+if cur_code=comment_code then skip_to_end_of_item
+else if (cur_code<rule_width_code)or(cur_code>rule_depth_code) then
+ flush_error('This property name doesn''t belong in a RULE list')
+else begin
+ case cur_code of
+ rule_width_code:
+ rules[r_array,r_number].rn_width:=get_fix;
+ rule_height_code:
+ rules[r_array,r_number].rn_height:=get_fix;
+ rule_depth_code:
+ rules[r_array,r_number].rn_depth:=get_fix;
+ end;
+ finish_the_property;
+ end;
end
@ @<Header information for rules@>=
@@ -4350,7 +4302,7 @@ end
@!glue_arrays=arrays_per_kind;
@!glue_entries=entries_per_array;
-@
+@
@d t_normal==0
@d t_aleaders==1
@d t_cleaders==2
@@ -4385,7 +4337,6 @@ end;
@!glues:array[glue_array_type,glue_entry_type] of glue_node;
@!npg:array[glue_array_type] of integer;
@!nkg:integer;
-@!nkcg:integer;
@!nwg:integer;
@!g_array:integer;
@!g_byte:integer;
@@ -4398,7 +4349,6 @@ begin
@<Null out the glue@>;
end;
nkg:=-1;
-nkcg:=-1;
@ @<Read font glue list@>=
begin
@@ -4420,28 +4370,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a glue@>=
+
+@ @<Read a glue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>glue_code then
- flush_error('This property name doesn''t belong in a GLUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>glue_code then
+ flush_error('This property name doesn''t belong in a FONTGLUE list')
else begin
g_number:=get_integer;
- if g_number>glue_entries then
- flush_error('This GLUE index is too big for my present table size')
+ if g_number>glue_entries then
+ flush_error('This GLUE index is too big for my present table size')
else if g_number<0 then
flush_error('This GLUE index is negative')
else begin
while npg[g_array]<g_number do begin
incr(npg[g_array]); @<Null out the glue@>;
- end;
+ end;
@<Read all of a glue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the glue@>=
begin
@@ -4469,44 +4419,49 @@ end
@ @<Read a single glue value@>=
begin
get_name;
-case cur_code of
- glue_width_code:
- glues[g_array,g_number].gn_width:=get_fix;
- glue_stretch_code:
- glues[g_array,g_number].gn_stretch:=get_fix;
- glue_shrink_code:
- glues[g_array,g_number].gn_shrink:=get_fix;
- glue_type_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>3) then begin
- g_byte:=0;
+if cur_code=comment_code then skip_to_end_of_item
+else if (cur_code<glue_type_code)or(cur_code>glue_rule_code) then
+ flush_error('This property name doesn''t belong in a GLUE list')
+else begin
+ case cur_code of
+ glue_width_code:
+ glues[g_array,g_number].gn_width:=get_fix;
+ glue_stretch_code:
+ glues[g_array,g_number].gn_stretch:=get_fix;
+ glue_shrink_code:
+ glues[g_array,g_number].gn_shrink:=get_fix;
+ glue_type_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>3) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_type:=g_byte;
end;
- glues[g_array,g_number].gn_type:=g_byte;
- end;
- glue_stretch_order_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>4) then begin
- g_byte:=0;
+ glue_stretch_order_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>4) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_stretch_order:=g_byte;
end;
- glues[g_array,g_number].gn_stretch_order:=g_byte;
- end;
- glue_shrink_order_code: begin
- g_byte:=get_integer;
- if (g_byte<0) or (g_byte>4) then begin
- g_byte:=0;
+ glue_shrink_order_code: begin
+ g_byte:=get_integer;
+ if (g_byte<0) or (g_byte>4) then begin
+ g_byte:=0;
+ end;
+ glues[g_array,g_number].gn_shrink_order:=g_byte;
+ end;
+ glue_char_code: begin
+ glues[g_array,g_number].gn_argument:=get_integer;
+ glues[g_array,g_number].gn_arg_type:=g_char;
+ end;
+ glue_rule_code: begin
+ glues[g_array,g_number].gn_argument:=get_integer;
+ glues[g_array,g_number].gn_arg_type:=g_rule;
end;
- glues[g_array,g_number].gn_shrink_order:=g_byte;
- end;
- glue_char_code: begin
- glues[g_array,g_number].gn_argument:=get_integer;
- glues[g_array,g_number].gn_arg_type:=g_char;
- end;
- glue_rule_code: begin
- glues[g_array,g_number].gn_argument:=get_integer;
- glues[g_array,g_number].gn_arg_type:=g_rule;
end;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for glues@>=
@@ -4562,7 +4517,6 @@ end;
@!penalties:array[penalty_array_type,penalty_entry_type] of penalty_node;
@!npp:array[penalty_array_type] of integer;
@!nkp:integer;
-@!nkcp:integer;
@!nwp:integer;
@!p_array:integer;
@!p_number:integer;
@@ -4573,7 +4527,6 @@ for p_array := 0 to penalty_arrays do begin
@<Null out the penalty@>;
end;
nkp:=-1;
-nkcp:=-1;
@ @<Read font penalty list@>=
begin
@@ -4595,28 +4548,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read a penalty@>=
+
+@ @<Read a penalty@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>penalty_code then
- flush_error('This property name doesn''t belong in a PENALTY list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>penalty_code then
+ flush_error('This property name doesn''t belong in a FONTPENALTY list')
else begin
p_number:=get_integer;
- if p_number>penalty_entries then
- flush_error('This PENALTY index is too big for my present table size')
+ if p_number>penalty_entries then
+ flush_error('This PENALTY index is too big for my present table size')
else if p_number<0 then
flush_error('This PENALTY index is negative')
else begin
while npp[p_array]<p_number do begin
incr(npp[p_array]); @<Null out the penalty@>;
- end;
+ end;
@<Read all of a penalty's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the penalty@>=
begin
@@ -4637,11 +4590,13 @@ end
@ @<Read a single penalty value@>=
begin
get_name;
-case cur_code of
- penalty_val_code:
- penalties[p_array,p_number].pn_val:=get_integer;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>penalty_val_code then
+ flush_error('This property name doesn''t belong in a PENALTY list')
+else begin
+ penalties[p_array,p_number].pn_val:=get_integer;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for penalties@>=
@@ -4658,7 +4613,7 @@ end
begin
for p_array:= 0 to nkp-1 do
for p_number:=0 to npp[p_array]-1 do begin
- out_integer(penalties[p_array,p_number].pn_val);
+ out_int(penalties[p_array,p_number].pn_val);
end;
end
@@ -4685,7 +4640,6 @@ end;
@!mvalues:array[mvalue_array_type,mvalue_entry_type] of mvalue_node;
@!npm:array[mvalue_array_type] of integer;
@!nkm:integer;
-@!nkcm:integer;
@!nwm:integer;
@!m_array:integer;
@!m_number:integer;
@@ -4696,7 +4650,6 @@ for m_array := 0 to mvalue_arrays do begin
@<Null out the mvalue@>;
end;
nkm:=-1;
-nkcm:=-1;
@ @<Read font mvalue list@>=
begin
@@ -4718,28 +4671,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an mvalue@>=
+
+@ @<Read an mvalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>mvalue_code then
- flush_error('This property name doesn''t belong in an MVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>mvalue_code then
+ flush_error('This property name doesn''t belong in an FONTMVALUE list')
else begin
m_number:=get_integer;
- if m_number>mvalue_entries then
- flush_error('This MVALUE index is too big for my present table size')
+ if m_number>mvalue_entries then
+ flush_error('This MVALUE index is too big for my present table size')
else if m_number<0 then
flush_error('This MVALUE index is negative')
else begin
while npm[m_array]<m_number do begin
incr(npm[m_array]); @<Null out the mvalue@>;
- end;
+ end;
@<Read all of an mvalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the mvalue@>=
begin
@@ -4760,11 +4713,13 @@ end
@ @<Read a single mvalue value@>=
begin
get_name;
-case cur_code of
- mvalue_val_code:
- mvalues[m_array,m_number].fn_val:=get_fix;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>mvalue_val_code then
+ flush_error('This property name doesn''t belong in a MVALUE list')
+else begin
+ mvalues[m_array,m_number].fn_val:=get_fix;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for mvalues@>=
@@ -4808,7 +4763,6 @@ end;
@!fvalues:array[fvalue_array_type,fvalue_entry_type] of fvalue_node;
@!npf:array[fvalue_array_type] of integer;
@!nkf:integer;
-@!nkcf:integer;
@!nwf:integer;
@!f_array:integer;
@!f_number:integer;
@@ -4819,7 +4773,6 @@ for f_array := 0 to fvalue_arrays do begin
@<Null out the fvalue@>;
end;
nkf:=-1;
-nkcf:=-1;
@ @<Read font fvalue list@>=
begin
@@ -4841,28 +4794,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an fvalue@>=
+
+@ @<Read an fvalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>fvalue_code then
- flush_error('This property name doesn''t belong in an FVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>fvalue_code then
+ flush_error('This property name doesn''t belong in an FONTFVALUE list')
else begin
f_number:=get_integer;
- if f_number>fvalue_entries then
- flush_error('This FVALUE index is too big for my present table size')
+ if f_number>fvalue_entries then
+ flush_error('This FVALUE index is too big for my present table size')
else if f_number<0 then
flush_error('This FVALUE index is negative')
else begin
while npf[f_array]<f_number do begin
incr(npf[f_array]); @<Null out the fvalue@>;
- end;
+ end;
@<Read all of an fvalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the fvalue@>=
begin
@@ -4883,11 +4836,13 @@ end
@ @<Read a single fvalue value@>=
begin
get_name;
-case cur_code of
- fvalue_val_code:
- fvalues[f_array,f_number].fn_val:=get_fix;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>fvalue_val_code then
+ flush_error('This property name doesn''t belong in a FVALUE list')
+else begin
+ fvalues[f_array,f_number].fn_val:=get_fix;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for fvalues@>=
@@ -4932,7 +4887,6 @@ end;
@!npi:array[ivalue_array_type] of integer;
@!font_i_array:boolean;
@!nki:integer;
-@!nkci:integer;
@!nwi:integer;
@!i_array:integer;
@!i_number:integer;
@@ -4943,7 +4897,6 @@ for i_array := 0 to ivalue_arrays do begin
@<Null out the ivalue@>;
end;
nki:=-1;
-nkci:=-1;
@ @<Read font ivalue list@>=
begin
@@ -4965,28 +4918,28 @@ else begin
finish_inner_property_list;
end;
end
-
-@ @<Read an ivalue@>=
+
+@ @<Read an ivalue@>=
begin
-get_name;
-if cur_code=comment_code then skip_to_end_of_item
-else if cur_code<>ivalue_code then
- flush_error('This property name doesn''t belong in an IVALUE list')
+get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>ivalue_code then
+ flush_error('This property name doesn''t belong in an FONTIVALUE list')
else begin
i_number:=get_integer;
- if i_number>ivalue_entries then
- flush_error('This IVALUE index is too big for my present table size')
+ if i_number>ivalue_entries then
+ flush_error('This IVALUE index is too big for my present table size')
else if i_number<0 then
flush_error('This IVALUE index is negative')
else begin
while npi[i_array]<i_number do begin
incr(npi[i_array]); @<Null out the ivalue@>;
- end;
+ end;
@<Read all of an ivalue's values@>;
- finish_the_property;
- end;
- end;
-end
+ finish_the_property;
+ end;
+ end;
+end
@ @<Null out the ivalue@>=
begin
@@ -5007,11 +4960,13 @@ end
@ @<Read a single ivalue value@>=
begin
get_name;
-case cur_code of
- ivalue_val_code:
- ivalues[i_array,i_number].in_val:=get_integer;
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code<>ivalue_val_code then
+ flush_error('This property name doesn''t belong in a IVALUE list')
+else begin
+ ivalues[i_array,i_number].in_val:=get_integer;
+ finish_the_property;
end;
-finish_the_property;
end
@ @<Header information for ivalues@>=
@@ -5028,7 +4983,7 @@ end
begin
for i_array:= 0 to nki-1 do
for i_number:=0 to npi[i_array]-1 do begin
- out_integer(ivalues[i_array,i_number].in_val);
+ out_int(ivalues[i_array,i_number].in_val);
end;
end
diff --git a/Build/source/texk/web2c/omegaware/specialhex.test b/Build/source/texk/web2c/omegaware/specialhex.test
index 44cc82fbe2d..98af481f0db 100755
--- a/Build/source/texk/web2c/omegaware/specialhex.test
+++ b/Build/source/texk/web2c/omegaware/specialhex.test
@@ -3,25 +3,27 @@
# Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
# You may freely use, modify and/or distribute this file.
-test -d tests || mkdir -p tests
+tests=omegaware/tests
+
+test -d $tests || mkdir -p $tests
TEXMFCNF=$srcdir/../kpathsea \
- OFMFONTS=./tests \
- ./ovp2ovf -verbose $srcdir/tests/specialhex tests/specialhex tests/specialhex || exit 1
+ OFMFONTS=./$tests \
+ ./ovp2ovf -verbose $srcdir/$tests/specialhex $tests/specialhex $tests/specialhex || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./ofm2opl -verbose tests/specialhex tests/specialhex || exit 1
+ ./ofm2opl -verbose $tests/specialhex $tests/specialhex || exit 1
-./opl2ofm -verbose tests/specialhex tests/xspecialhex || exit 1
+./opl2ofm -verbose $tests/specialhex $tests/xspecialhex || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- ./ofm2opl -verbose tests/xspecialhex tests/xspecialhex || exit 1
+ ./ofm2opl -verbose $tests/xspecialhex $tests/xspecialhex || exit 1
-diff tests/specialhex.opl tests/xspecialhex.opl || exit 1
+diff $tests/specialhex.opl $tests/xspecialhex.opl || exit 1
TEXMFCNF=$srcdir/../kpathsea \
- OFMFONTS=.:./tests \
- ./ovf2ovp -verbose tests/specialhex tests/specialhex tests/xspecialhex || exit 1
+ OFMFONTS=.:./$tests \
+ ./ovf2ovp -verbose $tests/specialhex $tests/specialhex $tests/xspecialhex || exit 1
-diff $srcdir/tests/specialhex.ovp tests/xspecialhex.ovp || exit 1
+diff $srcdir/$tests/specialhex.ovp $tests/xspecialhex.ovp || exit 1
diff --git a/Build/source/texk/web2c/omegaware/tests/Cherokee.pl b/Build/source/texk/web2c/omegaware/tests/Cherokee.pl
new file mode 100644
index 00000000000..30394d07004
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/Cherokee.pl
@@ -0,0 +1,420 @@
+(FAMILY TEX-CHEROKEE8R)
+(FACE F MRR)
+(CODINGSCHEME TEXBASE1ENCODING)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 35372474052)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.5)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.8)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER O 36
+ (CHARWD R 0.728)
+ (CHARHT R 0.7865)
+ )
+(CHARACTER O 37
+ (CHARWD R 0.12)
+ (CHARHT R 0.793)
+ )
+(CHARACTER O 40
+ (CHARWD R 0.5)
+ )
+(CHARACTER O 41
+ (CHARWD R 0.665)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 42
+ (CHARWD R 0.285)
+ (CHARHT R 0.7955)
+ )
+(CHARACTER O 43
+ (CHARWD R 0.672)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 44
+ (CHARWD R 0.477)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 45
+ (CHARWD R 1.044)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER O 46
+ (CHARWD R 1.132)
+ (CHARHT R 0.8065)
+ (CHARDP R 0.002)
+ )
+(CHARACTER O 50
+ (CHARWD R 0.333)
+ (CHARHT R 0.852)
+ (CHARDP R 0.056)
+ )
+(CHARACTER O 51
+ (CHARWD R 0.333)
+ (CHARHT R 0.852)
+ (CHARDP R 0.056)
+ )
+(CHARACTER O 52
+ (CHARWD R 0.774)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER O 53
+ (CHARWD R 1.0)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 54
+ (CHARWD R 0.25)
+ (CHARHT R 0.098)
+ (CHARDP R 0.167)
+ )
+(CHARACTER O 55
+ (CHARWD R 0.546)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 56
+ (CHARWD R 0.25)
+ (CHARHT R 0.095)
+ (CHARDP R 0.014)
+ )
+(CHARACTER O 57
+ (CHARWD R 0.795)
+ (CHARHT R 0.7955)
+ )
+(CHARACTER C 0
+ (CHARWD R 0.904)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C 1
+ (CHARWD R 1.98)
+ (CHARHT R 0.575)
+ (CHARDP R 0.014)
+ )
+(CHARACTER C 2
+ (CHARWD R 1.724)
+ (CHARHT R 0.601)
+ )
+(CHARACTER C 3
+ (CHARWD R 1.247)
+ (CHARHT R 0.598)
+ )
+(CHARACTER C 4
+ (CHARWD R 1.084)
+ (CHARHT R 0.7955)
+ )
+(CHARACTER C 5
+ (CHARWD R 0.936)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C 6
+ (CHARWD R 0.764)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER C 7
+ (CHARWD R 0.728)
+ (CHARHT R 0.8035)
+ (CHARDP R 0.004)
+ )
+(CHARACTER C 8
+ (CHARWD R 0.84)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C 9
+ (CHARWD R 0.934)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.003)
+ )
+(CHARACTER O 72
+ (CHARWD R 0.816)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 73
+ (CHARWD R 0.988)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 74
+ (CHARWD R 0.972)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 75
+ (CHARWD R 0.924)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER O 76
+ (CHARWD R 0.675)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 77
+ (CHARWD R 1.297)
+ (CHARHT R 0.8065)
+ )
+(CHARACTER O 100
+ (CHARWD R 0.891)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER C A
+ (CHARWD R 0.753)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C B
+ (CHARWD R 0.567)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.135)
+ )
+(CHARACTER C C
+ (CHARWD R 0.666)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C D
+ (CHARWD R 0.603)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C E
+ (CHARWD R 0.723)
+ (CHARHT R 0.8035)
+ )
+(CHARACTER C F
+ (CHARWD R 0.759)
+ (CHARHT R 0.8035)
+ )
+(CHARACTER C G
+ (CHARWD R 0.762)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C H
+ (CHARWD R 0.882)
+ (CHARHT R 0.8035)
+ )
+(CHARACTER C I
+ (CHARWD R 0.831)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C J
+ (CHARWD R 0.576)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C K
+ (CHARWD R 0.657)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C L
+ (CHARWD R 0.534)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER C M
+ (CHARWD R 0.879)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C N
+ (CHARWD R 0.747)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C O
+ (CHARWD R 0.948)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C P
+ (CHARWD R 0.954)
+ (CHARHT R 0.788)
+ )
+(CHARACTER C Q
+ (CHARWD R 0.732)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER C R
+ (CHARWD R 0.72)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C S
+ (CHARWD R 0.558)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C T
+ (CHARWD R 0.654)
+ (CHARHT R 0.7955)
+ (CHARDP R 0.005)
+ )
+(CHARACTER C U
+ (CHARWD R 0.705)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER C V
+ (CHARWD R 0.729)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C W
+ (CHARWD R 0.852)
+ (CHARHT R 0.7955)
+ (CHARDP R 0.004)
+ )
+(CHARACTER C X
+ (CHARWD R 0.633)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER C Y
+ (CHARWD R 0.759)
+ (CHARHT R 0.7955)
+ )
+(CHARACTER C Z
+ (CHARWD R 0.66)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 133
+ (CHARWD R 0.576)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER O 134
+ (CHARWD R 0.69)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER O 135
+ (CHARWD R 0.663)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 136
+ (CHARWD R 0.647)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER O 137
+ (CHARWD R 0.552)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.002)
+ )
+(CHARACTER C a
+ (CHARWD R 0.756)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C b
+ (CHARWD R 0.639)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C c
+ (CHARWD R 0.594)
+ (CHARHT R 0.8015)
+ (CHARDP R 0.006)
+ )
+(CHARACTER C d
+ (CHARWD R 0.672)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER C e
+ (CHARWD R 0.81)
+ (CHARHT R 0.7975)
+ (CHARDP R 0.005)
+ )
+(CHARACTER C f
+ (CHARWD R 0.834)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.001)
+ )
+(CHARACTER C g
+ (CHARWD R 0.777)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C h
+ (CHARWD R 0.702)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.002)
+ )
+(CHARACTER C i
+ (CHARWD R 0.579)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C j
+ (CHARWD R 0.612)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.007)
+ )
+(CHARACTER C k
+ (CHARWD R 0.708)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER C l
+ (CHARWD R 0.651)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C m
+ (CHARWD R 0.963)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C n
+ (CHARWD R 0.747)
+ (CHARHT R 0.7955)
+ )
+(CHARACTER C o
+ (CHARWD R 0.735)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C p
+ (CHARWD R 0.978)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C q
+ (CHARWD R 0.714)
+ (CHARHT R 0.788)
+ )
+(CHARACTER C r
+ (CHARWD R 0.918)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C s
+ (CHARWD R 0.957)
+ (CHARHT R 0.7865)
+ (CHARDP R 0.003)
+ )
+(CHARACTER C t
+ (CHARWD R 0.969)
+ (CHARHT R 0.8065)
+ )
+(CHARACTER C u
+ (CHARWD R 0.792)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C v
+ (CHARWD R 0.444)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C w
+ (CHARWD R 0.966)
+ (CHARHT R 0.7975)
+ )
+(CHARACTER C x
+ (CHARWD R 0.729)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER C y
+ (CHARWD R 0.897)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER C z
+ (CHARWD R 0.726)
+ (CHARHT R 0.7995)
+ )
+(CHARACTER O 173
+ (CHARWD R 0.858)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER O 174
+ (CHARWD R 0.609)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.004)
+ )
+(CHARACTER O 175
+ (CHARWD R 0.711)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.001)
+ )
+(CHARACTER O 176
+ (CHARWD R 1.032)
+ (CHARHT R 0.8015)
+ )
+(CHARACTER O 255
+ (CHARWD R 0.546)
+ (CHARHT R 0.7995)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/OCherokee.ovp b/Build/source/texk/web2c/omegaware/tests/OCherokee.ovp
new file mode 100644
index 00000000000..0b7986434ea
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/OCherokee.ovp
@@ -0,0 +1,790 @@
+(VTITLE )
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY CHEROKEE)
+(FACE F MRR)
+(CODINGSCHEME SHIFTED CHEROKEE TEX)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 5EDB811F)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.5)
+ (STRETCH R 0.3)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.8)
+ (QUAD R 1.0)
+ )
+(MAPFONT D 0
+ (FONTNAME Cherokee)
+ (FONTCHECKSUM H EBEA782A)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(LIGTABLE
+ (LABEL H 13D9)
+ (KRN H 13AA R -0.23)
+ (KRN H 13AF R -0.2)
+ (LABEL H 13E4)
+ (KRN H 13AA R -0.2)
+ (KRN H 13AF R -0.21)
+ (LABEL H 13A2)
+ (KRN H 13AA R -0.1)
+ (KRN H 13AF R -0.1)
+ (KRN H 13A5 R -0.1)
+ (STOP)
+ )
+(CHARACTER H 22
+ (CHARWD R 0.554)
+ (CHARHT R 0.7955)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 22)
+ )
+ )
+(CHARACTER H 28
+ (CHARWD R 0.333)
+ (CHARHT R 0.852)
+ (CHARDP R 0.056)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 28)
+ )
+ )
+(CHARACTER H 29
+ (CHARWD R 0.333)
+ (CHARHT R 0.852)
+ (CHARDP R 0.056)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 29)
+ )
+ )
+(CHARACTER H 2C
+ (CHARWD R 0.25)
+ (CHARHT R 0.098)
+ (CHARDP R 0.167)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2C)
+ )
+ )
+(CHARACTER H 2E
+ (CHARWD R 0.25)
+ (CHARHT R 0.095)
+ (CHARDP R 0.014)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2E)
+ )
+ )
+(CHARACTER H 13A0
+ (CHARWD R 0.756)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 61)
+ )
+ )
+(CHARACTER H 13A1
+ (CHARWD R 0.934)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.003)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 39)
+ )
+ )
+(CHARACTER H 13A2
+ (CHARWD R 0.579)
+ (CHARHT R 0.7995)
+ (COMMENT
+ (KRN H 13AA R -0.1)
+ (KRN H 13AF R -0.1)
+ (KRN H 13A5 R -0.1)
+ )
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 69)
+ )
+ )
+(CHARACTER H 13A3
+ (CHARWD R 0.735)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6F)
+ )
+ )
+(CHARACTER H 13A4
+ (CHARWD R 0.792)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 75)
+ )
+ )
+(CHARACTER H 13A5
+ (CHARWD R 0.966)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 76)
+ )
+ )
+(CHARACTER H 13A6
+ (CHARWD R 0.777)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 67)
+ )
+ )
+(CHARACTER H 13A7
+ (CHARWD R 0.657)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4B)
+ )
+ )
+(CHARACTER H 13A8
+ (CHARWD R 0.639)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 62)
+ )
+ )
+(CHARACTER H 13A9
+ (CHARWD R 0.834)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.001)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 66)
+ )
+ )
+(CHARACTER H 13AA
+ (CHARWD R 0.714)
+ (CHARHT R 0.788)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 71)
+ )
+ )
+(CHARACTER H 13AB
+ (CHARWD R 0.576)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4A)
+ )
+ )
+(CHARACTER H 13AC
+ (CHARWD R 0.726)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 7A)
+ )
+ )
+(CHARACTER H 13AD
+ (CHARWD R 0.705)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 55)
+ )
+ )
+(CHARACTER H 13AE
+ (CHARWD R 0.534)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4C)
+ )
+ )
+(CHARACTER H 13AF
+ (CHARWD R 0.702)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.002)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 68)
+ )
+ )
+(CHARACTER H 13B0
+ (CHARWD R 0.477)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 24)
+ )
+ )
+(CHARACTER H 13B1
+ (CHARWD R 0.665)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 21)
+ )
+ )
+(CHARACTER H 13B2
+ (CHARWD R 0.882)
+ (CHARHT R 0.8035)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 48)
+ )
+ )
+(CHARACTER H 13B3
+ (CHARWD R 0.966)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 77)
+ )
+ )
+(CHARACTER H 13B4
+ (CHARWD R 0.675)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3E)
+ )
+ )
+(CHARACTER H 13B5
+ (CHARWD R 0.651)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6C)
+ )
+ )
+(CHARACTER H 13B6
+ (CHARWD R 0.663)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5D)
+ )
+ )
+(CHARACTER H 13B7
+ (CHARWD R 0.879)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4D)
+ )
+ )
+(CHARACTER H 13B8
+ (CHARWD R 0.708)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6B)
+ )
+ )
+(CHARACTER H 13B9
+ (CHARWD R 1.044)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 25)
+ )
+ )
+(CHARACTER H 13BA
+ (CHARWD R 0.774)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2A)
+ )
+ )
+(CHARACTER H 13BB
+ (CHARWD R 0.747)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4E)
+ )
+ )
+(CHARACTER H 13BC
+ (CHARWD R 0.552)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.002)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5F)
+ )
+ )
+(CHARACTER H 13BD
+ (CHARWD R 1.0)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2B)
+ )
+ )
+(CHARACTER H 13BE
+ (CHARWD R 0.747)
+ (CHARHT R 0.7955)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6E)
+ )
+ )
+(CHARACTER H 13BF
+ (CHARWD R 0.546)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2D)
+ )
+ )
+(CHARACTER H 13C1
+ (CHARWD R 0.978)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 70)
+ )
+ )
+(CHARACTER H 13C2
+ (CHARWD R 0.795)
+ (CHARHT R 0.7955)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 2F)
+ )
+ )
+(CHARACTER H 13C3
+ (CHARWD R 0.66)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5A)
+ )
+ )
+(CHARACTER H 13C4
+ (CHARWD R 0.904)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 30)
+ )
+ )
+(CHARACTER H 13C5
+ (CHARWD R 0.963)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6D)
+ )
+ )
+(CHARACTER H 13C6
+ (CHARWD R 0.732)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 51)
+ )
+ )
+(CHARACTER H 13C7
+ (CHARWD R 0.891)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 40)
+ )
+ )
+(CHARACTER H 13C8
+ (CHARWD R 0.759)
+ (CHARHT R 0.8035)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 46)
+ )
+ )
+(CHARACTER H 13C9
+ (CHARWD R 1.297)
+ (CHARHT R 0.8065)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3F)
+ )
+ )
+(CHARACTER H 13CA
+ (CHARWD R 1.032)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 7E)
+ )
+ )
+(CHARACTER H 13CB
+ (CHARWD R 0.728)
+ (CHARHT R 0.8035)
+ (CHARDP R 0.004)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 37)
+ )
+ )
+(CHARACTER H 13CC
+ (CHARWD R 0.753)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 41)
+ )
+ )
+(CHARACTER H 13CD
+ (CHARWD R 0.957)
+ (CHARHT R 0.7865)
+ (CHARDP R 0.003)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 73)
+ )
+ )
+(CHARACTER H 13CE
+ (CHARWD R 0.558)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 53)
+ )
+ )
+(CHARACTER H 13CF
+ (CHARWD R 0.72)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 52)
+ )
+ )
+(CHARACTER H 13D0
+ (CHARWD R 0.603)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 44)
+ )
+ )
+(CHARACTER H 13D1
+ (CHARWD R 0.858)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 7B)
+ )
+ )
+(CHARACTER H 13D2
+ (CHARWD R 0.81)
+ (CHARHT R 0.7975)
+ (CHARDP R 0.005)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 65)
+ )
+ )
+(CHARACTER H 13D3
+ (CHARWD R 0.594)
+ (CHARHT R 0.8015)
+ (CHARDP R 0.006)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 63)
+ )
+ )
+(CHARACTER H 13D4
+ (CHARWD R 0.969)
+ (CHARHT R 0.8065)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 74)
+ )
+ )
+(CHARACTER H 13D5
+ (CHARWD R 0.576)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5B)
+ )
+ )
+(CHARACTER H 13D6
+ (CHARWD R 0.84)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 38)
+ )
+ )
+(CHARACTER H 13D7
+ (CHARWD R 0.672)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 64)
+ )
+ )
+(CHARACTER H 13D8
+ (CHARWD R 0.654)
+ (CHARHT R 0.7955)
+ (CHARDP R 0.005)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 54)
+ )
+ )
+(CHARACTER H 13D9
+ (CHARWD R 0.984)
+ (CHARHT R 0.7955)
+ (COMMENT
+ (KRN H 13AA R -0.23)
+ (KRN H 13AF R -0.2)
+ (KRN H 13AA R -0.2)
+ (KRN H 13AF R -0.21)
+ (KRN H 13AA R -0.1)
+ (KRN H 13AF R -0.1)
+ (KRN H 13A5 R -0.1)
+ )
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 34)
+ )
+ )
+(CHARACTER H 13DA
+ (CHARWD R 0.612)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.007)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 6A)
+ )
+ )
+(CHARACTER H 13DB
+ (CHARWD R 0.918)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 72)
+ )
+ )
+(CHARACTER H 13DC
+ (CHARWD R 0.764)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 36)
+ )
+ )
+(CHARACTER H 13DD
+ (CHARWD R 0.647)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5E)
+ )
+ )
+(CHARACTER H 13DE
+ (CHARWD R 0.729)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 56)
+ )
+ )
+(CHARACTER H 13DF
+ (CHARWD R 0.666)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 43)
+ )
+ )
+(CHARACTER H 13E0
+ (CHARWD R 0.816)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3A)
+ )
+ )
+(CHARACTER H 13E1
+ (CHARWD R 1.132)
+ (CHARHT R 0.8065)
+ (CHARDP R 0.002)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 26)
+ )
+ )
+(CHARACTER H 13E2
+ (CHARWD R 0.972)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3C)
+ )
+ )
+(CHARACTER H 13E3
+ (CHARWD R 0.723)
+ (CHARHT R 0.8035)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 45)
+ )
+ )
+(CHARACTER H 13E4
+ (CHARWD R 0.711)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.001)
+ (COMMENT
+ (KRN H 13AA R -0.2)
+ (KRN H 13AF R -0.21)
+ (KRN H 13AA R -0.1)
+ (KRN H 13AF R -0.1)
+ (KRN H 13A5 R -0.1)
+ )
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 7D)
+ )
+ )
+(CHARACTER H 13E5
+ (CHARWD R 0.762)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 47)
+ )
+ )
+(CHARACTER H 13E6
+ (CHARWD R 0.936)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 35)
+ )
+ )
+(CHARACTER H 13E7
+ (CHARWD R 0.672)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 23)
+ )
+ )
+(CHARACTER H 13E8
+ (CHARWD R 0.988)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3B)
+ )
+ )
+(CHARACTER H 13E9
+ (CHARWD R 0.69)
+ (CHARHT R 0.7975)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 5C)
+ )
+ )
+(CHARACTER H 13EA
+ (CHARWD R 0.954)
+ (CHARHT R 0.788)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 50)
+ )
+ )
+(CHARACTER H 13EB
+ (CHARWD R 0.852)
+ (CHARHT R 0.7955)
+ (CHARDP R 0.004)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 57)
+ )
+ )
+(CHARACTER H 13EC
+ (CHARWD R 0.948)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 4F)
+ )
+ )
+(CHARACTER H 13ED
+ (CHARWD R 0.633)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 58)
+ )
+ )
+(CHARACTER H 13EE
+ (CHARWD R 0.609)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.004)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 7C)
+ )
+ )
+(CHARACTER H 13EF
+ (CHARWD R 0.897)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 79)
+ )
+ )
+(CHARACTER H 13F0
+ (CHARWD R 0.567)
+ (CHARHT R 0.7995)
+ (CHARDP R 0.135)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 42)
+ )
+ )
+(CHARACTER H 13F1
+ (CHARWD R 0.831)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 49)
+ )
+ )
+(CHARACTER H 13F2
+ (CHARWD R 0.759)
+ (CHARHT R 0.7955)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 59)
+ )
+ )
+(CHARACTER H 13F3
+ (CHARWD R 0.924)
+ (CHARHT R 0.8015)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 3D)
+ )
+ )
+(CHARACTER H 13F4
+ (CHARWD R 0.729)
+ (CHARHT R 0.7995)
+ (MAP
+ (SELECTFONT D 0)
+ (SETCHAR H 78)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/level1.opl b/Build/source/texk/web2c/omegaware/tests/level1.opl
new file mode 100644
index 00000000000..6705727511f
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/level1.opl
@@ -0,0 +1,24 @@
+(OFMLEVEL H 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNICODE)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 0)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.0)
+ (SHRINK R 0.0)
+ (XHEIGHT R 1.0)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.0)
+ )
+(CHARREPEAT H 1 H FFFE
+ (CHARWD R 1.0)
+ (CHARHT R 0.9)
+ (CHARDP R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd0.dtl b/Build/source/texk/web2c/omegaware/tests/ofontd0.dtl
new file mode 100644
index 00000000000..dd415fb5e10
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd0.dtl
@@ -0,0 +1,64 @@
+variety sequences-6
+pre 2 25400000 473628672 1000 35 'Manufactured for testing 2009.09.24'
+bop 1 0 0 0 0 0 0 0 0 0 -1
+[
+fd1 0 1354163677 655360 655360 0 7 '' 'ofontr0'
+fn0
+(ABCDEF)
+]
+d3 6662197
+[
+fd1 10 1135106544 655360 655360 0 7 '' 'ofontr1'
+fn10
+\7F
+s1 128
+fd1 20 14405335053 655360 655360 0 7 '' 'ofontr2'
+fn20
+s2 383
+s2 384
+fd1 30 22120330423 655360 655360 0 7 '' 'ofontr3'
+fn30
+s2 639
+s2 640
+]
+d3 6662197
+[
+fd1 40 30131506673 655360 655360 0 7 '' 'ofontv4'
+fn40
+(|}~)
+s1 129
+s1 130
+s1 131
+]
+d3 6662197
+[
+fd1 50 11232015645 655360 655360 0 7 '' 'ofontv5'
+fn50
+s2 380
+s2 381
+s2 382
+s2 385
+s2 386
+s2 387
+]
+d3 6662197
+[
+fd1 60 5563561512 655360 655360 0 7 '' 'ofontv6'
+fn60
+s2 636
+s2 637
+s2 638
+s2 641
+s2 642
+s2 643
+]
+eop
+post 50 25400000 473628672 1000 47514830 29838620 1 1
+fd1 0 1354163677 655360 655360 0 7 '' 'ofontr0'
+fd1 10 1135106544 655360 655360 0 7 '' 'ofontr1'
+fd1 20 14405335053 655360 655360 0 7 '' 'ofontr2'
+fd1 30 22120330423 655360 655360 0 7 '' 'ofontr3'
+fd1 40 30131506673 655360 655360 0 7 '' 'ofontv4'
+fd1 50 11232015645 655360 655360 0 7 '' 'ofontv5'
+fd1 60 5563561512 655360 655360 0 7 '' 'ofontv6'
+post_post 356 2 223 223 223 223
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd0.dvi b/Build/source/texk/web2c/omegaware/tests/ofontd0.dvi
new file mode 100644
index 00000000000..d27eb9c3cd8
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd0.dvi
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd0.typ b/Build/source/texk/web2c/omegaware/tests/ofontd0.typ
new file mode 100644
index 00000000000..1c4cace75be
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd0.typ
@@ -0,0 +1,91 @@
+This is ODVItype, Version 1.5
+Options selected:
+ Starting page = *
+ Maximum number of pages = 1000000
+ Output level = 4 (the works)
+ Resolution = 300.00000000 pixels per inch
+numerator/denominator=25400000/473628672
+magnification=1000; 0.00006334 pixels per DVI unit
+'Manufactured for testing 2009.09.24'
+Postamble starts at byte 356.
+maxv=47514830, maxh=29838620, maxstackdepth=1, totalpages=1
+Font 0: ofontr0---loaded at size 655360 DVI units
+Font 10: ofontr1---loaded at size 655360 DVI units
+Font 20: ofontr2---loaded at size 655360 DVI units
+Font 30: ofontr3---loaded at size 655360 DVI units
+Font 40: ofontv4---loaded at size 655360 DVI units
+Font 50: ofontv5---loaded at size 655360 DVI units
+Font 60: ofontv6---loaded at size 655360 DVI units
+
+50: beginning of page 1
+95: push
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+96: fntdef1 0: ofontr0
+119: fntnum0 current font is ofontr0
+120: setchar65 h:=0+524288=524288, hh:=33
+121: setchar66 h:=524288+589823=1114111, hh:=70
+122: setchar67 h:=1114111+524288=1638399, hh:=103
+123: setchar68 h:=1638399+458751=2097150, hh:=132
+124: setchar69 h:=2097150+393216=2490366, hh:=157
+125: setchar70 h:=2490366+458751=2949117, hh:=186
+[ABCDEF]
+126: pop
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+127: down3 6662197 v:=0+6662197=6662197, vv:=422
+131: push
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+132: fntdef1 10: ofontr1
+155: fntnum10 current font is ofontr1
+156: setchar127 h:=0+524288=524288, hh:=33
+157: set1 128 h:=524288+589823=1114111, hh:=70
+159: fntdef1 20: ofontr2
+182: fntnum20 current font is ofontr2
+183: set2 383 h:=1114111+524288=1638399, hh:=103
+186: set2 384 h:=1638399+458751=2097150, hh:=132
+189: fntdef1 30: ofontr3
+212: fntnum30 current font is ofontr3
+213: set2 639 h:=2097150+393216=2490366, hh:=157
+216: set2 640 h:=2490366+458751=2949117, hh:=186
+219: pop
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+220: down3 6662197 v:=6662197+6662197=13324394, vv:=844
+224: push
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+225: fntdef1 40: ofontv4
+248: fntnum40 current font is ofontv4
+249: setchar124 h:=0+524288=524288, hh:=33
+250: setchar125 h:=524288+524288=1048576, hh:=66
+251: setchar126 h:=1048576+393216=1441792, hh:=91
+[|}~]
+252: set1 129 h:=1441792+589823=2031615, hh:=128
+254: set1 130 h:=2031615+458751=2490366, hh:=157
+256: set1 131 h:=2490366+458751=2949117, hh:=186
+258: pop
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+259: down3 6662197 v:=13324394+6662197=19986591, vv:=1266
+263: push
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+264: fntdef1 50: ofontv5
+287: fntnum50 current font is ofontv5
+288: set2 380 h:=0+524288=524288, hh:=33
+291: set2 381 h:=524288+393216=917504, hh:=58
+294: set2 382 h:=917504+524288=1441792, hh:=91
+297: set2 385 h:=1441792+458751=1900543, hh:=120
+300: set2 386 h:=1900543+458751=2359294, hh:=149
+303: set2 387 h:=2359294+589823=2949117, hh:=186
+306: pop
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+307: down3 6662197 v:=19986591+6662197=26648788, vv:=1688
+311: push
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+312: fntdef1 60: ofontv6
+335: fntnum60 current font is ofontv6
+336: set2 636 h:=0+393216=393216, hh:=25
+339: set2 637 h:=393216+524288=917504, hh:=58
+342: set2 638 h:=917504+524288=1441792, hh:=91
+345: set2 641 h:=1441792+458751=1900543, hh:=120
+348: set2 642 h:=1900543+589823=2490366, hh:=157
+351: set2 643 h:=2490366+458751=2949117, hh:=186
+354: pop
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+355: eop
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd1.dvi b/Build/source/texk/web2c/omegaware/tests/ofontd1.dvi
new file mode 100644
index 00000000000..b495012735f
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd1.dvi
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd1.typ b/Build/source/texk/web2c/omegaware/tests/ofontd1.typ
new file mode 100644
index 00000000000..f876992025c
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd1.typ
@@ -0,0 +1,91 @@
+This is ODVItype, Version 1.5
+Options selected:
+ Starting page = *
+ Maximum number of pages = 1000000
+ Output level = 4 (the works)
+ Resolution = 300.00000000 pixels per inch
+numerator/denominator=25400000/473628672
+magnification=1000; 0.00006334 pixels per DVI unit
+'ODVIcopy 1.6 output from Manufactured for testing 2009.09.24'
+Postamble starts at byte 381.
+maxv=26648788, maxh=2949117, maxstackdepth=1, totalpages=1
+Font 6: ofontv6---loaded at size 655360 DVI units
+Font 5: ofontv5---loaded at size 655360 DVI units
+Font 4: ofontv4---loaded at size 655360 DVI units
+Font 3: ofontr3---loaded at size 655360 DVI units
+Font 2: ofontr2---loaded at size 655360 DVI units
+Font 1: ofontr1---loaded at size 655360 DVI units
+Font 0: ofontr0---loaded at size 655360 DVI units
+
+75: beginning of page 1
+120: push
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+121: fntdef1 0: ofontr0
+144: fntnum0 current font is ofontr0
+145: setchar65 h:=0+524288=524288, hh:=33
+146: setchar66 h:=524288+589823=1114111, hh:=70
+147: setchar67 h:=1114111+524288=1638399, hh:=103
+148: setchar68 h:=1638399+458751=2097150, hh:=132
+149: setchar69 h:=2097150+393216=2490366, hh:=157
+150: setchar70 h:=2490366+458751=2949117, hh:=186
+[ABCDEF]
+151: pop
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+152: down3 6662197 v:=0+6662197=6662197, vv:=422
+156: push
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+157: fntdef1 1: ofontr1
+180: fntnum1 current font is ofontr1
+181: setchar127 h:=0+524288=524288, hh:=33
+182: set1 128 h:=524288+589823=1114111, hh:=70
+184: fntdef1 2: ofontr2
+207: fntnum2 current font is ofontr2
+208: set2 383 h:=1114111+524288=1638399, hh:=103
+211: set2 384 h:=1638399+458751=2097150, hh:=132
+214: fntdef1 3: ofontr3
+237: fntnum3 current font is ofontr3
+238: set2 639 h:=2097150+393216=2490366, hh:=157
+241: set2 640 h:=2490366+458751=2949117, hh:=186
+244: pop
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+245: down3 6662197 v:=6662197+6662197=13324394, vv:=844
+249: push
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+250: fntdef1 4: ofontv4
+273: fntnum4 current font is ofontv4
+274: setchar124 h:=0+524288=524288, hh:=33
+275: setchar125 h:=524288+524288=1048576, hh:=66
+276: setchar126 h:=1048576+393216=1441792, hh:=91
+[|}~]
+277: set1 129 h:=1441792+589823=2031615, hh:=128
+279: set1 130 h:=2031615+458751=2490366, hh:=157
+281: set1 131 h:=2490366+458751=2949117, hh:=186
+283: pop
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+284: down3 6662197 v:=13324394+6662197=19986591, vv:=1266
+288: push
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+289: fntdef1 5: ofontv5
+312: fntnum5 current font is ofontv5
+313: set2 380 h:=0+524288=524288, hh:=33
+316: set2 381 h:=524288+393216=917504, hh:=58
+319: set2 382 h:=917504+524288=1441792, hh:=91
+322: set2 385 h:=1441792+458751=1900543, hh:=120
+325: set2 386 h:=1900543+458751=2359294, hh:=149
+328: set2 387 h:=2359294+589823=2949117, hh:=186
+331: pop
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+332: down3 6662197 v:=19986591+6662197=26648788, vv:=1688
+336: push
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+337: fntdef1 6: ofontv6
+360: fntnum6 current font is ofontv6
+361: set2 636 h:=0+393216=393216, hh:=25
+364: set2 637 h:=393216+524288=917504, hh:=58
+367: set2 638 h:=917504+524288=1441792, hh:=91
+370: set2 641 h:=1441792+458751=1900543, hh:=120
+373: set2 642 h:=1900543+589823=2490366, hh:=157
+376: set2 643 h:=2490366+458751=2949117, hh:=186
+379: pop
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+380: eop
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd2.dvi b/Build/source/texk/web2c/omegaware/tests/ofontd2.dvi
new file mode 100644
index 00000000000..2727f7404f0
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd2.dvi
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd2.typ b/Build/source/texk/web2c/omegaware/tests/ofontd2.typ
new file mode 100644
index 00000000000..685bf68876c
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd2.typ
@@ -0,0 +1,99 @@
+This is ODVItype, Version 1.5
+Options selected:
+ Starting page = *
+ Maximum number of pages = 1000000
+ Output level = 4 (the works)
+ Resolution = 300.00000000 pixels per inch
+numerator/denominator=25400000/473628672
+magnification=1000; 0.00006334 pixels per DVI unit
+'ODVIcopy 1.6 output from Manufactured for testing 2009.09.24'
+Postamble starts at byte 327.
+maxv=26648788, maxh=2949117, maxstackdepth=1, totalpages=1
+Font 3: ofontr3---loaded at size 655360 DVI units
+Font 2: ofontr2---loaded at size 655360 DVI units
+Font 1: ofontr1---loaded at size 655360 DVI units
+Font 0: ofontr0---loaded at size 655360 DVI units
+
+75: beginning of page 1
+120: push
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+121: fntdef1 0: ofontr0
+144: fntnum0 current font is ofontr0
+145: setchar65 h:=0+524288=524288, hh:=33
+146: setchar66 h:=524288+589823=1114111, hh:=70
+147: setchar67 h:=1114111+524288=1638399, hh:=103
+148: setchar68 h:=1638399+458751=2097150, hh:=132
+149: setchar69 h:=2097150+393216=2490366, hh:=157
+150: setchar70 h:=2490366+458751=2949117, hh:=186
+[ABCDEF]
+151: pop
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+152: down3 6662197 v:=0+6662197=6662197, vv:=422
+156: push
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+157: fntdef1 1: ofontr1
+180: fntnum1 current font is ofontr1
+181: setchar127 h:=0+524288=524288, hh:=33
+182: set1 128 h:=524288+589823=1114111, hh:=70
+184: fntdef1 2: ofontr2
+207: fntnum2 current font is ofontr2
+208: set2 383 h:=1114111+524288=1638399, hh:=103
+211: set2 384 h:=1638399+458751=2097150, hh:=132
+214: fntdef1 3: ofontr3
+237: fntnum3 current font is ofontr3
+238: set2 639 h:=2097150+393216=2490366, hh:=157
+241: set2 640 h:=2490366+458751=2949117, hh:=186
+244: pop
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+245: down3 6662197 v:=6662197+6662197=13324394, vv:=844
+249: push
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+250: fntnum1 current font is ofontr1
+251: setchar127 h:=0+524288=524288, hh:=33
+252: fntnum2 current font is ofontr2
+253: set2 383 h:=524288+524288=1048576, hh:=66
+256: fntnum3 current font is ofontr3
+257: set2 639 h:=1048576+393216=1441792, hh:=91
+260: fntnum1 current font is ofontr1
+261: set1 128 h:=1441792+589823=2031615, hh:=128
+263: fntnum2 current font is ofontr2
+264: set2 384 h:=2031615+458751=2490366, hh:=157
+267: fntnum3 current font is ofontr3
+268: set2 640 h:=2490366+458751=2949117, hh:=186
+271: pop
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+272: down3 6662197 v:=13324394+6662197=19986591, vv:=1266
+276: push
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+277: fntnum2 current font is ofontr2
+278: set2 383 h:=0+524288=524288, hh:=33
+281: fntnum3 current font is ofontr3
+282: set2 639 h:=524288+393216=917504, hh:=58
+285: fntnum1 current font is ofontr1
+286: setchar127 h:=917504+524288=1441792, hh:=91
+287: fntnum2 current font is ofontr2
+288: set2 384 h:=1441792+458751=1900543, hh:=120
+291: fntnum3 current font is ofontr3
+292: set2 640 h:=1900543+458751=2359294, hh:=149
+295: fntnum1 current font is ofontr1
+296: set1 128 h:=2359294+589823=2949117, hh:=186
+298: pop
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+299: down3 6662197 v:=19986591+6662197=26648788, vv:=1688
+303: push
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+304: fntnum3 current font is ofontr3
+305: set2 639 h:=0+393216=393216, hh:=25
+308: fntnum1 current font is ofontr1
+309: setchar127 h:=393216+524288=917504, hh:=58
+310: fntnum2 current font is ofontr2
+311: set2 383 h:=917504+524288=1441792, hh:=91
+314: fntnum3 current font is ofontr3
+315: set2 640 h:=1441792+458751=1900543, hh:=120
+318: fntnum1 current font is ofontr1
+319: set1 128 h:=1900543+589823=2490366, hh:=157
+321: fntnum2 current font is ofontr2
+322: set2 384 h:=2490366+458751=2949117, hh:=186
+325: pop
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+326: eop
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd3.dvi b/Build/source/texk/web2c/omegaware/tests/ofontd3.dvi
new file mode 100644
index 00000000000..d9f4ebbfc65
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd3.dvi
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontd3.typ b/Build/source/texk/web2c/omegaware/tests/ofontd3.typ
new file mode 100644
index 00000000000..41059dbca58
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontd3.typ
@@ -0,0 +1,76 @@
+This is ODVItype, Version 1.5
+Options selected:
+ Starting page = *
+ Maximum number of pages = 1000000
+ Output level = 4 (the works)
+ Resolution = 300.00000000 pixels per inch
+numerator/denominator=25400000/473628672
+magnification=1000; 0.00006334 pixels per DVI unit
+'ODVIcopy 1.6 output from Manufactured for testing 2009.09.24'
+Postamble starts at byte 201.
+maxv=26648788, maxh=2949117, maxstackdepth=1, totalpages=1
+Font 0: ofontr0---loaded at size 655360 DVI units
+
+75: beginning of page 1
+120: push
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+121: fntdef1 0: ofontr0
+144: fntnum0 current font is ofontr0
+145: setchar65 h:=0+524288=524288, hh:=33
+146: setchar66 h:=524288+589823=1114111, hh:=70
+147: setchar67 h:=1114111+524288=1638399, hh:=103
+148: setchar68 h:=1638399+458751=2097150, hh:=132
+149: setchar69 h:=2097150+393216=2490366, hh:=157
+150: setchar70 h:=2490366+458751=2949117, hh:=186
+[ABCDEF]
+151: pop
+level 0:(h=0,v=0,w=0,x=0,y=0,z=0,hh=0,vv=0)
+152: down3 6662197 v:=0+6662197=6662197, vv:=422
+156: push
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+157: setchar65 h:=0+524288=524288, hh:=33
+158: setchar66 h:=524288+589823=1114111, hh:=70
+159: setchar67 h:=1114111+524288=1638399, hh:=103
+160: setchar68 h:=1638399+458751=2097150, hh:=132
+161: setchar69 h:=2097150+393216=2490366, hh:=157
+162: setchar70 h:=2490366+458751=2949117, hh:=186
+[ABCDEF]
+163: pop
+level 0:(h=0,v=6662197,w=0,x=0,y=0,z=0,hh=0,vv=422)
+164: down3 6662197 v:=6662197+6662197=13324394, vv:=844
+168: push
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+169: setchar65 h:=0+524288=524288, hh:=33
+170: setchar67 h:=524288+524288=1048576, hh:=66
+171: setchar69 h:=1048576+393216=1441792, hh:=91
+172: setchar66 h:=1441792+589823=2031615, hh:=128
+173: setchar68 h:=2031615+458751=2490366, hh:=157
+174: setchar70 h:=2490366+458751=2949117, hh:=186
+[ACEBDF]
+175: pop
+level 0:(h=0,v=13324394,w=0,x=0,y=0,z=0,hh=0,vv=844)
+176: down3 6662197 v:=13324394+6662197=19986591, vv:=1266
+180: push
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+181: setchar67 h:=0+524288=524288, hh:=33
+182: setchar69 h:=524288+393216=917504, hh:=58
+183: setchar65 h:=917504+524288=1441792, hh:=91
+184: setchar68 h:=1441792+458751=1900543, hh:=120
+185: setchar70 h:=1900543+458751=2359294, hh:=149
+186: setchar66 h:=2359294+589823=2949117, hh:=186
+[CEADFB]
+187: pop
+level 0:(h=0,v=19986591,w=0,x=0,y=0,z=0,hh=0,vv=1266)
+188: down3 6662197 v:=19986591+6662197=26648788, vv:=1688
+192: push
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+193: setchar69 h:=0+393216=393216, hh:=25
+194: setchar65 h:=393216+524288=917504, hh:=58
+195: setchar67 h:=917504+524288=1441792, hh:=91
+196: setchar70 h:=1441792+458751=1900543, hh:=120
+197: setchar66 h:=1900543+589823=2490366, hh:=157
+198: setchar68 h:=2490366+458751=2949117, hh:=186
+[EACFBD]
+199: pop
+level 0:(h=0,v=26648788,w=0,x=0,y=0,z=0,hh=0,vv=1688)
+200: eop
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr0.pl b/Build/source/texk/web2c/omegaware/tests/ofontr0.pl
new file mode 100644
index 00000000000..0cf4c883ccb
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr0.pl
@@ -0,0 +1,47 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H BB0E7BF)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 41
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 42
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 43
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 44
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 45
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 46
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr0.tfm b/Build/source/texk/web2c/omegaware/tests/ofontr0.tfm
new file mode 100644
index 00000000000..b97fc990d2f
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr0.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr1.pl b/Build/source/texk/web2c/omegaware/tests/ofontr1.pl
new file mode 100644
index 00000000000..fb77c215a38
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr1.pl
@@ -0,0 +1,27 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9748D64)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 7F
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 80
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr1.tfm b/Build/source/texk/web2c/omegaware/tests/ofontr1.tfm
new file mode 100644
index 00000000000..f2ec7a5048e
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr1.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr1.vf b/Build/source/texk/web2c/omegaware/tests/ofontr1.vf
new file mode 100644
index 00000000000..ae1d5380233
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr1.vf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr1.vpl b/Build/source/texk/web2c/omegaware/tests/ofontr1.vpl
new file mode 100644
index 00000000000..9e043344a21
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr1.vpl
@@ -0,0 +1,40 @@
+(VTITLE Mapping ofontr1 to ofontr0)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9748D64)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 7F
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 41)
+ )
+ )
+(CHARACTER H 80
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 42)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr2.ofm b/Build/source/texk/web2c/omegaware/tests/ofontr2.ofm
new file mode 100644
index 00000000000..3173dce0866
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr2.ofm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr2.opl b/Build/source/texk/web2c/omegaware/tests/ofontr2.opl
new file mode 100644
index 00000000000..1e64c09e5a4
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr2.opl
@@ -0,0 +1,29 @@
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 6415BA2B)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 17F
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 180
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr2.ovf b/Build/source/texk/web2c/omegaware/tests/ofontr2.ovf
new file mode 100644
index 00000000000..71e89e6dea2
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr2.ovf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr2.ovp b/Build/source/texk/web2c/omegaware/tests/ofontr2.ovp
new file mode 100644
index 00000000000..46aa33dab95
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr2.ovp
@@ -0,0 +1,42 @@
+(VTITLE Mapping ofontr2 to ofontr0)
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 6415BA2B)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 17F
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SETCHAR H 43)
+ )
+ )
+(CHARACTER H 180
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 44)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr3.ofm b/Build/source/texk/web2c/omegaware/tests/ofontr3.ofm
new file mode 100644
index 00000000000..afac8883721
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr3.ofm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr3.opl b/Build/source/texk/web2c/omegaware/tests/ofontr3.opl
new file mode 100644
index 00000000000..8b443718418
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr3.opl
@@ -0,0 +1,101 @@
+(OFMLEVEL H 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9141B113)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(FONTIVALUE H 0
+ (IVALUE H 0
+ (IVALUEVAL H 3210)
+ )
+ (IVALUE H 1
+ (IVALUEVAL H FEDC)
+ )
+ )
+(FONTFVALUE H 0
+ (FVALUE H 0
+ (FVALUEVAL R 0.1)
+ )
+ (FVALUE H 1
+ (FVALUEVAL R 0.2)
+ )
+ )
+(FONTMVALUE H 0
+ (MVALUE H 0
+ (MVALUEVAL R 0.3)
+ )
+ (MVALUE H 1
+ (MVALUEVAL R 0.4)
+ )
+ )
+(FONTRULE H 0
+ (RULE H 0
+ (RULEWD R 1.1)
+ (RULEHT R 2.1)
+ (RULEDP R 0.1)
+ )
+ (RULE H 1
+ (RULEWD R 1.2)
+ (RULEHT R 2.2)
+ (RULEDP R 0.2)
+ )
+ )
+(FONTGLUE H 0
+ (GLUE H 0
+ (GLUETYPE H 0)
+ (GLUESTRETCHORDER H 0)
+ (GLUESHRINKORDER H 4)
+ (GLUEWD R 1.1)
+ (GLUESTRETCH R 2.1)
+ (GLUESHRINK R 0.1)
+ )
+ (GLUE H 1
+ (GLUETYPE H 2)
+ (GLUERULE H 3210)
+ (GLUESTRETCHORDER H 4)
+ (GLUESHRINKORDER H 0)
+ (GLUEWD R 1.2)
+ (GLUESTRETCH R 2.2)
+ (GLUESHRINK R 0.2)
+ )
+ (GLUE H 2
+ (GLUETYPE H 3)
+ (GLUECHAR H FEDC)
+ (GLUESTRETCHORDER H 1)
+ (GLUESHRINKORDER H 2)
+ (GLUEWD R 1.3)
+ (GLUESTRETCH R 2.3)
+ (GLUESHRINK R 0.3)
+ )
+ )
+(FONTPENALTY H 0
+ (PENALTY H 0
+ (PENALTYVAL H 7654)
+ )
+ (PENALTY H 1
+ (PENALTYVAL H BA98)
+ )
+ )
+(CHARACTER H 27F
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 280
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr3.ovf b/Build/source/texk/web2c/omegaware/tests/ofontr3.ovf
new file mode 100644
index 00000000000..eb80b32d803
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr3.ovf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontr3.ovp b/Build/source/texk/web2c/omegaware/tests/ofontr3.ovp
new file mode 100644
index 00000000000..191818f99f9
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontr3.ovp
@@ -0,0 +1,114 @@
+(VTITLE Mapping ofontr3 to ofontr0)
+(OFMLEVEL H 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9141B113)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(FONTIVALUE H 0
+ (IVALUE H 0
+ (IVALUEVAL H 3210)
+ )
+ (IVALUE H 1
+ (IVALUEVAL H FEDC)
+ )
+ )
+(FONTFVALUE H 0
+ (FVALUE H 0
+ (FVALUEVAL R 0.1)
+ )
+ (FVALUE H 1
+ (FVALUEVAL R 0.2)
+ )
+ )
+(FONTMVALUE H 0
+ (MVALUE H 0
+ (MVALUEVAL R 0.3)
+ )
+ (MVALUE H 1
+ (MVALUEVAL R 0.4)
+ )
+ )
+(FONTRULE H 0
+ (RULE H 0
+ (RULEWD R 1.1)
+ (RULEHT R 2.1)
+ (RULEDP R 0.1)
+ )
+ (RULE H 1
+ (RULEWD R 1.2)
+ (RULEHT R 2.2)
+ (RULEDP R 0.2)
+ )
+ )
+(FONTGLUE H 0
+ (GLUE H 0
+ (GLUETYPE H 0)
+ (GLUESTRETCHORDER H 0)
+ (GLUESHRINKORDER H 4)
+ (GLUEWD R 1.1)
+ (GLUESTRETCH R 2.1)
+ (GLUESHRINK R 0.1)
+ )
+ (GLUE H 1
+ (GLUETYPE H 2)
+ (GLUERULE H 3210)
+ (GLUESTRETCHORDER H 4)
+ (GLUESHRINKORDER H 0)
+ (GLUEWD R 1.2)
+ (GLUESTRETCH R 2.2)
+ (GLUESHRINK R 0.2)
+ )
+ (GLUE H 2
+ (GLUETYPE H 3)
+ (GLUECHAR H FEDC)
+ (GLUESTRETCHORDER H 1)
+ (GLUESHRINKORDER H 2)
+ (GLUEWD R 1.3)
+ (GLUESTRETCH R 2.3)
+ (GLUESHRINK R 0.3)
+ )
+ )
+(FONTPENALTY H 0
+ (PENALTY H 0
+ (PENALTYVAL H 7654)
+ )
+ (PENALTY H 1
+ (PENALTYVAL H BA98)
+ )
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 27F
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 45)
+ )
+ )
+(CHARACTER H 280
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SETCHAR H 46)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv4.pl b/Build/source/texk/web2c/omegaware/tests/ofontv4.pl
new file mode 100644
index 00000000000..c3f18f3e40d
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv4.pl
@@ -0,0 +1,47 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H C1668DBB)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 7C
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 7D
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 7E
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 81
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 82
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 83
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv4.tfm b/Build/source/texk/web2c/omegaware/tests/ofontv4.tfm
new file mode 100644
index 00000000000..602d89a6b62
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv4.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv4.vf b/Build/source/texk/web2c/omegaware/tests/ofontv4.vf
new file mode 100644
index 00000000000..d5f5dfc1728
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv4.vf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv4.vpl b/Build/source/texk/web2c/omegaware/tests/ofontv4.vpl
new file mode 100644
index 00000000000..c77d8be3d94
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv4.vpl
@@ -0,0 +1,88 @@
+(VTITLE Mapping ofontv4 to ofontr1+ofontr2+ofontr3)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H C1668DBB)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 7C
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 7D
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 7E
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 81
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 80)
+ )
+ )
+(CHARACTER H 82
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 180)
+ )
+ )
+(CHARACTER H 83
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 280)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv5.ofm b/Build/source/texk/web2c/omegaware/tests/ofontv5.ofm
new file mode 100644
index 00000000000..34bf1fb4f7a
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv5.ofm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv5.opl b/Build/source/texk/web2c/omegaware/tests/ofontv5.opl
new file mode 100644
index 00000000000..625e1371cc2
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv5.opl
@@ -0,0 +1,49 @@
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 4A681BA5)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 17C
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 17D
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 17E
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 181
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 182
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
+(CHARACTER H 183
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv5.ovf b/Build/source/texk/web2c/omegaware/tests/ofontv5.ovf
new file mode 100644
index 00000000000..ced7ecc1ec3
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv5.ovf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv5.ovp b/Build/source/texk/web2c/omegaware/tests/ofontv5.ovp
new file mode 100644
index 00000000000..a2e96f943c2
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv5.ovp
@@ -0,0 +1,90 @@
+(VTITLE Mapping ofontv5 to ofontr2+ofontr3+ofontr1)
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 4A681BA5)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 17C
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 17D
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 17E
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 181
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 180)
+ )
+ )
+(CHARACTER H 182
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 280)
+ )
+ )
+(CHARACTER H 183
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 80)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv6.ofm b/Build/source/texk/web2c/omegaware/tests/ofontv6.ofm
new file mode 100644
index 00000000000..3ebb415ae30
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv6.ofm
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv6.opl b/Build/source/texk/web2c/omegaware/tests/ofontv6.opl
new file mode 100644
index 00000000000..ea8112b1e4f
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv6.opl
@@ -0,0 +1,121 @@
+(OFMLEVEL H 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 2DCEE34A)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(FONTIVALUE H 0
+ (IVALUE H 0
+ (IVALUEVAL H 3210)
+ )
+ (IVALUE H 1
+ (IVALUEVAL H FEDC)
+ )
+ )
+(FONTFVALUE H 0
+ (FVALUE H 0
+ (FVALUEVAL R 0.1)
+ )
+ (FVALUE H 1
+ (FVALUEVAL R 0.2)
+ )
+ )
+(FONTMVALUE H 0
+ (MVALUE H 0
+ (MVALUEVAL R 0.3)
+ )
+ (MVALUE H 1
+ (MVALUEVAL R 0.4)
+ )
+ )
+(FONTRULE H 0
+ (RULE H 0
+ (RULEWD R 1.1)
+ (RULEHT R 2.1)
+ (RULEDP R 0.1)
+ )
+ (RULE H 1
+ (RULEWD R 1.2)
+ (RULEHT R 2.2)
+ (RULEDP R 0.2)
+ )
+ )
+(FONTGLUE H 0
+ (GLUE H 0
+ (GLUETYPE H 0)
+ (GLUESTRETCHORDER H 0)
+ (GLUESHRINKORDER H 4)
+ (GLUEWD R 1.1)
+ (GLUESTRETCH R 2.1)
+ (GLUESHRINK R 0.1)
+ )
+ (GLUE H 1
+ (GLUETYPE H 2)
+ (GLUERULE H 3210)
+ (GLUESTRETCHORDER H 4)
+ (GLUESHRINKORDER H 0)
+ (GLUEWD R 1.2)
+ (GLUESTRETCH R 2.2)
+ (GLUESHRINK R 0.2)
+ )
+ (GLUE H 2
+ (GLUETYPE H 3)
+ (GLUECHAR H FEDC)
+ (GLUESTRETCHORDER H 1)
+ (GLUESHRINKORDER H 2)
+ (GLUEWD R 1.3)
+ (GLUESTRETCH R 2.3)
+ (GLUESHRINK R 0.3)
+ )
+ )
+(FONTPENALTY H 0
+ (PENALTY H 0
+ (PENALTYVAL H 7654)
+ )
+ (PENALTY H 1
+ (PENALTYVAL H BA98)
+ )
+ )
+(CHARACTER H 27C
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 27D
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 27E
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 281
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
+(CHARACTER H 282
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 283
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv6.ovf b/Build/source/texk/web2c/omegaware/tests/ofontv6.ovf
new file mode 100644
index 00000000000..2044f5c2b73
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv6.ovf
Binary files differ
diff --git a/Build/source/texk/web2c/omegaware/tests/ofontv6.ovp b/Build/source/texk/web2c/omegaware/tests/ofontv6.ovp
new file mode 100644
index 00000000000..e36f45b83e2
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/ofontv6.ovp
@@ -0,0 +1,162 @@
+(VTITLE Mapping ofontv6 to ofontr3+ofontr1+ofontr2)
+(OFMLEVEL H 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 2DCEE34A)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(FONTIVALUE H 0
+ (IVALUE H 0
+ (IVALUEVAL H 3210)
+ )
+ (IVALUE H 1
+ (IVALUEVAL H FEDC)
+ )
+ )
+(FONTFVALUE H 0
+ (FVALUE H 0
+ (FVALUEVAL R 0.1)
+ )
+ (FVALUE H 1
+ (FVALUEVAL R 0.2)
+ )
+ )
+(FONTMVALUE H 0
+ (MVALUE H 0
+ (MVALUEVAL R 0.3)
+ )
+ (MVALUE H 1
+ (MVALUEVAL R 0.4)
+ )
+ )
+(FONTRULE H 0
+ (RULE H 0
+ (RULEWD R 1.1)
+ (RULEHT R 2.1)
+ (RULEDP R 0.1)
+ )
+ (RULE H 1
+ (RULEWD R 1.2)
+ (RULEHT R 2.2)
+ (RULEDP R 0.2)
+ )
+ )
+(FONTGLUE H 0
+ (GLUE H 0
+ (GLUETYPE H 0)
+ (GLUESTRETCHORDER H 0)
+ (GLUESHRINKORDER H 4)
+ (GLUEWD R 1.1)
+ (GLUESTRETCH R 2.1)
+ (GLUESHRINK R 0.1)
+ )
+ (GLUE H 1
+ (GLUETYPE H 2)
+ (GLUERULE H 3210)
+ (GLUESTRETCHORDER H 4)
+ (GLUESHRINKORDER H 0)
+ (GLUEWD R 1.2)
+ (GLUESTRETCH R 2.2)
+ (GLUESHRINK R 0.2)
+ )
+ (GLUE H 2
+ (GLUETYPE H 3)
+ (GLUECHAR H FEDC)
+ (GLUESTRETCHORDER H 1)
+ (GLUESHRINKORDER H 2)
+ (GLUEWD R 1.3)
+ (GLUESTRETCH R 2.3)
+ (GLUESHRINK R 0.3)
+ )
+ )
+(FONTPENALTY H 0
+ (PENALTY H 0
+ (PENALTYVAL H 7654)
+ )
+ (PENALTY H 1
+ (PENALTYVAL H BA98)
+ )
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 27C
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 27D
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 27E
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 281
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SETCHAR H 280)
+ )
+ )
+(CHARACTER H 282
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 80)
+ )
+ )
+(CHARACTER H 283
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 180)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegaware/tests/specialhex.ovp b/Build/source/texk/web2c/omegaware/tests/specialhex.ovp
new file mode 100644
index 00000000000..03a3bcf299f
--- /dev/null
+++ b/Build/source/texk/web2c/omegaware/tests/specialhex.ovp
@@ -0,0 +1,34 @@
+(VTITLE Test SPECIALHEX handling)
+(OFMLEVEL H 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 22286392)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.5)
+ (STRETCH R 0.3)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.8)
+ (QUAD R 1.0)
+ )
+(CHARACTER H 22
+ (CHARWD R 0.554)
+ (CHARHT R 0.7955)
+ (MAP
+ (SPECIAL a special string)
+ )
+ )
+(CHARACTER H 28
+ (CHARWD R 0.333)
+ (CHARHT R 0.852)
+ (CHARDP R 0.056)
+ (MAP
+ (SPECIALHEX 01234567 89ABCDEF)
+ )
+ )