summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/ptexdir
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/ptexdir
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/ptexdir')
-rw-r--r--Build/source/texk/web2c/ptexdir/COPYRIGHT25
-rw-r--r--Build/source/texk/web2c/ptexdir/COPYRIGHT.jis32
-rw-r--r--Build/source/texk/web2c/ptexdir/ChangeLog875
-rw-r--r--Build/source/texk/web2c/ptexdir/Changes.txt317
-rw-r--r--Build/source/texk/web2c/ptexdir/INSTALL.txt83
-rw-r--r--Build/source/texk/web2c/ptexdir/README.txt32
-rw-r--r--Build/source/texk/web2c/ptexdir/am/ptex.am240
-rw-r--r--Build/source/texk/web2c/ptexdir/kanji.c107
-rw-r--r--Build/source/texk/web2c/ptexdir/kanji.h78
-rw-r--r--Build/source/texk/web2c/ptexdir/kanji_dump.c51
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/nissya.test17
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pbibtex-longline-test.pl37
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pbibtex-mem.test70
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pbibtex-openout-test.pl22
-rw-r--r--Build/source/texk/web2c/ptexdir/pbibtex.ch610
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pbibtex.test15
-rw-r--r--Build/source/texk/web2c/ptexdir/pdvitype.ch483
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pdvitype.test20
-rw-r--r--Build/source/texk/web2c/ptexdir/ppltotf.ch710
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/ppltotf.test10
-rw-r--r--Build/source/texk/web2c/ptexdir/ptex-base.ch7480
-rw-r--r--Build/source/texk/web2c/ptexdir/ptex.defines34
-rw-r--r--Build/source/texk/web2c/ptexdir/ptex_version.h1
-rw-r--r--Build/source/texk/web2c/ptexdir/ptexextra.c12
-rw-r--r--Build/source/texk/web2c/ptexdir/ptexextra.h24
-rw-r--r--Build/source/texk/web2c/ptexdir/ptftopl.ch538
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/ptftopl.test11
-rw-r--r--Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs591
-rw-r--r--Build/source/texk/web2c/ptexdir/ptrip/texmf.cnf41
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/ptriptest.test71
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/pver.test32
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/sample.test23
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/skipjfmp.test22
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/control-symbol.tex101
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/disp_jfm.tex23
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/disp_unbox.tex23
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/endlinechar.tex53
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/free_ixsp.tex53
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/free_pena.tex52
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/goth10.tfmbin0 -> 1196 bytes
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/inhibitglue.tex220
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/inhibitglue_extensions.tex50
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/kinsoku_table.tex46
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/let_char_token.tex11
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/min10.pl392
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/min10.tfmbin0 -> 1196 bytes
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/nissya.bst2197
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/nissya_bib.aux60
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/postpena.tex15
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/pver1.tex2
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/pver2.tex13
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/sample.bib131
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/sample.dvibin0 -> 5696 bytes
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/samplea.typ2825
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/skipjfmp.pl159
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/skipjfmp.tex33
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/skipjfmp.tfmbin0 -> 632 bytes
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/tmin10.pl285
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/tmin10.tfmbin0 -> 856 bytes
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/yokotate.test23
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/zfmtcompress.test95
61 files changed, 19576 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/ptexdir/COPYRIGHT b/Build/source/texk/web2c/ptexdir/COPYRIGHT
new file mode 100644
index 00000000000..9f2495ecb04
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/COPYRIGHT
@@ -0,0 +1,25 @@
+Copyright (C) 2009 ASCII MEDIA WORKS.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the author may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Build/source/texk/web2c/ptexdir/COPYRIGHT.jis b/Build/source/texk/web2c/ptexdir/COPYRIGHT.jis
new file mode 100644
index 00000000000..fb491511cc7
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/COPYRIGHT.jis
@@ -0,0 +1,32 @@
+($BCm(B) $B0J2<$O!"1QJ8$N7@Ls>r9`$rF|K\8l$KK]Lu$7$?$b$N$G$"$k!#F|K\8lLu$H1Q(B
+$B8lI=5-$N4V$Ksrsw$,$"$C$?>l9g$K$O!"7@Ls>r7o$O1Q8lI=5-$K$h$k7@Ls>r9`$K=>(B
+$B$&!#(B
+
+$B!ZCx:n8"I=<(![(B
+Copyright (C) 2009 ASCII MEDIA WORKS.
+All rights reserved.
+
+$B!Z7@Ls>r7o![(B
+$B2~JQ$NM-L5$K$+$+$o$i$:!"K\%=%U%H%&%'%"$N%=!<%9%3!<%I5Z$S%P%$%J%j!<%3!<(B
+$B%I7A<0$K$h$k:FHRI[5Z$S;HMQ$O!"<!$N7@Ls>r7o$N2<$K5vBz$5$l$k!#(B
+1. $B%=!<%9%3!<%I$N:FHRI[$K:]$7$F$O!">e5-$N!ZCx:n8"I=<(![!"$3$N!Z7@Ls>r(B
+ $B7o![5Z$S<!$N!ZLH@U>r9`![$NI=5-$r!"0z$-B3$-0];}$7$FL@5-$7$J$1$l$P$J(B
+ $B$i$J$$!#(B
+2. $B%P%$%J%j!<7A<0$K$h$k:FHRI[$K:]$7$F$O!">e5-$N!ZCx:n8"I=<(![!"$3$N(B
+ $B!Z7@Ls>r7o![5Z$S<!$N!ZLH@U>r9`![$r!":FHRI[$K:]$7Ds6!$9$k@bL@=q5Z$S(B
+ $B$=$NB>$N4XO";qNA$K2~$a$FL@5-$7$J$1$l$P$J$i$J$$!#(B
+3. $BFCJL$J;vA0$N=qLL$K$h$k5vBz$,$J$$8B$j!"K\%=%U%H%&%'%"$+$iGI@8$7$?@=(B
+ $BIJ$r?d>)Kt$O@kEA$9$k$?$a$K!"Cx:n8"<TL>$O;HMQ$7$F$O$J$i$J$$!#(B
+
+$B!ZLH@U>r9`![(B
+$BK\%=%U%H%&%'%"$O!"Cx:n8"<T$K$h$j!"!V8=>uM-;Q$N$^$^!J$=$N$^$^$N7A$G!K!W(B
+$BDs6!$5$l$k$b$N$G$"$j!">&IJ@-Kt$OFCDjL\E*$X$NE,9g@-$K4X$9$kL[<(E*J]>Z$J(B
+$B$I!"L@<(Kt$OL[<($NJ]>Z$rLd$o$:!"$$$+$J$kJ]>Z$r$b9T$&$b$N$G$O$J$$!#(B
+$B$$$+$J$kM}M3$K$h$C$F$b!"$^$?!"7@Ls@UG$!"873J@UG$Kt$O!J2a<:$K$h$k$b$N$r(B
+$B4^$`!KITK!9T0Y@UG$$rLd$o$:$I$N$h$&$J@UG$$NM}O@$K$h$C$F$b!"Cx:n8"<T$O!"(B
+$B$$$+$J$k>l9g$b!"K\%=%U%H%&%'%"$r;HMQ$9$k$3$H$K$h$jH/@8$9$k!"$"$i$f$kD>(B
+$B@\B;32!"4V@\B;32!"6vH/B;32!"FCJLB;32!"D(H3E*B;32$"$k$$$OGI@8E*B;32!JBe(B
+$BBX@=IJ!&BeBX%5!<%S%9$ND4C#!";HMQMx1W!"%G!<%?Kt$O<}1W$K4X$9$kB;<:!"1D6H(B
+$BCfCG$K$h$kB;<:$J$I!K$K$D$$$F2?$i$N@UG$$bIi$o$J$$!#$3$l$O!"K\%=%U%H%&%'(B
+$B%"$r;HMQ$9$k$3$H$K$h$j!"$3$l$i$NB;32$,H/@8$9$k2DG=@-$K$D$$$F!"$"$i$+$8(B
+$B$a<(:6$5$l$F$$$?>l9g$G$"$C$F$bF1MM$G$"$k!#(B
diff --git a/Build/source/texk/web2c/ptexdir/ChangeLog b/Build/source/texk/web2c/ptexdir/ChangeLog
new file mode 100644
index 00000000000..ea144890d6e
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ChangeLog
@@ -0,0 +1,875 @@
+2021-02-18 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch, ptex_version.h: pTeX version p3.9.0 for TL21.
+ (Forgot to update version number on 2020-02-05.)
+
+2021-02-15 Andreas Scherer <https://ascherer.github.io>
+
+ * ptexdir/ptex-base.ch: Fix Pascal variable in comment.
+
+2020-11-29 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Fix syntax error of "not equal".
+ Correct error recovery value of illegal catcode for upTeX.
+
+2020-10-30 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * pdvitype.ch: Strict check for DVI ID was wrong for
+ output-level <= 3; needs reconsider.
+
+2020-08-29 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * pdvitype.ch: Support dtou direction. Strict check for DVI ID
+ with command 255. Version p0.5.
+
+2020-05-17 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ppltotf.ch: Avoid compiler warnings: equality comparison with
+ extraneous parentheses.
+
+2020-05-05 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Improved resetting inhibit_glue_flag in extensions.
+ https://github.com/texjporg/tex-jp-build/pull/102
+
+2020-02-09 Phelype Oleinik <phe.h.o1@gmail.com>
+
+ * ptexdir/ptex-base.ch: extra end; needed for the scan_file_name
+ change in tex.ch.
+
+2020-02-09 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: forgot to set cur_val_level in fetching
+ \kansujichar (Bug introduced in commit on 2019-10-14).
+
+2020-02-05 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Add new primitives \ifjfont and \iftfont.
+
+2019-12-10 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * am/ptex.am (ptex_cppflags): append $(ZLIB_INCLUDES).
+ (ptex_ldadd): append $(ZLIB_LIBS.)
+ (ptex_dependencies): append $(ZLIB_DEPEND)
+ (ptex_web_srcs): append zlib-fmt.ch.
+ * kanji.h: #include <zlib.h>
+ (dump_kanji, undump_kanji): arg is now type gzFile instead of FILE *.
+ * kanji_dump.c (pTeX) [!pTeX]: #define if not already.
+ (dump_kanji, undump_kanji): chang arg type.
+ * zfmtcompress.test: new script (not enabled).
+
+2019-10-14 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Allow getting \kansujichar.
+ * ptex_version.h: pTeX version p3.8.3.
+
+2019-08-04 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ppltotf.ch: 'This property name doesn't belong in a TYPE list'
+ was never available.
+
+2019-06-24 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: 'Improper alphabetic or KANJI constant' error
+ should be raised for multibyte CS.
+ * tests/let_char_token.tex: Added.
+
+2019-05-28 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * am/ptex.am: Add a new test.
+ * pver.test: New test file for version number consistency.
+ * tests/pver1.tex, ptexdir/tests/pver2.tex: New.
+
+2019-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch:
+ Make appropriate comparison of U+0100 by \if in upTeX.
+ https://github.com/texjporg/tex-jp-build/issues/68
+ Re-eval kcatcode of Japanese character token in \if and \ifcat.
+ https://github.com/texjporg/ptex-manual/issues/4
+
+2019-02-03 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Ignore newline char after Japanese control
+ symbol. https://github.com/texjporg/tex-jp-build/issues/37
+ * tests/control_symbol.tex: More test cases.
+ * ptex_version.h: pTeX version p3.8.2.
+
+2019-02-03 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+ and Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Change the behavior of \inhibitglue. See
+ https://github.com/texjporg/tex-jp-build/issues/28.
+ - \inhibitglue becomes ineffective when it encounters a node.
+ (former commit on 2014-05-06 was still insufficient.)
+ - non-expandable tokens without node (e.g. \relax, assignment)
+ becomes transparent.
+ - \inhibitglue inside a list does not affect another list.
+ - Add new primitive \disinhibitglue to reset the inhibit glue
+ flag explicitly.
+ * tests/inhibitglue.tex: Added.
+
+2019-02-03 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * kanji.h: Use fputs2() to benefit from kanji encoding conversion.
+ https://github.com/texjporg/tex-jp-build/issues/34
+
+2019-01-23 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Add dump_kanji and undump_kanji.
+ * ptex.defines: Add dumpkanji and undumpkanji.
+ * kanji.c: Factor out init_kanji().
+ * kanji_dump.c: New file for dumping/undumping kanji encoding.
+ * kanji.h: Add init_kanji(), dump_kanji(), and undump_kanji().
+ * am/ptex.am (libkanji_a_SOURCES): Add kanji_dump.c.
+ (all changes based on tl r23753 of upTeX, dated 2011-08-29.)
+
+ * kanji_dump.c: Throw a warning when kanji internal encoding
+ is incompatible with the preloaded format.
+ https://github.com/texjporg/tex-jp-build/issues/55
+
+2018-09-09 Karl Berry <karl@tug.org>
+
+ * ptriptest.test: LC_ALL=LANGUAGE=C.
+
+2018-06-14 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch,
+ kanji.h, kanji.c, ptex.defines: remove sjisterminal (w32 only).
+
+2018-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * kanji.c: More strict check kanji token.
+
+2018-04-14 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix issue GitHub:texjporg/tex-jp-build#57
+ that discontinuous KINSOKU/INHIBIT table cannot be
+ searched properly.
+ (regression caused by a commmit of 2017-09-11)
+ * tests/free_pena.tex, tests/free_ixsp.tex: Added.
+ * ptex_version.h: pTeX version p3.8.1.
+
+2018-02-05 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptex-base.ch: Set subtype for JFM glue in math list.
+
+2018-02-02 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ppltotf.ch: Fix issues GitHub:texjporg/tex-jp-build#47, #48
+ - Support SKIP property in GLUEKERN table.
+ - Improve hex charcode parsing.
+ * ptftopl.ch: Fix issue GitHub:texjporg/tex-jp-build#48
+ - Print ASCII characters always in hex charcode (for upTFtoPL).
+ * ptex-base.ch: Fix issue GitHub:texjporg/tex-jp-build#47
+ - Support SKIP property in GLUEKERN table.
+ - Support huge GLUEKERN table with rearrangement.
+ * am/ptex.am: Add new tests.
+ * skipjfm.test, tests/skipjfm.{tex,pl,tfm}: New test files.
+
+2018-01-31 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix issue GitHub:texjporg/tex-jp-build#40
+ - Insert a disp_node before the first character in a
+ paragraph or an hbox, if disp_node is not inserted yet
+ in the current list (in case it is unboxed).
+ - Inhibit JFM glue after a disp_node at the very beginning of
+ a paragraph or an hbox.
+ * tests/disp_jfm.tex, tests/disp_unbox.tex: Added.
+
+2018-01-27 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ppltotf.ch, ptftopl.ch: Introduce a new JFM spec, to allow
+ 3-byte characters in TYPE > 0 for upTeX. The new spec is
+ effectively upper compatible with the original one.
+ * ptex-base.ch, pdvitype.ch: Adapt to the new JFM spec.
+
+2018-01-21 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: New primitives: \ptexversion, \ptexminorversion
+ and \ptexrevision.
+ * ptex_version.h: pTeX version p3.8.0.
+
+2017-12-21 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Include zw etc. in "Dimensions can be in units ..."
+ help message.
+
+2017-11-30 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Suppress a space character printed after the name
+ of a multibyte control symbol in print_cs().
+ * tests/control-symbol.tex: Added.
+
+2017-10-04 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Direction check in \discretionary.
+
+2017-09-11 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Assigning the default value frees the KINSOKU table
+ and inhibit table, only if global or \currentgrouplevel=0.
+ * tests/kinsoku_table.tex: Added.
+
+2017-09-09 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Remove JFM glue after kinsoku penalty at the top
+ of list in adjust_hlist. Do not insert kinsoku penalty when it is
+ set to zero.
+
+2017-09-09 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * ptftopl.ch: Check for fifth byte (= upper byte of lf) of input JFM.
+
+2017-09-07 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: More restrictions on direction change commands.
+ - Direction change is not allowed in unrestricted horizontal mode,
+ nor math modes.
+ - In external vertical mode, direction change is allowed only if
+ both the current page nor recent contributions do not contain
+ any boxes and rules.
+ * ptex_version.h: pTeX version p3.7.2.
+
+2017-04-24 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: p\TeX -> \pTeX.
+
+2017-04-09 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix a bug in single-letter control sequence
+ when \endlinechar=-1.
+ * tests/endlinechar.tex: Added.
+
+2017-04-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix a bug that the postbreakpenalty sometimes reappears
+ even when it was removed by \unpenalty.
+ * tests/postpena.tex: Added.
+
+2017-03-12 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptex-base.ch: Fix a typo pointed out at
+ https://github.com/clerkma/ptex-ng/issues/19.
+
+2017-02-05 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * ppltotf.ch: Expand the limit of glue/kern and kern tables.
+
+2016-12-16 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch:
+ Use "issue@texjp.org" as bug_email in usagehelp().
+
+2016-12-15 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptexextra.h: Use "issue@texjp.org" as BUG_ADDRESS.
+
+2016-09-12 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: New primitive \ifmbox to realize better box in math mode.
+
+2016-09-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Allow only 8bit arguments for \catcode etc.
+
+2016-06-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix a bug in check_box().
+ ptex_version.h: pTeX version p3.7.1.
+
+2016-03-04 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Add new primitives \textbaselineshiftfactor (=1000),
+ \scriptbaselineshiftfactor (=700), \scriptscriptbaselineshiftfactor (=500)
+ to improve typesetting with non-vanishing \ybaselineshift.
+ If all three are zero, the old features are recovered.
+
+2015-09-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptriptest.test: Also check tripos.tex.
+
+2015-09-10 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix a bug in flushing choice node.
+ * ptex_version.h: pTeX version p3.7.
+
+2015-07-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptriptest (removed): Renamed ...
+ * ptriptest.test (new): ... into this.
+ * am/ptex.am: Better dependencies for 'make check'.
+
+2015-06-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Use $(tie_c) and $(tie_m).
+
+2015-04-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptrip/ptrip.diffs: Updated for TL 2015.
+
+2015-03-14 Karl Berry <karl@tug.org>
+
+ * ptex-base.ch (pTeX_version_string): bump to 3.6 (per Akira).
+
+2015-01-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.ch: Drop intcast().
+
+2015-01-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptftopl.ch: Use ^byte and xmalloc_array().
+
+2014-12-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptriptest: Complain early if trip.fmt is not created.
+ Inspired by report from vvv, tlbuild 14 Jun 2011 10:25:47.
+
+2014-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: reset inhibit_glue_flag in several places
+ where it was missing.
+
+2014-05-02 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptrip/ptrip.diffs: Updated for TL14.
+
+2014-01-23 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptftopl.ch: Slightly simplified. Fixed some typos.
+
+2014-01-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptrip/ptrip.diffs: Updated for pTeX 3.14159265.
+
+2014-01-20 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ TeX tuneup of 2014.
+ * ptex-base.ch: Adapt to TeX Version 3.14159265.
+ * ppltotf.ch: Adapt to PLtoTF Version 3.6.
+ * ptftopl.ch: Adapt to TFtoPL Version 3.3.
+
+2014-01-17 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptrip.test (removed): Renamed ...
+ * ptriptest (new): ... into this.
+ * am/ptex.am: Adapted.
+
+2013-12-31 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptftopl.ch, tests/min10.pl, tests/min10.pl: Don't write
+ SEVENBITSAFEFLAG for JFM (yoko or tate) fonts.
+
+2013-12-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * tests/min10.pl, tests/tmin10.pl: Converted to 7-bit ASCII.
+ * yokotate.test: Simplified.
+
+2013-12-17 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ppltotf.ch: Drop one unused change set (is in ../pltotf.ch).
+ Print DIRECTION value with print_ln() instead of err_print().
+
+2013-11-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Simplify a few change sets.
+
+2013-08-12 TANAKA Takuji <KXD02663@nifty.ne.jp>
+
+ * kanji.h, ptex-base.ch, ptex.defines: Allow file names with 0x5c in
+ (e)pTeX on Windows.
+
+2013-06-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Move PTEXENC_RULE to ../Makefile.am.
+
+2013-06-05 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * kanji.h: Avoid redefinition of KANJI.
+
+2013-05-05 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Fix a bug that KANJI info of the last char in \hbox
+ was lost.
+
+2013-04-09 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptrip/ptrip.diffs: Update for TL 2013.
+
+2013-04-09 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: 3.3 ---> 3.4 for TL 2013.
+
+2013-03-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Better rule for ptex_version.h.
+
+2013-02-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Avoid spurious failures of parallel tests.
+ * am/ptex.am, nissya.test, pbibtex.test, pdvitype.test,
+ ppltotf.test, ptftopl.test, sample.test, yokotate.test:
+ Change directory for temporary files from tests to ptests.
+ * pbibtex-longline-test.pl: Use plongline.aux as input together
+ with longline.bib from source tree.
+
+ * pbibtex-openout-test.pl: Fix the input file location.
+
+2013-01-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am, pbibtex-mem.test, ptrip.test:
+ Enable parallel-tests.
+
+2013-01-04 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: \xkanjiskip around math_node etc.
+
+2012-12-16 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (ptex_version.h): Enable silent rules.
+
+2012-11-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Remove native buffer printing code.
+
+2012-11-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch (cs_error): Remove "endmubyte" code.
+
+2012-08-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ppltotf.ch: Remove putc kludge, convert knows (u)ppltotf.
+
+ * kanji.c (init_default_kanji): Set defaults before testing
+ PTEX_KANJI_ENC from the environment.
+ * kanji.c: WIN32 defaults differ, except for pBibTeX.
+
+2012-07-19 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Distribute ptex_version.h.
+
+2012-07-17 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: fix a bug in
+ @<Scan an alphabetic character code into |cur_val|@>
+
+2012-07-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch:
+ Adapt to the use my_name.
+
+2012-07-15 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptexextra.c: Must #define DLLPROC before reading ptexd.h.
+
+2012-06-30 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptexextra.c [W32TeX]: #define DLLPROC for ptex.dll.
+
+2012-05-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.test, sample.test: Cope with spaces in paths returned
+ by kpsewhich.
+
+2012-05-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Restore the 'unnecessary and seemingly wrong'
+ changes; they are required to show the error context.
+ * ptrip/ptrip.diffs: Adapted.
+
+2012-05-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch (pTeX_version_string): Version 3.3.
+ * ptrip/ptrip.diffs: Adapted.
+
+2012-03-11 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptex-base.ch: remove unnecessary and seemingly wrong changes
+
+2012-03-08 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptex-base.ch: fix a long-remained bug in show_context.
+
+2012-03-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Avoid 'differ in signedness' warnings.
+ * pbibtex.ch, ppltotf.ch: Use ustringcast(buffer).
+ * ptex-base.ch: Use ustringcast for buffer and str_pool.
+
+2012-01-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptftopl.ch: Adapt to missing space added in ../tftopl.ch.
+
+2012-01-07 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.ch: Remove an unnecessary change in previous.
+
+2012-01-05 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * kanji.h, pdvitype.ch: enable -kanji option in pdvitype.
+ (patch from TANAKA Takuji-san).
+
+2011-12-19 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch, ptex.defines, kanji.[ch]: Avoid Segmentation
+ fault for japanese \catcode or \kcatcode.
+
+2011-12-08 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Ensure that `hi(#)==#'.
+
+2011-11-25 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (pdvitype_CPPFLAGS): Replace '-DDHEX_CHAR_CODE' by
+ '-DHEX_CHAR_CODE'.
+
+2011-10-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (DISTCLEANFILES): Preserve distributed files.
+
+2011-08-29 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch: Use nil, not 0 as arg of set_enc_string().
+
+2011-08-23 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch, ptex.defines:
+ Change init_default_kanji => init_kanji.
+ * kanji.[ch]: Map initdefaultkanji (for pTeX and e-pTeX) and
+ initkanji (for pBibTeX, pDVItype, pPLtoTF, and pTFtoPL) to
+ init_default_kanji() with two encoding string arguments.
+
+2011-08-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch: Change error
+ message text 'kanjicode encoding' => 'kanji encoding'.
+ * am/ptex.am (*_DEPENDENCIES): Define proper dependencies.
+
+2011-08-20 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, ppltotf.ch, ptftopl.ch: Stop parsing arguments at
+ "-version" and immediately call print_version_and_exit().
+
+2011-08-19 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch: Add WIN32
+ option "sjis-terminal" and init_default_kanji().
+ * ptex.defines: Add sjisterminal and initdefaultkanji.
+ * kanji.[ch]: Add support for WIN32 option "sjis-terminal".
+ (check_kanji): Change return type boolean => int (for -1, 0, +1).
+ (initdefaultkanji): New function from W32TeX kanjiextra.c.
+ * am/ptex.am (*_LDADD): Use libkanji.a for all binaries.
+
+ * pdvitype.ch: Change banner 'PDVItype' => 'pDVItype'.
+ * ppltotf.ch: Change banner 'Nihongo PLtoTF' => 'pPLtoTF'.
+ More fix usage ('progname'). Simplify kanji encoding output.
+ * ptftopl.ch: Change banner 'Nihongo TFtoPL' => 'pTFtoPL'.
+ More fix usage ('progname'). Simplify kanji encoding output.
+ * pbibtex.ch: Simplify kanji encoding output.
+
+2011-08-19 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ppltotf.ch, ptftopl.ch: fix usage ('progname').
+
+2011-08-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, pdvitype.ch, ppltotf.ch, ptftopl.ch: Add WIN32
+ option "sjis-terminal" and init_default_kanji().
+ * ptex.defines: Add sjisterminal and initdefaultkanji.
+ * kanji.[ch]: Add support for WIN32 option "sjis-terminal".
+ (check_kanji): Change return type boolean => int (for -1, 0, +1).
+ (initdefaultkanji): New function from W32TeX kanjiextra.c.
+ * am/ptex.am (*_LDADD): Use libkanji.a for all binaries.
+
+2011-08-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ pTeX update tlsvn23478-uptex-1108111825 [ptex:00267]
+ from Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Merged with ptex-20110723-nullfont.ch (bug fix).
+
+2011-08-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Slightly reformulate to simplify e-upTeX.
+
+ * kanji.h [MP]: Remove TEXMFPOOLNAME and TEXMFENGINENAME.
+
+2011-07-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (pweb_tests): New variable for tests of pTeX
+ related Web programs (split off ptex_tests).
+
+ * ptrip/texmf.cnf (main_memory): Increase for SyncTeX.
+
+2011-06-30 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (ptex_ch_srcs): SyncTeX infrastructure.
+ * ptex-base.ch: Slightly reformulate to simplify SyncTeX.
+
+2011-04-19 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Avoid 'differ in signedness' warnings.
+ * ptex-base.ch: Cast buffer and str_pool to string when used as
+ arg of multistrlen() or fromBUFF().
+ (pack_buffered_name): Drop change already done in ../tex.ch.
+
+ * pbibtex.ch: Cast buffer to string when used as a arg of
+ input_line2().
+
+ * ppltotf.ch: Cast buffer to string when used as a arg of
+ input_line2() or multistrlen().
+
+2011-04-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Add \ifdbox and \ifddir,
+ (pTeX_version_string) Version p3.2.
+
+2011-03-31 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: TeX formatting.
+
+2011-03-30 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Handle disp_node from discretionary.
+
+2011-03-29 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Redefine box_dir to also work for
+ min_quarterword<0.
+
+2011-03-28 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Use AM_CFLAGS instead of {libkanji_a,ptex}_CFLAGS.
+
+2011-03-27 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Reformulate @<Fetch an item in the current
+ node...@>, begin_box, and delete_last to fix a bug in
+ \lastpenalty & Co; further reduce e-pTeX interferences.
+
+2011-03-26 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Fix a bug in begin_box introduced on 2011-03-24,
+ mail from Hironori Kitagawa, Sat, 26 Mar 2011 21:42:49.
+
+2011-03-24 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Reformulate begin_box and delete_last to reduce
+ interferences between e-TeX and pTeX.
+
+2011-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Reformulate @<Fetch an item in the current
+ node...@> to reduce interferences between e-TeX and pTeX.
+
+2011-03-18 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ e-pTeX update eptex-110315_tlsvn110318.diff [ptex:00248]
+ from Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Define and use the Web macro set_box_dir
+ to reduce interferences between e-TeX and pTeX.
+ Fixed a bug around \radical with Japanese character.
+ Fixed a bug in setting/reading a dimension of a box register in
+ "different" directions.
+
+2011-01-19 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Let \lastkern etc act through disp node.
+ Define dir_yoko as 4 and not qi(4); dir_field and adj_dir_field
+ are -dir_yoko..dir_yoko and not -dir_dtou..dir_dtou.
+ Shorten change sets. Remove trailing blanks.
+
+2011-01-17 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: banner_k==banner for pTeX.
+
+ * am/ptex.am (ptrip.diffs): Use $(triptrap_diffs).
+
+2011-01-14 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (ptrip-clean): Use TRIPTRAP_CLEAN.
+
+2011-01-13 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Reformulate if_*_code definitions, for e-pTeX.
+
+2011-01-12 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Somewhat rearrange to simplify building e-pTeX:
+
+ * ptex-base.ch: @d pTeX_version_string, use it for pTeX_banner
+ but keep definition of TeX_banner.
+ * am/ptex.am (ptex_version.h): Adapted.
+
+ * ptex-base.ch: Rename cur_dir => cur_dir_hv to avoid conflict
+ with cur_dir from e-TeX.
+ Shorten or split the individual change sets to avoid conflicts.
+
+2011-01-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Build libkanji.c from kanji.c, for pTeX and e-pTeX.
+
+ * kanji.h (epTeX): #define getintone(w) and setintone(w,a),
+ and #include <ptexenc/unicode.h>,
+
+2011-01-08 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Adapt to removal of encTeX changes from tex.ch.
+
+2011-01-07 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptexextra.in: Renamed ...
+ * ptexextra.h: ... into this; #include ptex_version.h
+ for PTEX_VERSION.
+
+ * ptexextra.c (new): #include <ptexd.h> and <lib/texmfmp.c>.
+
+ * am/ptex.am: ptexextra.[ch] are now distributed;
+ create ptex_version.h instead of ptex.version.
+
+2010-12-31 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+
+ * ptex-base.ch: Bug fix and accent Kanji.
+
+2010-12-14 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch: Adapt to latest bibtex.web.
+
+2010-11-04 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch (get_jfm_pos): Avoid accessing non-existent array
+ elements that could cause segmentation faults.
+
+2010-06-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (ptex_cppflags): Add $(AM_CPPFLAGS).
+
+2010-05-25 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * Files, pbibtex.defines, ptex.mk, ptex-base.ch.orig,
+ ptex-include.ch, ptexhelp.h, reautoconf (removed): Unused files.
+ * am/ptex.am (EXTRA_DIST): Adjust.
+
+2010-05-25 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am (EXTRA_DIST): Remove tmf-pool.h.
+
+2010-05-23 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * ptex-base.ch: Bug fix from
+ Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>.
+
+2010-05-21 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Fix the lib/libp.a rebuild rule.
+
+2010-05-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * nissya.test (new): Shell script for pBibTeX test using kanji.
+ * tests/nissya_bib.aux, tests/nissya.bst, tests/sample.bib
+ (new): Test data for nissya.test from Akira.
+ * am/ptex.am: Add the new test.
+
+2010-05-03 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.ch: Treat kanji chars for put[1-4] as for set[1-4].
+
+2010-05-01 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * yokotate.test: Use ptftopl with '-charcode-format octal'.
+ * ptftopl.ch: Correctly check glue indices.
+ Use Web macros to access |char_type| table entries.
+ Reformat CHARSINTYPE lists with shorter lines.
+
+2010-04-30 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.test: Use installed cm fonts.
+ * sample.test, yokotate.test (new): Shell scripts to test
+ pDVItype and pPLtoTF/pTFtoPL with yoko and tate fonts.
+ * tests/goth10.tfm tests/sample.dvi (new): Data for sample.test.
+ * tests/{min10,tmin10}.{pl,tfm} (new): Data for yokotate.test.
+ * am/ptex.am: Add the new tests.
+
+2010-04-26 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch: Remove unused code 'Check if |max_print_line|...'.
+ Akira Kakuto <kakuto@fuk.kindai.ac.jp>, 24 Apr 2010 12:10:13.
+
+2010-04-23 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, kanji.h: Use input_line2() with five arguments
+ for correct handling of buffer_overflow.
+
+ * pbibtex-longline-test.pl, pbibtex-openout-test.pl,
+ pbibtex-mem.test, pbibtex.test: New tests.
+ * am/ptex.am: Add them.
+
+2010-04-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.ch: Remove unnecessary change.
+ * ppltotf.ch: Adapt to bug fix now done in ../pltotf.ch,
+ originally by Ken Nakano <nakano@nextsolution.co.jp>.
+ * kanji.h (inputline2): Moved from ../../ptexenc/ptexenc.h to here.
+
+ * pbibtex.ch: Correct handling of buffer_overflow. From Akira.
+ * ptex.defines (inputline3): Removed.
+
+ * am/ptex.am: No synctex. No reason to create ptexdir/lib/.
+
+2010-04-21 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.test, ppltotf.test, ptftopl.test (new): Shell scripts
+ for basic 'make check' tests.
+ * am/ptex.am: Add these tests.
+
+ * pbibtex.ch: Adapt to change (bug fix) in ../bibtex.ch.
+ Remove kanji fix of workaround from ../bibtex.ch for breaking
+ long lines in module 324; all that is gone with bibtex-0.99d.
+
+2010-04-17 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ppltotf.ch: Rename PTEX_PLTOTF_HELP => PPLTOTF_HELP.
+ * ptftopl.ch: Rename PTEX_TFTOPL_HELP => PTFTOPL_HELP.
+ * ptexhelp.h (removed): Help text now in ../help.h.
+ * kanji.h: Remove #include "ptexhelp.h" and redefinition of
+ TEXMFPOOLNAME and TEXMFENGINENAME.
+
+ * ptexextra.in (PTEXHELP): Moved to ../texmfmp-help.h from here.
+
+ * ptex.defines (inputline3): Moved from pbibtex.defines to here.
+ (PTEXTFTOPLHELP, PTEXPLTOTFHELP, PDVITYPEHELP): Removed.
+ * pbibtex.defines (removed): Using ptex.defines.
+ * ptex-include.ch (removed): Now done in ../texmfmp.h.
+
+ * am/ptex.am: Adjust and replace lib/lib.a by ../lib/libp.a.
+
+2010-04-17 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdvitype.ch: New version, used on top of dvitype.ch.
+ * ptftopl.ch, ptex-base.ch: Remove trailing whitespace.
+
+ Avoid compiler warnings.
+ * ptftopl.ch (organize): Slightly reformulate (uninitialized).
+ * ppltotf.ch: Handle Pascal Web's char as in ../pltotf.ch.
+ (todig): Change param type to byte. Don't return uninitialized.
+
+2010-04-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch, ptex-base.ch, ptftopl.ch: Use conststringcast, not
+ stringcast to cast the get_enc_string() value which is now const.
+ * ptexhelp.h (PDVITYPEHELP): Fixed a typo in help message.
+
+2010-04-14 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pbibtex.ch: New version from Akira, used on top of bibtex.ch.
+ Keep hack0 -- initialization of jump buffer.
+ * am/ptex.am: Reworked.
+ * ptexextra.in, ptexhelp.h: Declare based_prog_name as const.
+ * ppltotf.ch: Fixed a typo.
+
+2010-04-13 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * am/ptex.am: Fix for 'make dist' and 'make distcheck'.
+ * ptrip.test: Simplify.
+ * ptrip.diffs: Expected results from TRIP test for pTeX.
diff --git a/Build/source/texk/web2c/ptexdir/Changes.txt b/Build/source/texk/web2c/ptexdir/Changes.txt
new file mode 100644
index 00000000000..9695f05eb68
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/Changes.txt
@@ -0,0 +1,317 @@
+2009/08/17: (p3.1.11)
+ ptex: 2Хʸ֤Υ롼ʤХ
+ \{y|t}baselineshift ˤȿǤ褦˽
+ (꤬Ȥޤ ƣ¼)
+
+2006/07/18: (p3.1.10)
+ ptex, tftopl, pltotf, jbibtex: -kanji ץ -version ץ
+ ɾȿǤ褦
+ Makefile.in: texmf.cnf ΥѥҤ teTeX-3.0 εˡ˶᤯ʤ褦˽
+ (꤬Ȥޤ ¼)
+ ptex: ѿν˺ΤᡢĶˤäǷ̤ۤʤɾ
+ (꤬Ȥޤ ¼󡢳ƣ)
+ pltotf, tftopl: 16δΰ˼ԤԶ
+ (꤬Ȥޤ TANAKA Takuji)
+
+2005/10/17: (p3.1.9)
+ mkconf: platex θѥ tex/platex ʤ褦˽
+ ptex: ñƬ LIG/ Ԥ褦TFMѤȥ١饤󥷥եȤ
+ 0Ǥʤ˰۾ェλХ
+
+2005/03/07: (p3.1.8)
+ Makefile.in: make install κǸ mktexlsr μ¹Ԥɲ
+ Makefile.in, INSTALL.txt: teTeX-3.0TEXMFǥ쥯ȥѹȼ
+ (꤬Ȥޤƣ)
+
+2004/12/14: (p3.1.8)
+ ptex: ȥ륷̾ν
+ (㡧\Te^^5e^58 \Te^^58 Ȥʤꡢ\TeX Ȥɾʤ)
+ ptex: ȥ륷ľ ^^Ȥǧ
+ ޤ礬Τ (㡧\TeX^^83A \TeX)
+ (ʾ塢꤬Ȥޤ夵)
+ ptex: üեǤβ԰֤Υߥ󥰤ν
+ (꤬Ȥޤƣ)
+
+2004/12/09: (p3.1.7)
+ ptex: ^^ޤॳȥ륷̾ν
+ ptex: ɽԲǽʸϰϤ3.1.4Ʊˤ
+ (Missing character Ǥ ^^ ǽ)
+ mkconf: sjis,jis,eucγƥ󥳡̾TEXINPUTS褦ˤ
+ ޤTEXINPUTS.xetex μ˺褦ˤ
+
+2004/12/02: (p3.1.6)
+ ptex: tetex-2.99.4.20041128-beta б(꤬Ȥޤƣ)
+ INSTALL.txt: ե̾TDS˴ؤ륳Ȥɲ
+ (꤬Ȥޤƣ)
+
+2004/11/29: (p3.1.5)
+ ptex: ȥ륷̾Ρ^^ʸȼʸ
+ Ƥߤʤ礬Τ(꤬Ȥޤ夵)
+ ptex: Missing character ʤɤΥåǤɽԲǽʸ
+ ^^ ǽϤ褦˽
+
+2004/11/08: (p3.1.5)
+ ptex: JIS󥳡ǥ󥰥եɤ߹塢`' ξ֤
+ եνۤͭˤʤäƤޤ礬Τ
+ (꤬Ȥޤ夵)
+
+2004/10/12:
+ pltotf: SJISɤPLե뤫顢TFMեʤ
+ Τ(꤬Ȥޤƣڤ)
+
+2004/09/02: (p3.1.4)
+ ptex: 1ХȤʸˤ硢Ԥμʸ
+ ȶ˴ˤ褦ȤƤޤΤ
+ ptex: 1ХʸΤ1ХȤʸΥƥ꡼
+ ɤ̵ʸȤʤäƤޤΤ
+ ptex: ^^Ϥ줿ʸɤ1ХȤ硢
+ ʸȶ˴ˤ褦ȤƤޤΤ
+ ptex: \string ǰʸδȽ̩
+ jbibtex: ԥCRб
+ (ʾ塢꤬Ȥޤ夵)
+ ptex: \char Ѥ1Хʸȸǧ
+ Х
+ (꤬Ȥޤƣ)
+ ʸ
+
+2003/10/07: (p3.1.3)
+ ptex: -kanji=sjis ΤȤ\kansujichar ǡԤʸꤵ
+ ʤΤ(꤬Ȥƣ)
+
+2003/09/30:
+ ptex: ü/ؤΥåǡǤʤʸϤ뤳Ȥ
+ Τн衣
+
+2003/08/05:
+ pconvert: usage åѹpltotf, tftopl, pdvitype ΤȤ
+ fixwrites ˥ץ($target)ꤹ褦ˤ
+
+2003/06/23: (p3.1.2)
+ configure: mktempȤʤ褦˽
+
+2003/06/17: (p3.1.2)
+ Makefile.in: BSD make texmf.cnf κ˼ԤƤΤ
+
+2003/02/18: (p3.1.2)
+ ptex: \kansuji ץߥƥ֤褵
+ ptex: \kansujichar ץߥƥ֤ˤꡢ\kansuji ǽϤʸ
+ ǽˤ
+
+2003/02/14: (p3.1.1)
+ ptex: ^^ ǥ󥽡ɽΤ
+ ptex: \uppercase, \lowercase core Ф礬Τ
+
+2003/02/13: (p3.1)
+ ptex: main_memoryhash_extra 礭ʥޥ򤹤ȡ
+ !Missing control sequence inserted.פΥ顼ˤʤΤ
+
+2003/02/03: (p3.0.6)
+ ptex: tetex-2.0 ؤб
+ ptex: sjis ưʳΤȤ\char\sjis ưʤΤ
+ ptex: ¸ŪƤäץߥƥ֡\kansuji\tozenˤ
+ ptexextra.h: BANNER ʸι
+ ptexextra.c: tetex-2.0 ؤб
+
+2002/11/22:
+ Makefile.in: euc(jis), sjis ѥեޥåȤ褦
+ platex ѤΥ󥯤褦ˤ
+ mkconf: iniptex εҤ
+
+2002/11/15: (p3.0.5)
+ ptexextra.c: web2c-7.3.11 (teTeX-beta-20021114) ؤб
+
+2002/10/29: (p3.0.4)
+ --version ΣܤΥեޥåȤѹ
+ jbibtex: ǧǤʤץ core ФΤ
+
+2002/10/28: (p3.0.3)
+ ptex: ХʡΥեޥåȤѹ
+ tftopl.ch: pTeXѤHELPȤäƤʤΤ
+ pltotf.ch: pTeXѤHELPȤäƤʤΤ
+
+2002/10/24: (p3.0.2)
+ web2c-7.3.9 б
+
+2002/01/18: (p3.0.1)
+ ʲΥѤȤǤ⥳ѥǤ褦ˤ
+ * tetex-supp.tar.gz
+ * web2c-7.3.3.tar.gz
+ * teTeX-src-beta-20011202.tar.gz
+
+2002/01/15: (p3.0)
+ ptex-base.ch: fix hyphenation.
+
+2001/10/03:
+ README.txt: rewrite
+ INSTALL.txt: rewrite
+ ptex-base.ch: version 3.0
+ ptexextra-plain.c: removed local_maintainer and this_bug_address
+ ptexextra-src-special.c: removed local_maintainer and this_bug_address
+ jbibextra.c: removed local_maintainer and this_bug_address
+ maintain.h: removed local_maintainer and this_bug_address
+ version.c: modified message
+
+2001/07/26:
+ Change Licence to modified BSD license
+ COPYRIGHT: new file
+ COPYRIGHT.jis: new file
+ INSTALL.txt: new file
+ README.txt: cut short and move to INSTALL.txt
+ version.c: change licence filename (l.87,91, COPYING -> COPYRIGHT)
+
+2001/02/13:
+ version.c: typo (l.89, build -> build)
+ ptexhelp.h: typo (l.56, versobe -> verbose)
+ Changes.txt: typo (20001/02/09 -> 2001/02/09)
+
+2001/02/09:
+ REAMDE.txt: rewrite for 2.1.10
+ version.c: rewrite the copyright message. enable usage() function.
+ ptexhelp.h: newfile
+ help.h: removed
+ kanji.h.in: include "ptexhelp.h"
+ ptexextra-plain.c: rename TEXHELP to PTEXHELP.
+ ptexextra-src-special.c rename TEXHELP to PTEXHELP.
+ Makefile.in: depend on ptexhelp.h
+
+2000/11/13: (p2.1.10)
+2000/11/10:
+ ptex.ch: can't load JFM which the number of char_type less than
+ the glue types.
+ pltotf.ch: can't convert property list which has fullwidth space
+ '0x2121(JIS)' in charsintype.
+
+2000/08/17
+ mkconf: modify path separator to semicolon(;)
+
+2000/03/18
+ README.txt: fixed web2c-7.2 -> teTeX-1.0 (l.77)
+
+2000/03/01 (p2.1.9)
+ ptexextra-plain.c, ptexextra-src-special.c: version number 2.1.8 -> 2.1.9
+
+2000/02/29 (p2.1.9)
+ README.txt: rewrite.
+
+2000/02/28 (p2.1.9)
+ correspond to TeX 3.14159 with Web2c 7.3.1 and tex-src-special.
+ Makefile.in: distclean cleans tftopl.ch and pltotf.ch
+ ptexextra-plain.c, ptexextra-src-special.c: newfile
+ COPYING: newfile
+
+1998/04/09 (p2.1.8)
+1998/03/26 (p2.1.8.beta1)
+ correspond to TeX 3.14159 with Web2c 7.2.
+
+1998/03/19 (p2.1.7)
+ fix bug: \leaders
+
+1998/02/26 (p2.1.6)
+ fix bug: \inhibitxspcode
+
+1997/08/27 (p2.1.5)
+ official release.
+
+1997/08/27 (TFtoPL v1.3)
+ fix bug: occers core dump when loading a JFM.
+
+1997/08/14 (p2.1.5, beta12)
+ fix bug: kinsoku process doesn't work for ligatured character.
+
+1997/08/07 (p2.1.5, beta11)
+ changed specification: How to insert \xkanjiskip at surrounding a \hbox
+ (back to the p2.1.4 specification).
+
+1997/08/01 (p2.1.5, beta10)
+ fix bug: caused line breaking after a kinsoku penalty by
+ the \jcharwidowpenalty.
+
+1997/07/29 (p2.1.5, beta9)
+ fix bug: A penalty of kinsoku doesn't work well.
+ fix bug: italic correction is not inserted.
+
+1997/07/11 (p2.1.5, beta8)
+ fix bug: A penalty of kinsoku doesn't work well.
+ fix bug: Inserted \kanjiskip before widow KANJI character when the line
+ holds only it (embeded 2.1.5.beta6).
+ fix bug: Inserted \kanjiskip between kern of head of the line and
+ the next widow KANJI character (since from jTeX 1.7 p1.0.9G).
+ changed specification: How to insert \xkanjiskip at surrounding text-math.
+
+1997/06/29 (p2.1.5, beta7)
+ fix bug: pTeX occers coredump, when \{y,t}baselineskip is not equal zero,
+ and where explicit kern after ligature like `diff\/'.
+ changed specification: How to insert \xkanjiskip at surrounding text-math.
+
+1997/06/16 (p2.1.5, beta6)
+ fix bug: The \{y,t}baselineskip isn't work except the first place in
+ a paragraph.
+ fix bug: Doesn't hyphenation when the value of \{y,t}baselineskip is
+ not equals zero.
+ fix buf: Printed `(EUC)' in banner instead of making as JIS-version.
+ fix bug: `make install' increase the TEXINPUTS.{ptex,platex,platex209} at
+ texmf.cnf.
+
+1997/05/13 (p2.1.5, beta5)
+ fix bug: Fail to read euex10.tfm.
+
+1997/05/01 (p2.1.5, beta4)
+ fix bug: \char{\jis,\euc,\sjis,\kuten} after a 1byte character that have
+ a possibility of ligature like the "`" causes coredump or worng result.
+
+1997/03/17 (p2.1.5, beta3)
+ change banner strings.
+
+1997/03/14 (p2.1.5, beta3)
+ fix bug: can't run as iniptex/virptex.
+
+1997/03/12 (p2.1.5, beta2)
+ fix bug: \calcpos return wrong number.
+
+1997/02/27 (p2.1.5, beta1)
+ correspond to TeX 3.14159 with Web2c 7.0.
+
+1995/11/21 (p2.1.4)
+ new feature: accept kanji filename.
+
+1995/11/17 (p2.1.3)
+ fix bug : try_break routine doesn't corect action when the list
+ has disp_node or dir_node (Error `disc4').
+
+1995/11/07 (p2.1.2)
+ fix bug : \kanjiskip doesn't inserted after JFM glue/kern.
+
+1995/10/11
+ include jbibtex (Shouichi Matsui<matsui@denken.or.jp>) and
+ pdvitype (Thanks, Kazunori Asayama)
+
+1995/09/20 (p2.1.1)
+ fix bug : \xkanjiskip doesn't inserted after italic correction.
+ fix bug : italic correction doesn't inserted when \{y,t}baselineshift
+ is used.
+
+1995/09/08 (p2.1)
+ fix bug : \xkanjiskip doesn't inserted after math mode which correct
+ italic kern spacing.
+
+1995/08/29
+ rename `find_first' to `find_first_char' for djgpp 1.12.
+ (Thanks, Kazunori Asayama)
+
+1995/03/25
+ fix bug : Three minuses sequence (---) doesn't become em-hyphen.
+
+1995/03/11
+ imprement \kanji primitive.
+
+1995/01/17
+ translate/modify pTeX 2.0 change file for TeX 3.1415.
+
+1994/12/17
+ translate/modify pTeX 2.0 change file for TeX 3.141.
+
+1994/10/17
+ translate/modify pTeX 1.0.9F change file which based on TeX 2.99 to
+ pTeX 2.0 which based on TeX 3.14.
+
+== EOF ===
diff --git a/Build/source/texk/web2c/ptexdir/INSTALL.txt b/Build/source/texk/web2c/ptexdir/INSTALL.txt
new file mode 100644
index 00000000000..ac53b2f2944
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/INSTALL.txt
@@ -0,0 +1,83 @@
+===========================================================================
+$BF|K\8l(B TeX $B%P!<%8%g%s(B 3.141592, p3.1.11
+(tetex-src-3.0 $B0J9_MQ(B)
+===========================================================================
+$B"((B $BI,MW$J$i$P!"%$%s%9%H!<%k:n6H$r$9$kA0$K!"(B
+ $B5l%P!<%8%g%s$N(B TeX $B%7%9%F%`$N%P%C%/%"%C%W$r$7$F$/$@$5$$!#(B
+
+$B"((B space code $B$r4^$s$@%U%!%$%kL>$,%5%]!<%H$5$l$F$$$^$9!#(B
+ $B$?$@$7!"O"B3$9$kFs$D0J>e$N(B space codes $B$O;HMQ$7$J$$$G$/$@$5$$(B:
+ platex "a b c d e.tex" $B$O(B ok $B$G$9$,(B
+ platex "a b.tex" $B$O(B ng $B$G$9!#(B
+
+---------------------------------------------------------------------------
+$B!|(B $B%=!<%9%U%!%$%k(B
+---------------------------------------------------------------------------
+pTeX $B$r%$%s%9%H!<%k$9$k$K$O!"$D$.$N%U%!%$%k$,I,MW$G$9!#(B
+
+ $B!&(Bptex-src-3.1.11.tar.gz (pTeX $B%=!<%9%U%!%$%k(B)
+ $B!&(Bptex-texmf-2.5.tar.gz (pTeX $B%i%$%V%i%j%U%!%$%k(B)
+ $B!&(BteTeX-src-3.0.tar.gz (teTeX $B%=!<%9%U%!%$%k(B)
+ $B!&(BteTeX-texmf-3.0.tar.gz (teTeX $B%i%$%V%i%j%U%!%$%k(B)
+
+$B$3$l$i$O!"0J2<$N%5%$%H$J$I$+$iF~<j2DG=$G$9!#(B
+
+$B!&(BpTeX $B4XO"(B
+ ftp://ftp.ascii.co.jp/pub/TeX/ascii-ptex/
+ ftp://ftp.ring.gr.jp/pub/text/TeX/ascii-ptex/
+ ftp://ftp.media.kyoto-u.ac.jp/TeX/ASCII-pTeX/
+ ftp://bash.cc.keio.ac.jp/pub/TeX/ascii-ptex/
+ ftp://ftp.cs.titech.ac.jp/pub/text/TeX/ASCII-pTeX/
+ ftp://ftp.tut.ac.jp/TeX/ASCII-pTeX/
+ ftp://ftp.u-aizu.ac.jp/pub/tex/ASCII-pTeX/
+ ftp://ftp.foretune.co.jp/pub/TeX/ascii-ptex/
+
+$B!&(BteTeX $B4XO"(B
+ ftp://ftp.ring.gr.jp/pub/text/CTAN/systems/unix/teTeX/current/distrib/ (JPN)
+ ftp://cam.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (UK)
+ ftp://dante.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (GER)
+ ftp://tug.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (US)
+
+---------------------------------------------------------------------------
+$B!|(B $B%$%s%9%H!<%k(B
+---------------------------------------------------------------------------
+1. teTeX $B$N%i%$%V%i%j%U%!%$%k$rE83+$7$^$9!#(B
+
+ mkdir -p /usr/local/teTeX3/share/texmf-dist
+ tar zxf tetex-texmf-3.0.tar.gz \
+ -C /usr/local/teTeX3/share/texmf-dist
+
+2. ptex $B$N%i%$%V%i%j%U%!%$%k$rE83+$7$^$9!#(B
+
+ mkdir -p /usr/local/teTeX3/share/texmf
+ tar zxf ptex-texmf-2.5.tar.gz -C /usr/local/teTeX3/share/texmf
+
+3. teTeX $B$N%=!<%9%U%!%$%k$rE83+$7$^$9!#(B
+
+ tar zxf tetex-src-3.0.tar.gz -C /usr/local/src
+
+4. ptex $B$N%=!<%9%U%!%$%k$rE83+$7$^$9!#(B
+
+ tar zxvf ptex-src-3.1.11.tar.gz \
+ -C /usr/local/src/tetex-src-3.0/texk/web2c
+
+5. teTeX $B%=!<%9%U%!%$%k$rE83+$7$?%G%#%l%/%H%j$K0\F0$7!"(Bconfigure $B%3%^%s%I(B
+ $B$r<B9T$7$^$9!#(Bprefix $B%*%W%7%g%s$K$O!"(BteTeX $B%i%$%V%i%j$r%$%s%9%H!<%k(B
+ $B$7$?%G%#%l%/%H%j$r;XDj$7$^$9!#(B
+
+ cd /usr/local/src/tetex-src-3.0
+ ./configure --prefix=/usr/local/teTeX3
+ make
+ make install
+
+6. ptex $B$N%=!<%9%G%#%l%/%H%j$K0\F0$7!"(Bconfigure $B%3%^%s%I$r<B9T$7$^$9!#(B
+ $B$3$N$H$-!"%G%U%)%k%H$N4A;z%3!<%I$r;XDj$7$F$/$@$5$$!#(B
+
+ cd /usr/local/src/tetex-src-3.0/texk/web2c/ptex-src-3.1.11
+ ./configure euc (EUC$B%3!<%I$N>l9g(B)
+ ./configure jis (JIS$B%3!<%I$N>l9g(B)
+ ./configure sjis ($B%7%U%H(BJIS$B%3!<%I$N>l9g(B)
+ make
+ make install
+
+=============================================================== EOT =====
diff --git a/Build/source/texk/web2c/ptexdir/README.txt b/Build/source/texk/web2c/ptexdir/README.txt
new file mode 100644
index 00000000000..121468c213c
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/README.txt
@@ -0,0 +1,32 @@
+---------------------------------------------------------------------------
+ ܸ TeXpTeX: publishing TeXˤˤĤ
+---------------------------------------------------------------------------
+
+ * ܸ TeXpTeXˤϡܳŪʾȽǤѤ TeX ȯ
+ ȤɸˤƤޤ
+
+ * pTeX ϡȤѤΡܸ TeXפ˽Ȥߵǽɲä
+ Ǥܸ첽ΥХեåϤ٤ pTeX ФƤΤ߹Ԥʤ
+ ȤΤߤܸ TeX ФƤϹԤʤޤΤǡλ
+
+ * pTeX ϡWEB Υ󥸥եȤäƼ¸Ƥޤ
+
+ * 󥹥ȡμˤĤƤϡ° INSTALL.txt ե򻲾
+ Ƥ
+
+ * pTeX λѤդ˴ؤƤϡ° COPYRIGHT ե
+ ȤƤ
+
+---------------------------------------------------------------------------
+ 䤤碌ʤ
+---------------------------------------------------------------------------
+pTeX ˤĤƤΤ䤤碌ϡŻҥ᡼ ptex-staff@ml.asciimw.jp
+ˤꤤޤ
+
+pTeX WEB ڡhttp://ascii.asciimw.jp/pb/ptex/ˤǤϡХ
+󥹥ȡΥҥȡpTeX ɲä줿ץߥƥְʤɤǺܤ
+ޤ⤴
+
+-------------------------------------
+ҥǥ
+=============================================================== EOT =====
diff --git a/Build/source/texk/web2c/ptexdir/am/ptex.am b/Build/source/texk/web2c/ptexdir/am/ptex.am
new file mode 100644
index 00000000000..800af466b91
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/am/ptex.am
@@ -0,0 +1,240 @@
+## texk/web2c/ptexdir/am/ptex.am: Makefile fragment for pTeX.
+##
+## Copyright 2015-2021 Karl Berry <tex-live@tug.org>
+## Copyright 2010-2015 Peter Breitenlohner <tex-live@tug.org>
+## You may freely use, modify and/or distribute this file.
+
+ptex_cppflags = $(PTEXENC_INCLUDES) $(AM_CPPFLAGS) $(ZLIB_INCLUDES)
+ptex_ldadd = libkanji.a $(pproglib) $(PTEXENC_LIBS) $(LDADD) $(ZLIB_LIBS)
+ptex_dependencies = libkanji.a $(pproglib) $(PTEXENC_DEPEND) $(ZLIB_DEPEND) $(default_dependencies)
+p_tangle = $(tangle_silent)WEBINPUTS=.:$(srcdir)/ptexdir:$(srcdir) $(buildenv) $(TANGLE)
+
+pweb_programs = pbibtex pdvitype ppltotf ptftopl
+
+## pTeX library
+##
+pproglib = lib/libp.a
+# Rebuild $(pproglib)
+$(pproglib): $(KPATHSEA_DEPEND) ${srcdir}/lib/*.c
+ cd lib && $(MAKE) $(AM_MAKEFLAGS) libp.a
+
+## libkanji.a for pTeX and e-pTeX
+##
+EXTRA_LIBRARIES += libkanji.a
+libkanji_a_SOURCES = ptexdir/kanji.c ptexdir/kanji.h ptexdir/kanji_dump.c
+libkanji_a_CPPFLAGS = $(ptex_cppflags)
+
+## pTeX
+##
+if PTEX
+bin_PROGRAMS += ptex
+endif PTEX
+if PWEB
+bin_PROGRAMS += $(pweb_programs)
+endif PWEB
+EXTRA_PROGRAMS += ptex $(pweb_programs)
+
+ptex_CPPFLAGS = $(ptex_cppflags)
+
+# With --enable-ipc, pTeX may need to link with -lsocket.
+ptex_LDADD = $(ptex_ldadd) $(ipc_socketlibs)
+ptex_DEPENDENCIES = $(ptex_dependencies)
+
+# pTeX C sources
+ptex_c_h = ptexini.c ptex0.c ptexcoerce.h ptexd.h
+nodist_ptex_SOURCES = $(ptex_c_h) ptex-pool.c
+dist_ptex_SOURCES = ptexdir/ptexextra.c ptexdir/ptexextra.h ptexdir/ptex_version.h
+
+# We must create ptexd.h and ptexdir/ptex_version.h before building the ptex_OBJECTS.
+ptex_prereq = ptexd.h ptexdir/ptex_version.h
+$(ptex_OBJECTS): $(ptex_prereq)
+
+$(ptex_c_h): ptex-web2c
+ @$(web2c) ptex
+ptex-web2c: ptex.p $(web2c_texmf) ptexdir/ptex.defines
+ @$(web2c) ptex
+
+ptex-pool.c: ptex.pool ptexd.h $(makecpool_stamp)
+ $(makecpool) ptex >$@ || rm -f $@
+
+# Tangling pTeX
+ptex.p ptex.pool: ptex-tangle
+ @$(texmf_tangle) ptex ptex
+ptex-tangle: tangle$(EXEEXT) ptex.web ptex.ch tangle-sh
+ @$(texmf_tangle) ptex ptex
+
+# Extract ptex version
+$(srcdir)/ptexdir/ptex_version.h: @MAINTAINER_MODE_TRUE@ ptexdir/ptex-base.ch
+ $(AM_V_GEN)grep '^@d pTeX_version_string==' $(srcdir)/ptexdir/ptex-base.ch \
+ | sed "s/^.*'-/#define PTEX_VERSION \"/;s/'.*$$/\"/" >$@
+
+# Generate ptex.web
+ptex.web: tie$(EXEEXT) $(ptex_web_srcs)
+ $(tie_m) $(ptex_web_srcs)
+ptex_web_srcs = \
+ tex.web \
+ tex.ch \
+ tracingstacklevels.ch \
+ zlib-fmt.ch
+
+# Generate ptex.ch
+ptex.ch: tie$(EXEEXT) ptex.web $(ptex_ch_srcs)
+ $(tie_c) ptex.web $(ptex_ch_srcs)
+ptex_ch_srcs = \
+ ptexdir/ptex-base.ch \
+ $(ptex_ch_synctex) \
+ tex-binpool.ch
+
+EXTRA_DIST += $(ptex_web_srcs) $(ptex_ch_srcs) ptexdir/ptex.defines
+
+DISTCLEANFILES += $(nodist_ptex_SOURCES) ptex.web ptex.ch ptex-web2c \
+ ptex.p ptex.pool ptex-tangle
+
+## pBibTeX
+##
+nodist_pbibtex_SOURCES = pbibtex.c pbibtex.h
+pbibtex_SOURCES = ptexdir/kanji.h
+pbibtex_CPPFLAGS = $(ptex_cppflags)
+pbibtex_LDADD = $(ptex_ldadd)
+pbibtex_DEPENDENCIES = $(ptex_dependencies)
+pbibtex.c pbibtex.h: pbibtex-web2c
+ @$(web2c) pbibtex
+pbibtex-web2c: pbibtex.p $(web2c_depend) ptexdir/ptex.defines web2c/cvtbib.sed
+ @$(web2c) pbibtex
+pbibtex.p: tangle$(EXEEXT) pbibtex.web ptexdir/pbibtex.ch
+ $(p_tangle) pbibtex pbibtex
+pbibtex.web: tie$(EXEEXT) bibtex.web bibtex.ch
+ $(tie_m) bibtex.web bibtex.ch
+EXTRA_DIST += ptexdir/pbibtex.ch web2c/cvtbib.sed
+
+## pDVItype
+##
+nodist_pdvitype_SOURCES = pdvitype.c pdvitype.h
+pdvitype_SOURCES = ptexdir/kanji.h
+pdvitype_CPPFLAGS = $(ptex_cppflags) -DHEX_CHAR_CODE
+pdvitype_LDADD = $(ptex_ldadd)
+pdvitype_DEPENDENCIES = $(ptex_dependencies)
+pdvitype.c pdvitype.h: pdvitype-web2c
+ @$(web2c) pdvitype
+pdvitype-web2c: pdvitype.p $(web2c_depend) ptexdir/ptex.defines
+ @$(web2c) pdvitype
+pdvitype.p: tangle$(EXEEXT) pdvitype.web ptexdir/pdvitype.ch
+ $(p_tangle) pdvitype pdvitype
+pdvitype.web: tie$(EXEEXT) dvitype.web dvitype.ch
+ $(tie_m) dvitype.web dvitype.ch
+EXTRA_DIST += ptexdir/pdvitype.ch
+
+## pPLtoTF
+##
+nodist_ppltotf_SOURCES = ppltotf.c ppltotf.h
+ppltotf_SOURCES = ptexdir/kanji.h
+ppltotf_CPPFLAGS = $(ptex_cppflags) -DPRESERVE_PUTC
+ppltotf_LDADD = $(ptex_ldadd)
+ppltotf_DEPENDENCIES = $(ptex_dependencies)
+ppltotf.c ppltotf.h: ppltotf-web2c
+ @$(web2c) ppltotf
+ppltotf-web2c: ppltotf.p $(web2c_depend) ptexdir/ptex.defines
+ @$(web2c) ppltotf
+ppltotf.p: tangle$(EXEEXT) ppltotf.web ptexdir/ppltotf.ch
+ $(p_tangle) ppltotf ppltotf
+ppltotf.web: tie$(EXEEXT) pltotf.web pltotf.ch
+ $(tie_m) pltotf.web pltotf.ch
+EXTRA_DIST += ptexdir/ppltotf.ch
+
+## pTFtoPL
+##
+nodist_ptftopl_SOURCES = ptftopl.c ptftopl.h
+ptftopl_SOURCES = ptexdir/kanji.h
+ptftopl_CPPFLAGS = $(ptex_cppflags)
+ptftopl_LDADD = $(ptex_ldadd)
+ptftopl_DEPENDENCIES = $(ptex_dependencies)
+ptftopl.c ptftopl.h: ptftopl-web2c
+ @$(web2c) ptftopl
+ptftopl-web2c: ptftopl.p $(web2c_depend) ptexdir/ptex.defines
+ @$(web2c) ptftopl
+ptftopl.p: tangle$(EXEEXT) ptftopl.web ptexdir/ptftopl.ch
+ $(p_tangle) ptftopl ptftopl
+ptftopl.web: tie$(EXEEXT) tftopl.web tftopl.ch
+ $(tie_m) tftopl.web tftopl.ch
+EXTRA_DIST += ptexdir/ptftopl.ch
+
+##
+EXTRA_DIST += \
+ ptexdir/COPYRIGHT \
+ ptexdir/COPYRIGHT.jis \
+ ptexdir/ChangeLog \
+ ptexdir/Changes.txt \
+ ptexdir/INSTALL.txt \
+ ptexdir/README.txt
+
+# pTeX Tests
+#
+ptex_tests = ptexdir/ptriptest.test ptexdir/pver.test
+ptexdir/ptriptest.log: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
+ptexdir/pver.log: ptex$(EXEEXT)
+pweb_tests = \
+ ptexdir/pbibtex.test \
+ ptexdir/pdvitype.test \
+ ptexdir/ppltotf.test \
+ ptexdir/ptftopl.test
+pweb_tests += ptexdir/pbibtex-openout-test.pl ptexdir/pbibtex-longline-test.pl
+pweb_tests += ptexdir/pbibtex-mem.test ptexdir/nissya.test
+pweb_tests += ptexdir/sample.test
+pweb_tests += ptexdir/yokotate.test
+pweb_tests += ptexdir/skipjfmp.test
+ptexdir/pbibtex.log ptexdir/pbibtex-openout-test.log ptexdir/pbibtex-longline-test.log \
+ ptexdir/pbibtex-mem.log ptexdir/nissya.log: pbibtex$(EXEEXT)
+ptexdir/pdvitype.log ptexdir/sample.log: pdvitype$(EXEEXT)
+ptexdir/ppltotf.log: ppltotf$(EXEEXT)
+ptexdir/ptftopl.log: ptftopl$(EXEEXT)
+ptexdir/yokotate.log: ppltotf$(EXEEXT) ptftopl$(EXEEXT)
+ptexdir/skipjfmp.log: ppltotf$(EXEEXT) ptftopl$(EXEEXT)
+
+EXTRA_DIST += $(ptex_tests) $(pweb_tests)
+DISTCLEANFILES += $(pweb_programs:=.c) $(pweb_programs:=.h) \
+ $(pweb_programs:=.p) $(pweb_programs:=-web2c) $(pweb_programs:=.web)
+
+if PTEX
+TESTS += $(ptex_tests)
+TRIPTRAP += ptrip.diffs
+TRIPTRAP_CLEAN += ptrip-clean
+endif PTEX
+if PWEB
+TESTS += $(pweb_tests)
+endif PWEB
+
+## Test data and results
+##
+## ptexdir/nissya.test
+EXTRA_DIST += ptexdir/tests/nissya_bib.aux ptexdir/tests/nissya.bst ptexdir/tests/sample.bib
+DISTCLEANFILES += ptests/nissya_bib.*
+## ptexdir/pbibtex.test
+DISTCLEANFILES += ptests/xexampl.aux ptests/xexampl.bbl ptests/xexampl.blg
+## ptexdir/pbibtex-mem.test
+EXTRA_DIST += tests/memdata1.bst tests/memdata2.bst tests/memdata3.bst
+DISTCLEANFILES += ptests/memtest.bib ptests/memtest?.*
+## ptexdir/pdvitype.test
+DISTCLEANFILES += ptests/xstory.dvityp ptests/xpagenum.typ
+## ptexdir/ppltotf.test
+DISTCLEANFILES += ptests/xcmr10.tfm
+## ptexdir/ptftopl.test
+DISTCLEANFILES += ptests/xcmr10.pl
+## ptexdir/sample.test
+EXTRA_DIST += ptexdir/tests/goth10.tfm ptexdir/tests/sample.dvi ptexdir/tests/samplea.typ
+DISTCLEANFILES += ptests/xsample.typ
+## ptexdir/yokotate.test
+EXTRA_DIST += ptexdir/tests/min10.pl ptexdir/tests/min10.tfm
+EXTRA_DIST += ptexdir/tests/tmin10.pl ptexdir/tests/tmin10.tfm
+DISTCLEANFILES += ptests/x*min10.*
+## ptexdir/skipjfmp.test
+EXTRA_DIST += ptexdir/tests/skipjfmp.pl ptexdir/tests/skipjfmp.tfm
+DISTCLEANFILES += ptests/xskipjfmp.*
+## ptexdir/ptriptest
+EXTRA_DIST += ptexdir/ptrip/ptrip.diffs ptexdir/ptrip/texmf.cnf
+ptrip.diffs: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
+ $(triptrap_diffs) $@
+.PHONY: ptrip-clean
+ptrip-clean:
+ rm -rf ptripdir
+
+DISTCLEANFILES += ptrip.diffs
diff --git a/Build/source/texk/web2c/ptexdir/kanji.c b/Build/source/texk/web2c/ptexdir/kanji.c
new file mode 100644
index 00000000000..a3f56607612
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/kanji.c
@@ -0,0 +1,107 @@
+/*
+ * KANJI Code conversion routines.
+ * (for pTeX and e-pTeX)
+ */
+
+#include "kanji.h"
+#define CS_TOKEN_FLAG 0xFFFF
+
+/* TOKEN */
+boolean check_kanji(integer c)
+{
+ if (c >= CS_TOKEN_FLAG) return false;
+ else return is_char_kanji(c);
+}
+
+boolean is_char_ascii(integer c)
+{
+ return (0 <= c && c < 0x100);
+}
+
+boolean is_char_kanji(integer c)
+{
+ return (iskanji1(Hi(c)) && iskanji2(Lo(c)));
+}
+
+boolean ismultiprn(integer c)
+{
+ if (iskanji1(c) || iskanji2(c)) return true;
+ return false;
+}
+
+#ifdef OLDSTYLE
+integer calc_pos(integer c)
+{
+ int c1, c2;
+
+ if(c<256) return(c<<1);
+ c1 = c>>8;
+ c2 = c & 0xff;
+ if(c1) {
+ if (is_internalSJIS())
+ return((c2+(c2<<(c1-0x81)) & 0xff)<<1);
+ else
+ return((c2+(c2<<(c1-0xa1)) & 0xff)<<1);
+ } else
+ return(((c2+c2+1) & 0xff)<<1);
+}
+#else /* OLDSTYLE */
+integer calc_pos(integer c)
+{
+ unsigned char c1, c2;
+
+ if(c>=0 && c<=255) return(c);
+ c1 = (c >> 8) & 0xff;
+ c2 = c & 0xff;
+ if(iskanji1(c1)) {
+ if (is_internalSJIS()) {
+ c1 = ((c1 - 0x81) % 4) * 64; /* c1 = 0, 64, 128, 192 */
+ c2 = c2 % 64; /* c2 = 0..63 */
+ } else {
+ c1 = ((c1 - 0xa1) % 4) * 64; /* c1 = 0, 64, 128, 192 */
+ c2 = c2 % 64; /* c2 = 0..63 */
+ }
+ return(c1 + c2); /* ret = 0..255 */
+ } else
+ return(c2);
+}
+#endif /* OLDSTYLE */
+
+integer kcatcodekey(integer c)
+{
+ return Hi(toDVI(c));
+}
+
+void init_kanji (const_string file_str, const_string internal_str)
+{
+ if (!set_enc_string (file_str, internal_str)) {
+ fprintf (stderr, "Bad kanji encoding \"%s\" or \"%s\".\n",
+ file_str ? file_str : "NULL",
+ internal_str ? internal_str : "NULL");
+ uexit(1);
+ }
+}
+
+void init_default_kanji (const_string file_str, const_string internal_str)
+{
+ char *p;
+
+ enable_UPTEX (false); /* disable */
+
+ init_kanji (file_str, internal_str);
+
+ p = getenv ("PTEX_KANJI_ENC");
+ if (p) {
+ if (!set_enc_string (p, NULL))
+ fprintf (stderr, "Ignoring bad kanji encoding \"%s\".\n", p);
+ }
+
+#ifdef WIN32
+ p = kpse_var_value ("guess_input_kanji_encoding");
+ if (p) {
+ if (*p == '1' || *p == 'y' || *p == 't')
+ infile_enc_auto = 1;
+ free(p);
+ }
+#endif
+}
diff --git a/Build/source/texk/web2c/ptexdir/kanji.h b/Build/source/texk/web2c/ptexdir/kanji.h
new file mode 100644
index 00000000000..5be133ecad4
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/kanji.h
@@ -0,0 +1,78 @@
+/*
+ kanji.h: Handling 2byte char, and so on.
+*/
+#ifndef KANJI_H
+#define KANJI_H
+#include "cpascal.h"
+#include <ptexenc/ptexenc.h>
+#ifdef epTeX
+#include <ptexenc/unicode.h>
+#define getintone(w) ((w).cint1)
+#define setintone(w,a) ((w).cint1=(a))
+#endif
+#include <zlib.h>
+
+#ifndef KANJI
+#define KANJI
+#endif
+
+/* allow file names with 0x5c in (e)pTeX on windows */
+#if defined(WIN32)
+#include <kpathsea/knj.h>
+#define not_kanji_char_seq(a,b) (!(is_cp932_system && isknj(a) && isknj2(b)))
+#else
+#define not_kanji_char_seq(a,b) (1)
+#endif
+#define notkanjicharseq not_kanji_char_seq
+
+/* functions */
+#define Hi(x) (((x) >> 8) & 0xff)
+#define Lo(x) ((x) & 0xff)
+
+extern boolean check_kanji (integer c);
+#define checkkanji check_kanji
+extern boolean is_char_ascii (integer c);
+#define ischarascii is_char_ascii
+extern boolean is_char_kanji (integer c);
+#define ischarkanji is_char_kanji
+extern boolean ismultiprn (integer c);
+extern integer calc_pos (integer c);
+#define calcpos calc_pos
+extern integer kcatcodekey (integer c);
+
+extern void init_kanji (const_string file_str, const_string internal_str);
+extern void init_default_kanji (const_string file_str, const_string internal_str);
+#ifdef PBIBTEX
+/* pBibTeX is EUC only */
+#define initkanji() init_default_kanji(NULL, "euc")
+#elif defined(WIN32)
+/* for pTeX, e-pTeX, pDVItype, pPLtoTF, and pTFtoPL */
+#define initkanji() init_default_kanji(NULL, "sjis")
+#else
+#define initkanji() init_default_kanji(NULL, "euc")
+#endif
+/* for pDVItype */
+#define setpriorfileenc() set_prior_file_enc()
+
+#ifndef PRESERVE_PUTC
+#undef putc
+#define putc(c,fp) putc2(c,fp)
+#endif /* !PRESERVE_PUTC */
+
+#ifndef PRESERVE_FPUTS
+#undef fputs
+#define fputs(c,fp) fputs2(c,fp)
+#endif /* !PRESERVE_FPUTS */
+
+#ifdef PBIBTEX
+#define inputline2(fp,buff,pos,size,ptr) input_line2(fp,buff,pos,size,ptr)
+#else
+#define inputline2(fp,buff,pos,size) input_line2(fp,buff,pos,size,NULL)
+#endif
+
+extern void dump_kanji (gzFile fp);
+extern void undump_kanji (gzFile fp);
+#define dumpkanji dump_kanji
+#define undumpkanji undump_kanji
+
+#endif /* not KANJI_H */
diff --git a/Build/source/texk/web2c/ptexdir/kanji_dump.c b/Build/source/texk/web2c/ptexdir/kanji_dump.c
new file mode 100644
index 00000000000..7ba7834abe4
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/kanji_dump.c
@@ -0,0 +1,51 @@
+/*
+ * Dump/undump Kanji encoding for (e)ptex.
+ */
+
+#include "kanji.h"
+#ifndef pTeX
+#define pTeX
+#endif
+#include <texmfmp.h>
+
+void dump_kanji (gzFile fp)
+{
+ char buffer[12];
+ const char *p = get_enc_string ();
+ size_t len = strlen (p);
+
+ if (len > 11) {
+ fprintf (stderr, "Kanji encoding string \"%s\" exceeds 11 bytes.\n", p);
+ uexit(1);
+ }
+
+ strcpy (buffer, p);
+ for (len++; len < 12; len++)
+ buffer[len] = 0;
+ do_dump (buffer, 1, 12, fp);
+}
+
+void undump_kanji (gzFile fp)
+{
+ char buffer[12];
+ char *p;
+ int i;
+
+ do_undump (buffer, 1, 12, fp);
+ buffer[11] = 0; /* force string termination, just in case */
+
+ p = strchr (buffer, '.');
+ if (p)
+ *p++ = 0;
+ else
+ p = buffer;
+
+ i = get_internal_enc();
+
+ /* Now BUFFER and P are the file and internal encoding strings. */
+ init_kanji (NULL, p);
+ if (get_internal_enc() != i) {
+ fprintf (stderr, "Kanji internal encoding incompatible with the preloaded format.\n");
+ fprintf (stderr, "I'll stick to %s.\n", enc_to_string(get_internal_enc()));
+ }
+}
diff --git a/Build/source/texk/web2c/ptexdir/nissya.test b/Build/source/texk/web2c/ptexdir/nissya.test
new file mode 100755
index 00000000000..2fdbb63933f
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/nissya.test
@@ -0,0 +1,17 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+# Using data sent by Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+test -d ptests || mkdir -p ptests
+
+cp $srcdir/ptexdir/tests/nissya_bib.aux ptests/nissya_bib.aux
+
+TEXMFCNF=$srcdir/../kpathsea \
+ BSTINPUTS=$srcdir/ptexdir/tests \
+ BIBINPUTS=$srcdir/ptexdir/tests \
+ ./pbibtex ptests/nissya_bib || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/pbibtex-longline-test.pl b/Build/source/texk/web2c/ptexdir/pbibtex-longline-test.pl
new file mode 100755
index 00000000000..499833d9be9
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pbibtex-longline-test.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/env perl
+# $Id: pbibtex-openout-test.pl 17085 2010-02-18 18:03:18Z karl $
+# Public domain. Originally written 2010, Karl Berry.
+# Check that pbibtex does not break long strings (change in 2010).
+
+# srcdir = web2c (in the source tree)
+BEGIN { chomp ($srcdir = $ENV{"srcdir"} || `cd \`dirname $0\`/.. && pwd`); }
+require "$srcdir/../tests/common-test.pl";
+
+exit (&main ());
+
+sub main
+{
+ # The blg and bbl file names are based on the aux name and cannot be
+ # overridden. We can't write to the aux (source) directory, though,
+ # because that's an absolute path and openout_any=p. Therefore, copy
+ # the input aux file to our working directory and rename it to avoid
+ # spurious parallel test failures.
+ &test_file_copy ("$srcdir/tests/longline.aux", "./plongline.aux");
+
+ # Run pBibTeX, quit if it fails.
+ my $ret = &test_run ("./pbibtex", "./plongline.aux");
+ return 1 if $ret != 0;
+
+ # There should be lines longer than 80 chars in the output.
+ # (In older versions of pBibTeX, they are forcibly split, with a %.)
+ local *IN;
+ $IN = "plongline.bbl";
+ open (IN) || die "open($IN) failed: $!";
+ while (<IN>) {
+ last if length ($_) >= 80;
+ }
+
+ # We failed if all lines were < 80.
+ my $bad = ! (length $_ >= 80);
+ return $bad;
+}
diff --git a/Build/source/texk/web2c/ptexdir/pbibtex-mem.test b/Build/source/texk/web2c/ptexdir/pbibtex-mem.test
new file mode 100755
index 00000000000..44a0866cd42
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pbibtex-mem.test
@@ -0,0 +1,70 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+# Using test data from Philipp Lehman <lehman@gmx.net>
+
+test -d ptests || mkdir -p ptests
+
+# Create bib data
+mk_bib () {
+ for i
+ do
+ for j in 0 1 2 3 4 5 6 7 8 9; do
+ for k in 0 1 2 3 4 5 6 7 8 9; do
+ for l in 0 1 2 3 4 5 6 7 8 9; do
+ cat <<EOF
+@Type{key$i$j$k$l,
+ field001 = {Value 001},
+ field002 = {Value 002},
+ field003 = {Value 003},
+ field004 = {Value 004},
+ field005 = {Value 005},
+ field006 = {Value 006},
+ field007 = {Value 007},
+ field008 = {Value 008},
+ field009 = {Value 009},
+ field010 = {Value 010}
+}
+
+EOF
+ done
+ done
+ done
+ done
+}
+
+# Create aux data
+mk_aux () {
+ cat <<EOF
+\relax
+\citation{*}
+\bibstyle{$1}
+\bibdata{memtest}
+EOF
+}
+
+for t in 1 2 3; do
+
+ mk_aux memdata$t >ptests/memtest$t.aux
+
+ env=
+
+ case $t in
+ 1) mk_bib 0 >ptests/memtest.bib;;
+ 2) mk_bib 1 >>ptests/memtest.bib;;
+ 3) env='ent_str_size=2000 glob_str_size=2000';;
+ esac
+
+ echo "Running memtest$t ..."
+
+ eval $env \
+ TEXMFCNF=$srcdir/../kpathsea \
+ BSTINPUTS=$srcdir/tests \
+ BIBINPUTS=./ptests \
+ ./pbibtex ptests/memtest$t || exit 1
+
+done
+
diff --git a/Build/source/texk/web2c/ptexdir/pbibtex-openout-test.pl b/Build/source/texk/web2c/ptexdir/pbibtex-openout-test.pl
new file mode 100755
index 00000000000..cf24a6e329a
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pbibtex-openout-test.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# $Id: pbibtex-openout-test.pl 17384 2010-03-08 18:49:47Z karl $
+# Public domain. Originally written 2010, Karl Berry.
+# Check that pbibtex respects openout_any.
+
+# srcdir = web2c (in the source tree)
+BEGIN { chomp ($srcdir = $ENV{"srcdir"} || `cd \`dirname $0\`/.. && pwd`); }
+require "$srcdir/../tests/common-test.pl";
+
+exit (&main ());
+
+sub main
+{
+ $ENV{"openout_any"} = "p"; # should already be in texmf.cnf, but ...
+
+ # .blg open of abs path should fail:
+ my $ret = &test_run ("./pbibtex", "$srcdir/tests/exampl.aux");
+
+ # The test fails if the program succeeded. Could also check the output.
+ my $bad = ($ret == 0);
+ return $bad;
+}
diff --git a/Build/source/texk/web2c/ptexdir/pbibtex.ch b/Build/source/texk/web2c/ptexdir/pbibtex.ch
new file mode 100644
index 00000000000..7911b7f0064
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pbibtex.ch
@@ -0,0 +1,610 @@
+% Change file for BibTeX in C, originally by Howard Trickey.
+%
+% 05/28/84 Initial implementation, version 0.41 of BibTeX
+% 07/01/84 Version 0.41a of BibTeX.
+% 12/17/84 Version 0.97c of BibTeX.
+% 02/12/85 Version 0.98c of BibTeX.
+% 02/25/85 Newer version 0.98c of BibTeX.
+% 03/25/85 Version 0.98f of BibTeX
+% 05/23/85 Version 0.98i of BibTeX
+% 02/11/88 Version 0.99b of BibTeX
+% 04/04/88 Version 0.99c; converted for use with web2c (ETM).
+% 11/30/89 Use FILENAMESIZE instead of 1024 (KB).
+% 03/09/90 `int' is a bad variable name for C.
+% (more recent changes in the ChangeLog)
+%
+% 5/ 2/89 Version 0.20 of JBiBTeX by Shouichi Matsui
+% 12/25/90 Version 0.30 of JBibTeX by Shouichi Matsui
+% 1/ 1/91 last update for JBibTeX 0.30 by Shouichi Matsui
+% 10/30/92 last update for JBibTeX 0.31 for bug fix by Shouichi Matsui
+% 11/02/94 Version 0.32 for use with web2c 6.1, by Takafumi Sakurai
+%
+% 2009 pTeXenc, pbibtex N. Tsuchimura
+
+@x [0] only print chnages
+\def\title{\BibTeX\ }
+@y
+\let\maybe=\iffalse
+\def\title{J\BibTeX\ 0.33 Changes for C Version \BibTeX\ }
+@z
+
+@x
+ \def\titlepage{F}
+ \centerline{\:\titlefont The {\:\ttitlefont \BibTeX} preprocessor}
+ \vskip 15pt \centerline{(Version 0.99d---\today)} \vfill}
+@y
+ \def\titlepage{F}
+ \centerline{\:\titlefont The {\:\ttitlefont J\BibTeX} preprocessor}
+ \vskip 15pt \centerline{(Version 0.33 based on C Version \BibTeX 0.99d---\today)} \vfill}
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% [1] banner
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+@d my_name=='bibtex'
+@d banner=='This is BibTeX, Version 0.99d' {printed when the program starts}
+@y
+@d my_name=='pbibtex'
+@d banner=='This is pBibTeX, Version 0.99d-j0.33'
+ {printed when the program starts}
+@z
+
+@x
+ print (banner);
+@y
+ print (banner);
+ print (' (', conststringcast(get_enc_string), ')');
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [27]
+for i:=0 to @'37 do xchr[i]:=chr(i);
+for i:=@'177 to @'377 do xchr[i]:=chr(i);
+@y
+for i:=1 to @'37 do xchr[i]:=' ';
+xchr[tab]:=chr(tab);
+for i:=@'200 to @'237 do xchr[i]:=chr(i-@'200);
+for i:=@'240 to 255 do xchr[i]:=chr(i);
+xchr[@'33]:=chr(@'33); {escape char}
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [28]
+for i:=first_text_char to last_text_char do xord[xchr[i]]:=i;
+@y
+for i:=first_text_char to last_text_char do xord[i]:=invalid_code;
+for i:=1 to @'176 do xord[i]:= i;
+for i:=@'200 to @'237 do xord[i]:= i-@'200;
+for i:=@'240 to 255 do xord[i]:=i;
+@z
+
+
+@x Changes for JBibTeX by Shouichi Matsui for ver. 0.30
+@d period = "." {these are three}
+@d question_mark = "?" {string-ending characters}
+@d exclamation_mark = "!" {of interest in \.{add.period\$}}
+@y
+@d period = "." {these are three}
+@d question_mark = "?" {string-ending characters}
+@d exclamation_mark = "!" {of interest in \.{add.period\$}}
+@d zen_pun_first = 161 {Zenkaku punctuation first byte; in EUC}
+@d zen_space = 161 {Zenkaku space first, second byte; in EUC}
+@d zen_kuten = 162 {Zenkaku kuten second byte; in EUC}
+@d zen_ten = 163 {Zenkaku ten second byte; in EUC}
+@d zen_comma = 164 {Zenkaku comman second byte; in EUC}
+@d zen_period = 165 {Zenkaku period second byte; in EUC}
+@d zen_question = 169 {Zenkaku question mark second byte; in EUC}
+@d zen_exclamation = 170 {Zenkaku exclamation mark second byte; in EUC}
+@z
+
+% [32] Make RET a `white_space' character, so we won't choke on DOS
+% files, which use CR/LF for line endings.
+@x Changes for JBibTeX by Shouichi Matsui [32]
+@<Set initial values of key variables@>=
+for i:=0 to @'177 do lex_class[i] := other_lex;
+for i:=@'200 to @'377 do lex_class[i] := alpha;
+for i:=0 to @'37 do lex_class[i] := illegal;
+lex_class[invalid_code] := illegal;
+lex_class[tab] := white_space;
+lex_class[13] := white_space;
+lex_class[space] := white_space;
+lex_class[tie] := sep_char;
+lex_class[hyphen] := sep_char;
+for i:=@'60 to @'71 do lex_class[i] := numeric;
+for i:=@'101 to @'132 do lex_class[i] := alpha;
+for i:=@'141 to @'172 do lex_class[i] := alpha;
+@y
+@<Set initial values of key variables@>=
+for i:=0 to @'377 do lex_class[i] := other_lex;
+for i:=0 to @'37 do lex_class[i] := illegal;
+lex_class[invalid_code] := illegal;
+lex_class[tab] := white_space;
+lex_class[13] := white_space;
+lex_class[space] := white_space;
+lex_class[tie] := sep_char;
+lex_class[hyphen] := sep_char;
+for i:=@'60 to @'71 do lex_class[i] := numeric;
+for i:=@'101 to @'132 do lex_class[i] := alpha;
+for i:=@'141 to @'172 do lex_class[i] := alpha;
+for i:=@'200 to @'237 do lex_class[i] := illegal;
+for i:=@'240 to 255 do lex_class[i] := alpha;
+lex_class[@'33]:=alpha;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [33]
+@<Set initial values of key variables@>=
+for i:=0 to @'377 do id_class[i] := legal_id_char;
+for i:=0 to @'37 do id_class[i] := illegal_id_char;
+id_class[space] := illegal_id_char;
+id_class[tab] := illegal_id_char;
+id_class[double_quote] := illegal_id_char;
+id_class[number_sign] := illegal_id_char;
+id_class[comment] := illegal_id_char;
+id_class[single_quote] := illegal_id_char;
+id_class[left_paren] := illegal_id_char;
+id_class[right_paren] := illegal_id_char;
+id_class[comma] := illegal_id_char;
+id_class[equals_sign] := illegal_id_char;
+id_class[left_brace] := illegal_id_char;
+id_class[right_brace] := illegal_id_char;
+@y
+@<Set initial values of key variables@>=
+for i:=0 to @'377 do id_class[i] := legal_id_char;
+for i:=0 to @'37 do id_class[i] := illegal_id_char;
+for i:=@'200 to @'237 do id_class[i] := illegal_id_char;
+id_class[@'33] := legal_id_char;
+id_class[space] := illegal_id_char;
+id_class[tab] := illegal_id_char;
+id_class[double_quote] := illegal_id_char;
+id_class[number_sign] := illegal_id_char;
+id_class[comment] := illegal_id_char;
+id_class[single_quote] := illegal_id_char;
+id_class[left_paren] := illegal_id_char;
+id_class[right_paren] := illegal_id_char;
+id_class[comma] := illegal_id_char;
+id_class[equals_sign] := illegal_id_char;
+id_class[left_brace] := illegal_id_char;
+id_class[right_brace] := illegal_id_char;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [35]
+char_width[@'167] := 722;
+char_width[@'170] := 528;
+char_width[@'171] := 528;
+char_width[@'172] := 444;
+char_width[@'173] := 500;
+char_width[@'174] :=1000;
+char_width[@'175] := 500;
+char_width[@'176] := 500;
+@y
+char_width[@'167] := 722;
+char_width[@'170] := 528;
+char_width[@'171] := 528;
+char_width[@'172] := 444;
+char_width[@'173] := 500;
+char_width[@'174] :=1000;
+char_width[@'175] := 500;
+char_width[@'176] := 500;
+for i:=@'240 to 254 do char_width[i]:=514;
+@z
+
+@x [48] JBibTeX and dynamic buf_size.
+label loop_exit;
+@y
+label loop_exit;
+var i:c_int_type;
+@z
+@x [still 48] JBibTeX and dynamic buf_size.
+ while (not eoln(f)) do
+ begin
+ if (last >= buf_size) then
+ buffer_overflow;
+ buffer[last] := xord[getc (f)];
+ incr (last);
+ end;
+ vgetc (f); {skip the eol}
+@y
+ last := input_line2(f,ustringcast(buffer),last,buf_size,address_of(i));
+ while (not eof(f)) and (last > 0) and (i <> 10) and (i <> 13) do
+ begin
+ buffer_overflow;
+ last := input_line2(f,ustringcast(buffer),last,buf_size,address_of(i));
+ end;
+@z
+
+@x
+@<Procedures and functions for the reading and processing of input files@>=
+procedure get_the_top_level_aux_file_name;
+label aux_found,@!aux_not_found;
+begin
+ @<Process a possible command line@>
+@y
+@<Procedures and functions for the reading and processing of input files@>=
+procedure get_the_top_level_aux_file_name;
+label aux_found,@!aux_not_found;
+begin
+ if (not set_enc_string (nil,'EUC')) then uexit(1);
+ @<Process a possible command line@>
+@z
+
+@x
+parse_arguments;
+@y
+init_kanji;
+parse_arguments;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [332]
+@!b_write : hash_loc; {\.{write\$}}
+@!b_default : hash_loc; {either \.{skip\$} or \.{default.type}}
+@y
+@!b_write : hash_loc; {\.{write\$}}
+@!b_is_kanji_str : hash_loc; {\.{is.kanji.str\$}}
+@!b_default : hash_loc; {either \.{skip\$} or \.{default.type}}
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [334]
+@d n_write = 36 {\.{write\$}}
+
+@<Constants in the outer block@>=
+@!num_blt_in_fns = 37; {one more than the previous number}
+@y
+@d n_write = 36 {\.{write\$}}
+@d n_is_kanji_str = 37 {\.{is.kanji.str\$}}
+
+@<Constants in the outer block@>=
+@!num_blt_in_fns = 38; {one more than the previous number}
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [335]
+build_in('write$ ',6,b_write,n_write);
+@y
+build_in('write$ ',6,b_write,n_write);
+build_in('is.kanji.str$',13,b_is_kanji_str,n_is_kanji_str);
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [342]
+ n_write : x_write;
+ othercases confusion ('Unknown built-in function')
+endcases;
+end
+@y
+ n_write : x_write;
+ n_is_kanji_str: x_is_kanji_str;
+ othercases confusion ('Unknown built-in function')
+endcases;
+end
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [343]
+@<|execute_fn|({\.{write\$}})@>@;
+@<|execute_fn| itself@>
+@y
+@<|execute_fn|({\.{write\$}})@>@;
+@<|execute_fn|({\.{is.kanji.str\$}})@>@;
+@<|execute_fn| itself@>
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui --- add.period$ for ver. 0.30
+case (str_pool[sp_ptr]) of
+ period,
+ question_mark,
+ exclamation_mark :
+ repush_string;
+ othercases
+ @<Add the |period| (it's necessary) and push@>
+@y
+case (str_pool[sp_ptr]) of
+ period,
+ question_mark,
+ exclamation_mark :
+ repush_string;
+ zen_ten,
+ zen_period,
+ zen_question,
+ zen_exclamation:
+ if( str_pool[sp_ptr-1] = zen_pun_first ) then
+ repush_string
+ else
+ @<Add the |period| (it's necessary) and push@>;
+ othercases
+ @<Add the |period| (it's necessary) and push@>
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [377]
+else if (length(pop_lit1) <> 1) then
+ begin
+ print ('"');
+ print_pool_str (pop_lit1);
+ bst_ex_warn ('" isn''t a single character');
+ push_lit_stk (0, stk_int);
+ end
+@y
+else if (length(pop_lit1) <> 1) then
+ if(str_pool[str_start[pop_lit1]]>127) then { a KANJI char is 2byte long }
+ push_lit_stk(str_pool[str_start[pop_lit1]],stk_int)
+ else begin
+ print ('"');
+ print_pool_str (pop_lit1);
+ bst_ex_warn ('" isn''t a single character');
+ push_lit_stk (0, stk_int);
+ end
+@z
+
+@x by Shouichi Matsui for Zenkaku comma
+if (ex_buf_ptr < ex_buf_length) then {remove the ``and''}
+ ex_buf_ptr := ex_buf_ptr - 4;
+@y
+if (ex_buf_ptr < ex_buf_length) then {remove the ``and'', or Zenkau comma}
+ begin
+ if( (ex_buf[ex_buf_ptr-1]=zen_comma) or (ex_buf[ex_buf_ptr-1]=zen_kuten) )
+ then ex_buf_ptr := ex_buf_ptr - 2
+ else ex_buf_ptr := ex_buf_ptr - 4;
+ end;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui for Zenkaku comma
+ "a", "A" :
+ begin
+ incr(ex_buf_ptr);
+ if (preceding_white) then
+ @<See if we have an ``and''@>; {if so, |and_found := true|}
+ preceding_white := false;
+ end;
+@y
+ "a", "A" :
+ begin
+ incr(ex_buf_ptr);
+ if (preceding_white) then
+ @<See if we have an ``and''@>; {if so, |and_found := true|}
+ preceding_white := false;
+ end;
+ zen_pun_first:
+ begin
+ if((ex_buf[ex_buf_ptr+1]=zen_comma) or
+ (ex_buf[ex_buf_ptr+1]=zen_kuten) ) then
+ begin
+ preceding_white := false;
+ and_found := true
+ end
+ else if(ex_buf[ex_buf_ptr+1]=zen_space) then
+ begin
+ ex_buf[ex_buf_ptr] := space;
+ ex_buf[ex_buf_ptr+1] := space;
+ preceding_white := true;
+ end;
+ ex_buf_ptr := ex_buf_ptr + 2;
+ end;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui for Zenkaku comma[385]
+ othercases
+ if (lex_class[ex_buf[ex_buf_ptr]] = white_space) then
+ begin
+ incr(ex_buf_ptr);
+ preceding_white := true;
+ end
+ else
+ begin
+ incr(ex_buf_ptr);
+ preceding_white := false;
+ end
+ endcases;
+check_brace_level (pop_lit_var);
+end;
+@y
+ othercases
+ if (lex_class[ex_buf[ex_buf_ptr]] = white_space) then
+ begin
+ incr(ex_buf_ptr);
+ preceding_white := true;
+ end
+ else
+ begin
+ if( ex_buf[ex_buf_ptr] > 127 ) then
+ ex_buf_ptr := ex_buf_ptr +2
+ else
+ incr(ex_buf_ptr);
+ preceding_white := false;
+ end
+ endcases;
+check_brace_level (pop_lit_var);
+end;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [415]
+ if (lex_class[name_buf[name_bf_ptr]] = alpha) then
+ begin
+ append_ex_buf_char_and_check (name_buf[name_bf_ptr]);
+ goto loop_exit;
+ end
+ else if ((name_buf[name_bf_ptr] = left_brace) and
+@y
+ if (lex_class[name_buf[name_bf_ptr]] = alpha) then
+ begin
+ if name_buf[name_bf_ptr]>127 then begin
+ append_ex_buf_char_and_check (name_buf[name_bf_ptr]);
+ incr(name_bf_ptr);
+ append_ex_buf_char_and_check (name_buf[name_bf_ptr]);
+ end
+ else
+ append_ex_buf_char_and_check (name_buf[name_bf_ptr]);
+ goto loop_exit;
+ end
+ else if ((name_buf[name_bf_ptr] = left_brace) and
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [437]
+@<|execute_fn|({\.{substring\$}})@>=
+procedure x_substring;
+label exit;
+begin
+@y
+@<|execute_fn|({\.{substring\$}})@>=
+procedure x_substring;
+label exit;
+var tps,tpe:pool_pointer; {temporary pointer}
+begin
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [438]
+str_room(sp_end - sp_ptr);
+while (sp_ptr < sp_end) do {shift the substring}
+ begin
+ append_char (str_pool[sp_ptr]);
+ incr(sp_ptr);
+ end;
+@y
+{ 2 bytes Kanji code break check }
+tps:=str_start[pop_lit3];
+while (tps < sp_ptr) do begin
+ if str_pool[tps] > 127
+ then tps := tps + 2
+ else incr(tps);
+end;
+tpe:=tps;
+while (tpe < sp_end) do begin
+ if str_pool[tpe] > 127
+ then tpe := tpe+2
+ else incr(tpe);
+end;
+if tps<>sp_ptr then begin
+ if tps>str_start[pop_lit3]
+ then decr(sp_ptr)
+ else incr(sp_ptr);
+end;
+if tpe<>sp_end then begin
+ if tpe<str_start[pop_lit3+1]
+ then incr(sp_end)
+ else decr(sp_end);
+end;
+
+str_room(sp_end - sp_ptr);
+while (sp_ptr < sp_end) do {shift the substring}
+ begin
+ if str_pool[sp_ptr] >127 then begin
+ append_char (str_pool[sp_ptr]); incr(sp_ptr);
+ append_char (str_pool[sp_ptr]); incr(sp_ptr);
+ end
+ else begin
+ append_char (str_pool[sp_ptr]); incr(sp_ptr);
+ end;
+ end;
+@z
+
+@x Changes for JBibTeX by Shouichi Matsui [445]
+ else if (str_pool[sp_xptr1-1] = right_brace) then
+ begin
+ if (sp_brace_level > 0) then
+ decr(sp_brace_level);
+ end
+ else
+ incr(num_text_chars);
+ end;
+@y
+ else if (str_pool[sp_xptr1-1] = right_brace) then
+ begin
+ if (sp_brace_level > 0) then
+ decr(sp_brace_level);
+ end
+ else if (str_pool[sp_xptr1-1]>127) then
+ begin {kanji char}
+ incr(sp_xptr1); num_text_chars:=num_text_chars+2;
+ end
+ else
+ incr(num_text_chars);
+ end;
+@z
+
+@x
+const n_options = 4; {Pascal won't count array lengths for us.}
+@y
+const n_options = 6; {Pascal won't count array lengths for us.}
+@z
+
+@x
+ usage_help (BIBTEX_HELP, nil);
+@y
+ usage_help (PBIBTEX_HELP, 'issue@@texjp.org');
+@z
+
+@x
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@y
+ end else if argument_is ('kanji') then begin
+ if (not set_enc_string(optarg, nil)) then
+ write_ln('Bad kanji encoding "', stringcast(optarg), '".');
+
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@z
+
+@x
+long_options[current_option].name := 'version';
+long_options[current_option].has_arg := 0;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr (current_option);
+@y
+long_options[current_option].name := 'version';
+long_options[current_option].has_arg := 0;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr (current_option);
+
+@ Kanji option.
+@.-kanji@>
+
+@<Define the option...@> =
+long_options[current_option].name := 'kanji';
+long_options[current_option].has_arg := 1;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr(current_option);
+@z
+
+@x
+begin kpse_set_program_name (argv[0], 'bibtex');
+@y
+begin kpse_set_program_name (argv[0], 'pbibtex');
+@z
+
+@x
+ until j_prime;
+ incr (k);
+ hash_prime := j;
+ primes[k] := hash_prime;
+ end;
+end;
+
+@y
+ until j_prime;
+ incr (k);
+ hash_prime := j;
+ primes[k] := hash_prime;
+ end;
+end;
+
+@ modules for JBibTeX
+
+@<|execute_fn|({\.{is.kanji.str\$}})@>=
+procedure x_is_kanji_str;
+label exit;
+begin
+ pop_lit_stk(pop_lit1, pop_typ1);
+ if pop_typ1<> stk_str then
+ begin print_wrong_stk_lit(pop_lit1,pop_typ1,stk_str);
+ push_lit_stk(0,stk_int);
+ end else begin
+ sp_ptr := str_start[pop_lit1];
+ sp_end := str_start[pop_lit1+1];
+ while sp_ptr<sp_end do begin
+ if str_pool[sp_ptr]>127 then begin
+ push_lit_stk(1,stk_int);
+ return;
+ end else begin
+ incr(sp_ptr);
+ end;
+ end;
+ push_lit_stk(0,stk_int);
+ end;
+exit:end;
+@z
diff --git a/Build/source/texk/web2c/ptexdir/pbibtex.test b/Build/source/texk/web2c/ptexdir/pbibtex.test
new file mode 100755
index 00000000000..25a73230d3b
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pbibtex.test
@@ -0,0 +1,15 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+cp $srcdir/tests/exampl.aux ptests/xexampl.aux
+
+TEXMFCNF=$srcdir/../kpathsea \
+ BSTINPUTS=$srcdir/tests \
+ BIBINPUTS=$srcdir/tests \
+ ./pbibtex ptests/xexampl || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/pdvitype.ch b/Build/source/texk/web2c/ptexdir/pdvitype.ch
new file mode 100644
index 00000000000..864d1c41ef7
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pdvitype.ch
@@ -0,0 +1,483 @@
+% This is a change file for DVItype.
+%
+% 09/27/95 (KA) Supporting ASCII pTeX
+% 2020-08-24 (HY) Support \dtou
+%
+@x
+@d my_name=='dvitype'
+@d banner=='This is DVItype, Version 3.6' {printed when the program starts}
+@y
+@d my_name=='pdvitype'
+@d banner=='This is pDVItype, Version 3.6-p0.5'
+ {printed when the program starts}
+@z
+
+@x
+ parse_arguments;
+@y
+ init_kanji;
+ parse_arguments;
+@z
+
+@x
+for i:=@'177 to 255 do xchr[i]:='?';
+@y
+for i:=@'177 to 255 do xchr[i]:=i;
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+@d undefined_commands==250,251,252,253,254,255
+@y
+@d dir=255 {pTeX direction}
+@d undefined_commands==250,251,252,253,254
+@z
+
+@x
+@d id_byte=2 {identifies the kind of \.{DVI} files described here}
+@y
+@d id_byte=2 {identifies the kind of \.{DVI} files described here}
+@d ptex_id_byte=3 {identifies the kind of pTeX \.{DVI} files described here}
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% JFM and pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+@!width_ptr:0..max_widths; {the number of known character widths}
+@y
+@!width_ptr:0..max_widths; {the number of known character widths}
+@!fnt_jfm_p:array [0..max_fonts] of boolean;
+@!jfm_char_code:array [0..max_widths] of integer;
+@!jfm_char_type:array [0..max_widths] of integer;
+@!jfm_char_font:array [0..max_widths] of integer;
+@!jfm_char_type_count:integer;
+@!cur_jfm_char_type:integer;
+
+@ @d jfm_hash_size=347
+
+@ @<Types...@>=
+@!jfm_char_type_hash_value=0..jfm_hash_size-1;
+
+@ @<Glob...@>=
+@!jfm_char_type_hash_table:array[jfm_char_type_hash_value] of integer;
+ { first pointer to character information. 0 means null pointer. }
+@!jfm_char_type_hash_link:array[0..max_widths] of integer;
+ { next pointer to character information. 0 means null pointer. }
+
+@ @<Set init...@>=
+for i:=0 to jfm_hash_size-1 do
+ jfm_char_type_hash_table[i] := 0;
+jfm_char_type[0]:=0;
+jfm_char_type_count:=1;
+
+@ Refer char_type table.
+
+@p function get_jfm_char_type(@!fntn:integer;@!jfmc:integer):integer;
+ var p:integer; ct:integer;
+begin
+ p:=jfm_char_type_hash_table[(jfmc+fntn) mod jfm_hash_size];
+ ct:=0; { default char_type is 0 }
+ while p <> 0 do
+ if (jfm_char_code[p] = jfmc) and (jfm_char_font[p] = fntn) then
+ begin ct:=jfm_char_type[p]; p:=0; end
+ else
+ p:=jfm_char_type_hash_link[p];
+ get_jfm_char_type:=ct;
+end;
+
+@ @<Glob...@>=
+@!ptex_p:boolean;
+@!dd:eight_bits;
+@!ddstack:array [0..stack_size] of eight_bits;
+@z
+
+@x
+@!lh:integer; {length of the header data, in four-byte words}
+@y
+@!lh:integer; {length of the header data, in four-byte words}
+@!nt:integer;
+@!jfm_h:integer;
+@z
+
+@x [35] JFM by K.A.
+read_tfm_word; lh:=b2*256+b3;
+@y
+read_tfm_word; lh:=b0*256+b1;
+if (lh = 11) or (lh = 9) then
+ begin
+ print(' (JFM');
+ fnt_jfm_p[nf] := true;
+ if lh = 9 then print(' tate');
+ print(')');
+ nt:=b2*256+b3;
+ read_tfm_word;
+ end
+else
+ begin
+ nt:=0;
+ fnt_jfm_p[nf] := false;
+ end;
+lh:=b2*256+b3;
+@z
+
+@x [35] JFM by K.A.
+ tfm_design_size:=round(tfm_conv*(((b0*256+b1)*256+b2)*256+b3))
+ else goto 9997;
+ end;
+@y
+ tfm_design_size:=round(tfm_conv*(((b0*256+b1)*256+b2)*256+b3))
+ else goto 9997;
+ end;
+for k:=1 to nt do
+ begin
+ read_tfm_word;
+ jfm_char_code[jfm_char_type_count]:=b0*256+b1+b2*65536;
+ jfm_char_type[jfm_char_type_count]:=b3;
+ jfm_char_font[jfm_char_type_count]:=nf;
+ jfm_h:= { hash value }
+ (jfm_char_code[jfm_char_type_count]+nf) mod jfm_hash_size;
+ jfm_char_type_hash_link[jfm_char_type_count]:=
+ jfm_char_type_hash_table[jfm_h];
+ jfm_char_type_hash_table[jfm_h]:=jfm_char_type_count;
+ jfm_char_type_count := jfm_char_type_count + 1
+ end;
+@z
+
+@x
+@p procedure out_text(c:ASCII_code);
+begin if text_ptr=line_length-2 then flush_text;
+incr(text_ptr); text_buf[text_ptr]:=c;
+end;
+@y
+@p procedure out_text(c:ASCII_code);
+begin if text_ptr=line_length-2 then flush_text;
+incr(text_ptr);
+if c>=177 then text_buf[text_ptr]:=@'77 else text_buf[text_ptr]:=c;
+end;
+
+@ @p procedure out_kanji(c:integer);
+begin
+ if text_ptr>=line_length-3 then flush_text;
+ c:=toBUFF(fromDVI(c));
+ incr(text_ptr); text_buf[text_ptr]:= Hi(c);
+ incr(text_ptr); text_buf[text_ptr]:= Lo(c);
+end;
+
+@ output hexdecimal / octal character code.
+
+@d print_hex_digit(#)==if # <= 9 then print((#):1)
+ else case # of
+ 10: print(xchr['A']);
+ 11: print(xchr['B']);
+ 12: print(xchr['C']);
+ 13: print(xchr['D']);
+ 14: print(xchr['E']);
+ 15: print(xchr['F']); { no more cases }
+ end
+
+@p
+ifdef('HEX_CHAR_CODE')
+procedure print_hex_number(c:integer);
+var n:integer;
+ b:array[1..8] of integer;
+begin
+ n:=1;
+ while (n<8) and (c<>0) do
+ begin b[n]:=c mod 16; c:=c div 16; n:=n+1 end;
+ print('"');
+ if n=1 then print(xchr['0'])
+ else
+ begin
+ n:=n-1;
+ while n>0 do
+ begin print_hex_digit(b[n]); n:=n-1 end
+ end
+end;
+endif('HEX_CHAR_CODE')
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+z0: first_par:=z;
+@y
+z0: first_par:=z;
+dir: first_par:=get_byte;
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+@!hhh:integer; {|h|, rounded to the nearest pixel}
+@y
+@!hhh,@!vvv:integer; {|h|,|v| rounded to the nearest pixel}
+@z
+
+@x
+s:=0; h:=0; v:=0; w:=0; x:=0; y:=0; z:=0; hh:=0; vv:=0;
+@y
+s:=0; h:=0; v:=0; w:=0; x:=0; y:=0; z:=0; hh:=0; vv:=0; dd:=0;
+@z
+
+@x
+move_right: @<Finish a command that sets |h:=h+q|, then |goto done|@>;
+@y
+move_right:
+ if dd=0 then begin
+ @<Finish a command that sets |h:=h+q|, then |goto done|@>;
+ end else begin
+ if dd=1 then p:=q else {if dd=3 then} p:=-q;
+ @<Finish a command that sets |v:=v+p|, then |goto done|@>;
+ end;
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+ four_cases(set1): begin major('set',o-set1+1:1,' ',p:1); goto fin_set;
+ end;
+ four_cases(put1): begin major('put',o-put1+1:1,' ',p:1); goto fin_set;
+@y
+ four_cases(set1),four_cases(put1):
+ begin
+ if fnt_jfm_p[cur_font]=true then
+ begin
+ cur_jfm_char_type:=get_jfm_char_type(cur_font,p);
+ out_kanji(p);
+ if o<put1 then
+ begin
+ minor('set',o-set1+1:1,' ',p:1);
+ end
+ else begin
+ minor('put',o-put1+1:1,' ',p:1);
+ end;
+ifdef('HEX_CHAR_CODE')
+ print('(');
+ print_hex_number(p);
+ print(')');
+endif('HEX_CHAR_CODE')
+ print(' type=',cur_jfm_char_type);
+ p:=cur_jfm_char_type
+ end
+ else begin
+ if o<put1 then
+ begin
+ major('set',o-set1+1:1,' ',p:1);
+ end
+ else begin
+ major('put',o-put1+1:1,' ',p:1);
+ end;
+ifdef('HEX_CHAR_CODE')
+ print('(');
+ print_hex_number(p);
+ print(')');
+endif('HEX_CHAR_CODE')
+ end;
+ goto fin_set;
+@z
+
+@x
+ @t\4@>@<Cases for commands |nop|, |bop|, \dots, |pop|@>@;
+@y
+ dir: begin
+ if not ptex_p and (out_mode=the_works) then
+ bad_dvi('dir command within normal dvi file');
+ major('dir ',p:1); dd:=p; goto done;
+ end;
+ @t\4@>@<Cases for commands |nop|, |bop|, \dots, |pop|@>@;
+@z
+
+@x
+@!vvv:integer; {|v|, rounded to the nearest pixel}
+@y
+@!vvv,hhh:integer; {|v|,|h| rounded to the nearest pixel}
+@z
+
+@x
+move_down: @<Finish a command that sets |v:=v+p|, then |goto done|@>;
+@y
+move_down:
+ if dd=0 then begin
+ @<Finish a command that sets |v:=v+p|, then |goto done|@>;
+ end else begin
+ if dd=1 then q:=-p else {if dd=3 then} q:=p;
+ @<Finish a command that sets |h:=h+q|, then |goto done|@>;
+ end;
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+ hstack[s]:=h; vstack[s]:=v; wstack[s]:=w;
+@y
+ ddstack[s]:=dd;
+ hstack[s]:=h; vstack[s]:=v; wstack[s]:=w;
+@z
+
+@x
+ h:=hstack[s]; v:=vstack[s]; w:=wstack[s];
+@y
+ dd:=ddstack[s];
+ h:=hstack[s]; v:=vstack[s]; w:=wstack[s];
+@z
+
+@x
+@d out_space(#)==if (p>=font_space[cur_font])or(p<=-4*font_space[cur_font]) then
+ begin out_text(" "); hh:=pixel_round(h+p);
+ end
+ else hh:=hh+pixel_round(p);
+@y
+@d out_space(#)==if (p>=font_space[cur_font])or(p<=-4*font_space[cur_font]) then
+ begin out_text(" ");
+ if dd=0 then hh:=pixel_round(h+p)
+ else if dd=1 then vv:=pixel_round(v+p)
+ else {if dd=3 then} vv:=pixel_round(v-p);
+ end
+ else if dd=0 then hh:=hh+pixel_round(p)
+ else if dd=1 then vv:=vv+pixel_round(p)
+ else {if dd=3 then} vv:=vv-pixel_round(p);
+@z
+
+@x
+@d out_vmove(#)==if abs(p)>=5*font_space[cur_font] then vv:=pixel_round(v+p)
+ else vv:=vv+pixel_round(p);
+@y
+@d out_vmove(#)==if abs(p)>=5*font_space[cur_font] then
+ begin if dd=0 then vv:=pixel_round(v+p)
+ else if dd=1 then hh:=pixel_round(h-p)
+ else {if dd=3 then} hh:=pixel_round(h+p);
+ end
+ else if dd=0 then vv:=vv+pixel_round(p)
+ else if dd=1 then hh:=hh-pixel_round(p)
+ else {if dd=3 then} hh:=hh+pixel_round(p);
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Hexadecimal code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+@ @<Translate a |set_char|...@>=
+begin if (o>" ")and(o<="~") then
+ begin out_text(p); minor('setchar',p:1);
+ end
+else major('setchar',p:1);
+@y
+@ @<Translate a |set_char|...@>=
+begin if (o>" ")and(o<="~") then
+ begin out_text(p); minor('setchar',p:1);
+ end
+else major('setchar',p:1);
+ifdef('HEX_CHAR_CODE')
+ print(' (');
+ print_hex_number(p);
+ print(')');
+endif('HEX_CHAR_CODE')
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+else hh:=hh+char_pixel_width(cur_font)(p);
+@y
+else if dd=0 then hh:=hh+char_pixel_width(cur_font)(p)
+ else if dd=1 then vv:=vv+char_pixel_width(cur_font)(p)
+ else {if dd=3 then} vv:=vv-char_pixel_width(cur_font)(p);
+@z
+
+@x
+hh:=hh+rule_pixels(q); goto move_right
+@y
+if dd=0 then hh:=hh+rule_pixels(q)
+else if dd=1 then vv:=vv+rule_pixels(q)
+else {if dd=3 then} vv:=vv-rule_pixels(q);
+goto move_right
+@z
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% pTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+@x
+ print('level ',ss:1,':(h=',h:1,',v=',v:1,
+ ',w=',w:1,',x=',x:1,',y=',y:1,',z=',z:1,
+ ',hh=',hh:1,',vv=',vv:1,')');
+@y
+ begin
+ print('level ',ss:1,':(h=',h:1,',v=',v:1,
+ ',w=',w:1,',x=',x:1,',y=',y:1,',z=',z:1);
+ if ptex_p then print(',d=',dd:1);
+ print(',hh=',hh:1,',vv=',vv:1,')');
+ end;
+@z
+
+@x
+if k<>id_byte then bad_dvi('ID byte is ',k:1);
+@y
+ptex_p:=(k=ptex_id_byte);
+if (k<>id_byte) and (not ptex_p) then bad_dvi('ID byte is ',k:1);
+@z
+
+@x
+print_ln(', maxstackdepth=',max_s:1,', totalpages=',total_pages:1);
+@y
+print_ln(', maxstackdepth=',max_s:1,', totalpages=',total_pages:1);
+if ptex_p then print_ln('pTeX DVI (id=',ptex_id_byte:1,')');
+@z
+
+@x
+if m<>id_byte then print_ln('identification in byte ',cur_loc-1:1,
+@.identification...should be n@>
+ ' should be ',id_byte:1,'!');
+@y
+if (m<>id_byte) and (m<>ptex_id_byte) then
+ print_ln('identification in byte ',cur_loc-1:1,
+@.identification...should be n@>
+ ' should be ',id_byte:1,' or ',ptex_id_byte:1,'!');
+@z
+
+@x
+const n_options = 8; {Pascal won't count array lengths for us.}
+@y
+const n_options = 10; {Pascal won't count array lengths for us.}
+@z
+
+@x
+ usage_help (DVITYPE_HELP, nil);
+@y
+ usage_help (PDVITYPE_HELP, 'issue@@texjp.org');
+@z
+
+@x
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@y
+ end else if argument_is ('kanji') then begin
+ set_prior_file_enc;
+ if (not set_enc_string(optarg,optarg)) then begin
+ write_ln('Bad kanji encoding "', stringcast(optarg), '".');
+ end;
+
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@z
+
+@x
+@ An element with all zeros always ends the list.
+@y
+@ Decide kanji encode
+@.-kanji@>
+
+@<Define the option...@> =
+long_options[current_option].name := 'kanji';
+long_options[current_option].has_arg := 1;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr (current_option);
+
+@ An element with all zeros always ends the list.
+@z
diff --git a/Build/source/texk/web2c/ptexdir/pdvitype.test b/Build/source/texk/web2c/ptexdir/pdvitype.test
new file mode 100755
index 00000000000..321dde07967
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pdvitype.test
@@ -0,0 +1,20 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+if tfmpath=`$KPSEWHICH cmbx10.tfm`; then
+
+ TEXMFCNF=$srcdir/../kpathsea \
+ TFMFONTS=`dirname "$tfmpath"` \
+ ./pdvitype -show-opcodes $srcdir/tests/story >ptests/xstory.dvityp || exit 1
+
+fi
+
+TEXMFCNF=$srcdir/../kpathsea \
+ TFMFONTS=$srcdir/tests \
+ ./pdvitype --p=\*.\*.2 $srcdir/tests/pagenum.dvi >ptests/xpagenum.typ || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/ppltotf.ch b/Build/source/texk/web2c/ptexdir/ppltotf.ch
new file mode 100644
index 00000000000..b7db0e67048
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ppltotf.ch
@@ -0,0 +1,710 @@
+% This is a change file for PLtoTF
+%
+% (2018-01-27) HY pPLtoTF p2.0 - new JFM spec by texjporg
+% (07/18/2006) ST PLtoTF p1.8 (3.5, Web2c 7.2)
+% (11/13/2000) KN PLtoTF p1.4 (3.5, Web2c 7.2)
+% (03/27/1998) KN PLtoTF p1.3 (3.5, Web2c 7.2)
+%
+@x [0] l.52 - pTeX:
+\def\title{PL$\,$\lowercase{to}$\,$TF changes for C}
+@y
+\def\title{PL$\,$\lowercase{to}$\,$TF changes for C, and for KANJI}
+@z
+
+@x [2] l.69 - pTeX:
+@d my_name=='pltotf'
+@d banner=='This is PLtoTF, Version 3.6' {printed when the program starts}
+@y
+@d my_name=='ppltotf'
+@d banner=='This is pPLtoTF, Version 3.6-p2.0'
+ {printed when the program starts}
+@z
+
+@x
+ parse_arguments;
+@y
+ init_kanji;
+ parse_arguments;
+@z
+
+@x [6] l.140 - pTeX:
+ print_ln (version_string);
+@y
+ print_ln (version_string);
+ print_ln ('process kanji code is ', conststringcast(get_enc_string), '.');
+@z
+
+@x [18] l.495 - pTeX:
+@!xord:array[char] of ASCII_code; {conversion table}
+@y
+@!xord:array[char] of ASCII_code; {conversion table}
+@!xchr:array[char] of byte; {specifiles conversion of output character}
+@z
+
+@x [19] l.506 - pTeX:
+for k:=first_ord to last_ord do xord[chr(k)]:=invalid_code;
+@y
+for k:=0 to @'37 do xchr[k]:='?';
+for k:=@'40 to 255 do xchr[k]:=k;
+for k:=first_ord to last_ord do xord[chr(k)]:=invalid_code;
+@z
+
+@x [28] l.619 - pTeX:
+else begin while (limit<buf_size-2)and(not eoln(pl_file)) do
+ begin incr(limit); read(pl_file,buffer[limit]);
+ end;
+@y
+else begin limit:=input_line2(pl_file,ustringcast(buffer),limit+1,buf_size-1)-1;
+@z
+
+@x [36] l.754 - pTeX: May have to increase some numbers to fit new commands
+@d max_name_index=88 {upper bound on the number of keywords}
+@d max_letters=600 {upper bound on the total length of all keywords}
+@y
+@d max_name_index=97 {upper bound on the number of keywords}
+@d max_letters=700 {upper bound on the total length of all keywords}
+@z
+
+@x [44] l.839 - pTeX: Add kanji related codes
+@d character_code=12
+@y
+@d character_code=12
+@d type_code=13 {|TYPE| property}
+@d glue_kern_code=14 {|GLUEKERN| property}
+@d chars_in_type_code=15 {|CHARSINTYPE| property}
+@d dir_code=16 {|DIRECTION| property}
+@z
+
+@x [44] l.856 - pTeX:
+@d lig_code=74
+@y
+@d lig_code=74
+@d glue_code=75 {|GLUE| property}
+@#
+@d undefined=0 {not decided file format yet}
+@d tfm_format=1 {\.{TFM} file format}
+@d jfm_or_vfm=2 {Yoko or Tate \.{JFM} file format}
+@d jfm_format=3 {Yoko-kumi \.{JFM} file format}
+@d vfm_format=4 {Tate-kumi \.{JFM} file format}
+@z
+
+@x [84] l.1542 - pTeX: Change valid property code.
+if cur_code=comment_code then skip_to_end_of_item
+else if cur_code>character_code then
+ flush_error('This property name doesn''t belong on the outer level')
+@.This property name doesn't belong...@>
+@y
+if cur_code=comment_code then skip_to_end_of_item
+else if (cur_code>dir_code)or
+ ((file_format=tfm_format)and(cur_code>character_code)) then
+ flush_error('This property name doesn''t belong on the outer level')
+@.This property name doesn't belong...@>
+@z
+
+@x [85] l.1565 - pTeX: Added some property codes.
+character_code: read_char_info;
+@y
+character_code: read_char_info;
+type_code: read_kanji_info;
+glue_kern_code: read_glue_kern;
+chars_in_type_code: read_chars_in_type;
+dir_code: read_direction;
+@z
+
+@x [110] l.1915 - pTeX: there are no charlists in kanji format files.
+for c:=0 to 255 do
+ @<Make sure that |c| is not the largest element of a charlist cycle@>;
+@y
+if file_format=tfm_format then
+ for c:=0 to 255 do
+ @<Make sure that |c| is not the largest element of a charlist cycle@>;
+@z
+
+@x [120] l.2037 - pTeX: when checking glue_kern prog check glues as well
+ begin if lig_exam<>bchar then
+ check_existence(lig_exam)('LIG character examined by');
+@.LIG character examined...@>
+ check_existence(lig_gen)('LIG character generated by');
+@.LIG character generated...@>
+ if lig_gen>=128 then if(c<128)or(c=256) then
+ if(lig_exam<128)or(lig_exam=bchar) then seven_unsafe:=true;
+ end
+@y
+ begin if file_format=tfm_format then
+ begin if lig_exam<>bchar then
+ check_existence(lig_exam)('LIG character examined by');
+@.LIG character examined...@>
+ check_existence(lig_gen)('LIG character generated by');
+@.LIG character generated...@>
+ if lig_gen>=128 then if(c<128)or(c=256) then
+ if(lig_exam<128)or(lig_exam=bchar) then seven_unsafe:=true;
+ end
+ else check_existence(lig_exam)('GLUE character generated by');
+ end
+@z
+
+@x [126] l.2178 - pTeX: Fix up output of bytes.
+@<Doublecheck...@>=
+if nl>0 then for lig_ptr:=0 to nl-1 do
+ if lig_kern[lig_ptr].b2<kern_flag then
+ begin if lig_kern[lig_ptr].b0<255 then
+ begin double_check_lig(b1)('LIG step'); double_check_lig(b3)('LIG step');
+ end;
+ end
+ else double_check_lig(b1)('KRN step');
+@y
+@<Doublecheck...@>=
+@z
+
+@x [128] l.2207 - pTeX: Decide the |file_format|.
+@<Do the output@>=
+@y
+@<Do the output@>=
+case file_format of
+tfm_format: do_nothing;
+undefined,jfm_or_vfm: begin file_format:=jfm_format;
+ print_ln('Input file is in kanji YOKO-kumi format.');
+ end;
+jfm_format: print_ln('Input file is in kanji YOKO-kumi format.');
+vfm_format: print_ln('Input file is in kanji TATE-kumi format.');
+end;
+@z
+
+@x [128] l.2211 - pTeX: Output kanji character
+@<Output the character info@>;
+@y
+if file_format<>tfm_format then @<Output the kanji character type info@>;
+@<Output the character info@>;
+@z
+
+@x [128] l.2213 - pTeX: Output glue/kern programs
+@<Output the ligature/kern program@>;
+@y
+@<Output the ligature/kern program@>;
+if (file_format<>tfm_format)and(ng>0) then
+ for krn_ptr:=0 to ng-1 do
+ begin out_scaled(glue[3*krn_ptr+0]);
+ out_scaled(glue[3*krn_ptr+1]);
+ out_scaled(glue[3*krn_ptr+2]);
+ end;
+@z
+
+@x [130] l.2238 - pTeX:
+not_found:=true; bc:=0;
+while not_found do
+ if (char_wd[bc]>0)or(bc=255) then not_found:=false
+ else incr(bc);
+not_found:=true; ec:=255;
+while not_found do
+ if (char_wd[ec]>0)or(ec=0) then not_found:=false
+ else decr(ec);
+if bc>ec then bc:=1;
+@y
+if file_format<>tfm_format then
+ begin bc:=0; ec:=0; nt:=1;
+ for kanji_type_index:=0 to max_kanji do
+ begin if kanji_type[kanji_type_index]>0 then incr(nt);
+ if kanji_type[kanji_type_index]>ec then ec:=kanji_type[kanji_type_index];
+ end;
+ end
+else begin not_found:=true; bc:=0;
+ while not_found do
+ if (char_wd[bc]>0)or(bc=255) then not_found:=false
+ else incr(bc);
+ not_found:=true; ec:=255;
+ while not_found do
+ if (char_wd[ec]>0)or(ec=0) then not_found:=false
+ else decr(ec);
+ if bc>ec then bc:=1;
+ end;
+@z
+
+@x [130] l.2250 - pTeX:
+lf:=6+lh+(ec-bc+1)+memory[width]+memory[height]+memory[depth]+
+memory[italic]+nl+lk_offset+nk+ne+np;
+@y
+if file_format<>tfm_format then
+ lf:=7+nt+lh+(ec-bc+1)+memory[width]+memory[height]+memory[depth]+
+ memory[italic]+nl+lk_offset+nk+3*ng+np
+else
+ lf:=6+lh+(ec-bc+1)+memory[width]+memory[height]+memory[depth]+
+ memory[italic]+nl+lk_offset+nk+ne+np;
+@z
+
+@x [131] pTeX:
+@ @d out_size(#)==out((#) div 256); out((#) mod 256)
+@y
+@ @d out_size(#)==out((#) div 256); out((#) mod 256)
+@d out_kanji_code(#)==out_size((#) mod 65536); out((#) div 65536)
+@z
+
+@x [131] l.2256 - pTeX:
+out_size(lf); out_size(lh); out_size(bc); out_size(ec);
+out_size(memory[width]); out_size(memory[height]);
+out_size(memory[depth]); out_size(memory[italic]);
+out_size(nl+lk_offset); out_size(nk); out_size(ne); out_size(np);
+@y
+if file_format=jfm_format then
+ begin out_size(yoko_id_number); out_size(nt);
+ end
+else if file_format=vfm_format then
+ begin out_size(tate_id_number); out_size(nt);
+ end;
+out_size(lf); out_size(lh); out_size(bc); out_size(ec);
+out_size(memory[width]); out_size(memory[height]);
+out_size(memory[depth]); out_size(memory[italic]);
+out_size(nl+lk_offset); out_size(nk);
+if file_format<>tfm_format then begin out_size(ng*3)
+ end
+else begin out_size(ne);
+ end;
+out_size(np);
+@z
+
+@x [146] l.2476 - pTeX:
+@p procedure param_enter;
+@y
+@p
+@<Declare kanji scanning routines@>@/
+procedure param_enter;
+@z
+
+@x [146] l.2488 - pTeX: LIGTABLE command can not be used in JPL.
+begin @<Read ligature/kern list@>;
+end;
+@y
+begin @<If is jfm or vfm then print error@>;
+@<Read ligature/kern list@>;
+end;
+@z
+
+@x [146] l.2493 - pTeX: CHARACTER command can not be used in JPL.
+begin @<Read character info list@>;
+end;
+@y
+begin @<If is jfm or vfm then print error@>;
+@<Read character info list@>;
+end;
+@z
+
+@x [146] l.2506 - pTeX:
+begin @<Correct and check the information@>
+end;
+@y
+begin @<Correct and check the information@>
+end;
+@#
+procedure read_kanji_info; {TYPE command}
+var @!c:byte; {the char}
+begin @<If is tfm then print error@>;
+@<Read Kanji character type list@>;
+end;
+@#
+procedure read_glue_kern; {GLUEKERN command}
+var krn_ptr:0..max_kerns; {an index into |kern|}
+@!c:byte; {runs through all character codes}
+begin @<If is tfm then print error@>;
+@<Read glue/kern list@>;
+end;
+@#
+procedure read_chars_in_type; {CHARSINTYPE command}
+var @!type_num:byte; {kanji character type number}
+@!jis_code:integer; {sixteen bits Kanji character code}
+begin @<If is tfm then print error@>;
+@<Read Kanji characters list in this type@>;
+end;
+@#
+procedure read_direction; {DIRECTION command}
+begin @<If is tfm then print error@>;
+@<Read direction@>;
+end;
+@z
+
+@x
+const n_options = 3; {Pascal won't count array lengths for us.}
+@y
+const n_options = 5; {Pascal won't count array lengths for us.}
+@z
+
+@x
+ usage_help (PLTOTF_HELP, nil);
+@y
+ usage_help (PPLTOTF_HELP, 'issue@@texjp.org');
+@z
+
+@x
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@y
+ end else if argument_is ('kanji') then begin
+ if (not set_enc_string(optarg,optarg)) then
+ print_ln('Bad kanji encoding "', stringcast(optarg), '".');
+
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@z
+
+@x
+@ An element with all zeros always ends the list.
+@y
+@ Kanji option.
+@.-kanji@>
+
+@<Define the option...@> =
+long_options[current_option].name := 'kanji';
+long_options[current_option].has_arg := 1;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr(current_option);
+
+@ An element with all zeros always ends the list.
+@z
+
+@x [148] l.2620 - pTeX:
+@* Index.
+@y
+@* For Japanese Font Metric routines.
+We need to include some routines for handling kanji characters.
+
+@<Constants...@>=
+max_kanji=7237; { maximum number of 2byte characters }
+max_kanji_code=@"7E7E; { maximum jis code }
+yoko_id_number=11; { is identifier for YOKO-kumi font}
+tate_id_number=9; { is identifier for TATE-kumi font}
+
+@ @<Glob...@>=
+file_format:undefined..vfm_format; {the format of the input file}
+kanji_type:array[0..max_kanji] of -1..256; {the type of every kanji char }
+kanji_type_index:0..max_kanji; { index into above }
+nt:integer; {number of entries in character type table}
+glue:array[0..768] of fix_word; {the distinct glue amounts}
+ng:integer; {number of 3-word entries in glue table}
+
+@ @<Set init...@>=
+file_format:=undefined;
+for kanji_type_index:=0 to max_kanji do kanji_type[kanji_type_index]:=-1;
+ng:=0;
+
+@ @<If is jfm or vfm then print error@>=
+if file_format>tfm_format then
+ err_print('This is an illegal command for kanji format files.')
+else if file_format=undefined then file_format:=tfm_format
+
+@ @<If is tfm then print error@>=
+if file_format=tfm_format then
+ err_print('You can use this command only for kanji format files.')
+else if file_format=undefined then file_format:=jfm_or_vfm
+
+@ These are extended propaties for \.{JFM}.
+
+@<Enter all of the names and ...@>=
+load4("T")("Y")("P")("E")(type_code);@/
+load8("G")("L")("U")("E")("K")("E")("R")("N")(glue_kern_code);@/
+load11("C")("H")("A")("R")("S")("I")("N")("T")("Y")("P")("E")
+ (chars_in_type_code);@/
+load9("D")("I")("R")("E")("C")("T")("I")("O")("N")(dir_code);@/
+load4("G")("L")("U")("E")(glue_code);@/
+
+@ @<Enter the parameter names@>=
+load10("E")("X")("T")("R")("A")("S")("P")("A")("C")("E")(parameter_code+7);@/
+load12("E")("X")("T")("R")("A")("S")("T")("R")("E")("T")("C")("H")
+ (parameter_code+8);@/
+load11("E")("X")("T")("R")("A")("S")("H")("R")("I")("N")("K")
+ (parameter_code+9);@/
+
+
+@ Here, we declare kanji related routines and package gluekern stuff.
+There routines a bit similar reading ligature/kern programs.
+
+@<Read glue/kern list@>=
+begin while level=1 do
+ begin while cur_char=" " do get_next;
+ if cur_char="(" then @<Read a glue/kern command@>
+ else if cur_char=")" then skip_to_end_of_item
+ else junk_error;
+ end;
+finish_inner_property_list;
+end;
+
+@ @<Read a glue/kern command@>=
+begin get_name;
+if cur_code=comment_code then skip_to_end_of_item
+else begin case cur_code of
+ label_code:@<Read a glue label step@>;
+ stop_code:@<Read a stop step@>;
+ skip_code:@<Read a skip step@>;
+ krn_code:@<Read a (glue) kerning step@>;
+ glue_code:@<Read a glue step@>;
+ others:
+ flush_error('This property name doesn''t belong in a GLUEKERN list');
+@.This property name doesn't belong...@>
+ end;
+ finish_the_property;
+ end;
+end
+
+@ When a character is about to be tagged, we use the following
+so that an error message is given in case of multiple tags.
+
+@<Read a glue label step@>=
+begin c:=get_byte;
+case char_tag[c] of
+ no_tag: do_nothing;
+ lig_tag: err_print('This character already appeared in a GLUEKERN LABEL');
+ @.This character already...@>
+ list_tag: err_print('Impossible: a list tag in a kanji format file?');
+ ext_tag: err_print('Impossible: an extensible tag in a kanji format file?');
+end;
+if nl>max_lig_steps then
+ err_print('GLUEKERN with more than ',max_lig_steps,' commands cannot have further labels')
+@.GLUEKERN with more than...@>
+else begin char_tag[c]:=lig_tag; char_remainder[c]:=nl;
+ lk_step_ended:=false;
+ end;
+end
+
+@ @<Read a (glue) kerning step@>=
+begin lig_kern[nl].b0:=0; lig_kern[nl].b1:=get_byte;@/
+lig_kern[nl].b2:=kern_flag; 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)
+ else begin err_print('At most ',max_kerns,' different kerns are allowed');
+@.At most 5000 different kerns...@>
+ krn_ptr:=max_kerns-1;
+ end;
+ end;
+lig_kern[nl].b3:=krn_ptr;
+if nl=max_lig_steps then
+ err_print('GLUEKERN table should never exceed ',max_lig_steps,' LIG/KRN commands')
+@.GLUEKERN table should never...@>
+else incr(nl);
+lk_step_ended:=true;
+end
+
+@ @<Read a glue step@>=
+begin lig_kern[nl].b0:=0; lig_kern[nl].b1:=get_byte; lig_kern[nl].b2:=0;@/
+glue[3*ng+0]:=get_fix; glue[3*ng+1]:=get_fix; glue[3*ng+2]:=get_fix;
+krn_ptr:=0;
+while (glue[3*krn_ptr+0]<>glue[3*ng+0])or
+ (glue[3*krn_ptr+1]<>glue[3*ng+1])or
+ (glue[3*krn_ptr+2]<>glue[3*ng+2]) do incr(krn_ptr);
+if krn_ptr=ng then
+ begin if ng<256 then incr(ng)
+ else begin err_print('At most 256 different glues are allowed');
+ krn_ptr:=255;
+ end;
+ end;
+lig_kern[nl].b3:=krn_ptr;
+if nl=max_lig_steps then
+ err_print('GLUEKERN table should never exceed ',max_lig_steps,' GLUE/KRN commands')
+@.GLUEKERN table should never...@>
+else incr(nl);
+lk_step_ended:=true;
+end
+
+@ The |TYPE| command like |CHARACTER| command, but |TYPE| only use
+|CHARWD|, |CHARHT|, |CHARDP| and |CHARIT|
+
+@<Read Kanji character type list@>=
+begin c:=get_byte; {read the character type that is begin specified}
+if verbose then @<Print |c| in octal notation@>;
+while level=1 do
+ begin while cur_char=" " do get_next;
+ if cur_char="(" then @<Read a kanji property@>
+ else if cur_char=")" then skip_to_end_of_item
+ else junk_error;
+ end;
+if char_wd[c]=0 then char_wd[c]:=sort_in(width,0); {legitimatize c}
+finish_inner_property_list;
+end;
+
+@ @<Read a kanji 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>char_ic_code) then
+ flush_error('This property name doesn''t belong in a TYPE list')
+else begin case cur_code of
+ char_wd_code: char_wd[c]:=sort_in(width,get_fix);
+ 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);
+ end;@/
+ finish_the_property;
+ end;
+end
+
+@ Next codes used to get KANJI codes from \.{JPL} file.
+
+@<Read Kanji characters list in this type@>=
+begin type_num:=get_byte;
+if type_num=0 then
+ skip_error('You cannot list the chars in type 0. It is the default type')
+else begin repeat jis_code:=get_kanji;
+ if jis_code<0 then
+ err_print('Illegal characters. I was expecting a jis code or character')
+ else if jis_code=0 then { 0 signals |end_of_list| }
+ do_nothing
+ else if kanji_type[jis_to_index(jis_code)]>=0 then
+ err_print('jis code ', jis_code:1, ' is already in type ',
+ kanji_type[jis_to_index(jis_code)])
+ else
+ kanji_type[jis_to_index(jis_code)]:=type_num;
+ until jis_code=0;
+ skip_to_paren;
+ end
+end
+
+@ Next codes read and check direction. We can not decide |file_format| of
+metric file whether for yoko-kumi or tate-kumi, until have scan |DIRECTION|
+property (|dir_code| command).
+
+@<Read direction@>=
+begin while cur_char=" " do get_next;
+if cur_char="T" then
+ begin if verbose then print_ln('This is tatekumi format');
+ file_format:=vfm_format;
+ end
+else if cur_char="Y" then
+ begin if verbose then print_ln('This is yokokumi format');
+ file_format:=jfm_format;
+ end
+else err_print('The dir value should be "TATE" or "YOKO"');
+skip_to_paren;
+end
+
+@ Next codes used to write |kanji_type| to \.{JFM}.
+In the original JFM spec by ASCII Corporation, |jis_code| and |char_type|
+were packed into upper (2~bytes) and lower (2~bytes) halfword respectively.
+However, |char_type| is allowed only 0..255,
+so the upper byte of lower halfword was always 0.
+
+In the new JFM spec by texjporg, |jis_code| ``XXyyzz'' is packed into
+first 3~bytes in the form ``yy zz XX'', and |char_type| is packed into
+remaining 1~byte. The new spec is effectively upper compatible with
+the original, and it allows |jis_code| larger than 0x10000 (not really
+useful for me \.{pPLtoTF} but necessary for \.{upPLtoTF}).
+
+@<Output the kanji character type info@>=
+begin out_size(0); out_size(0); { the default }
+for kanji_type_index:=0 to max_kanji do
+ begin if kanji_type[kanji_type_index]>0 then
+ begin out_kanji_code(index_to_jis(kanji_type_index));
+ out(kanji_type[kanji_type_index]);
+ if verbose then begin
+ print('char index = ', kanji_type_index);
+ print(' (jis ');
+ print_jis_hex(index_to_jis(kanji_type_index));
+ print(') is type ');
+ print_octal(kanji_type[kanji_type_index]);
+ write_ln('');
+ end;
+ end;
+ end;
+end;
+
+@ We also need to define some routines which handling 2bytes characters.
+These routine is called from only |read_chars_in_type| command.
+
+The kanji jis code is taken from the |char_ext| and |char_code| values
+set by the user. The index into the |kanji_type| array is based on the
+kuten codes, with all unused codes removed and beginning at 0, not 0101.
+The |jis_to_index| is called from |chars_in_type| command.
+
+@<Declare kanji scanning routines@>=
+function get_next_raw:byte; {get next rawdata in buffer}
+begin while loc=limit do fill_buffer;
+incr(loc); get_next_raw:=buffer[loc];
+if multistrlen(ustringcast(buffer),loc+2,loc)=2 then cur_char:=" "
+else cur_char:=xord[buffer[loc]];
+end;
+@#
+function todig(@!ch:byte):byte; {convert character to number}
+begin if (ch>="A")and(ch<="F") then todig:=ch-"A"+10
+else if (ch>="0")and(ch<="9") then todig:=ch-"0"
+else begin skip_error('This expression is out of JIS-code encoding.');
+ todig:=0;
+ end;
+end;
+@#
+procedure print_jis_hex(jis_code:integer); {prints jiscode as four digits}
+var dig:array[0..3] of byte; {holds jis hex codes}
+i:byte; {index of array}
+begin dig[0]:=Hi(jis_code) div 16; dig[1]:=Hi(jis_code) mod 16;
+dig[2]:=Lo(jis_code) div 16; dig[3]:=Lo(jis_code) mod 16;
+for i:=0 to 3 do
+ if dig[i]<10 then print(dig[i]) else
+ case dig[i] of
+ 10: print('A'); 11: print('B'); 12: print('C');
+ 13: print('D'); 14: print('E'); 15: print('F');
+ end;
+end;
+@#
+function valid_jis_code(cx:integer):boolean;
+var @!first_byte,@!second_byte:integer; { jis code bytes }
+begin valid_jis_code:=true;
+first_byte:=cx div @'400; second_byte:=cx mod @'400;
+if (first_byte<@"21)
+ or((first_byte>@"28)and(first_byte<@"30))
+ or(first_byte>@"74) then valid_jis_code:=false;
+if (second_byte<@"21)or(second_byte>@"7E) then valid_jis_code:=false;
+end;
+@#
+function jis_to_index(jis:integer):integer;
+var @!first_byte,@!second_byte:integer; { jis code bytes }
+begin
+first_byte:=jis div @'400 -@"21;
+second_byte:=jis mod @'400 -@"21;
+if first_byte<8 then
+ jis_to_index:=first_byte*94+second_byte
+else { next |first_byte| start 16 }
+ jis_to_index:=(first_byte-7)*94+second_byte;
+end;
+@#
+function index_to_jis(ix:integer):integer;
+begin if ix<=8*94-1 then
+ index_to_jis:=(ix div 94 +@"21)*@'400+(ix mod 94 +@"21)
+else
+ index_to_jis:=((ix+7*94) div 94 +@"21)*@'400+((ix+7*94) mod 94 +@"21);
+end;
+@#
+function get_kanji:integer; {get kanji character code}
+var @!ch:byte;
+@!cx,@!jis_code:integer; {sixteen bits kanji character code}
+begin repeat ch:=get_next_raw; {|ch| is rawdata in buffer}
+until ch<>' '; {skip the blanks before the kanji code}
+if ch=')' then
+ begin decr(loc); jis_code:=0;
+ end
+else if (ch='J')or(ch='j') then
+ begin repeat ch:=get_next_raw;
+ until ch<>' '; {skip the blanks after the type code}
+ @<Scan a Kanji hexadecimal code@>;
+ jis_code:=toDVI(fromJIS(cx)); cur_char:=ch;
+ if not valid_jis_code(jis_code) then
+ err_print('jis code ', jis_code:1, ' is invalid');
+ end
+else if multistrlen(ustringcast(buffer), loc+2, loc)=2 then
+ begin jis_code:=toDVI(fromBUFF(ustringcast(buffer), loc+2, loc));
+ incr(loc); cur_char:=" ";
+ if not valid_jis_code(jis_code) then
+ err_print('jis code ', jis_code:1, ' is invalid');
+ end
+else jis_code:=-1;
+get_kanji:=jis_code;
+end;
+
+@ @<Scan a Kanji hex...@>=
+begin cx:=todig(xord[ch]);
+ incr(loc); ch:=xord[buffer[loc]];
+ while ((ch>="0")and(ch<="9"))or((ch>="A")and(ch<="F")) do
+ begin cx:=cx*16+todig(ch); {overflow might happen, but rare...}
+ incr(loc); ch:=xord[buffer[loc]];
+ end;
+ decr(loc); ch:=xord[buffer[loc]];
+ if cx>max_kanji_code then
+ begin skip_error('This value shouldn''t exceed jis code');
+ cx:=0; ch:=" ";
+ end;
+end
+
+@* Index.
+@z
diff --git a/Build/source/texk/web2c/ptexdir/ppltotf.test b/Build/source/texk/web2c/ptexdir/ppltotf.test
new file mode 100755
index 00000000000..095ff59916a
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ppltotf.test
@@ -0,0 +1,10 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+./ppltotf -verbose $srcdir/tests/cmr10 ptests/xcmr10 || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/ptex-base.ch b/Build/source/texk/web2c/ptexdir/ptex-base.ch
new file mode 100644
index 00000000000..c1b23f1c8c7
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptex-base.ch
@@ -0,0 +1,7480 @@
+% This is a change file for pTeX
+% By Sadayuki Tanaka and ASCII MEDIA WORKS.
+%
+% Thanks for :
+% Ryoichi Kurasawa (us009185@interramp.com),
+% Hisato Hamano,
+% Hiroto Kagotani (kagotani@in.it.okayama-u.ac.jp),
+% Takashi Kakiuchi (kakiuchi@sy6.isl.mei.co.jp),
+% Yoichi Kawabata (kawabata@canon.co.jp),
+% Makoto Kobayashi (makoto@lloem.fujidenki.co.jp),
+% Yoshihiro Aoki (aoki@tokyo-shoseki-ptg.co.jp),
+% Akira Kakuto (kakuto@fuk.kindai.ac.jp).
+% Koich Inoue (inoue@ma.ns.musashi-tech.ac.jp).
+%
+% (??/??/87) RKS jTeX 2.9 -- j1.0
+% (??/??/89) RKS jTeX 2.93 -- j1.3
+% (12/ 9/89) H_2 pTeX 2.93 j1.3 p1.0.1
+% (12/??/89) RKS jTeX 2.95 -- j1.5
+% (12/??/89) RKS jTeX 2.99 -- j1.5
+% (02/02/90) RKS jTeX 2.99 -- j1.6
+% (04/16/90) H_2 pTeX 2.99 j1.6 p1.0.3
+% (09/14/90) H_2 pTeX 2.99 j1.6 p1.0.9 -- pre-release
+% (10/29/90) H_2 Bug fix (p1.0.9a)
+% (01/21/92) H_2 jTeX 2.99 - j1.7
+% (01/21/92) H_2 pTeX 2.99 j1.7 p1.0.9F
+% (03/09/92) H_2 pTeX 2.99 j1.7 p1.0.9G jflag BUG
+% (03/20/95) KN pTeX p2.0 (based on 3.1415)
+% (09/08/95) KN pTeX p2.1
+% (09/20/95) KN pTeX p2.1.1
+% (11/21/95) KN pTeX p2.1.4
+% (08/27/97) KN pTeX p2.1.5 (based on 3.14159)
+% (02/26/98) KN pTeX p2.1.6
+% (03/19/98) KN pTeX p2.1.7
+% (03/26/98) KN pTeX p2.1.8 (Web2c 7.2)
+% (02/21/2000) KN pTeX p2.1.9 (Web2c 7.3.1)
+% (11/13/2000) KN pTeX p2.1.10
+% (05/22/2001) KN pTeX p2.1.11
+% (03/10/2001) KN pTeX p3.0 (modified BSD licence)
+% (09/02/2004) ST pTeX p3.1.4
+% (11/29/2004) KN pTeX p3.1.5
+% (12/13/2004) KN pTeX p3.1.8
+% (10/17/2005) ST pTeX p3.1.9
+% (07/18/2006) ST pTeX p3.1.10
+% (08/17/2009) ST pTeX p3.1.11
+% (05/23/2010) AK Bug fix by Hironori Kitagawa.
+% (31/12/2010) AK Bug fix and accent Kanji by Hironori Kitagawa.
+% (19/01/2011) PB Let \lastkern etc act through disp node.
+% (15/04/2011) PB pTeX p3.2 Add \ifdbox and \ifddir
+% (2011-08-18) PB Bug fix by Hironori Kitagawa.
+% (2012-05-11) PB pTeX p3.3
+% (2013-04-09) PB pTeX p3.4 (TL 2013)
+% (2014-04-17) KB pTeX p3.5 (TL 2014)
+% (2014-03-15) KB pTeX p3.6 (TL 2015)
+% (2015-09-10) AK pTeX p3.7 Bug fix by Hironori Kitagawa in flushing choice node.
+% (2016-03-04) AK Hironori Kitagawa added new primitives to improve typesetting
+% with non-vanishing \ybaselineshift.
+% (2016-06-06) AK Hironori Kitagawa fixed a bug in check_box(box_p:pointer).
+% pTeX p3.7.1.
+% (2017-09-07) HK pTeX p3.7.2 More restrictions on direction change commands.
+% (2018-01-21) HK Added \ptexversion primitive and co. pTeX p3.8.
+% (2018-04-14) HK pTeX p3.8.1 Bug fix for discontinuous KINSOKU table.
+% (2019-02-03) HK pTeX p3.8.2 Change \inhibitglue, add \disinhibitglue.
+% (2019-10-14) HY pTeX p3.8.3 Allow getting \kansujichar.
+% (2021-02-18) HK pTeX p3.9.0. Add \ifjfont and \iftfont (in 2020-02-06, by HY),
+% Bug fix for getting \kansujichar,
+% based on TeX 3.141592653
+
+@x
+% Here is TeX material that gets inserted after \input webmac
+@y
+% Here is TeX material that gets inserted after \input webmac
+\def\pTeX{p\kern-.15em\TeX}
+@z
+
+@x [1.2] l.200 - pTeX:
+@d banner==TeX_banner
+@d banner_k==TeX_banner_k
+@y
+@d pTeX_version=3
+@d pTeX_minor_version=9
+@d pTeX_revision==".0"
+@d pTeX_version_string=='-p3.9.0' {current \pTeX\ version}
+@#
+@d pTeX_banner=='This is pTeX, Version 3.141592653',pTeX_version_string
+@d pTeX_banner_k==pTeX_banner
+ {printed when \pTeX\ starts}
+@#
+@d banner==pTeX_banner
+@d banner_k==pTeX_banner_k
+@z
+
+@x [2.??] l.586 - pTeX:
+@!ASCII_code=0..255; {eight-bit numbers}
+@y
+@!ASCII_code=0..255; {eight-bit numbers}
+@!KANJI_code=0..65535; {sixteen-bit numbers}
+@z
+
+@x [3.??] l.870 - pTeX:
+@!eight_bits=0..255; {unsigned one-byte quantity}
+@y
+@!eight_bits=0..255; {unsigned one-byte quantity}
+@!sixteen_bits=0..65535; {unsigned two-bytes quantity}
+@z
+
+@x [3.??] l.891 - pTeX:
+@ All of the file opening functions are defined in C.
+@y
+@ All of the file opening functions are defined in C.
+
+@ Kanji code handling.
+@z
+
+@x [4.47] l.1325 - pTeX:
+@!init function get_strings_started:boolean; {initializes the string pool,
+ but returns |false| if something goes wrong}
+label done,exit;
+var k,@!l:0..255; {small indices or counters}
+@y
+@!init function get_strings_started:boolean; {initializes the string pool,
+ but returns |false| if something goes wrong}
+label done,exit;
+var k,@!l:KANJI_code; {small indices or counters}
+@z
+
+@x [4.49] l.1384 - pTeX:
+@<Character |k| cannot be printed@>=
+ (k<" ")or(k>"~")
+@y
+@<Character |k| cannot be printed@>=
+ not (ismultiprn(k) or xprn[k])
+@z
+
+@x [5.54] l.1514 - pTeX: Global variables
+@!trick_buf:array[0..ssup_error_line] of ASCII_code; {circular buffer for
+ pseudoprinting}
+@y
+@!trick_buf:array[0..ssup_error_line] of ASCII_code; {circular buffer for
+ pseudoprinting}
+@!trick_buf2:array[0..ssup_error_line] of 0..2; {pTeX: buffer for KANJI}
+@!kcode_pos: 0..2; {pTeX: denotes whether first byte or second byte of KANJI}
+@!prev_char: ASCII_code;
+@z
+
+@x [5.55] l.1519 - pTeX: Initialize the kcode_pos
+@ @<Initialize the output routines@>=
+selector:=term_only; tally:=0; term_offset:=0; file_offset:=0;
+@y
+@ @<Initialize the output routines@>=
+selector:=term_only; tally:=0; term_offset:=0; file_offset:=0;
+kcode_pos:=0;
+@z
+
+@x [5.57] l.1538 - pTeX: kcode_pos
+procedure print_ln; {prints an end-of-line}
+begin case selector of
+term_and_log: begin wterm_cr; wlog_cr;
+ term_offset:=0; file_offset:=0;
+ end;
+log_only: begin wlog_cr; file_offset:=0;
+ end;
+term_only: begin wterm_cr; term_offset:=0;
+ end;
+no_print,pseudo,new_string: do_nothing;
+othercases write_ln(write_file[selector])
+endcases;@/
+@y
+procedure print_ln; {prints an end-of-line}
+begin case selector of
+term_and_log: begin
+ if kcode_pos=1 then begin wterm(' '); wlog(' '); end;
+ wterm_cr; wlog_cr; term_offset:=0; file_offset:=0;
+ end;
+log_only: begin if kcode_pos=1 then wlog(' ');
+ wlog_cr; file_offset:=0;
+ end;
+term_only: begin if kcode_pos=1 then wterm(' ');
+ wterm_cr; term_offset:=0;
+ end;
+no_print,pseudo,new_string: do_nothing;
+othercases write_ln(write_file[selector])
+endcases;@/
+kcode_pos:=0;
+@z
+
+@x [5.58] l.1557 - pTeX: kcode_pos, trick_buf2
+procedure print_char(@!s:ASCII_code); {prints a single character}
+label exit;
+begin if @<Character |s| is the current new-line character@> then
+ if selector<pseudo then
+ begin print_ln; return;
+ end;
+case selector of
+term_and_log: begin wterm(xchr[s]); wlog(xchr[s]);
+ incr(term_offset); incr(file_offset);
+ if term_offset=max_print_line then
+ begin wterm_cr; term_offset:=0;
+ end;
+ if file_offset=max_print_line then
+ begin wlog_cr; file_offset:=0;
+ end;
+ end;
+log_only: begin wlog(xchr[s]); incr(file_offset);
+ if file_offset=max_print_line then print_ln;
+ end;
+term_only: begin wterm(xchr[s]); incr(term_offset);
+ if term_offset=max_print_line then print_ln;
+ end;
+no_print: do_nothing;
+pseudo: if tally<trick_count then trick_buf[tally mod error_line]:=s;
+@y
+procedure print_char(@!s:ASCII_code); {prints a single character}
+label exit; {label is not used but nonetheless kept (for other changes?)}
+begin if @<Character |s| is the current new-line character@> then
+ if selector<pseudo then
+ begin print_ln; return;
+ end;
+if kcode_pos=1 then kcode_pos:=2
+else if iskanji1(xchr[s]) then
+ begin kcode_pos:=1;
+ if (selector=term_and_log)or(selector=log_only) then
+ if file_offset>=max_print_line-1 then
+ begin wlog_cr; file_offset:=0;
+ end;
+ if (selector=term_and_log)or(selector=term_only) then
+ if term_offset>=max_print_line-1 then
+ begin wterm_cr; term_offset:=0;
+ end;
+ end
+else kcode_pos:=0;
+case selector of
+term_and_log: begin wterm(xchr[s]); incr(term_offset);
+ if term_offset=max_print_line then
+ begin wterm_cr; term_offset:=0;
+ end;
+ wlog(xchr[s]); incr(file_offset);
+ if file_offset=max_print_line then
+ begin wlog_cr; file_offset:=0;
+ end;
+ end;
+log_only: begin wlog(xchr[s]); incr(file_offset);
+ if file_offset=max_print_line then print_ln;
+ end;
+term_only: begin wterm(xchr[s]); incr(term_offset);
+ if term_offset=max_print_line then print_ln;
+ end;
+no_print: do_nothing;
+pseudo: if tally<trick_count then
+ begin trick_buf[tally mod error_line]:=s;
+ trick_buf2[tally mod error_line]:=kcode_pos;
+ end;
+@z
+
+@x l.1603 - pTeX
+procedure print(@!s:integer); {prints string |s|}
+label exit;
+var j:pool_pointer; {current character code position}
+@!nl:integer; {new-line character to restore}
+begin if s>=str_ptr then s:="???" {this can't happen}
+@.???@>
+else if s<256 then
+ if s<0 then s:="???" {can't happen}
+ else begin if selector>pseudo then
+ begin print_char(s); return; {internal strings are not expanded}
+ end;
+ if (@<Character |s| is the current new-line character@>) then
+ if selector<pseudo then
+ begin print_ln; return;
+ end;
+ nl:=new_line_char; new_line_char:=-1;
+ {temporarily disable new-line character}
+ j:=str_start[s];
+ while j<str_start[s+1] do
+ begin print_char(so(str_pool[j])); incr(j);
+ end;
+ new_line_char:=nl; return;
+ end;
+j:=str_start[s];
+while j<str_start[s+1] do
+ begin print_char(so(str_pool[j])); incr(j);
+ end;
+exit:end;
+@y
+procedure print(@!s:integer); {prints string |s|}
+label exit;
+var j:pool_pointer; {current character code position}
+@!nl:integer; {new-line character to restore}
+begin if s>=str_ptr then s:="???" {this can't happen}
+@.???@>
+else if s<256 then
+ if s<0 then s:="???" {can't happen}
+ else begin if selector>pseudo then
+ begin print_char(s); return; {internal strings are not expanded}
+ end;
+ if (@<Character |s| is the current new-line character@>) then
+ if selector<pseudo then
+ begin print_ln; return;
+ end;
+ nl:=new_line_char; new_line_char:=-1;
+ {temporarily disable new-line character}
+ j:=str_start[s];
+ while j<str_start[s+1] do
+ begin print_char(so(str_pool[j])); incr(j);
+ end;
+ new_line_char:=nl; return;
+ end;
+j:=str_start[s];
+while j<str_start[s+1] do
+ begin print_char(so(str_pool[j])); incr(j);
+ end;
+exit:end;
+@z
+
+@x [5.61] l.1656 - pTeX:
+@<Initialize the output...@>=
+if src_specials_p or file_line_error_style_p or parse_first_line_p then
+ wterm(banner_k)
+else
+ wterm(banner);
+@y
+@<Initialize the output...@>=
+if src_specials_p or file_line_error_style_p or parse_first_line_p then
+ wterm(banner_k)
+else
+ wterm(banner);
+ wterm(' (');
+ wterm(conststringcast(get_enc_string));
+ wterm(')');
+@z
+
+@x
+@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
+@y
+@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
+@d max_cjk_val=@"10000
+@z
+
+@x [8.111] l.2436 - pTeX: check hi/ho
+ (mem_top+sup_main_memory>=max_halfword) then bad:=14;
+@y
+ (mem_top+sup_main_memory>=max_halfword)or@|
+ (hi(0)<>0) then bad:=14;
+@z
+
+@x [8.112] l.2450 - pTeX: hi/ho
+sufficiently large.
+@y
+sufficiently large and this is required for \pTeX.
+@z
+
+@x [8.112] l.2588 - pTeX:
+@d ho(#)==# {to take a sixteen-bit item from a halfword}
+@y
+@d ho(#)==# {to take a sixteen-bit item from a halfword}
+@d KANJI(#)==# {pTeX: to output a KANJI code}
+@d tokanji(#)==# {pTeX: to take a KANJI code from a halfword}
+@d tonum(#)==# {pTeX: to put a KANJI code into a halfword}
+@z
+
+@x [10.135] l.2895 - pTeX: box_dir
+|fil|, |fill|, or |filll|). The |subtype| field is not used.
+@y
+|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX.
+In \pTeX\ the |subtype| field records the box direction |box_dir|.
+@z
+
+@x [10.135] l.2897 - pTeX: box_dir, space_ptr, xspace_ptr
+@d hlist_node=0 {|type| of hlist nodes}
+@d box_node_size=7 {number of words to allocate for a box node}
+@d width_offset=1 {position of |width| field in a box node}
+@d depth_offset=2 {position of |depth| field in a box node}
+@d height_offset=3 {position of |height| field in a box node}
+@d width(#) == mem[#+width_offset].sc {width of the box, in sp}
+@d depth(#) == mem[#+depth_offset].sc {depth of the box, in sp}
+@d height(#) == mem[#+height_offset].sc {height of the box, in sp}
+@d shift_amount(#) == mem[#+4].sc {repositioning distance, in sp}
+@d list_offset=5 {position of |list_ptr| field in a box node}
+@d list_ptr(#) == link(#+list_offset) {beginning of the list inside the box}
+@d glue_order(#) == subtype(#+list_offset) {applicable order of infinity}
+@d glue_sign(#) == type(#+list_offset) {stretching or shrinking}
+@d normal=0 {the most common case when several cases are named}
+@d stretching = 1 {glue setting applies to the stretch components}
+@d shrinking = 2 {glue setting applies to the shrink components}
+@d glue_offset = 6 {position of |glue_set| in a box node}
+@d glue_set(#) == mem[#+glue_offset].gr
+ {a word of type |glue_ratio| for glue setting}
+@y
+@d hlist_node=0 {|type| of hlist nodes}
+@d box_node_size=8 {number of words to allocate for a box node}
+@#
+@d dir_max = 5 {the maximal absolute value of direction}
+@d box_dir(#) == (qo(subtype(#))-dir_max) {direction of a box}
+@d set_box_dir(#) == subtype(#):=set_box_dir_end
+@d set_box_dir_end(#) == qi(#)+dir_max
+@#
+@d dir_default = 0 {direction of the box, default Left to Right}
+@d dir_dtou = 1 {direction of the box, Bottom to Top}
+@d dir_tate = 3 {direction of the box, Top to Bottom}
+@d dir_yoko = 4 {direction of the box, equal default}
+@d any_dir == dir_yoko,dir_tate,dir_dtou
+@#
+@d width_offset=1 {position of |width| field in a box node}
+@d depth_offset=2 {position of |depth| field in a box node}
+@d height_offset=3 {position of |height| field in a box node}
+@d width(#) == mem[#+width_offset].sc {width of the box, in sp}
+@d depth(#) == mem[#+depth_offset].sc {depth of the box, in sp}
+@d height(#) == mem[#+height_offset].sc {height of the box, in sp}
+@d shift_amount(#) == mem[#+4].sc {repositioning distance, in sp}
+@d list_offset=5 {position of |list_ptr| field in a box node}
+@d list_ptr(#) == link(#+list_offset) {beginning of the list inside the box}
+@d glue_order(#) == subtype(#+list_offset) {applicable order of infinity}
+@d glue_sign(#) == type(#+list_offset) {stretching or shrinking}
+@d normal=0 {the most common case when several cases are named}
+@d stretching = 1 {glue setting applies to the stretch components}
+@d shrinking = 2 {glue setting applies to the shrink components}
+@d glue_offset = 6 {position of |glue_set| in a box node}
+@d glue_set(#) == mem[#+glue_offset].gr
+ {a word of type |glue_ratio| for glue setting}
+@d space_offset = 7 {position of |glue_set| in a box node}
+@d space_ptr(#) == link(#+space_offset)
+@d xspace_ptr(#) == info(#+space_offset)
+@z
+
+@x [10.136] l.3037 - pTeX: space_ptr, xspace_ptr
+width(p):=0; depth(p):=0; height(p):=0; shift_amount(p):=0; list_ptr(p):=null;
+glue_sign(p):=normal; glue_order(p):=normal; set_glue_ratio_zero(glue_set(p));
+@y
+width(p):=0; depth(p):=0; height(p):=0; shift_amount(p):=0; list_ptr(p):=null;
+glue_sign(p):=normal; glue_order(p):=normal; set_glue_ratio_zero(glue_set(p));
+space_ptr(p):=zero_glue; xspace_ptr(p):=zero_glue; set_box_dir(p)(dir_default);
+add_glue_ref(zero_glue); add_glue_ref(zero_glue);
+@z
+
+@x [10.137] l.3045 - pTeX: direction change node
+@d vlist_node=1 {|type| of vlist nodes}
+@y
+@d vlist_node=1 {|type| of vlist nodes}
+
+@ A |dir_node| stands for direction change.
+
+@d dir_node=2 {|type| of dir nodes}
+
+@p function new_dir_node(b:pointer; dir:eight_bits):pointer;
+var p:pointer; {the new node}
+begin if type(b)>vlist_node then confusion("new_dir_node:not box");
+p:=new_null_box; type(p):=dir_node; set_box_dir(p)(dir);
+case abs(box_dir(b)) of
+ dir_yoko: @<Yoko to other direction@>;
+ dir_tate: @<Tate to other direction@>;
+ dir_dtou: @<DtoU to other direction@>;
+ othercases confusion("new_dir_node:illegal dir");
+endcases;
+link(b):=null; list_ptr(p):=b;
+new_dir_node:=p;
+end;
+
+@ @<Yoko to other direction@>=
+ case dir of
+ dir_tate: begin width(p):=height(b)+depth(b);
+ depth(p):=width(b)/2; height(p):=width(b)-depth(p);
+ end;
+ dir_dtou: begin width(p):=height(b)+depth(b);
+ depth(p):=0; height(p):=width(b);
+ end;
+ othercases confusion("new_dir_node:y->?");
+ endcases
+
+@ @<Tate to other direction@>=
+ case dir of
+ dir_yoko: begin width(p):=height(b)+depth(b);
+ depth(p):=0; height(p):=width(b);
+ end;
+ dir_dtou: begin width(p):=width(b);
+ depth(p):=height(b); height(p):=depth(b);
+ end;
+ othercases confusion("new_dir_node:t->?");
+ endcases
+
+@ @<DtoU to other direction@>=
+ case dir of
+ dir_yoko: begin width(p):=height(b)+depth(b);
+ depth(p):=0; height(p):=width(b);
+ end;
+ dir_tate: begin width(p):=width(b);
+ depth(p):=height(b); height(p):=depth(b);
+ end;
+ othercases confusion("new_dir_node:d->?");
+ endcases
+@z
+
+@x [10.138] l.3054 - pTeX: renumber rule_node
+@d rule_node=2 {|type| of rule nodes}
+@y
+@d rule_node=3 {|type| of rule nodes}
+@z
+
+@x [10.140] l.3083 - pTeX: renumber ins_node, add ins_dirh field
+@d ins_node=3 {|type| of insertion nodes}
+@d ins_node_size=5 {number of words to allocate for an insertion}
+@d float_cost(#)==mem[#+1].int {the |floating_penalty| to be used}
+@d ins_ptr(#)==info(#+4) {the vertical list to be inserted}
+@d split_top_ptr(#)==link(#+4) {the |split_top_skip| to be used}
+@y
+@d ins_node=4 {|type| of insertion nodes}
+@d ins_node_size=6 {number of words to allocate for an insertion}
+@d float_cost(#)==mem[#+1].int {the |floating_penalty| to be used}
+@d ins_ptr(#)==info(#+4) {the vertical list to be inserted}
+@d split_top_ptr(#)==link(#+4) {the |split_top_skip| to be used}
+@d ins_dir(#)==(subtype(#+5)-dir_max) {direction of |ins_node|}
+@d set_ins_dir(#) == subtype(#+5):=set_box_dir_end
+@z
+
+@x [10.141] l.3089 - pTeX: disp_node
+@ A |mark_node| has a |mark_ptr| field that points to the reference count
+@y
+@ A |disp_node| has a |disp_dimen| field that points to the displacement
+distance of the baselineshift between Latin characters and Kanji chatacters.
+
+@d disp_node=5 {|type| of a displace node}
+@d disp_dimen(#)==mem[#+1].sc
+
+@ A |mark_node| has a |mark_ptr| field that points to the reference count
+@z
+
+@x [10.140] l.3095 - pTeX: renumber nodes
+@d mark_node=4 {|type| of a mark node}
+@y
+@d mark_node=6 {|type| of a mark node}
+@z
+
+@x [10.141] l.3105 - pTeX: renumber nodes
+@d adjust_node=5 {|type| of an adjust node}
+@y
+@d adjust_node=7 {|type| of an adjust node}
+@z
+
+@x [10.142] l.3122 - pTeX: renumber nodes
+@d ligature_node=6 {|type| of a ligature node}
+@y
+@d ligature_node=8 {|type| of a ligature node}
+@z
+
+@x [10.145] l.3163 - pTeX: renumber nodes
+@d disc_node=7 {|type| of a discretionary node}
+@y
+@d disc_node=9 {|type| of a discretionary node}
+@z
+
+@x [10.146] l.3191 - pTeX: renumber nodes
+@d whatsit_node=8 {|type| of special extension nodes}
+@y
+@d whatsit_node=10 {|type| of special extension nodes}
+@z
+
+@x [10.147] l.3198 - pTeX: renumber nodes
+@d math_node=9 {|type| of a math node}
+@y
+@d math_node=11 {|type| of a math node}
+@z
+
+@x [10.150] l.3244 - pTeX: renumber nodes
+@d glue_node=10 {|type| of node that points to a glue specification}
+@y
+@d glue_node=12 {|type| of node that points to a glue specification}
+@z
+
+@x [10.155] l.3342 - pTeX: renumber nodes
+@d kern_node=11 {|type| of a kern node}
+@d explicit=1 {|subtype| of kern nodes from \.{\\kern} and \.{\\/}}
+@d acc_kern=2 {|subtype| of kern nodes from accents}
+@y
+@d kern_node=13 {|type| of a kern node}
+@d explicit=1 {|subtype| of kern nodes from \.{\\kern}}
+@d acc_kern=2 {|subtype| of kern nodes from accents}
+@d ita_kern=3 {|subtype| of kern nodes from \.{\\/}}
+@z
+
+@x [10.157] l.3363 - pTeX: renumber nodes
+@d penalty_node=12 {|type| of a penalty node}
+@y
+@d penalty_node=14 {|type| of a penalty node}
+@d widow_pena=1 {|subtype| of penalty nodes from \.{\\jcharwidowpenalty}}
+@d kinsoku_pena=2 {|subtype| of penalty nodes from kinsoku}
+@z
+
+@x [10.159] l.3392 - pTeX: renumber nodes
+@d unset_node=13 {|type| for an unset node}
+@y
+@d unset_node=15 {|type| for an unset node}
+@z
+
+@x [10.160] l.3397 - pTeX: renumber nodes
+@ In fact, there are still more types coming. When we get to math formula
+processing we will see that a |style_node| has |type=14|; and a number
+of larger type codes will also be defined, for use in math mode only.
+@y
+@ In fact, there are still more types coming. When we get to math formula
+processing we will see that a |style_node| has |type=16|; and a number
+of larger type codes will also be defined, for use in math mode only.
+@z
+
+@x [12.174] l.3662 - pTeX: print KANJI
+ print_ASCII(qo(character(p)));
+@y
+ if font_dir[font(p)]<>dir_default then
+ begin p:=link(p); print_kanji(info(p));
+ end
+ else print_ASCII(qo(character(p)));
+@z
+
+@x [12.175] l.3672 - pTeX: Print a short indication of dir_nodes.
+hlist_node,vlist_node,ins_node,whatsit_node,mark_node,adjust_node,
+ unset_node: print("[]");
+@y
+hlist_node,vlist_node,dir_node,ins_node,whatsit_node,
+ mark_node,adjust_node,unset_node: print("[]");
+@z
+
+@x [12.176] l.3698 - pTeX: print KANJI.
+ print_char(" "); print_ASCII(qo(character(p)));
+@y
+ print_char(" ");
+ if font_dir[font(p)]<>dir_default then
+ begin p:=link(p); print_kanji(info(p));
+ end
+ else print_ASCII(qo(character(p)));
+@z
+
+@x [12.183] l.3815 - pTeX: display char_node and disp_node.
+if is_char_node(p) then print_font_and_char(p)
+else case type(p) of
+ hlist_node,vlist_node,unset_node: @<Display box |p|@>;
+ rule_node: @<Display rule |p|@>;
+ ins_node: @<Display insertion |p|@>;
+ whatsit_node: @<Display the whatsit node |p|@>;
+@y
+if is_char_node(p) then
+ begin print_font_and_char(p);
+ if font_dir[font(p)]<>dir_default then p:=link(p)
+ end
+else case type(p) of
+ hlist_node,vlist_node,dir_node,unset_node: @<Display box |p|@>;
+ rule_node: @<Display rule |p|@>;
+ ins_node: @<Display insertion |p|@>;
+ whatsit_node: @<Display the whatsit node |p|@>;
+ disp_node: begin print_esc("displace "); print_scaled(disp_dimen(p));
+ end;
+@z
+
+@x [12.184] l.3833 - pTeX: display dir_node.
+@ @<Display box |p|@>=
+begin if type(p)=hlist_node then print_esc("h")
+else if type(p)=vlist_node then print_esc("v")
+else print_esc("unset");
+@y
+@ @<Display box |p|@>=
+begin case type(p) of
+ hlist_node: print_esc("h");
+ vlist_node: print_esc("v");
+ dir_node: print_esc("dir");
+ othercases print_esc("unset")
+ endcases@/;
+@z
+@x [12.184] l.3842 - pTeX: display dir_node.
+ if shift_amount(p)<>0 then
+ begin print(", shifted "); print_scaled(shift_amount(p));
+ end;
+@y
+ if shift_amount(p)<>0 then
+ begin print(", shifted "); print_scaled(shift_amount(p));
+ end;
+@z
+@x [12.184] l.3845 - pTeX: display dir_node.
+ end;
+@y
+ if box_dir(p)<>dir_default then
+ begin print(", "); print_direction(box_dir(p));
+ end;
+ end;
+@z
+
+@x [12.188] l.3896 - pTeX: Display insertion and ins_dir.
+@ @<Display insertion |p|@>=
+begin print_esc("insert"); print_int(qo(subtype(p)));
+print(", natural size "); print_scaled(height(p));
+@y
+@ @<Display insertion |p|@>=
+begin print_esc("insert"); print_int(qo(subtype(p)));
+print_dir(abs(ins_dir(p)));
+print(", natural size "); print_scaled(height(p));
+@z
+
+@x [12.194] l.3961 - pTeX: Display penalty usage
+@ @<Display penalty |p|@>=
+begin print_esc("penalty "); print_int(penalty(p));
+end
+@y
+@ @<Display penalty |p|@>=
+begin print_esc("penalty "); print_int(penalty(p));
+if subtype(p)=widow_pena then print("(for \jcharwidowpenalty)")
+else if subtype(p)=kinsoku_pena then print("(for kinsoku)");
+end
+@z
+
+@x [13.202] l.4043 - pTeX: dir_node, disp_node
+ hlist_node,vlist_node,unset_node: begin flush_node_list(list_ptr(p));
+ free_node(p,box_node_size); goto done;
+ end;
+@y
+ hlist_node,vlist_node,dir_node,unset_node:
+ begin flush_node_list(list_ptr(p));
+ fast_delete_glue_ref(space_ptr(p));
+ fast_delete_glue_ref(xspace_ptr(p));
+ free_node(p,box_node_size); goto done;
+ end;
+@z
+
+@x [13.202] l.4056 - pTeX:
+ kern_node,math_node,penalty_node: do_nothing;
+@y
+ disp_node,
+ kern_node,math_node,penalty_node: do_nothing;
+@z
+
+@x [14.206] l.4121 - pTeX: space_ptr, xspace_ptr, dir_node, disp_node
+@ @<Case statement to copy...@>=
+@y
+@ @<Case statement to copy...@>=
+@z
+@x [14.206] l.4123
+hlist_node,vlist_node,unset_node: begin r:=get_node(box_node_size);
+ mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last two words}
+@y
+dir_node,
+hlist_node,vlist_node,unset_node: begin r:=get_node(box_node_size);
+ mem[r+7]:=mem[p+7];
+ mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last three words}
+ add_glue_ref(space_ptr(r)); add_glue_ref(xspace_ptr(r));
+@z
+@x [14.206] l.4130
+ins_node: begin r:=get_node(ins_node_size); mem[r+4]:=mem[p+4];
+ add_glue_ref(split_top_ptr(p));
+ ins_ptr(r):=copy_node_list(ins_ptr(p)); {this affects |mem[r+4]|}
+ words:=ins_node_size-1;
+ end;
+@y
+ins_node: begin r:=get_node(ins_node_size);
+ mem[r+5]:=mem[p+5]; mem[r+4]:=mem[p+4];
+ add_glue_ref(split_top_ptr(p));
+ ins_ptr(r):=copy_node_list(ins_ptr(p)); {this affects |mem[r+4]|}
+ words:=ins_node_size-2;
+ end;
+@z
+
+@x [14.206] l.4140 - pTeX: disp_node
+kern_node,math_node,penalty_node: begin r:=get_node(small_node_size);
+@y
+disp_node,
+kern_node,math_node,penalty_node: begin r:=get_node(small_node_size);
+@z
+
+@x [15.207] l.4201 - pTeX: Add kanji, kana, other_kchar category codes.
+@d max_char_code=15 {largest catcode for individual characters}
+@y
+@d kanji=16 {kanji}
+@d kana=17 {hiragana, katakana, alphabet}
+@d other_kchar=18 {kanji codes}
+@d max_char_code=18 {largest catcode for individual characters}
+@z
+
+@x [15.208] l.4207 - pTeX: Add inhibit_glue, chg_dir.
+@d char_num=16 {character specified numerically ( \.{\\char} )}
+@d math_char_num=17 {explicit math code ( \.{\\mathchar} )}
+@d mark=18 {mark definition ( \.{\\mark} )}
+@d xray=19 {peek inside of \TeX\ ( \.{\\show}, \.{\\showbox}, etc.~)}
+@d make_box=20 {make a box ( \.{\\box}, \.{\\copy}, \.{\\hbox}, etc.~)}
+@d hmove=21 {horizontal motion ( \.{\\moveleft}, \.{\\moveright} )}
+@d vmove=22 {vertical motion ( \.{\\raise}, \.{\\lower} )}
+@d un_hbox=23 {unglue a box ( \.{\\unhbox}, \.{\\unhcopy} )}
+@d un_vbox=24 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )}
+@y
+@d char_num=max_char_code+1 {character specified numerically ( \.{\\char} )}
+@d math_char_num=char_num+1 {explicit math code ( \.{\\mathchar} )}
+@d mark=math_char_num+1 {mark definition ( \.{\\mark} )}
+@d xray=mark+1 {peek inside of \TeX\ ( \.{\\show}, \.{\\showbox}, etc.~)}
+@d make_box=xray+1 {make a box ( \.{\\box}, \.{\\copy}, \.{\\hbox}, etc.~)}
+@d hmove=make_box+1 {horizontal motion ( \.{\\moveleft}, \.{\\moveright} )}
+@d vmove=hmove+1 {vertical motion ( \.{\\raise}, \.{\\lower} )}
+@d un_hbox=vmove+1 {unglue a box ( \.{\\unhbox}, \.{\\unhcopy} )}
+@d un_vbox=un_hbox+1 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )}
+@z
+@x [15.208] l.4207 - pTeX: Add inhibit_glue, chg_dir.
+@d remove_item=25 {nullify last item ( \.{\\unpenalty},
+ \.{\\unkern}, \.{\\unskip} )}
+@d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
+@d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
+@d mskip=28 {math glue ( \.{\\mskip} )}
+@d kern=29 {fixed space ( \.{\\kern} )}
+@d mkern=30 {math kern ( \.{\\mkern} )}
+@d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
+@d halign=32 {horizontal table alignment ( \.{\\halign} )}
+@d valign=33 {vertical table alignment ( \.{\\valign} )}
+@y
+@d remove_item=un_vbox+1 {nullify last item ( \.{\\unpenalty},
+ \.{\\unkern}, \.{\\unskip} )}
+@d hskip=remove_item+1 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
+@d vskip=hskip+1 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
+@d mskip=vskip+1 {math glue ( \.{\\mskip} )}
+@d kern=mskip+1 {fixed space ( \.{\\kern} )}
+@d mkern=kern+1 {math kern ( \.{\\mkern} )}
+@d leader_ship=mkern+1 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
+@d halign=leader_ship+1 {horizontal table alignment ( \.{\\halign} )}
+@d valign=halign+1 {vertical table alignment ( \.{\\valign} )}
+@z
+@x [15.208] l.4207 - pTeX: Add inhibit_glue, chg_dir.
+@d no_align=34 {temporary escape from alignment ( \.{\\noalign} )}
+@d vrule=35 {vertical rule ( \.{\\vrule} )}
+@d hrule=36 {horizontal rule ( \.{\\hrule} )}
+@d insert=37 {vlist inserted in box ( \.{\\insert} )}
+@d vadjust=38 {vlist inserted in enclosing paragraph ( \.{\\vadjust} )}
+@d ignore_spaces=39 {gobble |spacer| tokens ( \.{\\ignorespaces} )}
+@d after_assignment=40 {save till assignment is done ( \.{\\afterassignment} )}
+@d after_group=41 {save till group is done ( \.{\\aftergroup} )}
+@d break_penalty=42 {additional badness ( \.{\\penalty} )}
+@d start_par=43 {begin paragraph ( \.{\\indent}, \.{\\noindent} )}
+@d ital_corr=44 {italic correction ( \.{\\/} )}
+@d accent=45 {attach accent in text ( \.{\\accent} )}
+@d math_accent=46 {attach accent in math ( \.{\\mathaccent} )}
+@d discretionary=47 {discretionary texts ( \.{\\-}, \.{\\discretionary} )}
+@d eq_no=48 {equation number ( \.{\\eqno}, \.{\\leqno} )}
+@d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )}
+@y
+@d no_align=valign+1 {temporary escape from alignment ( \.{\\noalign} )}
+@d vrule=no_align+1 {vertical rule ( \.{\\vrule} )}
+@d hrule=vrule+1 {horizontal rule ( \.{\\hrule} )}
+@d insert=hrule+1 {vlist inserted in box ( \.{\\insert} )}
+@d vadjust=insert+1 {vlist inserted in enclosing paragraph ( \.{\\vadjust} )}
+@d ignore_spaces=vadjust+1 {gobble |spacer| tokens ( \.{\\ignorespaces} )}
+@d after_assignment=ignore_spaces+1 {save till assignment is done ( \.{\\afterassignment} )}
+@d after_group=after_assignment+1 {save till group is done ( \.{\\aftergroup} )}
+@d break_penalty=after_group+1 {additional badness ( \.{\\penalty} )}
+@d start_par=break_penalty+1 {begin paragraph ( \.{\\indent}, \.{\\noindent} )}
+@d ital_corr=start_par+1 {italic correction ( \.{\\/} )}
+@d accent=ital_corr+1 {attach accent in text ( \.{\\accent} )}
+@d math_accent=accent+1 {attach accent in math ( \.{\\mathaccent} )}
+@d discretionary=math_accent+1 {discretionary texts ( \.{\\-}, \.{\\discretionary} )}
+@d eq_no=discretionary+1 {equation number ( \.{\\eqno}, \.{\\leqno} )}
+@d left_right=eq_no+1 {variable delimiter ( \.{\\left}, \.{\\right} )}
+@z
+@x [15.208] l.4207 - pTeX: Add inhibit_glue, chg_dir.
+@d math_comp=50 {component of formula ( \.{\\mathbin}, etc.~)}
+@d limit_switch=51 {diddle limit conventions ( \.{\\displaylimits}, etc.~)}
+@d above=52 {generalized fraction ( \.{\\above}, \.{\\atop}, etc.~)}
+@d math_style=53 {style specification ( \.{\\displaystyle}, etc.~)}
+@d math_choice=54 {choice specification ( \.{\\mathchoice} )}
+@d non_script=55 {conditional math glue ( \.{\\nonscript} )}
+@d vcenter=56 {vertically center a vbox ( \.{\\vcenter} )}
+@d case_shift=57 {force specific case ( \.{\\lowercase}, \.{\\uppercase}~)}
+@d message=58 {send to user ( \.{\\message}, \.{\\errmessage} )}
+@d extension=59 {extensions to \TeX\ ( \.{\\write}, \.{\\special}, etc.~)}
+@d in_stream=60 {files for reading ( \.{\\openin}, \.{\\closein} )}
+@d begin_group=61 {begin local grouping ( \.{\\begingroup} )}
+@d end_group=62 {end local grouping ( \.{\\endgroup} )}
+@d omit=63 {omit alignment template ( \.{\\omit} )}
+@d ex_space=64 {explicit space ( \.{\\\ } )}
+@d no_boundary=65 {suppress boundary ligatures ( \.{\\noboundary} )}
+@d radical=66 {square root and similar signs ( \.{\\radical} )}
+@d end_cs_name=67 {end control sequence ( \.{\\endcsname} )}
+@d min_internal=68 {the smallest code that can follow \.{\\the}}
+@d char_given=68 {character code defined by \.{\\chardef}}
+@d math_given=69 {math code defined by \.{\\mathchardef}}
+@d last_item=70 {most recent item ( \.{\\lastpenalty},
+ \.{\\lastkern}, \.{\\lastskip} )}
+@d max_non_prefixed_command=70 {largest command code that can't be \.{\\global}}
+@y
+@d math_comp=left_right+1 {component of formula ( \.{\\mathbin}, etc.~)}
+@d limit_switch=math_comp+1 {diddle limit conventions ( \.{\\displaylimits}, etc.~)}
+@d above=limit_switch+1 {generalized fraction ( \.{\\above}, \.{\\atop}, etc.~)}
+@d math_style=above+1 {style specification ( \.{\\displaystyle}, etc.~)}
+@d math_choice=math_style+1 {choice specification ( \.{\\mathchoice} )}
+@d non_script=math_choice+1 {conditional math glue ( \.{\\nonscript} )}
+@d vcenter=non_script+1 {vertically center a vbox ( \.{\\vcenter} )}
+@d case_shift=vcenter+1 {force specific case ( \.{\\lowercase}, \.{\\uppercase}~)}
+@d message=case_shift+1 {send to user ( \.{\\message}, \.{\\errmessage} )}
+@d extension=message+1 {extensions to \TeX\ ( \.{\\write}, \.{\\special}, etc.~)}
+@d in_stream=extension+1 {files for reading ( \.{\\openin}, \.{\\closein} )}
+@d begin_group=in_stream+1 {begin local grouping ( \.{\\begingroup} )}
+@d end_group=begin_group+1 {end local grouping ( \.{\\endgroup} )}
+@d omit=end_group+1 {omit alignment template ( \.{\\omit} )}
+@d ex_space=omit+1 {explicit space ( \.{\\\ } )}
+@d no_boundary=ex_space+1 {suppress boundary ligatures ( \.{\\noboundary} )}
+@d radical=no_boundary+1 {square root and similar signs ( \.{\\radical} )}
+@d end_cs_name=radical+1 {end control sequence ( \.{\\endcsname} )}
+@d min_internal=end_cs_name+1 {the smallest code that can follow \.{\\the}}
+@d char_given=min_internal {character code defined by \.{\\chardef}}
+@d math_given=char_given+1 {math code defined by \.{\\mathchardef}}
+@d last_item=math_given+1 {most recent item ( \.{\\lastpenalty},
+ \.{\\lastkern}, \.{\\lastskip} )}
+@d inhibit_glue=last_item+1 {inhibit adjust glue ( \.{\\inhibitglue} )}
+@d chg_dir=inhibit_glue+1 {change dir mode by \.{\\tate}, \.{\\yoko}}
+@d max_non_prefixed_command=chg_dir {largest command code that can't be \.{\\global}}
+@z
+
+@x [15.209] l.4272 - pTeX: def_jfont, def_tfont, set_auto_spacing
+@d toks_register=71 {token list register ( \.{\\toks} )}
+@d assign_toks=72 {special token list ( \.{\\output}, \.{\\everypar}, etc.~)}
+@d assign_int=73 {user-defined integer ( \.{\\tolerance}, \.{\\day}, etc.~)}
+@d assign_dimen=74 {user-defined length ( \.{\\hsize}, etc.~)}
+@d assign_glue=75 {user-defined glue ( \.{\\baselineskip}, etc.~)}
+@d assign_mu_glue=76 {user-defined muglue ( \.{\\thinmuskip}, etc.~)}
+@d assign_font_dimen=77 {user-defined font dimension ( \.{\\fontdimen} )}
+@d assign_font_int=78 {user-defined font integer ( \.{\\hyphenchar},
+ \.{\\skewchar} )}
+@d set_aux=79 {specify state info ( \.{\\spacefactor}, \.{\\prevdepth} )}
+@d set_prev_graf=80 {specify state info ( \.{\\prevgraf} )}
+@d set_page_dimen=81 {specify state info ( \.{\\pagegoal}, etc.~)}
+@d set_page_int=82 {specify state info ( \.{\\deadcycles},
+@y
+@d toks_register=max_non_prefixed_command+1 {token list register ( \.{\\toks} )}
+@d assign_toks=toks_register+1
+ {special token list ( \.{\\output}, \.{\\everypar}, etc.~)}
+@d assign_int=assign_toks+1
+ {user-defined integer ( \.{\\tolerance}, \.{\\day}, etc.~)}
+@d assign_dimen=assign_int+1 {user-defined length ( \.{\\hsize}, etc.~)}
+@d assign_glue=assign_dimen+1 {user-defined glue ( \.{\\baselineskip}, etc.~)}
+@d assign_mu_glue=assign_glue+1 {user-defined muglue ( \.{\\thinmuskip}, etc.~)}
+@d assign_font_dimen=assign_mu_glue+1
+ {user-defined font dimension ( \.{\\fontdimen} )}
+@d assign_font_int=assign_font_dimen+1
+ {user-defined font integer ( \.{\\hyphenchar}, \.{\\skewchar} )}
+@d assign_kinsoku=assign_font_int+1
+ {user-defined kinsoku character ( \.{\\prebreakpenalty},
+ \.{\\postbreakpenalty} )}
+@d assign_inhibit_xsp_code=assign_kinsoku+1
+ {user-defined inhibit xsp character ( \.{\\inhibitxspcode} )}
+@d set_kansuji_char=assign_inhibit_xsp_code+1
+ {user-defined kansuji character ( \.{\\kansujichar} )}
+@d set_aux=set_kansuji_char+1
+ {specify state info ( \.{\\spacefactor}, \.{\\prevdepth} )}
+@d set_prev_graf=set_aux+1 {specify state info ( \.{\\prevgraf} )}
+@d set_page_dimen=set_prev_graf+1 {specify state info ( \.{\\pagegoal}, etc.~)}
+@d set_page_int=set_page_dimen+1 {specify state info ( \.{\\deadcycles},
+@z
+@x [15.209] l.4272 - pTeX: def_jfont, def_tfont, set_auto_spacing
+@d set_box_dimen=83 {change dimension of box ( \.{\\wd}, \.{\\ht}, \.{\\dp} )}
+@d set_shape=84 {specify fancy paragraph shape ( \.{\\parshape} )}
+@y
+@d set_box_dimen=set_page_int+1 {change dimension of box ( \.{\\wd}, \.{\\ht}, \.{\\dp} )}
+@d set_shape=set_box_dimen+1 {specify fancy paragraph shape ( \.{\\parshape} )}
+@z
+@x [15.209] l.4272 - pTeX: def_jfont, def_tfont, set_auto_spacing
+@d def_code=85 {define a character code ( \.{\\catcode}, etc.~)}
+@d def_family=86 {declare math fonts ( \.{\\textfont}, etc.~)}
+@d set_font=87 {set current font ( font identifiers )}
+@d def_font=88 {define a font file ( \.{\\font} )}
+@d register=89 {internal register ( \.{\\count}, \.{\\dimen}, etc.~)}
+@d max_internal=89 {the largest code that can follow \.{\\the}}
+@d advance=90 {advance a register or parameter ( \.{\\advance} )}
+@d multiply=91 {multiply a register or parameter ( \.{\\multiply} )}
+@d divide=92 {divide a register or parameter ( \.{\\divide} )}
+@d prefix=93 {qualify a definition ( \.{\\global}, \.{\\long}, \.{\\outer} )}
+@y
+@d def_code=set_shape+1 {define a character code ( \.{\\catcode}, etc.~)}
+@d def_family=def_code+1 {declare math fonts ( \.{\\textfont}, etc.~)}
+@d set_font=def_family+1 {set current font ( font identifiers )}
+@d def_font=set_font+1 {define a font file ( \.{\\font} )}
+@d def_jfont=def_font+1 {define a font file ( \.{\\jfont} )}
+@d def_tfont=def_jfont+1 {define a font file ( \.{\\tfont} )}
+@d register=def_tfont+1 {internal register ( \.{\\count}, \.{\\dimen}, etc.~)}
+@d max_internal=register {the largest code that can follow \.{\\the}}
+@d advance=max_internal+1 {advance a register or parameter ( \.{\\advance} )}
+@d multiply=advance+1 {multiply a register or parameter ( \.{\\multiply} )}
+@d divide=multiply+1 {divide a register or parameter ( \.{\\divide} )}
+@d prefix=divide+1 {qualify a definition ( \.{\\global}, \.{\\long}, \.{\\outer} )}
+@z
+@x [15.209] l.4272 - pTeX: def_jfont, def_tfont, set_auto_spacing
+@d let=94 {assign a command code ( \.{\\let}, \.{\\futurelet} )}
+@d shorthand_def=95 {code definition ( \.{\\chardef}, \.{\\countdef}, etc.~)}
+ {or \.{\\charsubdef}}
+@d read_to_cs=96 {read into a control sequence ( \.{\\read} )}
+@y
+@d let=prefix+1 {assign a command code ( \.{\\let}, \.{\\futurelet} )}
+@d shorthand_def=let+1 {code definition ( \.{\\chardef}, \.{\\countdef}, etc.~)}
+ {or \.{\\charsubdef}}
+@d read_to_cs=shorthand_def+1 {read into a control sequence ( \.{\\read} )}
+@z
+@x [15.209] l.4272 - pTeX: def_jfont, def_tfont, set_auto_spacing
+@d def=97 {macro definition ( \.{\\def}, \.{\\gdef}, \.{\\xdef}, \.{\\edef} )}
+@d set_box=98 {set a box ( \.{\\setbox} )}
+@d hyph_data=99 {hyphenation data ( \.{\\hyphenation}, \.{\\patterns} )}
+@d set_interaction=100 {define level of interaction ( \.{\\batchmode}, etc.~)}
+@d max_command=100 {the largest command code seen at |big_switch|}
+@y
+@d def=read_to_cs+1 {macro definition ( \.{\\def}, \.{\\gdef}, \.{\\xdef}, \.{\\edef} )}
+@d set_box=def+1 {set a box ( \.{\\setbox} )}
+@d hyph_data=set_box+1 {hyphenation data ( \.{\\hyphenation}, \.{\\patterns} )}
+@d set_interaction=hyph_data+1 {define level of interaction ( \.{\\batchmode}, etc.~)}
+@d set_auto_spacing=set_interaction+1 {set auto spacing mode
+ ( \.{\\autospacing}, \.{\\noautospacing}, \.{\\autoxspacing}, \.{\\noautoxspacing} )}
+@d max_command=set_auto_spacing {the largest command code seen at |big_switch|}
+@z
+
+@x [16.212] l.4437 - pTeX: last_jchr, direction, adjust direction
+@<Types...@>=
+@!list_state_record=record@!mode_field:-mmode..mmode;@+
+ @!head_field,@!tail_field: pointer;
+@y
+@<Types...@>=
+@!list_state_record=record@!mode_field:-mmode..mmode;@+
+ @!dir_field,@!adj_dir_field: -dir_yoko..dir_yoko;
+ @!pdisp_field: scaled;
+ @!head_field,@!tail_field,@!pnode_field,@!last_jchr_field: pointer;
+ @!disp_called_field: boolean;
+ @!inhibit_glue_flag_field: integer;
+@z
+
+@x [16.213] l.4445 - pTeX: last_jchr, direction, adjust_dir, prev_{node,disp}
+@d head==cur_list.head_field {header node of current list}
+@d tail==cur_list.tail_field {final node on current list}
+@y
+@d direction==cur_list.dir_field {current direction}
+@d adjust_dir==cur_list.adj_dir_field {current adjust direction}
+@d head==cur_list.head_field {header node of current list}
+@d tail==cur_list.tail_field {final node on current list}
+@d prev_node==cur_list.pnode_field {previous to last |disp_node|}
+@d prev_disp==cur_list.pdisp_field {displacemant at |prev_node|}
+@d last_jchr==cur_list.last_jchr_field {final jchar node on current list}
+@d disp_called==cur_list.disp_called_field {is a |disp_node| present in the current list?}
+@d inhibit_glue_flag==cur_list.inhibit_glue_flag_field {is \.{inhibitglue} is specified at the current list?}
+@z
+
+@x [16.214] l.4464 - pTeX: prev_append: disp_node
+@d tail_append(#)==begin link(tail):=#; tail:=link(tail);
+ end
+@y
+@d tail_append(#)==begin link(tail):=#; tail:=link(tail);
+ end
+@d prev_append(#)==begin link(prev_node):=#;
+ link(link(prev_node)):=tail; prev_node:=link(prev_node);
+ end
+@z
+
+@x [16.215] l.4477 - pTeX: last_jchr, direction, adjust_dir, prev_node
+mode:=vmode; head:=contrib_head; tail:=contrib_head;
+@y
+mode:=vmode; head:=contrib_head; tail:=contrib_head; prev_node:=tail;
+direction:=dir_yoko; adjust_dir:=direction; prev_disp:=0; last_jchr:=null;
+disp_called:=false;
+@z
+
+@x [16.216] l.4496 - pTeX: last_jchr, displacement.
+incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line;
+@y
+incr(nest_ptr); head:=new_null_box; tail:=head; prev_node:=tail;
+prev_graf:=0; prev_disp:=0; disp_called:=false; last_jchr:=null; mode_line:=line;
+@z
+
+@x [16.217] l.4504 - pTeX: pop_nest last_jchr
+@p procedure pop_nest; {leave a semantic level, re-enter the old}
+begin free_avail(head); decr(nest_ptr); cur_list:=nest[nest_ptr];
+end;
+@y
+@p procedure pop_nest; {leave a semantic level, re-enter the old}
+begin
+fast_delete_glue_ref(space_ptr(head)); fast_delete_glue_ref(xspace_ptr(head));
+free_node(head,box_node_size); decr(nest_ptr); cur_list:=nest[nest_ptr];
+end;
+@z
+
+@x [16.218] l.4521 - pTeX: show_activities : direction
+ print_nl("### "); print_mode(m);
+@y
+ print_nl("### "); print_direction(nest[p].dir_field);
+ print(", "); print_mode(m);
+@z
+
+@x [17.224] l.4711 - pTeX: kanji_skip_code xkanji_skip_code, jfm_skip
+@d thin_mu_skip_code=15 {thin space in math formula}
+@d med_mu_skip_code=16 {medium space in math formula}
+@d thick_mu_skip_code=17 {thick space in math formula}
+@d glue_pars=18 {total number of glue parameters}
+@y
+@d kanji_skip_code=15 {between kanji-kanji space}
+@d xkanji_skip_code=16 {between latin-kanji or kanji-latin space}
+@d thin_mu_skip_code=17 {thin space in math formula}
+@d med_mu_skip_code=18 {medium space in math formula}
+@d thick_mu_skip_code=19 {thick space in math formula}
+@d jfm_skip=20 {space refer from JFM}
+@d glue_pars=21 {total number of glue parameters}
+@z
+
+@x [17.224] l.4739 - kanji_skip, xkanji_skip
+@d thick_mu_skip==glue_par(thick_mu_skip_code)
+@y
+@d thick_mu_skip==glue_par(thick_mu_skip_code)
+@d kanji_skip==glue_par(kanji_skip_code)
+@d xkanji_skip==glue_par(xkanji_skip_code)
+@z
+
+@x [17.225] l.4767 - pTeX: kanji_skip_code xkanji_skip_code
+thick_mu_skip_code: print_esc("thickmuskip");
+othercases print("[unknown glue parameter!]")
+@y
+thick_mu_skip_code: print_esc("thickmuskip");
+kanji_skip_code: print_esc("kanjiskip");
+xkanji_skip_code: print_esc("xkanjiskip");
+jfm_skip: print("refer from jfm");
+othercases print("[unknown glue parameter!]")
+@z
+
+@x [17.226] l.4813 - pTeX: kanji_skip_code xkanji_skip_code
+primitive("thickmuskip",assign_mu_glue,glue_base+thick_mu_skip_code);@/
+@!@:thick_mu_skip_}{\.{\\thickmuskip} primitive@>
+@y
+primitive("thickmuskip",assign_mu_glue,glue_base+thick_mu_skip_code);@/
+@!@:thick_mu_skip_}{\.{\\thickmuskip} primitive@>
+primitive("kanjiskip",assign_glue,glue_base+kanji_skip_code);@/
+@!@:kanji_skip_}{\.{\\kanjiskip} primitive@>
+primitive("xkanjiskip",assign_glue,glue_base+xkanji_skip_code);@/
+@!@:xkanji_skip_}{\.{\\xkanjiskip} primitive@>
+@z
+
+@x [17.230] l.4867 - pTeX: cat_code_size, cur_jfont_loc, auto_spacing, auto_xspacing, inhibit_xsp_code, cur_tfont_loc
+@d math_font_base=cur_font_loc+1 {table of 48 math font numbers}
+@d cat_code_base=math_font_base+48
+ {table of 256 command codes (the ``catcodes'')}
+@d lc_code_base=cat_code_base+256 {table of 256 lowercase mappings}
+@y
+@d math_font_base=cur_font_loc+1 {table of 48 math font numbers}
+@d cur_jfont_loc=math_font_base+48
+@d cur_tfont_loc=cur_jfont_loc+1
+@d auto_spacing_code=cur_tfont_loc+1
+@d auto_xspacing_code=auto_spacing_code+1
+@d cat_code_base=auto_xspacing_code+1
+ {table of 256 command codes (the ``catcodes'')}
+@d kcat_code_base=cat_code_base+256
+ {table of 256 command codes for the wchar's catcodes }
+@d auto_xsp_code_base=kcat_code_base+256 {table of 256 auto spacer flag}
+@d inhibit_xsp_code_base=auto_xsp_code_base+256
+@d kinsoku_base=inhibit_xsp_code_base+256 {table of 256 kinsoku mappings}
+@d kansuji_base=kinsoku_base+256 {table of 10 kansuji mappings}
+@d lc_code_base=kansuji_base+10 {table of 256 lowercase mappings}
+@z
+
+@x [17.230] l.4900 - pTeX:
+@d char_sub_code(#)==equiv(char_sub_code_base+#)
+ {Note: |char_sub_code(c)| is the true substitution info plus |min_halfword|}
+@y
+@d char_sub_code(#)==equiv(char_sub_code_base+#)
+ {Note: |char_sub_code(c)| is the true substitution info plus |min_halfword|}
+@#
+@d cur_jfont==equiv(cur_jfont_loc) {pTeX: }
+@d cur_tfont==equiv(cur_tfont_loc)
+@d auto_spacing==equiv(auto_spacing_code)
+@d auto_xspacing==equiv(auto_xspacing_code)
+@d kcat_code(#)==equiv(kcat_code_base+#)
+@d auto_xsp_code(#)==equiv(auto_xsp_code_base+#)
+@d inhibit_xsp_type(#)==eq_type(inhibit_xsp_code_base+#)
+@d inhibit_xsp_code(#)==equiv(inhibit_xsp_code_base+#)
+@d kinsoku_type(#)==eq_type(kinsoku_base+#)
+@d kinsoku_code(#)==equiv(kinsoku_base+#)
+@d kansuji_char(#)==equiv(kansuji_base+#)
+@z
+
+@x [17.232] l.4959 - pTeX: initialize cat_code, cur_jfont, cur_tfont
+cur_font:=null_font; eq_type(cur_font_loc):=data;
+eq_level(cur_font_loc):=level_one;@/
+@y
+cur_font:=null_font; eq_type(cur_font_loc):=data;
+eq_level(cur_font_loc):=level_one;@/
+cur_jfont:=null_font; eq_type(cur_jfont_loc):=data;
+eq_level(cur_jfont_loc):=level_one;@/
+cur_tfont:=null_font; eq_type(cur_tfont_loc):=data;
+eq_level(cur_tfont_loc):=level_one;@/
+@z
+
+@x [17.232] l.4965 - pTeX: initialize cat_code, cur_jfont, cur_tfont
+for k:=0 to 255 do
+ begin cat_code(k):=other_char; math_code(k):=hi(k); sf_code(k):=1000;
+ end;
+@y
+eqtb[auto_spacing_code]:=eqtb[cat_code_base];
+eqtb[auto_xspacing_code]:=eqtb[cat_code_base];
+for k:=0 to 255 do
+ begin cat_code(k):=other_char; kcat_code(k):=other_kchar;
+ math_code(k):=hi(k); sf_code(k):=1000;
+ auto_xsp_code(k):=0; inhibit_xsp_code(k):=0; inhibit_xsp_type(k):=0;
+ kinsoku_code(k):=0; kinsoku_type(k):=0;
+ end;
+@z
+@x [17.232] l.4971 - pTeX: initialize cat_code, cur_jfont, cur_tfont
+for k:="0" to "9" do math_code(k):=hi(k+var_code);
+for k:="A" to "Z" do
+ begin cat_code(k):=letter; cat_code(k+"a"-"A"):=letter;@/
+ math_code(k):=hi(k+var_code+@"100);
+ math_code(k+"a"-"A"):=hi(k+"a"-"A"+var_code+@"100);@/
+ lc_code(k):=k+"a"-"A"; lc_code(k+"a"-"A"):=k+"a"-"A";@/
+ uc_code(k):=k; uc_code(k+"a"-"A"):=k;@/
+ sf_code(k):=999;
+ end;
+@y
+for k:="0" to "9" do
+ begin math_code(k):=hi(k+var_code);
+ auto_xsp_code(k):=3;
+ end;
+kansuji_char(0):=toDVI(fromJIS(@"213B));
+kansuji_char(1):=toDVI(fromJIS(@"306C));
+kansuji_char(2):=toDVI(fromJIS(@"4673));
+kansuji_char(3):=toDVI(fromJIS(@"3B30));
+kansuji_char(4):=toDVI(fromJIS(@"3B4D));
+kansuji_char(5):=toDVI(fromJIS(@"385E));
+kansuji_char(6):=toDVI(fromJIS(@"4F3B));
+kansuji_char(7):=toDVI(fromJIS(@"3C37));
+kansuji_char(8):=toDVI(fromJIS(@"482C));
+kansuji_char(9):=toDVI(fromJIS(@"3665));
+for k:="A" to "Z" do
+ begin cat_code(k):=letter; cat_code(k+"a"-"A"):=letter;@/
+ math_code(k):=hi(k+var_code+@"100);
+ math_code(k+"a"-"A"):=hi(k+"a"-"A"+var_code+@"100);@/
+ lc_code(k):=k+"a"-"A"; lc_code(k+"a"-"A"):=k+"a"-"A";@/
+ uc_code(k):=k; uc_code(k+"a"-"A"):=k;@/
+ auto_xsp_code(k):=3; auto_xsp_code(k+"a"-"A"):=3;@/
+ sf_code(k):=999;
+ end;
+@t\hskip10pt@>kcat_code(@"20+1):=other_kchar; {1 ku}
+@t\hskip10pt@>kcat_code(@"20+2):=other_kchar; {2 ku}
+@+@t\1@>for k:=3 to 6 do kcat_code(@"20+k):=kana; {3 ku ... 6 ku}
+@+@t\1@>for k:=7 to 8 do kcat_code(@"20+k):=other_kchar; {7 ku ... 8 ku}
+@+@t\1@>for k:=16 to 84 do kcat_code(@"20+k):=kanji; {16 ku ... 84 ku}
+{ $\.{@@"20}+|k| = |kcatcodekey|(|fromKUTEN|(|HILO|(k,1))$ }
+@z
+
+@x
+@ @<Show the halfword code in |eqtb[n]|@>=
+if n<math_code_base then
+ begin if n<lc_code_base then
+ begin print_esc("catcode"); print_int(n-cat_code_base);
+ end
+@y
+@ @<Show the halfword code in |eqtb[n]|@>=
+if n<math_code_base then
+ begin if n<kcat_code_base then
+ begin print_esc("catcode"); print_int(n-cat_code_base);
+ end
+ else if n<auto_xsp_code_base then
+ begin print_esc("kcatcode"); print_int(n-kcat_code_base);
+ end
+ else if n<inhibit_xsp_code_base then
+ begin print_esc("xspcode"); print_int(n-auto_xsp_code_base);
+ end
+ else if n<kinsoku_base then
+ begin print("(inhibitxspcode table) "); print_int(n-inhibit_xsp_code_base);
+ end
+ else if n<kansuji_base then
+ begin print("(kinsoku table) "); print_int(n-kinsoku_base);
+ end
+ else if n<lc_code_base then
+ begin print_esc("kansujichar"); print_int(n-kansuji_base);
+ end
+@z
+
+@x [17.236] l.5092 - pTeX: cur_jfam_code, jchr_widow_penalty
+@d cur_fam_code=44 {current family}
+@d escape_char_code=45 {escape character for token output}
+@d default_hyphen_char_code=46 {value of \.{\\hyphenchar} when a font is loaded}
+@d default_skew_char_code=47 {value of \.{\\skewchar} when a font is loaded}
+@d end_line_char_code=48 {character placed at the right end of the buffer}
+@d new_line_char_code=49 {character that prints as |print_ln|}
+@d language_code=50 {current hyphenation table}
+@d left_hyphen_min_code=51 {minimum left hyphenation fragment size}
+@d right_hyphen_min_code=52 {minimum right hyphenation fragment size}
+@d holding_inserts_code=53 {do not remove insertion nodes from \.{\\box255}}
+@d error_context_lines_code=54 {maximum intermediate line pairs shown}
+@d tex_int_pars=55 {total number of \TeX's integer parameters}
+@y
+@d cur_fam_code=44 {current family}
+@d cur_jfam_code=45 {current kanji family}
+@d escape_char_code=46 {escape character for token output}
+@d default_hyphen_char_code=47 {value of \.{\\hyphenchar} when a font is loaded}
+@d default_skew_char_code=48 {value of \.{\\skewchar} when a font is loaded}
+@d end_line_char_code=49 {character placed at the right end of the buffer}
+@d new_line_char_code=50 {character that prints as |print_ln|}
+@d language_code=51 {current hyphenation table}
+@d left_hyphen_min_code=52 {minimum left hyphenation fragment size}
+@d right_hyphen_min_code=53 {minimum right hyphenation fragment size}
+@d holding_inserts_code=54 {do not remove insertion nodes from \.{\\box255}}
+@d error_context_lines_code=55 {maximum intermediate line pairs shown}
+@d jchr_widow_penalty_code=56
+ {penalty for creating a widow KANJI character line}
+@d text_baseline_shift_factor_code=57
+@d script_baseline_shift_factor_code=58
+@d scriptscript_baseline_shift_factor_code=59
+@d tex_int_pars=60 {total number of \TeX's integer parameters}
+@z
+
+@x [17.236] l.5167 - pTeX: cur_jfam, |jchr_widow_penalty|
+@d cur_fam==int_par(cur_fam_code)
+@d escape_char==int_par(escape_char_code)
+@y
+@d cur_fam==int_par(cur_fam_code)
+@d cur_jfam==int_par(cur_jfam_code)
+@d escape_char==int_par(escape_char_code)
+@d jchr_widow_penalty==int_par(jchr_widow_penalty_code)
+@d text_baseline_shift_factor==int_par(text_baseline_shift_factor_code)
+@d script_baseline_shift_factor==int_par(script_baseline_shift_factor_code)
+@d scriptscript_baseline_shift_factor==int_par(scriptscript_baseline_shift_factor_code)
+@z
+
+@x [17.237] l.5244 - pTeX: cur_jfam_code, jchr_window_penalty_code
+new_line_char_code:print_esc("newlinechar");
+@y
+new_line_char_code:print_esc("newlinechar");
+cur_jfam_code:print_esc("jfam");
+jchr_widow_penalty_code:print_esc("jcharwidowpenalty");
+text_baseline_shift_factor_code:print_esc("textbaselineshiftfactor");
+script_baseline_shift_factor_code:print_esc("scriptbaselineshiftfactor");
+scriptscript_baseline_shift_factor_code:print_esc("scriptscriptbaselineshiftfactor");
+@z
+
+@x [17.238] l.5365 - pTeX: cur_jfam_code, jchr_window_penalty_code
+primitive("newlinechar",assign_int,int_base+new_line_char_code);@/
+@!@:new_line_char_}{\.{\\newlinechar} primitive@>
+@y
+primitive("newlinechar",assign_int,int_base+new_line_char_code);@/
+@!@:new_line_char_}{\.{\\newlinechar} primitive@>
+primitive("jfam",assign_int,int_base+cur_jfam_code);@/
+@!@:cur_jfam_}{\.{\\jfam} primitive@>
+primitive("jcharwidowpenalty",assign_int,int_base+jchr_widow_penalty_code);@/
+@!@:jchr_widow_penalty}{\.{\\jcharwidowpenalty} primitive@>
+primitive("textbaselineshiftfactor",assign_int,int_base+text_baseline_shift_factor_code);@/
+@!@:text_baseline_shift_factor}{\.{\\textbaselineshiftfactor} primitive@>
+primitive("scriptbaselineshiftfactor",assign_int,int_base+script_baseline_shift_factor_code);@/
+@!@:script_baseline_shift_factor}{\.{\\scriptbaselineshiftfactor} primitive@>
+primitive("scriptscriptbaselineshiftfactor",assign_int,int_base+scriptscript_baseline_shift_factor_code);@/
+@!@:scriptscript_baseline_shift_factor}{\.{\\scriptscriptbaselineshiftfactor} primitive@>
+@z
+
+@x [17.247] l.5490 - pTeX: kinsoku, t_baseline_shift, y_baseline_shift
+@d h_offset_code=18 {amount of horizontal offset when shipping pages out}
+@d v_offset_code=19 {amount of vertical offset when shipping pages out}
+@d emergency_stretch_code=20 {reduces badnesses on final pass of line-breaking}
+@d dimen_pars=21 {total number of dimension parameters}
+@d scaled_base=dimen_base+dimen_pars
+ {table of 256 user-defined \.{\\dimen} registers}
+@d eqtb_size=scaled_base+255 {largest subscript of |eqtb|}
+@y
+@d h_offset_code=18 {amount of horizontal offset when shipping pages out}
+@d v_offset_code=19 {amount of vertical offset when shipping pages out}
+@d emergency_stretch_code=20 {reduces badnesses on final pass of line-breaking}
+@d t_baseline_shift_code=21 {shift amount when mixing TATE-kumi and Alphabet}
+@d y_baseline_shift_code=22 {shift amount when mixing YOKO-kumi and Alphabet}
+@d dimen_pars=23 {total number of dimension parameters}
+@d scaled_base=dimen_base+dimen_pars
+ {table of 256 user-defined \.{\\dimen} registers}
+@d kinsoku_penalty_base=scaled_base+256 {table of 256 kinsoku registers}
+@d eqtb_size=kinsoku_penalty_base+255 {largest subscript of |eqtb|}
+@z
+
+@x l.5498 - pTeX: kinsoku, t_baseline_shift, y_baseline_shift
+@d dimen(#)==eqtb[scaled_base+#].sc
+@d dimen_par(#)==eqtb[dimen_base+#].sc {a scaled quantity}
+@y
+@d dimen(#)==eqtb[scaled_base+#].sc
+@d dimen_par(#)==eqtb[dimen_base+#].sc {a scaled quantity}
+@d kinsoku_penalty(#)==eqtb[kinsoku_penalty_base+#].int
+@z
+
+@x l.5518 - pTeX:
+@d h_offset==dimen_par(h_offset_code)
+@d v_offset==dimen_par(v_offset_code)
+@y
+@d h_offset==dimen_par(h_offset_code)
+@d v_offset==dimen_par(v_offset_code)
+@d t_baseline_shift==dimen_par(t_baseline_shift_code)
+@d y_baseline_shift==dimen_par(y_baseline_shift_code)
+@z
+
+@x l.5542 - pTeX:
+h_offset_code:print_esc("hoffset");
+v_offset_code:print_esc("voffset");
+emergency_stretch_code:print_esc("emergencystretch");
+othercases print("[unknown dimen parameter!]")
+@y
+h_offset_code:print_esc("hoffset");
+v_offset_code:print_esc("voffset");
+t_baseline_shift_code:print_esc("tbaselineshift");
+y_baseline_shift_code:print_esc("ybaselineshift");
+emergency_stretch_code:print_esc("emergencystretch");
+othercases print("[unknown dimen parameter!]")
+@z
+
+@x [17.248] l.5588 - pTeX: rotate offset
+primitive("hoffset",assign_dimen,dimen_base+h_offset_code);@/
+@!@:h_offset_}{\.{\\hoffset} primitive@>
+primitive("voffset",assign_dimen,dimen_base+v_offset_code);@/
+@!@:v_offset_}{\.{\\voffset} primitive@>
+@y
+primitive("hoffset",assign_dimen,dimen_base+h_offset_code);@/
+@!@:h_offset_}{\.{\\hoffset} primitive@>
+primitive("voffset",assign_dimen,dimen_base+v_offset_code);@/
+@!@:v_offset_}{\.{\\voffset} primitive@>
+primitive("tbaselineshift",assign_dimen,dimen_base+t_baseline_shift_code);@/
+@!@:t_baseline_shift_}{\.{\\tbaselineshift} primitive@>
+primitive("ybaselineshift",assign_dimen,dimen_base+y_baseline_shift_code);@/
+@!@:y_baseline_shift_}{\.{\\ybaselineshift} primitive@>
+@z
+
+@x [17.252] l.5622 - pTeX: show eqtb
+else if n<=eqtb_size then @<Show equivalent |n|, in region 6@>
+else print_char("?"); {this can't happen either}
+end;
+tats
+@y
+else if n<kinsoku_penalty_base then @<Show equivalent |n|, in region 6@>
+else if n<=eqtb_size then print("kinsoku")
+else print_char("?"); {this can't happen either}
+end;
+tats
+@z
+
+@x [17.???] l.???? - pTeX multibyte control symbol
+procedure print_cs(@!p:integer); {prints a purported control sequence}
+@y
+procedure print_cs(@!p:integer); {prints a purported control sequence}
+var j, l:pool_pointer; @!cat:0..max_char_code;
+@z
+
+@x
+else begin print_esc(text(p));
+ print_char(" ");
+ end;
+@y
+else begin l:=text(p);
+ print_esc(l); j:=str_start[l]; l:=str_start[l+1];
+ if l>j+1 then begin
+ if l-j=multistrlen(ustringcast(str_pool), l, j) then
+ begin cat:=kcat_code(kcatcodekey(fromBUFF(ustringcast(str_pool), l, j)));
+ if (cat<>other_kchar) then print_char(" ");
+ end
+ else print_char(" "); end
+ else print_char(" ");
+ end;
+@z
+
+@x [18.265] l.5903 - pTeX: \jfont \tfont
+primitive("font",def_font,0);@/
+@!@:font_}{\.{\\font} primitive@>
+@y
+primitive("font",def_font,0);@/
+@!@:font_}{\.{\\font} primitive@>
+primitive("jfont",def_jfont,0);@/
+@!@:jfont_}{\.{\\jfont} primitive@>
+primitive("tfont",def_tfont,0);@/
+@!@:tfont_}{\.{\\tfont} primitive@>
+@z
+
+@x [18.266] l.5979 - pTeX: \jfont, \tfont
+def_font: print_esc("font");
+@y
+def_font: print_esc("font");
+def_jfont: print_esc("jfont");
+def_tfont: print_esc("tfont");
+@z
+
+@x [20.289] l.6387 - pTeX: cs_token_flag
+@d cs_token_flag==@'7777 {amount added to the |eqtb| location in a
+ token that stands for a control sequence; is a multiple of~256, less~1}
+@y
+@d cs_token_flag==@"FFFF {amount added to the |eqtb| location in a
+token that stands for a control sequence; is a multiple of~256, less~1}
+@z
+
+@x [20.293] l.6496 - pTeX: show_token_list
+@ @<Display token |p|...@>=
+if (p<hi_mem_min) or (p>mem_end) then
+ begin print_esc("CLOBBERED."); return;
+@.CLOBBERED@>
+ end;
+if info(p)>=cs_token_flag then print_cs(info(p)-cs_token_flag)
+else begin m:=info(p) div @'400; c:=info(p) mod @'400;
+ if info(p)<0 then print_esc("BAD.")
+@.BAD@>
+ else @<Display the token $(|m|,|c|)$@>;
+ end
+@y
+@ @<Display token |p|...@>=
+if (p<hi_mem_min) or (p>mem_end) then
+ begin print_esc("CLOBBERED."); return;
+@.CLOBBERED@>
+ end;
+if info(p)>=cs_token_flag then print_cs(info(p)-cs_token_flag) {|wchar_token|}
+else begin
+ if check_kanji(info(p)) then {|wchar_token|}
+ begin m:=kcat_code(kcatcodekey(info(p))); c:=info(p);
+ end
+ else begin m:=Hi(info(p)); c:=Lo(info(p));
+ end;
+ if (m<kanji)and(c>256) then print_esc("BAD.")
+@.BAD@>
+ else @<Display the token $(|m|,|c|)$@>;
+end
+@z
+
+@x [20.294] l.6512 - pTeX: show_token_list
+@<Display the token ...@>=
+case m of
+left_brace,right_brace,math_shift,tab_mark,sup_mark,sub_mark,spacer,
+ letter,other_char: print(c);
+@y
+@<Display the token ...@>=
+case m of
+kanji,kana,other_kchar: print_kanji(KANJI(c));
+left_brace,right_brace,math_shift,tab_mark,sup_mark,sub_mark,spacer,
+ letter,other_char: print(c);
+@z
+
+@x [21.298] l.6632 - pTeX: print KANJI
+other_char: chr_cmd("the character ");
+@y
+other_char: chr_cmd("the character ");
+kanji,kana,other_kchar: begin print("kanji character ");
+ print_kanji(KANJI(chr_code)); end;
+@z
+
+@x [22.303] l.6726 - pTeX: state mid_kanji
+1) |state=mid_line| is the normal state.\cr
+2) |state=skip_blanks| is like |mid_line|, but blanks are ignored.\cr
+3) |state=new_line| is the state at the beginning of a line.\cr}}$$
+@y
+1) |state=mid_line| is the normal state.\cr
+2) |state=mid_kanji| is like |mid_line|, and internal KANJI string.\cr
+3) |state=skip_blanks| is like |mid_line|, but blanks are ignored.\cr
+4) |state=new_line| is the state at the beginning of a line.\cr}}$$
+@z
+
+@x [22.303] l.6736 - pTeX: state mid_kanji
+@d mid_line=1 {|state| code when scanning a line of characters}
+@d skip_blanks=2+max_char_code {|state| code when ignoring blanks}
+@d new_line=3+max_char_code+max_char_code {|state| code at start of line}
+@y
+@d mid_line=1 {|state| code when scanning a line of characters}
+@d mid_kanji=2+max_char_code {|state| code when scanning a line of characters}
+@d skip_blanks=3+max_char_code+max_char_code {|state| code when ignoring blanks}
+@d new_line=4+max_char_code+max_char_code+max_char_code
+ {|state| code at start of line}
+@z
+
+@x [22.311] l.6986 - pTeX: label
+@p procedure show_context; {prints where the scanner is}
+label done;
+var old_setting:0..max_selector; {saved |selector| setting}
+@y
+@p procedure show_context; {prints where the scanner is}
+label done, done1;
+var old_setting:0..max_selector; {saved |selector| setting}
+@!s: pointer; {temporary pointer}
+@z
+
+@x [22.316] l.7110 - pTeX: init kcode_pos
+@d begin_pseudoprint==
+ begin l:=tally; tally:=0; selector:=pseudo;
+ trick_count:=1000000;
+ end
+@y
+@d begin_pseudoprint==
+ begin l:=tally; tally:=0; selector:=pseudo; kcode_pos:=0;
+ trick_count:=1000000;
+ end
+@z
+
+@x [22.316] l.7114 - pTeX: kcode_pos
+@d set_trick_count==
+ begin first_count:=tally;
+ trick_count:=tally+1+error_line-half_error_line;
+ if trick_count<error_line then trick_count:=error_line;
+ end
+@y
+@d set_trick_count==
+ begin first_count:=tally;
+ if (first_count>0)and(trick_buf2[(first_count-1)mod error_line]=1) then
+ incr(first_count);
+ trick_count:=first_count+1+error_line-half_error_line;
+ if trick_count<error_line then trick_count:=error_line;
+ end
+@z
+
+@x [22.317] l.7133 - pTeX: adjust kanji code pos
+for q:=p to first_count-1 do print_char(trick_buf[q mod error_line]);
+print_ln;
+for q:=1 to n do print_char(" "); {print |n| spaces to begin line~2}
+if m+n<=error_line then p:=first_count+m else p:=first_count+(error_line-n-3);
+@y
+if trick_buf2[p mod error_line]=2 then
+ begin p:=p+1; n:=n-1;
+ end;
+for q:=p to first_count-1 do print_char(trick_buf[q mod error_line]);
+print_ln;
+for q:=1 to n do print_char(" "); {print |n| spaces to begin line~2}
+if m+n<=error_line then p:=first_count+m else p:=first_count+(error_line-n-3);
+if trick_buf2[(p-1) mod error_line]=1 then p:=p-1;
+@z
+
+@x [22.319] l.7157 - pTeX: adjust kanji code token
+@ @<Pseudoprint the token list@>=
+begin_pseudoprint;
+if token_type<macro then show_token_list(start,loc,100000)
+else show_token_list(link(start),loc,100000) {avoid reference count}
+@y
+@ @<Pseudoprint the token list@>=
+begin_pseudoprint;
+if token_type<macro then
+ begin if (token_type=backed_up)and(loc<>null) then
+ begin if (link(start)=null)and(check_kanji(info(start))) then {|wchar_token|}
+ begin cur_input:=input_stack[base_ptr-1];
+ s:=get_avail; info(s):=Lo(info(loc));
+ cur_input:=input_stack[base_ptr];
+ link(start):=s;
+ show_token_list(start,loc,100000);
+ free_avail(s);link(start):=null;
+ goto done1;
+ end;
+ end;
+ show_token_list(start,loc,100000);
+ end
+else show_token_list(link(start),loc,100000); {avoid reference count}
+done1:
+@z
+
+@x [24.341] l.7479 - pTeX: set last_chr
+@!cat:0..max_char_code; {|cat_code(cur_chr)|, usually}
+@y
+@!cat:escape..max_char_code; {|cat_code(cur_chr)|, usually}
+@!l:0..buf_size; {temporary index into |buffer|}
+@z
+
+@x [24.343] l.7500 - pTeX: input external file
+@ @<Input from external file, |goto restart| if no input found@>=
+@^inner loop@>
+begin switch: if loc<=limit then {current line not yet finished}
+ begin cur_chr:=buffer[loc]; incr(loc);
+ reswitch: cur_cmd:=cat_code(cur_chr);
+@y
+@ @<Input from external file, |goto restart| if no input found@>=
+@^inner loop@>
+begin switch: if loc<=limit then {current line not yet finished}
+ begin cur_chr:=buffer[loc]; incr(loc);
+ if multistrlen(ustringcast(buffer), limit+1, loc-1)=2 then
+ begin cur_chr:=fromBUFF(ustringcast(buffer), limit+1, loc-1);
+ cur_cmd:=kcat_code(kcatcodekey(cur_chr));
+ incr(loc);
+ end
+ else reswitch: cur_cmd:=cat_code(cur_chr);
+@z
+
+@x [24.344] l.7535 - pTeX: ASCII-KANJI space handling
+@d any_state_plus(#) == mid_line+#,skip_blanks+#,new_line+#
+@y
+@d any_state_plus(#) == mid_line+#,mid_kanji+#,skip_blanks+#,new_line+#
+@z
+
+@x [24.347] l.7569 - pTeX: scaner
+@ @d add_delims_to(#)==#+math_shift,#+tab_mark,#+mac_param,
+ #+sub_mark,#+letter,#+other_char
+@y
+@ @d add_delims_to(#)==#+math_shift,#+tab_mark,#+mac_param,
+ #+sub_mark,#+letter,#+other_char
+@d all_jcode(#)==#+kanji,#+kana,#+other_kchar
+@z
+
+@x [24.347] l.7573 - pTeX: scaner
+mid_line+spacer:@<Enter |skip_blanks| state, emit a space@>;
+mid_line+car_ret:@<Finish line, emit a space@>;
+skip_blanks+car_ret,any_state_plus(comment):
+ @<Finish line, |goto switch|@>;
+new_line+car_ret:@<Finish line, emit a \.{\\par}@>;
+mid_line+left_brace: incr(align_state);
+skip_blanks+left_brace,new_line+left_brace: begin
+ state:=mid_line; incr(align_state);
+ end;
+mid_line+right_brace: decr(align_state);
+skip_blanks+right_brace,new_line+right_brace: begin
+ state:=mid_line; decr(align_state);
+ end;
+add_delims_to(skip_blanks),add_delims_to(new_line): state:=mid_line;
+@y
+mid_kanji+spacer,mid_line+spacer:@<Enter |skip_blanks| state, emit a space@>;
+mid_line+car_ret:@<Finish line, emit a space@>;
+mid_kanji+car_ret: if skip_mode then @<Finish line, |goto switch|@>
+ else @<Finish line, emit a space@>;
+skip_blanks+car_ret,any_state_plus(comment):
+ @<Finish line, |goto switch|@>;
+new_line+car_ret:@<Finish line, emit a \.{\\par}@>;
+mid_line+left_brace,mid_kanji+left_brace: incr(align_state);
+skip_blanks+left_brace,new_line+left_brace: begin
+ state:=mid_line; incr(align_state);
+ end;
+mid_line+right_brace,mid_kanji+right_brace: decr(align_state);
+skip_blanks+right_brace,new_line+right_brace: begin
+ state:=mid_line; decr(align_state);
+ end;
+add_delims_to(skip_blanks),add_delims_to(new_line),add_delims_to(mid_kanji):
+ state:=mid_line;
+all_jcode(skip_blanks),all_jcode(new_line),all_jcode(mid_line):
+ state:=mid_kanji;
+
+@ @<Global...@>=
+skip_mode:boolean;
+
+@ @<Set init...@>=
+skip_mode:=true;
+@z
+
+@x [24.354] l.7659 - pTeX: scan control sequence
+@<Scan a control...@>=
+begin if loc>limit then cur_cs:=null_cs {|state| is irrelevant in this case}
+else begin start_cs: k:=loc; cur_chr:=buffer[k]; cat:=cat_code(cur_chr);
+ incr(k);
+ if cat=letter then state:=skip_blanks
+ else if cat=spacer then state:=skip_blanks
+ else state:=mid_line;
+ if (cat=letter)and(k<=limit) then
+ @<Scan ahead in the buffer until finding a nonletter;
+ if an expanded code is encountered, reduce it
+ and |goto start_cs|; otherwise if a multiletter control
+ sequence is found, adjust |cur_cs| and |loc|, and
+ |goto found|@>
+ else @<If an expanded code is present, reduce it and |goto start_cs|@>;
+ cur_cs:=single_base+buffer[loc]; incr(loc);
+ end;
+found: cur_cmd:=eq_type(cur_cs); cur_chr:=equiv(cur_cs);
+if cur_cmd>=outer_call then check_outer_validity;
+end
+@y
+@<Scan a control...@>=
+begin if loc>limit then cur_cs:=null_cs {|state| is irrelevant in this case}
+else begin k:=loc; cur_chr:=buffer[k]; incr(k);
+ if multistrlen(ustringcast(buffer), limit+1, k-1)=2 then
+ begin cat:=kcat_code(kcatcodekey(fromBUFF(ustringcast(buffer), limit+1, k-1))); incr(k);
+ end
+ else cat:=cat_code(cur_chr);
+start_cs:
+ if (cat=letter)or(cat=kanji)or(cat=kana) then state:=skip_blanks
+ else if cat=spacer then state:=skip_blanks
+ else if cat=other_kchar then state:=mid_kanji
+ else state:=mid_line;
+ if cat=other_kchar then
+ begin cur_cs:=id_lookup(loc,k-loc); loc:=k; goto found;
+ end
+ else if ((cat=letter)or(cat=kanji)or(cat=kana))and(k<=limit) then
+ @<Scan ahead in the buffer until finding a nonletter;
+ if an expanded code is encountered, reduce it
+ and |goto start_cs|; otherwise if a multiletter control
+ sequence is found, adjust |cur_cs| and |loc|, and
+ |goto found|@>
+ else @<If an expanded code is present, reduce it and |goto start_cs|@>;
+ {single-letter control sequence}
+ if (cat=kanji)or(cat=kana) then
+ begin cur_cs:=id_lookup(loc,k-loc); loc:=k; goto found;
+ end
+ else begin cur_cs:=single_base+buffer[loc]; incr(loc); end;
+ end;
+found: cur_cmd:=eq_type(cur_cs); cur_chr:=equiv(cur_cs);
+if cur_cmd>=outer_call then check_outer_validity;
+end
+@z
+
+@x
+@<If an expanded...@>=
+begin if buffer[k]=cur_chr then @+if cat=sup_mark then @+if k<limit then
+ begin c:=buffer[k+1]; @+if c<@'200 then {yes, one is indeed present}
+ begin d:=2;
+ if is_hex(c) then @+if k+2<=limit then
+ begin cc:=buffer[k+2]; @+if is_hex(cc) then incr(d);
+ end;
+ if d>2 then
+ begin hex_to_cur_chr; buffer[k-1]:=cur_chr;
+ end
+ else if c<@'100 then buffer[k-1]:=c+@'100
+ else buffer[k-1]:=c-@'100;
+ limit:=limit-d; first:=first-d;
+ while k<=limit do
+ begin buffer[k]:=buffer[k+d]; incr(k);
+ end;
+ goto start_cs;
+ end;
+ end;
+end
+@y
+@<If an expanded...@>=
+begin if buffer[k]=cur_chr then @+if cat=sup_mark then @+if k<limit then
+ begin c:=buffer[k+1]; @+if c<@'200 then {yes, one is indeed present}
+ begin d:=2;
+ if is_hex(c) then @+if k+2<=limit then
+ begin cc:=buffer[k+2]; @+if is_hex(cc) then incr(d);
+ end;
+ if d>2 then
+ begin hex_to_cur_chr; buffer[k-1]:=cur_chr;
+ end
+ else if c<@'100 then buffer[k-1]:=c+@'100
+ else buffer[k-1]:=c-@'100;
+ limit:=limit-d; first:=first-d;
+ l:=k; cur_chr:=buffer[k-1]; cat:=cat_code(cur_chr);
+ while l<=limit do
+ begin buffer[l]:=buffer[l+d]; incr(l);
+ end;
+ goto start_cs;
+ end;
+ end;
+end
+@z
+
+@x [24.356] l.7727 - pTeX: scan control sequence (cont)
+@ @<Scan ahead in the buffer...@>=
+begin repeat cur_chr:=buffer[k]; cat:=cat_code(cur_chr); incr(k);
+until (cat<>letter)or(k>limit);
+@<If an expanded...@>;
+if cat<>letter then decr(k);
+ {now |k| points to first nonletter}
+if k>loc+1 then {multiletter control sequence has been scanned}
+ begin cur_cs:=id_lookup(loc,k-loc); loc:=k; goto found;
+ end;
+end
+@y
+@ @<Scan ahead in the buffer...@>=
+begin repeat cur_chr:=buffer[k]; incr(k);
+ if multistrlen(ustringcast(buffer), limit+1, k-1)=2 then
+ begin cat:=kcat_code(kcatcodekey(fromBUFF(ustringcast(buffer), limit+1, k-1))); incr(k);
+ end
+ else cat:=cat_code(cur_chr);
+ while (buffer[k]=cur_chr)and(cat=sup_mark)and(k<limit) do
+ begin c:=buffer[k+1]; @+if c<@'200 then {yes, one is indeed present}
+ begin d:=2;
+ if is_hex(c) then @+if k+2<=limit then
+ begin cc:=buffer[k+2]; @+if is_hex(cc) then incr(d);
+ end;
+ if d>2 then
+ begin hex_to_cur_chr;
+ end
+ else if c<@'100 then cur_chr:=c+@'100
+ else cur_chr:=c-@'100;
+ cat:=cat_code(cur_chr);
+ if (cat=letter)or(cat=sup_mark) then
+ begin buffer[k-1]:=cur_chr;
+ limit:=limit-d; first:=first-d;
+ l:=k;
+ while l<=limit do
+ begin buffer[l]:=buffer[l+d]; incr(l);
+ end;
+ end;
+ end;
+ end;
+until not((cat=letter)or(cat=kanji)or(cat=kana))or(k>limit);
+{@@<If an expanded...@@>;}
+if not((cat=letter)or(cat=kanji)or(cat=kana)) then decr(k);
+if cat=other_kchar then decr(k); {now |k| points to first nonletter}
+if k>loc+1 then {multiletter control sequence has been scanned}
+ begin cur_cs:=id_lookup(loc,k-loc); loc:=k; goto found;
+ end;
+end
+@z
+
+@x [24.357] l.7771 - pTeX: input from token list
+@<Input from token list, |goto restart| if end of list or
+ if a parameter needs to be expanded@>=
+if loc<>null then {list not exhausted}
+@^inner loop@>
+ begin t:=info(loc); loc:=link(loc); {move to next}
+ if t>=cs_token_flag then {a control sequence token}
+ begin cur_cs:=t-cs_token_flag;
+ cur_cmd:=eq_type(cur_cs); cur_chr:=equiv(cur_cs);
+ if cur_cmd>=outer_call then
+ if cur_cmd=dont_expand then
+ @<Get the next token, suppressing expansion@>
+ else check_outer_validity;
+ end
+ else begin cur_cmd:=t div @'400; cur_chr:=t mod @'400;
+ case cur_cmd of
+ left_brace: incr(align_state);
+ right_brace: decr(align_state);
+ out_param: @<Insert macro parameter and |goto restart|@>;
+ othercases do_nothing
+ endcases;
+ end;
+ end
+else begin {we are done with this token list}
+ end_token_list; goto restart; {resume previous level}
+ end
+@y
+@<Input from token list, |goto restart| if end of list or
+ if a parameter needs to be expanded@>=
+if loc<>null then {list not exhausted}
+@^inner loop@>
+ begin t:=info(loc); loc:=link(loc); {move to next}
+ if t>=cs_token_flag then {a control sequence token}
+ begin cur_cs:=t-cs_token_flag;
+ cur_cmd:=eq_type(cur_cs); cur_chr:=equiv(cur_cs);
+ if cur_cmd>=outer_call then
+ if cur_cmd=dont_expand then
+ @<Get the next token, suppressing expansion@>
+ else check_outer_validity;
+ end
+ else if check_kanji(t) then {|wchar_token|}
+ begin cur_chr:=t; cur_cmd:=kcat_code(kcatcodekey(t));
+ end
+ else
+ begin cur_cmd:=Hi(t); cur_chr:=Lo(t);
+ case cur_cmd of
+ left_brace: incr(align_state);
+ right_brace: decr(align_state);
+ out_param: @<Insert macro parameter and |goto restart|@>;
+ othercases do_nothing
+ endcases;
+ end;
+ end
+else begin {we are done with this token list}
+ end_token_list; goto restart; {resume previous level}
+ end
+@z
+
+@x [24.365] l.7935 - pTeX: get_token
+@p procedure get_token; {sets |cur_cmd|, |cur_chr|, |cur_tok|}
+begin no_new_control_sequence:=false; get_next; no_new_control_sequence:=true;
+@^inner loop@>
+if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+end;
+@y
+@p procedure get_token; {sets |cur_cmd|, |cur_chr|, |cur_tok|}
+begin no_new_control_sequence:=false; get_next; no_new_control_sequence:=true;
+@^inner loop@>
+if cur_cs=0 then
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then {|wchar_token|}
+ cur_tok:=cur_chr
+ else cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+end;
+@z
+
+@x [25.374] l.8073 - pTeX: get_chr
+@ @<Look up the characters of list |r| in the hash table...@>=
+j:=first; p:=link(r);
+while p<>null do
+ begin if j>=max_buf_stack then
+ begin max_buf_stack:=j+1;
+ if max_buf_stack=buf_size then
+ overflow("buffer size",buf_size);
+@:TeX capacity exceeded buffer size}{\quad buffer size@>
+ end;
+ buffer[j]:=info(p) mod @'400; incr(j); p:=link(p);
+ end;
+@y
+@ @<Look up the characters of list |r| in the hash table...@>=
+j:=first; p:=link(r);
+while p<>null do
+ begin if j>=max_buf_stack then
+ begin max_buf_stack:=j+1;
+ if max_buf_stack=buf_size then
+ overflow("buffer size",buf_size);
+@:TeX capacity exceeded buffer size}{\quad buffer size@>
+ end;
+ if check_kanji(info(p)) then {|wchar_token|}
+ begin buffer[j]:=Hi(info(p)); incr(j);
+ end;
+ buffer[j]:=Lo(info(p)); incr(j); p:=link(p);
+ end;
+@z
+
+@x [25.380] l.8221 - pTeX: get_x_token
+@p procedure get_x_token; {sets |cur_cmd|, |cur_chr|, |cur_tok|,
+ and expands macros}
+label restart,done;
+begin restart: get_next;
+@^inner loop@>
+if cur_cmd<=max_command then goto done;
+if cur_cmd>=call then
+ if cur_cmd<end_template then macro_call
+ else begin cur_cs:=frozen_endv; cur_cmd:=endv;
+ goto done; {|cur_chr=null_list|}
+ end
+else expand;
+goto restart;
+done: if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+end;
+@y
+@p procedure get_x_token; {sets |cur_cmd|, |cur_chr|, |cur_tok|,
+ and expands macros}
+label restart,done;
+begin restart: get_next;
+@^inner loop@>
+if cur_cmd<=max_command then goto done;
+if cur_cmd>=call then
+ if cur_cmd<end_template then macro_call
+ else begin cur_cs:=frozen_endv; cur_cmd:=endv;
+ goto done; {|cur_chr=null_list|}
+ end
+else expand;
+goto restart;
+done: if cur_cs=0 then
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ cur_tok:=cur_chr
+ else cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+end;
+@z
+
+@x [25.381] l.8151 - pTeX: x_token
+@p procedure x_token; {|get_x_token| without the initial |get_next|}
+begin while cur_cmd>max_command do
+ begin expand;
+ get_next;
+ end;
+if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+@y
+@p procedure x_token; {|get_x_token| without the initial |get_next|}
+begin while cur_cmd>max_command do
+ begin expand;
+ get_next;
+ end;
+if cur_cs=0 then
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ cur_tok:=cur_chr
+ else cur_tok:=(cur_cmd*@'400)+cur_chr
+else cur_tok:=cs_token_flag+cur_cs;
+@z
+
+@x [26.413] l.8341 - pTeX: scan_something_internal
+@p procedure scan_something_internal(@!level:small_number;@!negative:boolean);
+@y
+@p @t\4@>@<Declare procedures needed in |scan_something_internal|@>@t@>@/
+procedure scan_something_internal(@!level:small_number;@!negative:boolean);
+@z
+@x [26.413] l.8343 - pTeX: scan_something_internal
+var m:halfword; {|chr_code| part of the operand token}
+@y
+var m:halfword; {|chr_code| part of the operand token}
+@!tx:pointer; {effective tail node}
+@!qx:halfword; {general purpose index}
+@z
+@x [26.413] l.8345 - pTeX: scan_something_internal
+begin m:=cur_chr;
+case cur_cmd of
+def_code: @<Fetch a character code from some table@>;
+toks_register,assign_toks,def_family,set_font,def_font: @<Fetch a token list or
+ font identifier, provided that |level=tok_val|@>;
+@y
+@!q,@!r:pointer;
+begin m:=cur_chr;
+case cur_cmd of
+assign_kinsoku: @<Fetch breaking penalty from some table@>;
+assign_inhibit_xsp_code: @<Fetch inhibit type from some table@>;
+set_kansuji_char: @<Fetch kansuji char code from some table@>;
+def_code: @<Fetch a character code from some table@>;
+toks_register,assign_toks,def_family,set_font,def_font,def_jfont,def_tfont:
+ @<Fetch a token list or font identifier, provided that |level=tok_val|@>;
+@z
+
+@x [26.414] l.8373 - pTeX:
+begin scan_char_num;
+if m=math_code_base then scanned_result(ho(math_code(cur_val)))(int_val)
+else if m<math_code_base then scanned_result(equiv(m+cur_val))(int_val)
+else scanned_result(eqtb[m+cur_val].int)(int_val);
+@y
+begin
+if m=math_code_base then
+ begin scan_ascii_num;
+ scanned_result(ho(math_code(cur_val)))(int_val); end
+else if m=kcat_code_base then
+ begin scan_char_num;
+ scanned_result(equiv(m+kcatcodekey(cur_val)))(int_val); end
+else if m<math_code_base then { \.{\\lccode}, \.{\\uccode}, \.{\\sfcode}, \.{\\catcode} }
+ begin scan_ascii_num;
+ scanned_result(equiv(m+cur_val))(int_val) end
+else { \.{\\delcode} }
+ begin scan_ascii_num;
+ scanned_result(eqtb[m+cur_val].int)(int_val) end;
+@z
+
+@x pTeX: \ptexversion
+@d badness_code=glue_val+2 {code for \.{\\badness}}
+@y
+@d badness_code=glue_val+2 {code for \.{\\badness}}
+@d ptex_version_code=badness_code+1 {code for \.{\\ptexversion}}
+@d ptex_minor_version_code=ptex_version_code+1 {code for \.{\\ptexminorversion}}
+@z
+
+@x pTeX: \ptexversion
+primitive("badness",last_item,badness_code);
+@!@:badness_}{\.{\\badness} primitive@>
+@y
+primitive("badness",last_item,badness_code);
+@!@:badness_}{\.{\\badness} primitive@>
+primitive("ptexversion",last_item,ptex_version_code);
+@!@:ptexversion_}{\.{\\ptexversion} primitive@>
+primitive("ptexminorversion",last_item,ptex_minor_version_code);
+@!@:ptexminorversion_}{\.{\\ptexminorversion} primitive@>
+@z
+
+@x pTeX: \ptexversion
+ input_line_no_code: print_esc("inputlineno");
+@y
+ input_line_no_code: print_esc("inputlineno");
+ ptex_version_code: print_esc("ptexversion");
+ ptex_minor_version_code: print_esc("ptexminorversion");
+@z
+
+@x [26.420] l.8474 - pTeX: Fetch a box dimension: dir_node
+begin scan_eight_bit_int;
+if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc;
+@y
+begin scan_eight_bit_int; q:=box(cur_val);
+if q=null then cur_val:=0
+else begin qx:=q;
+ while (q<>null)and(abs(box_dir(q))<>abs(direction)) do q:=link(q);
+ if q=null then
+ begin r:=link(qx); link(qx):=null;
+ q:=new_dir_node(qx,abs(direction)); link(qx):=r;
+ cur_val:=mem[q+m].sc;
+ delete_glue_ref(space_ptr(q)); delete_glue_ref(xspace_ptr(q));
+ free_node(q,box_node_size);
+ end
+ else cur_val:=mem[q+m].sc;
+ end;
+@z
+
+@x [26.424] l.8508 - pTeX: disp_node
+legal in similar contexts.
+@y
+legal in similar contexts.
+
+The macro |find_effective_tail_pTeX| sets |tx| to the last non-|disp_node|
+of the current list.
+@z
+
+@x [26.424] l.8510 - pTeX: disp_node
+@<Fetch an item in the current node...@>=
+@y
+@d find_effective_tail_pTeX==
+tx:=tail;
+if not is_char_node(tx) then
+ if type(tx)=disp_node then
+ begin tx:=prev_node;
+ if not is_char_node(tx) then
+ if type(tx)=disp_node then {|disp_node| from a discretionary}
+ begin tx:=head; q:=link(head);
+ while q<>prev_node do
+ begin if is_char_node(q) then tx:=q
+ else if type(q)<>disp_node then tx:=q;
+ end;
+ q:=link(q);
+ end;
+ end
+@#
+@d find_effective_tail==find_effective_tail_pTeX
+
+@<Fetch an item in the current node...@>=
+@z
+
+@x pTeX: \ptexversion
+ begin if cur_chr=input_line_no_code then cur_val:=line
+ else cur_val:=last_badness; {|cur_chr=badness_code|}
+@y
+ begin case m of
+ input_line_no_code: cur_val:=line;
+ badness_code: cur_val:=last_badness;
+ ptex_version_code: cur_val:=pTeX_version;
+ ptex_minor_version_code: cur_val:=pTeX_minor_version;
+ end; {there and no other cases}
+@z
+
+@x [26.424] l.8516 - pTeX: Fetch an item ...: disp_node
+else begin if cur_chr=glue_val then cur_val:=zero_glue@+else cur_val:=0;
+@y
+else begin if cur_chr=glue_val then cur_val:=zero_glue@+else cur_val:=0;
+ find_effective_tail;
+@z
+@x [26.424] l.8518 - pTeX: Fetch an item ...: disp_node
+ if not is_char_node(tail)and(mode<>0) then
+ case cur_chr of
+ int_val: if type(tail)=penalty_node then cur_val:=penalty(tail);
+ dimen_val: if type(tail)=kern_node then cur_val:=width(tail);
+ glue_val: if type(tail)=glue_node then
+ begin cur_val:=glue_ptr(tail);
+ if subtype(tail)=mu_glue then cur_val_level:=mu_val;
+ end;
+@y
+ if not is_char_node(tx)and(tx<>head)and(mode<>0) then
+ case cur_chr of
+ int_val: if type(tx)=penalty_node then cur_val:=penalty(tx);
+ dimen_val: if type(tx)=kern_node then cur_val:=width(tx);
+ glue_val: if type(tx)=glue_node then
+ begin cur_val:=glue_ptr(tx);
+ if subtype(tx)=mu_glue then cur_val_level:=mu_val;
+ end;
+@z
+@x [26.424] l.8527 - pTeX: Fetch an item ...: disp_node
+ else if (mode=vmode)and(tail=head) then
+@y
+ else if (mode=vmode)and(tx=head) then
+@z
+
+@x [26.435] l.8940 - pTeX: scan_char_num
+procedure scan_char_num;
+begin scan_int;
+if (cur_val<0)or(cur_val>255) then
+ begin print_err("Bad character code");
+@.Bad character code@>
+ help2("A character number must be between 0 and 255.")@/
+ ("I changed this one to zero."); int_error(cur_val); cur_val:=0;
+ end;
+end;
+@y
+procedure scan_ascii_num;
+begin scan_int;
+if (cur_val<0)or(cur_val>255) then
+ begin print_err("Bad character code");
+@.Bad character code@>
+ help2("A character number must be between 0 and 255.")@/
+ ("I changed this one to zero."); int_error(cur_val); cur_val:=0;
+ end;
+end;
+procedure scan_char_num;
+begin scan_int;
+if not is_char_ascii(cur_val) and not is_char_kanji(cur_val) then
+ begin print_err("Bad character code");
+@.Bad character code@>
+ help2("A character number must be between 0 and 255, or KANJI code.")@/
+ ("I changed this one to zero."); int_error(cur_val); cur_val:=0;
+ end;
+end;
+@z
+
+@x [26.442] l.9045 - pTeX: KANJI character scanning
+@<Scan an alphabetic character code into |cur_val|@>=
+begin get_token; {suppress macro expansion}
+if cur_tok<cs_token_flag then
+ begin cur_val:=cur_chr;
+ if cur_cmd<=right_brace then
+ if cur_cmd=right_brace then incr(align_state)
+ else decr(align_state);
+ end
+else if cur_tok<cs_token_flag+single_base then
+ cur_val:=cur_tok-cs_token_flag-active_base
+else cur_val:=cur_tok-cs_token_flag-single_base;
+if cur_val>255 then
+ begin print_err("Improper alphabetic constant");
+@.Improper alphabetic constant@>
+ help2("A one-character control sequence belongs after a ` mark.")@/
+ ("So I'm essentially inserting \0 here.");
+ cur_val:="0"; back_error;
+ end
+else @<Scan an optional space@>;
+end
+@y
+@<Scan an alphabetic character code into |cur_val|@>=
+begin get_token; {suppress macro expansion}
+if cur_tok<cs_token_flag then
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then {|wchar_token|}
+ begin skip_mode:=false; cur_val:=tonum(cur_chr);
+ end
+ else begin cur_val:=cur_chr;
+ if cur_cmd<=right_brace then
+ if cur_cmd=right_brace then incr(align_state)
+ else decr(align_state);
+ end
+else if cur_tok<cs_token_flag+single_base then
+ cur_val:=cur_tok-cs_token_flag-active_base
+else
+ { the token is a CS;
+ * if |kanji|<=|cur_cmd|<=|max_char_code|, then CS is let-equal to |wchar_token|
+ * if |max_char_code|<|cur_cmd|, then CS is a multibyte CS
+ => both case should raise "Improper ..." error
+ * otherwise it should be a single-character CS with |cur_val|<=255 }
+ begin if not (cur_cmd<kanji) then cur_cmd:=invalid_char;
+ cur_val:=cur_tok-cs_token_flag-single_base;
+ end;
+if (cur_val>255)and(cur_cmd<kanji) then
+ begin print_err("Improper alphabetic or KANJI constant");
+@.Improper alphabetic constant@>
+ help2("A one-character control sequence belongs after a ` mark.")@/
+ ("So I'm essentially inserting \0 here.");
+ cur_val:="0"; back_error;
+ end
+else @<Scan an optional space@>;
+skip_mode:=true;
+end
+@z
+
+@x [26.455] l.9288 - pTeX: zw, zh: zenkaku width & height
+if scan_keyword("em") then v:=(@<The em width for |cur_font|@>)
+@.em@>
+else if scan_keyword("ex") then v:=(@<The x-height for |cur_font|@>)
+@.ex@>
+else goto not_found;
+@y
+if scan_keyword("em") then v:=(@<The em width for |cur_font|@>)
+@.em@>
+else if scan_keyword("ex") then v:=(@<The x-height for |cur_font|@>)
+@.ex@>
+else if scan_keyword("zw") then @<The KANJI width for |cur_jfont|@>
+@.ze@>
+else if scan_keyword("zh") then @<The KANJI height for |cur_jfont|@>
+@.zh@>
+else goto not_found;
+@z
+
+@x [26.458] l.9345 - pTeX: dimension unit: Q, H (1/4 mm)
+else if scan_keyword("sp") then goto done
+@.sp@>
+@y
+else if scan_keyword("H") then set_conversion(7227)(10160)
+@.H@>
+else if scan_keyword("Q") then set_conversion(7227)(10160)
+@.Q@>
+else if scan_keyword("sp") then goto done
+@.sp@>
+@z
+
+@x [26.459] pTeX: help message
+help6("Dimensions can be in units of em, ex, in, pt, pc,")@/
+ ("cm, mm, dd, cc, bp, or sp; but yours is a new one!")@/
+@y
+help6("Dimensions can be in units of em, ex, zw, zh, in, pt, pc,")@/
+ ("cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!")@/
+@z
+
+@x [27.464] l.9475 - pTeX: str_toks
+ if t=" " then t:=space_token
+ else t:=other_token+t;
+@y
+ if multistrlen(ustringcast(str_pool), pool_ptr, k)=2 then
+ begin t:=fromBUFF(ustringcast(str_pool), pool_ptr, k); incr(k);
+ end
+ else if t=" " then t:=space_token
+ else t:=other_token+t;
+@z
+
+@x [27.468] l.9531 - pTeX: convert KANJI code
+@d number_code=0 {command code for \.{\\number}}
+@d roman_numeral_code=1 {command code for \.{\\romannumeral}}
+@d string_code=2 {command code for \.{\\string}}
+@d meaning_code=3 {command code for \.{\\meaning}}
+@d font_name_code=4 {command code for \.{\\fontname}}
+@d job_name_code=5 {command code for \.{\\jobname}}
+@y
+@d number_code=0 {command code for \.{\\number}}
+@d roman_numeral_code=1 {command code for \.{\\romannumeral}}
+@d kansuji_code=2 {command code for \.{\\kansuji}}
+@d string_code=3 {command code for \.{\\string}}
+@d meaning_code=4 {command code for \.{\\meaning}}
+@d font_name_code=5 {command code for \.{\\fontname}}
+@d euc_code=6 {command code for \.{\\euc}}
+@d sjis_code=7 {command code for \.{\\sjis}}
+@d jis_code=8 {command code for \.{\\jis}}
+@d kuten_code=9 {command code for \.{\\kuten}}
+@d ptex_revision_code=10 {command code for \.{\\ptexrevision}}
+@d ptex_convert_codes=11 {end of \pTeX's command codes}
+@d job_name_code=ptex_convert_codes {command code for \.{\\jobname}}
+@z
+
+@x [27.468] l.9547 - pTeX:
+primitive("fontname",convert,font_name_code);@/
+@!@:font_name_}{\.{\\fontname} primitive@>
+@y
+primitive("fontname",convert,font_name_code);@/
+@!@:font_name_}{\.{\\fontname} primitive@>
+primitive("kansuji",convert,kansuji_code);
+@!@:kansuji_}{\.{\\kansuji} primitive@>
+primitive("euc",convert,euc_code);
+@!@:euc_}{\.{\\euc} primitive@>
+primitive("sjis",convert,sjis_code);
+@!@:sjis_}{\.{\\sjis} primitive@>
+primitive("jis",convert,jis_code);
+@!@:jis_}{\.{\\jis} primitive@>
+primitive("kuten",convert,kuten_code);
+@!@:kuten_}{\.{\\kuten} primitive@>
+primitive("ptexrevision",convert,ptex_revision_code);
+@!@:ptexrevision_}{\.{\\ptexrevision} primitive@>
+@z
+
+@x [27.469] l.9558 - pTeX:
+ font_name_code: print_esc("fontname");
+@y
+ font_name_code: print_esc("fontname");
+ kansuji_code: print_esc("kansuji");
+ euc_code:print_esc("euc");
+ sjis_code:print_esc("sjis");
+ jis_code:print_esc("jis");
+ kuten_code:print_esc("kuten");
+ ptex_revision_code:print_esc("ptexrevision");
+@z
+
+@x [27.470] l.9566 - pTeX: convert KANJI code continue
+@p procedure conv_toks;
+var old_setting:0..max_selector; {holds |selector| setting}
+@y
+@p procedure conv_toks;
+var old_setting:0..max_selector; {holds |selector| setting}
+@!cx:KANJI_code; {temporary register for KANJI}
+@z
+
+@x [27.471] l.9577 - pTeX: convert KANJI code continue
+@ @<Scan the argument for command |c|@>=
+case c of
+number_code,roman_numeral_code: scan_int;
+string_code, meaning_code: begin save_scanner_status:=scanner_status;
+ scanner_status:=normal; get_token; scanner_status:=save_scanner_status;
+ end;
+@y
+@ @<Scan the argument for command |c|@>=
+KANJI(cx):=0;
+case c of
+number_code,roman_numeral_code,
+kansuji_code,euc_code,sjis_code,jis_code,kuten_code: scan_int;
+ptex_revision_code: do_nothing;
+string_code, meaning_code: begin save_scanner_status:=scanner_status;
+ scanner_status:=normal; get_token;
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then {|wchar_token|}
+ KANJI(cx):=cur_tok;
+ scanner_status:=save_scanner_status;
+ end;
+@z
+
+@x [27.471] l.9587 - pTeX: convert KANJI code continue
+@ @<Print the result of command |c|@>=
+case c of
+number_code: print_int(cur_val);
+roman_numeral_code: print_roman_int(cur_val);
+string_code:if cur_cs<>0 then sprint_cs(cur_cs)
+ else print_char(cur_chr);
+@y
+@ @<Print the result of command |c|@>=
+case c of
+number_code: print_int(cur_val);
+roman_numeral_code: print_roman_int(cur_val);
+jis_code: print_int(fromJIS(cur_val));
+euc_code: print_int(fromEUC(cur_val));
+sjis_code: print_int(fromSJIS(cur_val));
+kuten_code: print_int(fromKUTEN(cur_val));
+ptex_revision_code: print(pTeX_revision);
+kansuji_code: print_kansuji(cur_val);
+string_code:if cur_cs<>0 then sprint_cs(cur_cs)
+ else if KANJI(cx)=0 then print_char(cur_chr)
+ else print_kanji(cx);
+@z
+
+@x [28.487] l.9852 - pTeX: iftdir, ifydir, ifddir, iftbox, ifybox, ifdbox
+@d if_case_code=16 { `\.{\\ifcase}' }
+@y
+@d if_case_code=16 { `\.{\\ifcase}' }
+@#
+@d if_tdir_code=if_case_code+1 { `\.{\\iftdir}' }
+@d if_ydir_code=if_tdir_code+1 { `\.{\\ifydir}' }
+@d if_ddir_code=if_ydir_code+1 { `\.{\\ifddir}' }
+@d if_mdir_code=if_ddir_code+1 { `\.{\\ifmdir}' }
+@d if_tbox_code=if_mdir_code+1 { `\.{\\iftbox}' }
+@d if_ybox_code=if_tbox_code+1 { `\.{\\ifybox}' }
+@d if_dbox_code=if_ybox_code+1 { `\.{\\ifdbox}' }
+@d if_mbox_code=if_dbox_code+1 { `\.{\\ifmbox}' }
+@#
+@d if_jfont_code=if_mbox_code+1 { `\.{\\ifjfont}' }
+@d if_tfont_code=if_jfont_code+1 { `\.{\\iftfont}' }
+@z
+
+@x [28.487] l.9887 - pTeX: iftdir, ifydir, ifddir, iftbox, ifybox, ifdbox
+primitive("ifcase",if_test,if_case_code);
+@!@:if_case_}{\.{\\ifcase} primitive@>
+@y
+primitive("ifcase",if_test,if_case_code);
+@!@:if_case_}{\.{\\ifcase} primitive@>
+primitive("iftdir",if_test,if_tdir_code);
+@!@:if_tdir_}{\.{\\iftdir} primitive@>
+primitive("ifydir",if_test,if_ydir_code);
+@!@:if_ydir_}{\.{\\ifydir} primitive@>
+primitive("ifddir",if_test,if_ddir_code);
+@!@:if_ddir_}{\.{\\ifddir} primitive@>
+primitive("ifmdir",if_test,if_mdir_code);
+@!@:if_mdir_}{\.{\\ifmdir} primitive@>
+primitive("iftbox",if_test,if_tbox_code);
+@!@:if_tbox_}{\.{\\iftbox} primitive@>
+primitive("ifybox",if_test,if_ybox_code);
+@!@:if_ybox_}{\.{\\ifybox} primitive@>
+primitive("ifdbox",if_test,if_dbox_code);
+@!@:if_dbox_}{\.{\\ifdbox} primitive@>
+primitive("ifmbox",if_test,if_mbox_code);
+@!@:if_mbox_}{\.{\\ifmbox} primitive@>
+primitive("ifjfont",if_test,if_jfont_code);
+@!@:if_jfont_}{\.{\\ifjfont} primitive@>
+primitive("iftfont",if_test,if_tfont_code);
+@!@:if_tfont_}{\.{\\iftfont} primitive@>
+@z
+
+@x [28.488] l.9907 - pTeX: iftdir, ifydir, ifddir, iftbox, ifybox, ifdbox
+ if_case_code:print_esc("ifcase");
+@y
+ if_case_code:print_esc("ifcase");
+ if_tdir_code:print_esc("iftdir");
+ if_ydir_code:print_esc("ifydir");
+ if_ddir_code:print_esc("ifddir");
+ if_mdir_code:print_esc("ifmdir");
+ if_tbox_code:print_esc("iftbox");
+ if_ybox_code:print_esc("ifybox");
+ if_dbox_code:print_esc("ifdbox");
+ if_mbox_code:print_esc("ifmbox");
+ if_jfont_code:print_esc("ifjfont");
+ if_tfont_code:print_esc("iftfont");
+@z
+
+@x [28.501] l.10073 - pTeX: iftdir, ifydir, ifddir, iftbox, ifybox, ifdbox
+if_void_code, if_hbox_code, if_vbox_code: @<Test box register status@>;
+@y
+if_tdir_code: b:=(abs(direction)=dir_tate);
+if_ydir_code: b:=(abs(direction)=dir_yoko);
+if_ddir_code: b:=(abs(direction)=dir_dtou);
+if_mdir_code: b:=(direction<0);
+if_void_code, if_hbox_code, if_vbox_code, if_tbox_code, if_ybox_code, if_dbox_code, if_mbox_code:
+ @<Test box register status@>;
+if_jfont_code, if_tfont_code:
+ begin scan_font_ident;
+ if this_if=if_jfont_code then b:=(font_dir[cur_val]=dir_yoko)
+ else if this_if=if_tfont_code then b:=(font_dir[cur_val]=dir_tate);
+ end;
+@z
+
+@x [28.505] l.10118 - pTeX: Test box register status : iftbox, ifybox, ifdbox
+if this_if=if_void_code then b:=(p=null)
+else if p=null then b:=false
+else if this_if=if_hbox_code then b:=(type(p)=hlist_node)
+else b:=(type(p)=vlist_node);
+@y
+if this_if=if_void_code then b:=(p=null)
+else if p=null then b:=false
+else begin
+ if type(p)=dir_node then p:=list_ptr(p);
+ if this_if=if_hbox_code then b:=(type(p)=hlist_node)
+ else if this_if=if_vbox_code then b:=(type(p)=vlist_node)
+ else if this_if=if_tbox_code then b:=(abs(box_dir(p))=dir_tate)
+ else if this_if=if_ybox_code then b:=(abs(box_dir(p))=dir_yoko)
+ else if this_if=if_dbox_code then b:=(abs(box_dir(p))=dir_dtou)
+ else b:=(box_dir(p)<0);
+ end
+@z
+
+@x [28.502] l.10138 - pTeX: ifx : Test character : KANJI character
+if (cur_cmd>active_char)or(cur_chr>255) then {not a character}
+ begin m:=relax; n:=256;
+ end
+else begin m:=cur_cmd; n:=cur_chr;
+ end;
+get_x_token_or_active_char;
+if (cur_cmd>active_char)or(cur_chr>255) then
+ begin cur_cmd:=relax; cur_chr:=256;
+ end;
+@y
+if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ begin n:=cur_chr; m:=kcat_code(kcatcodekey(n));
+ end
+else if (cur_cmd>active_char)or(cur_chr>255) then
+ begin m:=relax; n:=max_cjk_val;
+ end
+else begin m:=cur_cmd; n:=cur_chr;
+ end;
+get_x_token_or_active_char;
+if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ begin cur_cmd:=kcat_code(kcatcodekey(cur_chr));
+ end
+else if (cur_cmd>active_char)or(cur_chr>255) then
+ begin cur_cmd:=relax; cur_chr:=max_cjk_val;
+ end;
+@z
+
+@x pTeX for Windows, treat filename with 0x5c
+@p procedure begin_name;
+begin area_delimiter:=0; ext_delimiter:=0; quoted_filename:=false;
+end;
+@y
+@p procedure begin_name;
+begin area_delimiter:=0; ext_delimiter:=0; quoted_filename:=false; prev_char:=0;
+end;
+@z
+
+@x pTeX for Windows, treat filename with 0x5c
+else begin str_room(1); append_char(c); {contribute |c| to the current string}
+ if IS_DIR_SEP(c) then
+ begin area_delimiter:=cur_length; ext_delimiter:=0;
+ end
+ else if c="." then ext_delimiter:=cur_length;
+ more_name:=true;
+ end;
+end;
+@y
+else begin str_room(1); append_char(c); {contribute |c| to the current string}
+ if (IS_DIR_SEP(c)and(not_kanji_char_seq(prev_char,c))) then
+ begin area_delimiter:=cur_length; ext_delimiter:=0;
+ end
+ else if c="." then ext_delimiter:=cur_length;
+ more_name:=true;
+ end;
+ prev_char:=c;
+end;
+@z
+
+@x [29.526] l.10668 - pTeX: scan file name
+loop@+begin if (cur_cmd>other_char)or(cur_chr>255) then {not a character}
+ begin back_input; goto done;
+ end;
+ {If |cur_chr| is a space and we're not scanning a token list, check
+ whether we're at the end of the buffer. Otherwise we end up adding
+ spurious spaces to file names in some cases.}
+ if (cur_chr=" ") and (state<>token_list) and (loc>limit) then goto done;
+ if not more_name(cur_chr) then goto done;
+ get_x_token;
+ end;
+ end;
+done: end_name; name_in_progress:=false;
+@y
+skip_mode:=false;
+loop@+begin
+ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then {is kanji}
+ begin str_room(2);
+ append_char(Hi(cur_chr)); {kanji upper byte}
+ append_char(Lo(cur_chr)); {kanji lower byte}
+ end
+ else if (cur_cmd>other_char)or(cur_chr>255) then {not an alphabet}
+ begin back_input; goto done;
+ end
+ {If |cur_chr| is a space and we're not scanning a token list, check
+ whether we're at the end of the buffer. Otherwise we end up adding
+ spurious spaces to file names in some cases.}
+ else if ((cur_chr=" ") and (state<>token_list) and (loc>limit)) or not more_name(cur_chr) then goto done;
+ get_x_token;
+ end;
+ end;
+done: end_name; name_in_progress:=false;
+skip_mode:=true;
+@z
+
+@x [29.536] l.10834 - pTeX:
+begin
+if src_specials_p or file_line_error_style_p or parse_first_line_p
+then
+ wlog(banner_k)
+else
+ wlog(banner);
+@y
+begin
+if src_specials_p or file_line_error_style_p or parse_first_line_p
+then
+ wlog(banner_k)
+else
+ wlog(banner);
+ wlog(' (');
+ wlog(conststringcast(get_enc_string));
+ wlog(')');
+@z
+
+@x [30.560] l.10968 - pTeX:
+This is called BigEndian order.
+@!@^BigEndian order@>
+@y
+This is called BigEndian order.
+@!@^BigEndian order@>
+
+We get \TeX\ knowledge about KANJI fonts from \.{JFM} files.
+The \.{JFM} format holds more two 16-bit integers, |id| and |nt|,
+at the top of the file.
+$$\vbox{\halign{\hfil#&$\null=\null$#\hfil\cr
+|id|&identification code of the file;\cr
+|nt|&number of words in the |char_type| table;\cr}}$$
+The identification byte, |id| equals~11 or~9. When \TeX\ reads a font file,
+the |id| equals~11 or~9 then the font is the \.{JFM}, othercases it is
+the \.{TFM} file. The \.{TFM} holds |lf| at the same postion of |id|,
+usually it takes a larger number than~9 or~11.
+The |nt| is nonnegative and less than $2^{15}$.
+
+We must have |bc=0|,
+$$\hbox{|lf=7+lh+nt+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np|.}$$
+
+@d yoko_jfm_id=11 {for `yoko-kumi' fonts}
+@d tate_jfm_id=9 {for `tate-kumi' fonts}
+@z
+
+@x [30.544] l.11085 - pTeX: gk_tag
+operation looks for both |list_tag| and |ext_tag|.
+@y
+operation looks for both |list_tag| and |ext_tag|.
+
+If the \.{JFM}, the |lig_tag| is called |gk_tag|. The |gk_tag| means that
+this character has a glue/kerning program starting at position |remainder|
+in the |glue_kern| array. And a \.{JFM} does not use |tag=2| and |tag=3|.
+@z
+
+@x [30.544] l.11088 - pTeX: gk_tag
+@d lig_tag=1 {character has a ligature/kerning program}
+@y
+@d lig_tag=1 {character has a ligature/kerning program}
+@d gk_tag=1 {character has a glue/kerning program}
+@z
+
+@x [30.549] l.11228 - pTeX:
+@<Glob...@>=
+@!font_info: ^fmemory_word;
+@y
+@<Glob...@>=
+@!font_info: ^memory_word; {pTeX: use halfword for |char_type| table.}
+@!font_dir: ^eight_bits;
+ {pTeX: direction of fonts, 0 is default, 1 is Yoko, 2 is Tate}
+@!font_num_ext: ^integer;
+ {pTeX: number of the |char_type| table.}
+@z
+
+@x [30.550] l.11270 - pTeX:
+@!char_base: ^integer;
+ {base addresses for |char_info|}
+@y
+@!char_base: ^integer;
+ {base addresses for |char_info|}
+@!ctype_base: ^integer;
+ {pTeX: base addresses for KANJI character type parameters}
+@z
+
+@x [30.554] l.11373 - pTeX:
+@d orig_char_info_end(#)==#].qqqq
+@d orig_char_info(#)==font_info[char_base[#]+orig_char_info_end
+@y
+@d orig_char_info_end(#)==#].qqqq
+@d orig_char_info(#)==font_info[char_base[#]+orig_char_info_end
+@#
+@d kchar_code_end(#)==#].hh.rh
+@d kchar_code(#)==font_info[ctype_base[#]+kchar_code_end
+@d kchar_type_end(#)==#].hh.lhfield
+@d kchar_type(#)==font_info[ctype_base[#]+kchar_type_end
+@z
+
+@x [30.557] l.11413 - pTeX: glue_kern_start
+@d lig_kern_start(#)==lig_kern_base[#]+rem_byte {beginning of lig/kern program}
+@d lig_kern_restart_end(#)==256*op_byte(#)+rem_byte(#)+32768-kern_base_offset
+@d lig_kern_restart(#)==lig_kern_base[#]+lig_kern_restart_end
+@y
+@d lig_kern_start(#)==lig_kern_base[#]+rem_byte {beginning of lig/kern program}
+@d lig_kern_restart_end(#)==256*op_byte(#)+rem_byte(#)+32768-kern_base_offset
+@d lig_kern_restart(#)==lig_kern_base[#]+lig_kern_restart_end
+@d glue_kern_start(#)==lig_kern_base[#]+rem_byte {beginning of glue/kern program}
+@d glue_kern_restart_end(#)==256*op_byte(#)+rem_byte(#)+32768-kern_base_offset
+@d glue_kern_restart(#)==lig_kern_base[#]+glue_kern_restart_end
+@z
+
+@x [30.560] l.11457 - pTeX: jfm_flag, jfm_id, nt, cx
+var k:font_index; {index into |font_info|}
+@y
+var k:font_index; {index into |font_info|}
+@!jfm_flag:dir_default..dir_tate; {direction of the \.{JFM}}
+@!nt:halfword; {number of the |char_type| tables}
+@!cx:KANJI_code; {kanji code}
+@z
+
+@x
+@d read_sixteen(#)==begin #:=fbyte;
+ if #>127 then abort;
+ fget; #:=#*@'400+fbyte;
+ end
+@y
+@d read_sixteen(#)==begin #:=fbyte;
+ if #>127 then abort;
+ fget; #:=#*@'400+fbyte;
+ end
+@d read_twentyfourx(#)==begin #:=fbyte;
+ fget; #:=#*@"100+fbyte;
+ fget; #:=#+fbyte*@"10000;
+ end
+@z
+
+@x [30.565] l.11548 - pTeX: read tfm size
+@ @<Read the {\.{TFM}} size fields@>=
+begin read_sixteen(lf);
+fget; read_sixteen(lh);
+fget; read_sixteen(bc);
+fget; read_sixteen(ec);
+if (bc>ec+1)or(ec>255) then abort;
+if bc>255 then {|bc=256| and |ec=255|}
+ begin bc:=1; ec:=0;
+ end;
+fget; read_sixteen(nw);
+fget; read_sixteen(nh);
+fget; read_sixteen(nd);
+fget; read_sixteen(ni);
+fget; read_sixteen(nl);
+fget; read_sixteen(nk);
+fget; read_sixteen(ne);
+fget; read_sixteen(np);
+if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort;
+if (nw=0)or(nh=0)or(nd=0)or(ni=0) then abort;
+end
+@y
+@ @<Read the {\.{TFM}} size fields@>=
+begin read_sixteen(lf);
+fget; read_sixteen(lh);
+if lf=yoko_jfm_id then
+ begin jfm_flag:=dir_yoko; nt:=lh;
+ fget; read_sixteen(lf);
+ fget; read_sixteen(lh);
+ end
+else if lf=tate_jfm_id then
+ begin jfm_flag:=dir_tate; nt:=lh;
+ fget; read_sixteen(lf);
+ fget; read_sixteen(lh);
+ end
+else begin jfm_flag:=dir_default; nt:=0;
+ end;
+fget; read_sixteen(bc);
+fget; read_sixteen(ec);
+if (bc>ec+1)or(ec>255) then abort;
+if bc>255 then {|bc=256| and |ec=255|}
+ begin bc:=1; ec:=0;
+ end;
+fget; read_sixteen(nw);
+fget; read_sixteen(nh);
+fget; read_sixteen(nd);
+fget; read_sixteen(ni);
+fget; read_sixteen(nl);
+fget; read_sixteen(nk);
+fget; read_sixteen(ne);
+fget; read_sixteen(np);
+if jfm_flag<>dir_default then
+ begin if lf<>7+lh+nt+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort;
+ end
+else
+ begin if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort;
+ end;
+if (nw=0)or(nh=0)or(nd=0)or(ni=0) then abort;
+end
+@z
+
+@x [30.566] l.11574 - pTeX: set font_dir & font_num_ext
+@<Use size fields to allocate font information@>=
+lf:=lf-6-lh; {|lf| words should be loaded into |font_info|}
+if np<7 then lf:=lf+7-np; {at least seven parameters will appear}
+if (font_ptr=font_max)or(fmem_ptr+lf>font_mem_size) then
+ @<Apologize for not loading the font, |goto done|@>;
+f:=font_ptr+1;
+char_base[f]:=fmem_ptr-bc;
+width_base[f]:=char_base[f]+ec+1;
+height_base[f]:=width_base[f]+nw;
+depth_base[f]:=height_base[f]+nh;
+italic_base[f]:=depth_base[f]+nd;
+lig_kern_base[f]:=italic_base[f]+ni;
+kern_base[f]:=lig_kern_base[f]+nl-kern_base_offset;
+exten_base[f]:=kern_base[f]+kern_base_offset+nk;
+param_base[f]:=exten_base[f]+ne
+@y
+@<Use size fields to allocate font information@>=
+if jfm_flag<>dir_default then
+ lf:=lf-7-lh {If \.{JFM}, |lf| holds more two-16bit records than \.{TFM}}
+else
+ lf:=lf-6-lh; {|lf| words should be loaded into |font_info|}
+if np<7 then lf:=lf+7-np; {at least seven parameters will appear}
+if (font_ptr=font_max)or(fmem_ptr+lf>font_mem_size) then
+ @<Apologize for not loading the font, |goto done|@>;
+f:=font_ptr+1;
+font_dir[f]:=jfm_flag;
+font_num_ext[f]:=nt;
+ctype_base[f]:=fmem_ptr;
+char_base[f]:=ctype_base[f]+nt-bc;
+width_base[f]:=char_base[f]+ec+1;
+height_base[f]:=width_base[f]+nw;
+depth_base[f]:=height_base[f]+nh;
+italic_base[f]:=depth_base[f]+nd;
+lig_kern_base[f]:=italic_base[f]+ni;
+kern_base[f]:=lig_kern_base[f]+nl-kern_base_offset;
+exten_base[f]:=kern_base[f]+kern_base_offset+nk;
+param_base[f]:=exten_base[f]+ne;
+@z
+
+@x [30.569] l.11619 - pTeX: read char_type
+@ @<Read character data@>=
+for k:=fmem_ptr to width_base[f]-1 do
+ begin store_four_quarters(font_info[k].qqqq);
+@y
+@ @<Read character data@>=
+if jfm_flag<>dir_default then
+ for k:=ctype_base[f] to ctype_base[f]+nt-1 do
+ begin
+ fget; read_twentyfourx(cx); font_info[k].hh.rh:=tokanji(cx); {|kchar_code|}
+ fget; cx:=fbyte; font_info[k].hh.lhfield:=tonum(cx); {|kchar_type|}
+ end;
+for k:=char_base[f]+bc to width_base[f]-1 do
+ begin store_four_quarters(font_info[k].qqqq);
+@z
+
+@x [30.570] l.11638 - pTeX:
+@d current_character_being_worked_on==k+bc-fmem_ptr
+@y
+@d current_character_being_worked_on==k-char_base[f]
+@z
+
+@x [30.573] l.11704 - pTeX: jfm
+ if a>128 then
+ begin if 256*c+d>=nl then abort;
+ if a=255 then if k=lig_kern_base[f] then bchar:=b;
+ end
+ else begin if b<>bchar then check_existence(b);
+ if c<128 then check_existence(d) {check ligature}
+ else if 256*(c-128)+d>=nk then abort; {check kern}
+ if a<128 then if k-lig_kern_base[f]+a+1>=nl then abort;
+ end;
+ end;
+@y
+ if a>128 then
+ begin if 256*c+d>=nl then abort;
+ if a=255 then if k=lig_kern_base[f] then bchar:=b;
+ end
+ else begin if b<>bchar then check_existence(b);
+ if c<128 then begin
+ if jfm_flag<>dir_default then begin if d>=ne then abort; end
+ else check_existence(d); {check ligature}
+ end else if 256*(c-128)+d>=nk then abort; {check kern}
+ if a<128 then if k-lig_kern_base[f]+a+1>=nl then abort;
+ end;
+ end;
+@z
+
+@x [30.574] l.11720 - pTeX: read jfm exten
+for k:=exten_base[f] to param_base[f]-1 do
+ begin store_four_quarters(font_info[k].qqqq);
+@y
+if jfm_flag<>dir_default then
+ for k:=exten_base[f] to param_base[f]-1 do
+ store_scaled(font_info[k].sc) {NOTE: this area subst for glue program}
+else for k:=exten_base[f] to param_base[f]-1 do
+ begin store_four_quarters(font_info[k].qqqq);
+@z
+
+@x [30.576] l.11765 - pTeX: adjust ctype_base
+adjust(char_base); adjust(width_base); adjust(lig_kern_base);
+@y
+adjust(ctype_base);
+adjust(char_base); adjust(width_base); adjust(lig_kern_base);
+@z
+
+@x [30.577] l.11778 - pTeX: jfont, tfont
+if cur_cmd=def_font then f:=cur_font
+@y
+if cur_cmd=def_jfont then f:=cur_jfont
+else if cur_cmd=def_tfont then f:=cur_tfont
+else if cur_cmd=def_font then f:=cur_font
+@z
+
+@x [30.581]
+@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits);
+@y
+@d print_lc_hex(#)==l:=#;
+ if l<10 then print_char(l+"0")@+else print_char(l-10+"a")
+
+@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits);
+var @!l:0..255; {small indices or counters}
+@z
+@x [30.581]
+ print_ASCII(c); print(" in font ");
+@y
+ if (c<" ")or(c>"~") then
+ begin print_char("^"); print_char("^");
+ if c<64 then print_char(c+64)
+ else if c<128 then print_char(c-64)
+ else begin print_lc_hex(c div 16); print_lc_hex(c mod 16); end
+ end
+ else print_ASCII(c);
+ print(" in font ");
+@z
+
+@x [31.586] l.12189 - pTeX: define set2
+@d set1=128 {typeset a character and move right}
+@y
+@d set1=128 {typeset a character and move right}
+@d set2=129 {typeset a character and move right}
+@z
+@x [31.586] l.12214 - pTeX: define dirchg
+@d post_post=249 {postamble ending}
+@y
+@d post_post=249 {postamble ending}
+@d dirchg=255 {direction change}
+@z
+
+@x [31.587] l.12246 - pTeX: ex_id_byte
+@d id_byte=2 {identifies the kind of \.{DVI} files described here}
+@y
+@d id_byte=2 {identifies the kind of \.{DVI} files described here}
+@d ex_id_byte=3 {identifies the kind of extended \.{DVI} files}
+@z
+
+@x [32.590] l.12329 - pTeX: ex_id_byte: This dvi is extended!
+@ The last part of the postamble, following the |post_post| byte that
+signifies the end of the font definitions, contains |q|, a pointer to the
+|post| command that started the postamble. An identification byte, |i|,
+comes next; this currently equals~2, as in the preamble.
+@y
+@ The last part of the postamble, following the |post_post| byte that
+signifies the end of the font definitions, contains |q|, a pointer to the
+|post| command that started the postamble. An identification byte, |i|,
+comes next; this equals~2 or~3. If \pTeX\ primitives are not used then the
+identification byte equals~2, othercase this is set to~3.
+@z
+
+@x [32.592] l.12405 - pTeX:
+ {character and font in current |char_node|}
+@!c:quarterword;
+@!f:internal_font_number;
+@y
+ {character and font in current |char_node|}
+@!c:quarterword;
+@!f:internal_font_number;
+@!dir_used:boolean; {Is this dvi extended?}
+@z
+
+@x [32.593] l.12414 - pTeX: dir_used: Is this dvi extended?
+doing_leaders:=false; dead_cycles:=0; cur_s:=-1;
+@y
+doing_leaders:=false; dead_cycles:=0; cur_s:=-1; dir_used:=false;
+@z
+
+@x [32.617] l.12846 - pTeX: Initialize dvi_dir as shipout begins
+dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
+@y
+dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
+dvi_dir:=dir_yoko; cur_dir_hv:=dvi_dir;
+@z
+
+@x [32.619] l.12892 - pTeX: hlist_out Kanji, disp_node
+procedure hlist_out; {output an |hlist_node| box}
+label reswitch, move_past, fin_rule, next_p, continue, found;
+var base_line: scaled; {the baseline coordinate for this box}
+@y
+procedure hlist_out; {output an |hlist_node| box}
+label reswitch, move_past, fin_rule, next_p, continue, found;
+var base_line: scaled; {the baseline coordinate for this box}
+@!disp: scaled; {displacement}
+@!save_dir:eight_bits; {what |dvi_dir| should pop to}
+@!jc:KANJI_code; {temporary register for KANJI codes}
+@!ksp_ptr:pointer; {position of |auto_spacing_glue| in the hlist}
+@z
+@x [32.619] l.12913 - pTeX: hlist_out Kanji, disp_node
+incr(cur_s);
+if cur_s>0 then dvi_out(push);
+if cur_s>max_push then max_push:=cur_s;
+save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; left_edge:=cur_h;
+@y
+ksp_ptr:=space_ptr(this_box);
+incr(cur_s);
+if cur_s>0 then dvi_out(push);
+if cur_s>max_push then max_push:=cur_s;
+save_loc:=dvi_offset+dvi_ptr;
+synch_dir;
+base_line:=cur_v; left_edge:=cur_h; disp:=0;
+@z
+
+@x [32.622] l.12945 - pTeX: chain
+@<Output node |p| for |hlist_out|...@>=
+reswitch: if is_char_node(p) then
+ begin synch_h; synch_v;
+ repeat f:=font(p); c:=character(p);
+ if f<>dvi_f then @<Change font |dvi_f| to |f|@>;
+ if font_ec[f]>=qo(c) then if font_bc[f]<=qo(c) then
+ if char_exists(orig_char_info(f)(c)) then {N.B.: not |char_info|}
+ begin if c>=qi(128) then dvi_out(set1);
+ dvi_out(qo(c));@/
+ cur_h:=cur_h+char_width(f)(orig_char_info(f)(c));
+ goto continue;
+ end;
+ if mltex_enabled_p then
+ @<Output a substitution, |goto continue| if not possible@>;
+continue:
+ p:=link(p);
+ until not is_char_node(p);
+ dvi_h:=cur_h;
+ end
+else @<Output the non-|char_node| |p| for |hlist_out|
+ and move to the next node@>
+@y
+@<Output node |p| for |hlist_out|...@>=
+reswitch: if is_char_node(p) then
+ begin synch_h; synch_v;
+ chain:=false;
+ repeat f:=font(p); c:=character(p);
+ if f<>dvi_f then @<Change font |dvi_f| to |f|@>;
+ if font_dir[f]=dir_default then
+ begin chain:=false;
+ if font_ec[f]>=qo(c) then if font_bc[f]<=qo(c) then
+ if char_exists(orig_char_info(f)(c)) then {N.B.: not |char_info|}
+ begin if c>=qi(128) then dvi_out(set1);
+ dvi_out(qo(c));@/
+ cur_h:=cur_h+char_width(f)(orig_char_info(f)(c));
+ goto continue;
+ end;
+ if mltex_enabled_p then
+ @<Output a substitution, |goto continue| if not possible@>;
+continue:
+ end
+ else
+ begin if chain=false then chain:=true
+ else begin cur_h:=cur_h+width(ksp_ptr);
+ if g_sign<>normal then
+ begin if g_sign=stretching then
+ begin if stretch_order(ksp_ptr)=g_order then
+ cur_h:=cur_h+round(float(glue_set(this_box))*stretch(ksp_ptr));
+@^real multiplication@>
+ end
+ else
+ begin if shrink_order(ksp_ptr)=g_order then
+ cur_h:=cur_h-round(float(glue_set(this_box))*shrink(ksp_ptr));
+@^real multiplication@>
+ end;
+ end;
+ synch_h;
+ end;
+ p:=link(p);
+ jc:=toDVI(KANJI(info(p)));
+ dvi_out(set2); dvi_out(Hi(jc)); dvi_out(Lo(jc));
+ cur_h:=cur_h+char_width(f)(orig_char_info(f)(c)); {not |jc|}
+ end;
+ dvi_h:=cur_h; p:=link(p);
+ until not is_char_node(p);
+ chain:=false;
+ end
+else @<Output the non-|char_node| |p| for |hlist_out|
+ and move to the next node@>
+@z
+
+@x [32.623] l.12982 - pTeX: disp_node, dir_node
+@ @<Output the non-|char_node| |p| for |hlist_out|...@>=
+begin case type(p) of
+hlist_node,vlist_node:@<Output a box in an hlist@>;
+rule_node: begin rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p);
+ goto fin_rule;
+ end;
+whatsit_node: @<Output the whatsit node |p| in an hlist@>;
+@y
+@ @<Output the non-|char_node| |p| for |hlist_out|...@>=
+begin case type(p) of
+hlist_node,vlist_node,dir_node:@<Output a box in an hlist@>;
+rule_node: begin rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p);
+ goto fin_rule;
+ end;
+whatsit_node: @<Output the whatsit node |p| in an hlist@>;
+disp_node: begin disp:=disp_dimen(p); cur_v:=base_line+disp; end;
+@z
+
+@x [32.624] l.13000 - pTeX: output a box(and dir_node) with disp
+@ @<Output a box in an hlist@>=
+if list_ptr(p)=null then cur_h:=cur_h+width(p)
+else begin save_h:=dvi_h; save_v:=dvi_v;
+ cur_v:=base_line+shift_amount(p); {shift the box down}
+@y
+@ @<Output a box in an hlist@>=
+if list_ptr(p)=null then cur_h:=cur_h+width(p)
+else begin save_h:=dvi_h; save_v:=dvi_v; save_dir:=dvi_dir;
+ cur_v:=base_line+disp+shift_amount(p); {shift the box down}
+@z
+@x [32.624] l.13005 - pTeX: output a box(and dir_node) with disp
+ if type(p)=vlist_node then vlist_out@+else hlist_out;
+ dvi_h:=save_h; dvi_v:=save_v;
+ cur_h:=edge+width(p); cur_v:=base_line;
+ end
+@y
+ case type(p) of
+ hlist_node:hlist_out;
+ vlist_node:vlist_out;
+ dir_node:dir_out;
+ endcases;
+ dvi_h:=save_h; dvi_v:=save_v; dvi_dir:=save_dir;
+ cur_h:=edge+width(p); cur_v:=base_line+disp; cur_dir_hv:=save_dir;
+ end
+@z
+
+@x [32.625] l.13010 - pTeX: Output a rule with disp
+@ @<Output a rule in an hlist@>=
+if is_running(rule_ht) then rule_ht:=height(this_box);
+if is_running(rule_dp) then rule_dp:=depth(this_box);
+@y
+@ @<Output a rule in an hlist@>=
+if is_running(rule_ht) then rule_ht:=height(this_box)+disp;
+if is_running(rule_dp) then rule_dp:=depth(this_box)-disp;
+@z
+
+@x [32.629] l.13103 - pTeX: Output a leader box(and dir_node) with disp
+@<Output a leader box at |cur_h|, ...@>=
+begin cur_v:=base_line+shift_amount(leader_box); synch_v; save_v:=dvi_v;@/
+synch_h; save_h:=dvi_h; temp_ptr:=leader_box;
+@y
+@<Output a leader box at |cur_h|, ...@>=
+begin cur_v:=base_line+disp+shift_amount(leader_box); synch_v; save_v:=dvi_v;@/
+synch_h; save_h:=dvi_h; save_dir:=dvi_dir; temp_ptr:=leader_box;
+@z
+@x [32.629] l.13107 - pTeX: Output a leader box(and dir_node) with disp
+if type(leader_box)=vlist_node then vlist_out@+else hlist_out;
+doing_leaders:=outer_doing_leaders;
+dvi_v:=save_v; dvi_h:=save_h; cur_v:=base_line;
+cur_h:=save_h+leader_wd+lx;
+end
+@y
+case type(leader_box) of
+ hlist_node:hlist_out;
+ vlist_node:vlist_out;
+ dir_node:dir_out;
+endcases;
+doing_leaders:=outer_doing_leaders;
+dvi_v:=save_v; dvi_h:=save_h; dvi_dir:=save_dir;
+cur_v:=base_line; cur_h:=save_h+leader_wd+lx; cur_dir_hv:=save_dir;
+end
+@z
+
+@x [32.630] l.13133 - pTeX: vlist_out
+begin cur_g:=0; cur_glue:=float_constant(0);
+this_box:=temp_ptr; g_order:=glue_order(this_box);
+g_sign:=glue_sign(this_box); p:=list_ptr(this_box);
+incr(cur_s);
+if cur_s>0 then dvi_out(push);
+if cur_s>max_push then max_push:=cur_s;
+save_loc:=dvi_offset+dvi_ptr; left_edge:=cur_h; cur_v:=cur_v-height(this_box);
+@y
+@!save_dir:integer; {what |dvi_dir| should pop to}
+begin cur_g:=0; cur_glue:=float_constant(0);
+this_box:=temp_ptr; g_order:=glue_order(this_box);
+g_sign:=glue_sign(this_box); p:=list_ptr(this_box);
+incr(cur_s);
+if cur_s>0 then dvi_out(push);
+if cur_s>max_push then max_push:=cur_s;
+save_loc:=dvi_offset+dvi_ptr;
+synch_dir;
+left_edge:=cur_h; cur_v:=cur_v-height(this_box);
+@z
+
+@x [32.632] l.13155 - pTeX: output non-char-node
+@ @<Output the non-|char_node| |p| for |vlist_out|@>=
+begin case type(p) of
+hlist_node,vlist_node:@<Output a box in a vlist@>;
+rule_node: begin rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p);
+ goto fin_rule;
+ end;
+@y
+@ @<Output the non-|char_node| |p| for |vlist_out|@>=
+begin case type(p) of
+hlist_node,vlist_node,dir_node: @<Output a box in a vlist@>;
+rule_node: begin rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p);
+ goto fin_rule;
+ end;
+@z
+
+@x [32.633] l.13175 - pTeX: Output a box in a vlist
+@<Output a box in a vlist@>=
+if list_ptr(p)=null then cur_v:=cur_v+height(p)+depth(p)
+else begin cur_v:=cur_v+height(p); synch_v;
+ save_h:=dvi_h; save_v:=dvi_v;
+@y
+@<Output a box in a vlist@>=
+if list_ptr(p)=null then cur_v:=cur_v+height(p)+depth(p)
+else begin cur_v:=cur_v+height(p); synch_v;
+ save_h:=dvi_h; save_v:=dvi_v; save_dir:=dvi_dir;
+@z
+@x [32.633] l.13181 - pTeX: Output a box in a vlist
+ if type(p)=vlist_node then vlist_out@+else hlist_out;
+ dvi_h:=save_h; dvi_v:=save_v;
+ cur_v:=save_v+depth(p); cur_h:=left_edge;
+ end
+@y
+ case type(p) of
+ hlist_node:hlist_out;
+ vlist_node:vlist_out;
+ dir_node:dir_out;
+ endcases;
+ dvi_h:=save_h; dvi_v:=save_v; dvi_dir:=save_dir;
+ cur_v:=save_v+depth(p); cur_h:=left_edge; cur_dir_hv:=save_dir;
+ end
+@z
+
+@x [32.637] l.13256 - pTeX: Output a leader in a vlist
+@<Output a leader box at |cur_v|, ...@>=
+@y
+@<Output a leader box at |cur_v|, ...@>=
+@z
+@x [32.637] l.13258 - pTeX: Output a leader in a vlist
+cur_v:=cur_v+height(leader_box); synch_v; save_v:=dvi_v;
+temp_ptr:=leader_box;
+outer_doing_leaders:=doing_leaders; doing_leaders:=true;
+if type(leader_box)=vlist_node then vlist_out@+else hlist_out;
+doing_leaders:=outer_doing_leaders;
+dvi_v:=save_v; dvi_h:=save_h; cur_h:=left_edge;
+cur_v:=save_v-height(leader_box)+leader_ht+lx;
+end
+@y
+cur_v:=cur_v+height(leader_box); synch_v; save_v:=dvi_v; save_dir:=dvi_dir;
+temp_ptr:=leader_box;
+outer_doing_leaders:=doing_leaders; doing_leaders:=true;
+case type(leader_box) of
+ hlist_node:hlist_out;
+ vlist_node:vlist_out;
+ dir_node:dir_out;
+endcases;
+doing_leaders:=outer_doing_leaders;
+dvi_v:=save_v; dvi_h:=save_h; dvi_dir:=save_dir;
+cur_h:=left_edge; cur_v:=save_v-height(leader_box)+leader_ht+lx;
+cur_dir_hv:=save_dir;
+end
+@z
+
+@x [32.638] l.13270 - pTeX: ship out
+@p procedure ship_out(@!p:pointer); {output the box |p|}
+label done;
+var page_loc:integer; {location of the current |bop|}
+@y
+@p procedure ship_out(@!p:pointer); {output the box |p|}
+label done;
+var page_loc:integer; {location of the current |bop|}
+@!del_node:pointer; {used when delete the |dir_node| continued box}
+@z
+@x [32.640] l.13294 - pTeX: ship out
+@<Ship box |p| out@>;
+@y
+if type(p)=dir_node then
+ begin del_node:=p; p:=list_ptr(p);
+ delete_glue_ref(space_ptr(del_node));
+ delete_glue_ref(xspace_ptr(del_node));
+ free_node(del_node,box_node_size);
+ end;
+flush_node_list(link(p)); link(p):=null;
+if abs(box_dir(p))<>dir_yoko then p:=new_dir_node(p,dir_yoko);
+@<Ship box |p| out@>;
+@z
+
+@x [32.641] l.13327 - pTeX: dir_node
+if type(p)=vlist_node then vlist_out@+else hlist_out;
+@y
+case type(p) of
+ hlist_node:hlist_out;
+ vlist_node:vlist_out;
+ dir_node:dir_out;
+endcases;
+@z
+
+@x [33.642] l.13394 - pTeX: postamble's id_byte
+ @<Output the font definitions for all fonts that were used@>;
+ dvi_out(post_post); dvi_four(last_bop); dvi_out(id_byte);@/
+@y
+ @<Output the font definitions for all fonts that were used@>;
+ dvi_out(post_post); dvi_four(last_bop);
+ if dir_used then dvi_out(ex_id_byte) else dvi_out(id_byte);@/
+@z
+
+@x [33.647] l.13515 - pTeX: cur_kanji_skip, cur_xkanji_skip, last_disp
+@ If the global variable |adjust_tail| is non-null, the |hpack| routine
+also removes all occurrences of |ins_node|, |mark_node|, and |adjust_node|
+items and appends the resulting material onto the list that ends at
+location |adjust_tail|.
+
+@<Glob...@>=
+@!adjust_tail:pointer; {tail of adjustment list}
+@y
+@ If the global variable |adjust_tail| is non-null, the |hpack| routine
+also removes all occurrences of |ins_node|, |mark_node|, and |adjust_node|
+items and appends the resulting material onto the list that ends at
+location |adjust_tail|.
+
+@<Glob...@>=
+@!adjust_tail:pointer; {tail of adjustment list}
+@!last_disp:scaled; {displacement at end of list}
+@!cur_kanji_skip:pointer;
+@!cur_xkanji_skip:pointer;
+@z
+
+@x [33.648] l.13518 - pTeX: cur_kanji_skip, cur_xkanji_skip
+@ @<Set init...@>=adjust_tail:=null; last_badness:=0;
+@y
+@ @<Set init...@>=adjust_tail:=null; last_badness:=0;
+ cur_kanji_skip:=zero_glue; cur_xkanji_skip:=zero_glue;
+{ koko
+ |incr(glue_ref_count(cur_kanji_skip));|
+ |incr(glue_ref_count(cur_xkanji_skip));|
+}
+@z
+
+@x [33.649] l.13522 - pTeX: hpack
+@p function hpack(@!p:pointer;@!w:scaled;@!m:small_number):pointer;
+label reswitch, common_ending, exit;
+var r:pointer; {the box node that will be returned}
+@y
+@p function hpack(@!p:pointer;@!w:scaled;@!m:small_number):pointer;
+label reswitch, common_ending, exit;
+var r:pointer; {the box node that will be returned}
+@!k:pointer; {points to a |kanji_space| specification}
+@!disp:scaled; {displacement}
+@z
+
+@x [33.649] l.13535 - pTeX: hpack
+q:=r+list_offset; link(q):=p;@/
+h:=0; @<Clear dimensions to zero@>;
+@y
+set_box_dir(r)(dir_default);
+space_ptr(r):=cur_kanji_skip; xspace_ptr(r):=cur_xkanji_skip;
+add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+k:=cur_kanji_skip;
+q:=r+list_offset; link(q):=p;@/
+h:=0; @<Clear dimensions to zero@>;
+disp:=0;
+@z
+@x [33.649] l.13537 - pTeX: hpack
+while p<>null do @<Examine node |p| in the hlist, taking account of its effect
+ on the dimensions of the new box, or moving it to the adjustment list;
+ then advance |p| to the next node@>;
+if adjust_tail<>null then link(adjust_tail):=null;
+height(r):=h; depth(r):=d;@/
+@<Determine the value of |width(r)| and the appropriate glue setting;
+ then |return| or |goto common_ending|@>;
+common_ending: @<Finish issuing a diagnostic message
+ for an overfull or underfull hbox@>;
+exit: hpack:=r;
+end;
+@y
+while p<>null do @<Examine node |p| in the hlist, taking account of its effect
+ on the dimensions of the new box, or moving it to the adjustment list;
+ then advance |p| to the next node@>;
+if adjust_tail<>null then link(adjust_tail):=null;
+height(r):=h; depth(r):=d;@/
+@<Determine the value of |width(r)| and the appropriate glue setting;
+ then |return| or |goto common_ending|@>;
+common_ending:
+ @<Finish issuing a diagnostic message for an overfull or underfull hbox@>;
+exit: last_disp:=disp; hpack:=r;
+end;
+@z
+
+@x [33.651] l.13556 - pTeX: dir_node, disp_node, reset chain
+@ @<Examine node |p| in the hlist, taking account of its effect...@>=
+@^inner loop@>
+begin reswitch: while is_char_node(p) do
+ @<Incorporate character dimensions into the dimensions of
+ the hbox that will contain~it, then move to the next node@>;
+if p<>null then
+ begin case type(p) of
+ hlist_node,vlist_node,rule_node,unset_node:
+ @<Incorporate box dimensions into the dimensions of
+ the hbox that will contain~it@>;
+ ins_node,mark_node,adjust_node: if adjust_tail<>null then
+ @<Transfer node |p| to the adjustment list@>;
+ whatsit_node:@<Incorporate a whatsit node into an hbox@>;
+@y
+@ @<Examine node |p| in the hlist, taking account of its effect...@>=
+@^inner loop@>
+begin reswitch: chain:=false;
+while is_char_node(p) do
+ @<Incorporate character dimensions into the dimensions of
+ the hbox that will contain~it, then move to the next node@>;
+if p<>null then
+ begin case type(p) of
+ hlist_node,vlist_node,dir_node,rule_node,unset_node:
+ @<Incorporate box dimensions into the dimensions of
+ the hbox that will contain~it@>;
+ ins_node,mark_node,adjust_node:
+ if adjust_tail<>null then @<Transfer node |p| to the adjustment list@>;
+ whatsit_node:@<Incorporate a whatsit node into an hbox@>;
+ disp_node:disp:=disp_dimen(p);
+@z
+
+@x [33.653] l.13589 - pTeX: displacement
+@<Incorporate box dimensions into the dimensions of the hbox...@>=
+begin x:=x+width(p);
+if type(p)>=rule_node then s:=0 @+else s:=shift_amount(p);
+if height(p)-s>h then h:=height(p)-s;
+if depth(p)+s>d then d:=depth(p)+s;
+end
+@y
+@<Incorporate box dimensions into the dimensions of the hbox...@>=
+begin x:=x+width(p);
+if type(p)>=rule_node then s:=disp @+else s:=shift_amount(p)+disp;
+if height(p)-s>h then h:=height(p)-s;
+if depth(p)+s>d then d:=depth(p)+s;
+end
+@z
+
+@x [33.654] l.13601 - pTeX: auto spacing, displacement
+@<Incorporate character dimensions into the dimensions of the hbox...@>=
+begin f:=font(p); i:=char_info(f)(character(p)); hd:=height_depth(i);
+x:=x+char_width(f)(i);@/
+s:=char_height(f)(hd);@+if s>h then h:=s;
+s:=char_depth(f)(hd);@+if s>d then d:=s;
+p:=link(p);
+end
+@y
+@<Incorporate character dimensions into the dimensions of the hbox...@>=
+begin f:=font(p); i:=char_info(f)(character(p)); hd:=height_depth(i);
+x:=x+char_width(f)(i);@/
+s:=char_height(f)(hd)-disp; if s>h then h:=s;
+s:=char_depth(f)(hd)+disp; if s>d then d:=s;
+if font_dir[f]<>dir_default then
+ begin p:=link(p);
+ if chain then
+ begin x:=x+width(k);@/
+ o:=stretch_order(k); total_stretch[o]:=total_stretch[o]+stretch(k);
+ o:=shrink_order(k); total_shrink[o]:=total_shrink[o]+shrink(k);
+ end
+ else chain:=true;
+ end
+else chain:=false;
+p:=link(p);
+end
+@z
+
+@x [33.668] l.13779 - pTeX: vpackage
+begin last_badness:=0; r:=get_node(box_node_size); type(r):=vlist_node;
+subtype(r):=min_quarterword; shift_amount(r):=0;
+@y
+begin last_badness:=0; r:=get_node(box_node_size); type(r):=vlist_node;
+subtype(r):=min_quarterword; shift_amount(r):=0; set_box_dir(r)(dir_default);
+space_ptr(r):=zero_glue; xspace_ptr(r):=zero_glue;
+add_glue_ref(zero_glue); add_glue_ref(zero_glue);
+@z
+
+@x [33.669] l.13797 - pTeX: dir_node
+@ @<Examine node |p| in the vlist, taking account of its effect...@>=
+begin if is_char_node(p) then confusion("vpack")
+@:this can't happen vpack}{\quad vpack@>
+else case type(p) of
+ hlist_node,vlist_node,rule_node,unset_node:
+ @<Incorporate box dimensions into the dimensions of
+ the vbox that will contain~it@>;
+@y
+@ @<Examine node |p| in the vlist, taking account of its effect...@>=
+begin if is_char_node(p) then confusion("vpack")
+@:this can't happen vpack}{\quad vpack@>
+else case type(p) of
+ hlist_node,vlist_node,dir_node,rule_node,unset_node:
+ @<Incorporate box dimensions into the dimensions of
+ the vbox that will contain~it@>;
+@z
+
+@x [34.681] l.14026 - pTeX: math noad
+@d noad_size=4 {number of words in a normal noad}
+@d nucleus(#)==#+1 {the |nucleus| field of a noad}
+@d supscr(#)==#+2 {the |supscr| field of a noad}
+@d subscr(#)==#+3 {the |subscr| field of a noad}
+@y
+\yskip\hang In Japanese, |math_type(q)=math_jchar| means that |fam(q)|
+refers to one of the sixteen kanji font families, and |KANJI(q)| is the
+internal kanji code number.
+@^Japanese extentions@>
+
+@d noad_size=5 {number of words in a normal noad}
+@d nucleus(#)==#+1 {the |nucleus| field of a noad}
+@d supscr(#)==#+2 {the |supscr| field of a noad}
+@d subscr(#)==#+3 {the |subscr| field of a noad}
+@d kcode_noad(#)==#+4
+@d math_kcode(#)==info(#+4) {the |kanji character| field of a noad}
+@d kcode_noad_nucleus(#)==#+3
+@d math_kcode_nucleus(#)==info(#+3)
+ {the |kanji character| field offset from nucleus}
+@#
+@d math_jchar=6
+@d math_text_jchar=7
+@z
+
+@x [35.681] pTeX: explicit box in math mode
+@d math_char=1 {|math_type| when the attribute is simple}
+@d sub_box=2 {|math_type| when the attribute is a box}
+@d sub_mlist=3 {|math_type| when the attribute is a formula}
+@d math_text_char=4 {|math_type| when italic correction is dubious}
+@y
+@d math_char=1 {|math_type| when the attribute is simple}
+@d sub_box=2 {|math_type| when the attribute is a box}
+@d sub_exp_box=3 {|math_type| when the attribute is an explicit created box}
+@d sub_mlist=4 {|math_type| when the attribute is a formula}
+@d math_text_char=5 {|math_type| when italic correction is dubious}
+
+@<Initialize table entries...@>=
+text_baseline_shift_factor:=1000;
+script_baseline_shift_factor:=700;
+scriptscript_baseline_shift_factor:=500;
+
+@z
+
+
+@x [34.683] radical with japanese char
+@d left_delimiter(#)==#+4 {first delimiter field of a noad}
+@d right_delimiter(#)==#+5 {second delimiter field of a fraction noad}
+@d radical_noad=inner_noad+1 {|type| of a noad for square roots}
+@d radical_noad_size=5 {number of |mem| words in a radical noad}
+@y
+@d left_delimiter(#)==#+5 {first delimiter field of a noad}
+@d right_delimiter(#)==#+4 {second delimiter field of a fraction noad}
+@d radical_noad=inner_noad+1 {|type| of a noad for square roots}
+@d radical_noad_size=6 {number of |mem| words in a radical noad}
+@z
+
+@x [34.686] l.14129 - pTeX: new_noad
+mem[supscr(p)].hh:=empty_field;
+new_noad:=p;
+@y
+mem[supscr(p)].hh:=empty_field;
+mem[kcode_noad(p)].hh:=empty_field;
+new_noad:=p;
+@z
+
+@x [34.687] accent with japanese char
+@d accent_noad_size=5 {number of |mem| words in an accent noad}
+@d accent_chr(#)==#+4 {the |accent_chr| field of an accent noad}
+@y
+@d accent_noad_size=6 {number of |mem| words in an accent noad}
+@d accent_chr(#)==#+5 {the |accent_chr| field of an accent noad}
+@z
+
+@x [34.691] l.14236 - pTeX: print_fam_and_char
+procedure print_fam_and_char(@!p:pointer); {prints family and character}
+begin print_esc("fam"); print_int(fam(p)); print_char(" ");
+print_ASCII(qo(character(p)));
+@y
+procedure print_fam_and_char(@!p:pointer;@!t:small_number);
+ {prints family and character}
+var @!cx:KANJI_code; {temporary register for KANJI}
+begin print_esc("fam"); print_int(fam(p)); print_char(" ");
+if t=math_char then print_ASCII(qo(character(p)))
+else begin KANJI(cx):=math_kcode_nucleus(p); print_kanji(cx);
+ end;
+@z
+
+@x [34.692] l.14266 - pTeX: print_subsidiary_data
+ math_char: begin print_ln; print_current_string; print_fam_and_char(p);
+ end;
+ sub_box: show_info; {recursive call}
+@y
+ math_char, math_jchar: begin print_ln; print_current_string;
+ print_fam_and_char(p,math_type(p));
+ end;
+ sub_box, sub_exp_box: show_info; {recursive call}
+@z
+
+@x [34.696] l.14327 - pTeX: print_fam_and_char
+accent_noad: begin print_esc("accent"); print_fam_and_char(accent_chr(p));
+@y
+accent_noad: begin print_esc("accent");
+ print_fam_and_char(accent_chr(p),math_char);
+@z
+
+@x [35.698] pTeX: flush choice_node
+ begin if math_type(nucleus(p))>=sub_box then
+ flush_node_list(info(nucleus(p)));
+ if math_type(supscr(p))>=sub_box then
+ flush_node_list(info(supscr(p)));
+ if math_type(subscr(p))>=sub_box then
+ flush_node_list(info(subscr(p)));
+@y
+ begin if (math_type(nucleus(p))>=sub_box)
+ and (math_type(nucleus(p))<>math_jchar)
+ and (math_type(nucleus(p))<>math_text_jchar) then
+ flush_node_list(info(nucleus(p)));
+ if math_type(supscr(p))>=sub_box
+ and (math_type(supscr(p))<>math_jchar)
+ and (math_type(supscr(p))<>math_text_jchar) then
+ flush_node_list(info(supscr(p)));
+ if math_type(subscr(p))>=sub_box
+ and (math_type(subscr(p))<>math_jchar)
+ and (math_type(subscr(p))<>math_text_jchar) then
+ flush_node_list(info(subscr(p)));
+@z
+
+@x [35.715] l.14687 - pTeX: rebox
+ begin if type(b)=vlist_node then b:=hpack(b,natural);
+ p:=list_ptr(b);
+ if (is_char_node(p))and(link(p)=null) then
+ begin f:=font(p); v:=char_width(f)(char_info(f)(character(p)));
+ if v<>width(b) then link(p):=new_kern(width(b)-v);
+ end;
+@y
+ begin if type(b)<>hlist_node then b:=hpack(b,natural);
+ p:=list_ptr(b);
+ if is_char_node(p) then
+ if font_dir[font(p)]<>dir_default then
+ begin if link(link(p))=null then
+ begin f:=font(p); v:=char_width(f)(orig_char_info(f)(character(p)));
+ if v<>width(b) then link(link(p)):=new_kern(width(b)-v);
+ end
+ end
+ else if link(p)=null then
+ begin f:=font(p); v:=char_width(f)(orig_char_info(f)(character(p)));
+ if v<>width(b) then link(p):=new_kern(width(b)-v);
+ end;
+ delete_glue_ref(space_ptr(b)); delete_glue_ref(xspace_ptr(b));
+@z
+
+@x [36.720] l.14783 - pTeX: clean_box
+function clean_box(@!p:pointer;@!s:small_number):pointer;
+@y
+function shift_sub_exp_box(@!q:pointer):pointer;
+ { We assume that |math_type(q)=sub_exp_box| }
+ var d: halfword; {displacement}
+ begin
+ if abs(direction)=abs(box_dir(info(q))) then begin
+ if abs(direction)=dir_tate then begin
+ if box_dir(info(q))=dir_tate then d:=t_baseline_shift
+ else d:=y_baseline_shift end
+ else d:=y_baseline_shift;
+ if cur_style<script_style then
+ d:=xn_over_d(d,text_baseline_shift_factor, 1000)
+ else if cur_style<script_script_style then
+ d:=xn_over_d(d,script_baseline_shift_factor, 1000)
+ else
+ d:=xn_over_d(d,scriptscript_baseline_shift_factor, 1000);
+ shift_amount(info(q)):=shift_amount(info(q))-d;
+ end;
+ math_type(q):=sub_box;
+ shift_sub_exp_box:=info(q);
+ end;
+function clean_box(@!p:pointer;@!s:small_number;@!jc:halfword):pointer;
+@z
+
+@x [36.720] l.14790 - pTeX: clean_box
+math_char: begin cur_mlist:=new_noad; mem[nucleus(cur_mlist)]:=mem[p];
+ end;
+sub_box: begin q:=info(p); goto found;
+ end;
+@y
+math_char: begin cur_mlist:=new_noad; mem[nucleus(cur_mlist)]:=mem[p];
+ end;
+math_jchar: begin cur_mlist:=new_noad; mem[nucleus(cur_mlist)]:=mem[p];
+ math_kcode(cur_mlist):=jc;
+ end;
+sub_box: begin q:=info(p); goto found;
+ end;
+sub_exp_box: begin q:=shift_sub_exp_box(p); goto found;
+ end;
+@z
+
+@x [36.720] l.14802 - pTeX: clean_box
+found: if is_char_node(q)or(q=null) then x:=hpack(q,natural)
+ else if (link(q)=null)and(type(q)<=vlist_node)and(shift_amount(q)=0) then
+ x:=q {it's already clean}
+ else x:=hpack(q,natural);
+@y
+found: if is_char_node(q)or(q=null) then x:=hpack(q,natural)
+ else if (link(q)=null)and(type(q)<=dir_node)and(shift_amount(q)=0) then
+ x:=q {it's already clean}
+ else x:=hpack(q,natural);
+@z
+
+@x [36.721] l.14814 - pTeX: skip 2nd kanji node
+if is_char_node(q) then
+ begin r:=link(q);
+@y
+if is_char_node(q) then
+ begin if font_dir[font(q)]<>dir_default then q:=link(q);
+ r:=link(q);
+@z
+
+@x [36.722] l.14833 - pTeX: fetch
+else begin if (qo(cur_c)>=font_bc[cur_f])and(qo(cur_c)<=font_ec[cur_f]) then
+ cur_i:=orig_char_info(cur_f)(cur_c)
+ else cur_i:=null_character;
+ if not(char_exists(cur_i)) then
+ begin char_warning(cur_f,qo(cur_c));
+ math_type(a):=empty; cur_i:=null_character;
+ end;
+ end;
+@y
+else begin if font_dir[cur_f]<>dir_default then
+ cur_c:=qi(get_jfm_pos(KANJI(math_kcode_nucleus(a)),cur_f));
+ if (qo(cur_c)>=font_bc[cur_f])and(qo(cur_c)<=font_ec[cur_f]) then
+ cur_i:=orig_char_info(cur_f)(cur_c)
+ else cur_i:=null_character;
+ if not(char_exists(cur_i)) then
+ begin char_warning(cur_f,qo(cur_c));
+ math_type(a):=empty; cur_i:=null_character;
+ end;
+ end;
+@z
+
+@x [36.726] l.14892 - pTeX: mlist_to_hlist
+var mlist:pointer; {beginning of the given list}
+@!penalties:boolean; {should penalty nodes be inserted?}
+@!style:small_number; {the given style}
+@y
+var mlist:pointer; {beginning of the given list}
+@!penalties:boolean; {should penalty nodes be inserted?}
+@!style:small_number; {the given style}
+@!u:pointer; {temporary register}
+@z
+
+@x [36.726] l.14913 - pTeX: mlist_to_hlist
+@<Make a second pass over the mlist, removing all noads and inserting the
+ proper spacing and penalties@>;
+end;
+@y
+@<Make a second pass over the mlist, removing all noads and inserting the
+ proper spacing and penalties@>;
+p:=new_null_box; link(p):=link(temp_head);
+adjust_hlist(p,false); link(temp_head):=link(p);
+delete_glue_ref(space_ptr(p)); delete_glue_ref(xspace_ptr(p));
+free_node(p,box_node_size);
+end;
+@z
+
+@x [36.727] l.14928 - pTeX: free box
+free_node(z,box_node_size);
+@y
+delete_glue_ref(space_ptr(z)); delete_glue_ref(xspace_ptr(z));
+free_node(z,box_node_size);
+@z
+
+@x [36.730] l.14976 - pTeX: free box: disp_node
+kern_node: begin math_kern(q,cur_mu); goto done_with_node;
+ end;
+@y
+kern_node: begin math_kern(q,cur_mu); goto done_with_node;
+ end;
+disp_node: goto done_with_node;
+@z
+
+@x [36.734] l.15046 - pTeX: make_over:clean_box
+ overbar(clean_box(nucleus(q),cramped_style(cur_style)),@|
+@y
+ overbar(clean_box(nucleus(q),cramped_style(cur_style),math_kcode(q)),@|
+@z
+
+@x [36.735] l.15055 - pTeX: make_under:clean_box
+begin x:=clean_box(nucleus(q),cur_style);
+@y
+begin x:=clean_box(nucleus(q),cur_style,math_kcode(q));
+@z
+
+@x [36.736] l.15069 - pTeX: make_under:clean_box
+if type(v)<>vlist_node then confusion("vcenter");
+@y
+if type(v)=dir_node then
+ begin if type(list_ptr(v))<>vlist_node then confusion("dircenter")
+ end
+else begin if type(v)<>vlist_node then confusion("vcenter")
+ end;
+@z
+
+@x [36.737] l.15089 - pTeX: make_radical:clean_box
+begin x:=clean_box(nucleus(q),cramped_style(cur_style));
+@y
+begin x:=clean_box(nucleus(q),cramped_style(cur_style),math_kcode(q));
+@z
+
+@x [36.738] l.15123 - pTeX: make_math_accent:clean_box
+ x:=clean_box(nucleus(q),cramped_style(cur_style)); w:=width(x); h:=height(x);
+@y
+ x:=clean_box(nucleus(q),cramped_style(cur_style),math_kcode(q));
+ w:=width(x); h:=height(x);
+@z
+
+@x [36.742] l.15186 - pTeX: make_math_accent:clean_box
+x:=clean_box(nucleus(q),cur_style); delta:=delta+height(x)-h; h:=height(x);
+@y
+x:=clean_box(nucleus(q),cur_style,math_kcode(q));
+delta:=delta+height(x)-h; h:=height(x);
+@z
+
+@x [36.744] l.15211 - pTeX: make_fraction:clean_box
+x:=clean_box(numerator(q),num_style(cur_style));
+z:=clean_box(denominator(q),denom_style(cur_style));
+@y
+x:=clean_box(numerator(q),num_style(cur_style),math_kcode(q));
+z:=clean_box(denominator(q),denom_style(cur_style),math_kcode(q));
+@z
+
+@x [36.749] l.15304 - pTeX: make_op:clean_box
+ delta:=char_italic(cur_f)(cur_i); x:=clean_box(nucleus(q),cur_style);
+@y
+ delta:=char_italic(cur_f)(cur_i);
+ x:=clean_box(nucleus(q),cur_style,math_kcode(q));
+@z
+
+@x [36.750] l.15321 - pTeX: make_op:clean_box
+begin x:=clean_box(supscr(q),sup_style(cur_style));
+y:=clean_box(nucleus(q),cur_style);
+z:=clean_box(subscr(q),sub_style(cur_style));
+@y
+begin x:=clean_box(supscr(q),sup_style(cur_style),math_kcode(q));
+y:=clean_box(nucleus(q),cur_style,math_kcode(q));
+z:=clean_box(subscr(q),sub_style(cur_style),math_kcode(q));
+@z
+
+@x [36.751] l.15342 - pTeX: free box node
+ begin free_node(x,box_node_size); list_ptr(v):=y;
+ end
+@y
+ begin
+ delete_glue_ref(space_ptr(x)); delete_glue_ref(xspace_ptr(x));
+ free_node(x,box_node_size); list_ptr(v):=y;
+ end
+@z
+
+@x [36.751] l.15350 - pTeX: free box node
+if math_type(subscr(q))=empty then free_node(z,box_node_size)
+@y
+if math_type(subscr(q))=empty then begin
+ delete_glue_ref(space_ptr(z)); delete_glue_ref(xspace_ptr(z));
+ free_node(z,box_node_size)
+end
+@z
+
+@x [36.752] l.15369 - pTeX: make_ord
+procedure make_ord(@!q:pointer);
+label restart,exit;
+var a:integer; {address of lig/kern instruction}
+@!p,@!r:pointer; {temporary registers for list manipulation}
+begin restart:@t@>@;@/
+if math_type(subscr(q))=empty then if math_type(supscr(q))=empty then
+ if math_type(nucleus(q))=math_char then
+ begin p:=link(q);
+ if p<>null then if (type(p)>=ord_noad)and(type(p)<=punct_noad) then
+ if math_type(nucleus(p))=math_char then
+ if fam(nucleus(p))=fam(nucleus(q)) then
+ begin math_type(nucleus(q)):=math_text_char;
+ fetch(nucleus(q));
+ if char_tag(cur_i)=lig_tag then
+ begin a:=lig_kern_start(cur_f)(cur_i);
+ cur_c:=character(nucleus(p));
+ cur_i:=font_info[a].qqqq;
+ if skip_byte(cur_i)>stop_flag then
+ begin a:=lig_kern_restart(cur_f)(cur_i);
+ cur_i:=font_info[a].qqqq;
+ end;
+ loop@+ begin @<If instruction |cur_i| is a kern with |cur_c|, attach
+ the kern after~|q|; or if it is a ligature with |cur_c|, combine
+ noads |q| and~|p| appropriately; then |return| if the cursor has
+ moved past a noad, or |goto restart|@>;
+ if skip_byte(cur_i)>=stop_flag then return;
+ a:=a+qo(skip_byte(cur_i))+1;
+ cur_i:=font_info[a].qqqq;
+ end;
+ end;
+ end;
+ end;
+exit:end;
+@y
+procedure make_ord(@!q:pointer);
+label restart,exit;
+var a:integer; {address of lig/kern instruction}
+@!gp,@!gq,@!p,@!r:pointer; {temporary registers for list manipulation}
+@!rr:halfword;
+begin restart:@t@>@;@/
+if (math_type(subscr(q))=empty)and(math_type(supscr(q))=empty)and@|
+((math_type(nucleus(q))=math_char)or(math_type(nucleus(q))=math_jchar)) then
+ begin p:=link(q);
+ if p<>null then if (type(p)>=ord_noad)and(type(p)<=punct_noad) then
+ if fam(nucleus(p))=fam(nucleus(q)) then
+ if math_type(nucleus(p))=math_char then
+ begin math_type(nucleus(q)):=math_text_char;
+ fetch(nucleus(q));
+ if char_tag(cur_i)=lig_tag then
+ begin a:=lig_kern_start(cur_f)(cur_i);
+ cur_c:=character(nucleus(p));
+ cur_i:=font_info[a].qqqq;
+ if skip_byte(cur_i)>stop_flag then
+ begin a:=lig_kern_restart(cur_f)(cur_i);
+ cur_i:=font_info[a].qqqq;
+ end;
+ loop@+ begin @<If instruction |cur_i| is a kern with |cur_c|, attach
+ the kern after~|q|; or if it is a ligature with |cur_c|, combine
+ noads |q| and~|p| appropriately; then |return| if the cursor has
+ moved past a noad, or |goto restart|@>;
+ if skip_byte(cur_i)>=stop_flag then return;
+ a:=a+qo(skip_byte(cur_i))+1;
+ cur_i:=font_info[a].qqqq;
+ end;
+ end;
+ end
+ else if math_type(nucleus(p))=math_jchar then
+ begin math_type(nucleus(q)):=math_text_jchar;
+ fetch(nucleus(p)); a:=cur_c; fetch(nucleus(q));
+ if char_tag(cur_i)=gk_tag then
+ begin cur_c:=a; a:=glue_kern_start(cur_f)(cur_i);
+ {|cur_c|:=qi(|get_jfm_pos|(|math_kcode|(p),
+ |fam_fnt|(fam(nucleus(p))+|cur_size|)));}
+ cur_i:=font_info[a].qqqq;
+ if skip_byte(cur_i)>stop_flag then {huge glue/kern table rearranged}
+ begin a:=glue_kern_restart(cur_f)(cur_i);
+ cur_i:=font_info[a].qqqq;
+ end;
+ loop@+ begin
+ if next_char(cur_i)=cur_c then if skip_byte(cur_i)<=stop_flag then
+ if op_byte(cur_i)<kern_flag then
+ begin gp:=font_glue[cur_f]; rr:=rem_byte(cur_i);
+ if gp<>null then begin
+ while((type(gp)<>rr)and(link(gp)<>null)) do begin gp:=link(gp);
+ end;
+ gq:=glue_ptr(gp);
+ end
+ else begin gp:=get_node(small_node_size);
+ font_glue[cur_f]:=gp; gq:=null;
+ end;
+ if gq=null then
+ begin type(gp):=rr; gq:=new_spec(zero_glue); glue_ptr(gp):=gq;
+ a:=exten_base[cur_f]+qi((qo(rr))*3); width(gq):=font_info[a].sc;
+ stretch(gq):=font_info[a+1].sc; shrink(gq):=font_info[a+2].sc;
+ add_glue_ref(gq); link(gp):=get_node(small_node_size);
+ gp:=link(gp); glue_ptr(gp):=null; link(gp):=null;
+ end;
+ p:=new_glue(gq); subtype(p):=jfm_skip+1;
+ link(p):=link(q); link(q):=p; return;
+ end
+ else begin p:=new_kern(char_kern(cur_f)(cur_i));
+ link(p):=link(q); link(q):=p; return;
+ end;
+ if skip_byte(cur_i)>=stop_flag then return;
+ a:=a+qo(skip_byte(cur_i))+1; {SKIP property}
+ cur_i:=font_info[a].qqqq;
+ end;
+ end;
+ end;
+ end;
+exit:end;
+@z
+
+@x [36.754] l.15452 - pTeX:
+math_char, math_text_char:
+@y
+math_char, math_text_char, math_jchar, math_text_jchar:
+@z
+
+@x [36.754] pTeX:
+sub_box: p:=info(nucleus(q));
+@y
+sub_box: p:=info(nucleus(q));
+sub_exp_box: p:=shift_sub_exp_box(nucleus(q));
+@z
+
+@x [36.755] l.15475 - pTeX: convert math text to KANJI char_node
+ begin delta:=char_italic(cur_f)(cur_i); p:=new_character(cur_f,qo(cur_c));
+ if (math_type(nucleus(q))=math_text_char)and(space(cur_f)<>0) then
+ delta:=0; {no italic correction in mid-word of text font}
+ if (math_type(subscr(q))=empty)and(delta<>0) then
+ begin link(p):=new_kern(delta); delta:=0;
+@y
+ begin delta:=char_italic(cur_f)(cur_i); p:=new_character(cur_f,qo(cur_c));
+ u:=p;
+ if font_dir[cur_f]<>dir_default then begin
+ link(u):=get_avail; u:=link(u); info(u):=math_kcode(q);
+ end;
+ if ((math_type(nucleus(q))=math_text_char)or
+ (math_type(nucleus(q))=math_text_jchar))and(space(cur_f)<>0) then
+ delta:=0; {no italic correction in mid-word of text font}
+ if (math_type(subscr(q))=empty)and(delta<>0) then begin
+ link(u):=new_kern(delta); delta:=0;
+@z
+
+@x [36.756] l.15505 - pTeX: free box
+ shift_down:=depth(z)+sub_drop(t);
+ free_node(z,box_node_size);
+ end;
+@y
+ shift_down:=depth(z)+sub_drop(t);
+ delete_glue_ref(space_ptr(z)); delete_glue_ref(xspace_ptr(z));
+ free_node(z,box_node_size);
+ end;
+@z
+
+@x [36.757] l.15526 - pTeX: make_scripts:clean_box
+begin x:=clean_box(subscr(q),sub_style(cur_style));
+@y
+begin x:=clean_box(subscr(q),sub_style(cur_style),math_kcode(q));
+@z
+
+@x [36.758] l.15538 - pTeX: make_scripts:clean_box
+begin x:=clean_box(supscr(q),sup_style(cur_style));
+@y
+begin x:=clean_box(supscr(q),sup_style(cur_style),math_kcode(q));
+@z
+
+@x [36.758] l.15555 - pTeX: make_scripts:clean_box
+begin y:=clean_box(subscr(q),sub_style(cur_style));
+@y
+begin y:=clean_box(subscr(q),sub_style(cur_style),math_kcode(q));
+@z
+
+@x [36.760] l.15616 - pTeX: disp_node
+othercases confusion("mlist3")
+@y
+disp_node: begin link(p):=q; p:=q; q:=link(q); link(p):=null; goto done;
+ end;
+othercases confusion("mlist3")
+@z
+
+@x [37.???] init_span: pTeX: init inhibit_glue_flag
+if mode=-hmode then space_factor:=1000
+else begin prev_depth:=ignore_depth; normal_paragraph;
+ end;
+@y
+if mode=-hmode then space_factor:=1000
+else begin prev_depth:=ignore_depth; normal_paragraph;
+ end;
+inhibit_glue_flag:=false;
+@z
+
+@x [37.796] l.16276 - pTeX: call adjust_hlist
+ begin adjust_tail:=cur_tail; u:=hpack(link(head),natural); w:=width(u);
+@y
+ begin adjust_tail:=cur_tail; adjust_hlist(head,false);
+ delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+ cur_kanji_skip:=space_ptr(head); cur_xkanji_skip:=xspace_ptr(head);
+ add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+ u:=hpack(link(head),natural); w:=width(u);
+@z
+
+@x [37.799] l.16331 - fin_row: pTeX: call adjust_hlist
+ begin p:=hpack(link(head),natural);
+@y
+ begin adjust_hlist(head,false);
+ delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+ cur_kanji_skip:=space_ptr(head); cur_xkanji_skip:=xspace_ptr(head);
+ add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+ p:=hpack(link(head),natural);
+@z
+
+@x [37.799] l.16331 - fin_row: init inhibit_glue_flag
+ link(tail):=p; tail:=p; space_factor:=1000;
+@y
+ link(tail):=p; tail:=p; space_factor:=1000;
+ inhibit_glue_flag:=false;
+@z
+
+@x [37.800] l.16353 - pTeX: call adjust_hlist
+var @!p,@!q,@!r,@!s,@!u,@!v: pointer; {registers for the list operations}
+@y
+var @!p,@!q,@!r,@!s,@!u,@!v,@!z: pointer; {registers for the list operations}
+@z
+
+@x [37.804] l.16456 - pTeX: call adjust_hlist
+ p:=hpack(preamble,saved(1),saved(0)); overfull_rule:=rule_save;
+@y
+ z:=new_null_box; link(z):=preamble;
+ adjust_hlist(z,false);
+ delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+ cur_kanji_skip:=space_ptr(z); cur_xkanji_skip:=xspace_ptr(z);
+ add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+ p:=hpack(preamble,saved(1),saved(0)); overfull_rule:=rule_save;
+ delete_glue_ref(space_ptr(z)); delete_glue_ref(xspace_ptr(z));
+ free_node(z,box_node_size);
+@z
+
+@x [37.807] l.16499 - pTeX: unset box -> BOX
+glue_order(q):=glue_order(p); glue_sign(q):=glue_sign(p);
+glue_set(q):=glue_set(p); shift_amount(q):=o;
+r:=link(list_ptr(q)); s:=link(list_ptr(p));
+@y
+set_box_dir(q)(direction);
+glue_order(q):=glue_order(p); glue_sign(q):=glue_sign(p);
+glue_set(q):=glue_set(p); shift_amount(q):=o;
+r:=link(list_ptr(q)); s:=link(list_ptr(p));
+@z
+
+@x [37.809] l.16541 - pTeX: unset box -> BOX
+s:=link(s); link(u):=new_null_box; u:=link(u); t:=t+width(s);
+if mode=-vmode then width(u):=width(s)@+else
+ begin type(u):=vlist_node; height(u):=width(s);
+ end
+@y
+s:=link(s); link(u):=new_null_box; u:=link(u); t:=t+width(s);
+if mode=-vmode then width(u):=width(s)@+else
+ begin type(u):=vlist_node; height(u):=width(s);
+ end;
+set_box_dir(u)(direction)
+@z
+
+@x [37.810] l.16564 - pTeX: unset box -> BOX
+width(r):=w; type(r):=hlist_node;
+end
+@y
+width(r):=w; type(r):=hlist_node;
+set_box_dir(r)(direction);
+end
+@z
+
+@x [37.811] l.16585 - pTeX: unset box -> BOX
+height(r):=w; type(r):=vlist_node;
+@y
+height(r):=w; type(r):=vlist_node;
+set_box_dir(r)(direction);
+@z
+
+@x [38.816] l.16687 - pTeX: init chain, delete disp_node
+link(temp_head):=link(head);
+if is_char_node(tail) then tail_append(new_penalty(inf_penalty))
+else if type(tail)<>glue_node then tail_append(new_penalty(inf_penalty))
+@y
+first_use:=true; chain:=false;
+delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+cur_kanji_skip:=space_ptr(head); cur_xkanji_skip:=xspace_ptr(head);
+add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+link(temp_head):=link(head);
+if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin free_node(tail,small_node_size); tail:=prev_node; link(tail):=null
+ end;
+if is_char_node(tail) then tail_append(new_penalty(inf_penalty))
+else if type(tail)<>glue_node then tail_append(new_penalty(inf_penalty))
+@z
+
+@x [38.828] l.16946 - pTeX: Global variable |chain|
+@!cur_p:pointer; {the current breakpoint under consideration}
+@y
+@!cur_p:pointer; {the current breakpoint under consideration}
+@!chain:boolean; {chain current line and next line?}
+@z
+
+% chain ξ硢 cur_kanji_skip Τǡ
+% break_width ƤʤФʤʤ
+@x [38.837] l.17125 - pTeX: add kanji_skip width, ita_kern
+begin no_break_yet:=false; do_all_six(set_break_width_to_background);
+s:=cur_p;
+if break_type>unhyphenated then if cur_p<>null then
+ @<Compute the discretionary |break_width| values@>;
+while s<>null do
+ begin if is_char_node(s) then goto done;
+@y
+begin no_break_yet:=false; do_all_six(set_break_width_to_background);
+s:=cur_p;
+if break_type>unhyphenated then if cur_p<>null then
+ @<Compute the discretionary |break_width| values@>;
+while s<>null do
+ begin if is_char_node(s) then
+ begin if chain then
+ begin break_width[1]:=break_width[1]-width(cur_kanji_skip);
+ break_width[2+stretch_order(cur_kanji_skip)]:=
+ break_width[2+stretch_order(cur_kanji_skip)]-stretch(cur_kanji_skip);
+ break_width[6]:=break_width[6]-shrink(cur_kanji_skip);
+ end;
+ goto done end;
+@z
+
+@x [38.837] l.17135 - pTeX:
+ kern_node: if subtype(s)<>explicit then goto done
+ else break_width[1]:=break_width[1]-width(s);
+@y
+ kern_node: if (subtype(s)<>explicit)and(subtype(s)<>ita_kern) then
+ goto done
+ else break_width[1]:=break_width[1]-width(s);
+@z
+
+@x [38.841] l.17186 - pTeX:
+if is_char_node(v) then
+ begin f:=font(v);
+ break_width[1]:=break_width[1]-char_width(f)(char_info(f)(character(v)));
+ end
+else case type(v) of
+ ligature_node: begin f:=font(lig_char(v));@/
+ break_width[1]:=@|break_width[1]-
+ char_width(f)(char_info(f)(character(lig_char(v))));
+ end;
+ hlist_node,vlist_node,rule_node,kern_node:
+ break_width[1]:=break_width[1]-width(v);
+ othercases confusion("disc1")
+@:this can't happen disc1}{\quad disc1@>
+ endcases
+@y
+if is_char_node(v) then
+ begin f:=font(v);
+ break_width[1]:=break_width[1]-char_width(f)(orig_char_info(f)(character(v)));
+ if font_dir[f]<>dir_default then v:=link(v);
+ end
+else case type(v) of
+ ligature_node: begin f:=font(lig_char(v));@/
+ break_width[1]:=@|break_width[1]-
+ char_width(f)(orig_char_info(f)(character(lig_char(v))));
+ end;
+ hlist_node,vlist_node,dir_node,rule_node,kern_node:
+ break_width[1]:=break_width[1]-width(v);
+ disp_node: do_nothing;
+ othercases confusion("disc1")
+@:this can't happen disc1}{\quad disc1@>
+ endcases
+@z
+
+@x [38.842] l.17204 - pTeX:
+ break_width[1]:=@|break_width[1]+char_width(f)(char_info(f)(character(s)));
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ break_width[1]:=break_width[1]+
+ char_width(f)(char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,rule_node,kern_node:
+ break_width[1]:=break_width[1]+width(s);
+@y
+ break_width[1]:=@|break_width[1]+char_width(f)(orig_char_info(f)(character(s)));
+ if font_dir[f]<>dir_default then s:=link(s);
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ break_width[1]:=break_width[1]+
+ char_width(f)(orig_char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,dir_node,rule_node,kern_node:
+ break_width[1]:=break_width[1]+width(s);
+ disp_node: do_nothing;
+@z
+
+@x [38.856] l.17467 - pTeX: print symbolic feasibe node
+if cur_p=null then print_esc("par")
+else if type(cur_p)<>glue_node then
+ begin if type(cur_p)=penalty_node then print_esc("penalty")
+ else if type(cur_p)=disc_node then print_esc("discretionary")
+@y
+if cur_p=null then print_esc("par")
+else if (type(cur_p)<>glue_node)and(not is_char_node(cur_p)) then
+ begin if type(cur_p)=penalty_node then print_esc("penalty")
+ else if type(cur_p)=disc_node then print_esc("discretionary")
+@z
+
+@x [39.862] l.17584 - pTeX: local valiable for line breaking
+@!auto_breaking:boolean; {is node |cur_p| outside a formula?}
+@!prev_p:pointer; {helps to determine when glue nodes are breakpoints}
+@!q,@!r,@!s,@!prev_s:pointer; {miscellaneous nodes of temporary interest}
+@!f:internal_font_number; {used when calculating character widths}
+@y
+@!auto_breaking:boolean; {is node |cur_p| outside a formula?}
+@!prev_p:pointer; {helps to determine when glue nodes are breakpoints}
+@!q,@!r,@!s,@!prev_s:pointer; {miscellaneous nodes of temporary interest}
+@!f,@!post_f:internal_font_number; {used when calculating character widths}
+@!post_p:pointer;
+@!cc:ASCII_code;
+@!first_use:boolean;
+@z
+
+@x [39.866] l.17677 - pTeX: dir_node, disp_node, ita_kern
+case type(cur_p) of
+hlist_node,vlist_node,rule_node: act_width:=act_width+width(cur_p);
+@y
+case type(cur_p) of
+hlist_node,vlist_node,dir_node,rule_node: act_width:=act_width+width(cur_p);
+@z
+
+@x [39.866] l.17685 - pTeX:
+kern_node: if subtype(cur_p)=explicit then kern_break
+ else act_width:=act_width+width(cur_p);
+@y
+kern_node: if (subtype(cur_p)=explicit)or(subtype(cur_p)=ita_kern) then
+ kern_break
+ else act_width:=act_width+width(cur_p);
+@z
+
+@x [39.866] l.17694 - pTeX:
+mark_node,ins_node,adjust_node: do_nothing;
+@y
+disp_node,mark_node,ins_node,adjust_node: do_nothing;
+@z
+
+% ǡϢ³ɴ֤ cur_kanji_skip 롣
+% penalty_node box_node ˤϡadjust_hlist 롼ˤäƴ˼ºݤ
+% glue_node ƤΤȲꤷƤ롣
+% chain ϡtry_break cur_kanji_skip Υ㥹ȤΤ˻Ȥ롣
+@x [39.867] l.17708 - pTeX: add kanji char width
+@<Advance \(c)|cur_p| to the node following the present string...@>=
+begin prev_p:=cur_p;
+repeat f:=font(cur_p);
+act_width:=act_width+char_width(f)(char_info(f)(character(cur_p)));
+cur_p:=link(cur_p);
+until not is_char_node(cur_p);
+end
+@y
+@<Advance \(c)|cur_p| to the node following the present string...@>=
+begin chain:=false;
+if is_char_node(cur_p) then
+ if font_dir[font(cur_p)]<>dir_default then
+ begin case type(prev_p) of
+ hlist_node,vlist_node,dir_node,rule_node,
+ ligature_node,disc_node,math_node: begin
+ cur_p:=prev_p; try_break(0,unhyphenated); cur_p:=link(cur_p);
+ end;
+ othercases do_nothing;
+ endcases;
+ end;
+ prev_p:=cur_p; post_p:=cur_p; post_f:=font(post_p);
+ repeat f:=post_f; cc:=character(cur_p);
+ act_width:=act_width+char_width(f)(orig_char_info(f)(cc));
+ post_p:=link(cur_p);
+ if font_dir[f]<>dir_default then
+ begin prev_p:=cur_p; cur_p:=post_p; post_p:=link(post_p);
+ if is_char_node(post_p) then
+ begin post_f:=font(post_p);
+ if font_dir[post_f]<>dir_default then chain:=true else chain:=false;
+ try_break(0,unhyphenated);
+ end
+ else
+ begin chain:=false;
+ case type(post_p) of
+ hlist_node,vlist_node,dir_node,rule_node,ligature_node,
+ disc_node,math_node: try_break(0,unhyphenated);
+ othercases do_nothing;
+ endcases;
+ end;
+ if chain then
+ begin if first_use then
+ begin check_shrinkage(cur_kanji_skip);
+ first_use:=false;
+ end;
+ act_width:=act_width+width(cur_kanji_skip);@|
+ active_width[2+stretch_order(cur_kanji_skip)]:=@|
+ active_width[2+stretch_order(cur_kanji_skip)]
+ +stretch(cur_kanji_skip);@/
+ active_width[6]:=active_width[6]+shrink(cur_kanji_skip);
+ end;
+ prev_p:=cur_p;
+ end
+ else if is_char_node(post_p) then
+ begin post_f:=font(post_p); chain:=false;
+ if font_dir[post_f]<>dir_default then try_break(0,unhyphenated);
+ end;
+ cur_p:=post_p;
+ until not is_char_node(cur_p);
+chain:=false;
+end
+@z
+
+@x [39.868] l.17723 - pTeX: ita_kern
+ else if (type(prev_p)=kern_node)and(subtype(prev_p)<>explicit) then
+ try_break(0,unhyphenated);
+@y
+ else if type(prev_p)=kern_node then
+ if (subtype(prev_p)<>explicit)and(subtype(prev_p)<>ita_kern) then
+ try_break(0,unhyphenated);
+@z
+
+@x [39.871] l.17756 - pTeX: add kanji char width, dir_node width, disp_node
+ disc_width:=disc_width+char_width(f)(char_info(f)(character(s)));
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ disc_width:=disc_width+
+ char_width(f)(char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,rule_node,kern_node:
+ disc_width:=disc_width+width(s);
+@y
+ disc_width:=disc_width+char_width(f)(orig_char_info(f)(character(s)));
+ if font_dir[f]<>dir_default then s:=link(s)
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ disc_width:=disc_width+
+ char_width(f)(orig_char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,dir_node,rule_node,kern_node:
+ disc_width:=disc_width+width(s);
+ disp_node: do_nothing;
+@z
+
+@x [39.872] l.17772 - pTeX: add kanji char width, dir_node width, disp_node
+ act_width:=act_width+char_width(f)(char_info(f)(character(s)));
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ act_width:=act_width+
+ char_width(f)(char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,rule_node,kern_node:
+ act_width:=act_width+width(s);
+@y
+ act_width:=act_width+char_width(f)(orig_char_info(f)(character(s)));
+ if font_dir[f]<>dir_default then s:=link(s)
+ end
+else case type(s) of
+ ligature_node: begin f:=font(lig_char(s));
+ act_width:=act_width+
+ char_width(f)(orig_char_info(f)(character(lig_char(s))));
+ end;
+ hlist_node,vlist_node,dir_node,rule_node,kern_node:
+ act_width:=act_width+width(s);
+ disp_node: do_nothing;
+@z
+
+@x [39.877] l.17879 - pTeX: last_disp
+cur_line:=prev_graf+1;
+@y
+cur_line:=prev_graf+1; last_disp:=0;
+@z
+
+@x [39.879] l.17919 - pTeX: ita_kern
+ if type(q)=kern_node then if subtype(q)<>explicit then goto done1;
+@y
+ if type(q)=kern_node then
+ if (subtype(q)<>explicit)and(subtype(q)<>ita_kern) then goto done1;
+@z
+
+@x [39.881] l.17950 - pTeX: |q| may be a |char_node|
+if q<>null then {|q| cannot be a |char_node|}
+ if type(q)=glue_node then
+ begin delete_glue_ref(glue_ptr(q));
+ glue_ptr(q):=right_skip;
+ subtype(q):=right_skip_code+1; add_glue_ref(right_skip);
+ goto done;
+ end
+ else begin if type(q)=disc_node then
+ @<Change discretionary to compulsory and set
+ |disc_break:=true|@>
+@y
+if q<>null then {|q| may be a |char_node|}
+ begin if not is_char_node(q) then
+ if type(q)=glue_node then
+ begin delete_glue_ref(glue_ptr(q));
+ glue_ptr(q):=right_skip;
+ subtype(q):=right_skip_code+1; add_glue_ref(right_skip);
+ goto done;
+ end
+ else begin if type(q)=disc_node then
+ @<Change discretionary to compulsory and set
+ |disc_break:=true|@>
+@z
+@x [39.881] l.17961 - pTeX: |q| may be a |char_node|
+ end
+@y
+ end
+ end
+@z
+
+@x [39.887] l.18014 - pTeX: disp_node at begin-of-line
+r:=link(q); link(q):=null; q:=link(temp_head); link(temp_head):=r;
+@y
+r:=link(q); link(q):=null; q:=link(temp_head); link(temp_head):=r;
+if last_disp<>0 then begin
+ r:=get_node(small_node_size);
+ type(r):=disp_node; disp_dimen(r):=last_disp;
+ link(r):=q; q:=r; disp_called:=true;
+ end;
+@z
+
+@x [40.896] l.18177 - pTeX: hyphenation
+loop@+ begin if is_char_node(s) then
+ begin c:=qo(character(s)); hf:=font(s);
+ end
+@y
+loop@+ begin if is_char_node(s) then
+ begin hf:=font(s);
+ if font_dir[hf]<>dir_default then
+ begin prev_s:=s; s:=link(prev_s); c:=info(s); goto continue;
+ end else c:=qo(character(s));
+ end
+ else if type(s)=disp_node then goto continue
+ else if (type(s)=penalty_node)and(subtype(s)<>normal) then goto continue
+@z
+
+@x [40.899] l.18248 - pTeX: disp_node
+ whatsit_node,glue_node,penalty_node,ins_node,adjust_node,mark_node:
+ goto done4;
+@y
+ disp_node: do_nothing;
+ whatsit_node,glue_node,penalty_node,ins_node,adjust_node,mark_node:
+ goto done4;
+@z
+
+@x [44.968] l.19535 - pTeX: dir_node
+ hlist_node,vlist_node,rule_node:@<Insert glue for |split_top_skip|
+@y
+ dir_node,
+ hlist_node,vlist_node,rule_node:@<Insert glue for |split_top_skip|
+@z
+
+@x [44.973] l.19626 - pTeX: dir_node
+hlist_node,vlist_node,rule_node: begin@t@>@;@/
+@y
+dir_node,
+hlist_node,vlist_node,rule_node: begin@t@>@;@/
+@z
+
+@x [44.977] l.19710 - pTeX: free box node
+var v:pointer; {the box to be split}
+@y
+var v:pointer; {the box to be split}
+w:pointer; {|dir_node|}
+@z
+
+@x [44.977] l.19722 - pTeX: free box node
+q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size);
+if q=null then box(n):=null {the |eq_level| of the box stays the same}
+else box(n):=vpack(q,natural);
+vsplit:=vpackage(p,h,exactly,split_max_depth);
+@y
+q:=prune_page_top(q); p:=list_ptr(v);
+if q=null then box(n):=null {the |eq_level| of the box stays the same}
+else begin
+ box(n):=vpack(q,natural); set_box_dir(box(n))(box_dir(v));
+ end;
+q:=vpackage(p,h,exactly,split_max_depth);
+set_box_dir(q)(box_dir(v));
+delete_glue_ref(space_ptr(v)); delete_glue_ref(xspace_ptr(v));
+free_node(v,box_node_size);
+vsplit:=q;
+@z
+
+@x [44.978] l.19732 - pTeX: bad box for vsplit
+if type(v)<>vlist_node then
+ begin print_err(""); print_esc("vsplit"); print(" needs a ");
+ print_esc("vbox");
+@:vsplit_}{\.{\\vsplit needs a \\vbox}@>
+ help2("The box you are trying to split is an \hbox.")@/
+ ("I can't split such a box, so I'll leave it alone.");
+ error; vsplit:=null; return;
+ end
+@y
+if type(v)=dir_node then begin
+ w:=v; v:=list_ptr(v);
+ delete_glue_ref(space_ptr(w));
+ delete_glue_ref(xspace_ptr(w));
+ free_node(w,box_node_size);
+end;
+if type(v)<>vlist_node then begin
+ print_err(""); print_esc("vsplit"); print(" needs a ");
+ print_esc("vbox");
+@:vsplit_}{\.{\\vsplit needs a \\vbox}@>
+ help2("The box you are trying to split is an \hbox.")@/
+ ("I can't split such a box, so I'll leave it alone.");
+ error; vsplit:=null; return;
+end;
+flush_node_list(link(v)); link(v):=null
+@z
+
+@x [45.993] l.20053 - pTeX: ensure_vbox
+begin p:=box(n);
+if p<>null then if type(p)=hlist_node then
+ begin print_err("Insertions can only be added to a vbox");
+@y
+begin p:=box(n);
+if p<>null then if type(p)=dir_node then
+ begin p:=list_ptr(p);
+ delete_glue_ref(space_ptr(box(n)));
+ delete_glue_ref(xspace_ptr(box(n)));
+ free_node(box(n),box_node_size);
+ box(n):=p
+end;
+if p<>null then if type(p)<>vlist_node then begin
+ print_err("Insertions can only be added to a vbox");
+@z
+
+@x [45.1000] l.20146 - pTeX: dir_node
+hlist_node,vlist_node,rule_node: if page_contents<box_there then
+ @<Initialize the current page, insert the \.{\\topskip} glue
+ ahead of |p|, and |goto continue|@>
+@y
+hlist_node,vlist_node,dir_node,rule_node: if page_contents<box_there then
+ @<Initialize the current page, insert the \.{\\topskip} glue
+ ahead of |p|, and |goto continue|@>
+@z
+
+@x [45.1009] l.20291 - pTeX: ins_dir
+if box(n)=null then height(r):=0
+else height(r):=height(box(n))+depth(box(n));
+@y
+if box(n)=null then height(r):=0
+else
+ begin if abs(ins_dir(p))<>abs(box_dir(box(n))) then
+ begin print_err("Insertions can only be added to a same direction vbox");
+@.Insertions can only...@>
+ help3("Tut tut: You're trying to \insert into a")@/
+ ("\box register that now have a different direction.")@/
+ ("Proceed, and I'll discard its present contents.");
+ box_error(n)
+ end
+ else
+ height(r):=height(box(n))+depth(box(n));
+ end;
+@z
+
+@x [45.1017] l.20470 - pTeX: page dir
+box(255):=vpackage(link(page_head),best_size,exactly,page_max_depth);
+@y
+box(255):=vpackage(link(page_head),best_size,exactly,page_max_depth);
+set_box_dir(box(255))(page_dir);
+@z
+
+@x [45.1020] l.20513 - pTeX: check ins_dir
+if best_ins_ptr(r)=null then wait:=true
+else begin wait:=false; s:=last_ins_ptr(r); link(s):=ins_ptr(p);
+@y
+if best_ins_ptr(r)=null then wait:=true
+else begin wait:=false;
+ n:=qo(subtype(p));
+ case abs(box_dir(box(n))) of
+ any_dir:
+ if abs(ins_dir(p))<>abs(box_dir(box(n))) then begin
+ print_err("Insertions can only be added to a same direction vbox");
+@.Insertions can only...@>
+ help3("Tut tut: You're trying to \insert into a")@/
+ ("\box register that now have a different direction.")@/
+ ("Proceed, and I'll discard its present contents.");
+ box_error(n);
+ box(n):=new_null_box; last_ins_ptr(r):=box(n)+list_offset;
+ end;
+ othercases
+ set_box_dir(box(n))(abs(ins_dir(p)));
+ endcases;
+ s:=last_ins_ptr(r); link(s):=ins_ptr(p);
+@z
+
+@x [45.1021] l.20537 - pTeX: free box node, ins_dir
+ free_node(temp_ptr,box_node_size); wait:=true;
+@y
+ delete_glue_ref(space_ptr(temp_ptr));
+ delete_glue_ref(xspace_ptr(temp_ptr));
+ free_node(temp_ptr,box_node_size); wait:=true;
+@z
+
+@x [45.1021] l.20543 - pTeX: free box node, ins_dir
+free_node(box(n),box_node_size);
+box(n):=vpack(temp_ptr,natural);
+@y
+delete_glue_ref(space_ptr(box(n)));
+delete_glue_ref(xspace_ptr(box(n)));
+flush_node_list(link(box(n)));
+free_node(box(n),box_node_size);
+box(n):=vpack(temp_ptr,natural); set_box_dir(box(n))(abs(ins_dir(p)));
+@z
+
+@x [46.1030] l.20687 - pTeX:main_control
+@d append_normal_space=120 {go here to append a normal space between words}
+@y
+@d append_normal_space=120 {go here to append a normal space between words}
+@d main_loop_j=130 {like |main_loop|, but |cur_chr| holds a KANJI code}
+@d skip_loop=141
+@d again_2=150
+@z
+
+@x [46.1030] l.20691 - pTeX: main_control
+procedure main_control; {governs \TeX's activities}
+label big_switch,reswitch,main_loop,main_loop_wrapup,
+@y
+procedure main_control; {governs \TeX's activities}
+label big_switch,reswitch,main_loop,main_loop_wrapup,
+ main_loop_j,main_loop_j+1,main_loop_j+3,skip_loop,again_2,
+@z
+
+@x [46.1030] l.20697 - pTeX: main_control
+var@!t:integer; {general-purpose temporary variable}
+@y
+var@!t:integer; {general-purpose temporary variable}
+@!cx:KANJI_code; {kanji character}
+@!kp:pointer; {kinsoku penalty register}
+@!gp,gq:pointer; {temporary registers for list manipulation}
+@!disp:scaled; {displacement register}
+@!ins_kp:boolean; {whether insert kinsoku penalty}
+@z
+
+@x [46.1030] l.20701 - pTeX: main_control
+case abs(mode)+cur_cmd of
+hmode+letter,hmode+other_char,hmode+char_given: goto main_loop;
+hmode+char_num: begin scan_char_num; cur_chr:=cur_val; goto main_loop;@+end;
+hmode+no_boundary: begin get_x_token;
+ if (cur_cmd=letter)or(cur_cmd=other_char)or(cur_cmd=char_given)or
+ (cur_cmd=char_num) then cancel_boundary:=true;
+ goto reswitch;
+ end;
+@y
+ins_kp:=false;
+case abs(mode)+cur_cmd of
+hmode+letter,hmode+other_char: goto main_loop;
+hmode+kanji,hmode+kana,hmode+other_kchar: goto main_loop_j;
+hmode+char_given:
+ if is_char_ascii(cur_chr) then goto main_loop else goto main_loop_j;
+hmode+char_num: begin scan_char_num; cur_chr:=cur_val;
+ if is_char_ascii(cur_chr) then goto main_loop else goto main_loop_j;
+ end;
+hmode+no_boundary: begin get_x_token;
+ if (cur_cmd=letter)or(cur_cmd=other_char)or
+ (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar)or
+ (cur_cmd=char_given)or(cur_cmd=char_num) then cancel_boundary:=true;
+ goto reswitch;
+ end;
+@z
+
+@x [46.1030] l.20715 - pTeX: main_control
+main_loop:@<Append character |cur_chr| and the following characters (if~any)
+ to the current hlist in the current font; |goto reswitch| when
+ a non-character has been fetched@>;
+@y
+main_loop_j:@<Append KANJI-character |cur_chr|
+ to the current hlist in the current font; |goto reswitch| when
+ a non-character has been fetched@>;
+main_loop: inhibit_glue_flag:=false;
+@<Append character |cur_chr| and the following characters (if~any)
+ to the current hlist in the current font; |goto reswitch| when
+ a non-character has been fetched@>;
+@z
+
+@x [46.1034] l.20788 - pTeX: disp_node
+@<Append character |cur_chr|...@>=
+if ((head=tail) and (mode>0)) then begin
+ if (insert_src_special_auto) then append_src_special;
+end;
+adjust_space_factor;@/
+@y
+@<Append character |cur_chr|...@>=
+if ((head=tail) and (mode>0)) then begin
+ if (insert_src_special_auto) then append_src_special;
+end;
+adjust_space_factor;@/
+if direction=dir_tate then disp:=t_baseline_shift else disp:=y_baseline_shift;
+@<Append |disp_node| at begin of displace area@>;
+@z
+
+%@x [46.1035] l.20850 - pTeX: kinsoku penalty
+%@<Make a ligature node, if |ligature_present|;...@>=
+%wrapup(rt_hit)
+%@y
+%@<Make a ligature node, if |ligature_present|;...@>=
+%wrapup(rt_hit);
+%if ins_kp=true then
+% begin cx:=KANJI(cur_l); @<Insert kinsoku penalty@>;
+% ins_kp:=false;
+% end
+%@z
+
+@x [46.1036] l.20854 - pTeX: disp_node
+if lig_stack=null then goto reswitch;
+@y
+if lig_stack=null then
+ begin @<Append |disp_node| at end of displace area@>;
+ goto reswitch;
+ end;
+@z
+
+@x [46.1037] l.20886 - pTeX: Look ahead for another character
+@<Look ahead for another character...@>=
+get_next; {set only |cur_cmd| and |cur_chr|, for speed}
+if cur_cmd=letter then goto main_loop_lookahead+1;
+if cur_cmd=other_char then goto main_loop_lookahead+1;
+if cur_cmd=char_given then goto main_loop_lookahead+1;
+x_token; {now expand and set |cur_cmd|, |cur_chr|, |cur_tok|}
+if cur_cmd=letter then goto main_loop_lookahead+1;
+if cur_cmd=other_char then goto main_loop_lookahead+1;
+if cur_cmd=char_given then goto main_loop_lookahead+1;
+if cur_cmd=char_num then
+ begin scan_char_num; cur_chr:=cur_val; goto main_loop_lookahead+1;
+ end;
+if cur_cmd=no_boundary then bchar:=non_char;
+cur_r:=bchar; lig_stack:=null; goto main_lig_loop;
+main_loop_lookahead+1: adjust_space_factor;
+fast_get_avail(lig_stack); font(lig_stack):=main_f;
+cur_r:=qi(cur_chr); character(lig_stack):=cur_r;
+if cur_r=false_bchar then cur_r:=non_char {this prevents spurious ligatures}
+@y
+@<Look ahead for another character...@>=
+get_next; {set only |cur_cmd| and |cur_chr|, for speed}
+if cur_cmd=letter then goto main_loop_lookahead+1;
+if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ @<goto |main_lig_loop|@>;
+if cur_cmd=other_char then goto main_loop_lookahead+1;
+if cur_cmd=char_given then
+ begin if is_char_ascii(cur_chr) then goto main_loop_lookahead+1
+ else @<goto |main_lig_loop|@>;
+ end;
+x_token; {now expand and set |cur_cmd|, |cur_chr|, |cur_tok|}
+if cur_cmd=letter then goto main_loop_lookahead+1;
+if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ @<goto |main_lig_loop|@>;
+if cur_cmd=other_char then goto main_loop_lookahead+1;
+if cur_cmd=char_given then
+ begin if is_char_ascii(cur_chr) then goto main_loop_lookahead+1
+ else @<goto |main_lig_loop|@>;
+ end;
+if cur_cmd=char_num then
+ begin scan_char_num; cur_chr:=cur_val;
+ if is_char_ascii(cur_chr) then goto main_loop_lookahead+1
+ else @<goto |main_lig_loop|@>;
+ end;
+if cur_cmd=inhibit_glue then
+ begin inhibit_glue_flag:=true; goto main_loop_lookahead;
+ end;
+if cur_cmd=no_boundary then bchar:=non_char;
+cur_r:=bchar; lig_stack:=null; goto main_lig_loop;
+main_loop_lookahead+1: adjust_space_factor;
+inhibit_glue_flag:=false;
+fast_get_avail(lig_stack); font(lig_stack):=main_f;
+cur_r:=qi(cur_chr); character(lig_stack):=cur_r;
+if cur_r=false_bchar then cur_r:=non_char {this prevents spurious ligatures}
+
+@ @<goto |main_lig_loop|@>=
+begin bchar:=non_char; cur_r:=bchar; lig_stack:=null;
+if ligature_present then pack_lig(rt_hit);
+if ins_kp=true then
+ begin cx:=cur_l; @<Insert kinsoku penalty@>;
+ end;
+ins_kp:=false;
+goto main_loop_j;
+end
+@z
+
+@x [46.1041] l.20999 - pTeX: disp_node
+link(tail):=temp_ptr; tail:=temp_ptr;
+@y
+if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin link(prev_node):=temp_ptr; link(temp_ptr):=tail; prev_node:=temp_ptr;
+ end
+else begin link(tail):=temp_ptr; tail:=temp_ptr;
+ end;
+@z
+
+@x [46.1043] l.21029 - pTeX: disp_node
+link(tail):=q; tail:=q;
+@y
+if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin link(prev_node):=q; link(q):=tail; prev_node:=q;
+ end
+else begin link(tail):=q; tail:=q;
+ end
+@z
+
+@x [47.????] pTeX: reset inhibit_glue_flag at rule_node
+vmode+hrule,hmode+vrule,mmode+vrule: begin tail_append(scan_rule_spec);
+@y
+vmode+hrule,hmode+vrule,mmode+vrule: begin tail_append(scan_rule_spec);
+ inhibit_glue_flag := false;
+@z
+
+@x [47.1060] pTeX: append_glue, inhibit_glue_flag
+end; {now |cur_val| points to the glue specification}
+tail_append(new_glue(cur_val));
+if s>=skip_code then
+@y
+end; {now |cur_val| points to the glue specification}
+tail_append(new_glue(cur_val));
+inhibit_glue_flag := false;
+if s>=skip_code then
+@z
+
+@x [47.1061] l.21277 - pTeX: append kern
+begin s:=cur_chr; scan_dimen(s=mu_glue,false,false);
+tail_append(new_kern(cur_val)); subtype(tail):=s;
+end;
+@y
+begin s:=cur_chr; scan_dimen(s=mu_glue,false,false);
+inhibit_glue_flag := false;
+if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin prev_append(new_kern(cur_val)); subtype(prev_node):=s;
+ end
+else
+ begin tail_append(new_kern(cur_val)); subtype(tail):=s;
+ end;
+end;
+@z
+
+@x [47.1068] l.21377 - pTeX:
+var p,@!q:pointer; {for short-term use}
+@y
+var p,@!q:pointer; {for short-term use}
+@!r:pointer; {temporary}
+@z
+
+@x [47.1071] l.21485 - pTeX: \tate, \yoko, \dtou
+primitive("hbox",make_box,vtop_code+hmode);@/
+@!@:hbox_}{\.{\\hbox} primitive@>
+@y
+primitive("hbox",make_box,vtop_code+hmode);@/
+@!@:hbox_}{\.{\\hbox} primitive@>
+primitive("tate",chg_dir,dir_tate);@/
+@!@:tate_}{\.{\\tate} primitive@>
+primitive("yoko",chg_dir,dir_yoko);@/
+@!@:yoko_}{\.{\\yoko} primitive@>
+primitive("dtou",chg_dir,dir_dtou);@/
+@!@:dtou_}{\.{\\dtou} primitive@>
+@z
+
+@x [47.1072] l.21506 - pTeX: \tate, \yoko, \dtou
+ othercases print_esc("hbox")
+ endcases;
+leader_ship: if chr_code=a_leaders then print_esc("leaders")
+@y
+ othercases print_esc("hbox")
+ endcases;
+chg_dir:
+ case chr_code of
+ dir_yoko: print_esc("yoko");
+ dir_tate: print_esc("tate");
+ dir_dtou: print_esc("dtou");
+ endcases;
+leader_ship: if chr_code=a_leaders then print_esc("leaders")
+@z
+
+@x [47.1073] l.21523 - pTeX: \tate, \yoko
+any_mode(make_box): begin_box(0);
+@y
+any_mode(make_box): begin_box(0);
+any_mode(chg_dir):
+ begin if cur_group<>align_group then
+ if mode=hmode then
+ begin print_err("Improper `"); print_cmd_chr(cur_cmd,cur_chr);
+ print("'");
+ help2("You cannot change the direction in unrestricted")
+ ("horizontal mode."); error;
+ end
+ else if abs(mode)=mmode then
+ begin print_err("Improper `"); print_cmd_chr(cur_cmd,cur_chr);
+ print("'");
+ help1("You cannot change the direction in math mode."); error;
+ end
+ else if nest_ptr=0 then change_page_direction(cur_chr)
+ else if head=tail then direction:=cur_chr
+ else begin print_err("Use `"); print_cmd_chr(cur_cmd,cur_chr);
+ print("' at top of list");
+ help2("Direction change command is available only while")
+ ("current list is null."); error;
+ end
+ else begin print_err("You can't use `"); print_cmd_chr(cur_cmd,cur_chr);
+ print("' in an align");
+ help2("To change direction in an align,")
+ ("you shold use \hbox or \vbox with \tate or \yoko."); error;
+ end
+ end;
+@z
+
+@x [47.1075] l.21538 - pTeX: box_end
+var p:pointer; {|ord_noad| for new box in math mode}
+@y
+var p:pointer; {|ord_noad| for new box in math mode}
+q:pointer;
+@z
+
+@x [47.1076] l.21553 - pTeX: box_dir adjust
+ begin shift_amount(cur_box):=box_context;
+@y
+ begin p:=link(cur_box); link(cur_box):=null;
+ while p<>null do begin
+ q:=p; p:=link(p);
+ if abs(box_dir(q))=abs(direction) then
+ begin list_ptr(q):=cur_box; cur_box:=q; link(cur_box):=null;
+ end
+ else begin
+ delete_glue_ref(space_ptr(q));
+ delete_glue_ref(xspace_ptr(q));
+ free_node(q,box_node_size);
+ end;
+ end;
+ if abs(box_dir(cur_box))<>abs(direction) then
+ cur_box:=new_dir_node(cur_box,abs(direction));
+ shift_amount(cur_box):=box_context;
+@z
+
+@x [47.1076] pTeX: sub_exp_box
+ else begin if abs(mode)=hmode then space_factor:=1000
+ else begin p:=new_noad;
+ math_type(nucleus(p)):=sub_box;
+@y
+ else begin if abs(mode)=hmode then
+ begin space_factor:=1000; inhibit_glue_flag:=false; end
+ else begin p:=new_noad;
+ math_type(nucleus(p)):=sub_exp_box;
+@z
+
+@x [47.1078] l.21585 - pTeX: box_dir adjust
+ begin append_glue; subtype(tail):=box_context-(leader_flag-a_leaders);
+ leader_ptr(tail):=cur_box;
+ end
+@y
+ begin append_glue; subtype(tail):=box_context-(leader_flag-a_leaders);
+ if type(cur_box)<=dir_node then
+ begin p:=link(cur_box); link(cur_box):=null;
+ while p<>null do
+ begin q:=p; p:=link(p);
+ if abs(box_dir(q))=abs(direction) then
+ begin list_ptr(q):=cur_box; cur_box:=q; link(cur_box):=null;
+ end
+ else begin
+ delete_glue_ref(space_ptr(q));
+ delete_glue_ref(xspace_ptr(q));
+ free_node(q,box_node_size);
+ end;
+ end;
+ if abs(box_dir(cur_box))<>abs(direction) then
+ cur_box:=new_dir_node(cur_box,abs(direction));
+ end;
+ leader_ptr(tail):=cur_box;
+ end
+@z
+
+@x [47.1079] l.20920 begin_box - pTeX: disp_node, adjust direction
+@!m:quarterword; {the length of a replacement list}
+@y
+@!r:pointer; {running behind |p|}
+@!fd:boolean; {a final |disp_node| pair?}
+@!disp,@!pdisp:scaled; {displacement}
+@!a_dir:eight_bits; {adjust direction}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
+@z
+
+@x [47.1080] l.20937 - pTeX: disp_node, check head=tail
+@ Note that the condition |not is_char_node(tail)| implies that |head<>tail|,
+since |head| is a one-word node.
+@y
+@ Note that in \TeX\ the condition |not is_char_node(tail)| implies that
+|head<>tail|, since |head| is a one-word node; this is not so for \pTeX.
+@z
+
+@x [47.1080] l.20940 - pTeX: disp_node
+@<If the current list ends with a box node, delete it...@>=
+@y
+@d check_effective_tail_pTeX(#)==
+tx:=tail;
+if not is_char_node(tx) then
+ if type(tx)=disp_node then
+ begin tx:=prev_node;
+ if not is_char_node(tx) then
+ if type(tx)=disp_node then #; {|disp_node| from a discretionary}
+ end
+@#
+@d fetch_effective_tail_pTeX(#)== {extract |tx|, merge |disp_node| pair}
+q:=head; p:=null; disp:=0; pdisp:=0;
+repeat r:=p; p:=q; fd:=false;
+if not is_char_node(q) then
+ if type(q)=disc_node then
+ begin for m:=1 to replace_count(q) do p:=link(p);
+ if p=tx then #;
+ end
+ else if type(q)=disp_node then
+ begin pdisp:=disp; disp:=disp_dimen(q); fd:=true;@+end;
+q:=link(p);
+until q=tx; {found |r|$\to$|p|$\to$|q=tx|}
+q:=link(tx); link(p):=q; link(tx):=null;
+if q=null then tail:=p
+else if fd then {|r|$\to$|p=disp_node|$\to$|q=disp_node|}
+ begin prev_node:=r; prev_disp:=pdisp; link(p):=null; tail:=p;
+ disp_dimen(p):=disp_dimen(q); free_node(q,small_node_size);
+ end
+else prev_node:=p
+@#
+@d check_effective_tail==check_effective_tail_pTeX
+@d fetch_effective_tail==fetch_effective_tail_pTeX
+
+@<If the current list ends with a box node, delete it...@>=
+@z
+
+@x [47.1080] l.20950 - pTeX: disp_node, check head=tail
+else begin if not is_char_node(tail) then
+ if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
+ @<Remove the last box, unless it's part of a discretionary@>;
+ end;
+@y
+else begin check_effective_tail(goto done);
+ if not is_char_node(tx)and(head<>tx) then
+ if (type(tx)=hlist_node)or(type(tx)=vlist_node)
+ or(type(tx)=dir_node) then
+ @<Remove the last box, unless it's part of a discretionary@>;
+ done:end;
+@z
+
+@x [47.1081] l.20957 - pTeX: disp_node
+begin q:=head;
+repeat p:=q;
+if not is_char_node(q) then if type(q)=disc_node then
+ begin for m:=1 to replace_count(q) do p:=link(p);
+ if p=tail then goto done;
+ end;
+q:=link(p);
+until q=tail;
+cur_box:=tail; shift_amount(cur_box):=0;
+tail:=p; link(p):=null;
+done:end
+@y
+begin fetch_effective_tail(goto done);
+cur_box:=tx; shift_amount(cur_box):=0;
+if type(cur_box)=dir_node then
+ begin link(list_ptr(cur_box)):=cur_box;
+ cur_box:=list_ptr(cur_box);
+ list_ptr(link(cur_box)):=null;
+ end
+else
+ if box_dir(cur_box)=dir_default then set_box_dir(cur_box)(direction);
+end
+@z
+
+@x [47.1083] l.20989 - pTeX: adjust_dir
+if k=hmode then
+ if (box_context<box_flag)and(abs(mode)=vmode) then
+ scan_spec(adjusted_hbox_group,true)
+ else scan_spec(hbox_group,true)
+else begin if k=vmode then scan_spec(vbox_group,true)
+ else begin scan_spec(vtop_group,true); k:=vmode;
+ end;
+ normal_paragraph;
+ end;
+push_nest; mode:=-k;
+@y
+a_dir:=adjust_dir;
+if k=hmode then
+ if (box_context<box_flag)and(abs(mode)=vmode) then
+ begin a_dir:=abs(direction); scan_spec(adjusted_hbox_group,true);
+ end
+ else scan_spec(hbox_group,true)
+else begin if k=vmode then scan_spec(vbox_group,true)
+ else begin scan_spec(vtop_group,true); k:=vmode;
+ end;
+ normal_paragraph;
+ end;
+push_nest; mode:=-k; adjust_dir:=a_dir;
+@z
+
+@x [47.1083] reset inhibit_glue_flag
+else begin space_factor:=1000;
+@y
+else begin space_factor:=1000; inhibit_glue_flag:=false;
+@z
+
+@x [47.1085] l.21031 - pTeX: end of box, call adjust_hlist
+hbox_group: package(0);
+adjusted_hbox_group: begin adjust_tail:=adjust_head; package(0);
+ end;
+@y
+hbox_group: begin adjust_hlist(head,false); package(0);
+ end;
+adjusted_hbox_group: begin adjust_hlist(head,false);
+ adjust_tail:=adjust_head; package(0);
+ end;
+@z
+
+@x [47.1086] l.21044 - pTeX: set cur_kanji_skip, cur_xkanji_skip
+begin d:=box_max_depth; unsave; save_ptr:=save_ptr-3;
+if mode=-hmode then cur_box:=hpack(link(head),saved(2),saved(1))
+else begin cur_box:=vpackage(link(head),saved(2),saved(1),d);
+ if c=vtop_code then @<Readjust the height and depth of |cur_box|,
+ for \.{\\vtop}@>;
+ end;
+pop_nest; box_end(saved(0));
+end;
+@y
+begin d:=box_max_depth;
+ delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+ if auto_spacing>0 then cur_kanji_skip:=kanji_skip
+ else cur_kanji_skip:=zero_glue;
+ if auto_xspacing>0 then cur_xkanji_skip:=xkanji_skip
+ else cur_xkanji_skip:=zero_glue;
+ add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+ unsave; save_ptr:=save_ptr-3;
+ if mode=-hmode then begin
+ cur_box:=hpack(link(head),saved(2),saved(1));
+ set_box_dir(cur_box)(direction); pop_nest;
+ end else begin
+ cur_box:=vpackage(link(head),saved(2),saved(1),d);
+ set_box_dir(cur_box)(direction); pop_nest;
+ if c=vtop_code then
+ @<Readjust the height and depth of |cur_box|, for \.{\\vtop}@>;
+ end;
+ box_end(saved(0));
+end;
+@z
+
+@x [47.1090] l.21079 - pTeX: apend vmode case
+vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given,
+ vmode+math_shift,vmode+un_hbox,vmode+vrule,
+ vmode+accent,vmode+discretionary,vmode+hskip,vmode+valign,
+ vmode+ex_space,vmode+no_boundary:@t@>@;@/
+ begin back_input; new_graf(true);
+ end;
+@y
+vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given,
+ vmode+math_shift,vmode+un_hbox,vmode+vrule,
+ vmode+accent,vmode+discretionary,vmode+hskip,vmode+valign,
+ vmode+kanji,vmode+kana,vmode+other_kchar,
+ vmode+ex_space,vmode+no_boundary:@t@>@;@/
+ begin back_input; new_graf(true);
+ end;
+@z
+
+@x [47.1091] l.21096 - pTeX: new_graf, adjust direction
+push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
+@y
+inhibit_glue_flag := false;
+push_nest; adjust_dir:=direction;
+mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
+@z
+
+@x [47.???] indent_in_hmode: reset inhibit_glue_flag
+ if abs(mode)=hmode then space_factor:=1000
+@y
+ if abs(mode)=hmode then
+ begin space_factor:=1000; inhibit_glue_flag:=false; end
+@z
+
+@x [47.1096] l.21155 - pTeX: end_graf, call adjust_hlist
+ begin if head=tail then pop_nest {null paragraphs are ignored}
+ else line_break(widow_penalty);
+@y
+ begin if head=tail then pop_nest {null paragraphs are ignored}
+ else begin adjust_hlist(head,true); line_break(widow_penalty)
+ end;
+@z
+
+@x [47.1099] l.21184 begin_insert_or_adjust - pTeX: insert and adjust
+new_save_level(insert_group); scan_left_brace; normal_paragraph;
+push_nest; mode:=-vmode; prev_depth:=ignore_depth;
+@y
+inhibit_glue_flag:=false;
+new_save_level(insert_group); scan_left_brace; normal_paragraph;
+push_nest; mode:=-vmode; direction:=adjust_dir; prev_depth:=ignore_depth;
+@z
+
+@x [47.1100] l.21189 - pTeX: free box node, ins_dir
+insert_group: begin end_graf; q:=split_top_skip; add_glue_ref(q);
+ d:=split_max_depth; f:=floating_penalty; unsave; decr(save_ptr);
+ {now |saved(0)| is the insertion number, or 255 for |vadjust|}
+ p:=vpack(link(head),natural); pop_nest;
+ if saved(0)<255 then
+ begin tail_append(get_node(ins_node_size));
+ type(tail):=ins_node; subtype(tail):=qi(saved(0));
+ height(tail):=height(p)+depth(p); ins_ptr(tail):=list_ptr(p);
+ split_top_ptr(tail):=q; depth(tail):=d; float_cost(tail):=f;
+ end
+ else begin tail_append(get_node(small_node_size));
+ type(tail):=adjust_node;@/
+ subtype(tail):=0; {the |subtype| is not used}
+ adjust_ptr(tail):=list_ptr(p); delete_glue_ref(q);
+ end;
+ free_node(p,box_node_size);
+ if nest_ptr=0 then build_page;
+ end;
+@y
+insert_group: begin end_graf; q:=split_top_skip; add_glue_ref(q);
+ d:=split_max_depth; f:=floating_penalty; unsave; decr(save_ptr);
+ {now |saved(0)| is the insertion number, or 255 for |vadjust|}
+ p:=vpack(link(head),natural); set_box_dir(p)(direction); pop_nest;
+ if saved(0)<255 then
+ begin r:=get_node(ins_node_size);
+ type(r):=ins_node; subtype(r):=qi(saved(0));
+ height(r):=height(p)+depth(p); ins_ptr(r):=list_ptr(p);
+ split_top_ptr(r):=q; depth(r):=d; float_cost(r):=f;
+ set_ins_dir(r)(box_dir(p));
+ if not is_char_node(tail)and(type(tail)=disp_node) then
+ prev_append(r)
+ else tail_append(r);
+ end
+ else begin
+ if abs(box_dir(p))<>abs(adjust_dir) then
+ begin print_err("Direction Incompatible");
+ help1("\vadjust's argument and outer vlist must have same direction.");
+ error; flush_node_list(list_ptr(p));
+ end
+ else begin
+ r:=get_node(small_node_size); type(r):=adjust_node;@/
+ adjust_ptr(r):=list_ptr(p); delete_glue_ref(q);
+ if not is_char_node(tail)and(type(tail)=disp_node) then
+ prev_append(r)
+ else tail_append(r);
+ end;
+ end;
+ delete_glue_ref(space_ptr(p));
+ delete_glue_ref(xspace_ptr(p));
+ free_node(p,box_node_size);
+ if nest_ptr=0 then build_page;
+ end;
+@z
+
+@x [47.1101] l.21214 make_mark - pTeX: mark_node, prev_append
+mark_ptr(p):=def_ref; link(tail):=p; tail:=p;
+@y
+inhibit_glue_flag:=false;
+mark_ptr(p):=def_ref;
+if not is_char_node(tail)and(type(tail)=disp_node) then
+ prev_append(p)
+else tail_append(p);
+@z
+
+@x [47.1103] l.21224 - pTeX: penalty, prev_append
+procedure append_penalty;
+begin scan_int; tail_append(new_penalty(cur_val));
+if mode=vmode then build_page;
+end;
+@y
+procedure append_penalty;
+begin scan_int;
+ inhibit_glue_flag:=false;
+ if not is_char_node(tail)and(type(tail)=disp_node) then
+ prev_append(new_penalty(cur_val))
+ else tail_append(new_penalty(cur_val));
+ if mode=vmode then build_page;
+end;
+@z
+
+@x [47.1105] l.21246 - pTeX: delete_last: disp_node
+@!m:quarterword; {the length of a replacement list}
+@y
+@!r:pointer; {running behind |p|}
+@!fd:boolean; {a final |disp_node| pair?}
+@!disp,@!pdisp:scaled; {displacement}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
+@z
+
+@x [47.1105] l.21250 - pTeX: delete_last: disp_node
+else begin if not is_char_node(tail) then if type(tail)=cur_chr then
+ begin q:=head;
+ repeat p:=q;
+ if not is_char_node(q) then if type(q)=disc_node then
+ begin for m:=1 to replace_count(q) do p:=link(p);
+ if p=tail then return;
+ end;
+ q:=link(p);
+ until q=tail;
+ link(p):=null; flush_node_list(tail); tail:=p;
+@y
+else begin check_effective_tail(return);
+ if not is_char_node(tx) then if type(tx)=cur_chr then
+ begin fetch_effective_tail(return);
+ flush_node_list(tx);
+@z
+
+@x [47.1110] l.21310 -pTeX: free box node, delete kanji_skip
+var p:pointer; {the box}
+@!c:box_code..copy_code; {should we copy?}
+@y
+var p:pointer; {the box}
+@!c:box_code..copy_code; {should we copy?}
+@!disp:scaled; {displacement}
+@z
+
+@x [47.1110] l.21314 unpackage - pTeX: free box node, delete kanji_skip
+if (abs(mode)=mmode)or((abs(mode)=vmode)and(type(p)<>vlist_node))or@|
+ ((abs(mode)=hmode)and(type(p)<>hlist_node)) then
+ begin print_err("Incompatible list can't be unboxed");
+@.Incompatible list...@>
+ help3("Sorry, Pandora. (You sneaky devil.)")@/
+ ("I refuse to unbox an \hbox in vertical mode or vice versa.")@/
+ ("And I can't open any boxes in math mode.");@/
+ error; return;
+ end;
+if c=copy_code then link(tail):=copy_node_list(list_ptr(p))
+else begin link(tail):=list_ptr(p); box(cur_val):=null;
+ free_node(p,box_node_size);
+ end;
+@y
+if type(p)=dir_node then p:=list_ptr(p);
+if (abs(mode)=mmode)or((abs(mode)=vmode)and(type(p)<>vlist_node))or@|
+ ((abs(mode)=hmode)and(type(p)<>hlist_node)) then
+ begin print_err("Incompatible list can't be unboxed");
+@.Incompatible list...@>
+ help3("Sorry, Pandora. (You sneaky devil.)")@/
+ ("I refuse to unbox an \hbox in vertical mode or vice versa.")@/
+ ("And I can't open any boxes in math mode.");@/
+ error; return;
+end;
+case abs(box_dir(p)) of
+ any_dir:
+ if abs(direction)<>abs(box_dir(p)) then begin
+ print_err("Incompatible direction list can't be unboxed");
+ help2("Sorry, Pandora. (You sneaky devil.)")@/
+ ("I refuse to unbox a box in different direction.");@/
+ error; return;
+ end;
+endcases;
+disp:=0;
+if c=copy_code then link(tail):=copy_node_list(list_ptr(p))
+else
+ begin if type(box(cur_val))=dir_node then
+ begin delete_glue_ref(space_ptr(box(cur_val)));
+ delete_glue_ref(xspace_ptr(box(cur_val)));
+ free_node(box(cur_val),box_node_size);
+ end;
+ flush_node_list(link(p));
+ link(tail):=list_ptr(p); box(cur_val):=null;
+ delete_glue_ref(space_ptr(p));
+ delete_glue_ref(xspace_ptr(p));
+ free_node(p,box_node_size);
+ end;
+@z
+
+@x [47.1110] l.22014 - pTeX: free box node, delete kanji_skip
+while link(tail)<>null do tail:=link(tail);
+@y
+while link(tail)<>null do
+ {reset |inhibit_glue_flag| when a node other than |disp_node| is found;
+ |disp_node| is always inserted according to tex-jp-build issue 40}
+ begin p:=tail; tail:=link(tail);
+ if is_char_node(tail) then
+ inhibit_glue_flag:=false
+ else
+ case type(tail) of
+ glue_node : begin
+ inhibit_glue_flag:=false;
+ if (subtype(tail)=kanji_skip_code+1)
+ or(subtype(tail)=xkanji_skip_code+1) then
+ begin link(p):=link(tail);
+ delete_glue_ref(glue_ptr(tail));
+ free_node(tail,small_node_size); tail:=p;
+ end;
+ end;
+ penalty_node : begin
+ inhibit_glue_flag:=false;
+ if subtype(tail)=widow_pena then
+ begin link(p):=link(tail); free_node(tail,small_node_size);
+ tail:=p;
+ end;
+ end;
+ disp_node :
+ begin prev_disp:=disp; disp:=disp_dimen(tail); prev_node:=p;
+ end;
+ othercases inhibit_glue_flag:=false;
+ endcases;
+ end;
+@z
+
+@x [47.1113] l.22028 - pTeX: italic correction, ita_kern
+procedure append_italic_correction;
+label exit;
+var p:pointer; {|char_node| at the tail of the current list}
+@!f:internal_font_number; {the font in the |char_node|}
+begin if tail<>head then
+ begin if is_char_node(tail) then p:=tail
+ else if type(tail)=ligature_node then p:=lig_char(tail)
+ else return;
+ f:=font(p);
+ tail_append(new_kern(char_italic(f)(char_info(f)(character(p)))));
+ subtype(tail):=explicit;
+ end;
+@y
+procedure append_italic_correction;
+label exit;
+var p:pointer; {|char_node| at the tail of the current list}
+@!f:internal_font_number; {the font in the |char_node|}
+@!d:pointer; {|disp_node|}
+begin if tail<>head then
+ begin
+ if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin d:=tail; tail:=prev_node;
+ end
+ else d:=null;
+ if (last_jchr<>null)and(link(last_jchr)=tail)and(is_char_node(tail)) then
+ p:=last_jchr
+ else if is_char_node(tail) then p:=tail
+ else if type(tail)=ligature_node then p:=lig_char(tail)
+ else return;
+ f:=font(p);
+ tail_append(new_kern(char_italic(f)(char_info(f)(character(p)))));
+ subtype(tail):=ita_kern;
+ if d<>null then
+ begin prev_node:=tail; tail_append(d);
+ end;
+ end;
+@z
+
+@x [47.????] pTeX: reset inhibit_glue_flag at disc_node
+procedure append_discretionary;
+var c:integer; {hyphen character}
+begin tail_append(new_disc);
+@y
+procedure append_discretionary;
+var c:integer; {hyphen character}
+begin tail_append(new_disc); inhibit_glue_flag:=false;
+@z
+
+@x pTeX: direction check in \discretionary
+@!n:integer; {length of discretionary list}
+@y
+@!n:integer; {length of discretionary list}
+@!d:integer; {direction}
+@z
+
+@x pTeX: direction check in \discretionary
+p:=link(head); pop_nest;
+case saved(-1) of
+0:pre_break(tail):=p;
+1:post_break(tail):=p;
+@y
+p:=link(head); d:=abs(direction); pop_nest;
+case saved(-1) of
+0:if abs(direction)=d then pre_break(tail):=p
+ else begin
+ print_err("Direction Incompatible");
+ help2("\discretionary's argument and outer hlist must have same direction.")@/
+ ("I delete your first part."); error; pre_break(tail):=null; flush_node_list(p);
+ end;
+1:if abs(direction)=d then post_break(tail):=p
+ else begin
+ print_err("Direction Incompatible");
+ help2("\discretionary's argument and outer hlist must have same direction.")@/
+ ("I delete your second part."); error; post_break(tail):=null; flush_node_list(p);
+ end;
+@z
+
+@x pTeX: reset inhibit_glue_flag
+push_nest; mode:=-hmode; space_factor:=1000;
+@y
+push_nest; mode:=-hmode; space_factor:=1000; inhibit_glue_flag:=false;
+@z
+
+@x pTeX: direction check in \discretionary
+else link(tail):=p;
+if n<=max_quarterword then replace_count(tail):=n
+@y
+else if (n>0)and(abs(direction)<>d) then
+ begin print_err("Direction Incompatible");
+ help2("\discretionary's argument and outer hlist must have same direction.")@/
+ ("I delete your third part."); flush_node_list(p); n:=0; error;
+ end
+else link(tail):=p;
+if n<=max_quarterword then replace_count(tail):=n
+@z
+
+@x [47.1120] l.22119 - pTeX: discretionary with disp_node
+decr(save_ptr); return;
+@y
+decr(save_ptr);
+prev_node:=tail; tail_append(get_node(small_node_size));
+type(tail):=disp_node; disp_dimen(tail):=0; prev_disp:=0;
+return;
+@z
+
+@x [47.1121] l.22127 - pTeX: discretionary with disp_node
+ begin if not is_char_node(p) then if type(p)>rule_node then
+ if type(p)<>kern_node then if type(p)<>ligature_node then
+ begin print_err("Improper discretionary list");
+@y
+ begin if not is_char_node(p) then
+ if (type(p)>rule_node)and(type(p)<>kern_node)and
+ (type(p)<>ligature_node)and(type(p)<>disp_node) then
+ if (type(p)=penalty_node)and(subtype(p)<>normal) then
+ begin link(q):=link(p); free_node(p,small_node_size); p:=q;
+ end
+ else
+ begin print_err("Improper discretionary list");
+@z
+
+@x [47.1123] l.22160 - pTeX: make_accent, Kanji, insert disp_node
+var s,@!t: real; {amount of slant}
+@y
+var s,@!t: real; {amount of slant}
+@!disp:scaled; {displacement}
+@!cx:KANJI_code; {temporary register for KANJI}
+@z
+
+@x [47.1123] l.22165 - pTeX: make_accent, Kanji, insert disp_node
+begin scan_char_num; f:=cur_font; p:=new_character(f,cur_val);
+@y
+begin scan_char_num;
+if not is_char_ascii(cur_val) then
+ begin KANJI(cx):=cur_val;
+ if direction=dir_tate then f:=cur_tfont else f:=cur_jfont;
+ p:=new_character(f,get_jfm_pos(KANJI(cx),f));
+ if p<>null then
+ begin
+ link(p):=get_avail; info(link(p)):=KANJI(cx);
+ end;
+ end
+else begin f:=cur_font; p:=new_character(f,cur_val);
+ end;
+@z
+
+@x [47.1123] l.22175 - pTeX: make_accent, Kanji, insert disp_node
+ link(tail):=p; tail:=p; space_factor:=1000;
+@y
+ link(tail):=p;
+ if link(p)<>null then tail:=link(p) else tail:=p;
+ @<Append |disp_node| at end of displace area@>;
+ space_factor:=1000; inhibit_glue_flag:=false;
+@z
+
+@x [47.1124] l.22180 - pTeX: make_accent Kanji, insert disp_node
+q:=null; f:=cur_font;
+if (cur_cmd=letter)or(cur_cmd=other_char)or(cur_cmd=char_given) then
+ q:=new_character(f,cur_chr)
+else if cur_cmd=char_num then
+ begin scan_char_num; q:=new_character(f,cur_val);
+ end
+else back_input
+@y
+q:=null; f:=cur_font; KANJI(cx):=empty;
+if (cur_cmd=letter)or(cur_cmd=other_char) then
+ q:=new_character(f,cur_chr)
+else if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
+ begin if direction=dir_tate then f:=cur_tfont else f:=cur_jfont;
+ cx:=cur_chr;
+ end
+else if cur_cmd=char_given then
+ if is_char_ascii(cur_chr) then q:=new_character(f,cur_chr)
+ else begin
+ if direction=dir_tate then f:=cur_tfont else f:=cur_jfont;
+ KANJI(cx):=cur_chr
+ end
+ else if cur_cmd=char_num then
+ begin scan_char_num;
+ if is_char_ascii(cur_val) then q:=new_character(f,cur_val)
+ else begin
+ if direction=dir_tate then f:=cur_tfont else f:=cur_jfont;
+ KANJI(cx):=cur_val
+ end
+ end
+else back_input;
+if direction=dir_tate then
+ begin if font_dir[f]=dir_tate then disp:=0
+ else if font_dir[f]=dir_yoko then disp:=t_baseline_shift-y_baseline_shift
+ else disp:=t_baseline_shift
+ end
+else begin if font_dir[f]=dir_yoko then disp:=0
+ else if font_dir[f]=dir_tate then disp:=y_baseline_shift-t_baseline_shift
+ else disp:=y_baseline_shift
+ end;
+@<Append |disp_node| at begin of displace area@>;
+if KANJI(cx)<>empty then
+ begin q:=new_character(f,get_jfm_pos(KANJI(cx),f));
+ link(q):=get_avail; info(link(q)):=KANJI(cx); last_jchr:=q;
+ end;
+@z
+
+@x [47.1125] l.22200 - pTeX: make_accent Kanji
+if h<>x then {the accent must be shifted up or down}
+ begin p:=hpack(p,natural); shift_amount(p):=x-h;
+ end;
+@y
+if h<>x then {the accent must be shifted up or down}
+ begin delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+ cur_kanji_skip:=zero_glue; cur_xkanji_skip:=zero_glue;
+ add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+ p:=hpack(p,natural); shift_amount(p):=x-h;
+ end;
+@z
+
+@x [47.1125] pTeX: make accent Kanji
+tail:=new_kern(-a-delta); subtype(tail):=acc_kern; link(p):=tail; p:=q;
+@y
+tail:=new_kern(-a-delta); subtype(tail):=acc_kern;
+if h=x then begin
+ if font_dir[font(p)]<>dir_default then link(link(p)):=tail
+ else link(p):=tail; end
+else link(p):=tail;
+{ bugfix: if |p| is KANJI char, |link(p)|:=|tail| collapses |p| and kern after accent. }
+p:=q;
+@z
+
+@x [48.1138] l.22385 - pTeX: init math : direction < 0 ... math direction
+if (cur_cmd=math_shift)and(mode>0) then @<Go into display math mode@>
+else begin back_input; @<Go into ordinary math mode@>;
+ end;
+@y
+if (cur_cmd=math_shift)and(mode>0) then @<Go into display math mode@>
+else begin back_input; @<Go into ordinary math mode@>;
+ end;
+direction:=-abs(direction);
+@z
+
+@x [48.1145] l.22435 - pTeX: Call adjust_hlist at begin of display
+else begin line_break(display_widow_penalty);@/
+@y
+else begin adjust_hlist(head,true); line_break(display_widow_penalty);@/
+@z
+
+@x [48.1147] l.22471 - pTeX: Skip kanji 2nd node, dir_node
+reswitch: if is_char_node(p) then
+ begin f:=font(p); d:=char_width(f)(char_info(f)(character(p)));
+ goto found;
+ end;
+case type(p) of
+hlist_node,vlist_node,rule_node: begin d:=width(p); goto found;
+ end;
+@y
+reswitch: if is_char_node(p) then
+ begin f:=font(p); d:=char_width(f)(orig_char_info(f)(character(p)));
+ if font_dir[f]<>dir_default then p:=link(p);
+ goto found;
+ end;
+case type(p) of
+hlist_node,vlist_node,dir_node,rule_node: begin d:=width(p); goto found;
+ end;
+@z
+
+@x [48.1150] l.22541 - pTeX: scan_math
+mmode+left_brace: begin tail_append(new_noad);
+ back_input; scan_math(nucleus(tail));
+ end;
+@y
+mmode+left_brace: begin tail_append(new_noad);
+ back_input; scan_math(nucleus(tail),kcode_noad(tail));
+ end;
+@z
+
+@x [48.1151] l.22555 - pTeX: scan_math: use Kanji in math_mode
+procedure scan_math(@!p:pointer);
+label restart,reswitch,exit;
+var c:integer; {math character code}
+begin restart:@<Get the next non-blank non-relax...@>;
+reswitch:case cur_cmd of
+letter,other_char,char_given: begin c:=ho(math_code(cur_chr));
+ if c=@'100000 then
+ begin @<Treat |cur_chr| as an active character@>;
+ goto restart;
+ end;
+ end;
+@y
+procedure scan_math(@!p,@!q:pointer);
+label restart,reswitch,exit;
+var c:integer; {math character code}
+cx:KANJI_code; {temporary register for KANJI}
+begin KANJI(cx):=0;
+restart: @<Get the next non-blank non-relax...@>;
+reswitch:case cur_cmd of
+letter,other_char,char_given:
+ if (is_char_ascii(cur_chr) or (cur_chr=256)) then begin
+ c:=ho(math_code(cur_chr));
+ if c=@'100000 then
+ begin @<Treat |cur_chr| as an active character@>;
+ goto restart;
+ end;
+ end
+ else
+ KANJI(cx):=cur_chr;
+kanji,kana,other_kchar: cx:=cur_chr;
+@z
+
+@x [48.1151] l.22576 - pTeX: scan_math: use Kanji in math_mode
+math_type(p):=math_char; character(p):=qi(c mod 256);
+if (c>=var_code)and fam_in_range then fam(p):=cur_fam
+else fam(p):=(c div 256) mod 16;
+@y
+if KANJI(cx)=0 then
+ begin math_type(p):=math_char; character(p):=qi(c mod 256);
+ if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam
+ else fam(p):=(c div 256) mod 16;
+ if font_dir[fam_fnt(fam(p)+cur_size)]<>dir_default then
+ begin print_err("Not one-byte family");
+ help1("IGNORE.");@/
+ error;
+ end
+ end
+else begin
+ if q=null then
+ begin math_type(p):=sub_mlist; info(p):=new_noad;
+ p:=nucleus(info(p)); q:=kcode_noad_nucleus(p);
+ end;
+ math_type(p):=math_jchar; fam(p):=cur_jfam; character(p):=qi(0);
+ math_kcode(p-1):=KANJI(cx);
+ if font_dir[fam_fnt(fam(p)+cur_size)]=dir_default then
+ begin print_err("Not two-byte family");
+ help1("IGNORE.");@/
+ error;
+ end
+ end;
+@z
+
+@x [48.1154] l.22605 - pTeX: math mode
+mmode+letter,mmode+other_char,mmode+char_given:
+ set_math_char(ho(math_code(cur_chr)));
+mmode+char_num: begin scan_char_num; cur_chr:=cur_val;
+ set_math_char(ho(math_code(cur_chr)));
+ end;
+@y
+mmode+letter,mmode+other_char,mmode+char_given:
+ if is_char_ascii(cur_chr) then
+ if cur_chr<128 then set_math_char(ho(math_code(cur_chr)))
+ else set_math_char(cur_chr)
+ else set_math_kchar(cur_chr);
+mmode+kanji,mmode+kana,mmode+other_kchar: begin
+ cx:=cur_chr; set_math_kchar(KANJI(cx));
+ end;
+mmode+char_num: begin scan_char_num; cur_chr:=cur_val;
+ if is_char_ascii(cur_chr) then
+ if cur_chr<128 then set_math_char(ho(math_code(cur_chr)))
+ else set_math_char(cur_chr)
+ else set_math_kchar(cur_chr);
+ end;
+@z
+
+@x [48.1155] l.22635 - pTeX: set_math_char
+ link(tail):=p; tail:=p;
+@y
+ link(tail):=p; tail:=p;
+ if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin
+ print_err("Not one-byte family");
+ help1("IGNORE.");@/
+ error;
+ end;
+@z
+
+@x [48.1158] l.22690 - pTeX: scan_math
+ type(tail):=cur_chr; scan_math(nucleus(tail));
+@y
+ type(tail):=cur_chr; scan_math(nucleus(tail),kcode_noad(tail));
+@z
+
+@x [48.1163] l.22750 - pTeX: scan_math
+scan_delimiter(left_delimiter(tail),true); scan_math(nucleus(tail));
+@y
+scan_delimiter(left_delimiter(tail),true);
+scan_math(nucleus(tail),kcode_noad(tail));
+@z
+
+@x [48.1164] l.22770 - pTeX: scan_math
+scan_math(nucleus(tail));
+@y
+scan_math(nucleus(tail),kcode_noad(tail));
+@z
+
+@x [48.1164] l.22790 - pTeX: vcenter : dir
+vcenter_group: begin end_graf; unsave; save_ptr:=save_ptr-2;
+ p:=vpack(link(head),saved(1),saved(0)); pop_nest;
+ tail_append(new_noad); type(tail):=vcenter_noad;
+ math_type(nucleus(tail)):=sub_box; info(nucleus(tail)):=p;
+ end;
+@y
+vcenter_group: begin end_graf; unsave; save_ptr:=save_ptr-2;
+ p:=vpack(link(head),saved(1),saved(0));
+ set_box_dir(p)(direction); pop_nest;
+ if abs(box_dir(p))<>abs(direction) then p:=new_dir_node(p,abs(direction));
+ tail_append(new_noad); type(tail):=vcenter_noad;
+ math_type(nucleus(tail)):=sub_box; info(nucleus(tail)):=p;
+ end;
+@z
+
+@x [48.1176] l.22864 - pTeX: scan_math
+scan_math(p);
+@y
+scan_math(p,null);
+@z
+
+@x [48.1186] l.23006 - pTeX: copy kanji code
+ if math_type(supscr(p))=empty then
+ begin mem[saved(0)].hh:=mem[nucleus(p)].hh;
+@y
+ if ((math_type(supscr(p))=empty)and(math_kcode(p)=null)) then
+ begin mem[saved(0)].hh:=mem[nucleus(p)].hh;
+@z
+
+@x [48.1194] l.23078 - pTeX: set cur_kanji_skip, cur_xkanji_skip
+var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'}
+@y
+var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'}
+@!disp:scaled; {displacement}
+@z
+
+@x [48.1194] l.23087 - pTeX: set cur_kanji_skip, cur_xkanji_skip
+m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest}
+@y
+delete_glue_ref(cur_kanji_skip); delete_glue_ref(cur_xkanji_skip);
+if auto_spacing>0 then cur_kanji_skip:=kanji_skip
+else cur_kanji_skip:=zero_glue;
+if auto_xspacing>0 then cur_xkanji_skip:=xkanji_skip
+else cur_xkanji_skip:=zero_glue;
+add_glue_ref(cur_kanji_skip); add_glue_ref(cur_xkanji_skip);
+m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest}
+@z
+
+@x [48.1196] l.23134 - pTeX: insert disp_node
+begin tail_append(new_math(math_surround,before));
+cur_mlist:=p; cur_style:=text_style; mlist_penalties:=(mode>0); mlist_to_hlist;
+link(tail):=link(temp_head);
+while link(tail)<>null do tail:=link(tail);
+tail_append(new_math(math_surround,after));
+space_factor:=1000; unsave;
+end
+@y
+begin if direction=dir_tate then disp:=t_baseline_shift
+ else disp:=y_baseline_shift;
+@<Append |disp_node| at begin of displace area@>;
+tail_append(new_math(math_surround,before));
+cur_mlist:=p; cur_style:=text_style; mlist_penalties:=(mode>0); mlist_to_hlist;
+link(tail):=link(temp_head);
+while link(tail)<>null do tail:=link(tail);
+tail_append(new_math(math_surround,after));
+@<Append |disp_node| at end of displace area@>;
+space_factor:=1000; inhibit_glue_flag:=false; unsave;
+end
+@z
+
+@x [48.1200] l.23203 - pTeX: adjust direction
+push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
+@y
+push_nest; adjust_dir:=direction; inhibit_glue_flag:=false;
+mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
+@z
+
+@x [48.1201] l.23217 - pTeX: free box node
+ begin free_node(b,box_node_size);
+@y
+ begin delete_glue_ref(space_ptr(b)); delete_glue_ref(xspace_ptr(b));
+ free_node(b,box_node_size);
+@z
+
+@x [48.1201] l.23222 - pTeX: free box node
+ begin free_node(b,box_node_size);
+@y
+ begin delete_glue_ref(space_ptr(b)); delete_glue_ref(xspace_ptr(b));
+ free_node(b,box_node_size);
+@z
+
+@x [49.1210] l.23361 - pTeX: set_auto_spacing
+any_mode(toks_register),
+any_mode(assign_toks),
+any_mode(assign_int),
+@y
+any_mode(assign_kinsoku),
+any_mode(assign_inhibit_xsp_code),
+any_mode(set_auto_spacing),
+any_mode(set_kansuji_char),
+any_mode(toks_register),
+any_mode(assign_toks),
+any_mode(assign_int),
+any_mode(def_jfont),
+any_mode(def_tfont),
+@z
+
+@x [49.1211] l.23397 - pTeX: prefixed_command
+procedure prefixed_command;
+label done,exit;
+var a:small_number; {accumulated prefix codes so far}
+@y
+procedure prefixed_command;
+label done,exit;
+var a:small_number; {accumulated prefix codes so far}
+@!m:integer; {ditto}
+@z
+
+@x [49.1217] l.23487 - pTeX: select cur font
+set_font: define(cur_font_loc,data,cur_chr);
+@y
+set_font: begin
+ if font_dir[cur_chr]=dir_yoko then
+ define(cur_jfont_loc,data,cur_chr)
+ else if font_dir[cur_chr]=dir_tate then
+ define(cur_tfont_loc,data,cur_chr)
+ else
+ define(cur_font_loc,data,cur_chr)
+end;
+@z
+
+@x l.23504 - pTeX
+primitive("futurelet",let,normal+1);@/
+@!@:future_let_}{\.{\\futurelet} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+let: if chr_code<>normal then print_esc("futurelet")@+else print_esc("let");
+
+@ @<Assignments@>=
+let: begin n:=cur_chr;
+@y
+primitive("futurelet",let,normal+1);@/
+@!@:future_let_}{\.{\\futurelet} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+let: if chr_code<>normal then print_esc("futurelet")@+else print_esc("let");
+
+@ @<Assignments@>=
+let: begin n:=cur_chr;
+@z
+
+@x [49.1228] l.23785 - pTeX: assign jfam
+assign_int: begin p:=cur_chr; scan_optional_equals; scan_int;
+ word_define(p,cur_val);
+ end;
+@y
+assign_int: begin p:=cur_chr; scan_optional_equals; scan_int;
+ if p=int_base+cur_fam_code then
+ begin if font_dir[fam_fnt(cur_val)]<>dir_default then
+ word_define(int_base+cur_jfam_code,cur_val)
+ else word_define(p,cur_val);
+ end
+ else word_define(p,cur_val);
+ end;
+@z
+
+@x [49.1230] l.23812 - pTeX: xspcode, kcatcode
+@<Put each...@>=
+primitive("catcode",def_code,cat_code_base);
+@!@:cat_code_}{\.{\\catcode} primitive@>
+@y
+@<Put each...@>=
+primitive("catcode",def_code,cat_code_base);
+@!@:cat_code_}{\.{\\catcode} primitive@>
+primitive("kcatcode",def_code,kcat_code_base);
+@!@:cat_code_}{\.{\\kcatcode} primitive@>
+primitive("xspcode",def_code,auto_xsp_code_base);
+@!@:auto_xsp_code_}{\.{\\xspcode} primitive@>
+@z
+
+@x [49.1231] l.23842 - pTeX: xspcode, kcatcode
+def_code: if chr_code=cat_code_base then print_esc("catcode")
+ else if chr_code=math_code_base then print_esc("mathcode")
+@y
+def_code: if chr_code=cat_code_base then print_esc("catcode")
+ else if chr_code=kcat_code_base then print_esc("kcatcode")
+ else if chr_code=auto_xsp_code_base then print_esc("xspcode")
+ else if chr_code=math_code_base then print_esc("mathcode")
+@z
+
+@x [49.1232] l.23857 - pTeX: kcatcode
+def_code: begin @<Let |n| be the largest legal code value, based on |cur_chr|@>;
+ p:=cur_chr; scan_char_num; p:=p+cur_val; scan_optional_equals;
+ scan_int;
+ if ((cur_val<0)and(p<del_code_base))or(cur_val>n) then
+ begin print_err("Invalid code ("); print_int(cur_val);
+@.Invalid code@>
+ if p<del_code_base then print("), should be in the range 0..")
+ else print("), should be at most ");
+ print_int(n);
+ help1("I'm going to use 0 instead of that illegal code value.");@/
+ error; cur_val:=0;
+ end;
+ if p<math_code_base then define(p,data,cur_val)
+ else if p<del_code_base then define(p,data,hi(cur_val))
+ else word_define(p,cur_val);
+ end;
+@y
+def_code: begin
+ @<Let |m| be the minimal legal code value, based on |cur_chr|@>;
+ @<Let |n| be the largest legal code value, based on |cur_chr|@>;
+ p:=cur_chr;
+ if p=kcat_code_base then
+ begin scan_char_num; p:=p+kcatcodekey(cur_val) end
+ else begin scan_ascii_num; p:=p+cur_val; end;
+ scan_optional_equals; scan_int;
+ if ((cur_val<m)and(p<del_code_base))or(cur_val>n) then
+ begin print_err("Invalid code ("); print_int(cur_val);
+@.Invalid code@>
+ if p<del_code_base then
+ begin print("), should be in the range "); print_int(m); print("..");
+ end
+ else print("), should be at most ");
+ print_int(n);
+ if m=0 then
+ begin help1("I'm going to use 0 instead of that illegal code value.");@/
+ error; cur_val:=0;
+ end
+ else
+ begin help1("I'm going to use 16 instead of that illegal code value.");@/
+ error; cur_val:=16;
+ end;
+ end;
+ if p<math_code_base then define(p,data,cur_val)
+ else if p<del_code_base then define(p,data,hi(cur_val))
+ else word_define(p,cur_val);
+ end;
+@z
+
+@x [49.1233] l.23882 - pTeX: kcatcode
+@ @<Let |n| be the largest...@>=
+if cur_chr=cat_code_base then n:=max_char_code
+@y
+@ @<Let |m| be the minimal...@>=
+if cur_chr=kcat_code_base then m:=kanji else m:=0
+
+@ @<Let |n| be the largest...@>=
+if cur_chr=cat_code_base then n:=invalid_char {1byte |max_char_code|}
+else if cur_chr=kcat_code_base then n:=max_char_code
+@z
+
+@x [49.1247] l.24083 - pTeX: alter_box_dimen : box_dir
+procedure alter_box_dimen;
+var c:small_number; {|width_offset| or |height_offset| or |depth_offset|}
+@y
+procedure alter_box_dimen;
+var c:small_number; {|width_offset| or |height_offset| or |depth_offset|}
+@!p,q:pointer; {temporary registers}
+@z
+@x [49.1247] l.24087 - pTeX: alter_box_dimen : box_dir
+scan_normal_dimen;
+if box(b)<>null then mem[box(b)+c].sc:=cur_val;
+end;
+@y
+scan_normal_dimen;
+if box(b)<>null then
+ begin q:=box(b); p:=link(q);
+ while p<>null do
+ begin if abs(direction)=abs(box_dir(p)) then q:=p;
+ p:=link(p);
+ end;
+ if abs(box_dir(q))<>abs(direction) then
+ begin p:=link(box(b)); link(box(b)):=null;
+ q:=new_dir_node(q,abs(direction)); list_ptr(q):=null;
+ link(q):=p; link(box(b)):=q;
+ end;
+ mem[q+c].sc:=cur_val;
+ end;
+end;
+@z
+
+@x [49.1256] l.24163 - pTeX: def_tfont
+def_font: new_font(a);
+@y
+def_tfont,def_jfont,def_font: new_font(a);
+@z
+
+@x [49.1292] l.24451 - pTeX: shift_case
+@<Change the case of the token in |p|, if a change is appropriate@>=
+t:=info(p);
+if t<cs_token_flag+single_base then
+ begin c:=t mod 256;
+ if equiv(b+c)<>0 then info(p):=t-c+equiv(b+c);
+ end
+@y
+@<Change the case of the token in |p|, if a change is appropriate@>=
+t:=info(p);
+if (t<cs_token_flag+single_base)and(not check_kanji(t)) then
+ begin c:=t mod 256;
+ if equiv(b+c)<>0 then info(p):=t-c+equiv(b+c);
+ end
+@z
+
+@x [49.1291] l.24467 - pTeX: show_mode
+@d show_lists_code=3 { \.{\\showlists} }
+@y
+@d show_lists_code=3 { \.{\\showlists} }
+@d show_mode=4 { \.{\\showmode} }
+@z
+
+@x [49.1291] l.24476 - pTeX: show_mode
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
+@y
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
+primitive("showmode",xray,show_mode);
+@!@:show_mode_}{\.{\\showmode} primitive@>
+@z
+
+@x [49.1292] l.24483 - pTeX: show_mode
+ othercases print_esc("show")
+@y
+ show_mode:print_esc("showmode");
+ othercases print_esc("show")
+@z
+
+@x [49.1293] l.24495 - pTeX: show_mode
+show_code: @<Show the current meaning of a token, then |goto common_ending|@>;
+@y
+show_code: @<Show the current meaning of a token, then |goto common_ending|@>;
+show_mode: @<Show the current japanese processing mode@>;
+@z
+
+@x
+libc_free(format_engine);@/
+@y
+libc_free(format_engine);@/
+dump_kanji(fmt_file);
+@z
+
+@x
+libc_free(format_engine);
+@y
+libc_free(format_engine);
+undump_kanji(fmt_file);
+@z
+
+@x l.24982
+font_info:=xmalloc_array(fmemory_word, font_mem_size);
+@y
+font_info:=xmalloc_array(memory_word, font_mem_size);
+@z
+
+@x [50.1320] l.24988 - pTeX:
+@ @<Dump the array info for internal font number |k|@>=
+begin
+dump_things(font_check[null_font], font_ptr+1-null_font);
+@y
+@ @<Dump the array info for internal font number |k|@>=
+begin
+dump_things(font_dir[null_font], font_ptr+1-null_font);
+dump_things(font_num_ext[null_font], font_ptr+1-null_font);
+dump_things(font_check[null_font], font_ptr+1-null_font);
+@z
+
+@x [50.1321] l.25000 - pTeX:
+dump_things(char_base[null_font], font_ptr+1-null_font);
+@y
+dump_things(ctype_base[null_font], font_ptr+1-null_font);
+dump_things(char_base[null_font], font_ptr+1-null_font);
+@z
+
+@x [50.1322] l.25024 - pTeX:
+@<Undump the array info for internal font number |k|@>=
+begin {Allocate the font arrays}
+@y
+@<Undump the array info for internal font number |k|@>=
+begin {Allocate the font arrays}
+font_dir:=xmalloc_array(eight_bits, font_max);
+font_num_ext:=xmalloc_array(integer, font_max);
+@z
+
+@x [50.1322] l.25040 - pTeX:
+char_base:=xmalloc_array(integer, font_max);
+@y
+ctype_base:=xmalloc_array(integer, font_max);
+char_base:=xmalloc_array(integer, font_max);
+@z
+
+@x [50.1322] l.25050 - pTeX:
+undump_things(font_check[null_font], font_ptr+1-null_font);
+@y
+undump_things(font_dir[null_font], font_ptr+1-null_font);
+undump_things(font_num_ext[null_font], font_ptr+1-null_font);
+undump_things(font_check[null_font], font_ptr+1-null_font);
+@z
+
+@x [50.1322] l.25064 - pTeX:
+undump_things(char_base[null_font], font_ptr+1-null_font);
+@y
+undump_things(ctype_base[null_font], font_ptr+1-null_font);
+undump_things(char_base[null_font], font_ptr+1-null_font);
+@z
+
+@x l.25363 - pTeX
+ font_info:=xmalloc_array (fmemory_word, font_mem_size);
+@y
+ font_info:=xmalloc_array (memory_word, font_mem_size);
+@z
+
+@x [51.1337] l.25563 - pTeX:
+ font_check:=xmalloc_array(four_quarters, font_max);
+@y
+ font_dir:=xmalloc_array(eight_bits, font_max);
+ font_num_ext:=xmalloc_array(integer, font_max);
+ font_check:=xmalloc_array(four_quarters, font_max);
+@z
+
+@x [51.1337] l.25577 - pTeX:
+ char_base:=xmalloc_array(integer, font_max);
+@y
+ ctype_base:=xmalloc_array(integer, font_max);
+ char_base:=xmalloc_array(integer, font_max);
+@z
+
+@x [51.1337] l.25587 - pTeX:
+ font_ptr:=null_font; fmem_ptr:=7;
+@y
+ font_ptr:=null_font; fmem_ptr:=7;
+ font_dir[null_font]:=dir_default;
+ font_num_ext[null_font]:=0;
+@z
+
+@x [51.1337] l.25594 - pTeX:
+ char_base[null_font]:=0; width_base[null_font]:=0;
+@y
+ ctype_base[null_font]:=0; char_base[null_font]:=0; width_base[null_font]:=0;
+@z
+
+@x [53.????] new_write_whatsit, inhibit_glue_flag
+write_stream(tail):=cur_val;
+end;
+@y
+write_stream(tail):=cur_val;
+inhibit_glue_flag:=false;
+end;
+@z
+
+@x [53.????] Implement \special, inhibit_glue_flag
+@<Implement \.{\\special}@>=
+begin new_whatsit(special_node,write_node_size); write_stream(tail):=null;
+p:=scan_toks(false,true); write_tokens(tail):=def_ref;
+end
+@y
+@<Implement \.{\\special}@>=
+begin new_whatsit(special_node,write_node_size); write_stream(tail):=null;
+p:=scan_toks(false,true); write_tokens(tail):=def_ref;
+inhibit_glue_flag:=false;
+end
+@z
+
+@x [53.????] Implement \immediate, inhibit_glue_flag
+ begin p:=tail; do_extension; {append a whatsit node}
+ out_what(tail); {do the action immediately}
+ flush_node_list(tail); tail:=p; link(p):=null;
+ end
+@y
+ begin k:=inhibit_glue_flag;
+ p:=tail; do_extension; {append a whatsit node}
+ out_what(tail); {do the action immediately}
+ flush_node_list(tail); tail:=p; link(p):=null;
+ inhibit_glue_flag:=k;
+ end
+@z
+
+@x [53.????] fix_language, inhibit_glue_flag
+if l<>clang then
+ begin new_whatsit(language_node,small_node_size);
+@y
+if l<>clang then
+ begin inhibit_glue_flag:=false;
+ new_whatsit(language_node,small_node_size);
+@z
+
+@x [53.????] set_language, inhibit_glue_flag
+if abs(mode)<>hmode then report_illegal_case
+else begin new_whatsit(language_node,small_node_size);
+@y
+if abs(mode)<>hmode then report_illegal_case
+else begin inhibit_glue_flag:=false;
+ new_whatsit(language_node,small_node_size);
+@z
+
+
+@x [53.1376] l.26309 - pTeX:
+@<Glob...@> =
+@!debug_format_file: boolean;
+@y
+@<Glob...@> =
+@!debug_format_file: boolean;
+
+@ @<Set init...@>=
+@!debug debug_format_file:=true; @+gubed;
+@z
+
+@x l.26984 - pTeX
+@* \[54] System-dependent changes.
+@y
+@* \[55/\pTeX] System-dependent changes for \pTeX.
+This section described extended variables, procesures, functions and so on
+for \pTeX.
+
+@<Declare procedures that scan font-related stuff@>=
+function get_jfm_pos(@!kcode:KANJI_code;@!f:internal_font_number):eight_bits;
+var @!jc:KANJI_code; {temporary register for KANJI}
+@!sp,@!mp,@!ep:pointer;
+begin@/
+if f=null_font then
+ begin get_jfm_pos:=kchar_type(null_font)(0); return;
+ end;
+jc:=toDVI(kcode);
+sp:=1; { start position }
+ep:=font_num_ext[f]-1; { end position }
+if (ep>=1)and(kchar_code(f)(sp)<=jc)and(jc<=kchar_code(f)(ep)) then
+ begin while (sp <= ep) do
+ begin mp:=sp+((ep-sp) div 2);
+ if jc<kchar_code(f)(mp) then ep:=mp-1
+ else if jc>kchar_code(f)(mp) then sp:=mp+1
+ else
+ begin get_jfm_pos:=kchar_type(f)(mp); return;
+ end;
+ end;
+ end;
+get_jfm_pos:=kchar_type(f)(0);
+end;
+
+@ Following codes are used to calculate a KANJI width and height.
+
+@<Local variables for dimension calculations@>=
+@!t: eight_bits;
+
+@ @<The KANJI width for |cur_jfont|@>=
+if direction=dir_tate then
+ v:=char_width(cur_tfont)(orig_char_info(cur_tfont)(qi(0)))
+else
+ v:=char_width(cur_jfont)(orig_char_info(cur_jfont)(qi(0)))
+
+@ @<The KANJI height for |cur_jfont|@>=
+if direction=dir_tate then begin
+ t:=height_depth(orig_char_info(cur_tfont)(qi(0)));
+ v:=char_height(cur_tfont)(t)+char_depth(cur_tfont)(t);
+end else begin
+ t:=height_depth(orig_char_info(cur_jfont)(qi(0)));
+ v:=char_height(cur_jfont)(t)+char_depth(cur_jfont)(t);
+end
+
+@ set a kansuji character.
+
+@ @<Put each...@>=
+primitive("kansujichar",set_kansuji_char,0);
+@!@:kansujichar_}{\.{\\kansujichar} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+set_kansuji_char: print_esc("kansujichar");
+
+@ @<Assignments@>=
+set_kansuji_char:
+begin p:=cur_chr; scan_int; n:=cur_val; scan_optional_equals; scan_int;
+if not is_char_kanji(cur_val) then
+ begin print_err("Invalid KANSUJI char (");
+ print_hex(cur_val); print_char(")");
+@.Invalid KANSUJI char@>
+ help1("I'm skipping this control sequences.");@/
+ error; return;
+ end
+else if (n<0)or(n>9) then
+ begin print_err("Invalid KANSUJI number ("); print_int(n); print_char(")");
+@.Invalid KANSUJI number@>
+ help1("I'm skipping this control sequences.");@/
+ error; return;
+ end
+else
+ define(kansuji_base+n,n,tokanji(toDVI(cur_val)));
+end;
+
+@ @<Fetch kansuji char code from some table@>=
+begin scan_int; cur_val_level:=int_val;
+ if (cur_val<0)or(cur_val>9) then
+ begin print_err("Invalid KANSUJI number ("); print_int(cur_val); print_char(")");
+ help1("I'm skipping this control sequences.");@/
+ error; return;
+ end
+ else
+ cur_val:=fromDVI(kansuji_char(cur_val));
+end
+
+@ |print_kansuji| procedure converts a number to KANJI number.
+
+@ @<Declare procedures needed in |scan_something_internal|@>=
+procedure print_kansuji(@!n:integer);
+var @!k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
+@!cx: KANJI_code; {temporary register for KANJI}
+begin k:=0;
+ if n<0 then return; {nonpositive input produces no output}
+ repeat dig[k]:=n mod 10; n:=n div 10; incr(k);
+ until n=0;
+ begin while k>0 do
+ begin decr(k);
+ cx:=kansuji_char(dig[k]);
+ print_kanji(fromDVI(cx));
+ end;
+ end;
+end;
+
+@ \pTeX\ inserts a glue specified by \.{\\kanjiskip} between 2byte-characters,
+automatically, if \.{\\autospacing}. This glue is suppressed by
+\.{\\noautospacing}.
+\.{\\xkanjiskip}, \.{\\noautoxspacing}, \.{\\autoxspacing}, \.{\\xspcode} is
+used to control between 2byte and 1byte characters.
+
+@d reset_auto_spacing_code=0
+@d set_auto_spacing_code=1
+@d reset_auto_xspacing_code=2
+@d set_auto_xspacing_code=3
+
+@<Put each...@>=
+primitive("autospacing",set_auto_spacing,set_auto_spacing_code);
+@!@:auto_spacing_}{\.{\\autospacing} primitive@>
+primitive("noautospacing",set_auto_spacing,reset_auto_spacing_code);
+@!@:no_auto_spacing_}{\.{\\noautospacing} primitive@>
+primitive("autoxspacing",set_auto_spacing,set_auto_xspacing_code);
+@!@:auto_xspacing_}{\.{\\autoxspacing} primitive@>
+primitive("noautoxspacing",set_auto_spacing,reset_auto_xspacing_code);
+@!@:no_auto_xspacing_}{\.{\\noautoxspacing} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+set_auto_spacing:begin
+ if (chr_code mod 2)=0 then print_esc("noauto") else print_esc("auto");
+ if chr_code<2 then print("spacing") else print("xspacing");
+end;
+
+@ @<Assignments@>=
+set_auto_spacing:begin
+ if cur_chr<2 then p:=auto_spacing_code
+ else begin p:=auto_xspacing_code; cur_chr:=(cur_chr mod 2); end;
+ define(p,data,cur_chr);
+end;
+
+@ Following codes are used in section 49.
+
+@<Show the current japanese processing mode@>=
+begin print_nl("> ");
+if auto_spacing>0 then print("auto spacing mode; ")
+ else print("no auto spacing mode; ");
+print_nl("> ");
+if auto_xspacing>0 then print("auto xspacing mode")
+ else print("no auto xspacing mode");
+goto common_ending;
+end
+
+@ The \.{\\inhibitglue} primitive control to insert a glue specified
+JFM (Japanese Font Metic) file. The \.{\\inhibitxspcode} is used to control
+inserting a space between 2byte-char and 1byte-char.
+
+@d inhibit_both=0 {disable to insert space before 2byte-char and after it}
+@d inhibit_previous=1 {disable to insert space before 2byte-char}
+@d inhibit_after=2 {disable to insert space after 2byte-char}
+@d inhibit_none=3 {enable to insert space before/after 2byte-char}
+@d inhibit_unused=4 {unused entry}
+@d no_entry=1000
+@d new_pos=0
+@d cur_pos=1
+
+@ @<Cases of |main_control| that don't...@>=
+ any_mode(inhibit_glue): inhibit_glue_flag:=(cur_chr=0);
+
+@ @<Put each...@>=
+primitive("inhibitglue",inhibit_glue,0);
+@!@:inhibit_glue_}{\.{\\inhibitglue} primitive@>
+primitive("disinhibitglue",inhibit_glue,1);
+@!@:dis_inhibit_glue_}{\.{\\disinhibitglue} primitive@>
+primitive("inhibitxspcode",assign_inhibit_xsp_code,inhibit_xsp_code_base);
+@!@:inhibit_xsp_code_}{\.{\\inhibitxspcode} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+inhibit_glue: if (chr_code>0) then print_esc("disinhibitglue")
+ else print_esc("inhibitglue");
+assign_inhibit_xsp_code: print_esc("inhibitxspcode");
+
+@ @<Declare procedures needed in |scan_something_internal|@>=
+function get_inhibit_pos(c:KANJI_code; n:small_number):pointer;
+label done, done1;
+var p,s:pointer;
+begin s:=calc_pos(c); p:=s;
+if n=new_pos then
+ begin repeat
+ if (inhibit_xsp_type(p)=inhibit_unused)or(inhibit_xsp_code(p)=0)
+ or(inhibit_xsp_code(p)=c) then goto done;
+ incr(p); if p>255 then p:=0;
+ until s=p; p:=no_entry;
+ end
+else
+ begin repeat
+ if inhibit_xsp_code(p)=0 then goto done1
+ else if (inhibit_xsp_type(p)<>inhibit_unused)and(inhibit_xsp_code(p)=c) then goto done;
+ incr(p); if p>255 then p:=0;
+ until s=p;
+done1: p:=no_entry;
+ end;
+done: get_inhibit_pos:=p;
+end;
+
+@ @<Assignments@>=
+assign_inhibit_xsp_code:
+begin p:=cur_chr; scan_int; n:=cur_val; scan_optional_equals; scan_int;
+if is_char_kanji(n) then
+ begin j:=get_inhibit_pos(tokanji(n),new_pos);
+ if (j<>no_entry)and(cur_val>inhibit_after) then
+ begin if global or(cur_level=level_one) then cur_val:=inhibit_unused
+ { remove the entry from inhibit table }
+ else cur_val:=inhibit_none; end
+ else if j=no_entry then
+ begin print_err("Inhibit table is full!!");
+ help1("I'm skipping this control sequences.");@/
+ error; return; end;
+ define(inhibit_xsp_code_base+j,cur_val,n);
+ end
+else
+ begin print_err("Invalid KANJI code ("); print_hex(n); print_char(")");
+@.Invalid KANJI code@>
+ help1("I'm skipping this control sequences.");@/
+ error; return;
+ end;
+end;
+
+@ @<Fetch inhibit type from some table@>=
+begin scan_int; q:=get_inhibit_pos(tokanji(cur_val),cur_pos);
+cur_val_level:=int_val; cur_val:=inhibit_none;
+if q<>no_entry then cur_val:=inhibit_xsp_type(q);
+end
+
+@ The \.{\\prebreakpenalty} is used to specified amount of penalties inserted
+before the 2byte-char which is first argument of this primitive.
+The \.{\\postbreakpenalty} is inserted after the 2byte-char.
+
+@d pre_break_penalty_code=1
+@d post_break_penalty_code=2
+@d kinsoku_unused_code=3
+
+@<Put each...@>=
+primitive("prebreakpenalty",assign_kinsoku,pre_break_penalty_code);
+@!@:pre_break_penalty_}{\.{\\prebreakpenalty} primitive@>
+primitive("postbreakpenalty",assign_kinsoku,post_break_penalty_code);
+@!@:post_break_penalty_}{\.{\\postbreakpenalty} primitive@>
+
+@ @<Cases of |print_cmd_chr|...@>=
+assign_kinsoku: case chr_code of
+ pre_break_penalty_code: print_esc("prebreakpenalty");
+ post_break_penalty_code: print_esc("postbreakpenalty");
+ endcases;
+
+@ @<Declare procedures needed in |scan_something_internal|@>=
+function get_kinsoku_pos(c:KANJI_code; n:small_number):pointer;
+label done, done1;
+var p,s:pointer;
+begin s:=calc_pos(c); p:=s;
+@!debug
+print_ln; print("c:="); print_int(c); print(", p:="); print_int(s);
+if p+kinsoku_base<0 then
+ begin print("p is negative value"); print_ln;
+ end;
+gubed
+if n=new_pos then
+ begin repeat
+ if (kinsoku_type(p)=0)or(kinsoku_type(p)=kinsoku_unused_code)
+ or(kinsoku_code(p)=c) then goto done;
+ incr(p); if p>255 then p:=0;
+ until s=p;
+ p:=no_entry;
+ end
+else
+ begin repeat
+ if kinsoku_type(p)=0 then goto done1
+ else if (kinsoku_type(p)<>kinsoku_unused_code)and(kinsoku_code(p)=c) then goto done;
+ incr(p); if p>255 then p:=0;
+ until s=p;
+done1: p:=no_entry;
+ end;
+done: get_kinsoku_pos:=p;
+end;
+
+@ @<Assignments@>=
+assign_kinsoku:
+begin p:=cur_chr; scan_int; n:=cur_val; scan_optional_equals; scan_int;
+if is_char_ascii(n) or is_char_kanji(n) then
+ begin j:=get_kinsoku_pos(tokanji(n),new_pos);
+ if (j<>no_entry)and(cur_val=0)and(global or(cur_level=level_one)) then
+ define(kinsoku_base+j,kinsoku_unused_code,0) { remove the entry from KINSOKU table }
+ else begin
+ if j=no_entry then begin
+ print_err("KINSOKU table is full!!");
+ help1("I'm skipping this control sequences.");@/
+ error; return; end;
+ if (p=pre_break_penalty_code)or(p=post_break_penalty_code) then
+ begin define(kinsoku_base+j,p,tokanji(n));
+ word_define(kinsoku_penalty_base+j,cur_val);
+ end
+ else confusion("kinsoku");
+@:this can't happen kinsoku}{\quad kinsoku@>
+ end
+ end
+else
+ begin print_err("Invalid KANJI code for ");
+ if p=pre_break_penalty_code then print("pre")
+ else if p=post_break_penalty_code then print("post")
+ else print_char("?");
+ print("breakpenalty ("); print_hex(n); print_char(")");
+@.Invalid KANJI code@>
+ help1("I'm skipping this control sequences.");@/
+ error; return;
+ end;
+end;
+
+@ @<Fetch breaking penalty from some table@>=
+begin scan_int; q:=get_kinsoku_pos(tokanji(cur_val),cur_pos);
+cur_val_level:=int_val; cur_val:=0;
+if (q<>no_entry)and(m=kinsoku_type(q)) then
+ scanned_result(kinsoku_penalty(q))(int_val);
+end
+
+@ Following codes are used in |main_control|.
+
+@<Insert kinsoku penalty@>=
+begin kp:=get_kinsoku_pos(cx,cur_pos);
+if kp<>no_entry then if kinsoku_penalty(kp)<>0 then
+ begin if kinsoku_type(kp)=pre_break_penalty_code then
+ begin if not is_char_node(cur_q)and(type(cur_q)=penalty_node) then
+ penalty(cur_q):=penalty(cur_q)+kinsoku_penalty(kp)
+ else
+ begin main_p:=link(cur_q); link(cur_q):=new_penalty(kinsoku_penalty(kp));
+ subtype(link(cur_q)):=kinsoku_pena; link(link(cur_q)):=main_p;
+ end;
+ end
+ else if kinsoku_type(kp)=post_break_penalty_code then
+ begin tail_append(new_penalty(kinsoku_penalty(kp)));
+ subtype(tail):=kinsoku_pena;
+ end;
+ end;
+end;
+
+@ @<Insert |pre_break_penalty| of |cur_chr|@>=
+begin kp:=get_kinsoku_pos(cur_chr,cur_pos);
+if kp<>no_entry then if kinsoku_penalty(kp)<>0 then
+ begin if kinsoku_type(kp)=pre_break_penalty_code then
+ if not is_char_node(tail)and(type(tail)=penalty_node) then
+ penalty(tail):=penalty(tail)+kinsoku_penalty(kp)
+ else
+ begin tail_append(new_penalty(kinsoku_penalty(kp)));
+ subtype(tail):=kinsoku_pena;
+ end;
+ end;
+end;
+
+@ @<Insert |post_break_penalty|@>=
+begin kp:=get_kinsoku_pos(cx,cur_pos);
+if kp<>no_entry then if kinsoku_penalty(kp)<>0 then
+ begin if kinsoku_type(kp)=post_break_penalty_code then
+ begin tail_append(new_penalty(kinsoku_penalty(kp)));
+ subtype(tail):=kinsoku_pena;
+ end;
+ end;
+end;
+
+@ This is a part of section 32.
+
+The procedure |synch_dir| is used in |hlist_out| and |vlist_out|.
+
+@d dvi_yoko=0
+@d dvi_tate=1
+@d dvi_dtou=3
+
+@<Glob...@>=
+@!dvi_dir:integer; {a \.{DVI} reader program thinks we direct to}
+@!cur_dir_hv:integer; {\TeX\ thinks we direct to}
+@!page_dir:eight_bits;
+
+@ @<Set init...@>=
+page_dir:=dir_yoko;
+
+@ @<Declare procedures needed in |hlist_out|, |vlist_out|@>=
+procedure synch_dir;
+var tmp:scaled; {temporary resister}
+begin
+ case cur_dir_hv of
+ dir_yoko:
+ if dvi_dir<>cur_dir_hv then begin
+ synch_h; synch_v; dvi_out(dirchg); dvi_out(dvi_yoko);
+ dir_used:=true;
+ case dvi_dir of
+ dir_tate: begin tmp:=cur_h; cur_h:=-cur_v; cur_v:=tmp end;
+ dir_dtou: begin tmp:=cur_h; cur_h:=cur_v; cur_v:=-tmp end;
+ endcases;
+ dvi_h:=cur_h; dvi_v:=cur_v; dvi_dir:=cur_dir_hv;
+ end;
+ dir_tate:
+ if dvi_dir<>cur_dir_hv then begin
+ synch_h; synch_v; dvi_out(dirchg); dvi_out(dvi_tate);
+ dir_used:=true;
+ case dvi_dir of
+ dir_yoko: begin tmp:=cur_h; cur_h:=cur_v; cur_v:=-tmp end;
+ dir_dtou: begin cur_v:=-cur_v; cur_h:=-cur_h; end;
+ endcases;
+ dvi_h:=cur_h; dvi_v:=cur_v; dvi_dir:=cur_dir_hv;
+ end;
+ dir_dtou:
+ if dvi_dir<>cur_dir_hv then begin
+ synch_h; synch_v; dvi_out(dirchg); dvi_out(dvi_dtou);
+ dir_used:=true;
+ case dvi_dir of
+ dir_yoko: begin tmp:=cur_h; cur_h:=-cur_v; cur_v:=tmp end;
+ dir_tate: begin cur_v:=-cur_v; cur_h:=-cur_h; end;
+ endcases;
+ dvi_h:=cur_h; dvi_v:=cur_v; dvi_dir:=cur_dir_hv;
+ end;
+ othercases
+ confusion("synch_dir");
+ endcases
+end;
+
+@ This function is called from |adjust_hlist| to check, whether
+a list which pointed |box_p| contains a printing character.
+If the list contains such a character, then return `true', otherwise `false'.
+If the first matter is a character, |first_char| is stored it.
+|last_char| is stored a last character. If no printing characters exist
+in the list, |first_char| and |last_char| is null.
+@^recursion@>
+
+Note that |first_char| and |last_char| may be |math_node|.
+
+@<Glob...@>=
+@!first_char:pointer; {first printable character}
+@!last_char:pointer; {last printable character}
+@!find_first_char:boolean; {find for a first printable character?}
+
+@ @<Declare procedures needed in |hlist_out|, |vlist_out|@>=
+function check_box(box_p:pointer):boolean;
+label done;
+var @!p:pointer; {run through the current box}
+@!flag:boolean; {found any printable character?}
+begin flag:=false; p:=box_p;
+while p<>null do
+ begin if is_char_node(p) then
+ repeat
+ if find_first_char then
+ begin first_char:=p; find_first_char:=false
+ end;
+ last_char:=p; flag:=true;
+ if font_dir[font(p)]<>dir_default then p:=link(p);
+ p:=link(p);
+ if p=null then goto done;
+ until not is_char_node(p);
+ case type(p) of
+ hlist_node:
+ begin flag:=true;
+ if shift_amount(p)=0 then
+ begin if check_box(list_ptr(p)) then flag:=true;
+ end
+ else if find_first_char then find_first_char:=false
+ else last_char:=null;
+ end;
+ ligature_node: if check_box(lig_ptr(p)) then flag:=true;
+ ins_node,disp_node,mark_node,adjust_node,whatsit_node,penalty_node:
+ do_nothing;
+ math_node:
+ if (subtype(p)=before)or(subtype(p)=after) then
+ begin if find_first_char then
+ begin find_first_char:=false; first_char:=p;
+ end;
+ last_char:=p; flag:=true;
+ end
+ else do_nothing; {\.{\\beginR} etc.}
+ kern_node:
+ if subtype(p)=acc_kern then
+ begin p:=link(p);
+ if is_char_node(p) then
+ if font_dir[font(p)]<>dir_default then p:=link(p);
+ p:=link(link(p));
+ if find_first_char then
+ begin find_first_char:=false; first_char:=p;
+ end;
+ last_char:=p; flag:=true;
+ if font_dir[font(p)]<>dir_default then p:=link(p);
+ end
+ else
+ begin flag:=true;
+ if find_first_char then find_first_char:=false
+ else last_char:=null;
+ end;
+ othercases begin flag:=true;
+ if find_first_char then find_first_char:=false
+ else last_char:=null;
+ end;
+ endcases;
+ p:=link(p);
+ end;
+done: check_box:=flag;
+end;
+
+@ Following procedure |adjust_hlist| inserts \.{\\xkanjiskip} between
+2byte-char and 1byte-char in hlist which pointed |p|.
+Note that the skip is inserted into a place where too difficult to decide
+whether inserting or not (i.e, before penalty, after penalty).
+
+If |pf| is true then insert |jchr_widow_penalty| that is penalty for
+creating a widow KANJI character line.
+
+@d no_skip=0
+@d after_schar=1 {denote after single byte character}
+@d after_wchar=2 {denote after double bytes character}
+
+@<Declare procedures needed in |hlist_out|, |vlist_out|@>=
+procedure adjust_hlist(p:pointer;pf:boolean);
+label exit;
+var q,s,t,u,v,x,z:pointer;
+ i,k:halfword;
+ a: pointer; { temporary pointer for accent }
+ insert_skip:no_skip..after_wchar;
+ cx:KANJI_code; {temporary register for KANJI character}
+ ax:ASCII_code; {temporary register for ASCII character}
+ do_ins:boolean; {for inserting |xkanji_skip| into previous (or after) KANJI}
+begin if link(p)=null then goto exit;
+if auto_spacing>0 then
+ begin delete_glue_ref(space_ptr(p)); space_ptr(p):=kanji_skip;
+ add_glue_ref(kanji_skip);
+ end;
+if auto_xspacing>0 then
+ begin delete_glue_ref(xspace_ptr(p)); xspace_ptr(p):=xkanji_skip;
+ add_glue_ref(xkanji_skip);
+ end;
+u:=space_ptr(p); add_glue_ref(u);
+s:=xspace_ptr(p); add_glue_ref(s);
+if not is_char_node(link(p)) then
+ if (type(link(p))=glue_node)and(subtype(link(p))=jfm_skip+1) then
+ begin v:=link(p); link(p):=link(v);
+ fast_delete_glue_ref(glue_ptr(v)); free_node(v,small_node_size);
+ end
+ else if (type(link(p))=penalty_node)and(subtype(link(p))=kinsoku_pena) then
+ begin v:=link(link(p));
+ if (not is_char_node(v)) and (type(v)=glue_node)and(subtype(v)=jfm_skip+1) then
+ begin link(link(p)):=link(v);
+ fast_delete_glue_ref(glue_ptr(v)); free_node(v,small_node_size);
+ end
+ end;
+
+i:=0; insert_skip:=no_skip; p:=link(p); v:=p; q:=p;
+while p<>null do
+ begin if is_char_node(p) then
+ begin repeat @<Insert a space around the character |p|@>;
+ q:=p; p:=link(p); incr(i);
+ if (i>5)and pf then
+ begin if is_char_node(v) then
+ if font_dir[font(v)]<>dir_default then v:=link(v);
+ v:=link(v);
+ end;
+ until not is_char_node(p);
+ end
+ else
+ begin case type(p) of
+ hlist_node: @<Insert hbox surround spacing@>;
+ ligature_node: @<Insert ligature surround spacing@>;
+ penalty_node,disp_node: @<Insert penalty or displace surround spacing@>;
+ kern_node: if subtype(p)=explicit then insert_skip:=no_skip
+ else if subtype(p)=acc_kern then begin
+ { When we insert \.{\\xkanjiskip}, we first ignore accent (and kerns) and
+ insert \.{\\xkanjiskip}, then we recover the accent. }
+ if q=p then begin t:=link(p);
+ { if p is beginning on the list, we have only to ignore nodes. }
+ if is_char_node(t) then
+ if font_dir[font(t)]<>dir_default then t:=link(t);
+ p:=link(link(t));
+ if font_dir[font(p)]<>dir_default then
+ begin p:=link(p); insert_skip:=after_wchar; end
+ else insert_skip:=after_schar;
+ end
+ else begin
+ a:=p; t:=link(p);
+ if is_char_node(t) then
+ if font_dir[font(t)]<>dir_default then t:=link(t);
+ t:=link(link(t)); link(q):=t; p:=t;
+ @<Insert a space around the character |p|@>; incr(i);
+ if (i>5)and pf then
+ begin if is_char_node(v) then
+ if font_dir[font(v)]<>dir_default then v:=link(v);
+ v:=link(v);
+ end;
+ if link(q)<>t then link(link(q)):=a else link(q):=a;
+ end;
+ end;
+ math_node: @<Insert math surround spacing@>;
+ mark_node,adjust_node,ins_node,whatsit_node:
+ {These nodes are vanished when typeset is done}
+ do_nothing;
+ othercases insert_skip:=no_skip;
+ endcases;
+ q:=p; p:=link(p);
+ end;
+ end;
+if not is_char_node(q)and(type(q)=glue_node)and(subtype(q)=jfm_skip+1) then
+ begin fast_delete_glue_ref(glue_ptr(q));
+ glue_ptr(q):=zero_glue; add_glue_ref(zero_glue);
+ end;
+delete_glue_ref(u); delete_glue_ref(s);
+if (v<>null)and pf and(i>5) then @<Make |jchr_widow_penalty| node@>;
+exit:
+end;
+
+@ @<Insert a space around the character |p|@>=
+if font_dir[font(p)]<>dir_default then
+ begin KANJI(cx):=info(link(p));
+ if insert_skip=after_schar then @<Insert ASCII-KANJI spacing@>;
+ p:=link(p); insert_skip:=after_wchar;
+ end
+else
+ begin ax:=qo(character(p));
+ if insert_skip=after_wchar then @<Insert KANJI-ASCII spacing@>;
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end
+
+@ @<Insert hbox surround spacing@>=
+begin find_first_char:=true; first_char:=null; last_char:=null;
+if shift_amount(p)=0 then
+ begin if check_box(list_ptr(p)) then
+ begin if first_char<>null then @<Insert a space before the |first_char|@>;
+ if last_char<>null then
+ begin @<Insert a space after the |last_char|@>;
+ end else insert_skip:=no_skip;
+ end else insert_skip:=no_skip;
+ end else insert_skip:=no_skip;
+end
+
+@ @<Insert a space before the |first_char|@>=
+if type(first_char)=math_node then
+ begin ax:=qo("0");
+ if insert_skip=after_wchar then @<Insert KANJI-ASCII spacing@>;
+ end
+else if font_dir[font(first_char)]<>dir_default then
+ begin KANJI(cx):=info(link(first_char));
+ if insert_skip=after_schar then @<Insert ASCII-KANJI spacing@>
+ else if insert_skip=after_wchar then @<Insert KANJI-KANJI spacing@>;
+ end
+else
+ begin ax:=qo(character(first_char));
+ if insert_skip=after_wchar then @<Insert KANJI-ASCII spacing@>;
+ end;
+
+@ @<Insert a space after the |last_char|@>=
+if type(last_char)=math_node then
+ begin ax:=qo("0");
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end
+else if font_dir[font(last_char)]<>dir_default then
+ begin insert_skip:=after_wchar; KANJI(cx):=info(link(last_char));
+ if is_char_node(link(p))and(font_dir[font(link(p))]<>dir_default) then
+ begin @<Append KANJI-KANJI spacing@>; p:=link(p);
+ end;
+ end
+else
+ begin ax:=qo(character(last_char));
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end;
+
+@ @<Insert math surround spacing@>=
+begin if (subtype(p)=before)and(insert_skip=after_wchar) then
+ begin ax:=qo("0"); @<Insert KANJI-ASCII spacing@>;
+ insert_skip:=no_skip;
+ end
+else if subtype(p)=after then
+ begin ax:=qo("0");
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end
+else insert_skip:=no_skip;
+end
+
+@ @<Insert ligature surround spacing@>=
+begin t:=lig_ptr(p);
+if is_char_node(t) then
+ begin ax:=qo(character(t));
+ if insert_skip=after_wchar then @<Insert KANJI-ASCII spacing@>;
+ while link(t)<>null do t:=link(t);
+ if is_char_node(t) then
+ begin ax:=qo(character(t));
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end;
+ end;
+end
+
+@ @<Insert penalty or displace surround spacing@>=
+begin if is_char_node(link(p)) then
+ begin q:=p; p:=link(p);
+ if font_dir[font(p)]<>dir_default then
+ begin KANJI(cx):=info(link(p));
+ if insert_skip=after_schar then @<Insert ASCII-KANJI spacing@>
+ else if insert_skip=after_wchar then @<Insert KANJI-KANJI spacing@>;
+ p:=link(p); insert_skip:=after_wchar;
+ end
+ else
+ begin ax:=qo(character(p));
+ if insert_skip=after_wchar then @<Insert KANJI-ASCII spacing@>;
+ if auto_xsp_code(ax)>=2 then
+ insert_skip:=after_schar else insert_skip:=no_skip;
+ end;
+ end
+end
+
+@ @<Insert ASCII-KANJI spacing@>=
+begin
+ begin x:=get_inhibit_pos(cx,cur_pos);
+ if x<>no_entry then
+ if (inhibit_xsp_type(x)=inhibit_both)or
+ (inhibit_xsp_type(x)=inhibit_previous) then
+ do_ins:=false else do_ins:=true
+ else do_ins:=true;
+ end;
+if do_ins then
+ begin z:=new_glue(s); subtype(z):=xkanji_skip_code+1;
+ link(z):=link(q); link(q):=z; q:=z;
+ end;
+end
+
+@ @<Insert KANJI-ASCII spacing@>=
+begin if (auto_xsp_code(ax) mod 2)=1 then
+ begin x:=get_inhibit_pos(cx,cur_pos);
+ if x<>no_entry then
+ if (inhibit_xsp_type(x)=inhibit_both)or
+ (inhibit_xsp_type(x)=inhibit_after) then
+ do_ins:=false else do_ins:=true
+ else do_ins:=true;
+ end
+else do_ins:=false;
+if do_ins then
+ begin z:=new_glue(s); subtype(z):=xkanji_skip_code+1;
+ link(z):=link(q); link(q):=z; q:=z;
+ end;
+end
+
+@ @<Insert KANJI-KANJI spacing@>=
+begin z:=new_glue(u); subtype(z):=kanji_skip_code+1;
+link(z):=link(q); link(q):=z; q:=z;
+end
+
+@ @<Append KANJI-KANJI spacing@>=
+begin z:=new_glue(u); subtype(z):=kanji_skip_code+1;
+link(z):=link(p); link(p):=z; p:=link(z); q:=z;
+end
+
+@ @<Make |jchr_widow_penalty| node@>=
+begin q:=v; p:=link(v);
+if is_char_node(v)and(font_dir[font(v)]<>dir_default) then
+ begin q:=p; p:=link(p);
+ end;
+t:=q; s:=null;
+@<Seek list and make |t| pointing widow penalty position@>;
+if s<>null then
+ begin s:=link(t);
+ if not is_char_node(s)and(type(s)=penalty_node) then
+ penalty(s):=penalty(s)+jchr_widow_penalty
+ else if jchr_widow_penalty<>0 then
+ begin s:=new_penalty(jchr_widow_penalty); subtype(s):=widow_pena;
+ link(s):=link(t); link(t):=s; t:=link(s);
+ while(not is_char_node(t)) do
+ begin if (type(t)=glue_node)or(type(t)=kern_node) then goto exit;
+ t:=link(t);
+ end;
+ z:=new_glue(u); subtype(z):=kanji_skip_code+1;
+ link(z):=link(s); link(s):=z;
+ end;
+ end;
+end;
+
+@ @<Seek list and make |t| pointing widow penalty position@>=
+while(p<>null) do
+begin if is_char_node(p) then
+ begin if font_dir[font(p)]<>dir_default then
+ begin KANJI(cx):=info(link(p)); i:=kcat_code(kcatcodekey(cx)); k:=0;
+ if (i=kanji)or(i=kana) then begin t:=q; s:=p; end;
+ p:=link(p); q:=p;
+ end
+ else begin k:=k+1;
+ if k>1 then begin q:=p; s:=null; end;
+ end;
+ end
+else begin case type(p) of
+ penalty_node,mark_node,adjust_node,whatsit_node,
+ glue_node,kern_node,math_node,disp_node:
+ do_nothing;
+ othercases begin q:=p; s:=null; end;
+ endcases;
+ end;
+p:=link(p);
+end
+
+@ @<Declare procedures needed in |hlist_out|, |vlist_out|@>=
+procedure dir_out;
+var @!this_box: pointer; {pointer to containing box}
+begin this_box:=temp_ptr;
+ temp_ptr:=list_ptr(this_box);
+ if (type(temp_ptr)<>hlist_node)and(type(temp_ptr)<>vlist_node) then
+ confusion("dir_out");
+ case abs(box_dir(this_box)) of
+ dir_yoko:
+ case abs(box_dir(temp_ptr)) of
+ dir_tate: {Tate in Yoko}
+ begin cur_v:=cur_v-height(this_box); cur_h:=cur_h+depth(temp_ptr) end;
+ dir_dtou: {DtoU in Yoko}
+ begin cur_v:=cur_v+depth(this_box); cur_h:=cur_h+height(temp_ptr) end;
+ endcases;
+ dir_tate:
+ case abs(box_dir(temp_ptr)) of
+ dir_yoko: {Yoko in Tate}
+ begin cur_v:=cur_v+depth(this_box); cur_h:=cur_h+height(temp_ptr) end;
+ dir_dtou: {DtoU in Tate}
+ begin
+ cur_v:=cur_v+depth(this_box)-height(temp_ptr);
+ cur_h:=cur_h+width(temp_ptr)
+ end;
+ endcases;
+ dir_dtou:
+ case abs(box_dir(temp_ptr)) of
+ dir_yoko: {Yoko in DtoU}
+ begin cur_v:=cur_v-height(this_box); cur_h:=cur_h+depth(temp_ptr) end;
+ dir_tate: {Tate in DtoU}
+ begin
+ cur_v:=cur_v+depth(this_box)-height(temp_ptr);
+ cur_h:=cur_h+width(temp_ptr)
+ end;
+ endcases;
+ endcases;
+ cur_dir_hv:=abs(box_dir(temp_ptr));
+ if type(temp_ptr)=vlist_node then vlist_out@+else hlist_out;
+end;
+
+@ These routines are used to output diagnostic which related direction.
+
+@ @<Basic printing procedures@>=
+procedure print_dir(@!dir:eight_bits); {prints |dir| data}
+begin if dir=dir_yoko then print_char("Y")
+else if dir=dir_tate then print_char("T")
+else if dir=dir_dtou then print_char("D")
+end;
+@#
+procedure print_direction(@!d:integer); {print the direction represented by d}
+begin case abs(d) of
+dir_yoko: print("yoko");
+dir_tate: print("tate");
+dir_dtou: print("dtou");
+end;
+if d<0 then print("(math)");
+print(" direction");
+end;
+
+@ The procedure |set_math_kchar| is same as |set_math_char| which is
+written in section 48.
+
+@<Declare act...@>=
+procedure set_math_kchar(@!c:integer);
+var p:pointer; {the new noad}
+begin p:=new_noad; math_type(nucleus(p)):=math_jchar;
+character(nucleus(p)):=qi(0);
+math_kcode(p):=c; fam(nucleus(p)):=cur_jfam;
+if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]=dir_default then
+ begin print_err("Not two-byte family");
+ help1("IGNORE.");@/
+ error;
+ end;
+type(p):=ord_noad;
+link(tail):=p; tail:=p;
+end;
+
+@ This section is a part of |main_control|.
+
+@<Append KANJI-character |cur_chr| ...@>=
+if is_char_node(tail) then
+ begin if not( (last_jchr<>null) and (link(last_jchr)=tail) ) then
+ begin cx:=qo(character(tail)); @<Insert |post_break_penalty|@>;
+ end;
+ end
+else if type(tail)=ligature_node then
+ begin cx:=qo(character(lig_char(tail))); @<Insert |post_break_penalty|@>;
+ end;
+if direction=dir_tate then
+ begin if font_dir[main_f]=dir_tate then disp:=0
+ else if font_dir[main_f]=dir_yoko then disp:=t_baseline_shift-y_baseline_shift
+ else disp:=t_baseline_shift;
+ main_f:=cur_tfont;
+ end
+else
+ begin if font_dir[main_f]=dir_yoko then disp:=0
+ else if font_dir[main_f]=dir_tate then disp:=y_baseline_shift-t_baseline_shift
+ else disp:=y_baseline_shift;
+ main_f:=cur_jfont;
+ end;
+@<Append |disp_node| at end of displace area@>;
+ins_kp:=false; ligature_present:=false;
+cur_l:=qi(get_jfm_pos(KANJI(cur_chr),main_f));
+main_i:=orig_char_info(main_f)(qi(0));
+goto main_loop_j+3;
+@#
+main_loop_j+1: space_factor:=1000;
+ if main_f<>null_font then
+ begin if not disp_called then
+ begin prev_node:=tail; tail_append(get_node(small_node_size));
+ type(tail):=disp_node; disp_dimen(tail):=0; disp_called:=true
+ end;
+ fast_get_avail(main_p); font(main_p):=main_f; character(main_p):=cur_l;
+ link(tail):=main_p; tail:=main_p; last_jchr:=tail;
+ fast_get_avail(main_p); info(main_p):=KANJI(cur_chr);
+ link(tail):=main_p; tail:=main_p;
+ cx:=cur_chr; @<Insert kinsoku penalty@>;
+ end;
+ ins_kp:=false;
+again_2:
+ get_next;
+ main_i:=orig_char_info(main_f)(cur_l);
+ case cur_cmd of
+ kanji,kana,other_kchar: begin
+ cur_l:=qi(get_jfm_pos(KANJI(cur_chr),main_f)); goto main_loop_j+3;
+ end;
+ letter,other_char: begin ins_kp:=true; cur_l:=qi(0); goto main_loop_j+3;
+ end;
+ endcases;
+ x_token;
+ case cur_cmd of
+ kanji,kana,other_kchar: cur_l:=qi(get_jfm_pos(KANJI(cur_chr),main_f));
+ letter,other_char: begin ins_kp:=true; cur_l:=qi(0); end;
+ char_given: begin
+ if is_char_ascii(cur_chr) then
+ begin ins_kp:=true; cur_l:=qi(0);
+ end
+ else cur_l:=qi(get_jfm_pos(KANJI(cur_chr),main_f));
+ end;
+ char_num: begin scan_char_num; cur_chr:=cur_val;
+ if is_char_ascii(cur_chr) then
+ begin ins_kp:=true; cur_l:=qi(0);
+ end
+ else cur_l:=qi(get_jfm_pos(KANJI(cur_chr),main_f));
+ end;
+ inhibit_glue: begin inhibit_glue_flag:=(cur_chr=0); goto again_2; end;
+ othercases begin ins_kp:=max_halfword;
+ cur_l:=qi(-1); cur_r:=non_char; lig_stack:=null;
+ end;
+ endcases;
+@#
+main_loop_j+3:
+ if ins_kp=true then @<Insert |pre_break_penalty| of |cur_chr|@>;
+ if main_f<>null_font then
+ begin @<Look ahead for glue or kerning@>;
+ end
+ else inhibit_glue_flag:=false;
+ if ins_kp=false then begin { Kanji -> Kanji }
+ goto main_loop_j+1;
+ end else if ins_kp=true then begin { Kanji -> Ascii }
+ {@@<Append |disp_node| at begin of displace area@@>;}
+ ins_kp:=false; goto main_loop;
+ end else begin { Kanji -> cs }
+ {@@<Append |disp_node| at begin of displace area@@>;}
+ goto reswitch;
+ end;
+
+@ @<Append |disp_node| at begin ...@>=
+begin if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin if prev_disp=disp then
+ begin free_node(tail,small_node_size); tail:=prev_node; link(tail):=null;
+ end
+ else disp_dimen(tail):=disp;
+ end
+else
+ if disp<>0 or not disp_called then
+ begin prev_node:=tail; tail_append(get_node(small_node_size));
+ type(tail):=disp_node; disp_dimen(tail):=disp; prev_disp:=disp;
+ disp_called:=true
+ end;
+end;
+
+@ @<Append |disp_node| at end ...@>=
+if disp<>0 then
+begin if not is_char_node(tail)and(type(tail)=disp_node) then
+ begin disp_dimen(tail):=0;
+ end
+else
+ begin prev_node:=tail; tail_append(get_node(small_node_size));
+ type(tail):=disp_node; disp_dimen(tail):=0; prev_disp:=disp;
+ disp_called:=true
+ end;
+end;
+
+@ @<Look ahead for glue or kerning@>=
+cur_q:=tail;
+if inhibit_glue_flag<>true then
+ begin { print("IF");print_int(cur_l); }
+ if cur_l<qi(0) then cur_l:=qi(0) else inhibit_glue_flag:=false;
+ if (tail=link(head))and(not is_char_node(tail))and(type(tail)=disp_node) then
+ goto skip_loop
+ else begin if char_tag(main_i)=gk_tag then
+ begin main_k:=glue_kern_start(main_f)(main_i);
+ main_j:=font_info[main_k].qqqq;
+ if skip_byte(main_j)>stop_flag then {huge glue/kern table rearranged}
+ begin main_k:=glue_kern_restart(main_f)(main_j);
+ main_j:=font_info[main_k].qqqq;
+ end;
+ loop@+begin if next_char(main_j)=cur_l then if skip_byte(main_j)<=stop_flag then
+ begin if op_byte(main_j)<kern_flag then
+ begin gp:=font_glue[main_f]; cur_r:=rem_byte(main_j);
+ if gp<>null then
+ begin while((type(gp)<>cur_r)and(link(gp)<>null)) do gp:=link(gp);
+ gq:=glue_ptr(gp);
+ end
+ else
+ begin gp:=get_node(small_node_size); font_glue[main_f]:=gp;
+ gq:=null;
+ end;
+ if gq=null then
+ begin type(gp):=cur_r; gq:=new_spec(zero_glue);
+ glue_ptr(gp):=gq;
+ main_k:=exten_base[main_f]+qi((qo(cur_r))*3);
+ width(gq):=font_info[main_k].sc;
+ stretch(gq):=font_info[main_k+1].sc;
+ shrink(gq):=font_info[main_k+2].sc;
+ add_glue_ref(gq); link(gp):=get_node(small_node_size);
+ gp:=link(gp); glue_ptr(gp):=null; link(gp):=null;
+ end;
+ tail_append(new_glue(gq)); subtype(tail):=jfm_skip+1;
+ goto skip_loop;
+ end
+ else begin
+ tail_append(new_kern(char_kern(main_f)(main_j)));
+ goto skip_loop;
+ end;
+ end;
+ if skip_byte(main_j)>=stop_flag then goto skip_loop;
+ main_k:=main_k+qo(skip_byte(main_j))+1; {SKIP property}
+ main_j:=font_info[main_k].qqqq;
+ end;
+ end;
+ end;
+end
+else
+ begin { print("IT");print_int(cur_l); }
+ if cur_l<qi(0) then cur_l:=qi(0) else inhibit_glue_flag:=false;
+ end;
+skip_loop: do_nothing;
+
+@ @<Basic printing...@>=
+procedure print_kanji(@!s:KANJI_code); {prints a single character}
+begin
+if s>255 then
+ begin print_char(Hi(s)); print_char(Lo(s));
+ end else print_char(s);
+end;
+
+@ This procedure changes the direction of the page, if |page_contents|
+is |empty| and ``recent contributions'' does not contain any boxes,
+rules nor insertions.
+
+@<Declare act...@>=
+procedure change_page_direction(@!d: halfword);
+label done;
+var p: pointer; flag:boolean;
+begin flag:=(page_contents=empty);
+if flag and (head<>tail) then begin
+ p:=link(head);
+ while p<>null do
+ case type(p) of
+ hlist_node,vlist_node,dir_node,rule_node,ins_node:
+ begin flag:=false; goto done; end;
+ { |glue_node|, |kern_node|, |penalty_node| are discarded }
+ othercases p:=link(p);
+ endcases;
+ done: do_nothing;
+end;
+if flag then begin direction:=d; page_dir:=d; end
+else begin
+ print_err("Use `"); print_cmd_chr(cur_cmd,d);
+ print("' at top of the page");
+ help3("You can change the direction of the page only when")
+ ("the current page and recent contributions consist of only")
+ ("marks and whatsits."); error;
+ end;
+end;
+
+@* \[56] System-dependent changes.
+@z
diff --git a/Build/source/texk/web2c/ptexdir/ptex.defines b/Build/source/texk/web2c/ptexdir/ptex.defines
new file mode 100644
index 00000000000..8dd0d77429e
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptex.defines
@@ -0,0 +1,34 @@
+{ defined at kanji.c, kanji.h, ptexenc/ptexenc.h }
+@define function Hi ();
+@define function Lo ();
+
+@define function getencstring;
+@define function setencstring ();
+
+@define function iskanji1 ();
+@define function multistrlen ();
+@define function fromBUFF ();
+@define function toBUFF ();
+
+@define function fromDVI ();
+@define function toDVI ();
+@define function putc2 ();
+@define function fputs2 ();
+@define function inputline2 ();
+
+@define function fromJIS ();
+@define function fromEUC ();
+@define function fromSJIS ();
+@define function fromKUTEN ();
+
+@define function notkanjicharseq ();
+@define function checkkanji ();
+@define function ischarascii ();
+@define function ischarkanji ();
+@define function ismultiprn ();
+@define function calcpos ();
+@define function kcatcodekey ();
+
+@define procedure dumpkanji ();
+@define procedure initkanji;
+@define procedure undumpkanji ();
diff --git a/Build/source/texk/web2c/ptexdir/ptex_version.h b/Build/source/texk/web2c/ptexdir/ptex_version.h
new file mode 100644
index 00000000000..168afe7517d
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptex_version.h
@@ -0,0 +1 @@
+#define PTEX_VERSION "p3.9.0"
diff --git a/Build/source/texk/web2c/ptexdir/ptexextra.c b/Build/source/texk/web2c/ptexdir/ptexextra.c
new file mode 100644
index 00000000000..0dcec62e7d1
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptexextra.c
@@ -0,0 +1,12 @@
+/* ptexextra.c: Hand-coded routines for pTeX.
+
+ This file is public domain. */
+
+#define EXTERN /* Instantiate data from ptexd.h here. */
+#define DLLPROC dllptexmain
+
+/* This file defines TeX and pTeX. */
+#include <ptexd.h>
+
+/* Hand-coded routines for TeX or Metafont in C. */
+#include <lib/texmfmp.c>
diff --git a/Build/source/texk/web2c/ptexdir/ptexextra.h b/Build/source/texk/web2c/ptexdir/ptexextra.h
new file mode 100644
index 00000000000..9dd5be78e24
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptexextra.h
@@ -0,0 +1,24 @@
+/* ptexextra.h: banner etc. for pTeX.
+
+ This is included by pTeX, from ptexextra.c
+*/
+
+#include <ptexdir/ptex_version.h> /* for PTEX_VERSION */
+
+#define BANNER "This is pTeX, Version 3.141592653-" PTEX_VERSION
+#define COPYRIGHT_HOLDER "D.E. Knuth"
+#define AUTHOR NULL
+#define PROGRAM_HELP PTEXHELP
+#define BUG_ADDRESS "issue@texjp.org"
+#define DUMP_VAR TEXformatdefault
+#define DUMP_LENGTH_VAR formatdefaultlength
+#define DUMP_OPTION "fmt"
+#define DUMP_EXT ".fmt"
+#define INPUT_FORMAT kpse_tex_format
+#define INI_PROGRAM "iniptex"
+#define VIR_PROGRAM "virptex"
+
+#ifdef Xchr
+#undef Xchr
+#define Xchr(x) (x)
+#endif /* Xchr */
diff --git a/Build/source/texk/web2c/ptexdir/ptftopl.ch b/Build/source/texk/web2c/ptexdir/ptftopl.ch
new file mode 100644
index 00000000000..d8d1a9789d5
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptftopl.ch
@@ -0,0 +1,538 @@
+% This is a change file for TFtoPL
+%
+% (2018-01-27) HY pTFtoPL p2.0 - new JFM spec by texjporg
+% (07/18/2006) ST TFtoPL p1.7 (3.1, Web2c 7.2)
+% (03/27/1998) KN TFtoPL p1.4 (3.1, Web2c 7.2)
+%
+@x [0] l.45 - pTeX:
+\def\title{TF\lowercase{to}PL changes for C}
+@y
+\def\title{TF\lowercase{to}PL changes for C, and for KANJI}
+@z
+
+@x [2] l.64 - pTeX:
+@d my_name=='tftopl'
+@d banner=='This is TFtoPL, Version 3.3' {printed when the program starts}
+@y
+@d my_name=='ptftopl'
+@d banner=='This is pTFtoPL, Version 3.3-p2.0'
+ {printed when the program starts}
+@z
+
+@x [2] l.91 - pTeX:
+procedure initialize; {this procedure gets things started properly}
+@y
+procedure initialize; {this procedure gets things started properly}
+var @!k:integer; {all-purpose initiallization index}
+@z
+
+@x [2] l.97 - pTeX:
+ tfm_file_array := xmalloc_array (byte, 1002);
+@y
+ tfm_file_array := xmalloc_array (byte, 1002 + 4);
+@z
+
+@x
+ parse_arguments;
+@y
+ init_kanji;
+ parse_arguments;
+@z
+
+@x [7] l.149 - pTeX:
+ print_ln (version_string);
+@y
+ print_ln (version_string);
+ print_ln ('process kanji code is ', conststringcast(get_enc_string), '.');
+@z
+
+@x [18.20] l.438 - pTeX:
+@d index == index_type
+@y
+@d index == index_type
+@d yoko_id_byte = 11 {id byte for YOKO-kumi kanji tfm files}
+@d tate_id_byte = 9 {id byte for TATE-kumi kanji tfm files}
+@d tfm_format = 1 {normal tfm formated metric files}
+@d jfm_format = 2 {jfm formated metric files for YOKO-kumi kanji}
+@d vfm_format = 3 {vfm formated metric files for TATE-kumi kanji}
+@z
+
+@x [18.20] l.448 - pTeX:
+@!tfm_file_array: ^byte; {the input data all goes here}
+@y
+@!tfm_file_array: ^byte; {the input data all goes here}
+@!file_format:tfm_format..vfm_format; {format of tfm file}
+@!nt:0..@'77777; {number of words in the character type table}
+@!ng:0..@'77777; {number of words in the glue table}
+@z
+
+@x [20] l.434 - pTeX: Read JFM header
+read(tfm_file,tfm[1]); lf:=tfm[0]*@'400+tfm[1];
+@y
+read(tfm_file,tfm[1]); lf:=tfm[0]*@'400+tfm[1];
+if lf=yoko_id_byte then
+ begin file_format:=jfm_format;
+ print_ln('Input file is in YOKO-kumi kanji tfm format.');
+ write_ln(pl_file,'(COMMENT THIS IS A KANJI FORMAT FILE)');
+ end
+else if lf=tate_id_byte then
+ begin file_format:=vfm_format;
+ print_ln('Input file is in TATE-kumi kanji tfm format.');
+ write_ln(pl_file,'(COMMENT THIS IS A KANJI FORMAT FILE)');
+ write_ln(pl_file,'(DIRECTION TATE)');
+ end
+else file_format:=tfm_format;
+if file_format=tfm_format then
+ begin nt:=0; tmp_ptr:=2;
+ end
+else
+ begin if eof(tfm_file) then abort('The input file is only two bytes long!');
+ read(tfm_file,tfm[2]);
+ if eof(tfm_file) then abort('The input file is only three bytes long!');
+ read(tfm_file,tfm[3]); nt:=tfm[2]*@'400+tfm[3];
+ if eof(tfm_file) then abort('The input file is only four bytes long!');
+ read(tfm_file,tfm[4]);
+ if eof(tfm_file) then abort('The input file is only five bytes long!');
+ if tfm[4]>127 then abort('The fifth byte of the input file exceeds 127!');
+ read(tfm_file,tfm[5]); lf:=tfm[4]*@'400+tfm[5];
+ tmp_ptr:=6;
+ end;
+@z
+
+@x [20] l.445 - pTeX: put the rest of the file into tfm[6] and after
+for tfm_ptr:=2 to 4*lf-1 do
+@y
+for tfm_ptr:=tmp_ptr to 4*lf-1 do
+@z
+
+@x [21] l.468 - pTeX: the location of subfile sizes is different
+begin tfm_ptr:=2;@/
+@y
+begin
+if file_format<>tfm_format then
+ begin tfm_ptr:=6; check_sum_value:=28;
+ end
+else
+ begin tfm_ptr:=2; check_sum_value:=24;
+ end;
+@z
+
+@x [21] l.485 - pTeX: ng has to be treated specially
+if (bc>ec+1)or(ec>255) then abort('The character code range ',
+@.The character code range...@>
+ bc:1,'..',ec:1,' is illegal!');
+if (nw=0)or(nh=0)or(nd=0)or(ni=0) then
+ abort('Incomplete subfiles for character dimensions!');
+@.Incomplete subfiles...@>
+if ne>256 then abort('There are ',ne:1,' extensible recipes!');
+@.There are ... recipes@>
+if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then
+ abort('Subfile sizes don''t add up to the stated total!');
+@.Subfile sizes don't add up...@>
+@y
+case file_format of
+tfm_format: begin
+ if (bc>ec+1)or(ec>255) then abort('The character code range ',
+@.The character code range...@>
+ bc:1,'..',ec:1,' is illegal!');
+ if (nw=0)or(nh=0)or(nd=0)or(ni=0) then
+ abort('Incomplete subfiles for character dimensions!');
+@.Incomplete subfiles...@>
+ if ne>256 then abort('There are ',ne:1,' extensible recipes!');
+@.There are ... recipes@>
+ if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then
+ abort('Subfile sizes don''t add up to the stated total!');
+@.Subfile sizes don't add up...@>
+ end;
+jfm_format,vfm_format: begin ng:=ne;
+ if (bc>ec+1)or(ec>255)or(bc<>0) then abort('The character code range ',
+@.The character code range...@>
+ bc:1,'..',ec:1,' is illegal!');
+ if (nw=0)or(nh=0)or(nd=0)or(ni=0) then
+ abort('Incomplete subfiles for character dimensions!');
+@.Incomplete subfiles...@>
+ if lf<>7+nt+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ng+np then
+ abort('Sum of subfile sizes (',
+ 7+nt+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ng+np:1,
+ ') is not equal to the stated total ', lf:1);
+@.Subfile sizes don't add up...@>
+ end;
+end;
+@z
+
+@x [23] l.506 - pTeX: declare type_base.
+@!char_base,@!width_base,@!height_base,@!depth_base,@!italic_base,
+@!lig_kern_base,@!kern_base,@!exten_base,@!param_base:integer;
+ {base addresses for the subfiles}
+@y
+@!char_base,@!width_base,@!height_base,@!depth_base,@!italic_base,
+@!lig_kern_base,@!kern_base,@!exten_base,@!param_base:integer;
+@!type_base,@!glue_base:integer; {base addresses for the subfiles}
+@!check_sum_value:integer; {either 24 (normal case) or 28 (kanji case)}
+@z
+
+@x [24] l.510 - pTeX: define type_base
+@ @<Compute the base addresses@>=
+begin char_base:=6+lh-bc;
+@y
+@ @<Compute the base addresses@>=
+begin
+if file_format<>tfm_format then
+ begin type_base:=7+lh;
+ char_base:=type_base+nt-bc; { bc should be zero ...}
+ end
+else char_base:=6+lh-bc;
+@z
+
+@x [24] l.517 - pTeX: define glue_base
+kern_base:=lig_kern_base+nl;
+exten_base:=kern_base+nk;
+param_base:=exten_base+ne-1;
+@y
+kern_base:=lig_kern_base+nl;
+exten_base:=kern_base+nk;
+glue_base:=exten_base;
+param_base:=exten_base+ne-1;
+@z
+
+@x [25] l.529 - pTeX: must change check_sum from macro (=24) to variable
+@d check_sum=24
+@d design_size=check_sum+4
+@d scheme=design_size+4
+@d family=scheme+40
+@d random_word=family+20
+@y
+@d check_sum==check_sum_value
+@d design_size==check_sum+4
+@d scheme==design_size+4
+@d family==scheme+40
+@d random_word==family+20
+@z
+
+@x [25] l.549 - pTeX: add definition of glue macro
+@d kern(#)==4*(kern_base+#) {here \#\ is an index, not a character}
+@y
+@d kern(#)==4*(kern_base+#) {here \#\ is an index, not a character}
+@d glue(#)==4*(glue_base+#) {likewise}
+@z
+
+@x [57] l.982 - pTeX: SEVENBITSAFEFLAG
+if (lh>17) and (tfm[random_word]>127) then
+@y
+if (lh>17) and (tfm[random_word]>127) and (file_format=tfm_format) then
+@z
+
+@x [63] l.1003 - pTeX: Name of parameter for kanji-font
+else if (i<=13)and(font_type=mathex) then
+ if i=8 then out('DEFAULTRULETHICKNESS')
+ else out('BIGOPSPACING',i-8:1)
+else out('PARAMETER D ',i:1)
+@y
+else if (i<=13)and(font_type=mathex) then
+ if i=8 then out('DEFAULTRULETHICKNESS')
+ else out('BIGOPSPACING',i-8:1)
+else if (i<=9)and(file_format<>tfm_format) then
+ if i=8 then out('EXTRASTRETCH')
+ else out('EXTRASHRINK')
+else out('PARAMETER D ',i:1)
+@z
+
+@x [64] l.1027 - pTeX: Add printing of newline at end of program
+if nk>0 then for i:=0 to nk-1 do check_fix(kern(i))('Kern');
+@.Kern n is too big@>
+@y
+if nk>0 then for i:=0 to nk-1 do check_fix(kern(i))('Kern');
+@.Kern n is too big@>
+if file_format<>tfm_format then
+ begin if ng>0 then for i:=0 to ng-1 do check_fix(glue(i))('Glue');
+@.Glue n is too big@>
+ end;
+@z
+
+@x [68] l.1068 - pTeX: we print GLUEKERN instead of LIGTABLE
+ begin left; out('LIGTABLE'); out_ln;@/
+@y
+ begin left;
+ if file_format<>tfm_format then out('GLUEKERN') else out('LIGTABLE');
+ out_ln;@/
+@z
+
+@x [69] l.1090 - pTeX: we print Glue/kern instead of Ligature/kern
+ print('Ligature/kern starting index for character '); print_octal(c);
+ print_ln(' is too large;'); print_ln('so I removed it.'); reset_tag(c);
+@.Ligature/kern starting index...@>
+@y
+ case file_format of
+ tfm_format: print('Ligature/kern ');
+@.Ligature/kern starting index...@>
+ jfm_format,vfm_format: print('Glue/kern ');
+@.Glue/kern starting index...@>
+ end;
+ print('starting index for character '); print_octal(c);
+ print_ln(' is too large;'); print_ln('so I removed it.'); reset_tag(c);
+@z
+
+@x [76] l.1179 - pTeX: if kanji format, output a glue step not a ligature step
+else @<Output a ligature step@>;
+@y
+else if file_format<>tfm_format then @<Output a glue step@>
+else @<Output a ligature step@>;
+@z
+
+@x [78] l.1238 - pTeX:
+for c:=bc to ec do if width_index(c)>0 then
+@y
+for c:=bc to ec do
+if width_index(c)=0 then
+ begin if file_format<>tfm_format then
+ bad('width index of type ',c:1,' is zero!!')
+ end
+else if width_index(c)>0 then
+@z
+
+@x [78] l.1246 - pTeX: the 'character' table is really the 'type' table
+ left; out('CHARACTER'); out_char(c); out_ln;
+@y
+ left;
+ if file_format<>tfm_format then
+ begin out('TYPE'); tfm[0]:=c; out_octal(0,1);
+ end
+ else
+ begin out('CHARACTER'); out_char(c);
+ end;
+ out_ln;
+@z
+
+@x [78] l.1251 - pTeX: types can only have tags equal to 0 or 1
+ case tag(c) of
+ no_tag: do_nothing;
+ lig_tag: @<Output the applicable part of the ligature/kern
+ program as a comment@>;
+ list_tag: @<Output the character link unless there is a problem@>;
+ ext_tag: @<Output an extensible character recipe@>;
+ end; {there are no other cases}
+ right;
+ end
+@y
+ case tag(c) of
+ no_tag: do_nothing;
+ lig_tag: @<Output the applicable part of the ligature/kern
+ program as a comment@>;
+ list_tag: if file_format<>tfm_format then
+ bad('the tag of type ',c:1,' must be 0 or 1')
+ else @<Output the character link unless there is a problem@>;
+ ext_tag: if file_format<>tfm_format then
+ bad('the tag of type ',c:1,' must be 0 or 1')
+ else @<Output an extensible character recipe@>;
+ end; {there are no other cases}
+ right;
+ end
+@z
+
+@x [96] l.1539 - pTeX:
+var tfm_ptr:index; {an index into |tfm|}
+@y
+var tfm_ptr,tmp_ptr:index; {an index into |tfm|}
+@z
+
+@x [98] l.1566 - pTeX: declare kanji conversion subroutines and externals
+@p begin initialize;@/
+@y
+@p
+@<declare kanji conversion functions@>;
+begin initialize;@/
+@z
+
+@x [99] l.1570 - pTeX: don't check extensible recipes and list the char_type table
+@<Check the extensible recipes@>;
+@y
+if file_format<>tfm_format then
+ begin @<list |char_type| table@>;
+ end
+else
+ begin @<Check the extensible recipes@>;
+ end;
+@z
+
+@x
+const n_options = 4; {Pascal won't count array lengths for us.}
+@y
+const n_options = 6; {Pascal won't count array lengths for us.}
+@z
+
+@x
+ usage_help (TFTOPL_HELP, nil);
+@y
+ usage_help (PTFTOPL_HELP, 'issue@@texjp.org');
+@z
+
+@x
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@y
+ end else if argument_is ('kanji') then begin
+ if (not set_enc_string(optarg,optarg)) then
+ print_ln('Bad kanji encoding "', stringcast(optarg), '".');
+
+ end; {Else it was a flag; |getopt| has already done the assignment.}
+@z
+
+@x
+@ An element with all zeros always ends the list.
+@y
+@ Kanji option.
+@.-kanji@>
+
+@<Define the option...@> =
+long_options[current_option].name := 'kanji';
+long_options[current_option].has_arg := 1;
+long_options[current_option].flag := 0;
+long_options[current_option].val := 0;
+incr(current_option);
+
+@ An element with all zeros always ends the list.
+@z
+
+@x [99] l.1751 - pTeX:
+@* Index.
+@y
+@* For Japanese Font Metric routines. % pTeX:
+We need to include some routines for handling kanji character.
+
+@d max_kanji=7237 {number of the kanji characters - 1}
+
+@<Glob...@>=
+@!this_code:integer; {to hold jis code of the current kanji character}
+@!this_type:integer; {to hold |char_type| of the current kanji character}
+@!type_index:integer; {index into |char_type| table}
+@!type_num:integer; {index into |char_info| table}
+@!type_count:integer; {number of chars with the same type}
+@!kanji_index:integer; {index into |kanji_type| array}
+@!kanji_type:array[0..max_kanji] of -1..255; {kanji type index}
+
+@ @<Output a glue step@>=
+begin if nonexistent(tfm[k+1]) then
+ correct_bad_char('Glue step for')(k+1)
+@.Glue step for nonexistent...@>
+else
+ begin left; out('GLUE'); out_char(tfm[k+1]);
+ if 3*tfm[k+3]>=ng then
+ begin bad('Glue index too large.');
+@.Glue index too large@>
+ out(' R 0.0 R 0.0 R 0.0');
+ end
+ else begin out_fix(glue(3*tfm[k+3]));
+ out_fix(glue(3*tfm[k+3]+1));
+ out_fix(glue(3*tfm[k+3]+2));
+ end;
+ right;
+ end;
+end
+
+@ list the |char_type| table in a similar way to the type table.
+The code is based on the new JFM spec by texjporg.
+
+@d char_type(#)==4*(type_base+#) {here \#\ is an index, not a character}
+@d JIS_code(#)==tfm[char_type(#)+0]*@'400+tfm[char_type(#)+1]+tfm[char_type(#)+2]*@'400*@'400 {JIS code from |char_type| table}
+@d JIS_type(#)==tfm[char_type(#)+3] {JIS type from |char_type| table}
+
+@<list |char_type| table@>=
+this_code:=JIS_code(0);
+this_type:=JIS_type(0);
+if (this_code<>0)or(this_type<>0) then
+ begin bad('the first entry in char_type is not zero. I''ll zero it.');
+ print_ln('JIS code is ', this_code:1, '. Type is ', this_type:1, '.');
+ end;
+for kanji_index:=0 to max_kanji do kanji_type[kanji_index]:=-1;
+for type_index:=1 to nt-1 do
+ begin this_code:=JIS_code(type_index);
+ this_type:=JIS_type(type_index);
+ if not valid_jis_code(this_code) then
+ bad('jis code ', this_code:1,
+ ' in char_type table entry ', type_index:1,
+ ' is not valid. Ignoring it.')
+ else if (this_type <= 0) or (this_type > ec) then
+ bad('type ', this_type:1, ' of jis code ', this_code:1,
+ ' in char_type table is not valid. Ignoring character.')
+ else
+ kanji_type[jis_to_index(this_code)] := this_type;
+ end;
+@#
+for type_num:=1 to ec do
+ begin left; out('CHARSINTYPE');
+ tfm[0]:=type_num; out_octal(0,1);
+ type_count:=0;
+ for kanji_index:=0 to max_kanji do
+ if kanji_type[kanji_index]=type_num then
+ begin if (type_count mod 10)=0 then out_ln else out(' ');
+ incr(type_count);
+ out_kanji(index_to_jis(kanji_index));
+ end;
+ if type_count=0 then bad('type ', type_num:1, ' has no characters in it!');
+ out_ln; right;
+ end;
+
+@ Some subroutines to handle kanji codes and i/o
+
+@<Globals...@>=
+@!xchr:array[char] of byte; {specifiles conversion of output charcter}
+
+@ @<Set init...@>=
+for k:=@'0 to @'37 do xchr[k]:='?';
+for k:=@'40 to 255 do xchr[k]:=k;
+
+@ @<declare kanji conversion functions@>=
+procedure out_kanji(jis_code:integer); { prints a kanji character }
+var @!cx:integer; {KANJI code}
+i:0..3; {index of array}
+begin@/
+if (charcode_format=charcode_octal)or(jis_code<128) then
+ begin cx:=jis_code; out('J '); {specify jiscode format}
+ dig[0]:=Hi(cx) div 16; dig[1]:=Hi(cx) mod 16;
+ dig[2]:=Lo(cx) div 16; dig[3]:=Lo(cx) mod 16;
+ for i:=0 to 3 do
+ if dig[i]<10 then out(dig[i]) else
+ case dig[i] of
+ 10: out('A'); 11: out('B'); 12: out('C');
+ 13: out('D'); 14: out('E'); 15: out('F');
+ end;
+ end
+else begin
+ cx:=toBUFF(fromDVI(jis_code));
+ out(xchr[Hi(cx)]); out(xchr[Lo(cx)]);
+ end;
+end;
+
+@ @<declare kanji conversion functions@>=
+function valid_jis_code(cx:integer):boolean;
+var first_byte, second_byte:integer; { jis code bytes }
+begin valid_jis_code:=true;
+first_byte:=cx div @'400; second_byte:=cx mod @'400;
+if (first_byte<@"21)
+ or((first_byte>@"28)and(first_byte<@"30))
+ or(first_byte>@"74) then valid_jis_code:=false;
+if (second_byte<@"21)or(second_byte>@"7E) then valid_jis_code:=false;
+end;
+
+@ @<declare kanji conversion functions@>=
+function index_to_jis(ix:integer):integer;
+begin
+if ix<=8*94-1 then
+ index_to_jis:=(ix div 94 + @"21) * @'400 + (ix mod 94 + @"21)
+else
+ index_to_jis:=((ix+7 * 94) div 94 + @"21) * @'400 + ((ix+7*94) mod 94 + @"21);
+end;
+
+@ @<declare kanji conversion functions@>=
+function jis_to_index(cx:integer):integer;
+var first_byte,second_byte:integer; { jis code bytes }
+begin
+first_byte:=cx div @'400 - @"21;
+second_byte:=cx mod @'400 - @"21;
+if first_byte<8 then
+ jis_to_index:=first_byte*94+second_byte
+else
+ jis_to_index:=(first_byte-7)*94+second_byte;
+end
+
+@* Index.
+@z
diff --git a/Build/source/texk/web2c/ptexdir/ptftopl.test b/Build/source/texk/web2c/ptexdir/ptftopl.test
new file mode 100755
index 00000000000..e13d960b427
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptftopl.test
@@ -0,0 +1,11 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+TEXMFCNF=$srcdir/../kpathsea \
+ ./ptftopl -verbose $srcdir/tests/cmr10 ptests/xcmr10 || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs b/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs
new file mode 100644
index 00000000000..b38622a92cd
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs
@@ -0,0 +1,591 @@
+#! /bin/sh -vx
+# $Id: ptriptest.test 48633 2018-09-09 17:56:55Z karl $
+# Copyright 2017-2018 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2014 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+ptestdir=$abs_srcdir/ptexdir/ptrip
++ ptestdir=SRCDIR/ptexdir/ptrip
+
+TEXMFCNF=$ptestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/ptexdir/ptrip
++ export TEXMFCNF
+
+rm -rf ptripdir
++ rm -rf ptripdir
+mkdir ptripdir
++ mkdir ptripdir
+cd ptripdir
++ cd ptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running TRIP test for pTeX." >&2
++ echo '>>> Running TRIP test for pTeX.'
+>>> Running TRIP test for pTeX.
+echo ">>> See $ptestdir/ptrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/ptexdir/ptrip/ptrip.diffs for example of acceptable diffs.'
+>>> See SRCDIR/ptexdir/ptrip/ptrip.diffs for example of acceptable diffs.
+
+# pTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
++ P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
++ P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for pTeX ***."
++ echo '*** TRIP test for pTeX ***.'
+*** TRIP test for pTeX ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
++ ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
++ ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
++ diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
++ ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.log
++ rm -f trip.log
+./ptex --progname=pinitex --ini <$testdir/trip1.in >ptripin.fot
++ ./ptex --progname=pinitex --ini
+if test ! -s trip.fmt; then
+ echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+ exit 1
+fi
++ test '!' -s trip.fmt
+sed "$P_SED1" trip.log > ptripin.log || exit 1
++ sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log ptripin.log
++ diff SRCDIR/triptrap/tripin.log ptripin.log
+1c1
+< This is TeX, Version 3.141592653 (INITEX) 4 JUL 1776 12:00
+---
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (INITEX) 27 JAN 2021 18:03
+3c3
+< (trip.tex
+---
+> (./trip.tex
+91c91,92
+< ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
+---
+> ### horizontal mode entered at line 77 (language255:hyph
+> enmin1,63)
+93a95
+> \displace 0.0
+95a98
+> \displace 0.0
+368a372
+> ....\displace 0.0
+370a375
+> ....\displace 0.0
+437,438d441
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c453,456
+< (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
+< 471 memory locations dumped; current usage is 96&278
+< 341 multiletter control sequences
+---
+> (preloaded format=trip 2021.1.27)
+> 1476 strings of total length 26143
+> 487 memory locations dumped; current usage is 108&278
+> 387 multiletter control sequences
+461c464
+< Hyphenation trie of length 273 has 9 ops out of 500
+---
+> Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
++ rm -f trip.log
+./ptex --progname=ptex <$testdir/trip2.in >ptrip.fot
++ ./ptex --progname=ptex
+sed "$P_SED1;$P_SED2" trip.log > ptrip.log
++ sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot ptrip.fot
++ diff SRCDIR/triptrap/trip.fot ptrip.fot
+1,3c1,2
+< This is TeX, Version 3.141592653 (INITEX)
+< ** &trip trip
+< (trip.tex ##
+---
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (preloaded format=ptex)
+> **(./trip.tex ##
+17c16
+< Memory usage before: 159&313; after: 102&278; still untouched: 1613
+---
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
+75c74
+< Memory usage before: 334&431; after: 292&418; still untouched: 175
+---
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log ptrip.log
++ diff SRCDIR/triptrap/trip.log ptrip.log
+1c1
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00
+---
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27) 27 JAN 2021 18:03
+3c3
+< (trip.tex ##
+---
+> (./trip.tex ##
+73c73
+< Memory usage before: 159&313; after: 102&278; still untouched: 1613
+---
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
+113a114
+> .\displace 0.0
+198a200
+> .\displace 0.0
+253a256
+> .\displace 0.0
+308a312
+> .\displace 0.0
+349a354
+> .\displace 0.0
+385,386c390,391
+< \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
+< t 100
+---
+> \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
+> st 100
+406a412
+> ....\displace 0.0
+409a416
+> ....\displace 0.0
+412a420
+> ....\displace 0.0
+420a429
+> .\displace 0.0
+426c435
+< \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
+---
+> \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
+435a445
+> .\displace 0.0
+441c451
+< \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
+---
+> \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
+450a461
+> .\displace 0.0
+456c467
+< \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
+---
+> \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
+466a478
+> .\displace 0.0
+483,484c495,496
+< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
+< 3
+---
+> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
+> 3
+588a601
+> .....\displace 0.0
+591a605
+> .....\displace 0.0
+594a609
+> .....\displace 0.0
+630a646
+> ......\displace 0.0
+633a650
+> ......\displace 0.0
+636a654
+> ......\displace 0.0
+642c660
+< Memory usage before: 747&484; after: 581&481; still untouched: 1492
+---
+> Memory usage before: 1114&483; after: 860&480; still untouched: 1993
+647c665,666
+< ### internal vertical mode entered at line 150 (\output routine)
+---
+> ### internal vertical mode entered at line 150 (\output
+> routine)
+650a670
+> .\displace 0.0
+660a681
+> .\displace 0.0
+670a692
+> .\displace 0.0
+681a704
+> .\displace 0.0
+693,694c716,717
+< \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
+< 0
+---
+> \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
+> 00
+701c724
+< \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
+---
+> \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
+714,715c737,738
+< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
+< 3
+---
+> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
+> 3
+815c838
+< Memory usage before: 475&470; after: 290&466; still untouched: 1473
+---
+> Memory usage before: 706&469; after: 414&465; still untouched: 1974
+820c843,844
+< ### internal vertical mode entered at line 150 (\output routine)
+---
+> ### internal vertical mode entered at line 150 (\output
+> routine)
+915c939
+< Memory usage before: 218&459; after: 149&458; still untouched: 1473
+---
+> Memory usage before: 304&458; after: 194&457; still untouched: 1974
+920c944,945
+< ### internal vertical mode entered at line 150 (\output routine)
+---
+> ### internal vertical mode entered at line 150 (\output
+> routine)
+1070c1095
+< Memory usage before: 118&328; after: 102&328; still untouched: 1473
+---
+> Memory usage before: 146&327; after: 122&327; still untouched: 1974
+1405c1430
+< \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
+---
+> \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
+1493a1519
+> ..\displace 0.0
+1503a1530
+> ..\displace 0.0
+1504a1532
+> ..\displace 0.0
+1511c1539
+< Memory usage before: 990&376; after: 584&370; still untouched: 735
+---
+> Memory usage before: 1494&375; after: 842&369; still untouched: 1974
+1887c1915
+< .\rip A
+---
+> .\displace 0.0
+1923c1951
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1982
+< (tripos.tex
+---
+> (./tripos.tex
+2018c2046
+< \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
+---
+> \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
+2022a2051
+> ..\displace 0.0
+2058a2088
+> ..\displace 0.0
+2071a2102
+> ..\displace 0.0
+2092a2124
+> ..\displace 0.0
+2113a2146
+> ..\displace 0.0
+2123a2157
+> ..\displace 0.0
+2142a2177
+> ..\displace 0.0
+2150a2186
+> ..\displace 0.0
+2171c2207,2208
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2226
+< Memory usage before: 950&531; after: 546&448; still untouched: 706
+---
+> Memory usage before: 1490&530; after: 822&447; still untouched: 1945
+2397c2434
+< ! Improper alphabetic constant.
+---
+> ! Improper alphabetic or KANJI constant.
+2533c2570
+< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
+---
+> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
+2544a2582
+> ..\displace 0.0
+2570c2608,2609
+< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
+---
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction
+>
+2572c2611
+< ..\hbox(0.0+0.0)x0.0
+---
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2614
+< Memory usage before: 339&413; after: 236&405; still untouched: 706
+---
+> Memory usage before: 493&411; after: 325&403; still untouched: 1945
+2650,2651c2689,2690
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+3038c3077,3078
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3091
+< \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
+---
+> \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
+3054c3094
+< .\fam0 ^^c8
+---
+> .\fam0
+3056c3096
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3100,3101
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3182
+> .....\displace 0.0
+3142a3185
+> ....|\displace 0.0
+3143a3187
+> ....\displace 0.0
+3151a3196
+> .\displace 0.0
+3235c3280
+< ! \textfont 0 is undefined (character ^^c8).
+---
+> ! \textfont 0 is undefined (character ).
+3286c3331
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3371
+< \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
+---
+> \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
+3329a3375
+> ..\displace 0.0
+3374c3420
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3431,3432
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3544a3592
+> ..........\displace 0.0
+3546a3595
+> .........|\displace 0.0
+3547a3597
+> .........\displace 0.0
+3564c3614,3615
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3667
+< Memory usage before: 2170&521; after: 1181&459; still untouched: 175
+---
+> Memory usage before: 3279&519; after: 1749&457; still untouched: 484
+3864c3915
+< \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
+---
+> \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
+3919,3920c3970,3972
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3951c4003
+< Memory usage before: 640&415; after: 397&410; still untouched: 175
+---
+> Memory usage before: 955&413; after: 569&408; still untouched: 484
+4034c4086
+< \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
+---
+> \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
+4053c4105
+< Memory usage before: 235&401; after: 178&399; still untouched: 175
+---
+> Memory usage before: 338&399; after: 244&397; still untouched: 484
+4420c4472
+< \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
+---
+> \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
+4425a4478
+> ...\displace 0.0
+4447a4501
+> ...\displace 0.0
+4475a4530
+> ...\displace 0.0
+4492a4548
+> ...\displace 0.0
+4506c4562
+< Memory usage before: 651&432; after: 417&418; still untouched: 175
+---
+> Memory usage before: 1004&431; after: 602&417; still untouched: 484
+4742c4798,4799
+< \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
+---
+> \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
+> n
+4746a4804
+> ...\displace 0.0
+4762a4821
+> .....\displace 0.0
+4777a4837
+> ......\displace 0.0
+4828c4888
+< Memory usage before: 776&458; after: 464&452; still untouched: 175
+---
+> Memory usage before: 1182&457; after: 678&451; still untouched: 484
+5701c5761
+< ! \textfont 0 is undefined (character ^^c8).
+---
+> ! \textfont 0 is undefined (character ).
+6381c6441
+< (tripos.tex
+---
+> (./tripos.tex
+6502c6562
+< l.429 ...^^M=13 \def^^M{\relax}#
+---
+> l.429 ...^^M=13 \defqqM{\relax}#
+6596c6656
+< Memory usage before: 819&428; after: 720&426; still untouched: 175
+---
+> Memory usage before: 1228&428; after: 1074&426; still untouched: 484
+6853c6913
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6937
+> ..|displace 0.0
+6891a6953
+> ..|displace 0.0
+6926a6989
+> .|displace 0.0
+6959a7023
+> .|displace 0.0
+6961c7025,7026
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7057
+> .|displace 0.0
+7103a7170
+> ...|displace 0.0
+7108d7174
+< ...|ip A (ligature BB)
+7116a7183
+> ...|displace 0.0
+7125d7191
+< ...|kern2.0
+7126a7193
+> .|displace 0.0
+7136c7203
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7223
+< Memory usage before: 895&439; after: 290&420; still untouched: 175
+---
+> Memory usage before: 1346&439; after: 394&420; still untouched: 484
+7289c7356
+< Memory usage before: 334&431; after: 292&418; still untouched: 175
+---
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+7297,7300c7364,7367
+< 47 strings out of 1674
+< 253 string characters out of 8367
+< 2825 words of memory out of 3000
+< 372 multiletter control sequences out of 2100
+---
+> 44 strings out of 1524
+> 261 string characters out of 13857
+> 4016 words of memory out of 4500
+> 418 multiletter control sequences out of 15000+0
+7302c7369
+< 2 hyphenation exceptions out of 307
+---
+> 1 hyphenation exception out of 659
+
+mv tripos.tex ptripos.tex
++ mv tripos.tex ptripos.tex
+diff $testdir/tripos.tex ptripos.tex || is_OK=false
++ diff SRCDIR/triptrap/tripos.tex ptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >ptrip.typ || exit 1
++ eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
+++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ ptrip.typ
++ diff SRCDIR/triptrap/trip.typ ptrip.typ
+1c1
+< This is DVItype, Version 3.6
+---
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
+9c9
+< ' TeX output 1776.07.04:1200'
+---
+> ' TeX output 2021.01.27:1803'
+419c419
+< 1121: down4 639342208
+---
+> 1121: down4 639342177
+1087,1088c1087,1088
+< 2535: y4 203921760
+< 2540: y0 203921760
+---
+> 2535: y4 203921756
+> 2540: y0 203921756
+
+$is_OK || {
+ echo ">>> There were some errors." >&2
+ exit 1
+}
++ :
+
+PASS ptexdir/ptriptest.test (exit status: 0)
+PASS: ptexdir/ptriptest.test
diff --git a/Build/source/texk/web2c/ptexdir/ptrip/texmf.cnf b/Build/source/texk/web2c/ptexdir/ptrip/texmf.cnf
new file mode 100644
index 00000000000..b6f41d3b62c
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptrip/texmf.cnf
@@ -0,0 +1,41 @@
+% ptexdir/ptrip/texmf.cnf -- configuration for the ptrip test.
+
+% These values apply to all the programs, and they are necessary for any
+% kind of reasonable diff.
+error_line = 64
+half_error_line = 32
+max_print_line = 72
+
+% pTeX.
+mem_bot = 1
+main_memory = 4500
+max_strings = 3000
+pool_size = 40000
+
+string_vacancies = 8000
+
+font_mem_size = 20000
+font_max = 75
+stack_size = 200
+nest_size = 40
+buf_size = 500
+save_size = 600
+dvi_buf_size = 800
+% Although hyph_size is settable, it can't be <hyph_prime, which is 607,
+% and the original trip setting is 307, so no point in changing the default.
+
+% Avoid running any MakeTeX* program.
+MAKETEXTFM = 0
+MAKETEXTEX = 0
+MAKETEXMF = 0
+
+% Search paths.
+% trip.tex:
+TEXINPUTS = .
+% trip.tfm:
+TFMFONTS = .
+% trip.fmt:
+TEXFORMATS = .
+% tex.pool:
+TEXPOOL = .
+
diff --git a/Build/source/texk/web2c/ptexdir/ptriptest.test b/Build/source/texk/web2c/ptexdir/ptriptest.test
new file mode 100755
index 00000000000..5a11c17a2e0
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptriptest.test
@@ -0,0 +1,71 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017-2018 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2014 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
+ptestdir=$abs_srcdir/ptexdir/ptrip
+
+TEXMFCNF=$ptestdir; export TEXMFCNF
+
+rm -rf ptripdir
+mkdir ptripdir
+cd ptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
+
+echo ">>> Running TRIP test for pTeX." >&2
+echo ">>> See $ptestdir/ptrip.diffs for example of acceptable diffs." >&2
+
+# pTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
+
+set -x
+
+echo "*** TRIP test for pTeX ***."
+
+../pltotf $testdir/trip.pl trip.tfm || exit 1
+
+../tftopl ./trip.tfm trip.pl || exit 1
+
+diff $testdir/trip.pl trip.pl || is_OK=false
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
+
+rm -f trip.log
+../ptex --progname=pinitex --ini <$testdir/trip1.in >ptripin.fot
+if test ! -s trip.fmt; then
+ echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+ exit 1
+fi
+sed "$P_SED1" trip.log > ptripin.log || exit 1
+diff $testdir/tripin.log ptripin.log
+
+# May as well test non-ini second time through.
+rm -f trip.log
+../ptex --progname=ptex <$testdir/trip2.in >ptrip.fot
+sed "$P_SED1;$P_SED2" trip.log > ptrip.log
+diff $testdir/trip.fot ptrip.fot
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log ptrip.log
+
+mv tripos.tex ptripos.tex
+diff $testdir/tripos.tex ptripos.tex || is_OK=false
+
+eval ../dvitype $dvitype_args trip.dvi >ptrip.typ || exit 1
+$DIFF $DIFFFLAGS $testdir/trip.typ ptrip.typ
+
+$is_OK || {
+ echo ">>> There were some errors." >&2
+ exit 1
+}
+
diff --git a/Build/source/texk/web2c/ptexdir/pver.test b/Build/source/texk/web2c/ptexdir/pver.test
new file mode 100755
index 00000000000..682625fcae9
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/pver.test
@@ -0,0 +1,32 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2019 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF
+TEXINPUTS=$srcdir/ptexdir/tests:.; export TEXINPUTS
+
+# check consistency between runtime terminal and log
+./ptex -ini -interaction batchmode -jobname pver1-log pver1.tex >pver1-term.log || exit 1
+sed -n 's/^This is \([-A-Za-z]*\), Version [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \
+ pver1-term.log >pver1-term_ed.log || exit 1
+sed -n 's/^This is \([-A-Za-z]*\), Version [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \
+ pver1-log.log >pver1-log_ed.log || exit 1
+diff pver1-term_ed.log pver1-log_ed.log || exit 2
+
+# check consistency between runtime and version output
+./ptex -version >pver2-self.log || exit 1
+sed -n '1 s/^\([-A-Za-z]*\) [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \
+ pver2-self.log >pver2-self_ed.log || exit 1
+diff pver1-term_ed.log pver2-self_ed.log || exit 4
+
+# check consistency between version output and version primitives
+./ptex -ini -interaction batchmode -jobname pver2-prim pver2.tex || exit 1
+sed -n 's/^Engine \([-A-Za-z]*\) \([^ ]*\) \(.*\)/\1 \2/p' \
+ pver2-prim.log >pver2-prim_ed.log || exit 1
+diff pver2-self_ed.log pver2-prim_ed.log || exit 8
+
+exit 0
+
diff --git a/Build/source/texk/web2c/ptexdir/sample.test b/Build/source/texk/web2c/ptexdir/sample.test
new file mode 100755
index 00000000000..51831fd4f4f
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/sample.test
@@ -0,0 +1,23 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017-2020 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+tfmpath=`$KPSEWHICH cmbx10.tfm` || exit 77
+
+tfmparent=`dirname "$tfmpath"`
+tfmgrandparent=`dirname "$tfmparent"`
+
+# Test inputs
+testdir=$srcdir/ptexdir/tests
+
+TEXMFCNF=$srcdir/../kpathsea \
+ TFMFONTS=$testdir:`dirname "$tfmgrandparent"`// \
+ ./pdvitype -show-opcodes $testdir/sample >ptests/xsample.typ || exit 1
+
+sed 1d ptests/xsample.typ >ptests/xsamplea.typ
+diff $testdir/samplea.typ ptests/xsamplea.typ || exit 1
+
diff --git a/Build/source/texk/web2c/ptexdir/skipjfmp.test b/Build/source/texk/web2c/ptexdir/skipjfmp.test
new file mode 100755
index 00000000000..3b2e3ec7e0b
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/skipjfmp.test
@@ -0,0 +1,22 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2018 Karl Berry <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+# Test inputs
+testdir=$srcdir/ptexdir/tests
+
+# Testing pPLtoTF/pTFtoPL for SKIP property in GLUEKERN.
+for font in skipjfmp; do
+
+ ./ppltotf -verbose $testdir/$font.pl ptests/x$font.tfm && \
+ cmp $testdir/$font.tfm ptests/x$font.tfm && echo || exit 1
+
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ptftopl -charcode-format octal -verbose $testdir/$font.tfm ptests/x$font.pl && \
+ diff $testdir/$font.pl ptests/x$font.pl && echo || exit 1
+
+done
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/control-symbol.tex b/Build/source/texk/web2c/ptexdir/tests/control-symbol.tex
new file mode 100644
index 00000000000..a935e97cc74
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/control-symbol.tex
@@ -0,0 +1,101 @@
+\scrollmode
+% plain TeX ソース
+\def\+{A}
+\def\+{A}
+\def\X{\+}
+\def\Y{\+}
+
+\message{■control symbol}
+% 記号類扱いの単文字命令 → control symbol
+% (この時の和文文字の挙動が tex-jp-build#37 の問題)
+\ifx\kanjiskip\undefined
+ \catcode`\+=12
+ \catcode`\+=12
+\else
+ \catcode`\+=12
+ \kcatcode`+=18
+\fi
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+
+\message{■control word}
+% 普通の文字扱いの単文字命令 → control word
+\ifx\kanjiskip\undefined
+ \catcode`\+=11
+ \catcode`\+=11
+\else
+ \catcode`\+=11
+ \kcatcode`+=17
+\fi
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+
+\message{■control word}
+% 複数文字命令 → control word
+\def\ABC{A}
+\def\あいう{A}
+\def\X{\ABC}
+\def\Y{\あいう}
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+
+% csname
+\ifx\protected\undefined\else
+\catcode`\:=12
+\ifx\kanjiskip\undefined\else
+\kcatcode`!=18
+\fi
+\message{■csname}
+\protected\expandafter\def\csname :AB\endcsname{A}
+\protected\expandafter\def\csname !あい\endcsname{A}
+\edef\X{\csname :AB\endcsname}
+\edef\Y{\csname !あい\endcsname}
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+
+\protected\expandafter\def\csname AB:\endcsname{A}
+\protected\expandafter\def\csname あい!\endcsname{A}
+\edef\X{\csname AB:\endcsname}
+\edef\Y{\csname あい!\endcsname}
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+
+\ifx\ucs\undefined\else
+\message{■not_cjk}
+\kcatcode`ア=15
+\kcatcode`!=15
+\catcode"8A=12\relax
+\protected\expandafter\def\csname ア\endcsname{A}
+\protected\expandafter\def\csname !\endcsname{A}
+\edef\X{\csname ア\endcsname}
+\edef\Y{\csname !\endcsname}
+\show\X\relax\message{(\meaning\X)}
+\show\Y\relax\message{(\meaning\Y)}
+\fi
+\fi
+
+\message{■行末の和文コントロールシンボル}
+
+
+\kcatcode`】=18
+
+\def\】{◆}
+\def\@{◆}
+
+1. \】◇,\@◇
+
+2. \】%
+◇, \@%
+◇
+
+3. \】
+◇, \@
+◇
+
+4. \】 ◇, \@ ◇
+
+
+
+\end
+
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/disp_jfm.tex b/Build/source/texk/web2c/ptexdir/tests/disp_jfm.tex
new file mode 100644
index 00000000000..989bf30df65
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/disp_jfm.tex
@@ -0,0 +1,23 @@
+%% plain pTeX
+\tracingonline1
+\showboxdepth10000
+\showboxbreadth10000
+
+\def\ADJUST{\ybaselineshift3pt\relax}
+
+% disp_node should not create JFM glue
+\setbox0=\vbox{%
+\ADJUST
+\noindent 「あA\par
+\noindent 「あA」\par
+\noindent 「あA\par
+\noindent いEお()\par
+\noindent ・えE\par
+\noindent ・うE}\showbox0 \box0
+
+% disp_node should not create JFM glue
+\ybaselineshift2pt
+\xkanjiskip2pt
+\setbox6=\vbox{あA\hbox{(あ)}A\par}\showbox6 \box6
+
+\end
diff --git a/Build/source/texk/web2c/ptexdir/tests/disp_unbox.tex b/Build/source/texk/web2c/ptexdir/tests/disp_unbox.tex
new file mode 100644
index 00000000000..885cbb28a02
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/disp_unbox.tex
@@ -0,0 +1,23 @@
+\ybaselineshift10pt
+\parindent5pt
+\showboxbreadth10000
+\showboxdepth10000
+\tracingonline1
+\setbox0=\vbox{\hsize=40pt%
+ {\ybaselineshift0pt oお\par fiか\par
+ \global\setbox4=\lastbox\unskip\unskip
+ \global\setbox5=\lastbox\unskip\unskip
+ }
+ \leavevmode\hbox{}いi\par uう\par えe\par
+ \setbox1=\lastbox\unskip\unskip
+ \setbox2=\lastbox\unskip\unskip
+ \setbox3=\lastbox\unskip\unskip
+
+ \hsize=200pt
+ \leavevmode\unhcopy3\unhcopy1\unhcopy4\unhcopy5\unhcopy2
+
+ %\showbox1\showbox2\showbox3\showbox4\showbox5
+}\unvbox0
+
+\end
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex b/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex
new file mode 100644
index 00000000000..ef59b1fc886
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex
@@ -0,0 +1,53 @@
+\font\x=ecrm1000 \x
+\parindent0pt\noautoxspacing
+\output{\shipout\box255}
+\def\あ{ア}
+\def\,{イ}
+
+1a\,
+% --> 1aイ
+
+2a\あ
+% --> 2aア
+
+\endlinechar=-1\relax
+
+3a\,
+% --> 3aイ
+% previous pTeX, upTeX: Undefined cs.
+
+4a\あ
+% --> 4aア
+% prev. pTeX: Undefined cs.
+
+5a,
+% prev. upTeX: byte-seq.
+
+6aあ
+% prev. upTeX: byte-seq.
+
+7a\^^e3^^81^^82b\^^e3^^81^^82
+% 2回エラーが出るが,これは正しい.
+
+% upTeX only tests
+\ifx\enablecjktoken\undefined
+\else
+ \catcode"E3=11\relax
+ \catcode"81=11\relax
+ \catcode"82=11\relax
+ 8a\^^e3^^81^^82
+ % --> 8aア
+ \kcatcode`あ=15\relax
+ 9a\あ
+ % == 9a\^^e3^^81^^82. --> 9aア
+ \def\^^e3^^81^^82{ウ}
+ 10a\あ b\あ
+ % == 10a\^^e3^^81^^82 b\^^e3^^81^^82. --> 10aウbウ
+ \kcatcode12354=16\relax
+ 11a\あ b\あ
+ % == 10a\^^e3^^81^^82 b\^^e3^^81^^82. --> 11aウbウ
+\fi
+
+\bye
+
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/free_ixsp.tex b/Build/source/texk/web2c/ptexdir/tests/free_ixsp.tex
new file mode 100644
index 00000000000..9a3b2766415
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/free_ixsp.tex
@@ -0,0 +1,53 @@
+%#!eptex -ini -etex
+\let\dump\relax
+\batchmode
+\input plain
+
+\errorstopmode
+\catcode`@=11
+\newcount\@tempcnta
+\newcount\@tempcntb
+\newcount\@tempcntc
+\mathchardef\LIM=256
+
+\def\MYCHAR#1{%
+ \@tempcntc=\numexpr7*#1+"101\relax
+ \@tempcnta=\@tempcntc\divide\@tempcnta 94
+ \@tempcntb=\numexpr\@tempcntc-94*\@tempcnta+1\relax
+ \ifnum\@tempcntb<0\advance\@tempcntb94 \advance\@tempcnta-1\fi
+ \advance\@tempcnta18 % 18区以降
+ \CNTA=\kuten\numexpr"100*\@tempcnta+\@tempcntb\relax
+}
+
+\newcount\CNT\newcount\CNTA
+\CNT=0
+\loop
+ \MYCHAR\CNT
+ \message{\the\CNT.}
+ \inhibitxspcode\CNTA=1\relax
+ \advance\CNT1\relax
+ \ifnum\CNT<\LIM
+\repeat
+
+\newcount\CNTB
+
+\loop
+ \MYCHAR\CNTB
+ \global\inhibitxspcode\CNTA=3
+{%
+\CNT=0
+\loop
+ \MYCHAR\CNT
+ \count@=\numexpr 1-\inhibitxspcode\CNTA\relax
+ \ifnum\count@=0\else\ifnum\CNTB=\CNT\else
+ \errmessage{<\the\CNTB, \the\CNT, \the\inhibitxspcode\CNTA>}\fi\fi
+ \advance\CNT1\relax
+ \ifnum\CNT<\LIM
+\repeat
+}
+ \MYCHAR\CNTB
+ \global\inhibitxspcode\CNTA=1\relax
+ \advance\CNTB1\relax
+ \ifnum\CNTB<\LIM
+\repeat
+\bye
diff --git a/Build/source/texk/web2c/ptexdir/tests/free_pena.tex b/Build/source/texk/web2c/ptexdir/tests/free_pena.tex
new file mode 100644
index 00000000000..184720a80a2
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/free_pena.tex
@@ -0,0 +1,52 @@
+%#!eptex -ini -etex
+\let\dump\relax
+\batchmode
+\input plain
+
+\errorstopmode
+\catcode`@=11
+\newcount\@tempcnta
+\newcount\@tempcntb
+\newcount\@tempcntc
+\mathchardef\LIM=256
+
+\def\MYCHAR#1{%
+ \@tempcntc=\numexpr7*#1+"101\relax
+ \@tempcnta=\@tempcntc\divide\@tempcnta 94
+ \@tempcntb=\numexpr\@tempcntc-94*\@tempcnta+1\relax
+ \ifnum\@tempcntb<0\advance\@tempcntb94 \advance\@tempcnta-1\fi
+ \advance\@tempcnta18 % 18区以降
+ \CNTA=\kuten\numexpr"100*\@tempcnta+\@tempcntb\relax
+}
+
+\newcount\CNT\newcount\CNTA
+\CNT=0
+\loop
+ \MYCHAR\CNT
+ \message{\the\CNT.}
+ \prebreakpenalty\CNTA=\numexpr\CNT+1\relax
+ \advance\CNT1\relax
+ \ifnum\CNT<\LIM
+\repeat
+
+\newcount\CNTB
+
+\loop
+ \MYCHAR\CNTB
+ \global\prebreakpenalty\CNTA=0
+{%
+\CNT=0
+\loop
+ \MYCHAR\CNT
+ \count@=\numexpr -\CNT-1+\prebreakpenalty\CNTA\relax
+ \ifnum\count@=0\else\ifnum\CNTB=\CNT\else\errmessage{<\the\CNTB, \the\CNT>}\fi\fi
+ \advance\CNT1\relax
+ \ifnum\CNT<\LIM
+\repeat
+}
+ \MYCHAR\CNTB
+ \global\prebreakpenalty\CNTA=\numexpr\CNTB+1\relax
+ \advance\CNTB1\relax
+ \ifnum\CNTB<\LIM
+\repeat
+\bye
diff --git a/Build/source/texk/web2c/ptexdir/tests/goth10.tfm b/Build/source/texk/web2c/ptexdir/tests/goth10.tfm
new file mode 100644
index 00000000000..92b72a3fa22
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/goth10.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/ptexdir/tests/inhibitglue.tex b/Build/source/texk/web2c/ptexdir/tests/inhibitglue.tex
new file mode 100644
index 00000000000..2c76a9782a8
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/inhibitglue.tex
@@ -0,0 +1,220 @@
+%#!ptex2pdf -e inhibitglue.tex
+\parindent0pt
+\def\head#1{\par\noindent{\tentt ■\string#1}\par}
+\noautospacing \noautoxspacing
+
+%%% unexpandable tokens with non-discardable nodes
+
+\head{\null}
+あ)\inhibitglue (あ\par % ベタ
+あ)\null\inhibitglue (あ\par % 二分
+あ)\inhibitglue\null (あ\par % 二分
+あ)\null\inhibitglue\null (あ\par % 全角【TL17二分】
+あ)\null (あ\par % 全角
+
+\head{\unbox}
+\def\unbox{\unhcopy200 }
+\setbox200=\hbox{}
+あ)\inhibitglue (あ\par % ベタ
+あ)\unbox\inhibitglue (あ\par % 二分
+あ)\inhibitglue\unbox (あ\par % ベタ【TL17二分】
+あ)\unbox\inhibitglue\unbox (あ\par % 二分
+あ)\unbox (あ\par % 全角
+\setbox200=\hbox{漢}
+あ)\inhibitglue (あ\par % ベタ
+あ)\unbox\inhibitglue (あ\par % 前二分
+あ)\inhibitglue\unbox (あ\par % 後二分
+あ)\unbox\inhibitglue\unbox (あ\par % 前後二分【TL17前二分】
+あ)\unbox (あ\par % 前後二分
+
+\head{\vrule}
+あ)\inhibitglue (あ\par % ベタ
+あ)\vrule\inhibitglue (あ\par % 二分
+あ)\inhibitglue\vrule (あ\par % 二分
+あ)\vrule\inhibitglue\vrule (あ\par % 全角【TL17二分】
+あ)\vrule (あ\par % 全角
+
+\head{\discretionary}
+\def\disc{\discretionary{}{}{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\disc\inhibitglue (あ\par % 二分
+あ)\inhibitglue\disc (あ\par % 二分
+あ)\disc\inhibitglue\disc (あ\par % 全角【TL17二分】
+あ)\disc (あ\par % 全角
+
+\head{\special}
+\def\spec{\special{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\spec\inhibitglue (あ\par % 二分
+あ)\inhibitglue\spec (あ\par % 二分
+あ)\spec\inhibitglue\spec (あ\par % 全角【TL17二分】
+あ)\spec (あ\par % 全角
+
+\head{\write-1}
+\def\tlog{\write-1{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\tlog\inhibitglue (あ\par % 二分
+あ)\inhibitglue\tlog (あ\par % 二分
+あ)\tlog\inhibitglue\tlog (あ\par % 全角【TL17二分】
+あ)\tlog (あ\par % 全角
+
+\head{\insert}
+\def\ins{\insert201{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\inhibitglue\ins (あ\par % 二分
+あ)\ins\inhibitglue (あ\par % 二分
+あ)\ins\inhibitglue\ins (あ\par % 全角【TL17二分】
+あ)\ins (あ\par % 全角
+
+\head{\mark}
+\def\mrk{\mark{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\inhibitglue\mrk (あ\par % 二分
+あ)\mrk\inhibitglue (あ\par % 二分
+あ)\mrk\inhibitglue\mrk (あ\par % 全角【TL17二分】
+あ)\mrk (あ\par % 全角
+
+\head{\vadjust}
+\def\adj{\vadjust{}}
+あ)\inhibitglue (あ\par % ベタ
+あ)\inhibitglue\adj (あ\par % 二分
+あ)\adj\inhibitglue (あ\par % 二分
+あ)\adj\inhibitglue\adj (あ\par % 全角【TL17二分】
+あ)\adj (あ\par % 全角
+
+\head{\math}
+\def\math{$ $}
+あ)\inhibitglue (あ\par % ベタ
+あ)\inhibitglue\math (あ\par % 二分
+あ)\math\inhibitglue (あ\par % 二分
+あ)\math\inhibitglue\math (あ\par % 全角【TL17二分】
+あ)\math (あ\par % 全角
+
+%%% unexpandable tokens with discardable nodes (glue, kern, penalty)
+
+\head{\hskip0pt}
+\def\zskip{\hskip0pt}
+あ)\inhibitglue (あ\par % ベタ
+あ)\zskip\inhibitglue (あ\par % 二分
+あ)\inhibitglue\zskip (あ\par % 二分
+あ)\zskip\inhibitglue\zskip (あ\par % 全角
+あ)\zskip (あ\par % 全角
+
+\head{\kern0pt}
+\def\zkern{\kern0pt}
+あ)\inhibitglue (あ\par % ベタ
+あ)\zkern\inhibitglue (あ\par % 二分
+あ)\inhibitglue\zkern (あ\par % 二分
+あ)\zkern\inhibitglue\zkern (あ\par % 全角
+あ)\zkern (あ\par % 全角
+
+\head{\penalty10000}
+\def\zpena{\penalty10000 }
+あ)\inhibitglue (あ\par % ベタ
+あ)\zpena\inhibitglue (あ\par % 二分
+あ)\inhibitglue\zpena (あ\par % 二分
+あ)\zpena\inhibitglue\zpena (あ\par % 全角【TL17二分】
+あ)\zpena (あ\par % 全角
+
+%%% unexpandable tokens
+
+\head{\relax}
+あ)\inhibitglue (あ\par % ベタ
+あ)\relax\inhibitglue (あ\par % 二分
+あ)\inhibitglue\relax (あ\par % ベタ【TL17二分】
+あ)\relax\inhibitglue\relax (あ\par % 二分
+あ)\relax (あ\par % 全角
+ああ\inhibitglue\relax (あ\par % ベタ【TL17二分】
+ああ\relax\inhibitglue (あ\par % ベタ
+あ)\relax\inhibitglue ああ\par % 二分
+あ)\inhibitglue\relax ああ\par % ベタ
+
+\head{\ignorespaces}
+\let\ignsp=\ignorespaces
+あ)\inhibitglue (あ\par % ベタ
+あ)\ignsp\inhibitglue (あ\par % 二分
+あ)\inhibitglue\ignsp (あ\par % ベタ【TL17二分】
+あ)\ignsp\inhibitglue\ignsp (あ\par % 二分
+あ)\ignsp (あ\par % 全角
+
+\head{\spacefactor1000}
+\def\spf{\spacefactor1000 }
+あ)\inhibitglue (あ\par % ベタ
+あ)\spf\inhibitglue (あ\par % 二分
+あ)\inhibitglue\spf (あ\par % ベタ【TL17二分】
+あ)\spf\inhibitglue\spf (あ\par % 二分
+あ)\spf (あ\par % 全角
+
+\head{\let}
+\def\letab{\let\a\b}
+あ)\inhibitglue (あ\par % ベタ
+あ)\letab\inhibitglue (あ\par % 二分
+あ)\inhibitglue\letab (あ\par % ベタ【TL17二分】
+あ)\letab\inhibitglue\letab (あ\par % 二分
+あ)\letab (あ\par % 全角
+
+%%% grouping
+
+\head{\group}
+あ)(あ\par % 一括
+あ){}(あ\par % 別々
+あ){}\inhibitglue (あ\par % 左
+あ)\inhibitglue {}(あ\par % なし【TL17右】
+あ){}\inhibitglue{}(あ\par % 左
+あ){\inhibitglue }(あ\par % 左
+あ)\inhibitglue (あ\par % なし
+あ)・あ\par % 一括
+あ){}・あ\par % 別々
+あ){}\inhibitglue ・あ\par % 左
+あ)\inhibitglue {}・あ\par % なし【TL17右】
+あ){}\inhibitglue{}・あ\par % 左
+あ){\inhibitglue }・あ\par % 左
+あ)\inhibitglue ・あ\par % なし
+あ・(あ\par % 一括
+あ・{}(あ\par % 別々
+あ・{}\inhibitglue (あ\par % 左
+あ・\inhibitglue {}(あ\par % なし【TL17右】
+あ・{}\inhibitglue{}(あ\par % 左
+あ・{\inhibitglue }(あ\par % 左
+あ・\inhibitglue (あ\par % なし
+
+
+\head{\inhibitglue\ at 内側リスト}
+あ\inhibitglue\setbox0=\vbox{『}(\par % ベタ【TL17二分】
+あ\setbox0=\hbox{\inhibitglue}(\par % 二分【TL17ベタ】
+)\setbox0=\hbox{\inhibitglue}(\par % 全角【TL17二分】
+
+あ\setbox0=\vbox{\hsize10zw「}(い\box0\par % (前:二分,「前:二分
+あ\setbox0=\vbox{\hsize10zw「\inhibitglue}(い\box0\par % (前:二分,「前:二分
+あ\inhibitglue\setbox0=\vbox{\hsize10zw「}(い\box0\par % (前:ベタ【TL17二分】,「前:二分
+あ\setbox0=\vbox{\hsize10zw\leavevmode\inhibitglue 「}(い\box0\par % (前:二分,「前:ベタ
+
+
+%%% \unskip vs \inhibitglue (e-pTeX \lastnodesubtype is required)
+\ifx\lastnodesubtype\undefined \expandafter\end \fi
+
+\head{\inhibitglue\ test}
+\setbox200=\hbox{)\hskip10pt\unskip
+ \xdef\gluetype{\the\lastnodetype}%
+ \xdef\jfmgluesubtype{\the\lastnodesubtype}}
+\protected\def\removejfmglue{%
+ \ifnum\lastnodetype=\gluetype\relax
+ \ifnum\lastnodesubtype=\jfmgluesubtype\relax
+ \unskip
+ \fi
+ \fi}
+
+あ)\inhibitglue あ\par % 消える
+あ)\relax\inhibitglue あ\par % 消えない
+あ)\relax\removejfmglue あ\par % 消える【新設】
+%% for tabular environment
+あ)\hskip20pt\unskip\unskip あ\par % 消える
+あ)\hskip20pt\unskip\inhibitglue あ\par % 消えない
+あ)\hskip20pt\unskip\removejfmglue あ\par % 消える【新設】
+
+
+%% reset \inhibitglue at char_node
+\vrule\inhibitglue ;あ( % ;前ベタ,;後四分
+
+
+\bye
diff --git a/Build/source/texk/web2c/ptexdir/tests/inhibitglue_extensions.tex b/Build/source/texk/web2c/ptexdir/tests/inhibitglue_extensions.tex
new file mode 100644
index 00000000000..b4942bd2df6
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/inhibitglue_extensions.tex
@@ -0,0 +1,50 @@
+\documentclass{jsarticle}
+\usepackage[deluxe]{otf}
+\begin{document}
+\def\cs#1{\texttt{\textbackslash #1}}
+\immediate\openout15="\jobname.hoge"\immediate\closeout15
+
+\tracingonline1\showboxdepth100\showboxbreadth10000
+あい\inhibitglue(あ)
+
+あい\inhibitglue\openout14="\jobname-P.out"
+(あ\cs{openout}←whatsit作る
+
+あい\inhibitglue\write14{う}(あ\cs{write}←whatsit作る
+
+あい\inhibitglue\closeout14(あ\cs{closeout}←whatsit作る
+
+あい\inhibitglue\special{A}(あ\cs{special}←whatsit作る
+
+あい\inhibitglue\immediate(あ\cs{immediate}
+
+あい\inhibitglue\immediate\openout14="\jobname-I.out"
+(あ\cs{immediate}\cs{openout}
+
+あい\inhibitglue\immediate\write14{え}(あ\cs{immediate}\cs{write}
+
+あい\inhibitglue\immediate\closeout14(あ\cs{immediate}\cs{closeout}
+
+あい\inhibitglue\immediate\special{A}(あ\cs{immediate}\cs{special}$^*$
+
+あい\inhibitglue\pdfsavepos(あ\cs{pdfsavepos}←whatsit作る
+
+あい\inhibitglue\immediate\pdfsavepos(あ\cs{immediate}\cs{pdfsavepos}$^*$
+
+あい\inhibitglue\read16to\CS (あ\cs{read}
+
+あい\inhibitglue\openin1="\jobname.aux"
+(あ\cs{openin}\closein1
+
+あい\inhibitglue\setlanguage1(あ\cs{setlanguage}←whatsit作る
+
+
+あい\inhibitglue\textbf{(う)}
+
+あい\inhibitglue\textsf{(う)}
+
+あい\inhibitglue\textsf{(う)}
+
+$^*$: \cs{immediate}は効力なし
+\end{document}
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/kinsoku_table.tex b/Build/source/texk/web2c/ptexdir/tests/kinsoku_table.tex
new file mode 100644
index 00000000000..bece61cd0c6
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/kinsoku_table.tex
@@ -0,0 +1,46 @@
+%#!uptex
+\newcount\fuga\newcount\dflt
+\iffalse
+ \global\let\prebreakpenalty=\inhibitxspcode
+ \fuga="30D3 \dflt=3
+\else
+ \fuga="3090 \dflt=0
+\fi
+
+\scrollmode
+\newcount\hoge\hoge="3000
+\loop\ifnum\hoge<\fuga
+ \message{\the\hoge}\prebreakpenalty\hoge=2
+ \advance\hoge 1\relax \repeat
+
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000>}% 2, D
+{
+ \prebreakpenalty"3001=\dflt\relax
+ \global\prebreakpenalty"4000=1\relax% error
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000>}% D, D
+}
+
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000>}% 2, D
+
+{
+ \global\prebreakpenalty"3001=\dflt\relax
+ \prebreakpenalty"4000=1\relax% no error
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000>}% D, 1
+}
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000>}% D, D
+
+\prebreakpenalty"4000=1\relax% no error
+
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000,
+ \the\prebreakpenalty"3549>}% D, 1, D
+
+\prebreakpenalty"4000=\dflt\relax
+
+\prebreakpenalty"3549=1\relax% no error
+
+\message{<\the\prebreakpenalty"3001, \the\prebreakpenalty"4000,
+ \the\prebreakpenalty"3549>}% D, D, 1
+
+
+\end
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/let_char_token.tex b/Build/source/texk/web2c/ptexdir/tests/let_char_token.tex
new file mode 100644
index 00000000000..2d39d0e3809
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/let_char_token.tex
@@ -0,0 +1,11 @@
+%#!ptex
+\newcount\x
+\scrollmode
+\def\T#1{\x=`#1 \message{\the\x}}
+\def\漢{}
+\def\aaa{西}\T{\aaa}% err
+\def\AAA{s}\T{\AAA} % err
+\let\ccc=西\relax\T{\ccc} % err
+\T~ \T\a \T{漢}
+\T\漢 % err
+\end
diff --git a/Build/source/texk/web2c/ptexdir/tests/min10.pl b/Build/source/texk/web2c/ptexdir/tests/min10.pl
new file mode 100644
index 00000000000..88d17dc482b
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/min10.pl
@@ -0,0 +1,392 @@
+(COMMENT THIS IS A KANJI FORMAT FILE)
+(FAMILY MINCHO)
+(FACE F MRR)
+(CODINGSCHEME TEX KANJI TEXT)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 35147750366)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.091641)
+ (SHRINK R 0.0)
+ (XHEIGHT R 0.916443)
+ (QUAD R 0.962216)
+ (EXTRASPACE R 0.229101)
+ (EXTRASTRETCH R 0.183283)
+ (EXTRASHRINK R 0.114551)
+ )
+(GLUEKERN
+ (LABEL O 0)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (STOP)
+ (LABEL O 7)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.048114)
+ (KRN O 11 R -0.048114)
+ (STOP)
+ (LABEL O 12)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.096228)
+ (KRN O 11 R -0.096228)
+ (STOP)
+ (LABEL O 13)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.144327)
+ (KRN O 11 R -0.144327)
+ (STOP)
+ (LABEL O 14)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.192441)
+ (KRN O 11 R -0.192441)
+ (STOP)
+ (LABEL O 2)
+ (LABEL O 10)
+ (GLUE O 0 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 5 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ (STOP)
+ (LABEL O 4)
+ (GLUE O 0 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 7 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 12 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 13 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 14 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 5 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 3 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 11 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 1 R 0.3042755 R 0.0 R 0.3042755)
+ (STOP)
+ (LABEL O 5)
+ (GLUE O 0 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 5 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 3 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 11 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 1 R 0.229101 R 0.0 R 0.229101)
+ (STOP)
+ (LABEL O 3)
+ (GLUE O 0 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 7 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 12 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 13 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 14 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 11 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 1 R 0.107391 R 0.0 R 0.107391)
+ (STOP)
+ (LABEL O 6)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.0 R 0.458203 R 0.0)
+ (STOP)
+ (LABEL O 1)
+ (LABEL O 11)
+ (GLUE O 0 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 2 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 4 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 5 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 11 R 0.0 R 0.458203 R 0.0)
+ (GLUE O 1 R 0.0 R 0.458203 R 0.0)
+ (STOP)
+ )
+(CHARSINTYPE O 1
+ J 214B J 214D J 214F J 2151 J 2153 J 2155 J 2157 J 2159 J 215B
+ )
+(CHARSINTYPE O 2
+ J 212B J 212C
+ )
+(CHARSINTYPE O 3
+ J 2136 J 2137 J 2139 J 2168 J 2169 J 216A J 2170 J 2171 J 2172 J 2421
+ J 2423 J 2425 J 2427 J 2429 J 2443 J 2463 J 2465 J 2467 J 246E J 2521
+ J 2523 J 2525 J 2527 J 2529 J 2543 J 2563 J 2565 J 2567 J 256E J 2575
+ J 2576
+ )
+(CHARSINTYPE O 4
+ J 2126 J 2127 J 2128 J 212A J 212D J 212E J 213E J 2142 J 2143 J 2146
+ J 2147
+ )
+(CHARSINTYPE O 5
+ J 2129 J 212F J 2130 J 2133 J 2135 J 2148 J 2149 J 216B J 216C J 216D
+ J 2178
+ )
+(CHARSINTYPE O 6
+ J 214A J 214C J 214E J 2150 J 2152 J 2154 J 2156 J 2158 J 215A
+ )
+(CHARSINTYPE O 7
+ J 2426 J 242F J 2430 J 2431 J 2432 J 2439 J 243A J 246A J 2546 J 2547
+ J 2564
+ )
+(CHARSINTYPE O 10
+ J 2124 J 2125
+ )
+(CHARSINTYPE O 11
+ J 2122 J 2123
+ )
+(CHARSINTYPE O 12
+ J 2522 J 2524 J 2526 J 252A J 2531 J 2532 J 2535 J 2536 J 253D J 253E
+ J 2541 J 2542 J 2544 J 2545 J 2548 J 2549 J 254A J 2555 J 2556 J 2557
+ J 255F J 2561 J 2569 J 256A J 256F J 2572
+ )
+(CHARSINTYPE O 13
+ J 252F J 2530 J 253F J 2540
+ )
+(CHARSINTYPE O 14
+ J 254E
+ )
+(TYPE O 0
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ )
+ )
+(TYPE O 1
+ (CHARWD R 0.504013)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 2 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 4 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 5 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 11 R 0.0 R 0.458203 R 0.0)
+ (GLUE O 1 R 0.0 R 0.458203 R 0.0)
+ )
+ )
+(TYPE O 2
+ (CHARWD R 0.353665)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 5 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ )
+ )
+(TYPE O 3
+ (CHARWD R 0.747434)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 7 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 12 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 13 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 14 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 11 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 1 R 0.107391 R 0.0 R 0.107391)
+ )
+ )
+(TYPE O 4
+ (CHARWD R 0.353665)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 7 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 12 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 13 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 14 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 5 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 3 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 11 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 1 R 0.3042755 R 0.0 R 0.3042755)
+ )
+ )
+(TYPE O 5
+ (CHARWD R 0.504013)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 5 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 3 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 11 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 1 R 0.229101 R 0.0 R 0.229101)
+ )
+ )
+(TYPE O 6
+ (CHARWD R 0.504013)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.0 R 0.458203 R 0.0)
+ )
+ )
+(TYPE O 7
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.048114)
+ (KRN O 11 R -0.048114)
+ )
+ )
+(TYPE O 10
+ (CHARWD R 0.353665)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.608551 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 2 R 0.0 R 0.3042755 R 0.0)
+ (GLUE O 4 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 5 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.229101 R 0.229101 R 0.229101)
+ )
+ )
+(TYPE O 11
+ (CHARWD R 0.504013)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 0 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 7 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 12 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 13 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 14 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 10 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 2 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 4 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 5 R 0.229101 R 0.229101 R 0.229101)
+ (GLUE O 3 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (GLUE O 11 R 0.0 R 0.458203 R 0.0)
+ (GLUE O 1 R 0.0 R 0.458203 R 0.0)
+ )
+ )
+(TYPE O 12
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.096228)
+ (KRN O 11 R -0.096228)
+ )
+ )
+(TYPE O 13
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.144327)
+ (KRN O 11 R -0.144327)
+ )
+ )
+(TYPE O 14
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ (COMMENT
+ (GLUE O 4 R 0.3042755 R 0.0 R 0.3042755)
+ (GLUE O 5 R 0.229101 R 0.0 R 0.229101)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 6 R 0.458203 R 0.0 R 0.229101)
+ (KRN O 10 R -0.192441)
+ (KRN O 11 R -0.192441)
+ )
+ )
diff --git a/Build/source/texk/web2c/ptexdir/tests/min10.tfm b/Build/source/texk/web2c/ptexdir/tests/min10.tfm
new file mode 100644
index 00000000000..1bf04b7ac32
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/min10.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/ptexdir/tests/nissya.bst b/Build/source/texk/web2c/ptexdir/tests/nissya.bst
new file mode 100644
index 00000000000..b2b1d420b5e
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/nissya.bst
@@ -0,0 +1,2197 @@
+%-----------------------------------------------------------------------------%
+% nissya.bst: 『社会学評論』用 BibTeX style file.
+%
+% 飯田修さんによって作成された jpolisci.bst ファイルが、武田史郎さんによって経
+% 済学用に書き換えられ、さらにそれを樋口耕一が『社会学評論』用に書き換えたのが
+% このファイルです。
+%
+% 使い方などは、同梱の説明書(PDF)をまずご覧下さい。
+%
+% なお、どうしても文献リストに「編」ではなく「編著」と出力したい場合は、文献DB
+% を作成する際、「editor」フィールドと「hentyo」フィールドに同じ名前を入力して
+% 下さい。
+%
+% 以下は元の jecon.bst のヘッダー部分です.
+%-----------------------------------------------------------------------------%
+%
+% jecon.bst: 経済学用 BibTeX style file.
+%
+% これは,飯田修さんによって作成された jpolisci.bst ファイルを経済学用に
+% 武田史郎 <zbc08106@park.zero.ad.jp> が改変したものです.
+%
+% First-written: <2002/11/03>
+% Time-stamp: <2003-01-03 21:52:21 Shiro Takeda>
+% Version 1.4
+% $Id: nissya.bst,v 1.31 2005/02/18 19:23:10 ko-ichi Exp $
+%
+% 元の jpolisci.bst の著作権は飯田さんにあります.
+% ぼくが改変した部分の著作権はどうでもいいです.好きなように扱ってくださ
+% い.
+%
+% オリジナルの jpolisci.bst は,
+% <http://www.bol.ucla.edu/~oiida/jpolisci/> で入手することができます.
+%
+% ぼくが改変した部分は主にプログラム中のコメント行の部分です.コメント行
+% の部分 (とその周り) を見れば,どう変えたかわかると思います.
+%
+% コメント,要望は Shiro Takeda <zbc08106@park.zero.ad.jp> まで.
+%
+% 以下は元の jpolisci.bst のヘッダー部分です.
+%
+% JPOLISCI: a bibliography style for papers in political sicence
+% and other fields that cite Japanese literature.
+% Vertical writing (tate-gaki) compatible.
+
+ % Version 20000910 for JBibTeX versions 0.30 or later,
+ % and pLaTeX2e or later.
+ % Copyright (C) 2000, all rights reserved.
+ %
+ % This file was derived from jbtxbst.doc.
+ %
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % jbtxbst.doc, jplain.bst, junsrt.bst, jalpha.bst, jabbrv.bst,
+ % tipsj.bst, jipsj.bst, tieice.bst, jname.bst, jorsj.bst, jglsj.bst,
+ % seg.bst, jpolisci.bst.
+ %
+ % This restriction helps ensure that all standard styles are identical.
+ % The file jbtxbst.doc has the documentation for this style.
+ %
+
+ % Author:
+ %
+ % 飯田修 Osamu Iida
+ % email: oiida@newmail.net
+ % URL : http://www.bol.ucla.edu/~oiida/jpolisci/ (in Japanese)
+ %
+ % Bug reports, technical suggestions and any other comments
+ % will be appreciated.
+ %
+
+ % Acknowledgement:
+ %
+ % The following files were referred to while creating this file:
+ %
+ % jglsj.bst (by 千葉智章 Tomoaki Chiba)
+ % Function "format.lab.name" in jpolisci.bst derived from
+ % it with small modifications only. The author appreciates it.
+ %
+ % seg.bst (by Martin Karrenbach)
+ % A method for making two sorts of labels is based on this
+ % file's feats.
+ %
+ % jalpha.bst (by 松井正一 Shoichi Matsui)
+ % jpolisci.bst principally owes its functionality to it.
+ %
+ % 藤田眞作『続 LaTeX2e 階梯・縦組編』(アジソン・ウェスレイ、1998 年)。
+ %
+ % Friends in BBSes at IR-web <http://pws.prserv.net/oi/ -- now
+ % obsolete> and KH's Web Site <http://home.att.ne.jp/wind/polisci/>
+ % gave me titles of Japanese political science journals which are
+ % included in MACROs.
+
+ % This file is distributed with absolutely no warranty.
+ % The author doesn't assume any kind of responsibility for
+ % any inconvenience caused by using this file.
+
+ % Last modified: 2000/12/05
+
+%------------------%
+% 下準備・・・ %
+%------------------%
+
+ENTRY { address author booktitle chapter edition editor howpublished
+ institution journal key month note number organization pages publisher
+ school series title type volume year yomi jauthor jkanyaku jtitle
+ jpublisher jyear hentyo}
+
+ { is.kanji.entry field.used is.honyaku }
+
+ { label label2 label3 label4 label.pure extra.label sort.label extra.label.bysame }
+
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t u str.p.start str.p.end str.a str.b str.c str.last.author}
+
+FUNCTION {add.kanji.period}
+{
+ add.period$ duplicate$
+ #-1 #1 substring$ "." =
+ {#-2 global.max$ substring$ "." *}
+ 'skip$
+ if$
+}
+
+%----------------%
+% 出力系関数 %
+%----------------%
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\nissyaitem[" write$
+ label3 write$
+ "]{" write$
+ label.pure write$
+ "}{" write$
+ label2 write$
+ "}{" write$
+ label4 write$
+ "}{" write$
+ label write$
+ "}{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ {
+ is.kanji.entry
+ { write$ }
+% { " " * write$ }
+ { "" * write$ }
+ if$
+ }
+ {
+ output.state after.block =
+ {
+ is.kanji.entry
+ {add.kanji.period write$}
+ {add.period$ write$}
+ if$
+ "" write$
+ }
+ {
+ output.state before.all =
+ 'write$
+ {
+ is.kanji.entry
+ { add.kanji.period write$ }
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ is.kanji.entry
+ {is.honyaku
+ 'skip$
+ {add.kanji.period}
+ if$}
+ {is.honyaku
+ 'skip$
+ {add.period$}
+ if$}
+ if$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+% { duplicate$ is.kanji.str$
+ { duplicate$ is.kanji.str$ is.kanji.entry or
+ { "『" swap$ * "』" * }
+ {
+% add.period$
+ "{\em " swap$ * ",} " *
+ }
+ if$
+ }
+ if$
+}
+
+%--------------------------%
+% 著者名を整形する関数 %
+%--------------------------%
+
+INTEGERS { nameptr namesleft numnames }
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+
+ { namesleft #0 > }
+ {
+ s nameptr "{ff}{ll}" format.name$ is.kanji.str$
+ {s nameptr "{ff}{ll}" format.name$ 't :=}
+ { nameptr #1 >
+%%% { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}
+%%% { s nameptr "{ll,}{~ff}{~vv}{, jj}" format.name$ 't :=}
+ { s nameptr "{f.~}{v~}{ll}{, jj}" format.name$ 't :=}
+ { s nameptr "{ll}{,~f.}{v}{, jj}" format.name$ 't :=}
+ if$
+ }
+ if$
+
+ nameptr #1 >
+ { namesleft #1 >
+ { s is.kanji.str$
+ { "・" * t * }
+ { ", " * t * }
+ if$
+ }
+ {
+ t "others" =
+ {
+ s is.kanji.str$
+ { "ほか" * }
+ { " et~al." *}
+ if$
+ }
+ {
+ s is.kanji.str$
+ {"・" * t * }
+ {
+ numnames #2 =
+ { " \& " * }
+ { ", \& " *}
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+FUNCTION {format.names.ed}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+
+ { namesleft #0 > }
+ {
+ s nameptr "{ff}{ll}" format.name$ is.kanji.str$
+ {s nameptr "{ff}{ll}" format.name$ 't :=}
+%%% { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}
+ { s nameptr "{f.~}{v~}{ll}{, jj}" format.name$ 't :=}
+ if$
+ nameptr #1 >
+ { namesleft #1 >
+ { s is.kanji.str$
+ { "・" * t * }
+ { ", " * t * }
+ if$
+ }
+ {
+ t "others" =
+ {
+ s is.kanji.str$
+ { "ほか" * }
+ { " et~al." *}
+ if$
+ }
+ {
+ s is.kanji.str$
+ {"・" * t * }
+ {
+ numnames #2 =
+ { " \& " * }
+ { ", \& " *}
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ {
+ extra.label.bysame "bysame" =
+ {"\bysame "}
+ { author format.names }
+ if$
+ }
+ if$
+}
+
+INTEGERS {bysame.check}
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ {
+ #0 'bysame.check :=
+ type$ "incollection" =
+ type$ "inbook" =
+ or
+ { editor format.names.ed }
+ {
+ extra.label.bysame "bysame" =
+ {
+ #1 'bysame.check :=
+ "\bysame "
+ }
+ { editor format.names }
+ if$
+ }
+ if$
+
+ hentyo empty$
+ {"編" 't :=}
+ {
+ editor hentyo =
+ {"編著" 't :=}
+ {"編" 't :=}
+ if$
+ }
+ if$
+
+ #1 bysame.check =
+ { "" *}
+ {
+ editor num.names$ #1 >
+ {
+ editor is.kanji.str$
+ {t * }
+ { " eds." * }
+ if$
+ }
+ {
+ editor is.kanji.str$
+ {t *}
+ { " ed." * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%----------------------%
+% その他の整形関数 %
+%----------------------%
+
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title is.kanji.str$
+ { "「" title * "」" * }
+ { " ``" title * ",'' " * }
+% title add.period$
+% " ``" swap$ * "'' " *
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.misc.title}
+{ title empty$
+ { "" }
+ { title is.kanji.str$
+ { "「" title * "」" * }
+ { " ``" title * ",'' " *
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { start.or.end }
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ % 初ページ, 終ページの初期化
+ #0 'start.or.end :=
+ "" 'str.p.start :=
+ "" 'str.p.end :=
+ % 初ページ, 終ページの取得
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ {
+ #1 'start.or.end :=
+ t #2 global.max$ substring$ 't :=
+ }
+ { start.or.end
+ {
+ str.p.end t #1 #1 substring$ * 'str.p.end :=
+ t #2 global.max$ substring$ 't :=
+ }
+ {
+ str.p.start t #1 #1 substring$ * 'str.p.start :=
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ if$
+ }
+ while$
+% str.p.start * "--" * str.p.end * % そのまま書き出す場合
+ % ページ数の記載を省略(後ろのページ数は前のページ数と異なる桁だけ表記)
+ str.p.start text.length$ str.p.end text.length$ =
+ {
+ str.p.start 'str.a :=
+ str.p.end 'str.b :=
+ { str.a empty$ not }
+ { str.a #1 #1 substring$ str.b #1 #1 substring$ =
+ {
+ str.a #2 global.max$ substring$ 'str.a :=
+ str.b #2 global.max$ substring$ 'str.b :=
+ }
+ {
+ str.b 'str.p.end :=
+ "" 'str.a :=
+ }
+ if$
+ }
+ while$
+ }
+ { skip$ }
+ if$
+ start.or.end #1 =
+ {str.p.start * "--" * str.p.end *}
+ { str.p.start * }
+ if$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year or yyear in " cite$ * warning$
+ }
+ if$
+ }
+ { is.kanji.entry
+ { extra.label empty$
+ { ", ~" year * extra.label * ", " * }
+ { ", ~" year * "" * extra.label * ", " * }
+% { " (\kanji " year * extra.label * ") " * }
+% { " (\kanji " year * "\rensuji{" * extra.label * "}) " * }
+ if$
+ }
+ { ",\hspace{.3em}" year * extra.label * ", " * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$ 'pop$
+ {"can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { volume is.kanji.str$
+ { "第" volume * "巻, " *}
+ { is.kanji.entry
+ {"第 " volume * "巻, " *}
+% {"第\kanji " volume * "巻、" *}
+ {"Vol." volume tie.or.space.connect}
+ if$
+ }
+ if$
+ series empty$
+ 'skip$
+ { series is.kanji.str$
+ { series ", " * swap$ * }
+ { " of " * series emphasize * }
+ if$
+ }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { number is.kanji.str$
+ { " 第" number * "号, " * }
+ {"No." number tie.or.space.connect}
+ if$
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { series is.kanji.str$
+ { series ", " * swap$ * }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { edition is.kanji.str$
+ { ", 第" edition * "版" * }
+% { "、第" edition * "版、" * }
+ { is.kanji.entry
+ {", 第" edition * "版" *}
+% {"、第" edition * "版、" *}
+ { output.state mid.sentence =
+ { edition "l" change.case$ ". edition" * }
+ { edition "t" change.case$ ". edition" * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages is.kanji.str$
+% { pages "頁" * }
+ { pages "" * }
+ { is.kanji.entry
+ { pages multi.page.check
+% { "" pages n.dashify * "頁" * }
+ { "" pages n.dashify * "" * }
+% { "" pages n.dashify * "頁" * }
+ { "" pages n.dashify * "" * }
+ if$
+ }
+ { pages multi.page.check
+% { "pp." pages n.dashify tie.or.space.connect }
+ { "" pages n.dashify tie.or.space.connect }
+% { "p." pages tie.or.space.connect }
+ { "" pages tie.or.space.connect }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume empty$
+ {"" *}
+ { "" volume * }
+ if$
+ number empty$
+ {"" *}
+ { "(" * number * ")" * }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ {
+% is.kanji.entry
+% {":" * format.pages *}
+% {
+ ": " * format.pages *
+% }
+% if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { chapter is.kanji.str$
+ { "" }
+ { is.kanji.entry
+ {"章"}
+ {"ch."}
+ if$
+ }
+ if$
+ }
+ { type "l" change.case$ }
+ if$
+ chapter is.kanji.str$ not is.kanji.entry and
+ {"第 " chapter * swap$ *}
+% {"第\kanji " chapter * swap$ *}
+ { chapter is.kanji.str$ is.kanji.entry and
+ {"第" chapter * "章" * * }
+ {chapter tie.or.space.connect}
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { is.kanji.entry
+ { ", " * format.pages * }
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { booktitle is.kanji.str$
+ { " " booktitle emphasize * }
+ { " " booktitle emphasize * }
+ if$
+ }
+ { booktitle is.kanji.str$
+ { "" format.editors * booktitle emphasize * }
+ { " " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.address}
+{ address empty$
+ { "" }
+ { is.kanji.entry
+ { address ":" * }
+ { address ": " * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { title is.kanji.str$
+ { "『" journal * "』" * }
+ { " {\em " journal * "\/} " * }
+ if$
+ }
+ if$
+ }
+ { title is.kanji.str$
+ { " " key * }
+ { " " key * }
+ if$
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor format.names.ed }
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ title is.kanji.str$
+ {" "} {" "} if$
+ }
+ { volume is.kanji.str$
+ { volume }
+ { is.kanji.entry
+ {"第 " volume * "巻" *}
+% {"第\kanji " volume * "巻" *}
+ {"Vol." volume tie.or.space.connect " of " * }
+ if$
+ }
+ if$
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series is.kanji.str$
+ { "『" series * "』, " * swap$ * }
+ { "{\em " * series * "\/} " * }
+ if$
+ }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { booktitle is.kanji.str$
+ { booktitle emphasize }
+ {" {\em " booktitle * "\/} " * }
+ if$
+ }
+ if$
+ }
+ { "" key * }
+ if$
+ }
+ {
+ "" format.crossref.editor *
+ is.kanji.entry
+ {
+ hentyo empty$
+ { "編 " * }
+ { "編著 " * }
+ if$
+ }
+ {
+ editor num.names$ #1 >
+ {" eds., " *}
+ {" ed., " *}
+ if$
+ }
+ if$
+ booktitle is.kanji.str$
+ { booktitle emphasize * ", " *}
+ {
+ " {\em " *
+ booktitle *
+ "},\/ " *
+ }
+% {" {\em " booktitle * "\/} " * }
+ if$
+ address empty$
+ {"" *}
+ {address * ": " *}
+ if$
+ publisher empty$
+ {"" * }
+ {publisher *}
+ if$
+ is.kanji.entry
+ {", ~" *}
+ {", " * }
+ if$
+ }
+ if$
+% " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.in.period}
+{ is.kanji.entry
+ { ", ~" * }
+ { ", " * }
+ if$
+}
+
+FUNCTION {format.hoyakusho}
+{
+ jauthor empty$ % is.honyaku変数のセット
+ jkanyaku empty$ % fin.entry時にこの変数を参照し、
+ jtitle empty$ % ピリオドを付与を制御
+ jpublisher empty$
+ jyear empty$
+ and and and and
+ 'skip$
+ { #1 'is.honyaku := }
+ if$
+
+ jauthor empty$
+ jkanyaku empty$
+ jtitle empty$
+ jpublisher empty$
+ jyear empty$
+ and and and and
+ { "" }
+ { add.period$
+ jyear empty$
+ { "(" * }
+ { "(=" * jyear * ", " * }
+ if$
+ jauthor empty$
+ { jkanyaku empty$
+ { "" * }
+ { jkanyaku format.names
+ "監訳" *
+ }
+ if$
+ }
+ { jauthor format.names
+ "訳" *
+ }
+ if$
+ jtitle empty$
+ { "" * }
+ { jtitle emphasize * }
+ if$
+ jpublisher empty$
+ { "" * }
+ { jpublisher * }
+ if$
+% jyear empty$
+% { "" * }
+% { jyear is.kanji.str$
+% { jyear * "年" * }
+% { "" * jyear * "年" * }
+% if$
+% }
+% if$
+% add.kanji.period
+% "(=" swap$ * ")" *
+% add.kanji.period
+ ".~)" *
+ }
+ if$
+}
+
+FUNCTION {format.book.pages}
+{ pages empty$
+ { "" }
+ { pages is.kanji.str$
+ { pages "" * }
+ { is.kanji.entry
+ { " " pages * }
+ { "" pages *}
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+%--------------------------------%
+% 文献タイプ名と同名の関数群 %
+%--------------------------------%
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+
+ format.date "year" output.check
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.address output
+ publisher "publisher" output.check
+ }
+ { format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.book.pages output
+ format.hoyakusho output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ format.date output
+ format.misc.title "title" output.check
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ format.address output
+ publisher "publisher" output.check
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.address output
+ publisher empty$
+ { ", ~" }
+ { publisher format.in.period }
+ if$
+ output.nonnull
+ format.edition output
+ format.chapter.pages output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ }
+ { address output.nonnull
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ format.date output
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+% "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ school is.kanji.str$
+ {"修士論文" format.thesis.type output.nonnull}
+ {"Master's thesis" format.thesis.type output.nonnull}
+ if$
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+% format.phd
+% format.thesis.type output.nonnull
+ school "school" output.check
+ school is.kanji.str$
+ {"博士論文" format.thesis.type output.nonnull}
+ {"Ph.D. dissertation" format.thesis.type output.nonnull}
+ if$
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ format.date output
+ format.misc.title output
+ howpublished output
+% new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ format.date "year" output.check
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ }
+ { format.address output.nonnull
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ format.title "title" output.check
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date output
+ format.title "title" output.check
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+READ
+
+FUNCTION {set.is.kanji.entry}
+{
+ author field.or.null is.kanji.str$
+ title field.or.null is.kanji.str$ or
+ editor field.or.null is.kanji.str$ or
+ journal field.or.null is.kanji.str$ or
+ booktitle field.or.null is.kanji.str$ or
+ series field.or.null is.kanji.str$ or
+ 'is.kanji.entry :=
+}
+
+ITERATE {set.is.kanji.entry}
+
+INTEGERS { author.field editor.field organization.field title.field key.field }
+
+FUNCTION {init.field.constants}
+{ #0 'author.field :=
+ #1 'editor.field :=
+ #2 'organization.field :=
+ #3 'title.field :=
+ #4 'key.field :=
+}
+
+EXECUTE {init.field.constants}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+%----------------------------%
+% 著者名ラベルの整形関数 %
+%----------------------------%
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #2 > % 3人以上の場合
+ { s is.kanji.str$
+ { s #1 "{ff}" format.name$ 't :=
+ t empty$
+ { s #1 "{ll}" format.name$}
+ { s #1 "{ff}" format.name$}
+ if$
+ "ほか" * }
+ { s #1 "{ll}" format.name$
+ " et~al." * }
+ if$
+ }
+ { numnames #2 = % 2人の場合
+ { s is.kanji.str$ % 漢字著者の場合
+ { s #1 "{ff}{vv}{ll}{jj}" format.name$ 't := % 1人め
+ t is.kanji.str$
+ {
+ s #1 "{ff}" format.name$ 't :=
+ t empty$
+ { s #1 "{ll}" format.name$}
+ { s #1 "{ff}" format.name$}
+ if$
+ }
+ { s #1 "{ll}" format.name$}
+ if$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =% 2人目
+ {"ほか" *}
+ { "・" *
+ s #2 "{ff}{vv}{ll}{jj}" format.name$ 't :=
+ t is.kanji.str$
+ {
+ s #2 "{ff}" format.name$ 't :=
+ t empty$
+ { s #2 "{ll}" format.name$ *}
+ { s #2 "{ff}" format.name$ *}
+ if$
+ }
+ {s #2 "{ll}" format.name$ *}
+ if$
+ }
+ if$
+ }
+ { s #1 "{ll}" format.name$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " \& " *
+ s #2 "{ll}" format.name$ *}
+ if$
+ }
+ if$
+ }
+ { s is.kanji.str$
+ { s #1 "{ff}" format.name$ 't :=
+ t empty$
+ { s #1 "{ll}" format.name$}
+ { s #1 "{ff}" format.name$}
+ if$
+ }
+ { s #1 "{ll}" format.name$ }
+ if$
+ }
+ if$
+ }
+ if$
+ author empty$
+ {
+ is.kanji.entry
+ {"編" * }
+ { numnames #1 >
+ {" eds." *}
+ {" ed." *}
+ if$
+ }
+ if$
+ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.lab.names.full}
+{ 's :=
+ "" 't :=
+ s num.names$ 'numnames :=
+ numnames #2 >
+ {
+ s is.kanji.str$
+ {
+ s #1 "{ff}{ll}" format.name$
+ "ほか" *
+ }
+ {
+ s #1 "{ll,}{~f.}{v}{, jj}" format.name$
+ " et~al." *
+ }
+ if$
+ }
+ {
+ numnames #2 =
+ {
+ s is.kanji.str$
+ {
+ s #1 "{ff}{ll}" format.name$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "ほか" * }
+ {
+ "・" *
+ s #2 "{ff}{ll}" format.name$ *
+ }
+ if$
+ }
+ {
+ s #1 "{ll,}{~f.}{v}{, jj}" format.name$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " et~al." *
+ }
+ {
+ " \& " *
+ s #2 "{ll,}{~f.}{v}{, jj}" format.name$ *
+ }
+ if$
+ }
+ if$
+ }
+ {
+ s is.kanji.str$
+ { s #1 "{ff}{ll}" format.name$ }
+ { s #1 "{ll,}{~f.}{v}{, jj}" format.name$ }
+ if$
+ }
+ if$
+ }
+ if$
+ author empty$
+ {
+ is.kanji.entry
+ {"編" * }
+ { numnames #1 >
+ {" eds." *}
+ {" ed." *}
+ if$
+ }
+ if$
+ }
+ 'skip$
+ if$
+}
+
+INTEGERS {is.making.pure}
+STRINGS {hoka.kh}
+FUNCTION {format.lab.names.full.ff}
+{'s :=
+ "" 't :=
+ is.making.pure #2 =
+ {"" 'hoka.kh :=}
+ {
+ s is.kanji.str$
+ {"ほか" 'hoka.kh :=}
+ {" et~al." 'hoka.kh :=}
+ if$
+ }
+ if$
+ s num.names$ 'numnames :=
+ numnames #2 >
+ {
+ s is.kanji.str$
+ {
+ s #1 "{ff}{ll}" format.name$
+ hoka.kh *
+ }
+ {
+%%% s #1 "{ff~}{vv~}{ll}{, jj}" format.name$
+ s #1 "{f.~}{v~}{ll}{, jj}" format.name$
+ hoka.kh *
+ }
+ if$
+ }
+ {
+ numnames #2 =
+ {
+ s is.kanji.str$
+ {
+ s #1 "{ff}{ll}" format.name$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { t hoka.kh * 't :=}
+ {
+ t "・" * 't :=
+ t s #2 "{ff}{ll}" format.name$ * 't :=
+ }
+ if$
+ t *
+ }
+ {
+%%% s #1 "{ff~}{vv~}{ll}{, jj}" format.name$
+ s #1 "{f.~}{v~}{ll}{, jj}" format.name$
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ hoka.kh *
+ }
+ {
+ " \& " *
+%%% s #2 "{ff~}{vv~}{ll}{, jj}" format.name$ *
+ s #2 "{f.~}{v~}{ll}{, jj}" format.name$ *
+ }
+ if$
+ }
+ if$
+ }
+ {
+ s is.kanji.str$
+ { s #1 "{ff}{ll}" format.name$ }
+%%% { s #1 "{ff~}{vv~}{ll}{, jj}" format.name$ }
+ { s #1 "{f.~}{v~}{ll}{, jj}" format.name$ }
+ if$
+ }
+ if$
+ }
+ if$
+
+ is.making.pure #2 =
+ 'skip$
+ {
+ author empty$
+ {
+ is.kanji.entry
+ {"編" * }
+ { numnames #1 >
+ {" eds." *}
+ {" ed." *}
+ if$
+ }
+ if$
+ }
+ 'skip$
+ if$
+ }
+ if$
+
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.label.full}
+{
+ author empty$
+ {
+ key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names.full }
+ if$
+}
+
+FUNCTION {author.key.label.full.ff}
+{
+ author empty$
+ {
+ key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names.full.ff }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names.full }
+ if$
+ }
+ { author format.lab.names.full }
+ if$
+}
+
+FUNCTION {author.editor.key.label.full.ff}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names.full.ff }
+ if$
+ }
+ { author format.lab.names.full.ff }
+ if$
+}
+
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ "" swap$ *
+ "" year *
+ 'label :=
+ % 翻訳書対策
+ jyear empty$
+ 'skip$
+ {
+ label "=" jyear * * 'label :=
+ }
+ if$
+ pop$
+}
+
+FUNCTION {calc.label2}
+{
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label.full
+ {
+ type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label.full
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ "" swap$ *
+ 'label2 :=
+ sortify label sortify label2 * 'sort.label :=
+ pop$
+}
+
+FUNCTION {calc.label3}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ "" swap$ *
+ 'label3 :=
+ pop$
+}
+
+FUNCTION {calc.label4}
+{
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label.full.ff
+ {
+ type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label.full.ff
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ "" swap$ *
+ 'label4 :=
+ label4 purify$ 'label.pure :=
+ pop$
+}
+
+FUNCTION {calc.label.pure}
+{
+ #2 'is.making.pure :=
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label.full.ff
+ {
+ type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label.full.ff
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ "" swap$ *
+ 't :=
+ t purify$ 'label.pure :=
+ pop$
+ #1 'is.making.pure :=
+}
+
+FUNCTION {sort.format.names}
+{
+ 's :=
+ yomi empty$
+ 'skip$
+ { yomi 's := }
+ if$
+ ""
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ nameptr #1 >
+ { ", " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { s is.kanji.str$
+ {"ほか" * }
+ {" et~al." *}
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$ "" }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ {
+ type$ "proceedings" =
+ 'editor.organization.sort
+ {
+ type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ 't :=
+ pop$
+ author empty$
+ {t " 2 " * 't :=}
+ {t " 1 " * 't :=}
+ if$
+ t " " * 't :=
+ t year field.or.null sortify * 't :=
+ t " " * 't :=
+ t title field.or.null sort.format.title * 't :=
+ t 'sort.key$ :=
+}
+
+FUNCTION {presort2}
+{ calc.label2 }
+
+FUNCTION {presort3}
+{ calc.label3 }
+
+FUNCTION {presort4}
+{ calc.label4 }
+
+FUNCTION {presort5}
+{ calc.label.pure }
+
+ITERATE {presort}
+ITERATE {presort2}
+ITERATE {presort3}
+ITERATE {presort4}
+ITERATE {presort5}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra prev.author this.author}
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+ "" 'this.author :=
+}
+
+% sort.labelが前回のものと同一であれば、extra.labelをセット
+% authorが前回のものと同一であれば、extra.label.bysameをセット
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+
+ author empty$
+ { editor empty$
+ { "" }
+ 'format.editors
+ if$
+ }
+ 'format.authors
+ if$
+ 'this.author :=
+
+% format.names 'this.author :=
+ this.author prev.author =
+ { "bysame" 'extra.label.bysame := }
+ { this.author "" =
+ { "abcxyz" }
+ 'this.author
+ if$
+ 'prev.author :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label empty$ not
+ { label "" * extra.label * "" * }
+ { label extra.label * "" * }
+ if$
+ "" field.or.null *
+ 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION{punctuation}
+{
+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ newline$
+ "%" write$ newline$
+ "% This bbl file is created through nissya.bst" write$ newline$
+ "% nissya.bst is available at" write$ newline$
+ "% <http://hey.to/KO-ichi>" write$ newline$
+ "%" write$ newline$
+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ newline$
+ newline$
+}
+
+EXECUTE {punctuation}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\ifx\undefined\bysame" write$ newline$
+ "\newcommand{\bysame}{\rule[.5ex]{4zw}{.15pt}}"
+ write$ newline$
+ "\fi" write$ newline$
+ newline$
+ "\begin{thebibliography}{xx}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Build/source/texk/web2c/ptexdir/tests/nissya_bib.aux b/Build/source/texk/web2c/ptexdir/tests/nissya_bib.aux
new file mode 100644
index 00000000000..5e75effada0
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/nissya_bib.aux
@@ -0,0 +1,60 @@
+\relax
+\bibstyle{nissya}
+\@writefile{toc}{\contentsline {section}{\numberline {1}使い方}{1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}概略}{1}}
+\citation{gms1}
+\citation{gms1}
+\citation{hgc1}
+\citation{hgc1}
+\citation{gms1}
+\citation{cmcjdb44}
+\citation{hgc3}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}スタイルオプション: long}{2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}引用・参照コマンド}{2}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.1}著者名(出版年)}{2}}
+\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces 「著者名(出版年)」形式: citetコマンド}}{2}}
+\newlabel{citet}{{1}{2}}
+\citation{hgc1}
+\citation{kh2003}
+\citation{nsi2003}
+\citation{kwbt99}
+\citation{gms1}
+\citation{hgc1}
+\citation{cmcjdb44}
+\citation{kwbt1}
+\citation{hgc1}
+\citation{hgc3}
+\citation{kwbt99}
+\citation{fschr92j}
+\citation{nsi2003}
+\citation{fschr92j}
+\citation{kwbt}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.2}(著者名 出版年)}{3}}
+\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces (著者名 出版年)形式: citepコマンド}}{3}}
+\newlabel{citep}{{2}{3}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.3}出版年のみ}{3}}
+\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces 出版年のみ: citeyearコマンド}}{3}}
+\newlabel{citeyear}{{3}{3}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.4}引用・参照しないもの}{4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.4}自動作成される文献リスト}{4}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}ご使用にあたって}{4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}既知の問題点}{4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}更新履歴}{4}}
+\citation{netville2}
+\citation{Lonkila1995}
+\citation{jsrstyle}
+\bibdata{sample.bib}
+\bibcite{fschr92j}{{1}{1992=2000}{{Fischer}}{{Fischer,~C.~S.}}{{C.~S. Fischer}}{{C S Fischer}}}
+\bibcite{gms1}{{2}{1973}{{Granovetter}}{{Granovetter,~M.~S.}}{{M.~S. Granovetter}}{{M S Granovetter}}}
+\bibcite{hgc1}{{3}{2001}{{樋口}}{{樋口耕一}}{{樋口耕一}}{{樋口耕一}}}
+\bibcite{hgc3}{{4}{2003}{{樋口}}{{樋口耕一}}{{樋口耕一}}{{樋口耕一}}}
+\bibcite{kwbt1}{{5}{2001a}{{川端}}{{川端亮}}{{川端亮}}{{川端亮}}}
+\bibcite{kwbt}{{6}{2001b}{{川端}}{{川端亮}}{{川端亮}}{{川端亮}}}
+\bibcite{kwbt99}{{7}{1999}{{川端編}}{{川端亮編}}{{川端亮編}}{{川端亮}}}
+\bibcite{kh2003}{{8}{2003}{{川端・樋口}}{{川端亮・樋口耕一}}{{川端亮・樋口耕一}}{{川端亮・樋口耕一}}}
+\bibcite{Lonkila1995}{{9}{1995}{{Lonkila}}{{Lonkila,~M.}}{{M.~Lonkila}}{{M Lonkila}}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}著作権}{5}}
+\bibcite{nsi2003}{{10}{2003}{{直井ほか}}{{直井優ほか}}{{直井優ほか}}{{直井優}}}
+\bibcite{jsrstyle}{{11}{1999}{{日本社会学会編集委員会}}{{日本社会学会編集委員会}}{{日本社会学会編集委員会}}{{日本社会学会編集委員会}}}
+\bibcite{cmcjdb44}{{12}{1998}{{Wellman}}{{Wellman,~B.}}{{B.~Wellman}}{{B Wellman}}}
+\bibcite{netville2}{{13}{1999}{{Wellman \& Hampton}}{{Wellman,~B. \& Hampton,~K.~N.}}{{B.~Wellman \& K.~N. Hampton}}{{B Wellman K N Hampton}}}
diff --git a/Build/source/texk/web2c/ptexdir/tests/postpena.tex b/Build/source/texk/web2c/ptexdir/tests/postpena.tex
new file mode 100644
index 00000000000..74f93a1f071
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/postpena.tex
@@ -0,0 +1,15 @@
+%% plain pTeX
+\postbreakpenalty`#=200
+\postbreakpenalty`a=200
+\showboxdepth10000
+\showboxbreadth10000
+\tracingonline1
+\setbox0=\hbox{#」「\penalty-1000\showlists}
+% # と 」 の間:\penalty10200 (合算)
+
+\setbox0=\hbox{#\unpenalty 」a\relax あ\showlists}
+% # と 」 の間:\penalty10000 (prebreakpenalty of '」')
+% a と あ の間:\penalty200 (postbreakpenalty of 'a')
+
+
+\bye
diff --git a/Build/source/texk/web2c/ptexdir/tests/pver1.tex b/Build/source/texk/web2c/ptexdir/tests/pver1.tex
new file mode 100644
index 00000000000..c891f1f6609
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/pver1.tex
@@ -0,0 +1,2 @@
+% for INITEX
+\relax\end
diff --git a/Build/source/texk/web2c/ptexdir/tests/pver2.tex b/Build/source/texk/web2c/ptexdir/tests/pver2.tex
new file mode 100644
index 00000000000..fdbc3e5055a
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/pver2.tex
@@ -0,0 +1,13 @@
+% for INITEX
+\catcode`\{=1
+\catcode`\}=2
+\def\space{ }
+\edef\NAME{Engine \ifx\eTeXversion\undefined\else e-\fi
+ \ifx\enablecjktoken\undefined\else u\fi
+ pTeX p\the\ptexversion.\the\ptexminorversion\ptexrevision
+ \ifx\enablecjktoken\undefined\else -u\the\uptexversion\uptexrevision\fi
+ \ifx\epTeXversion\undefined\else -\the\epTeXversion
+ -\the\eTeXversion\eTeXrevision\fi
+ \space (dummy)}
+\write16{\NAME}
+\relax\end
diff --git a/Build/source/texk/web2c/ptexdir/tests/sample.bib b/Build/source/texk/web2c/ptexdir/tests/sample.bib
new file mode 100644
index 00000000000..35e5aca87b2
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/sample.bib
@@ -0,0 +1,131 @@
+@Article{nsi2003,
+ journal = {大阪大学大学院人間科学研究科紀要},
+ author = {直井 優 and 菅野 剛 and 岩渕 亜希子},
+ yomi = {naoiatsushisuganotsuyoshiiwabuchiakiko},
+ title = {情報化社会に関する全国調査(JIS2001)の概要},
+ year = {2003},
+ volume = {29},
+ pages = {23-66}
+}
+
+@Article{kh2003,
+ journal = {大阪大学大学院人間科学研究科紀要},
+ author = {川端 亮 and 樋口 耕一},
+ yomi = {kawabataakirahiguchikouichi},
+ title = {インターネットに対する人々の意識 ---自由回答の分析から},
+ year = {2003},
+ volume = {29},
+ pages = {163-181}
+}
+
+@Book{fschr92j,
+ author = {Fischer, Claude S.},
+ title = {America Calling: A Social History of the Telephone to 1940},
+ publisher = {University of California Press },
+ address = {California},
+ year = 1992,
+ jauthor = {吉見 俊哉 and 松田 美佐 and 片岡 みい子},
+ jtitle = {電話するアメリカ},
+ jpublisher = {NTT出版},
+ jyear = 2000
+}
+
+@Article{kwbt1,
+ yomi = {kawabataakira},
+ author = {川端 亮},
+ year = {2001},
+ title = {コンピュータ・コーディングによる宗教的ライフヒストリーの記述},
+ journal = {宗教と社会},
+ volume = {7},
+ pages = {133-154},
+}
+
+@Article{kwbt,
+ yomi = {kawabataakira},
+ author = {川端 亮},
+ year = {2001},
+ title = {コンピューターを用いた自由回答のコーティング},
+ journal = {社会情報},
+ publisher = {札幌学院大学社会情報学部},
+ volume = {10},
+ number = {1},
+ pages = {135-148},
+}
+
+@Book{kwbt99,
+ yomi = {kawabataakira},
+ hentyo = {川端 亮},
+ editor = {川端 亮},
+ year = 1999,
+ title = {非定型データのコーディング・システムとその利用},
+ booktitle = {非定型データのコーディング・システムとその利用},
+ publisher = {平成8年度〜10年度科学研究費補助金(基盤研究(A)(1))(課題番号 08551003)研究成果報告書,\hspace{.6em}大阪大学},
+}
+
+@Article{netville2,
+ author = {Wellman, B. and Hampton, K. N.},
+ year = {1999},
+ title = {Living Networked On and Offline},
+ journal = {Contemporary Sociology},
+ volume = {28},
+ number = {6},
+ pages = {648-655},
+}
+
+@Article{gms1,
+ author = {Granovetter, M. S.},
+ year = {1973},
+ title = {The Strength of Weak Ties},
+ journal = {American Journal of Sociology},
+ volume = {78},
+ pages = {1360-1380},
+}
+
+@Article{hgc1,
+ yomi = {higuchikouichi},
+ author = {樋口 耕一},
+ year = {2001},
+ title = {電子コミュニティにおけるメディア特性の影響 ---同期メディアと非同期メディア},
+ journal = {年報人間科学},
+ volume = {22},
+ pages = {91-106},
+}
+
+@Article{cmcjdb44,
+ author = {Wellman, B.},
+ year = {1998},
+ title = {A Computer Network is a Social Network},
+ journal = {SIGGROUP Bulletin},
+ volume = {19},
+ number = {3},
+ pages = {41-48},
+}
+
+@Article{hgc3,
+ yomi = {higuchikouichi},
+ author = {樋口 耕一},
+ year = {2003},
+ title = {コンピュータ・コーディングの実践},
+ journal = {年報人間科学},
+ volume = {24},
+ pages = {193-214},
+}
+
+@Incollection{Lonkila1995,
+ author = {Lonkila, M.},
+ year = 1995,
+ title = {Grounded Theory as an Emerging Paradigm for Computer-Assisted Qualitative Data Analysis},
+ editor = {Kelle, U.},
+ booktitle = {Computer-Aided Qualitative Analysis},
+ address = {London},
+ publisher = {Sage},
+ pages = {41-51},
+}
+
+@Misc{jsrstyle,
+ author = {日本社会学会編集委員会},
+ yomi = {nihonsyakaigakkaihennsyuiinkai},
+ year = {1999},
+ title = {社会学評論スタイルガイド},
+ note = {( http://wwwsoc.nii.ac.jp/jss/\\JSRstyle/JSRstyle.html \ 2003.6.27)}
+} \ No newline at end of file
diff --git a/Build/source/texk/web2c/ptexdir/tests/sample.dvi b/Build/source/texk/web2c/ptexdir/tests/sample.dvi
new file mode 100644
index 00000000000..a69226cdc12
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/sample.dvi
Binary files differ
diff --git a/Build/source/texk/web2c/ptexdir/tests/samplea.typ b/Build/source/texk/web2c/ptexdir/tests/samplea.typ
new file mode 100644
index 00000000000..b9e82ecb798
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/samplea.typ
@@ -0,0 +1,2825 @@
+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
+' TeX output 2010.04.30:1631'
+Postamble starts at byte 5116.
+maxv=43382189, maxh=26485116, maxstackdepth=17, totalpages=1
+pTeX DVI (id=3)
+Font 70: cmbsy8---loaded at size 524288 DVI units
+Font 69: cmbx8---loaded at size 524288 DVI units
+Font 62: cmsy8---loaded at size 524288 DVI units
+Font 60: cmmi8---loaded at size 524288 DVI units
+Font 58: cmti8---loaded at size 524288 DVI units
+Font 57: cmr8---loaded at size 524288 DVI units
+Font 54: cmss10---loaded at size 655360 DVI units
+Font 53: cmsl10---loaded at size 655360 DVI units
+Font 52: cmtt10---loaded at size 655360 DVI units
+Font 51: cmcsc10---loaded at size 655360 DVI units
+Font 50: cmti10---loaded at size 655360 DVI units
+Font 49: cmbx10---loaded at size 655360 DVI units
+Font 48: cmbx12 scaled 1200---loaded at size 943718 DVI units
+ (this font is magnified 120%)
+Font 47: goth10 scaled 1440 (JFM)---loaded at size 943718 DVI units
+ (this font is magnified 144%)
+Font 44: cmsy10 scaled 1200---loaded at size 786432 DVI units
+ (this font is magnified 120%)
+Font 41: cmmi12---loaded at size 786432 DVI units
+Font 38: cmr12---loaded at size 786432 DVI units
+Font 36: cmbx12 scaled 1728---loaded at size 1359217 DVI units
+ (this font is magnified 173%)
+Font 35: goth10 scaled 2074 (JFM)---loaded at size 1359217 DVI units
+ (this font is magnified 207%)
+Font 22: goth10 scaled 1200 (JFM)---loaded at size 786432 DVI units
+ (this font is magnified 120%)
+Font 15: min10 (JFM)---loaded at size 655360 DVI units
+Font 14: tmin10 (JFM tate)---loaded at size 655360 DVI units
+Font 7: cmr10---loaded at size 655360 DVI units
+Font 6: cmr7---loaded at size 458752 DVI units
+Font 0: cmex10---loaded at size 655360 DVI units
+
+42: beginning of page 1
+87: down4 43382189 {160} v:=0+43382189=43382189, vv:=2748
+92: push {141}
+level 0:(h=0,v=43382189,w=0,x=0,y=0,z=0,d=0,hh=0,vv=2748)
+93: down4 -46384800 {160} v:=43382189-46384800=-3002611, vv:=-190
+98: down4 44418720 {160} v:=-3002611+44418720=41416109, vv:=2623
+103: push {141}
+level 1:(h=0,v=41416109,w=0,x=0,y=0,z=0,d=0,hh=0,vv=2623)
+104: down4 -41723410 {160} v:=41416109-41723410=-307301, vv:=-19
+109: push {141}
+level 2:(h=0,v=-307301,w=0,x=0,y=0,z=0,d=0,hh=0,vv=-19)
+110: right3 2725612 {145} h:=0+2725612=2725612, hh:=173
+[ ]
+114: fntdef1 35 {243}: goth10
+136: fntnum35 {206} current font is goth10
+137: set2 9506 {129}("2522) type=10 h:=2725612+1307860=4033472, hh:=256
+140: set2 9529 {129}("2539) type=0 h:=4033472+1307860=5341332, hh:=339
+143: set2 9517 {129}("252D) type=0 h:=5341332+1307860=6649192, hh:=422
+146: set2 8508 {129}("213C) type=0 h:=6649192+1307860=7957052, hh:=505
+149: set2 18044 {129}("467C) type=0 h:=7957052+1307860=9264912, hh:=588
+152: set2 19292 {129}("4B5C) type=0 h:=9264912+1307860=10572772, hh:=671
+155: set2 14444 {129}("386C) type=0 h:=10572772+1307860=11880632, hh:=754
+158: w3 157649 {150} h:=11880632+157649=12038281, hh:=764
+[アスキー日本語]
+162: fntdef1 36 {243}: cmbx12
+184: fntnum36 {207} current font is cmbx12
+185: setchar76 ("4C) h:=12038281+918730=12957011, hh:=822
+[L]
+186: push {141}
+level 3:(h=12957011,v=-307301,w=157649,x=0,y=0,z=0,d=0,hh=822,vv=-19)
+187: down3 -285079 {159} v:=-307301-285079=-592380, vv:=-37
+191: push {141}
+level 4:(h=12957011,v=-592380,w=157649,x=0,y=0,z=0,d=0,hh=822,vv=-37)
+192: right3 -550483 {145} h:=12957011-550483=12406528, hh:=787
+196: fntdef1 48 {243}: cmbx12
+218: fntnum48 {219} current font is cmbx12
+219: setchar65 ("41) h:=12406528+801724=13208252, hh:=838
+[A]
+220: pop {142}
+level 4:(h=12957011,v=-592380,w=157649,x=0,y=0,z=0,d=0,hh=822,vv=-37)
+221: pop {142}
+level 3:(h=12957011,v=-307301,w=157649,x=0,y=0,z=0,d=0,hh=822,vv=-19)
+222: right2 21883 {144} h:=12957011+21883=12978894, hh:=823
+225: fntnum36 {207} current font is cmbx12
+226: setchar84 ("54) h:=12978894+1063460=14042354, hh:=890
+[T]
+227: push {141}
+level 3:(h=14042354,v=-307301,w=157649,x=0,y=0,z=0,d=0,hh=890,vv=-19)
+228: right3 -254907 {145} h:=14042354-254907=13787447, hh:=874
+232: down3 302047 {159} v:=-307301+302047=-5254, vv:=0
+236: setchar69 ("45) h:=13787447+1003681=14791128, hh:=938
+[E]
+237: pop {142}
+level 3:(h=14042354,v=-307301,w=157649,x=0,y=0,z=0,d=0,hh=890,vv=-19)
+238: right3 557635 {145} h:=14042354+557635=14599989, hh:=925
+242: setchar88 ("58) h:=14599989+1154706=15754695, hh:=998
+243: w0 157649 {147} h:=15754695+157649=15912344, hh:=1008
+[ X]
+244: fntnum35 {206} current font is goth10
+245: set2 9525 {129}("2535) type=10 h:=15912344+1307860=17220204, hh:=1091
+248: set2 9587 {129}("2573) type=0 h:=17220204+1307860=18528064, hh:=1174
+251: set2 9559 {129}("2557) type=10 h:=18528064+1307860=19835924, hh:=1257
+254: set2 9579 {129}("256B) type=0 h:=19835924+1307860=21143784, hh:=1340
+257: set2 15696 {129}("3D50) type=0 h:=21143784+1307860=22451644, hh:=1423
+260: set2 20047 {129}("4E4F) type=0 h:=22451644+1307860=23759504, hh:=1506
+[サンプル出力]
+263: pop {142}
+level 2:(h=0,v=-307301,w=0,x=0,y=0,z=0,d=0,hh=0,vv=-19)
+264: down3 1143874 {159} v:=-307301+1143874=836573, vv:=53
+268: putrule {137} height 186467, width 26485116 (12x1678 pixels)
+277: down3 864455 {159} v:=836573+864455=1701028, vv:=108
+281: push {141}
+level 2:(h=0,v=1701028,w=0,x=0,y=0,z=0,d=0,hh=0,vv=108)
+282: push {141}
+level 3:(h=0,v=1701028,w=0,x=0,y=0,z=0,d=0,hh=0,vv=108)
+283: right4 12869623 {146} h:=0+12869623=12869623, hh:=815
+[ ]
+288: down3 372935 {159} v:=1701028+372935=2073963, vv:=132
+292: setrule {132} height 745870, width 745871 (48x48 pixels)
+ h:=12869623+745871=13615494, hh:=863
+301: pop {142}
+level 3:(h=0,v=1701028,w=0,x=0,y=0,z=0,d=0,hh=0,vv=108)
+302: pop {142}
+level 2:(h=0,v=1701028,w=0,x=0,y=0,z=0,d=0,hh=0,vv=108)
+303: down3 1474560 {159} v:=1701028+1474560=3175588, vv:=201
+307: push {141}
+level 2:(h=0,v=3175588,w=0,x=0,y=0,z=0,d=0,hh=0,vv=201)
+308: right3 630598 {145} h:=0+630598=630598, hh:=40
+[ ]
+312: fntdef1 15 {243}: min10
+333: fntnum15 {186} current font is min10
+334: set2 9267 {129}("2433) type=0 h:=630598+630598=1261196, hh:=80
+337: w2 11159 {149} h:=1261196+11159=1272355, hh:=81
+340: set2 9324 {129}("246C) type=0 h:=1272355+630598=1902953, hh:=121
+343: w0 11159 {147} h:=1902953+11159=1914112, hh:=122
+344: set2 9295 {129}("244F) type=0 h:=1914112+630598=2544710, hh:=162
+347: w3 185546 {150} h:=2544710+185546=2730256, hh:=173
+[これは ]
+351: fntdef1 49 {243}: cmbx10
+373: fntnum49 {220} current font is cmbx10
+374: setchar84 ("54) h:=2730256+524285=3254541, hh:=206
+[T]
+375: push {141}
+level 3:(h=3254541,v=3175588,w=185546,x=0,y=0,z=0,d=0,hh=206,vv=201)
+376: right3 -125636 {145} h:=3254541-125636=3128905, hh:=198
+380: down3 145635 {159} v:=3175588+145635=3321223, vv:=210
+384: setchar69 ("45) h:=3128905+495158=3624063, hh:=229
+[E]
+385: pop {142}
+level 3:(h=3254541,v=3175588,w=185546,x=0,y=0,z=0,d=0,hh=206,vv=201)
+386: right3 275315 {145} h:=3254541+275315=3529856, hh:=224
+390: setchar88 ("58) h:=3529856+569796=4099652, hh:=260
+391: w0 185546 {147} h:=4099652+185546=4285198, hh:=271
+[ X ]
+392: fntnum15 {186} current font is min10
+393: set2 9294 {129}("244E) type=0 h:=4285198+630598=4915796, hh:=311
+396: w2 11159 {149} h:=4915796+11159=4926955, hh:=312
+399: set2 9307 {129}("245B) type=0 h:=4926955+630598=5557553, hh:=352
+402: w0 11159 {147} h:=5557553+11159=5568712, hh:=353
+403: set2 9331 {129}("2473) type=0 h:=5568712+630598=6199310, hh:=393
+406: w0 11159 {147} h:=6199310+11159=6210469, hh:=394
+407: set2 9294 {129}("244E) type=0 h:=6210469+630598=6841067, hh:=434
+410: w0 11159 {147} h:=6841067+11159=6852226, hh:=435
+411: set2 12396 {129}("306C) type=0 h:=6852226+630598=7482824, hh:=475
+414: w0 11159 {147} h:=7482824+11159=7493983, hh:=476
+415: set2 20067 {129}("4E63) type=0 h:=7493983+630598=8124581, hh:=516
+418: w0 11159 {147} h:=8124581+11159=8135740, hh:=517
+419: set2 9287 {129}("2447) type=0 h:=8135740+630598=8766338, hh:=557
+422: w0 11159 {147} h:=8766338+11159=8777497, hh:=558
+423: set2 9273 {129}("2439) type=7 h:=8777497+630598=9408095, hh:=598
+426: right2 -31532 {144} h:=9408095-31532=9376563, hh:=596
+429: set2 8483 {129}("2123) type=9 h:=9376563+330310=9706873, hh:=617
+432: x3 300288 {155} h:=9706873+300288=10007161, hh:=634
+436: set2 9281 {129}("2441) type=0 h:=10007161+630598=10637759, hh:=674
+439: w3 70380 {150} h:=10637759+70380=10708139, hh:=678
+443: set2 9319 {129}("2467) type=3 h:=10708139+489838=11197977, hh:=709
+446: right2 11158 {144} h:=11197977+11158=11209135, hh:=710
+449: set2 9283 {129}("2443) type=3 h:=11209135+489838=11698973, hh:=741
+452: w0 70380 {147} h:=11698973+70380=11769353, hh:=745
+453: set2 9288 {129}("2448) type=0 h:=11769353+630598=12399951, hh:=785
+456: w2 11159 {149} h:=12399951+11159=12411110, hh:=786
+459: set2 24111 {129}("5E2F) type=0 h:=12411110+630598=13041708, hh:=826
+462: w0 11159 {147} h:=13041708+11159=13052867, hh:=827
+463: set2 19822 {129}("4D6E) type=0 h:=13052867+630598=13683465, hh:=867
+466: w0 11159 {147} h:=13683465+11159=13694624, hh:=868
+467: set2 9279 {129}("243F) type=0 h:=13694624+630598=14325222, hh:=908
+470: w0 11159 {147} h:=14325222+11159=14336381, hh:=909
+471: set2 19000 {129}("4A38) type=0 h:=14336381+630598=14966979, hh:=949
+474: w0 11159 {147} h:=14966979+11159=14978138, hh:=950
+475: set2 15729 {129}("3D71) type=0 h:=14978138+630598=15608736, hh:=990
+478: w0 11159 {147} h:=15608736+11159=15619895, hh:=991
+479: set2 9330 {129}("2472) type=0 h:=15619895+630598=16250493, hh:=1031
+482: w0 11159 {147} h:=16250493+11159=16261652, hh:=1032
+483: set2 14958 {129}("3A6E) type=0 h:=16261652+630598=16892250, hh:=1072
+486: w3 70380 {150} h:=16892250+70380=16962630, hh:=1076
+490: set2 9283 {129}("2443) type=3 h:=16962630+489838=17452468, hh:=1107
+493: w0 70380 {147} h:=17452468+70380=17522848, hh:=1111
+494: set2 9286 {129}("2446) type=0 h:=17522848+630598=18153446, hh:=1151
+497: w2 11159 {149} h:=18153446+11159=18164605, hh:=1152
+500: set2 9311 {129}("245F) type=0 h:=18164605+630598=18795203, hh:=1192
+503: w0 11159 {147} h:=18795203+11159=18806362, hh:=1193
+504: set2 9279 {129}("243F) type=0 h:=18806362+630598=19436960, hh:=1233
+507: w0 11159 {147} h:=19436960+11159=19448119, hh:=1234
+508: set2 9252 {129}("2424) type=0 h:=19448119+630598=20078717, hh:=1274
+511: w0 11159 {147} h:=20078717+11159=20089876, hh:=1275
+512: set2 15230 {129}("3B7E) type=0 h:=20089876+630598=20720474, hh:=1314
+515: w0 11159 {147} h:=20720474+11159=20731633, hh:=1315
+516: set2 9316 {129}("2464) type=0 h:=20731633+630598=21362231, hh:=1355
+519: w0 11159 {147} h:=21362231+11159=21373390, hh:=1356
+520: set2 8482 {129}("2122) type=9 h:=21373390+330310=21703700, hh:=1377
+523: x0 300288 {152} h:=21703700+300288=22003988, hh:=1394
+524: set2 16205 {129}("3F4D) type=0 h:=22003988+630598=22634586, hh:=1434
+527: w0 11159 {147} h:=22634586+11159=22645745, hh:=1435
+528: set2 9288 {129}("2448) type=0 h:=22645745+630598=23276343, hh:=1475
+531: w0 11159 {147} h:=23276343+11159=23287502, hh:=1476
+532: set2 9295 {129}("244F) type=0 h:=23287502+630598=23918100, hh:=1516
+535: w0 11159 {147} h:=23918100+11159=23929259, hh:=1517
+536: set2 12396 {129}("306C) type=0 h:=23929259+630598=24559857, hh:=1557
+539: w0 11159 {147} h:=24559857+11159=24571016, hh:=1558
+540: set2 19491 {129}("4C23) type=0 h:=24571016+630598=25201614, hh:=1598
+543: w0 11159 {147} h:=25201614+11159=25212773, hh:=1599
+544: set2 12387 {129}("3063) type=0 h:=25212773+630598=25843371, hh:=1639
+547: w0 11159 {147} h:=25843371+11159=25854530, hh:=1640
+548: set2 9254 {129}("2426) type=7 h:=25854530+630598=26485128, hh:=1680
+[のほんの一例です。 ちょっと洒落た文書を作ってみたい時や、 人とは一味違う]
+551: pop {142}
+level 2:(h=0,v=3175588,w=0,x=0,y=0,z=0,d=0,hh=0,vv=201)
+552: y3 983040 {164} v:=3175588+983040=4158628, vv:=263
+556: push {141}
+level 2:(h=0,v=4158628,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=263)
+557: set2 19000 {129}("4A38) type=0 h:=0+630598=630598, hh:=40
+560: w2 10789 {149} h:=630598+10789=641387, hh:=41
+563: set2 15729 {129}("3D71) type=0 h:=641387+630598=1271985, hh:=81
+566: w0 10789 {147} h:=1271985+10789=1282774, hh:=82
+567: set2 9330 {129}("2472) type=0 h:=1282774+630598=1913372, hh:=122
+570: w0 10789 {147} h:=1913372+10789=1924161, hh:=123
+571: set2 14958 {129}("3A6E) type=0 h:=1924161+630598=2554759, hh:=163
+574: w3 70380 {150} h:=2554759+70380=2625139, hh:=167
+578: set2 9283 {129}("2443) type=3 h:=2625139+489838=3114977, hh:=198
+581: w0 70380 {147} h:=3114977+70380=3185357, hh:=202
+582: set2 9286 {129}("2446) type=0 h:=3185357+630598=3815955, hh:=242
+585: w2 10789 {149} h:=3815955+10789=3826744, hh:=243
+588: set2 9311 {129}("245F) type=0 h:=3826744+630598=4457342, hh:=283
+591: w0 10789 {147} h:=4457342+10789=4468131, hh:=284
+592: set2 9279 {129}("243F) type=0 h:=4468131+630598=5098729, hh:=324
+595: w0 10789 {147} h:=5098729+10789=5109518, hh:=325
+596: set2 9252 {129}("2424) type=0 h:=5109518+630598=5740116, hh:=365
+599: w0 10789 {147} h:=5740116+10789=5750905, hh:=366
+600: set2 9288 {129}("2448) type=0 h:=5750905+630598=6381503, hh:=406
+603: w0 10789 {147} h:=6381503+10789=6392292, hh:=407
+604: set2 9252 {129}("2424) type=0 h:=6392292+630598=7022890, hh:=447
+607: w3 70380 {150} h:=7022890+70380=7093270, hh:=451
+611: set2 9283 {129}("2443) type=3 h:=7093270+489838=7583108, hh:=482
+614: w0 70380 {147} h:=7583108+70380=7653488, hh:=486
+615: set2 9279 {129}("243F) type=0 h:=7653488+630598=8284086, hh:=526
+618: w2 10789 {149} h:=8284086+10789=8294875, hh:=527
+621: set2 19799 {129}("4D57) type=0 h:=8294875+630598=8925473, hh:=567
+624: w0 10789 {147} h:=8925473+10789=8936262, hh:=568
+625: set2 13665 {129}("3561) type=0 h:=8936262+630598=9566860, hh:=608
+628: w0 10789 {147} h:=9566860+10789=9577649, hh:=609
+629: set2 9291 {129}("244B) type=0 h:=9577649+630598=10208247, hh:=649
+632: w0 10789 {147} h:=10208247+10789=10219036, hh:=649
+633: set2 17786 {129}("457A) type=0 h:=10219036+630598=10849634, hh:=689
+636: w0 10789 {147} h:=10849634+10789=10860423, hh:=690
+637: set2 9256 {129}("2428) type=0 h:=10860423+630598=11491021, hh:=730
+640: w0 10789 {147} h:=11491021+10789=11501810, hh:=731
+641: set2 9286 {129}("2446) type=0 h:=11501810+630598=12132408, hh:=770
+644: w0 10789 {147} h:=12132408+10789=12143197, hh:=771
+645: set2 9263 {129}("242F) type=7 h:=12143197+630598=12773795, hh:=811
+648: w0 10789 {147} h:=12773795+10789=12784584, hh:=812
+649: set2 9324 {129}("246C) type=0 h:=12784584+630598=13415182, hh:=852
+652: w0 10789 {147} h:=13415182+10789=13425971, hh:=852
+653: set2 9323 {129}("246B) type=0 h:=13425971+630598=14056569, hh:=892
+656: w0 10789 {147} h:=14056569+10789=14067358, hh:=893
+657: set2 9280 {129}("2440) type=0 h:=14067358+630598=14697956, hh:=933
+660: w0 10789 {147} h:=14697956+10789=14708745, hh:=934
+661: set2 9265 {129}("2431) type=7 h:=14708745+630598=15339343, hh:=974
+664: w0 10789 {147} h:=15339343+10789=15350132, hh:=974
+665: set2 9294 {129}("244E) type=0 h:=15350132+630598=15980730, hh:=1014
+668: w0 10789 {147} h:=15980730+10789=15991519, hh:=1015
+669: set2 18237 {129}("473D) type=0 h:=15991519+630598=16622117, hh:=1055
+672: w0 10789 {147} h:=16622117+10789=16632906, hh:=1056
+673: set2 20047 {129}("4E4F) type=0 h:=16632906+630598=17263504, hh:=1095
+676: w0 10789 {147} h:=17263504+10789=17274293, hh:=1096
+677: set2 9330 {129}("2472) type=0 h:=17274293+630598=17904891, hh:=1136
+680: w0 10789 {147} h:=17904891+10789=17915680, hh:=1137
+681: set2 15677 {129}("3D3D) type=0 h:=17915680+630598=18546278, hh:=1177
+684: w0 10789 {147} h:=18546278+10789=18557067, hh:=1177
+685: set2 18988 {129}("4A2C) type=0 h:=18557067+630598=19187665, hh:=1217
+688: w0 10789 {147} h:=19187665+10789=19198454, hh:=1218
+689: set2 9291 {129}("244B) type=0 h:=19198454+630598=19829052, hh:=1258
+[文書を作ってみたいといった要求に答えてくれるだけの能力を十分に]
+692: push {141}
+level 3:(h=19829052,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1258,vv=263)
+693: right3 224277 {145} h:=19829052+224277=20053329, hh:=1270
+[ ]
+697: down3 -227432 {159} v:=4158628-227432=3931196, vv:=249
+701: fntdef1 7 {243}: cmr10
+722: fntnum7 {178} current font is cmr10
+723: setchar95 ("5F) h:=20053329+182045=20235374, hh:=1282
+[_]
+724: pop {142}
+level 3:(h=19829052,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1258,vv=263)
+725: fntnum15 {186} current font is min10
+726: set2 18539 {129}("486B) type=0 h:=19829052+630598=20459650, hh:=1298
+[秘]
+729: push {141}
+level 3:(h=20459650,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1298,vv=263)
+730: right3 224277 {145} h:=20459650+224277=20683927, hh:=1310
+[ ]
+734: down3 -227432 {159} v:=4158628-227432=3931196, vv:=249
+738: fntnum7 {178} current font is cmr10
+739: setchar95 ("5F) h:=20683927+182045=20865972, hh:=1322
+[_]
+740: pop {142}
+level 3:(h=20459650,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1298,vv=263)
+741: fntnum15 {186} current font is min10
+742: set2 9313 {129}("2461) type=0 h:=20459650+630598=21090248, hh:=1338
+[め]
+745: push {141}
+level 3:(h=21090248,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1338,vv=263)
+746: right3 224277 {145} h:=21090248+224277=21314525, hh:=1350
+[ ]
+750: down3 -227432 {159} v:=4158628-227432=3931196, vv:=249
+754: fntnum7 {178} current font is cmr10
+755: setchar95 ("5F) h:=21314525+182045=21496570, hh:=1362
+[_]
+756: pop {142}
+level 3:(h=21090248,v=4158628,w=10789,x=0,y=983040,z=0,d=0,hh=1338,vv=263)
+757: fntnum15 {186} current font is min10
+758: set2 9286 {129}("2446) type=0 h:=21090248+630598=21720846, hh:=1378
+761: w0 10789 {147} h:=21720846+10789=21731635, hh:=1378
+762: set2 9252 {129}("2424) type=0 h:=21731635+630598=22362233, hh:=1418
+765: w0 10789 {147} h:=22362233+10789=22373022, hh:=1419
+766: set2 9310 {129}("245E) type=0 h:=22373022+630598=23003620, hh:=1459
+769: w0 10789 {147} h:=23003620+10789=23014409, hh:=1460
+770: set2 9273 {129}("2439) type=7 h:=23014409+630598=23645007, hh:=1500
+773: right2 -31532 {144} h:=23645007-31532=23613475, hh:=1498
+776: set2 8483 {129}("2123) type=9 h:=23613475+330310=23943785, hh:=1519
+779: right3 300288 {145} h:=23943785+300288=24244073, hh:=1536
+[ています。 ]
+783: fntnum7 {178} current font is cmr10
+784: setchar92 ("5C) h:=24244073+327681=24571754, hh:=1557
+[\]
+785: fntnum15 {186} current font is min10
+786: set2 16205 {129}("3F4D) type=0 h:=24571754+630598=25202352, hh:=1597
+789: w0 10789 {147} h:=25202352+10789=25213141, hh:=1598
+790: set2 9294 {129}("244E) type=0 h:=25213141+630598=25843739, hh:=1638
+793: w0 10789 {147} h:=25843739+10789=25854528, hh:=1639
+794: set2 19548 {129}("4C5C) type=0 h:=25854528+630598=26485126, hh:=1679
+[人の目]
+797: pop {142}
+level 2:(h=0,v=4158628,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=263)
+798: y0 983040 {161} v:=4158628+983040=5141668, vv:=326
+799: push {141}
+level 2:(h=0,v=5141668,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=326)
+800: set2 9330 {129}("2472) type=0 h:=0+630598=630598, hh:=40
+803: w2 -3122 {149} h:=630598-3122=627476, hh:=40
+806: set2 12410 {129}("307A) type=0 h:=627476+630598=1258074, hh:=80
+809: w0 -3122 {147} h:=1258074-3122=1254952, hh:=80
+810: set2 9261 {129}("242D) type=0 h:=1254952+630598=1885550, hh:=120
+813: w0 -3122 {147} h:=1885550-3122=1882428, hh:=120
+814: set2 18773 {129}("4955) type=0 h:=1882428+630598=2513026, hh:=160
+817: w0 -3122 {147} h:=2513026-3122=2509904, hh:=160
+818: set2 9265 {129}("2431) type=7 h:=2509904+630598=3140502, hh:=200
+821: w0 -3122 {147} h:=3140502-3122=3137380, hh:=200
+822: set2 9323 {129}("246B) type=0 h:=3137380+630598=3767978, hh:=240
+825: w0 -3122 {147} h:=3767978-3122=3764856, hh:=240
+826: set2 18558 {129}("487E) type=0 h:=3764856+630598=4395454, hh:=280
+829: w0 -3122 {147} h:=4395454-3122=4392332, hh:=280
+830: set2 9271 {129}("2437) type=0 h:=4392332+630598=5022930, hh:=320
+833: w0 -3122 {147} h:=5022930-3122=5019808, hh:=320
+834: set2 9252 {129}("2424) type=0 h:=5019808+630598=5650406, hh:=360
+837: w0 -3122 {147} h:=5650406-3122=5647284, hh:=360
+838: set2 19000 {129}("4A38) type=0 h:=5647284+630598=6277882, hh:=400
+841: w0 -3122 {147} h:=6277882-3122=6274760, hh:=399
+842: set2 15729 {129}("3D71) type=0 h:=6274760+630598=6905358, hh:=439
+[を引き付ける美しい文書]
+845: fntnum7 {178} current font is cmr10
+846: setchar34 ("22) h:=6905358+327681=7233039, hh:=460
+847: right3 151405 {145} h:=7233039+151405=7384444, hh:=468
+[" ]
+851: fntnum15 {186} current font is min10
+852: set2 9330 {129}("2472) type=0 h:=7384444+630598=8015042, hh:=508
+855: w0 -3122 {147} h:=8015042-3122=8011920, hh:=508
+856: set2 14958 {129}("3A6E) type=0 h:=8011920+630598=8642518, hh:=548
+859: w0 -3122 {147} h:=8642518-3122=8639396, hh:=548
+860: set2 9323 {129}("246B) type=0 h:=8639396+630598=9269994, hh:=588
+863: w0 -3122 {147} h:=9269994-3122=9266872, hh:=588
+864: set2 9279 {129}("243F) type=0 h:=9266872+630598=9897470, hh:=628
+867: w0 -3122 {147} h:=9897470-3122=9894348, hh:=628
+868: set2 9313 {129}("2461) type=0 h:=9894348+630598=10524946, hh:=668
+871: w0 -3122 {147} h:=10524946-3122=10521824, hh:=668
+872: set2 9294 {129}("244E) type=0 h:=10521824+630598=11152422, hh:=708
+875: w0 -3122 {147} h:=11152422-3122=11149300, hh:=708
+876: set2 13601 {129}("3521) type=0 h:=11149300+630598=11779898, hh:=748
+879: w0 -3122 {147} h:=11779898-3122=11776776, hh:=748
+880: set2 18237 {129}("473D) type=0 h:=11776776+630598=12407374, hh:=788
+883: w0 -3122 {147} h:=12407374-3122=12404252, hh:=788
+884: set2 9295 {129}("244F) type=0 h:=12404252+630598=13034850, hh:=828
+887: w0 -3122 {147} h:=13034850-3122=13031728, hh:=827
+888: set2 15677 {129}("3D3D) type=0 h:=13031728+630598=13662326, hh:=867
+891: w0 -3122 {147} h:=13662326-3122=13659204, hh:=867
+892: set2 18035 {129}("4673) type=0 h:=13659204+630598=14289802, hh:=907
+895: w0 -3122 {147} h:=14289802-3122=14286680, hh:=907
+896: set2 18988 {129}("4A2C) type=0 h:=14286680+630598=14917278, hh:=947
+899: w0 -3122 {147} h:=14917278-3122=14914156, hh:=947
+900: set2 9291 {129}("244B) type=0 h:=14914156+630598=15544754, hh:=987
+903: w0 -3122 {147} h:=15544754-3122=15541632, hh:=986
+904: set2 15229 {129}("3B7D) type=0 h:=15541632+630598=16172230, hh:=1026
+907: w3 63675 {150} h:=16172230+63675=16235905, hh:=1030
+911: set2 9283 {129}("2443) type=3 h:=16235905+489838=16725743, hh:=1061
+914: w0 63675 {147} h:=16725743+63675=16789418, hh:=1065
+915: set2 9286 {129}("2446) type=0 h:=16789418+630598=17420016, hh:=1105
+918: w2 -3122 {149} h:=17420016-3122=17416894, hh:=1105
+921: set2 9252 {129}("2424) type=0 h:=17416894+630598=18047492, hh:=1145
+924: w0 -3122 {147} h:=18047492-3122=18044370, hh:=1145
+925: set2 9310 {129}("245E) type=0 h:=18044370+630598=18674968, hh:=1185
+928: w0 -3122 {147} h:=18674968-3122=18671846, hh:=1185
+929: set2 9273 {129}("2439) type=7 h:=18671846+630598=19302444, hh:=1225
+932: right2 -31532 {144} h:=19302444-31532=19270912, hh:=1223
+935: set2 8483 {129}("2123) type=9 h:=19270912+330310=19601222, hh:=1244
+938: right3 285984 {145} h:=19601222+285984=19887206, hh:=1260
+942: set2 9557 {129}("2555) type=10 h:=19887206+630598=20517804, hh:=1300
+945: w3 63675 {150} h:=20517804+63675=20581479, hh:=1304
+949: set2 9513 {129}("2529) type=3 h:=20581479+489838=21071317, hh:=1335
+952: w0 63675 {147} h:=21071317+63675=21134992, hh:=1339
+953: set2 9587 {129}("2573) type=0 h:=21134992+630598=21765590, hh:=1379
+956: w2 -3122 {149} h:=21765590-3122=21762468, hh:=1379
+959: set2 9544 {129}("2548) type=10 h:=21762468+630598=22393066, hh:=1419
+962: w0 -3122 {147} h:=22393066-3122=22389944, hh:=1419
+963: set2 9314 {129}("2462) type=0 h:=22389944+630598=23020542, hh:=1459
+966: w0 -3122 {147} h:=23020542-3122=23017420, hh:=1459
+967: set2 12836 {129}("3224) type=0 h:=23017420+630598=23648018, hh:=1499
+970: w0 -3122 {147} h:=23648018-3122=23644896, hh:=1499
+971: set2 19000 {129}("4A38) type=0 h:=23644896+630598=24275494, hh:=1539
+974: w0 -3122 {147} h:=24275494-3122=24272372, hh:=1539
+975: set2 9290 {129}("244A) type=0 h:=24272372+630598=24902970, hh:=1579
+978: w0 -3122 {147} h:=24902970-3122=24899848, hh:=1579
+979: set2 9321 {129}("2469) type=0 h:=24899848+630598=25530446, hh:=1619
+982: w0 -3122 {147} h:=25530446-3122=25527324, hh:=1619
+983: set2 9296 {129}("2450) type=0 h:=25527324+630598=26157922, hh:=1659
+986: w0 -3122 {147} h:=26157922-3122=26154800, hh:=1659
+987: set2 8482 {129}("2122) type=9 h:=26154800+330310=26485110, hh:=1680
+[を作るための機能は十二分に持っています。 フォントも欧文ならば、]
+990: pop {142}
+level 2:(h=0,v=5141668,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=326)
+991: y0 983040 {161} v:=5141668+983040=6124708, vv:=388
+992: push {141}
+level 2:(h=0,v=6124708,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=388)
+993: fntnum7 {178} current font is cmr10
+994: setchar82 ("52) h:=0+482418=482418, hh:=31
+995: setchar111 ("6F) h:=482418+327681=810099, hh:=52
+996: setchar109 ("6D) h:=810099+546135=1356234, hh:=87
+997: setchar97 ("61) h:=1356234+327681=1683915, hh:=108
+998: setchar110 ("6E) h:=1683915+364090=2048005, hh:=131
+[Roman]
+999: fntnum15 {186} current font is min10
+1000: set2 8482 {129}("2122) type=9 h:=2048005+330310=2378315, hh:=152
+1003: w3 274308 {150} h:=2378315+274308=2652623, hh:=168
+[、 ]
+1007: fntdef1 50 {243}: cmti10
+1029: fntnum50 {221} current font is cmti10
+1030: setchar73 ("49) h:=2652623+252676=2905299, hh:=184
+1031: setchar116 ("74) h:=2905299+217723=3123022, hh:=198
+1032: setchar97 ("61) h:=3123022+334960=3457982, hh:=219
+1033: setchar108 ("6C) h:=3457982+167480=3625462, hh:=230
+1034: setchar105 ("69) h:=3625462+200976=3826438, hh:=243
+1035: setchar99 ("63) h:=3826438+301463=4127901, hh:=262
+[Italic]
+1036: fntnum15 {186} current font is min10
+1037: set2 8482 {129}("2122) type=9 h:=4127901+330310=4458211, hh:=283
+1040: w0 274308 {147} h:=4458211+274308=4732519, hh:=300
+[、 ]
+1041: fntdef1 51 {243}: cmcsc10
+1064: fntnum51 {222} current font is cmcsc10
+1065: setchar83 ("53) h:=4732519+400493=5133012, hh:=325
+1066: setchar109 ("6D) h:=5133012+489333=5622345, hh:=356
+1067: setchar97 ("61) h:=5622345+401953=6024298, hh:=381
+1068: setchar108 ("6C) h:=6024298+336416=6360714, hh:=402
+1069: setchar108 ("6C) h:=6360714+336416=6697130, hh:=423
+1070: right3 234348 {145} h:=6697130+234348=6931478, hh:=439
+1074: setchar67 ("43) h:=6931478+515181=7446659, hh:=472
+1075: setchar97 ("61) h:=7446659+401953=7848612, hh:=497
+1076: setchar112 ("70) h:=7848612+365543=8214155, hh:=520
+1077: setchar115 ("73) h:=8214155+300008=8514163, hh:=539
+[Small Caps]
+1078: fntnum15 {186} current font is min10
+1079: set2 8482 {129}("2122) type=9 h:=8514163+330310=8844473, hh:=560
+1082: w0 274308 {147} h:=8844473+274308=9118781, hh:=578
+[、 ]
+1083: fntdef1 52 {243}: cmtt10
+1105: fntnum52 {223} current font is cmtt10
+1106: setchar84 ("54) h:=9118781+344061=9462842, hh:=600
+1107: setchar121 ("79) h:=9462842+344061=9806903, hh:=622
+1108: setchar112 ("70) h:=9806903+344061=10150964, hh:=644
+1109: setchar101 ("65) h:=10150964+344061=10495025, hh:=666
+1110: setchar119 ("77) h:=10495025+344061=10839086, hh:=688
+1111: setchar114 ("72) h:=10839086+344061=11183147, hh:=710
+1112: setchar105 ("69) h:=11183147+344061=11527208, hh:=732
+1113: setchar116 ("74) h:=11527208+344061=11871269, hh:=754
+1114: setchar101 ("65) h:=11871269+344061=12215330, hh:=776
+1115: setchar114 ("72) h:=12215330+344061=12559391, hh:=798
+[Typewriter]
+1116: fntnum15 {186} current font is min10
+1117: set2 8482 {129}("2122) type=9 h:=12559391+330310=12889701, hh:=818
+1120: w0 274308 {147} h:=12889701+274308=13164009, hh:=834
+[、 ]
+1121: fntnum49 {220} current font is cmbx10
+1122: setchar66 ("42) h:=13164009+536118=13700127, hh:=868
+1123: setchar111 ("6F) h:=13700127+376830=14076957, hh:=892
+1124: setchar108 ("6C) h:=14076957+209350=14286307, hh:=905
+1125: setchar100 ("64) h:=14286307+418700=14705007, hh:=932
+[Bold]
+1126: fntnum15 {186} current font is min10
+1127: set2 8482 {129}("2122) type=9 h:=14705007+330310=15035317, hh:=953
+1130: w0 274308 {147} h:=15035317+274308=15309625, hh:=970
+[、 ]
+1131: fntdef1 53 {243}: cmsl10
+1153: fntnum53 {224} current font is cmsl10
+1154: setchar83 ("53) h:=15309625+364090=15673715, hh:=993
+1155: setchar108 ("6C) h:=15673715+182045=15855760, hh:=1005
+1156: setchar97 ("61) h:=15855760+327681=16183441, hh:=1026
+1157: setchar110 ("6E) h:=16183441+364090=16547531, hh:=1049
+1158: right2 -18205 {144} h:=16547531-18205=16529326, hh:=1048
+1161: setchar116 ("74) h:=16529326+254863=16784189, hh:=1064
+1162: setchar101 ("65) h:=16784189+291271=17075460, hh:=1082
+1163: setchar100 ("64) h:=17075460+364090=17439550, hh:=1105
+[Slanted]
+1164: fntnum15 {186} current font is min10
+1165: set2 8482 {129}("2122) type=9 h:=17439550+330310=17769860, hh:=1126
+1168: right3 274307 {145} h:=17769860+274307=18044167, hh:=1143
+[、 ]
+1172: fntdef1 54 {243}: cmss10
+1194: fntnum54 {225} current font is cmss10
+1195: setchar83 ("53) h:=18044167+364090=18408257, hh:=1166
+1196: setchar97 ("61) h:=18408257+314938=18723195, hh:=1186
+1197: setchar110 ("6E) h:=18723195+338603=19061798, hh:=1207
+1198: setchar115 ("73) h:=19061798+251221=19313019, hh:=1223
+1199: right3 205853 {145} h:=19313019+205853=19518872, hh:=1236
+1203: setchar83 ("53) h:=19518872+364090=19882962, hh:=1259
+1204: setchar101 ("65) h:=19882962+291271=20174233, hh:=1277
+1205: setchar114 ("72) h:=20174233+223916=20398149, hh:=1291
+1206: setchar105 ("69) h:=20398149+156558=20554707, hh:=1301
+1207: setchar102 ("66) h:=20554707+200250=20754957, hh:=1314
+1208: right3 146309 {145} h:=20754957+146309=20901266, hh:=1324
+[Sans Serif ]
+1212: fntnum15 {186} current font is min10
+1213: set2 9290 {129}("244A) type=0 h:=20901266+630598=21531864, hh:=1364
+1216: w2 -5670 {149} h:=21531864-5670=21526194, hh:=1364
+1219: set2 9289 {129}("2449) type=0 h:=21526194+630598=22156792, hh:=1404
+1222: w0 -5670 {147} h:=22156792-5670=22151122, hh:=1404
+1223: set2 16959 {129}("423F) type=0 h:=22151122+630598=22781720, hh:=1444
+1226: w0 -5670 {147} h:=22781720-5670=22776050, hh:=1444
+1227: set2 19789 {129}("4D4D) type=0 h:=22776050+630598=23406648, hh:=1484
+1230: w0 -5670 {147} h:=23406648-5670=23400978, hh:=1484
+1231: set2 9287 {129}("2447) type=0 h:=23400978+630598=24031576, hh:=1524
+1234: w0 -5670 {147} h:=24031576-5670=24025906, hh:=1524
+1235: set2 9273 {129}("2439) type=7 h:=24025906+630598=24656504, hh:=1564
+1238: right2 -31532 {144} h:=24656504-31532=24624972, hh:=1562
+1241: set2 8483 {129}("2123) type=9 h:=24624972+330310=24955282, hh:=1583
+1244: right3 274308 {145} h:=24955282+274308=25229590, hh:=1598
+1248: set2 9506 {129}("2522) type=10 h:=25229590+630598=25860188, hh:=1638
+1251: w0 -5670 {147} h:=25860188-5670=25854518, hh:=1638
+1252: set2 9529 {129}("2539) type=0 h:=25854518+630598=26485116, hh:=1678
+[など多様です。 アス]
+1255: pop {142}
+level 2:(h=0,v=6124708,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=388)
+1256: y0 983040 {161} v:=6124708+983040=7107748, vv:=450
+1257: push {141}
+level 2:(h=0,v=7107748,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=450)
+1258: set2 9517 {129}("252D) type=0 h:=0+630598=630598, hh:=40
+1261: w2 -2089 {149} h:=630598-2089=628509, hh:=40
+1264: set2 8508 {129}("213C) type=0 h:=628509+630598=1259107, hh:=80
+1267: w0 -2089 {147} h:=1259107-2089=1257018, hh:=80
+1268: set2 18044 {129}("467C) type=0 h:=1257018+630598=1887616, hh:=120
+1271: w0 -2089 {147} h:=1887616-2089=1885527, hh:=120
+1272: set2 19292 {129}("4B5C) type=0 h:=1885527+630598=2516125, hh:=160
+1275: w0 -2089 {147} h:=2516125-2089=2514036, hh:=160
+1276: set2 14444 {129}("386C) type=0 h:=2514036+630598=3144634, hh:=200
+1279: right3 153472 {145} h:=3144634+153472=3298106, hh:=209
+[キー日本語 ]
+1283: fntnum7 {178} current font is cmr10
+1284: setchar76 ("4C) h:=3298106+409601=3707707, hh:=235
+[L]
+1285: push {141}
+level 3:(h=3707707,v=7107748,w=-2089,x=0,y=983040,z=0,d=0,hh=235,vv=450)
+1286: down3 -134347 {159} v:=7107748-134347=6973401, vv:=441
+1290: push {141}
+level 4:(h=3707707,v=6973401,w=-2089,x=0,y=983040,z=0,d=0,hh=235,vv=441)
+1291: right3 -235930 {145} h:=3707707-235930=3471777, hh:=220
+1295: fntdef1 6 {243}: cmr7
+1315: fntnum6 {177} current font is cmr7
+1316: setchar65 ("41) h:=3471777+386847=3858624, hh:=245
+[A]
+1317: pop {142}
+level 4:(h=3707707,v=6973401,w=-2089,x=0,y=983040,z=0,d=0,hh=235,vv=441)
+1318: pop {142}
+level 3:(h=3707707,v=7107748,w=-2089,x=0,y=983040,z=0,d=0,hh=235,vv=450)
+1319: right3 52617 {145} h:=3707707+52617=3760324, hh:=238
+1323: fntnum7 {178} current font is cmr10
+1324: setchar84 ("54) h:=3760324+473316=4233640, hh:=268
+[T]
+1325: push {141}
+level 3:(h=4233640,v=7107748,w=-2089,x=0,y=983040,z=0,d=0,hh=268,vv=450)
+1326: right3 -109250 {145} h:=4233640-109250=4124390, hh:=261
+1330: down3 141084 {159} v:=7107748+141084=7248832, vv:=459
+1334: setchar69 ("45) h:=4124390+446010=4570400, hh:=289
+[E]
+1335: pop {142}
+level 3:(h=4233640,v=7107748,w=-2089,x=0,y=983040,z=0,d=0,hh=268,vv=450)
+1336: right3 254840 {145} h:=4233640+254840=4488480, hh:=284
+1340: setchar88 ("58) h:=4488480+491521=4980001, hh:=315
+1341: right3 153471 {145} h:=4980001+153471=5133472, hh:=325
+[ X ]
+1345: fntnum15 {186} current font is min10
+1346: set2 9295 {129}("244F) type=0 h:=5133472+630598=5764070, hh:=365
+1349: w0 -2089 {147} h:=5764070-2089=5761981, hh:=365
+1350: set2 9279 {129}("243F) type=0 h:=5761981+630598=6392579, hh:=405
+1353: right3 65894 {145} h:=6392579+65894=6458473, hh:=409
+1357: set2 9283 {129}("2443) type=3 h:=6458473+489838=6948311, hh:=440
+1360: right3 65893 {145} h:=6948311+65893=7014204, hh:=444
+1364: set2 9279 {129}("243F) type=0 h:=7014204+630598=7644802, hh:=484
+1367: w0 -2089 {147} h:=7644802-2089=7642713, hh:=484
+1368: set2 12396 {129}("306C) type=0 h:=7642713+630598=8273311, hh:=524
+1371: w0 -2089 {147} h:=8273311-2089=8271222, hh:=524
+1372: set2 19303 {129}("4B67) type=0 h:=8271222+630598=8901820, hh:=564
+1375: w0 -2089 {147} h:=8901820-2089=8899731, hh:=564
+1376: set2 9294 {129}("244E) type=0 h:=8899731+630598=9530329, hh:=604
+1379: w0 -2089 {147} h:=9530329-2089=9528240, hh:=604
+1380: set2 15466 {129}("3C6A) type=0 h:=9528240+630598=10158838, hh:=644
+1383: w0 -2089 {147} h:=10158838-2089=10156749, hh:=644
+1384: set2 15206 {129}("3B66) type=0 h:=10156749+630598=10787347, hh:=684
+1387: w0 -2089 {147} h:=10787347-2089=10785258, hh:=684
+1388: set2 9259 {129}("242B) type=0 h:=10785258+630598=11415856, hh:=724
+1391: w0 -2089 {147} h:=11415856-2089=11413767, hh:=724
+1392: set2 9321 {129}("2469) type=0 h:=11413767+630598=12044365, hh:=764
+1395: right2 -2088 {144} h:=12044365-2088=12042277, hh:=764
+1398: set2 8482 {129}("2122) type=9 h:=12042277+330310=12372587, hh:=785
+1401: right3 290717 {145} h:=12372587+290717=12663304, hh:=802
+1405: set2 16244 {129}("3F74) type=0 h:=12663304+630598=13293902, hh:=842
+1408: w0 -2089 {147} h:=13293902-2089=13291813, hh:=842
+1409: set2 18740 {129}("4934) type=0 h:=13291813+630598=13922411, hh:=882
+1412: w0 -2089 {147} h:=13922411-2089=13920322, hh:=882
+1413: set2 9562 {129}("255A) type=0 h:=13920322+630598=14550920, hh:=922
+1416: w0 -2089 {147} h:=14550920-2089=14548831, hh:=922
+1417: set2 8508 {129}("213C) type=0 h:=14548831+630598=15179429, hh:=962
+1420: w0 -2089 {147} h:=15179429-2089=15177340, hh:=962
+1421: set2 9528 {129}("2538) type=0 h:=15177340+630598=15807938, hh:=1002
+1424: w0 -2089 {147} h:=15807938-2089=15805849, hh:=1002
+1425: set2 9291 {129}("244B) type=0 h:=15805849+630598=16436447, hh:=1042
+1428: w0 -2089 {147} h:=16436447-2089=16434358, hh:=1042
+1429: set2 9258 {129}("242A) type=0 h:=16434358+630598=17064956, hh:=1082
+1432: w0 -2089 {147} h:=17064956-2089=17062867, hh:=1082
+1433: set2 9320 {129}("2468) type=0 h:=17062867+630598=17693465, hh:=1122
+1436: w0 -2089 {147} h:=17693465-2089=17691376, hh:=1122
+1437: set2 9302 {129}("2456) type=0 h:=17691376+630598=18321974, hh:=1162
+1440: w0 -2089 {147} h:=18321974-2089=18319885, hh:=1162
+1441: set2 20288 {129}("4F40) type=0 h:=18319885+630598=18950483, hh:=1202
+1444: w0 -2089 {147} h:=18950483-2089=18948394, hh:=1202
+1445: set2 19000 {129}("4A38) type=0 h:=18948394+630598=19578992, hh:=1242
+1448: w0 -2089 {147} h:=19578992-2089=19576903, hh:=1242
+1449: set2 9316 {129}("2464) type=0 h:=19576903+630598=20207501, hh:=1282
+1452: w0 -2089 {147} h:=20207501-2089=20205412, hh:=1282
+1453: set2 13627 {129}("353B) type=0 h:=20205412+630598=20836010, hh:=1322
+1456: w0 -2089 {147} h:=20836010-2089=20833921, hh:=1322
+1457: set2 15697 {129}("3D51) type=0 h:=20833921+630598=21464519, hh:=1362
+1460: w0 -2089 {147} h:=21464519-2089=21462430, hh:=1361
+1461: set2 19000 {129}("4A38) type=0 h:=21462430+630598=22093028, hh:=1401
+1464: w0 -2089 {147} h:=22093028-2089=22090939, hh:=1401
+1465: set2 15729 {129}("3D71) type=0 h:=22090939+630598=22721537, hh:=1441
+1468: w0 -2089 {147} h:=22721537-2089=22719448, hh:=1441
+1469: set2 9310 {129}("245E) type=0 h:=22719448+630598=23350046, hh:=1481
+1472: w0 -2089 {147} h:=23350046-2089=23347957, hh:=1481
+1473: set2 9287 {129}("2447) type=0 h:=23347957+630598=23978555, hh:=1521
+1476: w0 -2089 {147} h:=23978555-2089=23976466, hh:=1521
+1477: set2 8482 {129}("2122) type=9 h:=23976466+330310=24306776, hh:=1542
+1480: right3 290718 {145} h:=24306776+290718=24597494, hh:=1558
+1484: set2 9277 {129}("243D) type=0 h:=24597494+630598=25228092, hh:=1598
+1487: w0 -2089 {147} h:=25228092-2089=25226003, hh:=1598
+1488: set2 9324 {129}("246C) type=0 h:=25226003+630598=25856601, hh:=1638
+1491: w0 -2089 {147} h:=25856601-2089=25854512, hh:=1638
+1492: set2 9321 {129}("2469) type=0 h:=25854512+630598=26485110, hh:=1678
+[はたった一枚の手紙から、 数百ページにおよぶ論文や技術文書まで、 それら]
+1495: pop {142}
+level 2:(h=0,v=7107748,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=450)
+1496: y0 983040 {161} v:=7107748+983040=8090788, vv:=512
+1497: push {141}
+level 2:(h=0,v=8090788,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=512)
+1498: set2 9273 {129}("2439) type=7 h:=0+630598=630598, hh:=40
+1501: set2 9305 {129}("2459) type=0 h:=630598+630598=1261196, hh:=80
+1504: set2 9286 {129}("2446) type=0 h:=1261196+630598=1891794, hh:=120
+1507: set2 9330 {129}("2472) type=0 h:=1891794+630598=2522392, hh:=160
+1510: set2 13360 {129}("3430) type=0 h:=2522392+630598=3152990, hh:=200
+1513: set2 16692 {129}("4134) type=0 h:=3152990+630598=3783588, hh:=240
+1516: set2 9291 {129}("244B) type=0 h:=3783588+630598=4414186, hh:=280
+1519: set2 9515 {129}("252B) type=0 h:=4414186+630598=5044784, hh:=320
+1522: set2 9552 {129}("2550) type=0 h:=5044784+630598=5675382, hh:=360
+1525: set2 8508 {129}("213C) type=0 h:=5675382+630598=6305980, hh:=400
+1528: set2 9252 {129}("2424) type=0 h:=6305980+630598=6936578, hh:=440
+1531: set2 9279 {129}("243F) type=0 h:=6936578+630598=7567176, hh:=480
+1534: set2 9271 {129}("2437) type=0 h:=7567176+630598=8197774, hh:=520
+1537: set2 9310 {129}("245E) type=0 h:=8197774+630598=8828372, hh:=560
+1540: set2 9273 {129}("2439) type=7 h:=8828372+630598=9458970, hh:=600
+1543: right2 -31532 {144} h:=9458970-31532=9427438, hh:=598
+1546: set2 8483 {129}("2123) type=9 h:=9427438+330310=9757748, hh:=619
+[すべてを完全にカバーいたします。]
+1549: pop {142}
+level 2:(h=0,v=8090788,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=512)
+1550: down3 903646 {159} v:=8090788+903646=8994434, vv:=570
+1554: putrule {137} height 26214, width 26485116 (2x1678 pixels)
+1563: down3 4602788 {159} v:=8994434+4602788=13597222, vv:=861
+1567: push {141}
+level 2:(h=0,v=13597222,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=861)
+1568: push {141}
+level 3:(h=0,v=13597222,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=861)
+1569: right3 3412158 {145} h:=0+3412158=3412158, hh:=216
+[ ]
+1573: down3 -3947428 {159} v:=13597222-3947428=9649794, vv:=611
+1577: dir 1 {255}
+1579: down4 -19660800 {160} h:=3412158+19660800=23072958, hh:=1461
+1584: push {141}
+level 4:(h=23072958,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1461,vv=611)
+1585: fntdef1 14 {243}: tmin10
+1607: fntnum14 {185} current font is tmin10
+1608: set2 17969 {129}("4631) type=0 v:=9649794+630598=10280392, vv:=651
+1611: set2 9272 {129}("2438) type=0 v:=10280392+630598=10910990, vv:=691
+1614: set2 9314 {129}("2462) type=0 v:=10910990+630598=11541588, vv:=731
+1617: set2 9294 {129}("244E) type=0 v:=11541588+630598=12172186, vv:=771
+1620: set2 9330 {129}("2472) type=0 v:=12172186+630598=12802784, vv:=811
+1623: set2 15684 {129}("3D44) type=0 v:=12802784+630598=13433382, vv:=851
+1626: set2 15729 {129}("3D71) type=0 v:=13433382+630598=14063980, vv:=891
+1629: set2 9261 {129}("242D) type=0 v:=14063980+630598=14694578, vv:=931
+1632: set2 9291 {129}("244B) type=0 v:=14694578+630598=15325176, vv:=971
+1635: set2 9271 {129}("2437) type=0 v:=15325176+630598=15955774, vv:=1011
+1638: set2 9286 {129}("2446) type=0 v:=15955774+630598=16586372, vv:=1051
+1641: set2 15696 {129}("3D50) type=0 v:=16586372+630598=17216970, vv:=1091
+[同じものを縦書きにして出]
+1644: pop {142}
+level 4:(h=23072958,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1461,vv=611)
+1645: y0 983040 {161} h:=23072958-983040=22089918, hh:=1399
+1646: push {141}
+level 4:(h=22089918,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1399,vv=611)
+1647: set2 20047 {129}("4E4F) type=0 v:=9649794+630598=10280392, vv:=651
+1650: set2 9271 {129}("2437) type=0 v:=10280392+630598=10910990, vv:=691
+1653: set2 9286 {129}("2446) type=0 v:=10910990+630598=11541588, vv:=731
+1656: set2 9311 {129}("245F) type=0 v:=11541588+630598=12172186, vv:=771
+1659: set2 9310 {129}("245E) type=0 v:=12172186+630598=12802784, vv:=811
+1662: set2 9271 {129}("2437) type=0 v:=12802784+630598=13433382, vv:=851
+1665: w3 70380 {150} v:=13433382+70380=13503762, vv:=855
+1669: set2 9319 {129}("2467) type=3 v:=13503762+489838=13993600, vv:=886
+1672: w0 70380 {147} v:=13993600+70380=14063980, vv:=890
+1673: set2 9254 {129}("2426) type=0 v:=14063980+630598=14694578, vv:=930
+1676: set2 8483 {129}("2123) type=2 v:=14694578+315298=15009876, vv:=950
+[力してみましょう。]
+1679: pop {142}
+level 4:(h=22089918,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1399,vv=611)
+1680: y0 983040 {161} h:=22089918-983040=21106878, hh:=1337
+1681: push {141}
+level 4:(h=21106878,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1337,vv=611)
+1682: set2 9267 {129}("2433) type=0 v:=9649794+630598=10280392, vv:=651
+1685: w2 17258 {149} v:=10280392+17258=10297650, vv:=652
+1688: set2 9324 {129}("246C) type=0 v:=10297650+630598=10928248, vv:=692
+1691: w0 17258 {147} v:=10928248+17258=10945506, vv:=693
+1692: set2 9295 {129}("244F) type=0 v:=10945506+630598=11576104, vv:=733
+1695: w3 200795 {150} v:=11576104+200795=11776899, vv:=746
+[これは ]
+1699: down3 141888 {159} h:=21106878-141888=20964990, hh:=1328
+1703: fntnum49 {220} current font is cmbx10
+1704: setchar84 ("54) v:=11776899+524285=12301184, vv:=779
+[T]
+1705: push {141}
+level 5:(h=20964990,v=12301184,w=200795,x=0,y=983040,z=0,d=1,hh=1328,vv=779)
+1706: right3 -125636 {145} v:=12301184-125636=12175548, vv:=771
+1710: down3 145635 {159} h:=20964990-145635=20819355, hh:=1319
+1714: setchar69 ("45) v:=12175548+495158=12670706, vv:=802
+[E]
+1715: pop {142}
+level 5:(h=20964990,v=12301184,w=200795,x=0,y=983040,z=0,d=1,hh=1328,vv=779)
+1716: right3 275315 {145} v:=12301184+275315=12576499, vv:=797
+1720: setchar88 ("58) v:=12576499+569796=13146295, vv:=833
+1721: w0 200795 {147} v:=13146295+200795=13347090, vv:=845
+[ X ]
+1722: down3 -141888 {159} h:=20964990+141888=21106878, hh:=1337
+1726: fntnum14 {185} current font is tmin10
+1727: set2 9294 {129}("244E) type=0 v:=13347090+630598=13977688, vv:=885
+1730: w2 17258 {149} v:=13977688+17258=13994946, vv:=886
+1733: set2 9307 {129}("245B) type=0 v:=13994946+630598=14625544, vv:=926
+1736: w0 17258 {147} v:=14625544+17258=14642802, vv:=927
+1737: set2 9331 {129}("2473) type=0 v:=14642802+630598=15273400, vv:=967
+1740: w0 17258 {147} v:=15273400+17258=15290658, vv:=968
+1741: set2 9294 {129}("244E) type=0 v:=15290658+630598=15921256, vv:=1008
+1744: w0 17258 {147} v:=15921256+17258=15938514, vv:=1009
+1745: set2 12396 {129}("306C) type=0 v:=15938514+630598=16569112, vv:=1049
+1748: w0 17258 {147} v:=16569112+17258=16586370, vv:=1050
+1749: set2 20067 {129}("4E63) type=0 v:=16586370+630598=17216968, vv:=1090
+[のほんの一例]
+1752: pop {142}
+level 4:(h=21106878,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1337,vv=611)
+1753: y0 983040 {161} h:=21106878-983040=20123838, hh:=1275
+1754: push {141}
+level 4:(h=20123838,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1275,vv=611)
+1755: set2 9287 {129}("2447) type=0 v:=9649794+630598=10280392, vv:=651
+1758: x2 6651 {154} v:=10280392+6651=10287043, vv:=651
+1761: set2 9273 {129}("2439) type=0 v:=10287043+630598=10917641, vv:=691
+1764: set2 8483 {129}("2123) type=2 v:=10917641+315298=11232939, vv:=711
+1767: right3 345774 {145} v:=11232939+345774=11578713, vv:=733
+1771: set2 9281 {129}("2441) type=0 v:=11578713+630598=12209311, vv:=773
+1774: w3 70380 {150} v:=12209311+70380=12279691, vv:=777
+1778: set2 9319 {129}("2467) type=3 v:=12279691+489838=12769529, vv:=808
+1781: w0 70380 {147} v:=12769529+70380=12839909, vv:=812
+1782: set2 9283 {129}("2443) type=3 v:=12839909+489838=13329747, vv:=843
+1785: w0 70380 {147} v:=13329747+70380=13400127, vv:=847
+1786: set2 9288 {129}("2448) type=0 v:=13400127+630598=14030725, vv:=887
+1789: x0 6651 {152} v:=14030725+6651=14037376, vv:=887
+1790: set2 24111 {129}("5E2F) type=0 v:=14037376+630598=14667974, vv:=927
+1793: x0 6651 {152} v:=14667974+6651=14674625, vv:=928
+1794: set2 19822 {129}("4D6E) type=0 v:=14674625+630598=15305223, vv:=968
+1797: x0 6651 {152} v:=15305223+6651=15311874, vv:=968
+1798: set2 9279 {129}("243F) type=0 v:=15311874+630598=15942472, vv:=1008
+1801: x0 6651 {152} v:=15942472+6651=15949123, vv:=1008
+1802: set2 19000 {129}("4A38) type=0 v:=15949123+630598=16579721, vv:=1048
+1805: x0 6651 {152} v:=16579721+6651=16586372, vv:=1049
+1806: set2 15729 {129}("3D71) type=0 v:=16586372+630598=17216970, vv:=1089
+[です。 ちょっと洒落た文書]
+1809: pop {142}
+level 4:(h=20123838,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1275,vv=611)
+1810: y0 983040 {161} h:=20123838-983040=19140798, hh:=1212
+1811: push {141}
+level 4:(h=19140798,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1212,vv=611)
+1812: set2 9330 {129}("2472) type=0 v:=9649794+630598=10280392, vv:=651
+1815: x2 -28771 {154} v:=10280392-28771=10251621, vv:=649
+1818: set2 14958 {129}("3A6E) type=0 v:=10251621+630598=10882219, vv:=689
+1821: w2 8585 {149} v:=10882219+8585=10890804, vv:=690
+1824: set2 9283 {129}("2443) type=3 v:=10890804+489838=11380642, vv:=721
+1827: w0 8585 {147} v:=11380642+8585=11389227, vv:=722
+1828: set2 9286 {129}("2446) type=0 v:=11389227+630598=12019825, vv:=762
+1831: x0 -28771 {152} v:=12019825-28771=11991054, vv:=760
+1832: set2 9311 {129}("245F) type=0 v:=11991054+630598=12621652, vv:=800
+1835: x0 -28771 {152} v:=12621652-28771=12592881, vv:=798
+1836: set2 9279 {129}("243F) type=0 v:=12592881+630598=13223479, vv:=838
+1839: x0 -28771 {152} v:=13223479-28771=13194708, vv:=836
+1840: set2 9252 {129}("2424) type=0 v:=13194708+630598=13825306, vv:=876
+1843: x0 -28771 {152} v:=13825306-28771=13796535, vv:=874
+1844: set2 15230 {129}("3B7E) type=0 v:=13796535+630598=14427133, vv:=914
+1847: x0 -28771 {152} v:=14427133-28771=14398362, vv:=912
+1848: set2 9316 {129}("2464) type=0 v:=14398362+630598=15028960, vv:=952
+1851: set2 8482 {129}("2122) type=2 v:=15028960+315298=15344258, vv:=972
+1854: right3 38460 {145} v:=15344258+38460=15382718, vv:=974
+1858: set2 16205 {129}("3F4D) type=0 v:=15382718+630598=16013316, vv:=1014
+1861: x0 -28771 {152} v:=16013316-28771=15984545, vv:=1012
+1862: set2 9288 {129}("2448) type=0 v:=15984545+630598=16615143, vv:=1052
+1865: x0 -28771 {152} v:=16615143-28771=16586372, vv:=1050
+1866: set2 9295 {129}("244F) type=0 v:=16586372+630598=17216970, vv:=1090
+[を作ってみたい時や、人とは]
+1869: pop {142}
+level 4:(h=19140798,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1212,vv=611)
+1870: y0 983040 {161} h:=19140798-983040=18157758, hh:=1150
+1871: push {141}
+level 4:(h=18157758,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1150,vv=611)
+1872: set2 12396 {129}("306C) type=0 v:=9649794+630598=10280392, vv:=651
+1875: set2 19491 {129}("4C23) type=0 v:=10280392+630598=10910990, vv:=691
+1878: set2 12387 {129}("3063) type=0 v:=10910990+630598=11541588, vv:=731
+1881: set2 9254 {129}("2426) type=0 v:=11541588+630598=12172186, vv:=771
+1884: set2 19000 {129}("4A38) type=0 v:=12172186+630598=12802784, vv:=811
+1887: set2 15729 {129}("3D71) type=0 v:=12802784+630598=13433382, vv:=851
+1890: set2 9330 {129}("2472) type=0 v:=13433382+630598=14063980, vv:=891
+1893: set2 14958 {129}("3A6E) type=0 v:=14063980+630598=14694578, vv:=931
+1896: w3 70380 {150} v:=14694578+70380=14764958, vv:=935
+1900: set2 9283 {129}("2443) type=3 v:=14764958+489838=15254796, vv:=966
+1903: w0 70380 {147} v:=15254796+70380=15325176, vv:=970
+1904: set2 9286 {129}("2446) type=0 v:=15325176+630598=15955774, vv:=1010
+1907: set2 9311 {129}("245F) type=0 v:=15955774+630598=16586372, vv:=1050
+1910: set2 9279 {129}("243F) type=0 v:=16586372+630598=17216970, vv:=1090
+[一味違う文書を作ってみた]
+1913: pop {142}
+level 4:(h=18157758,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1150,vv=611)
+1914: y0 983040 {161} h:=18157758-983040=17174718, hh:=1088
+1915: push {141}
+level 4:(h=17174718,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1088,vv=611)
+1916: set2 9252 {129}("2424) type=0 v:=9649794+630598=10280392, vv:=651
+1919: set2 9288 {129}("2448) type=0 v:=10280392+630598=10910990, vv:=691
+1922: set2 9252 {129}("2424) type=0 v:=10910990+630598=11541588, vv:=731
+1925: w3 70380 {150} v:=11541588+70380=11611968, vv:=735
+1929: set2 9283 {129}("2443) type=3 v:=11611968+489838=12101806, vv:=766
+1932: w0 70380 {147} v:=12101806+70380=12172186, vv:=770
+1933: set2 9279 {129}("243F) type=0 v:=12172186+630598=12802784, vv:=810
+1936: set2 19799 {129}("4D57) type=0 v:=12802784+630598=13433382, vv:=850
+1939: set2 13665 {129}("3561) type=0 v:=13433382+630598=14063980, vv:=890
+1942: set2 9291 {129}("244B) type=0 v:=14063980+630598=14694578, vv:=930
+1945: set2 17786 {129}("457A) type=0 v:=14694578+630598=15325176, vv:=970
+1948: set2 9256 {129}("2428) type=0 v:=15325176+630598=15955774, vv:=1010
+1951: set2 9286 {129}("2446) type=0 v:=15955774+630598=16586372, vv:=1050
+1954: set2 9263 {129}("242F) type=0 v:=16586372+630598=17216970, vv:=1090
+[いといった要求に答えてく]
+1957: pop {142}
+level 4:(h=17174718,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1088,vv=611)
+1958: y0 983040 {161} h:=17174718-983040=16191678, hh:=1026
+1959: push {141}
+level 4:(h=16191678,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=611)
+1960: set2 9324 {129}("246C) type=0 v:=9649794+630598=10280392, vv:=651
+1963: set2 9323 {129}("246B) type=0 v:=10280392+630598=10910990, vv:=691
+1966: set2 9280 {129}("2440) type=0 v:=10910990+630598=11541588, vv:=731
+1969: set2 9265 {129}("2431) type=0 v:=11541588+630598=12172186, vv:=771
+1972: set2 9294 {129}("244E) type=0 v:=12172186+630598=12802784, vv:=811
+1975: set2 18237 {129}("473D) type=0 v:=12802784+630598=13433382, vv:=851
+1978: set2 20047 {129}("4E4F) type=0 v:=13433382+630598=14063980, vv:=891
+1981: set2 9330 {129}("2472) type=0 v:=14063980+630598=14694578, vv:=931
+1984: set2 15677 {129}("3D3D) type=0 v:=14694578+630598=15325176, vv:=971
+1987: set2 18988 {129}("4A2C) type=0 v:=15325176+630598=15955774, vv:=1011
+1990: set2 9291 {129}("244B) type=0 v:=15955774+630598=16586372, vv:=1051
+[れるだけの能力を十分に]
+1993: push {141}
+level 5:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+1994: push {141}
+level 6:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+1995: down3 -465455 {159} h:=16191678+465455=16657133, hh:=1055
+1999: push {141}
+level 7:(h=16657133,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1055,vv=1051)
+2000: right3 383483 {145} v:=16586372+383483=16969855, vv:=1075
+[ ]
+2004: down3 165155 {159} h:=16657133-165155=16491978, hh:=1045
+2008: dir 0 {255}
+2010: fntnum15 {186} current font is min10
+2011: set2 8482 {129}("2122) type=9 h:=16491978+330310=16822288, hh:=1066
+[、]
+2014: pop {142}
+level 7:(h=16657133,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1055,vv=1051)
+2015: down3 465455 {159} h:=16657133-465455=16191678, hh:=1026
+2019: push {141}
+level 7:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+2020: fntnum14 {185} current font is tmin10
+2021: set2 8481 {129}("2121) type=0 v:=16586372+630598=17216970, vv:=1091
+[ ]
+2024: pop {142}
+level 7:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+2025: pop {142}
+level 6:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+2026: pop {142}
+level 5:(h=16191678,v=16586372,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=1051)
+2027: set2 18539 {129}("486B) type=0 v:=16586372+630598=17216970, vv:=1091
+[秘]
+2030: pop {142}
+level 4:(h=16191678,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=1026,vv=611)
+2031: y0 983040 {161} h:=16191678-983040=15208638, hh:=963
+2032: push {141}
+level 4:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2033: push {141}
+level 5:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2034: push {141}
+level 6:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2035: down3 -465455 {159} h:=15208638+465455=15674093, hh:=992
+2039: push {141}
+level 7:(h=15674093,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=992,vv=611)
+2040: right3 383483 {145} v:=9649794+383483=10033277, vv:=636
+[ ]
+2044: down3 165155 {159} h:=15674093-165155=15508938, hh:=982
+2048: dir 0 {255}
+2050: fntnum15 {186} current font is min10
+2051: set2 8482 {129}("2122) type=9 h:=15508938+330310=15839248, hh:=1003
+[、]
+2054: pop {142}
+level 7:(h=15674093,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=992,vv=611)
+2055: down3 465455 {159} h:=15674093-465455=15208638, hh:=963
+2059: push {141}
+level 7:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2060: fntnum14 {185} current font is tmin10
+2061: set2 8481 {129}("2121) type=0 v:=9649794+630598=10280392, vv:=651
+[ ]
+2064: pop {142}
+level 7:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2065: pop {142}
+level 6:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2066: pop {142}
+level 5:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2067: set2 9313 {129}("2461) type=0 v:=9649794+630598=10280392, vv:=651
+[め]
+2070: push {141}
+level 5:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2071: push {141}
+level 6:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2072: down3 -465455 {159} h:=15208638+465455=15674093, hh:=992
+2076: push {141}
+level 7:(h=15674093,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=992,vv=651)
+2077: right3 383483 {145} v:=10280392+383483=10663875, vv:=675
+[ ]
+2081: down3 165155 {159} h:=15674093-165155=15508938, hh:=982
+2085: dir 0 {255}
+2087: fntnum15 {186} current font is min10
+2088: set2 8482 {129}("2122) type=9 h:=15508938+330310=15839248, hh:=1003
+[、]
+2091: pop {142}
+level 7:(h=15674093,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=992,vv=651)
+2092: down3 465455 {159} h:=15674093-465455=15208638, hh:=963
+2096: push {141}
+level 7:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2097: fntnum14 {185} current font is tmin10
+2098: set2 8481 {129}("2121) type=0 v:=10280392+630598=10910990, vv:=691
+[ ]
+2101: pop {142}
+level 7:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2102: pop {142}
+level 6:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2103: pop {142}
+level 5:(h=15208638,v=10280392,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=651)
+2104: set2 9286 {129}("2446) type=0 v:=10280392+630598=10910990, vv:=691
+2107: w2 -17892 {149} v:=10910990-17892=10893098, vv:=690
+2110: set2 9252 {129}("2424) type=0 v:=10893098+630598=11523696, vv:=730
+2113: w0 -17892 {147} v:=11523696-17892=11505804, vv:=729
+2114: set2 9310 {129}("245E) type=0 v:=11505804+630598=12136402, vv:=769
+2117: w0 -17892 {147} v:=12136402-17892=12118510, vv:=768
+2118: set2 9273 {129}("2439) type=0 v:=12118510+630598=12749108, vv:=808
+2121: set2 8483 {129}("2123) type=2 v:=12749108+315298=13064406, vv:=828
+2124: right3 143138 {145} v:=13064406+143138=13207544, vv:=837
+2128: set2 8534 {129}("2156) type=6 v:=13207544+315298=13522842, vv:=857
+2131: set2 16205 {129}("3F4D) type=0 v:=13522842+630598=14153440, vv:=897
+2134: w0 -17892 {147} v:=14153440-17892=14135548, vv:=896
+2135: set2 9294 {129}("244E) type=0 v:=14135548+630598=14766146, vv:=936
+2138: w0 -17892 {147} v:=14766146-17892=14748254, vv:=935
+2139: set2 19548 {129}("4C5C) type=0 v:=14748254+630598=15378852, vv:=975
+2142: w0 -17892 {147} v:=15378852-17892=15360960, vv:=974
+2143: set2 9330 {129}("2472) type=0 v:=15360960+630598=15991558, vv:=1014
+2146: w0 -17892 {147} v:=15991558-17892=15973666, vv:=1013
+2147: set2 12410 {129}("307A) type=0 v:=15973666+630598=16604264, vv:=1053
+2150: w0 -17892 {147} v:=16604264-17892=16586372, vv:=1052
+2151: set2 9261 {129}("242D) type=0 v:=16586372+630598=17216970, vv:=1092
+[ています。 「人の目を引き]
+2154: pop {142}
+level 4:(h=15208638,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=963,vv=611)
+2155: y0 983040 {161} h:=15208638-983040=14225598, hh:=901
+2156: push {141}
+level 4:(h=14225598,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=901,vv=611)
+2157: set2 18773 {129}("4955) type=0 v:=9649794+630598=10280392, vv:=651
+2160: w2 -32137 {149} v:=10280392-32137=10248255, vv:=649
+2163: set2 9265 {129}("2431) type=0 v:=10248255+630598=10878853, vv:=689
+2166: w0 -32137 {147} v:=10878853-32137=10846716, vv:=687
+2167: set2 9323 {129}("246B) type=0 v:=10846716+630598=11477314, vv:=727
+2170: w0 -32137 {147} v:=11477314-32137=11445177, vv:=725
+2171: set2 18558 {129}("487E) type=0 v:=11445177+630598=12075775, vv:=765
+2174: w0 -32137 {147} v:=12075775-32137=12043638, vv:=763
+2175: set2 9271 {129}("2437) type=0 v:=12043638+630598=12674236, vv:=803
+2178: w0 -32137 {147} v:=12674236-32137=12642099, vv:=801
+2179: set2 9252 {129}("2424) type=0 v:=12642099+630598=13272697, vv:=841
+2182: w0 -32137 {147} v:=13272697-32137=13240560, vv:=839
+2183: set2 19000 {129}("4A38) type=0 v:=13240560+630598=13871158, vv:=879
+2186: w0 -32137 {147} v:=13871158-32137=13839021, vv:=877
+2187: set2 15729 {129}("3D71) type=0 v:=13839021+630598=14469619, vv:=917
+2190: set2 8535 {129}("2157) type=8 v:=14469619+315298=14784917, vv:=937
+2193: right2 6072 {144} v:=14784917+6072=14790989, vv:=937
+2196: set2 9330 {129}("2472) type=0 v:=14790989+630598=15421587, vv:=977
+2199: w0 -32137 {147} v:=15421587-32137=15389450, vv:=975
+2200: set2 14958 {129}("3A6E) type=0 v:=15389450+630598=16020048, vv:=1015
+2203: w0 -32137 {147} v:=16020048-32137=15987911, vv:=1013
+2204: set2 9323 {129}("246B) type=0 v:=15987911+630598=16618509, vv:=1053
+2207: w0 -32137 {147} v:=16618509-32137=16586372, vv:=1051
+2208: set2 9279 {129}("243F) type=0 v:=16586372+630598=17216970, vv:=1091
+[付ける美しい文書」を作るた]
+2211: pop {142}
+level 4:(h=14225598,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=901,vv=611)
+2212: y0 983040 {161} h:=14225598-983040=13242558, hh:=839
+2213: push {141}
+level 4:(h=13242558,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=839,vv=611)
+2214: set2 9313 {129}("2461) type=0 v:=9649794+630598=10280392, vv:=651
+2217: set2 9294 {129}("244E) type=0 v:=10280392+630598=10910990, vv:=691
+2220: set2 13601 {129}("3521) type=0 v:=10910990+630598=11541588, vv:=731
+2223: set2 18237 {129}("473D) type=0 v:=11541588+630598=12172186, vv:=771
+2226: set2 9295 {129}("244F) type=0 v:=12172186+630598=12802784, vv:=811
+2229: set2 15677 {129}("3D3D) type=0 v:=12802784+630598=13433382, vv:=851
+2232: set2 18035 {129}("4673) type=0 v:=13433382+630598=14063980, vv:=891
+2235: set2 18988 {129}("4A2C) type=0 v:=14063980+630598=14694578, vv:=931
+2238: set2 9291 {129}("244B) type=0 v:=14694578+630598=15325176, vv:=971
+2241: set2 15229 {129}("3B7D) type=0 v:=15325176+630598=15955774, vv:=1011
+2244: w3 70380 {150} v:=15955774+70380=16026154, vv:=1015
+2248: set2 9283 {129}("2443) type=3 v:=16026154+489838=16515992, vv:=1046
+2251: w0 70380 {147} v:=16515992+70380=16586372, vv:=1050
+2252: set2 9286 {129}("2446) type=0 v:=16586372+630598=17216970, vv:=1090
+[めの機能は十二分に持って]
+2255: pop {142}
+level 4:(h=13242558,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=839,vv=611)
+2256: y0 983040 {161} h:=13242558-983040=12259518, hh:=777
+2257: push {141}
+level 4:(h=12259518,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=777,vv=611)
+2258: set2 9252 {129}("2424) type=0 v:=9649794+630598=10280392, vv:=651
+2261: w2 -28771 {149} v:=10280392-28771=10251621, vv:=649
+2264: set2 9310 {129}("245E) type=0 v:=10251621+630598=10882219, vv:=689
+2267: w0 -28771 {147} v:=10882219-28771=10853448, vv:=687
+2268: set2 9273 {129}("2439) type=0 v:=10853448+630598=11484046, vv:=727
+2271: set2 8483 {129}("2123) type=2 v:=11484046+315298=11799344, vv:=747
+2274: right3 38460 {145} v:=11799344+38460=11837804, vv:=749
+2278: set2 9557 {129}("2555) type=0 v:=11837804+630598=12468402, vv:=789
+2281: w2 8585 {149} v:=12468402+8585=12476987, vv:=790
+2284: set2 9513 {129}("2529) type=3 v:=12476987+489838=12966825, vv:=821
+2287: w0 8585 {147} v:=12966825+8585=12975410, vv:=822
+2288: set2 9587 {129}("2573) type=0 v:=12975410+630598=13606008, vv:=862
+2291: w2 -28771 {149} v:=13606008-28771=13577237, vv:=860
+2294: set2 9544 {129}("2548) type=0 v:=13577237+630598=14207835, vv:=900
+2297: w0 -28771 {147} v:=14207835-28771=14179064, vv:=898
+2298: set2 9314 {129}("2462) type=0 v:=14179064+630598=14809662, vv:=938
+2301: w0 -28771 {147} v:=14809662-28771=14780891, vv:=936
+2302: set2 12836 {129}("3224) type=0 v:=14780891+630598=15411489, vv:=976
+2305: w0 -28771 {147} v:=15411489-28771=15382718, vv:=974
+2306: set2 19000 {129}("4A38) type=0 v:=15382718+630598=16013316, vv:=1014
+2309: w0 -28771 {147} v:=16013316-28771=15984545, vv:=1012
+2310: set2 9290 {129}("244A) type=0 v:=15984545+630598=16615143, vv:=1052
+2313: w0 -28771 {147} v:=16615143-28771=16586372, vv:=1050
+2314: set2 9321 {129}("2469) type=0 v:=16586372+630598=17216970, vv:=1090
+[います。フォントも欧文なら]
+2317: pop {142}
+level 4:(h=12259518,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=777,vv=611)
+2318: y0 983040 {161} h:=12259518-983040=11276478, hh:=714
+2319: push {141}
+level 4:(h=11276478,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=714,vv=611)
+2320: set2 9296 {129}("2450) type=0 v:=9649794+630598=10280392, vv:=651
+2323: set2 8482 {129}("2122) type=2 v:=10280392+315298=10595690, vv:=671
+2326: w3 167597 {150} v:=10595690+167597=10763287, vv:=682
+[ば、 ]
+2330: y3 141888 {164} h:=11276478-141888=11134590, hh:=705
+2334: fntnum7 {178} current font is cmr10
+2335: setchar82 ("52) v:=10763287+482418=11245705, vv:=713
+2336: setchar111 ("6F) v:=11245705+327681=11573386, vv:=734
+2337: setchar109 ("6D) v:=11573386+546135=12119521, vv:=769
+2338: setchar97 ("61) v:=12119521+327681=12447202, vv:=790
+2339: setchar110 ("6E) v:=12447202+364090=12811292, vv:=813
+[Roman]
+2340: z3 -141888 {169} h:=11134590+141888=11276478, hh:=714
+2344: fntnum14 {185} current font is tmin10
+2345: set2 8482 {129}("2122) type=2 v:=12811292+315298=13126590, vv:=833
+2348: right3 167596 {145} v:=13126590+167596=13294186, vv:=842
+[、 ]
+2352: y0 141888 {161} h:=11276478-141888=11134590, hh:=705
+2353: fntnum50 {221} current font is cmti10
+2354: setchar73 ("49) v:=13294186+252676=13546862, vv:=858
+2355: setchar116 ("74) v:=13546862+217723=13764585, vv:=872
+2356: setchar97 ("61) v:=13764585+334960=14099545, vv:=893
+2357: setchar108 ("6C) v:=14099545+167480=14267025, vv:=904
+2358: setchar105 ("69) v:=14267025+200976=14468001, vv:=917
+2359: setchar99 ("63) v:=14468001+301463=14769464, vv:=936
+[Italic]
+2360: z0 -141888 {166} h:=11134590+141888=11276478, hh:=714
+2361: fntnum14 {185} current font is tmin10
+2362: set2 8482 {129}("2122) type=2 v:=14769464+315298=15084762, vv:=956
+2365: w0 167597 {147} v:=15084762+167597=15252359, vv:=966
+[、 ]
+2366: y0 141888 {161} h:=11276478-141888=11134590, hh:=705
+2367: fntnum51 {222} current font is cmcsc10
+2368: setchar83 ("53) v:=15252359+400493=15652852, vv:=991
+2369: setchar109 ("6D) v:=15652852+489333=16142185, vv:=1022
+2370: setchar97 ("61) v:=16142185+401953=16544138, vv:=1047
+2371: setchar108 ("6C) v:=16544138+336416=16880554, vv:=1068
+2372: setchar108 ("6C) v:=16880554+336416=17216970, vv:=1089
+[Small]
+2373: pop {142}
+level 4:(h=11276478,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=714,vv=611)
+2374: y0 983040 {161} h:=11276478-983040=10293438, hh:=652
+2375: push {141}
+level 4:(h=10293438,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=652,vv=611)
+2376: y3 141888 {164} h:=10293438-141888=10151550, hh:=643
+2380: setchar67 ("43) v:=9649794+515181=10164975, vv:=644
+2381: setchar97 ("61) v:=10164975+401953=10566928, vv:=669
+2382: setchar112 ("70) v:=10566928+365543=10932471, vv:=692
+2383: setchar115 ("73) v:=10932471+300008=11232479, vv:=711
+[Caps]
+2384: z3 -141888 {169} h:=10151550+141888=10293438, hh:=652
+2388: fntnum14 {185} current font is tmin10
+2389: set2 8482 {129}("2122) type=2 v:=11232479+315298=11547777, vv:=731
+2392: right2 28494 {144} v:=11547777+28494=11576271, vv:=733
+[、]
+2395: y0 141888 {161} h:=10293438-141888=10151550, hh:=643
+2396: fntnum52 {223} current font is cmtt10
+2397: setchar84 ("54) v:=11576271+344061=11920332, vv:=755
+2398: setchar121 ("79) v:=11920332+344061=12264393, vv:=777
+2399: setchar112 ("70) v:=12264393+344061=12608454, vv:=799
+2400: setchar101 ("65) v:=12608454+344061=12952515, vv:=821
+2401: setchar119 ("77) v:=12952515+344061=13296576, vv:=843
+2402: setchar114 ("72) v:=13296576+344061=13640637, vv:=865
+2403: setchar105 ("69) v:=13640637+344061=13984698, vv:=887
+2404: setchar116 ("74) v:=13984698+344061=14328759, vv:=909
+2405: setchar101 ("65) v:=14328759+344061=14672820, vv:=931
+2406: setchar114 ("72) v:=14672820+344061=15016881, vv:=953
+[Typewriter]
+2407: z0 -141888 {166} h:=10151550+141888=10293438, hh:=652
+2408: fntnum14 {185} current font is tmin10
+2409: set2 8482 {129}("2122) type=2 v:=15016881+315298=15332179, vv:=973
+2412: right2 28495 {144} v:=15332179+28495=15360674, vv:=975
+[、]
+2415: y0 141888 {161} h:=10293438-141888=10151550, hh:=643
+2416: fntnum49 {220} current font is cmbx10
+2417: setchar66 ("42) v:=15360674+536118=15896792, vv:=1009
+2418: setchar111 ("6F) v:=15896792+376830=16273622, vv:=1033
+2419: setchar108 ("6C) v:=16273622+209350=16482972, vv:=1046
+2420: setchar100 ("64) v:=16482972+418700=16901672, vv:=1073
+[Bold]
+2421: z0 -141888 {166} h:=10151550+141888=10293438, hh:=652
+2422: fntnum14 {185} current font is tmin10
+2423: set2 8482 {129}("2122) type=2 v:=16901672+315298=17216970, vv:=1093
+[、]
+2426: pop {142}
+level 4:(h=10293438,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=652,vv=611)
+2427: y0 983040 {161} h:=10293438-983040=9310398, hh:=590
+2428: push {141}
+level 4:(h=9310398,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=590,vv=611)
+2429: y3 141888 {164} h:=9310398-141888=9168510, hh:=581
+2433: fntnum53 {224} current font is cmsl10
+2434: setchar83 ("53) v:=9649794+364090=10013884, vv:=634
+2435: setchar108 ("6C) v:=10013884+182045=10195929, vv:=646
+2436: setchar97 ("61) v:=10195929+327681=10523610, vv:=667
+2437: setchar110 ("6E) v:=10523610+364090=10887700, vv:=690
+2438: right2 -18205 {144} v:=10887700-18205=10869495, vv:=689
+2441: setchar116 ("74) v:=10869495+254863=11124358, vv:=705
+2442: setchar101 ("65) v:=11124358+291271=11415629, vv:=723
+2443: setchar100 ("64) v:=11415629+364090=11779719, vv:=746
+[Slanted]
+2444: z3 -141888 {169} h:=9168510+141888=9310398, hh:=590
+2448: fntnum14 {185} current font is tmin10
+2449: set2 8482 {129}("2122) type=2 v:=11779719+315298=12095017, vv:=766
+2452: right3 326995 {145} v:=12095017+326995=12422012, vv:=787
+[、 ]
+2456: y0 141888 {161} h:=9310398-141888=9168510, hh:=581
+2457: fntnum54 {225} current font is cmss10
+2458: setchar83 ("53) v:=12422012+364090=12786102, vv:=810
+2459: setchar97 ("61) v:=12786102+314938=13101040, vv:=830
+2460: setchar110 ("6E) v:=13101040+338603=13439643, vv:=851
+2461: setchar115 ("73) v:=13439643+251221=13690864, vv:=867
+2462: right3 229090 {145} v:=13690864+229090=13919954, vv:=882
+2466: setchar83 ("53) v:=13919954+364090=14284044, vv:=905
+2467: setchar101 ("65) v:=14284044+291271=14575315, vv:=923
+2468: setchar114 ("72) v:=14575315+223916=14799231, vv:=937
+2469: setchar105 ("69) v:=14799231+156558=14955789, vv:=947
+2470: setchar102 ("66) v:=14955789+200250=15156039, vv:=960
+2471: right3 164031 {145} v:=15156039+164031=15320070, vv:=970
+[Sans Serif ]
+2475: z0 -141888 {166} h:=9168510+141888=9310398, hh:=590
+2476: fntnum14 {185} current font is tmin10
+2477: set2 9290 {129}("244A) type=0 v:=15320070+630598=15950668, vv:=1010
+2480: w2 2553 {149} v:=15950668+2553=15953221, vv:=1010
+2483: set2 9289 {129}("2449) type=0 v:=15953221+630598=16583819, vv:=1050
+2486: w0 2553 {147} v:=16583819+2553=16586372, vv:=1050
+2487: set2 16959 {129}("423F) type=0 v:=16586372+630598=17216970, vv:=1090
+[など多]
+2490: pop {142}
+level 4:(h=9310398,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=590,vv=611)
+2491: y0 983040 {161} h:=9310398-983040=8327358, hh:=527
+2492: push {141}
+level 4:(h=8327358,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=527,vv=611)
+2493: set2 19789 {129}("4D4D) type=0 v:=9649794+630598=10280392, vv:=651
+2496: w3 50119 {150} v:=10280392+50119=10330511, vv:=654
+2500: set2 9287 {129}("2447) type=0 v:=10330511+630598=10961109, vv:=694
+2503: w0 50119 {147} v:=10961109+50119=11011228, vv:=697
+2504: set2 9273 {129}("2439) type=0 v:=11011228+630598=11641826, vv:=737
+2507: set2 8483 {129}("2123) type=2 v:=11641826+315298=11957124, vv:=757
+2510: right3 544948 {145} v:=11957124+544948=12502072, vv:=792
+2514: set2 9506 {129}("2522) type=0 v:=12502072+630598=13132670, vv:=832
+2517: w0 50119 {147} v:=13132670+50119=13182789, vv:=835
+2518: set2 9529 {129}("2539) type=0 v:=13182789+630598=13813387, vv:=875
+2521: w0 50119 {147} v:=13813387+50119=13863506, vv:=878
+2522: set2 9517 {129}("252D) type=0 v:=13863506+630598=14494104, vv:=918
+2525: w0 50119 {147} v:=14494104+50119=14544223, vv:=921
+2526: set2 8508 {129}("213C) type=0 v:=14544223+630598=15174821, vv:=961
+2529: w0 50119 {147} v:=15174821+50119=15224940, vv:=964
+2530: set2 18044 {129}("467C) type=0 v:=15224940+630598=15855538, vv:=1004
+2533: w0 50119 {147} v:=15855538+50119=15905657, vv:=1007
+2534: set2 19292 {129}("4B5C) type=0 v:=15905657+630598=16536255, vv:=1047
+2537: w0 50119 {147} v:=16536255+50119=16586374, vv:=1050
+2538: set2 14444 {129}("386C) type=0 v:=16586374+630598=17216972, vv:=1090
+[様です。 アスキー日本語]
+2541: pop {142}
+level 4:(h=8327358,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=527,vv=611)
+2542: y0 983040 {161} h:=8327358-983040=7344318, hh:=465
+2543: push {141}
+level 4:(h=7344318,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=465,vv=611)
+2544: down3 141888 {159} h:=7344318-141888=7202430, hh:=456
+2548: fntnum7 {178} current font is cmr10
+2549: setchar76 ("4C) v:=9649794+409601=10059395, vv:=637
+[L]
+2550: push {141}
+level 5:(h=7202430,v=10059395,w=0,x=0,y=983040,z=0,d=1,hh=456,vv=637)
+2551: down3 -291088 {159} h:=7202430+291088=7493518, hh:=474
+2555: push {141}
+level 6:(h=7493518,v=10059395,w=0,x=0,y=983040,z=0,d=1,hh=474,vv=637)
+2556: right3 -235930 {145} v:=10059395-235930=9823465, vv:=622
+2560: down3 156741 {159} h:=7493518-156741=7336777, hh:=464
+2564: fntnum6 {177} current font is cmr7
+2565: setchar65 ("41) v:=9823465+386847=10210312, vv:=647
+[A]
+2566: pop {142}
+level 6:(h=7493518,v=10059395,w=0,x=0,y=983040,z=0,d=1,hh=474,vv=637)
+2567: pop {142}
+level 5:(h=7202430,v=10059395,w=0,x=0,y=983040,z=0,d=1,hh=456,vv=637)
+2568: right3 52617 {145} v:=10059395+52617=10112012, vv:=640
+2572: fntnum7 {178} current font is cmr10
+2573: setchar84 ("54) v:=10112012+473316=10585328, vv:=670
+[T]
+2574: push {141}
+level 5:(h=7202430,v=10585328,w=0,x=0,y=983040,z=0,d=1,hh=456,vv=670)
+2575: right3 -109250 {145} v:=10585328-109250=10476078, vv:=663
+2579: down3 141084 {159} h:=7202430-141084=7061346, hh:=447
+2583: setchar69 ("45) v:=10476078+446010=10922088, vv:=691
+[E]
+2584: pop {142}
+level 5:(h=7202430,v=10585328,w=0,x=0,y=983040,z=0,d=1,hh=456,vv=670)
+2585: right3 254840 {145} v:=10585328+254840=10840168, vv:=687
+2589: setchar88 ("58) v:=10840168+491521=11331689, vv:=718
+2590: right3 173017 {145} v:=11331689+173017=11504706, vv:=729
+[ X ]
+2594: down3 -141888 {159} h:=7202430+141888=7344318, hh:=465
+2598: fntnum14 {185} current font is tmin10
+2599: set2 9295 {129}("244F) type=0 v:=11504706+630598=12135304, vv:=769
+2602: x2 6147 {154} v:=12135304+6147=12141451, vv:=769
+2605: set2 9279 {129}("243F) type=0 v:=12141451+630598=12772049, vv:=809
+2608: w3 70380 {150} v:=12772049+70380=12842429, vv:=813
+2612: set2 9283 {129}("2443) type=3 v:=12842429+489838=13332267, vv:=844
+2615: w0 70380 {147} v:=13332267+70380=13402647, vv:=848
+2616: set2 9279 {129}("243F) type=0 v:=13402647+630598=14033245, vv:=888
+2619: x0 6147 {152} v:=14033245+6147=14039392, vv:=888
+2620: set2 12396 {129}("306C) type=0 v:=14039392+630598=14669990, vv:=928
+2623: x0 6147 {152} v:=14669990+6147=14676137, vv:=928
+2624: set2 19303 {129}("4B67) type=0 v:=14676137+630598=15306735, vv:=968
+2627: x0 6147 {152} v:=15306735+6147=15312882, vv:=968
+2628: set2 9294 {129}("244E) type=0 v:=15312882+630598=15943480, vv:=1008
+2631: x0 6147 {152} v:=15943480+6147=15949627, vv:=1008
+2632: set2 15466 {129}("3C6A) type=0 v:=15949627+630598=16580225, vv:=1048
+2635: x0 6147 {152} v:=16580225+6147=16586372, vv:=1049
+2636: set2 15206 {129}("3B66) type=0 v:=16586372+630598=17216970, vv:=1089
+[はたった一枚の手紙]
+2639: pop {142}
+level 4:(h=7344318,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=465,vv=611)
+2640: y0 983040 {161} h:=7344318-983040=6361278, hh:=403
+2641: push {141}
+level 4:(h=6361278,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=403,vv=611)
+2642: set2 9259 {129}("242B) type=0 v:=9649794+630598=10280392, vv:=651
+2645: set2 9321 {129}("2469) type=0 v:=10280392+630598=10910990, vv:=691
+2648: set2 8482 {129}("2122) type=2 v:=10910990+315298=11226288, vv:=711
+2651: right3 315299 {145} v:=11226288+315299=11541587, vv:=731
+2655: set2 16244 {129}("3F74) type=0 v:=11541587+630598=12172185, vv:=771
+2658: set2 18740 {129}("4934) type=0 v:=12172185+630598=12802783, vv:=811
+2661: set2 9562 {129}("255A) type=0 v:=12802783+630598=13433381, vv:=851
+2664: set2 8508 {129}("213C) type=0 v:=13433381+630598=14063979, vv:=891
+2667: set2 9528 {129}("2538) type=0 v:=14063979+630598=14694577, vv:=931
+2670: set2 9291 {129}("244B) type=0 v:=14694577+630598=15325175, vv:=971
+2673: set2 9258 {129}("242A) type=0 v:=15325175+630598=15955773, vv:=1011
+2676: set2 9320 {129}("2468) type=0 v:=15955773+630598=16586371, vv:=1051
+2679: set2 9302 {129}("2456) type=0 v:=16586371+630598=17216969, vv:=1091
+[から、 数百ページにおよぶ]
+2682: pop {142}
+level 4:(h=6361278,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=403,vv=611)
+2683: y0 983040 {161} h:=6361278-983040=5378238, hh:=341
+2684: push {141}
+level 4:(h=5378238,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=341,vv=611)
+2685: set2 20288 {129}("4F40) type=0 v:=9649794+630598=10280392, vv:=651
+2688: set2 19000 {129}("4A38) type=0 v:=10280392+630598=10910990, vv:=691
+2691: set2 9316 {129}("2464) type=0 v:=10910990+630598=11541588, vv:=731
+2694: set2 13627 {129}("353B) type=0 v:=11541588+630598=12172186, vv:=771
+2697: set2 15697 {129}("3D51) type=0 v:=12172186+630598=12802784, vv:=811
+2700: set2 19000 {129}("4A38) type=0 v:=12802784+630598=13433382, vv:=851
+2703: set2 15729 {129}("3D71) type=0 v:=13433382+630598=14063980, vv:=891
+2706: set2 9310 {129}("245E) type=0 v:=14063980+630598=14694578, vv:=931
+2709: set2 9287 {129}("2447) type=0 v:=14694578+630598=15325176, vv:=971
+2712: set2 8482 {129}("2122) type=2 v:=15325176+315298=15640474, vv:=991
+2715: right3 315299 {145} v:=15640474+315299=15955773, vv:=1011
+2719: set2 9277 {129}("243D) type=0 v:=15955773+630598=16586371, vv:=1051
+2722: set2 9324 {129}("246C) type=0 v:=16586371+630598=17216969, vv:=1091
+[論文や技術文書まで、 それ]
+2725: pop {142}
+level 4:(h=5378238,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=341,vv=611)
+2726: y0 983040 {161} h:=5378238-983040=4395198, hh:=278
+2727: push {141}
+level 4:(h=4395198,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=278,vv=611)
+2728: set2 9321 {129}("2469) type=0 v:=9649794+630598=10280392, vv:=651
+2731: set2 9273 {129}("2439) type=0 v:=10280392+630598=10910990, vv:=691
+2734: set2 9305 {129}("2459) type=0 v:=10910990+630598=11541588, vv:=731
+2737: set2 9286 {129}("2446) type=0 v:=11541588+630598=12172186, vv:=771
+2740: set2 9330 {129}("2472) type=0 v:=12172186+630598=12802784, vv:=811
+2743: set2 13360 {129}("3430) type=0 v:=12802784+630598=13433382, vv:=851
+2746: set2 16692 {129}("4134) type=0 v:=13433382+630598=14063980, vv:=891
+2749: set2 9291 {129}("244B) type=0 v:=14063980+630598=14694578, vv:=931
+2752: set2 9515 {129}("252B) type=0 v:=14694578+630598=15325176, vv:=971
+2755: set2 9552 {129}("2550) type=0 v:=15325176+630598=15955774, vv:=1011
+2758: set2 8508 {129}("213C) type=0 v:=15955774+630598=16586372, vv:=1051
+2761: set2 9252 {129}("2424) type=0 v:=16586372+630598=17216970, vv:=1091
+[らすべてを完全にカバーい]
+2764: pop {142}
+level 4:(h=4395198,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=278,vv=611)
+2765: y0 983040 {161} h:=4395198-983040=3412158, hh:=216
+2766: push {141}
+level 4:(h=3412158,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=216,vv=611)
+2767: set2 9279 {129}("243F) type=0 v:=9649794+630598=10280392, vv:=651
+2770: set2 9271 {129}("2437) type=0 v:=10280392+630598=10910990, vv:=691
+2773: set2 9310 {129}("245E) type=0 v:=10910990+630598=11541588, vv:=731
+2776: set2 9273 {129}("2439) type=0 v:=11541588+630598=12172186, vv:=771
+2779: set2 8483 {129}("2123) type=2 v:=12172186+315298=12487484, vv:=791
+[たします。]
+2782: pop {142}
+level 4:(h=3412158,v=9649794,w=0,x=0,y=983040,z=0,d=1,hh=216,vv=611)
+2783: pop {142}
+level 3:(h=0,v=13597222,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=861)
+2784: pop {142}
+level 2:(h=0,v=13597222,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=861)
+2785: down3 5087754 {159} v:=13597222+5087754=18684976, vv:=1184
+2789: putrule {137} height 26214, width 26485116 (2x1678 pixels)
+2798: down4 10911045 {160} v:=18684976+10911045=29596021, vv:=1875
+2803: push {141}
+level 2:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2804: push {141}
+level 3:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2805: push {141}
+level 4:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2806: push {141}
+level 5:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2807: push {141}
+level 6:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2808: push {141}
+level 7:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2809: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2810: right3 4732172 {145} h:=0+4732172=4732172, hh:=300
+[ ]
+2814: down3 -2703772 {159} v:=29596021-2703772=26892249, vv:=1703
+2818: setrule {132} height 186466, width 13985025 (12x886 pixels)
+ h:=4732172+13985025=18717197, hh:=1186
+2827: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2828: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2829: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2830: down3 -2987895 {159} v:=29596021-2987895=26608126, vv:=1685
+2834: push {141}
+level 10:(h=0,v=26608126,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1685)
+2835: right4 11417350 {146} h:=0+11417350=11417350, hh:=723
+[ ]
+2840: fntdef1 58 {243}: cmti8
+2861: fntnum58 {229} current font is cmti8
+2862: setchar110 ("6E) h:=11417350+316394=11733744, hh:=743
+2863: setchar101 ("65) h:=11733744+258868=11992612, hh:=759
+2864: setchar116 ("74) h:=11992612+186961=12179573, hh:=771
+2865: setchar119 ("77) h:=12179573+373920=12553493, hh:=795
+2866: setchar111 ("6F) h:=12553493+287631=12841124, hh:=813
+2867: setchar114 ("72) h:=12841124+237296=13078420, hh:=828
+2868: setchar107 ("6B) h:=13078420+258868=13337288, hh:=844
+[network]
+2869: pop {142}
+level 10:(h=0,v=26608126,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1685)
+2870: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2871: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2872: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2873: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2874: right3 6951130 {145} h:=0+6951130=6951130, hh:=440
+[ ]
+2878: down3 -2797005 {159} v:=29596021-2797005=26799016, vv:=1697
+2882: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=6951130+37293=6988423, hh:=443
+2891: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2892: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2893: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2894: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2895: right4 10866937 {146} h:=0+10866937=10866937, hh:=688
+[ ]
+2900: down3 -2797005 {159} v:=29596021-2797005=26799016, vv:=1697
+2904: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=10866937+37293=10904230, hh:=691
+2913: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2914: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2915: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2916: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2917: right4 14036876 {146} h:=0+14036876=14036876, hh:=889
+[ ]
+2922: down3 -2797005 {159} v:=29596021-2797005=26799016, vv:=1697
+2926: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=14036876+37293=14074169, hh:=892
+2935: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2936: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2937: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2938: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2939: right4 17393282 {146} h:=0+17393282=17393282, hh:=1102
+[ ]
+2944: down3 -2797005 {159} v:=29596021-2797005=26799016, vv:=1697
+2948: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=17393282+37293=17430575, hh:=1105
+2957: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2958: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2959: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2960: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2961: right4 12358673 {146} h:=0+12358673=12358673, hh:=783
+[ ]
+2966: down3 -1491736 {159} v:=29596021-1491736=28104285, vv:=1780
+2970: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=12358673+37293=12395966, hh:=786
+2979: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2980: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2981: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2982: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2983: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+2984: right3 4881346 {145} h:=0+4881346=4881346, hh:=309
+[ ]
+2988: down3 -5594010 {159} v:=29596021-5594010=24002011, vv:=1520
+2992: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3001: down3 1491736 {159} v:=24002011+1491736=25493747, vv:=1615
+3005: push {141}
+level 11:(h=4881346,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1615)
+3006: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=4881346+37293=4918639, hh:=312
+3015: push {141}
+level 12:(h=4918639,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1615)
+3016: down3 -614796 {159} v:=25493747-614796=24878951, vv:=1576
+3020: push {141}
+level 13:(h=4918639,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1576)
+3021: right3 840251 {145} h:=4918639+840251=5758890, hh:=365
+[ ]
+3025: fntdef1 57 {243}: cmr8
+3045: fntnum57 {228} current font is cmr8
+3046: setchar88 ("58) h:=5758890+417252=6176142, hh:=391
+3047: right3 185688 {145} h:=6176142+185688=6361830, hh:=403
+3051: setchar76 ("4C) h:=6361830+347892=6709722, hh:=425
+3052: setchar105 ("69) h:=6709722+154740=6864462, hh:=435
+3053: setchar98 ("62) h:=6864462+309480=7173942, hh:=455
+3054: setchar114 ("72) h:=7173942+217091=7391033, hh:=469
+3055: setchar97 ("61) h:=7391033+278532=7669565, hh:=487
+3056: setchar114 ("72) h:=7669565+217091=7886656, hh:=501
+3057: setchar121 ("79) h:=7886656+294006=8180662, hh:=520
+[X Library]
+3058: pop {142}
+level 13:(h=4918639,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1576)
+3059: pop {142}
+level 12:(h=4918639,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1615)
+3060: right3 4102274 {145} h:=4918639+4102274=9020913, hh:=571
+[ ]
+3064: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=9020913+37293=9058206, hh:=574
+3073: pop {142}
+level 11:(h=4881346,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1615)
+3074: down3 37293 {159} v:=25493747+37293=25531040, vv:=1617
+3078: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3087: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3088: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3089: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3090: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3091: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3092: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3093: right3 4880567 {145} h:=0+4880567=4880567, hh:=309
+[ ]
+3097: down4 -8577482 {160} v:=29596021-8577482=21018539, vv:=1331
+3102: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3111: down3 2983472 {159} v:=21018539+2983472=24002011, vv:=1520
+3115: push {141}
+level 11:(h=4880567,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1520)
+3116: setrule {132} height 2983472, width 37293 (189x3 pixels)
+ h:=4880567+37293=4917860, hh:=312
+3125: push {141}
+level 12:(h=4917860,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1520)
+3126: down3 -751907 {159} v:=24002011-751907=23250104, vv:=1473
+3130: push {141}
+level 13:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3131: push {141}
+level 14:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3132: down3 -1217513 {159} v:=23250104-1217513=22032591, vv:=1396
+3136: push {141}
+level 15:(h=4917860,v=22032591,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1396)
+3137: push {141}
+level 16:(h=4917860,v=22032591,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1396)
+3138: right3 1074182 {145} h:=4917860+1074182=5992042, hh:=380
+3142: setchar71 ("47) h:=5992042+437004=6429046, hh:=408
+3143: setchar114 ("72) h:=6429046+217091=6646137, hh:=422
+3144: setchar97 ("61) h:=6646137+278532=6924669, hh:=440
+3145: setchar112 ("70) h:=6924669+309480=7234149, hh:=460
+3146: setchar104 ("68) h:=7234149+309480=7543629, hh:=480
+3147: setchar105 ("69) h:=7543629+154740=7698369, hh:=490
+3148: setchar99 ("63) h:=7698369+247584=7945953, hh:=505
+[ Graphic]
+3149: pop {142}
+level 16:(h=4917860,v=22032591,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1396)
+3150: pop {142}
+level 15:(h=4917860,v=22032591,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1396)
+3151: down3 656816 {159} v:=22032591+656816=22689407, vv:=1437
+3155: push {141}
+level 15:(h=4917860,v=22689407,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1437)
+3156: push {141}
+level 16:(h=4917860,v=22689407,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1437)
+3157: right3 979699 {145} h:=4917860+979699=5897559, hh:=374
+3161: setchar70 ("46) h:=5897559+363366=6260925, hh:=397
+3162: right3 -46422 {145} h:=6260925-46422=6214503, hh:=394
+3166: setchar117 ("75) h:=6214503+309480=6523983, hh:=414
+3167: setchar110 ("6E) h:=6523983+309480=6833463, hh:=434
+3168: setchar99 ("63) h:=6833463+247584=7081047, hh:=450
+3169: setchar116 ("74) h:=7081047+216636=7297683, hh:=464
+3170: setchar105 ("69) h:=7297683+154740=7452423, hh:=474
+3171: setchar111 ("6F) h:=7452423+278532=7730955, hh:=492
+3172: setchar110 ("6E) h:=7730955+309480=8040435, hh:=511
+[ Function]
+3173: pop {142}
+level 16:(h=4917860,v=22689407,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1437)
+3174: pop {142}
+level 15:(h=4917860,v=22689407,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1437)
+3175: down3 560697 {159} v:=22689407+560697=23250104, vv:=1473
+3179: push {141}
+level 15:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3180: push {141}
+level 16:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3181: right3 1141721 {145} h:=4917860+1141721=6059581, hh:=384
+3185: setchar76 ("4C) h:=6059581+347892=6407473, hh:=406
+3186: setchar105 ("69) h:=6407473+154740=6562213, hh:=416
+3187: setchar98 ("62) h:=6562213+309480=6871693, hh:=436
+3188: setchar114 ("72) h:=6871693+217091=7088784, hh:=450
+3189: setchar97 ("61) h:=7088784+278532=7367316, hh:=468
+3190: setchar114 ("72) h:=7367316+217091=7584407, hh:=482
+3191: setchar121 ("79) h:=7584407+294006=7878413, hh:=501
+[ Library]
+3192: pop {142}
+level 16:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3193: pop {142}
+level 15:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3194: pop {142}
+level 14:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3195: pop {142}
+level 13:(h=4917860,v=23250104,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1473)
+3196: pop {142}
+level 12:(h=4917860,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1520)
+3197: right3 4102274 {145} h:=4917860+4102274=9020134, hh:=571
+[ ]
+3201: setrule {132} height 2983472, width 37293 (189x3 pixels)
+ h:=9020134+37293=9057427, hh:=574
+3210: pop {142}
+level 11:(h=4880567,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1520)
+3211: down3 37293 {159} v:=24002011+37293=24039304, vv:=1522
+3215: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3224: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3225: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3226: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3227: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3228: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3229: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3230: right3 4881346 {145} h:=0+4881346=4881346, hh:=309
+[ ]
+3234: down4 -9696284 {160} v:=29596021-9696284=19899737, vv:=1260
+3239: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3248: down3 1118802 {159} v:=19899737+1118802=21018539, vv:=1331
+3252: push {141}
+level 11:(h=4881346,v=21018539,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1331)
+3253: setrule {132} height 1118802, width 37293 (71x3 pixels)
+ h:=4881346+37293=4918639, hh:=312
+3262: push {141}
+level 12:(h=4918639,v=21018539,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1331)
+3263: down3 -428329 {159} v:=21018539-428329=20590210, vv:=1304
+3267: push {141}
+level 13:(h=4918639,v=20590210,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1304)
+3268: right3 635539 {145} h:=4918639+635539=5554178, hh:=352
+3272: setchar65 ("41) h:=5554178+417252=5971430, hh:=378
+3273: setchar112 ("70) h:=5971430+309480=6280910, hh:=398
+3274: setchar112 ("70) h:=6280910+309480=6590390, hh:=418
+3275: setchar108 ("6C) h:=6590390+154740=6745130, hh:=428
+3276: setchar105 ("69) h:=6745130+154740=6899870, hh:=438
+3277: setchar99 ("63) h:=6899870+247584=7147454, hh:=454
+3278: setchar97 ("61) h:=7147454+278532=7425986, hh:=472
+3279: setchar116 ("74) h:=7425986+216636=7642622, hh:=486
+3280: setchar105 ("69) h:=7642622+154740=7797362, hh:=496
+3281: setchar111 ("6F) h:=7797362+278532=8075894, hh:=514
+3282: setchar110 ("6E) h:=8075894+309480=8385374, hh:=533
+[ Application]
+3283: pop {142}
+level 13:(h=4918639,v=20590210,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1304)
+3284: pop {142}
+level 12:(h=4918639,v=21018539,w=0,x=0,y=983040,z=0,d=0,hh=312,vv=1331)
+3285: right3 4102274 {145} h:=4918639+4102274=9020913, hh:=571
+[ ]
+3289: setrule {132} height 1118802, width 37293 (71x3 pixels)
+ h:=9020913+37293=9058206, hh:=574
+3298: pop {142}
+level 11:(h=4881346,v=21018539,w=0,x=0,y=983040,z=0,d=0,hh=309,vv=1331)
+3299: down3 37293 {159} v:=21018539+37293=21055832, vv:=1333
+3303: putrule {137} height 37293, width 4176860 (3x265 pixels)
+3312: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3313: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3314: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3315: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3316: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3317: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3318: right4 9355775 {146} h:=0+9355775=9355775, hh:=593
+[ ]
+3323: down3 -5594010 {159} v:=29596021-5594010=24002011, vv:=1520
+3327: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3336: down3 1491736 {159} v:=24002011+1491736=25493747, vv:=1615
+3340: push {141}
+level 11:(h=9355775,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1615)
+3341: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=9355775+37293=9393068, hh:=596
+3350: push {141}
+level 12:(h=9393068,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1615)
+3351: down3 -614796 {159} v:=25493747-614796=24878951, vv:=1576
+3355: push {141}
+level 13:(h=9393068,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1576)
+3356: right3 187617 {145} h:=9393068+187617=9580685, hh:=607
+3360: setchar88 ("58) h:=9580685+417252=9997937, hh:=633
+3361: right3 185688 {145} h:=9997937+185688=10183625, hh:=645
+3365: setchar76 ("4C) h:=10183625+347892=10531517, hh:=667
+3366: setchar105 ("69) h:=10531517+154740=10686257, hh:=677
+3367: setchar98 ("62) h:=10686257+309480=10995737, hh:=697
+3368: setchar114 ("72) h:=10995737+217091=11212828, hh:=711
+3369: setchar97 ("61) h:=11212828+278532=11491360, hh:=729
+3370: setchar114 ("72) h:=11491360+217091=11708451, hh:=743
+3371: setchar121 ("79) h:=11708451+294006=12002457, hh:=762
+[ X Library]
+3372: pop {142}
+level 13:(h=9393068,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1576)
+3373: pop {142}
+level 12:(h=9393068,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1615)
+3374: right3 2797005 {145} h:=9393068+2797005=12190073, hh:=772
+[ ]
+3378: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=12190073+37293=12227366, hh:=775
+3387: pop {142}
+level 11:(h=9355775,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1615)
+3388: down3 37293 {159} v:=25493747+37293=25531040, vv:=1617
+3392: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3401: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3402: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3403: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3404: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3405: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3406: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3407: right4 9356554 {146} h:=0+9356554=9356554, hh:=593
+[ ]
+3412: down3 -7085746 {159} v:=29596021-7085746=22510275, vv:=1426
+3416: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3425: down3 1491736 {159} v:=22510275+1491736=24002011, vv:=1520
+3429: push {141}
+level 11:(h=9356554,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1520)
+3430: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=9356554+37293=9393847, hh:=596
+3439: push {141}
+level 12:(h=9393847,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1520)
+3440: down3 -566736 {159} v:=24002011-566736=23435275, vv:=1484
+3444: push {141}
+level 13:(h=9393847,v=23435275,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1484)
+3445: right3 339353 {145} h:=9393847+339353=9733200, hh:=617
+3449: setchar88 ("58) h:=9733200+417252=10150452, hh:=643
+3450: setchar84 ("54) h:=10150452+402324=10552776, hh:=668
+3451: setchar69 ("45) h:=10552776+378840=10931616, hh:=692
+3452: setchar82 ("52) h:=10931616+409788=11341404, hh:=718
+3453: setchar77 ("4D) h:=11341404+510096=11851500, hh:=750
+[ XTERM]
+3454: pop {142}
+level 13:(h=9393847,v=23435275,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1484)
+3455: pop {142}
+level 12:(h=9393847,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1520)
+3456: right3 2797005 {145} h:=9393847+2797005=12190852, hh:=772
+[ ]
+3460: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=12190852+37293=12228145, hh:=775
+3469: pop {142}
+level 11:(h=9356554,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1520)
+3470: down3 37293 {159} v:=24002011+37293=24039304, vv:=1522
+3474: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3483: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3484: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3485: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3486: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3487: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3488: right4 10866937 {146} h:=0+10866937=10866937, hh:=688
+[ ]
+3493: down3 -7085746 {159} v:=29596021-7085746=22510275, vv:=1426
+3497: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=10866937+37293=10904230, hh:=691
+3506: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3507: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3508: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3509: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3510: down3 -7203559 {159} v:=29596021-7203559=22392462, vv:=1418
+3514: push {141}
+level 10:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3515: push {141}
+level 11:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3516: down3 -621032 {159} v:=22392462-621032=21771430, vv:=1379
+3520: push {141}
+level 12:(h=0,v=21771430,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1379)
+3521: push {141}
+level 13:(h=0,v=21771430,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1379)
+3522: right4 11363912 {146} h:=0+11363912=11363912, hh:=720
+[ ]
+3527: fntnum58 {229} current font is cmti8
+3528: setchar112 ("70) h:=11363912+287631=11651543, hh:=738
+3529: setchar115 ("73) h:=11651543+230105=11881648, hh:=753
+3530: setchar101 ("65) h:=11881648+258868=12140516, hh:=769
+3531: setchar117 ("75) h:=12140516+302013=12442529, hh:=788
+3532: setchar100 ("64) h:=12442529+287631=12730160, hh:=806
+3533: setchar111 ("6F) h:=12730160+287631=13017791, hh:=824
+[pseudo]
+3534: pop {142}
+level 13:(h=0,v=21771430,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1379)
+3535: pop {142}
+level 12:(h=0,v=21771430,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1379)
+3536: down3 621032 {159} v:=21771430+621032=22392462, vv:=1418
+3540: push {141}
+level 12:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3541: push {141}
+level 13:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3542: right4 11363912 {146} h:=0+11363912=11363912, hh:=720
+3547: setchar116 ("74) h:=11363912+186961=11550873, hh:=732
+3548: setchar116 ("74) h:=11550873+186961=11737834, hh:=744
+3549: setchar121 ("79) h:=11737834+273250=12011084, hh:=761
+[ tty]
+3550: pop {142}
+level 13:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3551: pop {142}
+level 12:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3552: pop {142}
+level 11:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3553: pop {142}
+level 10:(h=0,v=22392462,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1418)
+3554: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3555: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3556: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3557: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3558: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3559: right4 9356554 {146} h:=0+9356554=9356554, hh:=593
+[ ]
+3564: down4 -9696284 {160} v:=29596021-9696284=19899737, vv:=1260
+3569: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3578: down3 1305269 {159} v:=19899737+1305269=21205006, vv:=1343
+3582: push {141}
+level 11:(h=9356554,v=21205006,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1343)
+3583: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=9356554+37293=9393847, hh:=596
+3592: push {141}
+level 12:(h=9393847,v=21205006,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1343)
+3593: down3 -521562 {159} v:=21205006-521562=20683444, vv:=1310
+3597: push {141}
+level 13:(h=9393847,v=20683444,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1310)
+3598: right2 -17096 {144} h:=9393847-17096=9376751, hh:=595
+3601: fntnum57 {228} current font is cmr8
+3602: setchar65 ("41) h:=9376751+417252=9794003, hh:=621
+3603: setchar112 ("70) h:=9794003+309480=10103483, hh:=641
+3604: setchar112 ("70) h:=10103483+309480=10412963, hh:=661
+3605: setchar108 ("6C) h:=10412963+154740=10567703, hh:=671
+3606: setchar105 ("69) h:=10567703+154740=10722443, hh:=681
+3607: setchar99 ("63) h:=10722443+247584=10970027, hh:=697
+3608: setchar97 ("61) h:=10970027+278532=11248559, hh:=714
+3609: setchar116 ("74) h:=11248559+216636=11465195, hh:=728
+3610: setchar105 ("69) h:=11465195+154740=11619935, hh:=738
+3611: setchar111 ("6F) h:=11619935+278532=11898467, hh:=756
+3612: setchar110 ("6E) h:=11898467+309480=12207947, hh:=775
+[Application]
+3613: pop {142}
+level 13:(h=9393847,v=20683444,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1310)
+3614: pop {142}
+level 12:(h=9393847,v=21205006,w=0,x=0,y=983040,z=0,d=0,hh=596,vv=1343)
+3615: right3 2797005 {145} h:=9393847+2797005=12190852, hh:=772
+[ ]
+3619: setrule {132} height 1305269, width 37293 (83x3 pixels)
+ h:=12190852+37293=12228145, hh:=775
+3628: pop {142}
+level 11:(h=9356554,v=21205006,w=0,x=0,y=983040,z=0,d=0,hh=593,vv=1343)
+3629: down3 37293 {159} v:=21205006+37293=21242299, vv:=1345
+3633: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3642: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3643: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3644: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3645: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3646: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3647: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3648: right4 12526493 {146} h:=0+12526493=12526493, hh:=793
+[ ]
+3653: down3 -5594010 {159} v:=29596021-5594010=24002011, vv:=1520
+3657: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3666: down3 1491736 {159} v:=24002011+1491736=25493747, vv:=1615
+3670: push {141}
+level 11:(h=12526493,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=793,vv=1615)
+3671: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=12526493+37293=12563786, hh:=796
+3680: push {141}
+level 12:(h=12563786,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1615)
+3681: down3 -614796 {159} v:=25493747-614796=24878951, vv:=1576
+3685: push {141}
+level 13:(h=12563786,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1576)
+3686: right3 187617 {145} h:=12563786+187617=12751403, hh:=808
+3690: setchar88 ("58) h:=12751403+417252=13168655, hh:=834
+3691: right3 185688 {145} h:=13168655+185688=13354343, hh:=846
+3695: setchar76 ("4C) h:=13354343+347892=13702235, hh:=868
+3696: setchar105 ("69) h:=13702235+154740=13856975, hh:=878
+3697: setchar98 ("62) h:=13856975+309480=14166455, hh:=898
+3698: setchar114 ("72) h:=14166455+217091=14383546, hh:=912
+3699: setchar97 ("61) h:=14383546+278532=14662078, hh:=930
+3700: setchar114 ("72) h:=14662078+217091=14879169, hh:=944
+3701: setchar121 ("79) h:=14879169+294006=15173175, hh:=963
+[ X Library]
+3702: pop {142}
+level 13:(h=12563786,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1576)
+3703: pop {142}
+level 12:(h=12563786,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1615)
+3704: right3 2797005 {145} h:=12563786+2797005=15360791, hh:=973
+[ ]
+3708: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=15360791+37293=15398084, hh:=976
+3717: pop {142}
+level 11:(h=12526493,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=793,vv=1615)
+3718: down3 37293 {159} v:=25493747+37293=25531040, vv:=1617
+3722: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3731: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3732: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3733: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3734: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3735: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3736: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3737: right4 12526493 {146} h:=0+12526493=12526493, hh:=793
+[ ]
+3742: down3 -7085746 {159} v:=29596021-7085746=22510275, vv:=1426
+3746: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3755: down3 1491736 {159} v:=22510275+1491736=24002011, vv:=1520
+3759: push {141}
+level 11:(h=12526493,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=793,vv=1520)
+3760: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=12526493+37293=12563786, hh:=796
+3769: push {141}
+level 12:(h=12563786,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1520)
+3770: down3 -337360 {159} v:=24002011-337360=23664651, vv:=1499
+3774: push {141}
+level 13:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3775: push {141}
+level 14:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3776: down3 -554871 {159} v:=23664651-554871=23109780, vv:=1464
+3780: push {141}
+level 15:(h=12563786,v=23109780,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1464)
+3781: push {141}
+level 16:(h=12563786,v=23109780,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1464)
+3782: right3 392966 {145} h:=12563786+392966=12956752, hh:=821
+3786: setchar87 ("57) h:=12956752+571992=13528744, hh:=857
+3787: setchar105 ("69) h:=13528744+154740=13683484, hh:=867
+3788: setchar110 ("6E) h:=13683484+309480=13992964, hh:=887
+3789: setchar100 ("64) h:=13992964+309480=14302444, hh:=907
+3790: setchar111 ("6F) h:=14302444+278532=14580976, hh:=925
+3791: right2 -15474 {144} h:=14580976-15474=14565502, hh:=924
+3794: setchar119 ("77) h:=14565502+402324=14967826, hh:=949
+[ Window]
+3795: pop {142}
+level 16:(h=12563786,v=23109780,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1464)
+3796: pop {142}
+level 15:(h=12563786,v=23109780,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1464)
+3797: down3 554871 {159} v:=23109780+554871=23664651, vv:=1499
+3801: push {141}
+level 15:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3802: push {141}
+level 16:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3803: right3 338579 {145} h:=12563786+338579=12902365, hh:=817
+3807: setchar77 ("4D) h:=12902365+510096=13412461, hh:=849
+3808: setchar97 ("61) h:=13412461+278532=13690993, hh:=867
+3809: setchar110 ("6E) h:=13690993+309480=14000473, hh:=887
+3810: setchar97 ("61) h:=14000473+278532=14279005, hh:=905
+3811: setchar103 ("67) h:=14279005+278532=14557537, hh:=923
+3812: setchar101 ("65) h:=14557537+247584=14805121, hh:=939
+3813: setchar114 ("72) h:=14805121+217091=15022212, hh:=953
+[ Manager]
+3814: pop {142}
+level 16:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3815: pop {142}
+level 15:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3816: pop {142}
+level 14:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3817: pop {142}
+level 13:(h=12563786,v=23664651,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1499)
+3818: pop {142}
+level 12:(h=12563786,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=796,vv=1520)
+3819: right3 2797005 {145} h:=12563786+2797005=15360791, hh:=973
+[ ]
+3823: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=15360791+37293=15398084, hh:=976
+3832: pop {142}
+level 11:(h=12526493,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=793,vv=1520)
+3833: down3 37293 {159} v:=24002011+37293=24039304, vv:=1522
+3837: putrule {137} height 37293, width 2871591 (3x182 pixels)
+3846: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3847: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3848: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3849: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3850: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3851: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3852: right4 15696432 {146} h:=0+15696432=15696432, hh:=994
+[ ]
+3857: down3 -5594010 {159} v:=29596021-5594010=24002011, vv:=1520
+3861: putrule {137} height 37293, width 3617459 (3x230 pixels)
+3870: down3 1491736 {159} v:=24002011+1491736=25493747, vv:=1615
+3874: push {141}
+level 11:(h=15696432,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1615)
+3875: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=15696432+37293=15733725, hh:=997
+3884: push {141}
+level 12:(h=15733725,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1615)
+3885: down3 -614796 {159} v:=25493747-614796=24878951, vv:=1576
+3889: push {141}
+level 13:(h=15733725,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1576)
+3890: right3 560551 {145} h:=15733725+560551=16294276, hh:=1032
+3894: setchar88 ("58) h:=16294276+417252=16711528, hh:=1058
+3895: right3 185688 {145} h:=16711528+185688=16897216, hh:=1070
+3899: setchar76 ("4C) h:=16897216+347892=17245108, hh:=1092
+3900: setchar105 ("69) h:=17245108+154740=17399848, hh:=1102
+3901: setchar98 ("62) h:=17399848+309480=17709328, hh:=1122
+3902: setchar114 ("72) h:=17709328+217091=17926419, hh:=1136
+3903: setchar97 ("61) h:=17926419+278532=18204951, hh:=1154
+3904: setchar114 ("72) h:=18204951+217091=18422042, hh:=1168
+3905: setchar121 ("79) h:=18422042+294006=18716048, hh:=1187
+[ X Library]
+3906: pop {142}
+level 13:(h=15733725,v=24878951,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1576)
+3907: pop {142}
+level 12:(h=15733725,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1615)
+3908: right3 3542873 {145} h:=15733725+3542873=19276598, hh:=1221
+[ ]
+3912: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=19276598+37293=19313891, hh:=1224
+3921: pop {142}
+level 11:(h=15696432,v=25493747,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1615)
+3922: down3 37293 {159} v:=25493747+37293=25531040, vv:=1617
+3926: putrule {137} height 37293, width 3617459 (3x230 pixels)
+3935: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3936: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3937: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3938: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3939: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3940: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+3941: right4 15696432 {146} h:=0+15696432=15696432, hh:=994
+[ ]
+3946: down3 -7085746 {159} v:=29596021-7085746=22510275, vv:=1426
+3950: putrule {137} height 37293, width 3617459 (3x230 pixels)
+3959: down3 1491736 {159} v:=22510275+1491736=24002011, vv:=1520
+3963: push {141}
+level 11:(h=15696432,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1520)
+3964: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=15696432+37293=15733725, hh:=997
+3973: push {141}
+level 12:(h=15733725,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1520)
+3974: down3 -614796 {159} v:=24002011-614796=23387215, vv:=1481
+3978: push {141}
+level 13:(h=15733725,v=23387215,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1481)
+3979: right3 212113 {145} h:=15733725+212113=15945838, hh:=1010
+3983: setchar84 ("54) h:=15945838+402324=16348162, hh:=1035
+3984: right3 -46422 {145} h:=16348162-46422=16301740, hh:=1032
+3988: setchar101 ("65) h:=16301740+247584=16549324, hh:=1048
+3989: setchar120 ("78) h:=16549324+294006=16843330, hh:=1067
+3990: setchar116 ("74) h:=16843330+216636=17059966, hh:=1081
+3991: right3 185688 {145} h:=17059966+185688=17245654, hh:=1092
+3995: setchar76 ("4C) h:=17245654+347892=17593546, hh:=1114
+3996: setchar105 ("69) h:=17593546+154740=17748286, hh:=1124
+3997: setchar98 ("62) h:=17748286+309480=18057766, hh:=1144
+3998: setchar114 ("72) h:=18057766+217091=18274857, hh:=1158
+3999: setchar97 ("61) h:=18274857+278532=18553389, hh:=1176
+4000: setchar114 ("72) h:=18553389+217091=18770480, hh:=1190
+4001: setchar121 ("79) h:=18770480+294006=19064486, hh:=1209
+[ Text Library]
+4002: pop {142}
+level 13:(h=15733725,v=23387215,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1481)
+4003: pop {142}
+level 12:(h=15733725,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1520)
+4004: right3 3542873 {145} h:=15733725+3542873=19276598, hh:=1221
+[ ]
+4008: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=19276598+37293=19313891, hh:=1224
+4017: pop {142}
+level 11:(h=15696432,v=24002011,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1520)
+4018: down3 37293 {159} v:=24002011+37293=24039304, vv:=1522
+4022: putrule {137} height 37293, width 3617459 (3x230 pixels)
+4031: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4032: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4033: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4034: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4035: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4036: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4037: right4 15696432 {146} h:=0+15696432=15696432, hh:=994
+[ ]
+4042: down4 -8577482 {160} v:=29596021-8577482=21018539, vv:=1331
+4047: putrule {137} height 37293, width 3617459 (3x230 pixels)
+4056: down3 1491736 {159} v:=21018539+1491736=22510275, vv:=1426
+4060: push {141}
+level 11:(h=15696432,v=22510275,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1426)
+4061: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=15696432+37293=15733725, hh:=997
+4070: push {141}
+level 12:(h=15733725,v=22510275,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1426)
+4071: down3 -563823 {159} v:=22510275-563823=21946452, vv:=1390
+4075: push {141}
+level 13:(h=15733725,v=21946452,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1390)
+4076: right3 343869 {145} h:=15733725+343869=16077594, hh:=1018
+4080: setchar84 ("54) h:=16077594+402324=16479918, hh:=1043
+4081: right3 -46422 {145} h:=16479918-46422=16433496, hh:=1040
+4085: setchar101 ("65) h:=16433496+247584=16681080, hh:=1056
+4086: setchar120 ("78) h:=16681080+294006=16975086, hh:=1075
+4087: setchar116 ("74) h:=16975086+216636=17191722, hh:=1089
+4088: right3 185688 {145} h:=17191722+185688=17377410, hh:=1101
+4092: setchar69 ("45) h:=17377410+378840=17756250, hh:=1125
+4093: setchar100 ("64) h:=17756250+309480=18065730, hh:=1145
+4094: setchar105 ("69) h:=18065730+154740=18220470, hh:=1155
+4095: setchar116 ("74) h:=18220470+216636=18437106, hh:=1169
+4096: setchar111 ("6F) h:=18437106+278532=18715638, hh:=1187
+4097: setchar114 ("72) h:=18715638+217091=18932729, hh:=1201
+[ Text Editor]
+4098: pop {142}
+level 13:(h=15733725,v=21946452,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1390)
+4099: pop {142}
+level 12:(h=15733725,v=22510275,w=0,x=0,y=983040,z=0,d=0,hh=997,vv=1426)
+4100: right3 3542873 {145} h:=15733725+3542873=19276598, hh:=1221
+[ ]
+4104: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=19276598+37293=19313891, hh:=1224
+4113: pop {142}
+level 11:(h=15696432,v=22510275,w=0,x=0,y=983040,z=0,d=0,hh=994,vv=1426)
+4114: down3 37293 {159} v:=22510275+37293=22547568, vv:=1428
+4118: putrule {137} height 37293, width 3617459 (3x230 pixels)
+4127: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4128: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4129: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4130: push {141}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4131: push {141}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4132: push {141}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4133: right4 10475356 {146} h:=0+10475356=10475356, hh:=664
+[ ]
+4138: down3 -1491736 {159} v:=29596021-1491736=28104285, vv:=1780
+4142: putrule {137} height 37293, width 3803926 (3x241 pixels)
+4151: down3 1491736 {159} v:=28104285+1491736=29596021, vv:=1875
+4155: push {141}
+level 11:(h=10475356,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=664,vv=1875)
+4156: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=10475356+37293=10512649, hh:=667
+4165: push {141}
+level 12:(h=10512649,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=667,vv=1875)
+4166: down3 -566736 {159} v:=29596021-566736=29029285, vv:=1839
+4170: push {141}
+level 13:(h=10512649,v=29029285,w=0,x=0,y=983040,z=0,d=0,hh=667,vv=1839)
+4171: right3 804519 {145} h:=10512649+804519=11317168, hh:=717
+4175: setchar88 ("58) h:=11317168+417252=11734420, hh:=743
+4176: right3 185688 {145} h:=11734420+185688=11920108, hh:=755
+4180: setchar83 ("53) h:=11920108+309480=12229588, hh:=775
+4181: setchar101 ("65) h:=12229588+247584=12477172, hh:=791
+4182: setchar114 ("72) h:=12477172+217091=12694263, hh:=805
+4183: setchar118 ("76) h:=12694263+294006=12988269, hh:=824
+4184: right2 -15474 {144} h:=12988269-15474=12972795, hh:=823
+4187: setchar101 ("65) h:=12972795+247584=13220379, hh:=839
+4188: setchar114 ("72) h:=13220379+217091=13437470, hh:=853
+[ X Server]
+4189: pop {142}
+level 13:(h=10512649,v=29029285,w=0,x=0,y=983040,z=0,d=0,hh=667,vv=1839)
+4190: pop {142}
+level 12:(h=10512649,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=667,vv=1875)
+4191: right3 3729340 {145} h:=10512649+3729340=14241989, hh:=902
+[ ]
+4195: setrule {132} height 1491736, width 37293 (95x3 pixels)
+ h:=14241989+37293=14279282, hh:=905
+4204: pop {142}
+level 11:(h=10475356,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=664,vv=1875)
+4205: down3 37293 {159} v:=29596021+37293=29633314, vv:=1877
+4209: putrule {137} height 37293, width 3803926 (3x241 pixels)
+4218: pop {142}
+level 10:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4219: pop {142}
+level 9:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4220: pop {142}
+level 8:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4221: pop {142}
+level 7:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4222: pop {142}
+level 6:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4223: pop {142}
+level 5:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4224: pop {142}
+level 4:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4225: pop {142}
+level 3:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4226: pop {142}
+level 2:(h=0,v=29596021,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=1875)
+4227: down3 655360 {159} v:=29596021+655360=30251381, vv:=1916
+4231: down3 1876188 {159} v:=30251381+1876188=32127569, vv:=2035
+4235: push {141}
+level 2:(h=0,v=32127569,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2035)
+4236: right3 2775454 {145} h:=0+2775454=2775454, hh:=176
+[ ]
+4240: fntdef1 41 {243}: cmmi12
+4262: fntnum41 {212} current font is cmmi12
+4263: setchar117 ("75) h:=2775454+438267=3213721, hh:=204
+[u]
+4264: fntdef1 38 {243}: cmr12
+4285: fntnum38 {209} current font is cmr12
+4286: setchar40 ("28) h:=3213721+299460=3513181, hh:=223
+[(]
+4287: fntnum41 {212} current font is cmmi12
+4288: setchar120 ("78) h:=3513181+437586=3950767, hh:=251
+4289: setchar59 ("3B) h:=3950767+213900=4164667, hh:=265
+4290: w3 131070 {150} h:=4164667+131070=4295737, hh:=273
+4294: setchar116 ("74) h:=4295737+278070=4573807, hh:=291
+[x;t]
+4295: fntnum38 {209} current font is cmr12
+4296: setchar41 ("29) h:=4573807+299460=4873267, hh:=310
+4297: right3 218450 {145} h:=4873267+218450=5091717, hh:=323
+4301: setchar61 ("3D) h:=5091717+598920=5690637, hh:=361
+[) =]
+4302: push {141}
+level 3:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4303: push {141}
+level 4:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4304: push {141}
+level 5:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4305: down3 -532027 {159} v:=32127569-532027=31595542, vv:=2001
+4309: push {141}
+level 6:(h=5690637,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2001)
+4310: right3 366543 {145} h:=5690637+366543=6057180, hh:=384
+4314: setchar50 ("32) h:=6057180+385020=6442200, hh:=408
+[ 2]
+4315: pop {142}
+level 6:(h=5690637,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2001)
+4316: right3 297093 {145} h:=5690637+297093=5987730, hh:=379
+[ ]
+4320: down3 348525 {159} v:=31595542+348525=31944067, vv:=2023
+4324: putrule {137} height 26213, width 523919 (2x34 pixels)
+4333: down3 722955 {159} v:=31944067+722955=32667022, vv:=2069
+4337: push {141}
+level 6:(h=5987730,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=379,vv=2069)
+4338: fntnum41 {212} current font is cmmi12
+4339: setchar76 ("4C) h:=5987730+523919=6511649, hh:=412
+[L]
+4340: pop {142}
+level 6:(h=5987730,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=379,vv=2069)
+4341: pop {142}
+level 5:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4342: pop {142}
+level 4:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4343: pop {142}
+level 3:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4344: push {141}
+level 3:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4345: down3 -851971 {159} v:=32127569-851971=31275598, vv:=1981
+4349: push {141}
+level 4:(h=5690637,v=31275598,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=1981)
+4350: right3 1225510 {145} h:=5690637+1225510=6916147, hh:=438
+[ ]
+4354: fntdef1 62 {243}: cmsy8
+4375: fntnum62 {233} current font is cmsy8
+4376: setchar49 ("31) h:=6916147+557064=7473211, hh:=473
+[1]
+4377: pop {142}
+level 4:(h=5690637,v=31275598,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=1981)
+4378: down3 851971 {159} v:=31275598+851971=32127569, vv:=2035
+4382: push {141}
+level 4:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4383: push {141}
+level 5:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4384: right3 1030725 {145} h:=5690637+1030725=6721362, hh:=426
+[ ]
+4388: down3 -655364 {159} v:=32127569-655364=31472205, vv:=1993
+4392: fntdef1 0 {243}: cmex10
+4414: fntnum0 {171} current font is cmex10
+4415: setchar88 ("58) h:=6721362+946633=7667995, hh:=486
+[X]
+4416: pop {142}
+level 5:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4417: pop {142}
+level 4:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4418: down3 774785 {159} v:=32127569+774785=32902354, vv:=2084
+4422: push {141}
+level 4:(h=5690637,v=32902354,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2084)
+4423: right3 1364776 {145} h:=5690637+1364776=7055413, hh:=447
+[ ]
+4427: fntnum57 {228} current font is cmr8
+4428: setchar49 ("31) h:=7055413+278532=7333945, hh:=465
+[1]
+4429: pop {142}
+level 4:(h=5690637,v=32902354,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2084)
+4430: pop {142}
+level 3:(h=5690637,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=361,vv=2035)
+4431: right3 2108428 {145} h:=5690637+2108428=7799065, hh:=494
+[ ]
+4435: fntnum41 {212} current font is cmmi12
+4436: setchar101 ("65) h:=7799065+356895=8155960, hh:=517
+4437: setchar120 ("78) h:=8155960+437586=8593546, hh:=545
+4438: setchar112 ("70) h:=8593546+386477=8980023, hh:=569
+[exp]
+4439: push {141}
+level 3:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4440: push {141}
+level 4:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4441: push {141}
+level 5:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4442: w0 131070 {147} h:=8980023+131070=9111093, hh:=577
+4443: down3 -956834 {159} v:=32127569-956834=31170735, vv:=1974
+4447: fntnum0 {171} current font is cmex10
+4448: setchar18 ("12) h:=9111093+482420=9593513, hh:=608
+4449: pop {142}
+level 5:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4450: pop {142}
+level 4:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4451: pop {142}
+level 3:(h=8980023,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=569,vv=2035)
+4452: right3 613490 {145} h:=8980023+613490=9593513, hh:=608
+[ ]
+4456: fntdef1 44 {243}: cmsy10
+4478: fntnum44 {215} current font is cmsy10
+4479: setchar0 ("0) h:=9593513+611671=10205184, hh:=647
+4480: push {141}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4481: push {141}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4482: push {141}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4483: down3 -532027 {159} v:=32127569-532027=31595542, vv:=2001
+4487: push {141}
+level 6:(h=10205184,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2001)
+4488: right3 78643 {145} h:=10205184+78643=10283827, hh:=652
+4492: fntnum41 {212} current font is cmmi12
+4493: setchar117 ("75) h:=10283827+438267=10722094, hh:=680
+[u]
+4494: push {141}
+level 7:(h=10722094,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=680,vv=2001)
+4495: down3 -285390 {159} v:=31595542-285390=31310152, vv:=1983
+4499: fntnum57 {228} current font is cmr8
+4500: setchar50 ("32) h:=10722094+278532=11000626, hh:=698
+[2]
+4501: pop {142}
+level 7:(h=10722094,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=680,vv=2001)
+4502: right3 311300 {145} h:=10722094+311300=11033394, hh:=699
+[ ]
+4506: fntnum41 {212} current font is cmmi12
+4507: setchar25 ("19) h:=11033394+436812=11470206, hh:=727
+4508: push {141}
+level 7:(h=11470206,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=727,vv=2001)
+4509: right2 28217 {144} h:=11470206+28217=11498423, hh:=729
+4512: down3 -285390 {159} v:=31595542-285390=31310152, vv:=1983
+4516: fntnum57 {228} current font is cmr8
+4517: setchar50 ("32) h:=11498423+278532=11776955, hh:=747
+[2]
+4518: pop {142}
+level 7:(h=11470206,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=727,vv=2001)
+4519: right3 339517 {145} h:=11470206+339517=11809723, hh:=748
+[ ]
+4523: fntnum41 {212} current font is cmmi12
+4524: setchar107 ("6B) h:=11809723+400494=12210217, hh:=773
+4525: right2 26397 {144} h:=12210217+26397=12236614, hh:=775
+4528: setchar116 ("74) h:=12236614+278070=12514684, hh:=793
+[kt]
+4529: pop {142}
+level 6:(h=10205184,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2001)
+4530: right3 78643 {145} h:=10205184+78643=10283827, hh:=652
+4534: down3 348525 {159} v:=31595542+348525=31944067, vv:=2023
+4538: putrule {137} height 26213, width 2230857 (2x142 pixels)
+4547: down3 722955 {159} v:=31944067+722955=32667022, vv:=2069
+4551: push {141}
+level 6:(h=10283827,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=652,vv=2069)
+4552: right3 697819 {145} h:=10283827+697819=10981646, hh:=696
+4556: setchar76 ("4C) h:=10981646+523919=11505565, hh:=729
+[ L]
+4557: push {141}
+level 7:(h=11505565,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=729,vv=2069)
+4558: down3 -227191 {159} v:=32667022-227191=32439831, vv:=2055
+4562: fntnum57 {228} current font is cmr8
+4563: setchar50 ("32) h:=11505565+278532=11784097, hh:=747
+[2]
+4564: pop {142}
+level 7:(h=11505565,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=729,vv=2069)
+4565: pop {142}
+level 6:(h=10283827,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=652,vv=2069)
+4566: pop {142}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4567: pop {142}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4568: pop {142}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4569: push {141}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4570: push {141}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4571: push {141}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4572: right3 2388143 {145} h:=10205184+2388143=12593327, hh:=798
+[ ]
+4576: down3 -956834 {159} v:=32127569-956834=31170735, vv:=1974
+4580: fntnum0 {171} current font is cmex10
+4581: setchar19 ("13) h:=12593327+482420=13075747, hh:=829
+4582: pop {142}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4583: pop {142}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4584: pop {142}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4585: push {141}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4586: right3 3001633 {145} h:=10205184+3001633=13206817, hh:=837
+[ ]
+4590: fntnum38 {209} current font is cmr12
+4591: setchar115 ("73) h:=13206817+303738=13510555, hh:=856
+4592: setchar105 ("69) h:=13510555+213900=13724455, hh:=870
+4593: setchar110 ("6E) h:=13724455+427800=14152255, hh:=897
+[sin]
+4594: pop {142}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4595: push {141}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4596: push {141}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4597: push {141}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4598: down3 -532027 {159} v:=32127569-532027=31595542, vv:=2001
+4602: push {141}
+level 6:(h=10205184,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2001)
+4603: right3 4156784 {145} h:=10205184+4156784=14361968, hh:=910
+[ ]
+4607: fntnum41 {212} current font is cmmi12
+4608: setchar110 ("6E) h:=14361968+459657=14821625, hh:=939
+[n]
+4609: setchar25 ("19) h:=14821625+436812=15258437, hh:=967
+4610: right2 28217 {144} h:=15258437+28217=15286654, hh:=969
+4613: setchar120 ("78) h:=15286654+437586=15724240, hh:=997
+[x]
+4614: pop {142}
+level 6:(h=10205184,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2001)
+4615: right3 4156784 {145} h:=10205184+4156784=14361968, hh:=910
+[ ]
+4619: down3 348525 {159} v:=31595542+348525=31944067, vv:=2023
+4623: putrule {137} height 26213, width 1362272 (2x87 pixels)
+4632: down3 722955 {159} v:=31944067+722955=32667022, vv:=2069
+4636: push {141}
+level 6:(h=14361968,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=910,vv=2069)
+4637: right3 419177 {145} h:=14361968+419177=14781145, hh:=936
+4641: setchar76 ("4C) h:=14781145+523919=15305064, hh:=969
+[ L]
+4642: pop {142}
+level 6:(h=14361968,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=910,vv=2069)
+4643: pop {142}
+level 5:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4644: pop {142}
+level 4:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4645: pop {142}
+level 3:(h=10205184,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=647,vv=2035)
+4646: right3 5772459 {145} h:=10205184+5772459=15977643, hh:=1012
+[ ]
+4650: fntnum44 {215} current font is cmsy10
+4651: setchar2 ("2) h:=15977643+611671=16589314, hh:=1051
+4652: push {141}
+level 3:(h=16589314,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2035)
+4653: right3 174760 {145} h:=16589314+174760=16764074, hh:=1062
+[ ]
+4657: down3 -924793 {159} v:=32127569-924793=31202776, vv:=1976
+4661: fntnum0 {171} current font is cmex10
+4662: setchar90 ("5A) h:=16764074+364090=17128164, hh:=1085
+[Z]
+4663: pop {142}
+level 3:(h=16589314,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2035)
+4664: push {141}
+level 3:(h=16589314,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2035)
+4665: down3 -717262 {159} v:=32127569-717262=31410307, vv:=1990
+4669: push {141}
+level 4:(h=16589314,v=31410307,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=1990)
+4670: right3 830121 {145} h:=16589314+830121=17419435, hh:=1103
+[ ]
+4674: fntdef1 60 {243}: cmmi8
+4695: fntnum60 {231} current font is cmmi8
+4696: setchar76 ("4C) h:=17419435+378840=17798275, hh:=1127
+[L]
+4697: pop {142}
+level 4:(h=16589314,v=31410307,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=1990)
+4698: down3 1281608 {159} v:=31410307+1281608=32691915, vv:=2071
+4702: push {141}
+level 4:(h=16589314,v=32691915,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2071)
+4703: right3 538850 {145} h:=16589314+538850=17128164, hh:=1085
+[ ]
+4707: fntnum57 {228} current font is cmr8
+4708: setchar48 ("30) h:=17128164+278532=17406696, hh:=1103
+[0]
+4709: pop {142}
+level 4:(h=16589314,v=32691915,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2071)
+4710: pop {142}
+level 3:(h=16589314,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1051,vv=2035)
+4711: right3 1372799 {145} h:=16589314+1372799=17962113, hh:=1138
+[ ]
+4715: fntnum41 {212} current font is cmmi12
+4716: setchar102 ("66) h:=17962113+379560=18341673, hh:=1162
+4717: right3 83967 {145} h:=18341673+83967=18425640, hh:=1167
+[f]
+4721: fntnum38 {209} current font is cmr12
+4722: setchar40 ("28) h:=18425640+299460=18725100, hh:=1186
+[(]
+4723: fntnum41 {212} current font is cmmi12
+4724: setchar120 ("78) h:=18725100+437586=19162686, hh:=1214
+[x]
+4725: push {141}
+level 3:(h=19162686,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1214,vv=2035)
+4726: down3 -324711 {159} v:=32127569-324711=31802858, vv:=2014
+4730: fntnum62 {233} current font is cmsy8
+4731: setchar48 ("30) h:=19162686+151097=19313783, hh:=1224
+[0]
+4732: pop {142}
+level 3:(h=19162686,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1214,vv=2035)
+4733: right3 183865 {145} h:=19162686+183865=19346551, hh:=1225
+[ ]
+4737: fntnum38 {209} current font is cmr12
+4738: setchar41 ("29) h:=19346551+299460=19646011, hh:=1244
+[)]
+4739: push {141}
+level 3:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4740: w0 131070 {147} h:=19646011+131070=19777081, hh:=1252
+4741: setchar115 ("73) h:=19777081+303738=20080819, hh:=1271
+4742: setchar105 ("69) h:=20080819+213900=20294719, hh:=1285
+4743: setchar110 ("6E) h:=20294719+427800=20722519, hh:=1312
+[sin]
+4744: pop {142}
+level 3:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4745: push {141}
+level 3:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4746: push {141}
+level 4:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4747: push {141}
+level 5:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4748: down3 -532027 {159} v:=32127569-532027=31595542, vv:=2001
+4752: push {141}
+level 6:(h=19646011,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2001)
+4753: right3 1286221 {145} h:=19646011+1286221=20932232, hh:=1326
+[ ]
+4757: fntnum41 {212} current font is cmmi12
+4758: setchar110 ("6E) h:=20932232+459657=21391889, hh:=1355
+[n]
+4759: setchar25 ("19) h:=21391889+436812=21828701, hh:=1383
+4760: right2 28217 {144} h:=21828701+28217=21856918, hh:=1385
+4763: setchar120 ("78) h:=21856918+437586=22294504, hh:=1413
+[x]
+4764: push {141}
+level 7:(h=22294504,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=1413,vv=2001)
+4765: down3 -285390 {159} v:=31595542-285390=31310152, vv:=1983
+4769: fntnum62 {233} current font is cmsy8
+4770: setchar48 ("30) h:=22294504+151097=22445601, hh:=1423
+[0]
+4771: pop {142}
+level 7:(h=22294504,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=1413,vv=2001)
+4772: pop {142}
+level 6:(h=19646011,v=31595542,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2001)
+4773: right3 1286221 {145} h:=19646011+1286221=20932232, hh:=1326
+[ ]
+4777: down3 348525 {159} v:=31595542+348525=31944067, vv:=2023
+4781: putrule {137} height 26213, width 1546137 (2x98 pixels)
+4790: down3 722955 {159} v:=31944067+722955=32667022, vv:=2069
+4794: push {141}
+level 6:(h=20932232,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=1326,vv=2069)
+4795: right3 511109 {145} h:=20932232+511109=21443341, hh:=1358
+[ ]
+4799: fntnum41 {212} current font is cmmi12
+4800: setchar76 ("4C) h:=21443341+523919=21967260, hh:=1391
+[L]
+4801: pop {142}
+level 6:(h=20932232,v=32667022,w=131070,x=0,y=983040,z=0,d=0,hh=1326,vv=2069)
+4802: pop {142}
+level 5:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4803: pop {142}
+level 4:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4804: pop {142}
+level 3:(h=19646011,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1244,vv=2035)
+4805: right3 3042071 {145} h:=19646011+3042071=22688082, hh:=1437
+4809: setchar100 ("64) h:=22688082+400130=23088212, hh:=1462
+4810: setchar120 ("78) h:=23088212+437586=23525798, hh:=1490
+[ dx]
+4811: push {141}
+level 3:(h=23525798,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1490,vv=2035)
+4812: down3 -324711 {159} v:=32127569-324711=31802858, vv:=2014
+4816: fntnum62 {233} current font is cmsy8
+4817: setchar48 ("30) h:=23525798+151097=23676895, hh:=1500
+[0]
+4818: pop {142}
+level 3:(h=23525798,v=32127569,w=131070,x=0,y=983040,z=0,d=0,hh=1490,vv=2035)
+4819: pop {142}
+level 2:(h=0,v=32127569,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2035)
+4820: down3 1638400 {159} v:=32127569+1638400=33765969, vv:=2139
+4824: down3 1769472 {159} v:=33765969+1769472=35535441, vv:=2251
+4828: push {141}
+level 2:(h=0,v=35535441,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2251)
+4829: right4 11729124 {146} h:=0+11729124=11729124, hh:=743
+[ ]
+4834: fntdef1 22 {243}: goth10
+4856: fntnum22 {193} current font is goth10
+4857: set2 9506 {129}("2522) type=10 h:=11729124+756717=12485841, hh:=791
+4860: set2 9529 {129}("2539) type=0 h:=12485841+756717=13242558, hh:=839
+4863: set2 9517 {129}("252D) type=0 h:=13242558+756717=13999275, hh:=887
+4866: set2 8508 {129}("213C) type=0 h:=13999275+756717=14755992, hh:=935
+[アスキー]
+4869: pop {142}
+level 2:(h=0,v=35535441,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2251)
+4870: down3 1376256 {159} v:=35535441+1376256=36911697, vv:=2338
+4874: push {141}
+level 2:(h=0,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2338)
+4875: right4 10504896 {146} h:=0+10504896=10504896, hh:=665
+[ ]
+4880: fntdef1 47 {243}: goth10
+4902: fntnum47 {218} current font is goth10
+4903: set2 18044 {129}("467C) type=0 h:=10504896+908060=11412956, hh:=723
+4906: set2 19292 {129}("4B5C) type=0 h:=11412956+908060=12321016, hh:=781
+4909: set2 14444 {129}("386C) type=0 h:=12321016+908060=13229076, hh:=839
+4912: right3 157649 {145} h:=13229076+157649=13386725, hh:=848
+[日本語 ]
+4916: fntnum48 {219} current font is cmbx12
+4917: setchar76 ("4C) h:=13386725+637883=14024608, hh:=888
+[L]
+4918: push {141}
+level 3:(h=14024608,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=888,vv=2338)
+4919: down3 -197845 {159} v:=36911697-197845=36713852, vv:=2325
+4923: push {141}
+level 4:(h=14024608,v=36713852,w=0,x=0,y=983040,z=0,d=0,hh=888,vv=2325)
+4924: right3 -382206 {145} h:=14024608-382206=13642402, hh:=864
+4928: fntnum49 {220} current font is cmbx10
+4929: setchar65 ("41) h:=13642402+569796=14212198, hh:=900
+[A]
+4930: pop {142}
+level 4:(h=14024608,v=36713852,w=0,x=0,y=983040,z=0,d=0,hh=888,vv=2325)
+4931: pop {142}
+level 3:(h=14024608,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=888,vv=2338)
+4932: right2 28345 {144} h:=14024608+28345=14052953, hh:=890
+4935: fntnum48 {219} current font is cmbx12
+4936: setchar84 ("54) h:=14052953+738371=14791324, hh:=937
+[T]
+4937: push {141}
+level 3:(h=14791324,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=937,vv=2338)
+4938: right3 -176984 {145} h:=14791324-176984=14614340, hh:=926
+4942: down3 209714 {159} v:=36911697+209714=37121411, vv:=2351
+4946: setchar69 ("45) h:=14614340+696866=15311206, hh:=970
+[E]
+4947: pop {142}
+level 3:(h=14791324,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=937,vv=2338)
+4948: right3 387172 {145} h:=14791324+387172=15178496, hh:=961
+4952: setchar88 ("58) h:=15178496+801724=15980220, hh:=1012
+[ X]
+4953: pop {142}
+level 2:(h=0,v=36911697,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2338)
+4954: down3 1310720 {159} v:=36911697+1310720=38222417, vv:=2421
+4958: push {141}
+level 2:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4959: push {141}
+level 3:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4960: push {141}
+level 4:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4961: push {141}
+level 5:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4962: push {141}
+level 6:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4963: right3 7647652 {145} h:=0+7647652=7647652, hh:=484
+[ ]
+4967: down2 -16312 {158} v:=38222417-16312=38206105, vv:=2420
+4970: fntdef1 69 {243}: cmbx8
+4991: fnt1 69 {235} current font is cmbx8
+4993: setchar99 ("63) h:=7647652+285448=7933100, hh:=502
+[c]
+4994: pop {142}
+level 6:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4995: pop {142}
+level 5:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4996: pop {142}
+level 4:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4997: push {141}
+level 4:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4998: push {141}
+level 5:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+4999: right3 7469247 {145} h:=0+7469247=7469247, hh:=473
+[ ]
+5003: fntdef1 70 {243}: cmbsy8
+5025: fnt1 70 {235} current font is cmbsy8
+5027: setchar13 ("D) h:=7469247+642258=8111505, hh:=514
+5028: pop {142}
+level 5:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+5029: pop {142}
+level 4:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+5030: pop {142}
+level 3:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+5031: right3 8325591 {145} h:=0+8325591=8325591, hh:=527
+[ ]
+5035: fnt1 69 {235} current font is cmbx8
+5037: setchar67 ("43) h:=8325591+463853=8789444, hh:=556
+5038: setchar111 ("6F) h:=8789444+321129=9110573, hh:=576
+5039: setchar112 ("70) h:=9110573+356810=9467383, hh:=599
+5040: w2 -17841 {149} h:=9467383-17841=9449542, hh:=598
+5043: setchar121 ("79) h:=9449542+338970=9788512, hh:=619
+5044: setchar114 ("72) h:=9788512+265423=10053935, hh:=636
+5045: setchar105 ("69) h:=10053935+178405=10232340, hh:=647
+5046: setchar103 ("67) h:=10232340+321129=10553469, hh:=667
+5047: setchar104 ("68) h:=10553469+356810=10910279, hh:=690
+5048: w0 -17841 {147} h:=10910279-17841=10892438, hh:=689
+5049: setchar116 ("74) h:=10892438+249767=11142205, hh:=705
+5050: w3 214086 {150} h:=11142205+214086=11356291, hh:=719
+5054: setchar49 ("31) h:=11356291+321129=11677420, hh:=739
+5055: setchar57 ("39) h:=11677420+321129=11998549, hh:=759
+5056: setchar57 ("39) h:=11998549+321129=12319678, hh:=779
+5057: setchar52 ("34) h:=12319678+321129=12640807, hh:=799
+5058: w0 214086 {147} h:=12640807+214086=12854893, hh:=814
+5059: setchar98 ("62) h:=12854893+356810=13211703, hh:=837
+5060: right2 -17841 {144} h:=13211703-17841=13193862, hh:=836
+5063: setchar121 ("79) h:=13193862+338970=13532832, hh:=857
+5064: w0 214086 {147} h:=13532832+214086=13746918, hh:=871
+5065: setchar65 ("41) h:=13746918+483513=14230431, hh:=902
+5066: setchar83 ("53) h:=14230431+356810=14587241, hh:=925
+5067: setchar67 ("43) h:=14587241+463853=15051094, hh:=954
+5068: setchar73 ("49) h:=15051094+240663=15291757, hh:=969
+5069: x2 17841 {154} h:=15291757+17841=15309598, hh:=970
+5072: setchar73 ("49) h:=15309598+240663=15550261, hh:=985
+5073: w0 214086 {147} h:=15550261+214086=15764347, hh:=999
+5074: setchar99 ("63) h:=15764347+285448=16049795, hh:=1017
+5075: setchar111 ("6F) h:=16049795+321129=16370924, hh:=1037
+5076: setchar114 ("72) h:=16370924+265423=16636347, hh:=1054
+5077: setchar112 ("70) h:=16636347+356810=16993157, hh:=1077
+5078: x0 17841 {152} h:=16993157+17841=17010998, hh:=1078
+5079: setchar111 ("6F) h:=17010998+321129=17332127, hh:=1098
+5080: setchar114 ("72) h:=17332127+265423=17597550, hh:=1115
+5081: setchar97 ("61) h:=17597550+312209=17909759, hh:=1135
+5082: setchar116 ("74) h:=17909759+249767=18159526, hh:=1151
+5083: setchar105 ("69) h:=18159526+178405=18337931, hh:=1162
+5084: setchar111 ("6F) h:=18337931+321129=18659060, hh:=1182
+5085: setchar110 ("6E) h:=18659060+356810=19015870, hh:=1205
+[Copyright 1994 by ASCII corporation]
+5086: pop {142}
+level 2:(h=0,v=38222417,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2421)
+5087: down3 2129920 {159} v:=38222417+2129920=40352337, vv:=2556
+5091: push {141}
+level 2:(h=0,v=40352337,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2556)
+5092: push {141}
+level 3:(h=0,v=40352337,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2556)
+5093: right4 12869623 {146} h:=0+12869623=12869623, hh:=815
+[ ]
+5098: down3 372935 {159} v:=40352337+372935=40725272, vv:=2580
+5102: setrule {132} height 745870, width 745871 (48x48 pixels)
+ h:=12869623+745871=13615494, hh:=863
+5111: pop {142}
+level 3:(h=0,v=40352337,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2556)
+5112: pop {142}
+level 2:(h=0,v=40352337,w=0,x=0,y=983040,z=0,d=0,hh=0,vv=2556)
+5113: pop {142}
+level 1:(h=0,v=41416109,w=0,x=0,y=0,z=0,d=0,hh=0,vv=2623)
+5114: pop {142}
+level 0:(h=0,v=43382189,w=0,x=0,y=0,z=0,d=0,hh=0,vv=2748)
+5115: eop {140}
diff --git a/Build/source/texk/web2c/ptexdir/tests/skipjfmp.pl b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.pl
new file mode 100644
index 00000000000..3d5f0bff790
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.pl
@@ -0,0 +1,159 @@
+(COMMENT THIS IS A KANJI FORMAT FILE)
+(FAMILY JFM SKIP)
+(FACE F MRR)
+(CODINGSCHEME TEX KANJI TEXT)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 0)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.1)
+ (SHRINK R 0.0)
+ (XHEIGHT R 1.0)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.25)
+ (EXTRASTRETCH R 0.2)
+ (EXTRASHRINK R 0.125)
+ )
+(GLUEKERN
+ (LABEL O 0)
+ (GLUE O 1 R 0.5 R 0.0 R 0.0)
+ (GLUE O 2 R 0.5 R 0.0 R 0.01)
+ (GLUE O 6 R 0.5 R 0.0 R 0.02)
+ (GLUE O 3 R 0.25 R 0.0 R 0.03)
+ (GLUE O 4 R 0.25 R 0.0 R 0.04)
+ (STOP)
+ (LABEL O 1)
+ (GLUE O 4 R 0.25 R 0.0 R 0.05)
+ (SKIP D 19)
+ (LABEL O 2)
+ (GLUE O 3 R 0.25 R 0.0 R 0.06)
+ (SKIP D 16)
+ (LABEL O 3)
+ (GLUE O 1 R 0.25 R 0.0 R 0.07)
+ (GLUE O 2 R 0.25 R 0.0 R 0.08)
+ (GLUE O 6 R 0.25 R 0.0 R 0.09)
+ (GLUE O 0 R 0.25 R 0.0 R 0.1)
+ (SKIP D 4)
+ (LABEL O 4)
+ (GLUE O 0 R 0.25 R 0.0 R 0.11)
+ (GLUE O 1 R 0.25 R 0.0 R 0.12)
+ (GLUE O 2 R 0.25 R 0.0 R 0.13)
+ (GLUE O 6 R 0.25 R 0.0 R 0.14)
+ (GLUE O 3 R 0.5 R 0.0 R 0.15)
+ (GLUE O 4 R 0.5 R 0.0 R 0.16)
+ (GLUE O 5 R 0.25 R 0.0 R 0.17)
+ (STOP)
+ (LABEL O 5)
+ (KRN O 5 R 0.0)
+ (GLUE O 1 R 0.5 R 0.0 R 0.18)
+ (GLUE O 2 R 0.5 R 0.0 R 0.19)
+ (GLUE O 6 R 0.5 R 0.0 R 0.2)
+ (GLUE O 3 R 0.25 R 0.0 R 0.21)
+ (GLUE O 4 R 0.25 R 0.0 R 0.22)
+ (STOP)
+ (LABEL O 6)
+ (GLUE O 4 R 0.25 R 0.0 R 0.23)
+ (GLUE O 3 R 0.25 R 0.0 R 0.24)
+ (STOP)
+ )
+(CHARSINTYPE O 1
+ J 214A
+ )
+(CHARSINTYPE O 2
+ J 2156
+ )
+(CHARSINTYPE O 3
+ J 2127
+ )
+(CHARSINTYPE O 4
+ J 2128
+ )
+(CHARSINTYPE O 5
+ J 2144
+ )
+(CHARSINTYPE O 6
+ J 215A
+ )
+(TYPE O 0
+ (CHARWD R 1.0)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 1 R 0.5 R 0.0 R 0.0)
+ (GLUE O 2 R 0.5 R 0.0 R 0.01)
+ (GLUE O 6 R 0.5 R 0.0 R 0.02)
+ (GLUE O 3 R 0.25 R 0.0 R 0.03)
+ (GLUE O 4 R 0.25 R 0.0 R 0.04)
+ )
+ )
+(TYPE O 1
+ (CHARWD R 0.5)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 4 R 0.25 R 0.0 R 0.05)
+ (GLUE O 3 R 0.25 R 0.0 R 0.24)
+ )
+ )
+(TYPE O 2
+ (CHARWD R 0.5)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 3 R 0.25 R 0.0 R 0.06)
+ (GLUE O 4 R 0.25 R 0.0 R 0.22)
+ )
+ )
+(TYPE O 3
+ (CHARWD R 0.5)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 1 R 0.25 R 0.0 R 0.07)
+ (GLUE O 2 R 0.25 R 0.0 R 0.08)
+ (GLUE O 6 R 0.25 R 0.0 R 0.09)
+ (GLUE O 0 R 0.25 R 0.0 R 0.1)
+ (GLUE O 3 R 0.5 R 0.0 R 0.15)
+ (GLUE O 4 R 0.5 R 0.0 R 0.16)
+ (GLUE O 5 R 0.25 R 0.0 R 0.17)
+ )
+ )
+(TYPE O 4
+ (CHARWD R 0.5)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 0 R 0.25 R 0.0 R 0.11)
+ (GLUE O 1 R 0.25 R 0.0 R 0.12)
+ (GLUE O 2 R 0.25 R 0.0 R 0.13)
+ (GLUE O 6 R 0.25 R 0.0 R 0.14)
+ (GLUE O 3 R 0.5 R 0.0 R 0.15)
+ (GLUE O 4 R 0.5 R 0.0 R 0.16)
+ (GLUE O 5 R 0.25 R 0.0 R 0.17)
+ )
+ )
+(TYPE O 5
+ (CHARWD R 1.0)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (KRN O 5 R 0.0)
+ (GLUE O 1 R 0.5 R 0.0 R 0.18)
+ (GLUE O 2 R 0.5 R 0.0 R 0.19)
+ (GLUE O 6 R 0.5 R 0.0 R 0.2)
+ (GLUE O 3 R 0.25 R 0.0 R 0.21)
+ (GLUE O 4 R 0.25 R 0.0 R 0.22)
+ )
+ )
+(TYPE O 6
+ (CHARWD R 0.5)
+ (CHARHT R 0.88)
+ (CHARDP R 0.12)
+ (COMMENT
+ (GLUE O 4 R 0.25 R 0.0 R 0.23)
+ (GLUE O 3 R 0.25 R 0.0 R 0.24)
+ )
+ )
diff --git a/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tex b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tex
new file mode 100644
index 00000000000..274c5729bc9
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tex
@@ -0,0 +1,33 @@
+\prebreakpenalty`…=0
+\postbreakpenalty`「=0
+\postbreakpenalty`【=0
+\postbreakpenalty`(=0
+\postbreakpenalty`:=0
+\postbreakpenalty`;=0
+
+\tracingonline1
+\showboxdepth10000
+\showboxbreadth10000
+
+\font\x=jis\x
+\setbox0=\hbox{あ…あ「あ【あ(あ:あ;あ}\showbox0
+\box0
+
+\font\y=skipjfmp at 9.62216pt\y
+\setbox2=\hbox{あ…あ「あ【あ(あ:あ;あ}\showbox2
+\box2
+
+\newfam\mx
+\newfam\my
+\textfont\mx=\x \scriptfont\mx=\x \scriptscriptfont\mx=\x
+\textfont\my=\y \scriptfont\my=\y \scriptscriptfont\my=\y
+
+\jfam\mx
+\setbox4=\hbox{$あ…あ「あ【あ(あ:あ;あ$}\showbox4
+\box4
+
+\jfam\my
+\setbox6=\hbox{$あ…あ「あ【あ(あ:あ;あ$}\showbox6
+\box6
+
+\bye
diff --git a/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tfm b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tfm
new file mode 100644
index 00000000000..1b6c4f18d07
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/skipjfmp.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/ptexdir/tests/tmin10.pl b/Build/source/texk/web2c/ptexdir/tests/tmin10.pl
new file mode 100644
index 00000000000..52a18cf5fbc
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/tmin10.pl
@@ -0,0 +1,285 @@
+(COMMENT THIS IS A KANJI FORMAT FILE)
+(DIRECTION TATE)
+(FAMILY MINCHO)
+(FACE F MRR)
+(CODINGSCHEME JIS X0208)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 35147750366)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.091641)
+ (SHRINK R 0.0)
+ (XHEIGHT R 0.916443)
+ (QUAD R 0.962216)
+ (EXTRASPACE R 0.229101)
+ (EXTRASTRETCH R 0.183283)
+ (EXTRASHRINK R 0.114551)
+ )
+(GLUEKERN
+ (LABEL O 0)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 1)
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 2)
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 3)
+ (GLUE O 0 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 4)
+ (GLUE O 0 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 7 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 5)
+ (GLUE O 0 R 0.0 R 0.0 R 0.0)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.0 R 0.0 R 0.0)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 6)
+ (GLUE O 0 R 0.0 R 0.0 R 0.0)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.0 R 0.0 R 0.0)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.0 R 0.0 R 0.0)
+ (GLUE O 7 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ (LABEL O 7)
+ (GLUE O 0 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 1 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 2 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 3 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 4 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 5 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 6 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 7 R 0.0 R 0.183283 R 0.0)
+ (GLUE O 10 R 0.240554 R 0.0 R 0.240554)
+ (STOP)
+ (LABEL O 10)
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ (STOP)
+ )
+(CHARSINTYPE O 1
+ J 2124 J 2125
+ )
+(CHARSINTYPE O 2
+ J 2122 J 2123
+ )
+(CHARSINTYPE O 3
+ J 2133 J 2134 J 2135 J 2136 J 2137 J 2139 J 2421 J 2423 J 2425 J 2427
+ J 2429 J 2443 J 2463 J 2465 J 2467 J 246E J 2521 J 2523 J 2525 J 2527
+ J 2529 J 2543 J 2563 J 2565 J 2567 J 256E J 2575 J 2576
+ )
+(CHARSINTYPE O 4
+ J 2129 J 212A
+ )
+(CHARSINTYPE O 5
+ J 213D J 2144 J 2145
+ )
+(CHARSINTYPE O 6
+ J 2146 J 2148 J 214A J 214C J 214E J 2150 J 2152 J 2154 J 2156 J 2158
+ J 215A
+ )
+(CHARSINTYPE O 7
+ J 2126 J 213E J 2142 J 2143
+ )
+(CHARSINTYPE O 10
+ J 2147 J 2149 J 214B J 214D J 214F J 2151 J 2153 J 2155 J 2157 J 2159
+ J 215B
+ )
+(TYPE O 0
+ (CHARWD R 0.962216)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 1
+ (CHARWD R 0.481108)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 2
+ (CHARWD R 0.481108)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 3
+ (CHARWD R 0.747434)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.107391 R 0.0 R 0.107391)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 4
+ (CHARWD R 0.962216)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 7 R 0.962216 R 0.0 R 0.481108)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 5
+ (CHARWD R 0.962216)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.0 R 0.0 R 0.0)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.0 R 0.0 R 0.0)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 6
+ (CHARWD R 0.481108)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.0 R 0.0 R 0.0)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.0 R 0.0 R 0.0)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.0 R 0.0 R 0.0)
+ (GLUE O 6 R 0.0 R 0.0 R 0.0)
+ (GLUE O 7 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
+(TYPE O 7
+ (CHARWD R 0.481108)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 1 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 2 R 0.240554 R 0.0 R 0.240554)
+ (GLUE O 3 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 4 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 5 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 6 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 7 R 0.0 R 0.183283 R 0.0)
+ (GLUE O 10 R 0.240554 R 0.0 R 0.240554)
+ )
+ )
+(TYPE O 10
+ (CHARWD R 0.481108)
+ (CHARHT R 0.458221)
+ (CHARDP R 0.458221)
+ (COMMENT
+ (GLUE O 0 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 1 R 0.0 R 0.0 R 0.0)
+ (GLUE O 2 R 0.0 R 0.0 R 0.0)
+ (GLUE O 3 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 4 R 0.0 R 0.0 R 0.0)
+ (GLUE O 5 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 6 R 0.481108 R 0.183283 R 0.481108)
+ (GLUE O 7 R 0.240554 R 0.183283 R 0.240554)
+ (GLUE O 10 R 0.0 R 0.0 R 0.0)
+ )
+ )
diff --git a/Build/source/texk/web2c/ptexdir/tests/tmin10.tfm b/Build/source/texk/web2c/ptexdir/tests/tmin10.tfm
new file mode 100644
index 00000000000..a54690f5656
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/tmin10.tfm
Binary files differ
diff --git a/Build/source/texk/web2c/ptexdir/yokotate.test b/Build/source/texk/web2c/ptexdir/yokotate.test
new file mode 100755
index 00000000000..7429c797833
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/yokotate.test
@@ -0,0 +1,23 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010-2013 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d ptests || mkdir -p ptests
+
+# Test inputs
+testdir=$srcdir/ptexdir/tests
+
+# Testing pPLtoTF/pTFtoPL for min10 (yoko=horiz) and tmin10 (tate=vert).
+for font in min10 tmin10; do
+
+ ./ppltotf -verbose $testdir/$font.pl ptests/x$font.tfm && \
+ cmp $testdir/$font.tfm ptests/x$font.tfm && echo || exit 1
+
+ TEXMFCNF=$srcdir/../kpathsea \
+ ./ptftopl -charcode-format octal -verbose $testdir/$font.tfm ptests/x$font.pl && \
+ diff $testdir/$font.pl ptests/x$font.pl && echo || exit 1
+
+done
+
diff --git a/Build/source/texk/web2c/ptexdir/zfmtcompress.test b/Build/source/texk/web2c/ptexdir/zfmtcompress.test
new file mode 100755
index 00000000000..49da1174f9b
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/zfmtcompress.test
@@ -0,0 +1,95 @@
+#!/bin/sh -vx
+# $Id$
+# Public domain. Originally written by Hironori Kitagawa, 2019.
+# This test is intended to be used in a suitable temporary directory
+# after installing all engines. It should not be enabled in build stage.
+
+cat <<'EOF' > stress.tex
+\let\origdump=\dump\let\dump\relax
+\batchmode
+\input plain.tex
+\let\dump\origdump
+
+\count0=0
+\def\A{\ifnum\count0<450000
+ \count1=1000000 \advance\count1\count0
+ \edef\N{QW\the\count1}
+ \expandafter\xdef\csname HOGE\N\endcsname{ABCDEFGHI}%
+ \advance\count0 by1\let\next=\A\else\let\next\relax
+ \fi\next}
+\A
+\let\N\undefined
+\count0=0
+\def\A{\ifnum\count0<199
+ \count1=1000000 \advance\count1\count0
+ \edef\N{\the\count1}
+ \font\S=cmr10 at \N sp\fontdimen39707\S=1sp
+ \advance\count0 by1\let\next=\A\else\let\next\relax
+ \fi\next}
+\A
+\dump
+EOF
+
+cat <<'EOF' > test0.tex
+\font\a=cmss10 at 1000000sp
+\a qwertyuiopasdfghjkl$\int^\infty_0 e^{-x^2}\,dx$\end
+EOF
+
+
+test0() {
+ ENGINE=$1
+ echo $ENGINE
+ rm -f stress-$ENGINE.fmt test0.dvi test0.xdv &>/dev/null
+ $ENGINE -ini -etex -progname=$ENGINE -jobname=stress-$ENGINE stress &>/dev/null
+ ls -l stress-$ENGINE.fmt
+ if [[ $ENGINE = "xetex" ]]; then
+ $ENGINE -fmt=./stress-$ENGINE.fmt -no-pdf test0.tex &>/dev/null
+ ls -l test0.xdv
+ else
+ $ENGINE -fmt=./stress-$ENGINE.fmt test0.tex &>/dev/null
+ ls -l test0.dvi
+ fi
+}
+
+test0 tex
+test0 etex
+test0 pdftex
+test0 ptex
+test0 eptex
+test0 uptex
+test0 euptex
+test0 xetex
+
+cat <<'EOF' > test1.tex
+\documentclass{article}
+\begin{document}
+The \textit{quick} \textbf{brown} \textsc{fox} jumps over the lazy dog.
+\[
+ \frac{\pi}{2} =
+ \left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 =
+ \sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
+ \prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1}
+\]
+\end{document}
+EOF
+
+test1() {
+ ENGINE=$1
+ echo $ENGINE
+ rm -f latex-$ENGINE.fmt test1.dvi test1.xdv &>/dev/null
+ $ENGINE -ini -etex -progname=latex-dev -jobname=latex-$ENGINE latex.ini &>/dev/null
+ ls -l latex-$ENGINE.fmt
+ if [[ $ENGINE = "xetex" ]]; then
+ $ENGINE -fmt=./latex-$ENGINE.fmt -no-pdf test1.tex &>/dev/null
+ ls -l test1.xdv
+ else
+ $ENGINE -fmt=./latex-$ENGINE.fmt test1.tex &>/dev/null
+ ls -l test1.dvi
+ fi
+}
+
+test1 etex
+test1 pdftex
+test1 eptex
+test1 euptex
+test1 xetex