diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-03-30 11:13:40 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-03-30 11:13:40 +0000 |
commit | cebdda463446a4efc44c356c0e8c85d4a8932373 (patch) | |
tree | 991922e9198a0245e34ee54e7362a19828666d68 /Build/source | |
parent | f6449e724e0cf3a3559dd53daf9ba5e23ce783e5 (diff) |
remove Omega and references to the defunct eOmega and pdfeTeX
git-svn-id: svn://tug.org/texlive/trunk@12570 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
70 files changed, 763 insertions, 23466 deletions
diff --git a/Build/source/README.cross b/Build/source/README.cross index 4bdd18e4bde..9e9da1389c1 100644 --- a/Build/source/README.cross +++ b/Build/source/README.cross @@ -17,8 +17,8 @@ programs required for the build process as configure arguments BUILDCFLAGS=... BUILDLDFLAGS=... -Build the Web2C programs requires installed versions of tangle, ctangle, and -tie (and possibly otangle and/or luatangle). +Building the Web2C programs requires installed versions of tangle, ctangle, +and tie (and possibly otangle and/or luatangle). At the moment a cross compilation of xetex is not possible, because the icu-xetex library does not support cross compilation. diff --git a/Build/source/configure b/Build/source/configure index 6bc06eb3617..d064ec19d0b 100755 --- a/Build/source/configure +++ b/Build/source/configure @@ -932,7 +932,6 @@ enable_fmtutil enable_ipc enable_tex enable_etex -enable_omega enable_aleph enable_pdftex enable_luatex @@ -1705,7 +1704,6 @@ Optional Features: --enable-ipc enable TeX's --ipc option, i.e., pipe to a program --disable-tex do not compile and install TeX --enable-etex compile and install e-TeX - --enable-omega compile and install Omega --disable-aleph do not compile and install Aleph --disable-pdftex do not compile and install pdfTeX --disable-luatex do not compile and install luaTeX @@ -2618,14 +2616,6 @@ case $enable_etex in yes|no) : ;; *) enable_etex=no ;; esac -# Check whether --enable-omega was given. -if test "${enable_omega+set}" = set; then - enableval=$enable_omega; -fi -case $enable_omega in - yes|no) : ;; - *) enable_omega=no ;; -esac # Check whether --enable-aleph was given. if test "${enable_aleph+set}" = set; then enableval=$enable_aleph; @@ -5873,13 +5863,13 @@ if test "${lt_cv_nm_interface+set}" = set; then else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:5876: $ac_compile\"" >&5) + (eval echo "\"\$as_me:5866: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:5879: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:5869: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:5882: output\"" >&5) + (eval echo "\"\$as_me:5872: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -7085,7 +7075,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 7088 "configure"' > conftest.$ac_ext + echo '#line 7078 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -9132,11 +9122,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9135: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9125: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9139: \$? = $ac_status" >&5 + echo "$as_me:9129: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9471,11 +9461,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9474: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9464: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9478: \$? = $ac_status" >&5 + echo "$as_me:9468: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9576,11 +9566,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9579: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9569: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9583: \$? = $ac_status" >&5 + echo "$as_me:9573: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9631,11 +9621,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9634: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9624: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9638: \$? = $ac_status" >&5 + echo "$as_me:9628: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12431,7 +12421,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12434 "configure" +#line 12424 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12527,7 +12517,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12530 "configure" +#line 12520 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18923,11 +18913,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:18926: $lt_compile\"" >&5) + (eval echo "\"\$as_me:18916: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:18930: \$? = $ac_status" >&5 + echo "$as_me:18920: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -19022,11 +19012,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:19025: $lt_compile\"" >&5) + (eval echo "\"\$as_me:19015: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:19029: \$? = $ac_status" >&5 + echo "$as_me:19019: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -19074,11 +19064,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:19077: $lt_compile\"" >&5) + (eval echo "\"\$as_me:19067: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:19081: \$? = $ac_status" >&5 + echo "$as_me:19071: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized diff --git a/Build/source/libs/configure b/Build/source/libs/configure index 79cb184d412..a78cf9d4e94 100755 --- a/Build/source/libs/configure +++ b/Build/source/libs/configure @@ -699,7 +699,6 @@ enable_fmtutil enable_ipc enable_tex enable_etex -enable_omega enable_aleph enable_pdftex enable_luatex @@ -1458,7 +1457,6 @@ Optional Features: --enable-ipc enable TeX's --ipc option, i.e., pipe to a program --disable-tex do not compile and install TeX --enable-etex compile and install e-TeX - --enable-omega compile and install Omega --disable-aleph do not compile and install Aleph --disable-pdftex do not compile and install pdfTeX --disable-luatex do not compile and install luaTeX @@ -2342,14 +2340,6 @@ case $enable_etex in yes|no) : ;; *) enable_etex=no ;; esac -# Check whether --enable-omega was given. -if test "${enable_omega+set}" = set; then - enableval=$enable_omega; -fi -case $enable_omega in - yes|no) : ;; - *) enable_omega=no ;; -esac # Check whether --enable-aleph was given. if test "${enable_aleph+set}" = set; then enableval=$enable_aleph; diff --git a/Build/source/m4/kpse-cxx-hack.m4 b/Build/source/m4/kpse-cxx-hack.m4 index 94f0eb6cf16..1f2527ba204 100644 --- a/Build/source/m4/kpse-cxx-hack.m4 +++ b/Build/source/m4/kpse-cxx-hack.m4 @@ -1,8 +1,9 @@ # Public macros for the teTeX / TeX Live (TL) tree. +# Copyright (C) 2002 Olaf Weber <olaf@infovore.xs4all.nl> # Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> # -# This file is free software; the copyright holder -# gives unlimited permission to copy and/or distribute it, +# This file is free software; the copyright holders +# give unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 0 @@ -22,19 +23,20 @@ AC_DEFUN([KPSE_ENABLE_CXX_HACK], # Try statically linking C++ runtime library (g++ only) # and define CXX_HACK_LIBS with required flags. # Since Libtool reshuffles the argument list, we define CXXLD -# as wrapper script appending these flags to g++ as invoked +# as wrapper script appending these flags to g++ as invoked # by Libtool when linking progams (but not shared libraries). # AC_DEFUN([KPSE_CXX_HACK], [AC_REQUIRE([AC_PROG_CXX])[]dnl AC_REQUIRE([KPSE_ENABLE_CXX_HACK])[]dnl cpp_link_hack=false -if test "x$GXX" = xyes && test "x$enable_cxx_runtime_hack" = xyes; then +if test "x$GXX:$enable_cxx_runtime_hack" = xyes:yes; then _KPSE_CXX_HACK fi -if $cpp_link_hack; then +if test "x$kpse_cv_cxx_flags" = xok; then CXXLD='$(top_builddir)/CXXLD.sh' CXX_HACK_DEPS=$CXXLD + CXX_HACK_LIBS=$kpse_cv_cxx_flags cxxld_sh="#! ${CONFIG_SHELL-/bin/sh} # CXXLD.sh. Generated by configure. set -- $CXX \"\$[]@\" $CXX_HACK_LIBS @@ -57,33 +59,37 @@ AC_SUBST([CXX_HACK_LIBS]) m4_define([_KPSE_CXX_HACK], [ AC_LANG_PUSH([C++]) AC_CHECK_HEADERS([iostream]) -AC_MSG_CHECKING([for statically linking C++ runtime library]) -AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#ifdef HAVE_IOSTREAM +AC_CACHE_CHECK([for statically linking C++ runtime library], + [kpse_cv_cxx_hack], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#ifdef HAVE_IOSTREAM #include <iostream> using namespace std; #else #include <iostream.h> #endif]], - [[cout <<"worksok\n";]])]) -flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' -flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' -flags_try2='-lgcc -lc -lgcc' -kpse_save_LIBS=$LIBS -for flags in "$flags_try1" "$flags_try2"; do - LIBS="$kpse_save_LIBS $flags_try0 $flags" - AC_LINK_IFELSE([], - [case `(./conftest$ac_exeext; exit) 2>/dev/null` in - worksok) - cpp_link_hack=true; break;; - esac]) -done -LIBS=$kpse_save_LIBS - -if $cpp_link_hack; then - CXX_HACK_LIBS="$flags_try0 $flags" - AC_MSG_RESULT(ok using $CXX_HACK_LIBS) -else - AC_MSG_RESULT(not supported) + [[cout <<"worksok\n";]])]) + flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' + flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' + flags_try2='-lgcc -lc -lgcc' + kpse_save_LIBS=$LIBS + cpp_link_hack=false + for flags in "$flags_try1" "$flags_try2"; do + LIBS="$kpse_save_LIBS $flags_try0 $flags" + AC_LINK_IFELSE([], + [AS_IF([test "x$cross_compiling" = xyes], + [cpp_link_hack=true; break], + [AS_CASE([`(./conftest$ac_exeext; exit) 2>/dev/null`], + [worksok], [cpp_link_hack=true; break])])]) + done + LIBS=$kpse_save_LIBS + if $cpp_link_hack; then + kpse_cv_cxx_hack=ok + kpse_cv_cxx_flags="$flags_try0 $flags" + else + kpse_cv_cxx_hack="not supported" + fi]) +if test "x$kpse_cv_cxx_hack" = xok; then + AC_MSG_NOTICE([using $kpse_cv_cxx_flags]) fi AC_LANG_POP([C++]) ]) # _KPSE_CXX_HACK diff --git a/Build/source/texk/configure b/Build/source/texk/configure index 335fbb9a3c3..94c4652dccf 100755 --- a/Build/source/texk/configure +++ b/Build/source/texk/configure @@ -699,7 +699,6 @@ enable_fmtutil enable_ipc enable_tex enable_etex -enable_omega enable_aleph enable_pdftex enable_luatex @@ -1478,7 +1477,6 @@ Optional Features: --enable-ipc enable TeX's --ipc option, i.e., pipe to a program --disable-tex do not compile and install TeX --enable-etex compile and install e-TeX - --enable-omega compile and install Omega --disable-aleph do not compile and install Aleph --disable-pdftex do not compile and install pdfTeX --disable-luatex do not compile and install luaTeX @@ -2362,14 +2360,6 @@ case $enable_etex in yes|no) : ;; *) enable_etex=no ;; esac -# Check whether --enable-omega was given. -if test "${enable_omega+set}" = set; then - enableval=$enable_omega; -fi -case $enable_omega in - yes|no) : ;; - *) enable_omega=no ;; -esac # Check whether --enable-aleph was given. if test "${enable_aleph+set}" = set; then enableval=$enable_aleph; diff --git a/Build/source/texk/lcdf-typetools/configure b/Build/source/texk/lcdf-typetools/configure index fe834baa342..a4018414aff 100755 --- a/Build/source/texk/lcdf-typetools/configure +++ b/Build/source/texk/lcdf-typetools/configure @@ -17324,7 +17324,7 @@ fi cpp_link_hack=false -if test "x$GXX" = xyes && test "x$enable_cxx_runtime_hack" = xyes; then +if test "x$GXX:$enable_cxx_runtime_hack" = xyes:yes; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -17485,7 +17485,10 @@ done { $as_echo "$as_me:$LINENO: checking for statically linking C++ runtime library" >&5 $as_echo_n "checking for statically linking C++ runtime library... " >&6; } -cat >conftest.$ac_ext <<_ACEOF +if test "${kpse_cv_cxx_hack+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -17505,13 +17508,14 @@ cout <<"worksok\n"; return 0; } _ACEOF -flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' -flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' -flags_try2='-lgcc -lc -lgcc' -kpse_save_LIBS=$LIBS -for flags in "$flags_try1" "$flags_try2"; do - LIBS="$kpse_save_LIBS $flags_try0 $flags" - rm -f conftest.$ac_objext conftest$ac_exeext + flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' + flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' + flags_try2='-lgcc -lc -lgcc' + kpse_save_LIBS=$LIBS + cpp_link_hack=false + for flags in "$flags_try1" "$flags_try2"; do + LIBS="$kpse_save_LIBS $flags_try0 $flags" + rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; @@ -17532,10 +17536,15 @@ $as_echo "$ac_try_echo") >&5 test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then + if test "x$cross_compiling" = xyes; then + cpp_link_hack=true; break +else case `(./conftest$ac_exeext; exit) 2>/dev/null` in - worksok) - cpp_link_hack=true; break;; - esac + worksok) cpp_link_hack=true; break ;; +esac + +fi + else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -17546,16 +17555,20 @@ fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext -done -LIBS=$kpse_save_LIBS - -if $cpp_link_hack; then - CXX_HACK_LIBS="$flags_try0 $flags" - { $as_echo "$as_me:$LINENO: result: ok using $CXX_HACK_LIBS" >&5 -$as_echo "ok using $CXX_HACK_LIBS" >&6; } -else - { $as_echo "$as_me:$LINENO: result: not supported" >&5 -$as_echo "not supported" >&6; } + done + LIBS=$kpse_save_LIBS + if $cpp_link_hack; then + kpse_cv_cxx_hack=ok + kpse_cv_cxx_flags="$flags_try0 $flags" + else + kpse_cv_cxx_hack="not supported" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $kpse_cv_cxx_hack" >&5 +$as_echo "$kpse_cv_cxx_hack" >&6; } +if test "x$kpse_cv_cxx_hack" = xok; then + { $as_echo "$as_me:$LINENO: using $kpse_cv_cxx_flags" >&5 +$as_echo "$as_me: using $kpse_cv_cxx_flags" >&6;} fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -17565,9 +17578,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -if $cpp_link_hack; then +if test "x$kpse_cv_cxx_flags" = xok; then CXXLD='$(top_builddir)/CXXLD.sh' CXX_HACK_DEPS=$CXXLD + CXX_HACK_LIBS=$kpse_cv_cxx_flags cxxld_sh="#! ${CONFIG_SHELL-/bin/sh} # CXXLD.sh. Generated by configure. set -- $CXX \"\$@\" $CXX_HACK_LIBS diff --git a/Build/source/texk/web2c/ChangeLog b/Build/source/texk/web2c/ChangeLog index 259b4dfdbea..511d02e2324 100644 --- a/Build/source/texk/web2c/ChangeLog +++ b/Build/source/texk/web2c/ChangeLog @@ -1,3 +1,10 @@ +2009-03-29 Peter Breitenlohner <peb@mppmu.mpg.de> + + * Makefile.am, configure.ac: remove Omega. + + * tex.ch, texmfmem.h, texmfmp-help.h, texmfmp.h: remove all + references to Omega, eOmega, and pdfeTeX. + 2009-03-28 Karl Berry <karl@tug.org> * texmfmp.h: shell escape declarations. diff --git a/Build/source/texk/web2c/Makefile.am b/Build/source/texk/web2c/Makefile.am index a753f0a9045..2fe531852a5 100644 --- a/Build/source/texk/web2c/Makefile.am +++ b/Build/source/texk/web2c/Makefile.am @@ -123,9 +123,6 @@ include $(srcdir)/xetexdir/am/xetex.am ## omegaware web programs include $(srcdir)/omegaware/am/omegaware.am -## Omega -include $(srcdir)/omegadir/am/omega.am - ## Aleph include $(srcdir)/alephdir/am/aleph.am @@ -135,7 +132,7 @@ include $(srcdir)/synctexdir/am/synctex.am ## libmd5 include $(srcdir)/libmd5/am/md5.am -## Not yet used +## Not used ## EXTRA_DIST += fmtutil.in diff --git a/Build/source/texk/web2c/Makefile.in b/Build/source/texk/web2c/Makefile.in index 9c81117a69b..4940916f4de 100644 --- a/Build/source/texk/web2c/Makefile.in +++ b/Build/source/texk/web2c/Makefile.in @@ -38,8 +38,7 @@ bin_PROGRAMS = tangle$(EXEEXT) ctangle$(EXEEXT) $(am__EXEEXT_2) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ $(am__EXEEXT_7) $(am__EXEEXT_8) ttf2afm$(EXEEXT) \ pdftosrc$(EXEEXT) $(am__EXEEXT_9) $(am__EXEEXT_11) \ - $(am__EXEEXT_13) $(am__EXEEXT_14) $(am__EXEEXT_15) \ - synctex$(EXEEXT) + $(am__EXEEXT_13) $(am__EXEEXT_14) synctex$(EXEEXT) noinst_PROGRAMS = tangleboot$(EXEEXT) ctangleboot$(EXEEXT) check_PROGRAMS = md5main$(EXEEXT) DIST_COMMON = README $(am__configure_deps) $(dist_check_SCRIPTS) \ @@ -54,7 +53,6 @@ DIST_COMMON = README $(am__configure_deps) $(dist_check_SCRIPTS) \ $(srcdir)/am/texmf.am $(srcdir)/am/web.am $(srcdir)/c-auto.in \ $(srcdir)/etexdir/am/etex.am $(srcdir)/libmd5/am/md5.am \ $(srcdir)/luatexdir/am/luatex.am $(srcdir)/mpdir/am/mp.am \ - $(srcdir)/omegadir/am/omega.am \ $(srcdir)/omegaware/am/omegaware.am \ $(srcdir)/pdftexdir/am/pdftex.am \ $(srcdir)/synctexdir/am/synctex.am \ @@ -78,20 +76,19 @@ DIST_COMMON = README $(am__configure_deps) $(dist_check_SCRIPTS) \ @OTANGLE_TRUE@am__append_12 = $(omegaware_tools) @OMFONTS_FALSE@@OTANGLE_TRUE@am__append_13 = $(omegaware_font_tools) @OTANGLE_TRUE@am__append_14 = omegaware/otangle.test -@OMEGA_TRUE@am__append_15 = omega -@ALEPH_TRUE@am__append_16 = aleph -@TEX_SYNCTEX_TRUE@am__append_17 = -I$(srcdir)/synctexdir $(ZLIB_INCLUDES) -@TEX_SYNCTEX_TRUE@am__append_18 = $(ZLIB_LIBS) -@TEX_SYNCTEX_TRUE@am__append_19 = \ +@ALEPH_TRUE@am__append_15 = aleph +@TEX_SYNCTEX_TRUE@am__append_16 = -I$(srcdir)/synctexdir $(ZLIB_INCLUDES) +@TEX_SYNCTEX_TRUE@am__append_17 = $(ZLIB_LIBS) +@TEX_SYNCTEX_TRUE@am__append_18 = \ @TEX_SYNCTEX_TRUE@ synctex.c -@ETEX_SYNCTEX_TRUE@am__append_20 = -I$(srcdir)/synctexdir $(ZLIB_INCLUDES) -@ETEX_SYNCTEX_TRUE@am__append_21 = $(ZLIB_LIBS) -@ETEX_SYNCTEX_TRUE@am__append_22 = \ +@ETEX_SYNCTEX_TRUE@am__append_19 = -I$(srcdir)/synctexdir $(ZLIB_INCLUDES) +@ETEX_SYNCTEX_TRUE@am__append_20 = $(ZLIB_LIBS) +@ETEX_SYNCTEX_TRUE@am__append_21 = \ @ETEX_SYNCTEX_TRUE@ synctex-e.c -@PDFTEX_SYNCTEX_TRUE@am__append_23 = -I$(srcdir)/synctexdir -@PDFTEX_SYNCTEX_TRUE@am__append_24 = \ +@PDFTEX_SYNCTEX_TRUE@am__append_22 = -I$(srcdir)/synctexdir +@PDFTEX_SYNCTEX_TRUE@am__append_23 = \ @PDFTEX_SYNCTEX_TRUE@ synctex-pdf.c subdir = . @@ -257,14 +254,13 @@ am__objects_2 = libmf_a-mfini.$(OBJEXT) libmf_a-mf0.$(OBJEXT) \ libmf_a-mf1.$(OBJEXT) nodist_libmf_a_OBJECTS = $(am__objects_2) libmf_a-mf-pool.$(OBJEXT) libmf_a_OBJECTS = $(nodist_libmf_a_OBJECTS) -libmpost_a_AR = $(AR) $(ARFLAGS) -libmpost_a_LIBADD = -am_libmpost_a_OBJECTS = libmpost_a-avl.$(OBJEXT) \ - libmpost_a-avlstuff.$(OBJEXT) libmpost_a-mapfile.$(OBJEXT) \ - libmpost_a-turningnumber.$(OBJEXT) libmpost_a-utils.$(OBJEXT) \ - libmpost_a-writeenc.$(OBJEXT) libmpost_a-writefont.$(OBJEXT) \ - libmpost_a-writet1.$(OBJEXT) -libmpost_a_OBJECTS = $(am_libmpost_a_OBJECTS) +libmp_a_AR = $(AR) $(ARFLAGS) +libmp_a_LIBADD = +am_libmp_a_OBJECTS = libmp_a-avl.$(OBJEXT) libmp_a-avlstuff.$(OBJEXT) \ + libmp_a-mapfile.$(OBJEXT) libmp_a-turningnumber.$(OBJEXT) \ + libmp_a-utils.$(OBJEXT) libmp_a-writeenc.$(OBJEXT) \ + libmp_a-writefont.$(OBJEXT) libmp_a-writet1.$(OBJEXT) +libmp_a_OBJECTS = $(am_libmp_a_OBJECTS) libpdftex_a_AR = $(AR) $(ARFLAGS) libpdftex_a_LIBADD = am_libpdftex_a_OBJECTS = libpdftex_a-avl.$(OBJEXT) \ @@ -306,8 +302,7 @@ am__EXEEXT_10 = odvicopy$(EXEEXT) odvitype$(EXEEXT) otangle$(EXEEXT) am__EXEEXT_12 = ofm2opl$(EXEEXT) opl2ofm$(EXEEXT) ovf2ovp$(EXEEXT) \ ovp2ovf$(EXEEXT) @OMFONTS_FALSE@@OTANGLE_TRUE@am__EXEEXT_13 = $(am__EXEEXT_12) -@OMEGA_TRUE@am__EXEEXT_14 = omega$(EXEEXT) -@ALEPH_TRUE@am__EXEEXT_15 = aleph$(EXEEXT) +@ALEPH_TRUE@am__EXEEXT_14 = aleph$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man5dir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) @@ -414,7 +409,7 @@ am__objects_7 = mpost-mpini.$(OBJEXT) mpost-mp0.$(OBJEXT) \ nodist_mpost_OBJECTS = $(am__objects_7) mpost-mp-pool.$(OBJEXT) \ mpost-mpextra.$(OBJEXT) mpost_OBJECTS = $(nodist_mpost_OBJECTS) -mpost_DEPENDENCIES = libmpost.a $(am__DEPENDENCIES_2) +mpost_DEPENDENCIES = libmp.a $(am__DEPENDENCIES_2) nodist_odvicopy_OBJECTS = odvicopy.$(OBJEXT) odvicopy_OBJECTS = $(nodist_odvicopy_OBJECTS) odvicopy_LDADD = $(LDADD) @@ -427,14 +422,6 @@ nodist_ofm2opl_OBJECTS = ofm2opl.$(OBJEXT) ofm2opl_OBJECTS = $(nodist_ofm2opl_OBJECTS) ofm2opl_LDADD = $(LDADD) ofm2opl_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) -am_omega_OBJECTS = omega-omega.$(OBJEXT) omega-omegabis.$(OBJEXT) -am__objects_8 = omega-omegaini.$(OBJEXT) omega-omega0.$(OBJEXT) \ - omega-omega1.$(OBJEXT) omega-omega2.$(OBJEXT) \ - omega-omega3.$(OBJEXT) -nodist_omega_OBJECTS = $(am__objects_8) omega-omega-pool.$(OBJEXT) \ - omega-omegaextra.$(OBJEXT) -omega_OBJECTS = $(am_omega_OBJECTS) $(nodist_omega_OBJECTS) -omega_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) nodist_opl2ofm_OBJECTS = opl2ofm.$(OBJEXT) opl2ofm_OBJECTS = $(nodist_opl2ofm_OBJECTS) opl2ofm_LDADD = $(LDADD) @@ -458,12 +445,12 @@ patgen_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) am__dist_pdftex_SOURCES_DIST = synctexdir/synctex.h \ synctexdir/synctex-common.h synctexdir/synctex-pdftex.h dist_pdftex_OBJECTS = -am__objects_9 = pdftex-pdftexini.$(OBJEXT) pdftex-pdftex0.$(OBJEXT) \ +am__objects_8 = pdftex-pdftexini.$(OBJEXT) pdftex-pdftex0.$(OBJEXT) \ pdftex-pdftex1.$(OBJEXT) pdftex-pdftex2.$(OBJEXT) \ pdftex-pdftex3.$(OBJEXT) -@PDFTEX_SYNCTEX_TRUE@am__objects_10 = pdftex-synctex-pdf.$(OBJEXT) -nodist_pdftex_OBJECTS = $(am__objects_9) pdftex-pdftex-pool.$(OBJEXT) \ - pdftex-pdftexextra.$(OBJEXT) $(am__objects_10) +@PDFTEX_SYNCTEX_TRUE@am__objects_9 = pdftex-synctex-pdf.$(OBJEXT) +nodist_pdftex_OBJECTS = $(am__objects_8) pdftex-pdftex-pool.$(OBJEXT) \ + pdftex-pdftexextra.$(OBJEXT) $(am__objects_9) pdftex_OBJECTS = $(dist_pdftex_OBJECTS) $(nodist_pdftex_OBJECTS) am__DEPENDENCIES_6 = libpdftex.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -500,11 +487,11 @@ tangleboot_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) am__dist_tex_SOURCES_DIST = synctexdir/synctex.h \ synctexdir/synctex-common.h synctexdir/synctex-tex.h dist_tex_OBJECTS = -am__objects_11 = tex-texini.$(OBJEXT) tex-tex0.$(OBJEXT) \ +am__objects_10 = tex-texini.$(OBJEXT) tex-tex0.$(OBJEXT) \ tex-tex1.$(OBJEXT) tex-tex2.$(OBJEXT) -@TEX_SYNCTEX_TRUE@am__objects_12 = tex-synctex.$(OBJEXT) -nodist_tex_OBJECTS = $(am__objects_11) tex-tex-pool.$(OBJEXT) \ - tex-texextra.$(OBJEXT) $(am__objects_12) +@TEX_SYNCTEX_TRUE@am__objects_11 = tex-synctex.$(OBJEXT) +nodist_tex_OBJECTS = $(am__objects_10) tex-tex-pool.$(OBJEXT) \ + tex-texextra.$(OBJEXT) $(am__objects_11) tex_OBJECTS = $(dist_tex_OBJECTS) $(nodist_tex_OBJECTS) @TEX_SYNCTEX_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) tex_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ @@ -558,7 +545,7 @@ SOURCES = $(libff_a_SOURCES) $(liblua51_a_SOURCES) \ $(libluasocket_a_SOURCES) $(libluatex_a_SOURCES) \ $(EXTRA_libluatex_a_SOURCES) $(nodist_libluatex_a_SOURCES) \ $(libmd5_a_SOURCES) $(nodist_libmf_a_SOURCES) \ - $(libmpost_a_SOURCES) $(libpdftex_a_SOURCES) \ + $(libmp_a_SOURCES) $(libpdftex_a_SOURCES) \ $(EXTRA_libpdftex_a_SOURCES) $(libzzip_a_SOURCES) \ $(aleph_SOURCES) $(nodist_aleph_SOURCES) \ $(nodist_bibtex_SOURCES) $(nodist_ctangle_SOURCES) \ @@ -573,7 +560,6 @@ SOURCES = $(libff_a_SOURCES) $(liblua51_a_SOURCES) \ $(nodist_mf_nowin_SOURCES) $(nodist_mft_SOURCES) \ $(nodist_mpost_SOURCES) $(nodist_odvicopy_SOURCES) \ $(nodist_odvitype_SOURCES) $(nodist_ofm2opl_SOURCES) \ - $(omega_SOURCES) $(nodist_omega_SOURCES) \ $(nodist_opl2ofm_SOURCES) $(nodist_otangle_SOURCES) \ $(nodist_ovf2ovp_SOURCES) $(nodist_ovp2ovf_SOURCES) \ $(nodist_patgen_SOURCES) $(dist_pdftex_SOURCES) \ @@ -591,10 +577,10 @@ DIST_SOURCES = $(libff_a_SOURCES) $(liblua51_a_SOURCES) \ $(libluamisc_a_SOURCES) $(EXTRA_libluamisc_a_SOURCES) \ $(libluasocket_a_SOURCES) $(libluatex_a_SOURCES) \ $(EXTRA_libluatex_a_SOURCES) $(libmd5_a_SOURCES) \ - $(libmpost_a_SOURCES) $(libpdftex_a_SOURCES) \ + $(libmp_a_SOURCES) $(libpdftex_a_SOURCES) \ $(EXTRA_libpdftex_a_SOURCES) $(libzzip_a_SOURCES) \ $(aleph_SOURCES) $(am__dist_etex_SOURCES_DIST) \ - $(gftodvi_SOURCES) $(md5main_SOURCES) $(omega_SOURCES) \ + $(gftodvi_SOURCES) $(md5main_SOURCES) \ $(am__dist_pdftex_SOURCES_DIST) $(pdftosrc_SOURCES) \ $(synctex_SOURCES) $(am__dist_tex_SOURCES_DIST) \ $(ttf2afm_SOURCES) $(EXTRA_ttf2afm_SOURCES) @@ -794,7 +780,7 @@ dist_check_SCRIPTS = tangle.test luatexdir/luatangle.test \ omegaware/otangle.test libmd5/md5.test TESTS = tangle.test tiedir/tie.test $(am__append_11) $(am__append_14) \ libmd5/md5.test -EXTRA_LIBRARIES = libmf.a libmpost.a libpdftex.a liblua51.a libzzip.a \ +EXTRA_LIBRARIES = libmf.a libmp.a libpdftex.a liblua51.a libzzip.a \ libluasocket.a libluamisc.a libff.a libluatex.a libmd5.a EXTRA_DIST = PROJECTS cftests config.h cpascal.h help.h tangle.web \ tangle.ch tangleboot.p cwebdir ctangleboot.c cwebboot.c \ @@ -960,10 +946,7 @@ EXTRA_DIST = PROJECTS cftests config.h cpascal.h help.h tangle.web \ xetexdir/withenable.ac xetexdir/xetex.mk omegaware/ChangeLog \ $(odvicopy_sources) $(odvitype_sources) $(ofm2opl_sources) \ $(opl2ofm_sources) $(otangle_sources) $(ovf2ovp_sources) \ - $(ovp2ovf_sources) $(omega_web_srcs) $(omega_ch_srcs) \ - lib/texmfmp.c omegadir/ChangeLog omegadir/README \ - omegadir/omega.defines omegadir/omega.version \ - omegadir/omega.mk $(aleph_web_srcs) $(aleph_ch_srcs) \ + $(ovp2ovf_sources) $(aleph_web_srcs) $(aleph_ch_srcs) \ lib/texmfmp.c alephdir/ChangeLog alephdir/Makefile \ alephdir/aleph.defines alephdir/aleph.version \ alephdir/eomega.ech alephdir/etex.ch alephdir/omega.ch0 \ @@ -980,8 +963,8 @@ EXTRA_DIST = PROJECTS cftests config.h cpascal.h help.h tangle.web \ synctexdir/synctex-e-rec.ch1 synctexdir/synctex-pdf-rec.ch2 \ synctexdir/synctex-xe-mem.ch2 synctexdir/synctex-xe-rec.ch2 \ synctexdir/synctex-xe-rec.ch3 synctexdir/synctex-xetex.h \ - synctexdir/am/synctex.mk synctexdir/synctex.mk fmtutil.in \ - Makefile.in.orig configure.in.orig + synctexdir/synctex.mk fmtutil.in Makefile.in.orig \ + configure.in.orig DISTCLEANFILES = $(EXTRA_LIBRARIES) tangle.c tangle.h tangle.p \ tangle-web2c stamp-tangle tangleboot.c tangleboot.h ctangle.c \ cweb.c stamp-ctangle cftest.p $(web_programs:=.c) \ @@ -1000,10 +983,8 @@ DISTCLEANFILES = $(EXTRA_LIBRARIES) tangle.c tangle.h tangle.p \ luatangle.p $(lua_mp_c_h) mp-ctangle cftest.p \ $(omegaware_programs:=.c) $(omegaware_programs:=.h) \ $(omegaware_programs:=.p) $(omegaware_programs:=-web2c) \ - cftest.p $(nodist_omega_SOURCES) omega.web omega.ch \ - omega-web2c omega.p omega.pool omega-tangle \ - $(nodist_aleph_SOURCES) aleph.web aleph.ch aleph-web2c aleph.p \ - aleph.pool aleph-tangle + cftest.p $(nodist_aleph_SOURCES) aleph.web aleph.ch \ + aleph-web2c aleph.p aleph.pool aleph-tangle CLEANFILES = web2c = srcdir=$(srcdir) $(SHELL) $(srcdir)/web2c/convert makecpool = ./web2c/makecpool @@ -1049,10 +1030,10 @@ nodist_weave_SOURCES = weave.c weave.h nodist_ctie_SOURCES = ctie.c nodist_cweave_SOURCES = cweave.c cweb.c nodist_tie_SOURCES = tie.c -tex_CPPFLAGS = $(am__append_17) -tex_LDADD = $(LDADD) $(socketlibs) $(am__append_18) +tex_CPPFLAGS = $(am__append_16) +tex_LDADD = $(LDADD) $(socketlibs) $(am__append_17) tex_c_h = texini.c tex0.c tex1.c tex2.c texcoerce.h texd.h -nodist_tex_SOURCES = $(tex_c_h) tex-pool.c texextra.c $(am__append_19) +nodist_tex_SOURCES = $(tex_c_h) tex-pool.c texextra.c $(am__append_18) tex_ch_srcs = \ tex.web \ tex.ch \ @@ -1071,11 +1052,11 @@ mf_c_h = mfini.c mf0.c mf1.c mfcoerce.h mfd.h nodist_libmf_a_SOURCES = $(mf_c_h) mf-pool.c libmf_a_CPPFLAGS = -DMETA_FONT mpost_CPPFLAGS = -I$(srcdir)/mpdir -mpost_LDADD = libmpost.a $(LDADD) +mpost_LDADD = libmp.a $(LDADD) mpost_c_h = mpini.c mp0.c mp1.c mp2.c mpcoerce.h mpd.h nodist_mpost_SOURCES = $(mpost_c_h) mp-pool.c mpextra.c -libmpost_a_CPPFLAGS = -I$(srcdir)/mpdir -libmpost_a_SOURCES = \ +libmp_a_CPPFLAGS = -I$(srcdir)/mpdir +libmp_a_SOURCES = \ mpdir/avl.c \ mpdir/avl.h \ mpdir/avlstuff.c \ @@ -1088,11 +1069,11 @@ libmpost_a_SOURCES = \ mpdir/writefont.c \ mpdir/writet1.c -etex_CPPFLAGS = $(am__append_20) -etex_LDADD = $(LDADD) $(socketlibs) $(am__append_21) +etex_CPPFLAGS = $(am__append_19) +etex_LDADD = $(LDADD) $(socketlibs) $(am__append_20) etex_c_h = etexini.c etex0.c etex1.c etex2.c etexcoerce.h etexd.h nodist_etex_SOURCES = $(etex_c_h) etex-pool.c etexextra.c \ - etexdir/etexextra.h $(am__append_22) + etexdir/etexextra.h $(am__append_21) etex_web_srcs = \ tex.web \ etexdir/etex.ch \ @@ -1115,12 +1096,12 @@ pdftex_dependencies = $(proglib) $(LIBPNG_DEPEND) $(ZLIB_DEPEND) \ $(XPDF_DEPEND) $(OBSDCOMPAT_DEPEND) libmd5.a nodist_EXTRA_pdftex_SOURCES = dummy.cxx pdf_tangle = WEBINPUTS=.:$(srcdir)/pdftexdir $(buildenv) $(TANGLE) -pdftex_CPPFLAGS = $(pdftex_cppflags) $(am__append_23) +pdftex_CPPFLAGS = $(pdftex_cppflags) $(am__append_22) pdftex_LDADD = $(pdftex_ldadd) $(LDADD) $(socketlibs) pdftex_DEPENDENCIES = $(pdftex_dependencies) libpdftex.a pdftex_c_h = pdftexini.c pdftex0.c pdftex1.c pdftex2.c pdftex3.c pdftexcoerce.h pdftexd.h nodist_pdftex_SOURCES = $(pdftex_c_h) pdftex-pool.c pdftexextra.c \ - pdftexdir/pdftexextra.h $(am__append_24) + pdftexdir/pdftexextra.h $(am__append_23) pdftex_ch_srcs = \ pdftexdir/pdftex.web \ pdftexdir/tex.ch0 \ @@ -1584,48 +1565,6 @@ nodist_ovf2ovp_SOURCES = ovf2ovp.c ovf2ovp.h ovf2ovp_sources = omegaware/ovf2ovp.web omegaware/ovf2ovp.ch nodist_ovp2ovf_SOURCES = ovp2ovf.c ovp2ovf.h ovp2ovf_sources = omegaware/ovp2ovf.web omegaware/ovp2ovf.ch -omega_LDADD = $(LDADD) $(socketlibs) -omega_CPPFLAGS = -I$(srcdir)/omegadir $(AM_CPPFLAGS) -omega_c_h = omegaini.c omega0.c omega1.c omega2.c omega3.c omegacoerce.h omegad.h -nodist_omega_SOURCES = $(omega_c_h) omega-pool.c omegaextra.c -omega_SOURCES = \ - omegadir/omega.c \ - omegadir/omegabis.c \ - omegadir/omegaextra.h \ - omegadir/omegamem.h \ - omegadir/omega-pool.h - -omega_web_srcs = \ - tex.web \ - omegadir/omnode.ch \ - omegadir/om16bit.ch \ - omegadir/omstr.ch \ - omegadir/omfont.ch \ - omegadir/omchar.ch \ - omegadir/omfi.ch \ - omegadir/ompar.ch \ - omegadir/omocp.ch \ - omegadir/omfilter.ch \ - omegadir/omtrans.ch \ - omegadir/omdir.ch \ - omegadir/omcprt.ch \ - omegadir/omxml.ch - -omega_ch_srcs = \ - omegadir/comnode.ch \ - omegadir/com16bit.ch \ - omegadir/comstr.ch \ - omegadir/comfont.ch \ - omegadir/comchar.ch \ - omegadir/comfi.ch \ - omegadir/compar.ch \ - omegadir/comocp.ch \ - omegadir/comfilter.ch \ - omegadir/comtrans.ch \ - omegadir/comdir.ch \ - omegadir/comxml.ch \ - omegadir/comsrcspec.ch - aleph_LDADD = $(LDADD) $(socketlibs) aleph_CPPFLAGS = -I$(srcdir)/alephdir $(AM_CPPFLAGS) aleph_c_h = alephini.c aleph0.c aleph1.c aleph2.c aleph3.c alephcoerce.h alephd.h @@ -1747,7 +1686,7 @@ all: c-auto.h ff-config.h .SUFFIXES: .c .cc .cxx .lo .o .obj am--refresh: @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mpdir/am/mp.am $(srcdir)/etexdir/am/etex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/omegadir/am/omega.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mpdir/am/mp.am $(srcdir)/etexdir/am/etex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -1832,10 +1771,10 @@ libmf.a: $(libmf_a_OBJECTS) $(libmf_a_DEPENDENCIES) -rm -f libmf.a $(libmf_a_AR) libmf.a $(libmf_a_OBJECTS) $(libmf_a_LIBADD) $(RANLIB) libmf.a -libmpost.a: $(libmpost_a_OBJECTS) $(libmpost_a_DEPENDENCIES) - -rm -f libmpost.a - $(libmpost_a_AR) libmpost.a $(libmpost_a_OBJECTS) $(libmpost_a_LIBADD) - $(RANLIB) libmpost.a +libmp.a: $(libmp_a_OBJECTS) $(libmp_a_DEPENDENCIES) + -rm -f libmp.a + $(libmp_a_AR) libmp.a $(libmp_a_OBJECTS) $(libmp_a_LIBADD) + $(RANLIB) libmp.a libpdftex.a: $(libpdftex_a_OBJECTS) $(libpdftex_a_DEPENDENCIES) -rm -f libpdftex.a $(libpdftex_a_AR) libpdftex.a $(libpdftex_a_OBJECTS) $(libpdftex_a_LIBADD) @@ -1955,9 +1894,6 @@ odvitype$(EXEEXT): $(odvitype_OBJECTS) $(odvitype_DEPENDENCIES) ofm2opl$(EXEEXT): $(ofm2opl_OBJECTS) $(ofm2opl_DEPENDENCIES) @rm -f ofm2opl$(EXEEXT) $(LINK) $(ofm2opl_OBJECTS) $(ofm2opl_LDADD) $(LIBS) -omega$(EXEEXT): $(omega_OBJECTS) $(omega_DEPENDENCIES) - @rm -f omega$(EXEEXT) - $(LINK) $(omega_OBJECTS) $(omega_LDADD) $(LIBS) opl2ofm$(EXEEXT): $(opl2ofm_OBJECTS) $(opl2ofm_DEPENDENCIES) @rm -f opl2ofm$(EXEEXT) $(LINK) $(opl2ofm_OBJECTS) $(opl2ofm_LDADD) $(LIBS) @@ -2254,14 +2190,14 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmf_a-mf0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmf_a-mf1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmf_a-mfini.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-avl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-avlstuff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-mapfile.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-turningnumber.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-utils.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-writeenc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-writefont.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmpost_a-writet1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-avl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-avlstuff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-mapfile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-turningnumber.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-writeenc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-writefont.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmp_a-writet1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpdftex_a-avl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpdftex_a-avlstuff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpdftex_a-epdf.Po@am__quote@ @@ -2313,15 +2249,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odvicopy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odvitype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ofm2opl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega-pool.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omega3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omegabis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omegaextra.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omega-omegaini.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opl2ofm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otangle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ovf2ovp.Po@am__quote@ @@ -5126,117 +5053,117 @@ libmf_a-mf-pool.obj: mf-pool.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmf_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmf_a-mf-pool.obj `if test -f 'mf-pool.c'; then $(CYGPATH_W) 'mf-pool.c'; else $(CYGPATH_W) '$(srcdir)/mf-pool.c'; fi` -libmpost_a-avl.o: mpdir/avl.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-avl.o -MD -MP -MF $(DEPDIR)/libmpost_a-avl.Tpo -c -o libmpost_a-avl.o `test -f 'mpdir/avl.c' || echo '$(srcdir)/'`mpdir/avl.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-avl.Tpo $(DEPDIR)/libmpost_a-avl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avl.c' object='libmpost_a-avl.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-avl.o: mpdir/avl.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-avl.o -MD -MP -MF $(DEPDIR)/libmp_a-avl.Tpo -c -o libmp_a-avl.o `test -f 'mpdir/avl.c' || echo '$(srcdir)/'`mpdir/avl.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-avl.Tpo $(DEPDIR)/libmp_a-avl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avl.c' object='libmp_a-avl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-avl.o `test -f 'mpdir/avl.c' || echo '$(srcdir)/'`mpdir/avl.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-avl.o `test -f 'mpdir/avl.c' || echo '$(srcdir)/'`mpdir/avl.c -libmpost_a-avl.obj: mpdir/avl.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-avl.obj -MD -MP -MF $(DEPDIR)/libmpost_a-avl.Tpo -c -o libmpost_a-avl.obj `if test -f 'mpdir/avl.c'; then $(CYGPATH_W) 'mpdir/avl.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avl.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-avl.Tpo $(DEPDIR)/libmpost_a-avl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avl.c' object='libmpost_a-avl.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-avl.obj: mpdir/avl.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-avl.obj -MD -MP -MF $(DEPDIR)/libmp_a-avl.Tpo -c -o libmp_a-avl.obj `if test -f 'mpdir/avl.c'; then $(CYGPATH_W) 'mpdir/avl.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avl.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-avl.Tpo $(DEPDIR)/libmp_a-avl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avl.c' object='libmp_a-avl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-avl.obj `if test -f 'mpdir/avl.c'; then $(CYGPATH_W) 'mpdir/avl.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avl.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-avl.obj `if test -f 'mpdir/avl.c'; then $(CYGPATH_W) 'mpdir/avl.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avl.c'; fi` -libmpost_a-avlstuff.o: mpdir/avlstuff.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-avlstuff.o -MD -MP -MF $(DEPDIR)/libmpost_a-avlstuff.Tpo -c -o libmpost_a-avlstuff.o `test -f 'mpdir/avlstuff.c' || echo '$(srcdir)/'`mpdir/avlstuff.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-avlstuff.Tpo $(DEPDIR)/libmpost_a-avlstuff.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avlstuff.c' object='libmpost_a-avlstuff.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-avlstuff.o: mpdir/avlstuff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-avlstuff.o -MD -MP -MF $(DEPDIR)/libmp_a-avlstuff.Tpo -c -o libmp_a-avlstuff.o `test -f 'mpdir/avlstuff.c' || echo '$(srcdir)/'`mpdir/avlstuff.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-avlstuff.Tpo $(DEPDIR)/libmp_a-avlstuff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avlstuff.c' object='libmp_a-avlstuff.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-avlstuff.o `test -f 'mpdir/avlstuff.c' || echo '$(srcdir)/'`mpdir/avlstuff.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-avlstuff.o `test -f 'mpdir/avlstuff.c' || echo '$(srcdir)/'`mpdir/avlstuff.c -libmpost_a-avlstuff.obj: mpdir/avlstuff.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-avlstuff.obj -MD -MP -MF $(DEPDIR)/libmpost_a-avlstuff.Tpo -c -o libmpost_a-avlstuff.obj `if test -f 'mpdir/avlstuff.c'; then $(CYGPATH_W) 'mpdir/avlstuff.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avlstuff.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-avlstuff.Tpo $(DEPDIR)/libmpost_a-avlstuff.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avlstuff.c' object='libmpost_a-avlstuff.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-avlstuff.obj: mpdir/avlstuff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-avlstuff.obj -MD -MP -MF $(DEPDIR)/libmp_a-avlstuff.Tpo -c -o libmp_a-avlstuff.obj `if test -f 'mpdir/avlstuff.c'; then $(CYGPATH_W) 'mpdir/avlstuff.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avlstuff.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-avlstuff.Tpo $(DEPDIR)/libmp_a-avlstuff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/avlstuff.c' object='libmp_a-avlstuff.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-avlstuff.obj `if test -f 'mpdir/avlstuff.c'; then $(CYGPATH_W) 'mpdir/avlstuff.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avlstuff.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-avlstuff.obj `if test -f 'mpdir/avlstuff.c'; then $(CYGPATH_W) 'mpdir/avlstuff.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/avlstuff.c'; fi` -libmpost_a-mapfile.o: mpdir/mapfile.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-mapfile.o -MD -MP -MF $(DEPDIR)/libmpost_a-mapfile.Tpo -c -o libmpost_a-mapfile.o `test -f 'mpdir/mapfile.c' || echo '$(srcdir)/'`mpdir/mapfile.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-mapfile.Tpo $(DEPDIR)/libmpost_a-mapfile.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/mapfile.c' object='libmpost_a-mapfile.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-mapfile.o: mpdir/mapfile.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-mapfile.o -MD -MP -MF $(DEPDIR)/libmp_a-mapfile.Tpo -c -o libmp_a-mapfile.o `test -f 'mpdir/mapfile.c' || echo '$(srcdir)/'`mpdir/mapfile.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-mapfile.Tpo $(DEPDIR)/libmp_a-mapfile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/mapfile.c' object='libmp_a-mapfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-mapfile.o `test -f 'mpdir/mapfile.c' || echo '$(srcdir)/'`mpdir/mapfile.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-mapfile.o `test -f 'mpdir/mapfile.c' || echo '$(srcdir)/'`mpdir/mapfile.c -libmpost_a-mapfile.obj: mpdir/mapfile.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-mapfile.obj -MD -MP -MF $(DEPDIR)/libmpost_a-mapfile.Tpo -c -o libmpost_a-mapfile.obj `if test -f 'mpdir/mapfile.c'; then $(CYGPATH_W) 'mpdir/mapfile.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/mapfile.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-mapfile.Tpo $(DEPDIR)/libmpost_a-mapfile.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/mapfile.c' object='libmpost_a-mapfile.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-mapfile.obj: mpdir/mapfile.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-mapfile.obj -MD -MP -MF $(DEPDIR)/libmp_a-mapfile.Tpo -c -o libmp_a-mapfile.obj `if test -f 'mpdir/mapfile.c'; then $(CYGPATH_W) 'mpdir/mapfile.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/mapfile.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-mapfile.Tpo $(DEPDIR)/libmp_a-mapfile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/mapfile.c' object='libmp_a-mapfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-mapfile.obj `if test -f 'mpdir/mapfile.c'; then $(CYGPATH_W) 'mpdir/mapfile.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/mapfile.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-mapfile.obj `if test -f 'mpdir/mapfile.c'; then $(CYGPATH_W) 'mpdir/mapfile.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/mapfile.c'; fi` -libmpost_a-turningnumber.o: mpdir/turningnumber.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-turningnumber.o -MD -MP -MF $(DEPDIR)/libmpost_a-turningnumber.Tpo -c -o libmpost_a-turningnumber.o `test -f 'mpdir/turningnumber.c' || echo '$(srcdir)/'`mpdir/turningnumber.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-turningnumber.Tpo $(DEPDIR)/libmpost_a-turningnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/turningnumber.c' object='libmpost_a-turningnumber.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-turningnumber.o: mpdir/turningnumber.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-turningnumber.o -MD -MP -MF $(DEPDIR)/libmp_a-turningnumber.Tpo -c -o libmp_a-turningnumber.o `test -f 'mpdir/turningnumber.c' || echo '$(srcdir)/'`mpdir/turningnumber.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-turningnumber.Tpo $(DEPDIR)/libmp_a-turningnumber.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/turningnumber.c' object='libmp_a-turningnumber.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-turningnumber.o `test -f 'mpdir/turningnumber.c' || echo '$(srcdir)/'`mpdir/turningnumber.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-turningnumber.o `test -f 'mpdir/turningnumber.c' || echo '$(srcdir)/'`mpdir/turningnumber.c -libmpost_a-turningnumber.obj: mpdir/turningnumber.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-turningnumber.obj -MD -MP -MF $(DEPDIR)/libmpost_a-turningnumber.Tpo -c -o libmpost_a-turningnumber.obj `if test -f 'mpdir/turningnumber.c'; then $(CYGPATH_W) 'mpdir/turningnumber.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/turningnumber.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-turningnumber.Tpo $(DEPDIR)/libmpost_a-turningnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/turningnumber.c' object='libmpost_a-turningnumber.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-turningnumber.obj: mpdir/turningnumber.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-turningnumber.obj -MD -MP -MF $(DEPDIR)/libmp_a-turningnumber.Tpo -c -o libmp_a-turningnumber.obj `if test -f 'mpdir/turningnumber.c'; then $(CYGPATH_W) 'mpdir/turningnumber.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/turningnumber.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-turningnumber.Tpo $(DEPDIR)/libmp_a-turningnumber.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/turningnumber.c' object='libmp_a-turningnumber.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-turningnumber.obj `if test -f 'mpdir/turningnumber.c'; then $(CYGPATH_W) 'mpdir/turningnumber.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/turningnumber.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-turningnumber.obj `if test -f 'mpdir/turningnumber.c'; then $(CYGPATH_W) 'mpdir/turningnumber.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/turningnumber.c'; fi` -libmpost_a-utils.o: mpdir/utils.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-utils.o -MD -MP -MF $(DEPDIR)/libmpost_a-utils.Tpo -c -o libmpost_a-utils.o `test -f 'mpdir/utils.c' || echo '$(srcdir)/'`mpdir/utils.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-utils.Tpo $(DEPDIR)/libmpost_a-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/utils.c' object='libmpost_a-utils.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-utils.o: mpdir/utils.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-utils.o -MD -MP -MF $(DEPDIR)/libmp_a-utils.Tpo -c -o libmp_a-utils.o `test -f 'mpdir/utils.c' || echo '$(srcdir)/'`mpdir/utils.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-utils.Tpo $(DEPDIR)/libmp_a-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/utils.c' object='libmp_a-utils.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-utils.o `test -f 'mpdir/utils.c' || echo '$(srcdir)/'`mpdir/utils.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-utils.o `test -f 'mpdir/utils.c' || echo '$(srcdir)/'`mpdir/utils.c -libmpost_a-utils.obj: mpdir/utils.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-utils.obj -MD -MP -MF $(DEPDIR)/libmpost_a-utils.Tpo -c -o libmpost_a-utils.obj `if test -f 'mpdir/utils.c'; then $(CYGPATH_W) 'mpdir/utils.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/utils.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-utils.Tpo $(DEPDIR)/libmpost_a-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/utils.c' object='libmpost_a-utils.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-utils.obj: mpdir/utils.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-utils.obj -MD -MP -MF $(DEPDIR)/libmp_a-utils.Tpo -c -o libmp_a-utils.obj `if test -f 'mpdir/utils.c'; then $(CYGPATH_W) 'mpdir/utils.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/utils.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-utils.Tpo $(DEPDIR)/libmp_a-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/utils.c' object='libmp_a-utils.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-utils.obj `if test -f 'mpdir/utils.c'; then $(CYGPATH_W) 'mpdir/utils.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/utils.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-utils.obj `if test -f 'mpdir/utils.c'; then $(CYGPATH_W) 'mpdir/utils.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/utils.c'; fi` -libmpost_a-writeenc.o: mpdir/writeenc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writeenc.o -MD -MP -MF $(DEPDIR)/libmpost_a-writeenc.Tpo -c -o libmpost_a-writeenc.o `test -f 'mpdir/writeenc.c' || echo '$(srcdir)/'`mpdir/writeenc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writeenc.Tpo $(DEPDIR)/libmpost_a-writeenc.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writeenc.c' object='libmpost_a-writeenc.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-writeenc.o: mpdir/writeenc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writeenc.o -MD -MP -MF $(DEPDIR)/libmp_a-writeenc.Tpo -c -o libmp_a-writeenc.o `test -f 'mpdir/writeenc.c' || echo '$(srcdir)/'`mpdir/writeenc.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writeenc.Tpo $(DEPDIR)/libmp_a-writeenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writeenc.c' object='libmp_a-writeenc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writeenc.o `test -f 'mpdir/writeenc.c' || echo '$(srcdir)/'`mpdir/writeenc.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writeenc.o `test -f 'mpdir/writeenc.c' || echo '$(srcdir)/'`mpdir/writeenc.c -libmpost_a-writeenc.obj: mpdir/writeenc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writeenc.obj -MD -MP -MF $(DEPDIR)/libmpost_a-writeenc.Tpo -c -o libmpost_a-writeenc.obj `if test -f 'mpdir/writeenc.c'; then $(CYGPATH_W) 'mpdir/writeenc.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writeenc.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writeenc.Tpo $(DEPDIR)/libmpost_a-writeenc.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writeenc.c' object='libmpost_a-writeenc.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-writeenc.obj: mpdir/writeenc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writeenc.obj -MD -MP -MF $(DEPDIR)/libmp_a-writeenc.Tpo -c -o libmp_a-writeenc.obj `if test -f 'mpdir/writeenc.c'; then $(CYGPATH_W) 'mpdir/writeenc.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writeenc.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writeenc.Tpo $(DEPDIR)/libmp_a-writeenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writeenc.c' object='libmp_a-writeenc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writeenc.obj `if test -f 'mpdir/writeenc.c'; then $(CYGPATH_W) 'mpdir/writeenc.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writeenc.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writeenc.obj `if test -f 'mpdir/writeenc.c'; then $(CYGPATH_W) 'mpdir/writeenc.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writeenc.c'; fi` -libmpost_a-writefont.o: mpdir/writefont.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writefont.o -MD -MP -MF $(DEPDIR)/libmpost_a-writefont.Tpo -c -o libmpost_a-writefont.o `test -f 'mpdir/writefont.c' || echo '$(srcdir)/'`mpdir/writefont.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writefont.Tpo $(DEPDIR)/libmpost_a-writefont.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writefont.c' object='libmpost_a-writefont.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-writefont.o: mpdir/writefont.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writefont.o -MD -MP -MF $(DEPDIR)/libmp_a-writefont.Tpo -c -o libmp_a-writefont.o `test -f 'mpdir/writefont.c' || echo '$(srcdir)/'`mpdir/writefont.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writefont.Tpo $(DEPDIR)/libmp_a-writefont.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writefont.c' object='libmp_a-writefont.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writefont.o `test -f 'mpdir/writefont.c' || echo '$(srcdir)/'`mpdir/writefont.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writefont.o `test -f 'mpdir/writefont.c' || echo '$(srcdir)/'`mpdir/writefont.c -libmpost_a-writefont.obj: mpdir/writefont.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writefont.obj -MD -MP -MF $(DEPDIR)/libmpost_a-writefont.Tpo -c -o libmpost_a-writefont.obj `if test -f 'mpdir/writefont.c'; then $(CYGPATH_W) 'mpdir/writefont.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writefont.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writefont.Tpo $(DEPDIR)/libmpost_a-writefont.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writefont.c' object='libmpost_a-writefont.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-writefont.obj: mpdir/writefont.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writefont.obj -MD -MP -MF $(DEPDIR)/libmp_a-writefont.Tpo -c -o libmp_a-writefont.obj `if test -f 'mpdir/writefont.c'; then $(CYGPATH_W) 'mpdir/writefont.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writefont.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writefont.Tpo $(DEPDIR)/libmp_a-writefont.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writefont.c' object='libmp_a-writefont.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writefont.obj `if test -f 'mpdir/writefont.c'; then $(CYGPATH_W) 'mpdir/writefont.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writefont.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writefont.obj `if test -f 'mpdir/writefont.c'; then $(CYGPATH_W) 'mpdir/writefont.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writefont.c'; fi` -libmpost_a-writet1.o: mpdir/writet1.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writet1.o -MD -MP -MF $(DEPDIR)/libmpost_a-writet1.Tpo -c -o libmpost_a-writet1.o `test -f 'mpdir/writet1.c' || echo '$(srcdir)/'`mpdir/writet1.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writet1.Tpo $(DEPDIR)/libmpost_a-writet1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writet1.c' object='libmpost_a-writet1.o' libtool=no @AMDEPBACKSLASH@ +libmp_a-writet1.o: mpdir/writet1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writet1.o -MD -MP -MF $(DEPDIR)/libmp_a-writet1.Tpo -c -o libmp_a-writet1.o `test -f 'mpdir/writet1.c' || echo '$(srcdir)/'`mpdir/writet1.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writet1.Tpo $(DEPDIR)/libmp_a-writet1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writet1.c' object='libmp_a-writet1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writet1.o `test -f 'mpdir/writet1.c' || echo '$(srcdir)/'`mpdir/writet1.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writet1.o `test -f 'mpdir/writet1.c' || echo '$(srcdir)/'`mpdir/writet1.c -libmpost_a-writet1.obj: mpdir/writet1.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmpost_a-writet1.obj -MD -MP -MF $(DEPDIR)/libmpost_a-writet1.Tpo -c -o libmpost_a-writet1.obj `if test -f 'mpdir/writet1.c'; then $(CYGPATH_W) 'mpdir/writet1.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writet1.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmpost_a-writet1.Tpo $(DEPDIR)/libmpost_a-writet1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writet1.c' object='libmpost_a-writet1.obj' libtool=no @AMDEPBACKSLASH@ +libmp_a-writet1.obj: mpdir/writet1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmp_a-writet1.obj -MD -MP -MF $(DEPDIR)/libmp_a-writet1.Tpo -c -o libmp_a-writet1.obj `if test -f 'mpdir/writet1.c'; then $(CYGPATH_W) 'mpdir/writet1.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writet1.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libmp_a-writet1.Tpo $(DEPDIR)/libmp_a-writet1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpdir/writet1.c' object='libmp_a-writet1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmpost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmpost_a-writet1.obj `if test -f 'mpdir/writet1.c'; then $(CYGPATH_W) 'mpdir/writet1.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writet1.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmp_a-writet1.obj `if test -f 'mpdir/writet1.c'; then $(CYGPATH_W) 'mpdir/writet1.c'; else $(CYGPATH_W) '$(srcdir)/mpdir/writet1.c'; fi` libpdftex_a-avl.o: pdftexdir/avl.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpdftex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libpdftex_a-avl.o -MD -MP -MF $(DEPDIR)/libpdftex_a-avl.Tpo -c -o libpdftex_a-avl.o `test -f 'pdftexdir/avl.c' || echo '$(srcdir)/'`pdftexdir/avl.c @@ -6078,132 +6005,6 @@ mpost-mpextra.obj: mpextra.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpost_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpost-mpextra.obj `if test -f 'mpextra.c'; then $(CYGPATH_W) 'mpextra.c'; else $(CYGPATH_W) '$(srcdir)/mpextra.c'; fi` -omega-omega.o: omegadir/omega.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega.o -MD -MP -MF $(DEPDIR)/omega-omega.Tpo -c -o omega-omega.o `test -f 'omegadir/omega.c' || echo '$(srcdir)/'`omegadir/omega.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega.Tpo $(DEPDIR)/omega-omega.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegadir/omega.c' object='omega-omega.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega.o `test -f 'omegadir/omega.c' || echo '$(srcdir)/'`omegadir/omega.c - -omega-omega.obj: omegadir/omega.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega.obj -MD -MP -MF $(DEPDIR)/omega-omega.Tpo -c -o omega-omega.obj `if test -f 'omegadir/omega.c'; then $(CYGPATH_W) 'omegadir/omega.c'; else $(CYGPATH_W) '$(srcdir)/omegadir/omega.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega.Tpo $(DEPDIR)/omega-omega.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegadir/omega.c' object='omega-omega.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega.obj `if test -f 'omegadir/omega.c'; then $(CYGPATH_W) 'omegadir/omega.c'; else $(CYGPATH_W) '$(srcdir)/omegadir/omega.c'; fi` - -omega-omegabis.o: omegadir/omegabis.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegabis.o -MD -MP -MF $(DEPDIR)/omega-omegabis.Tpo -c -o omega-omegabis.o `test -f 'omegadir/omegabis.c' || echo '$(srcdir)/'`omegadir/omegabis.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegabis.Tpo $(DEPDIR)/omega-omegabis.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegadir/omegabis.c' object='omega-omegabis.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegabis.o `test -f 'omegadir/omegabis.c' || echo '$(srcdir)/'`omegadir/omegabis.c - -omega-omegabis.obj: omegadir/omegabis.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegabis.obj -MD -MP -MF $(DEPDIR)/omega-omegabis.Tpo -c -o omega-omegabis.obj `if test -f 'omegadir/omegabis.c'; then $(CYGPATH_W) 'omegadir/omegabis.c'; else $(CYGPATH_W) '$(srcdir)/omegadir/omegabis.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegabis.Tpo $(DEPDIR)/omega-omegabis.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegadir/omegabis.c' object='omega-omegabis.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegabis.obj `if test -f 'omegadir/omegabis.c'; then $(CYGPATH_W) 'omegadir/omegabis.c'; else $(CYGPATH_W) '$(srcdir)/omegadir/omegabis.c'; fi` - -omega-omegaini.o: omegaini.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegaini.o -MD -MP -MF $(DEPDIR)/omega-omegaini.Tpo -c -o omega-omegaini.o `test -f 'omegaini.c' || echo '$(srcdir)/'`omegaini.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegaini.Tpo $(DEPDIR)/omega-omegaini.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegaini.c' object='omega-omegaini.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegaini.o `test -f 'omegaini.c' || echo '$(srcdir)/'`omegaini.c - -omega-omegaini.obj: omegaini.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegaini.obj -MD -MP -MF $(DEPDIR)/omega-omegaini.Tpo -c -o omega-omegaini.obj `if test -f 'omegaini.c'; then $(CYGPATH_W) 'omegaini.c'; else $(CYGPATH_W) '$(srcdir)/omegaini.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegaini.Tpo $(DEPDIR)/omega-omegaini.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegaini.c' object='omega-omegaini.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegaini.obj `if test -f 'omegaini.c'; then $(CYGPATH_W) 'omegaini.c'; else $(CYGPATH_W) '$(srcdir)/omegaini.c'; fi` - -omega-omega0.o: omega0.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega0.o -MD -MP -MF $(DEPDIR)/omega-omega0.Tpo -c -o omega-omega0.o `test -f 'omega0.c' || echo '$(srcdir)/'`omega0.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega0.Tpo $(DEPDIR)/omega-omega0.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega0.c' object='omega-omega0.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega0.o `test -f 'omega0.c' || echo '$(srcdir)/'`omega0.c - -omega-omega0.obj: omega0.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega0.obj -MD -MP -MF $(DEPDIR)/omega-omega0.Tpo -c -o omega-omega0.obj `if test -f 'omega0.c'; then $(CYGPATH_W) 'omega0.c'; else $(CYGPATH_W) '$(srcdir)/omega0.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega0.Tpo $(DEPDIR)/omega-omega0.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega0.c' object='omega-omega0.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega0.obj `if test -f 'omega0.c'; then $(CYGPATH_W) 'omega0.c'; else $(CYGPATH_W) '$(srcdir)/omega0.c'; fi` - -omega-omega1.o: omega1.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega1.o -MD -MP -MF $(DEPDIR)/omega-omega1.Tpo -c -o omega-omega1.o `test -f 'omega1.c' || echo '$(srcdir)/'`omega1.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega1.Tpo $(DEPDIR)/omega-omega1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega1.c' object='omega-omega1.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega1.o `test -f 'omega1.c' || echo '$(srcdir)/'`omega1.c - -omega-omega1.obj: omega1.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega1.obj -MD -MP -MF $(DEPDIR)/omega-omega1.Tpo -c -o omega-omega1.obj `if test -f 'omega1.c'; then $(CYGPATH_W) 'omega1.c'; else $(CYGPATH_W) '$(srcdir)/omega1.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega1.Tpo $(DEPDIR)/omega-omega1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega1.c' object='omega-omega1.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega1.obj `if test -f 'omega1.c'; then $(CYGPATH_W) 'omega1.c'; else $(CYGPATH_W) '$(srcdir)/omega1.c'; fi` - -omega-omega2.o: omega2.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega2.o -MD -MP -MF $(DEPDIR)/omega-omega2.Tpo -c -o omega-omega2.o `test -f 'omega2.c' || echo '$(srcdir)/'`omega2.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega2.Tpo $(DEPDIR)/omega-omega2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega2.c' object='omega-omega2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega2.o `test -f 'omega2.c' || echo '$(srcdir)/'`omega2.c - -omega-omega2.obj: omega2.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega2.obj -MD -MP -MF $(DEPDIR)/omega-omega2.Tpo -c -o omega-omega2.obj `if test -f 'omega2.c'; then $(CYGPATH_W) 'omega2.c'; else $(CYGPATH_W) '$(srcdir)/omega2.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega2.Tpo $(DEPDIR)/omega-omega2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega2.c' object='omega-omega2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega2.obj `if test -f 'omega2.c'; then $(CYGPATH_W) 'omega2.c'; else $(CYGPATH_W) '$(srcdir)/omega2.c'; fi` - -omega-omega3.o: omega3.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega3.o -MD -MP -MF $(DEPDIR)/omega-omega3.Tpo -c -o omega-omega3.o `test -f 'omega3.c' || echo '$(srcdir)/'`omega3.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega3.Tpo $(DEPDIR)/omega-omega3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega3.c' object='omega-omega3.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega3.o `test -f 'omega3.c' || echo '$(srcdir)/'`omega3.c - -omega-omega3.obj: omega3.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega3.obj -MD -MP -MF $(DEPDIR)/omega-omega3.Tpo -c -o omega-omega3.obj `if test -f 'omega3.c'; then $(CYGPATH_W) 'omega3.c'; else $(CYGPATH_W) '$(srcdir)/omega3.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega3.Tpo $(DEPDIR)/omega-omega3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega3.c' object='omega-omega3.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega3.obj `if test -f 'omega3.c'; then $(CYGPATH_W) 'omega3.c'; else $(CYGPATH_W) '$(srcdir)/omega3.c'; fi` - -omega-omega-pool.o: omega-pool.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega-pool.o -MD -MP -MF $(DEPDIR)/omega-omega-pool.Tpo -c -o omega-omega-pool.o `test -f 'omega-pool.c' || echo '$(srcdir)/'`omega-pool.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega-pool.Tpo $(DEPDIR)/omega-omega-pool.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega-pool.c' object='omega-omega-pool.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega-pool.o `test -f 'omega-pool.c' || echo '$(srcdir)/'`omega-pool.c - -omega-omega-pool.obj: omega-pool.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omega-pool.obj -MD -MP -MF $(DEPDIR)/omega-omega-pool.Tpo -c -o omega-omega-pool.obj `if test -f 'omega-pool.c'; then $(CYGPATH_W) 'omega-pool.c'; else $(CYGPATH_W) '$(srcdir)/omega-pool.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omega-pool.Tpo $(DEPDIR)/omega-omega-pool.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omega-pool.c' object='omega-omega-pool.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omega-pool.obj `if test -f 'omega-pool.c'; then $(CYGPATH_W) 'omega-pool.c'; else $(CYGPATH_W) '$(srcdir)/omega-pool.c'; fi` - -omega-omegaextra.o: omegaextra.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegaextra.o -MD -MP -MF $(DEPDIR)/omega-omegaextra.Tpo -c -o omega-omegaextra.o `test -f 'omegaextra.c' || echo '$(srcdir)/'`omegaextra.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegaextra.Tpo $(DEPDIR)/omega-omegaextra.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegaextra.c' object='omega-omegaextra.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegaextra.o `test -f 'omegaextra.c' || echo '$(srcdir)/'`omegaextra.c - -omega-omegaextra.obj: omegaextra.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT omega-omegaextra.obj -MD -MP -MF $(DEPDIR)/omega-omegaextra.Tpo -c -o omega-omegaextra.obj `if test -f 'omegaextra.c'; then $(CYGPATH_W) 'omegaextra.c'; else $(CYGPATH_W) '$(srcdir)/omegaextra.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/omega-omegaextra.Tpo $(DEPDIR)/omega-omegaextra.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='omegaextra.c' object='omega-omegaextra.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(omega_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o omega-omegaextra.obj `if test -f 'omegaextra.c'; then $(CYGPATH_W) 'omegaextra.c'; else $(CYGPATH_W) '$(srcdir)/omegaextra.c'; fi` - pdftex-pdftexini.o: pdftexini.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pdftex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pdftex-pdftexini.o -MD -MP -MF $(DEPDIR)/pdftex-pdftexini.Tpo -c -o pdftex-pdftexini.o `test -f 'pdftexini.c' || echo '$(srcdir)/'`pdftexini.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/pdftex-pdftexini.Tpo $(DEPDIR)/pdftex-pdftexini.Po @@ -7439,7 +7240,7 @@ mp-tangle: tangle mp.web mp.ch mp-pool.c: mp.pool $(makecpool) mpdir/mplib.h $(makecpool) mp.pool $(srcdir)/mpdir/mplib.h >$@ || rm -f $@ -$(libmpost_a_SOURCES): mpd.h +$(libmp_a_SOURCES): mpd.h $(etex_c_h): etex-web2c etex-web2c: etex.p $(web2c_texmf) $(web2c) etex @@ -7580,25 +7381,6 @@ ovp2ovf-web2c: $(web2c_common) $(web2c_programs) ovp2ovf.p touch ovp2ovf.c ovp2ovf.h ovp2ovf.p: tangle $(ovp2ovf_sources) $(ow_tangle) ovp2ovf ovp2ovf -@OMEGA_TRUE@$(omega_SOURCES): omegad.h -$(omega_c_h): omega-web2c -omega-web2c: omega.p $(web2c_texmf) omegadir/omega.defines - $(web2c) omega - echo timestamp >$@ - touch $(omega_c_h) -omegaextra.c: lib/texmfmp.c omegad.h - sed s/TEX-OR-MF-OR-MP/omega/ $(srcdir)/lib/texmfmp.c >$@ -omega.p omega.pool: omega-tangle -omega-tangle: otangle omega.web omega.ch - $(otangle) omega omega - echo timestamp >$@ - touch omega.p omega.pool -omega-pool.c: omega.pool $(makecpool) omegadir/omega-pool.h - $(makecpool) omega.pool $(srcdir)/omegadir/omega-pool.h >$@ || rm -f $@ -omega.web: $(TIE) $(omega_web_srcs) - $(tie) -m omega.web $(omega_web_srcs) -omega.ch: $(TIE) omega.web $(omega_ch_srcs) - $(tie) -c omega.ch omega.web $(omega_ch_srcs) @ALEPH_TRUE@$(aleph_SOURCES): alephd.h $(aleph_c_h): aleph-web2c aleph-web2c: aleph.p $(web2c_texmf) alephdir/aleph.defines diff --git a/Build/source/texk/web2c/ac/web2c.ac b/Build/source/texk/web2c/ac/web2c.ac index 01c2f6ffbfb..73f72cb3825 100644 --- a/Build/source/texk/web2c/ac/web2c.ac +++ b/Build/source/texk/web2c/ac/web2c.ac @@ -25,7 +25,6 @@ AC_ARG_ENABLE([ipc], m4_define([kpse_tex_progs], [dnl [[tex], [yes], [no], [TeX], []], [[etex], [no], [yes], [e-TeX], []], -[[omega], [no], [no], [Omega], []], [[aleph], [yes], [no], [Aleph], []], [[pdftex], [yes], [yes], [pdfTeX], [xpdf libpng obsdcompat]], [[luatex], [yes], [no], [luaTeX], [xpdf libpng obsdcompat]], diff --git a/Build/source/texk/web2c/c-auto.in b/Build/source/texk/web2c/c-auto.in index 6f3bb2a94e1..0990d54a279 100644 --- a/Build/source/texk/web2c/c-auto.in +++ b/Build/source/texk/web2c/c-auto.in @@ -229,6 +229,9 @@ /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS diff --git a/Build/source/texk/web2c/configure b/Build/source/texk/web2c/configure index 1cc486ab0cf..bd87cb57a84 100755 --- a/Build/source/texk/web2c/configure +++ b/Build/source/texk/web2c/configure @@ -865,10 +865,6 @@ ALEPH_SYNCTEX_FALSE ALEPH_SYNCTEX_TRUE ALEPH_FALSE ALEPH_TRUE -OMEGA_SYNCTEX_FALSE -OMEGA_SYNCTEX_TRUE -OMEGA_FALSE -OMEGA_TRUE ETEX_SYNCTEX_FALSE ETEX_SYNCTEX_TRUE ETEX_FALSE @@ -1018,7 +1014,6 @@ enable_fmtutil enable_ipc enable_tex enable_etex -enable_omega enable_aleph enable_pdftex enable_luatex @@ -1714,7 +1709,6 @@ Optional Features: --enable-ipc enable TeX's --ipc option, i.e., pipe to a program --disable-tex do not compile and install TeX --enable-etex compile and install e-TeX - --enable-omega compile and install Omega --disable-aleph do not compile and install Aleph --disable-pdftex do not compile and install pdfTeX --disable-luatex do not compile and install luaTeX @@ -4363,13 +4357,13 @@ if test "${lt_cv_nm_interface+set}" = set; then else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4366: $ac_compile\"" >&5) + (eval echo "\"\$as_me:4360: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4369: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:4363: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:4372: output\"" >&5) + (eval echo "\"\$as_me:4366: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5575,7 +5569,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5578 "configure"' > conftest.$ac_ext + echo '#line 5572 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -7622,11 +7616,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7625: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7619: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7629: \$? = $ac_status" >&5 + echo "$as_me:7623: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7961,11 +7955,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7964: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7958: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7968: \$? = $ac_status" >&5 + echo "$as_me:7962: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8066,11 +8060,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8069: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8063: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8073: \$? = $ac_status" >&5 + echo "$as_me:8067: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8121,11 +8115,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8124: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8118: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8128: \$? = $ac_status" >&5 + echo "$as_me:8122: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -10921,7 +10915,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10924 "configure" +#line 10918 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11017,7 +11011,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11020 "configure" +#line 11014 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -16033,11 +16027,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16036: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16030: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16040: \$? = $ac_status" >&5 + echo "$as_me:16034: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16132,11 +16126,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16135: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16129: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16139: \$? = $ac_status" >&5 + echo "$as_me:16133: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -16184,11 +16178,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16187: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16181: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16191: \$? = $ac_status" >&5 + echo "$as_me:16185: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17156,7 +17150,7 @@ fi cpp_link_hack=false -if test "x$GXX" = xyes && test "x$enable_cxx_runtime_hack" = xyes; then +if test "x$GXX:$enable_cxx_runtime_hack" = xyes:yes; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -17317,7 +17311,10 @@ done { $as_echo "$as_me:$LINENO: checking for statically linking C++ runtime library" >&5 $as_echo_n "checking for statically linking C++ runtime library... " >&6; } -cat >conftest.$ac_ext <<_ACEOF +if test "${kpse_cv_cxx_hack+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -17337,13 +17334,14 @@ cout <<"worksok\n"; return 0; } _ACEOF -flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' -flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' -flags_try2='-lgcc -lc -lgcc' -kpse_save_LIBS=$LIBS -for flags in "$flags_try1" "$flags_try2"; do - LIBS="$kpse_save_LIBS $flags_try0 $flags" - rm -f conftest.$ac_objext conftest$ac_exeext + flags_try0='-nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm' + flags_try1='-lgcc_eh -lgcc -lc -lgcc_eh -lgcc' + flags_try2='-lgcc -lc -lgcc' + kpse_save_LIBS=$LIBS + cpp_link_hack=false + for flags in "$flags_try1" "$flags_try2"; do + LIBS="$kpse_save_LIBS $flags_try0 $flags" + rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; @@ -17364,10 +17362,15 @@ $as_echo "$ac_try_echo") >&5 test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then + if test "x$cross_compiling" = xyes; then + cpp_link_hack=true; break +else case `(./conftest$ac_exeext; exit) 2>/dev/null` in - worksok) - cpp_link_hack=true; break;; - esac + worksok) cpp_link_hack=true; break ;; +esac + +fi + else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -17378,16 +17381,20 @@ fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext -done -LIBS=$kpse_save_LIBS - -if $cpp_link_hack; then - CXX_HACK_LIBS="$flags_try0 $flags" - { $as_echo "$as_me:$LINENO: result: ok using $CXX_HACK_LIBS" >&5 -$as_echo "ok using $CXX_HACK_LIBS" >&6; } -else - { $as_echo "$as_me:$LINENO: result: not supported" >&5 -$as_echo "not supported" >&6; } + done + LIBS=$kpse_save_LIBS + if $cpp_link_hack; then + kpse_cv_cxx_hack=ok + kpse_cv_cxx_flags="$flags_try0 $flags" + else + kpse_cv_cxx_hack="not supported" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $kpse_cv_cxx_hack" >&5 +$as_echo "$kpse_cv_cxx_hack" >&6; } +if test "x$kpse_cv_cxx_hack" = xok; then + { $as_echo "$as_me:$LINENO: using $kpse_cv_cxx_flags" >&5 +$as_echo "$as_me: using $kpse_cv_cxx_flags" >&6;} fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -17397,9 +17404,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -if $cpp_link_hack; then +if test "x$kpse_cv_cxx_flags" = xok; then CXXLD='$(top_builddir)/CXXLD.sh' CXX_HACK_DEPS=$CXXLD + CXX_HACK_LIBS=$kpse_cv_cxx_flags cxxld_sh="#! ${CONFIG_SHELL-/bin/sh} # CXXLD.sh. Generated by configure. set -- $CXX \"\$@\" $CXX_HACK_LIBS @@ -17456,14 +17464,6 @@ case $enable_etex in yes|no) : ;; *) enable_etex=no ;; esac -# Check whether --enable-omega was given. -if test "${enable_omega+set}" = set; then - enableval=$enable_omega; -fi -case $enable_omega in - yes|no) : ;; - *) enable_omega=no ;; -esac # Check whether --enable-aleph was given. if test "${enable_aleph+set}" = set; then enableval=$enable_aleph; @@ -17837,20 +17837,6 @@ else ETEX_SYNCTEX_TRUE='#' ETEX_SYNCTEX_FALSE= fi - if test "x$enable_omega" = xyes; then - OMEGA_TRUE= - OMEGA_FALSE='#' -else - OMEGA_TRUE='#' - OMEGA_FALSE= -fi - if false; then - OMEGA_SYNCTEX_TRUE= - OMEGA_SYNCTEX_FALSE='#' -else - OMEGA_SYNCTEX_TRUE='#' - OMEGA_SYNCTEX_FALSE= -fi if test "x$enable_aleph" = xyes; then ALEPH_TRUE= ALEPH_FALSE='#' @@ -17914,7 +17900,7 @@ else TEX_SYNCTEX_TRUE='#' TEX_SYNCTEX_FALSE= fi -if test "x$enable_omega:$enable_aleph:$enable_xetex" = xno:no:no; then +if test "x$enable_aleph:$enable_xetex" = xno:no; then enable_otangle=no else enable_otangle=yes @@ -20252,6 +20238,365 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:$LINENO: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long) +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute sizeof (long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } + else + ac_cv_sizeof_long=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +static long int longval () { return (long int) (sizeof (long)); } +static unsigned long int ulongval () { return (long int) (sizeof (long)); } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (long))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (long)))) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (long)))) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_long=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long) +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute sizeof (long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } + else + ac_cv_sizeof_long=0 + fi +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + for ac_func in strerror do @@ -23629,20 +23974,6 @@ $as_echo "$as_me: error: conditional \"ETEX_SYNCTEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi -if test -z "${OMEGA_TRUE}" && test -z "${OMEGA_FALSE}"; then - { { $as_echo "$as_me:$LINENO: error: conditional \"OMEGA\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -$as_echo "$as_me: error: conditional \"OMEGA\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${OMEGA_SYNCTEX_TRUE}" && test -z "${OMEGA_SYNCTEX_FALSE}"; then - { { $as_echo "$as_me:$LINENO: error: conditional \"OMEGA_SYNCTEX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -$as_echo "$as_me: error: conditional \"OMEGA_SYNCTEX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi if test -z "${ALEPH_TRUE}" && test -z "${ALEPH_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"ALEPH\" was never defined. Usually this means the macro was only invoked conditionally." >&5 diff --git a/Build/source/texk/web2c/configure.ac b/Build/source/texk/web2c/configure.ac index 5b68f07f6f0..c79ce23e452 100644 --- a/Build/source/texk/web2c/configure.ac +++ b/Build/source/texk/web2c/configure.ac @@ -79,13 +79,13 @@ AS_IF([test "x$enable_ipc" = xyes], ]) AC_SUBST([socketlibs]) -dnl Generate *TEX, OMEGA, and ALEPH conditionals. +dnl Generate *TEX and ALEPH conditionals. m4_foreach([Kpse_Prog], [kpse_tex_progs], [m4_ifset([Kpse_Prog], [KPSE_XTEX_COND(Kpse_Prog)])])[]dnl dnl Disable SyncTeX support for TeX. AM_CONDITIONAL([TEX_SYNCTEX], [false])[]dnl -AS_IF([test "x$enable_omega:$enable_aleph:$enable_xetex" = xno:no:no], +AS_IF([test "x$enable_aleph:$enable_xetex" = xno:no], [enable_otangle=no], [enable_otangle=yes]) AM_CONDITIONAL([OTANGLE], @@ -173,6 +173,7 @@ if test `(uname) 2>/dev/null` = aux; then fi AC_CHECK_SIZEOF([int]) +AC_CHECK_SIZEOF([long]) AC_CHECK_FUNCS([strerror]) AC_CHECK_HEADERS([errno.h]) diff --git a/Build/source/texk/web2c/lib/ChangeLog b/Build/source/texk/web2c/lib/ChangeLog index be183bf4ddd..2756349bd56 100644 --- a/Build/source/texk/web2c/lib/ChangeLog +++ b/Build/source/texk/web2c/lib/ChangeLog @@ -1,3 +1,7 @@ +2009-03-29 Peter Breitenlohner <peb@mppmu.mpg.de> + + * texmfmp.c: remove all references to Omega, eOmega, and pdfeTeX. + 2009-03-28 Karl Berry <karl@tug.org> * texmfmp.c (mk_shellcmdlist, shell_cmd_is_allowed): not static, diff --git a/Build/source/texk/web2c/lib/texmfmp.c b/Build/source/texk/web2c/lib/texmfmp.c index 22afe6fc4a5..8735ad48e5c 100644 --- a/Build/source/texk/web2c/lib/texmfmp.c +++ b/Build/source/texk/web2c/lib/texmfmp.c @@ -48,10 +48,6 @@ #include <pdftexdir/ptexlib.h> #elif defined (luaTeX) #include <luatexdir/luatexextra.h> -#elif defined (Omega) -#include <omegadir/omegaextra.h> -#elif defined (eOmega) -#include <eomegadir/eomegaextra.h> #elif defined (Aleph) #include <alephdir/alephextra.h> #else @@ -553,14 +549,14 @@ static void parse_options P2H(int, string *); /* Try to figure out if we have been given a filename. */ static string get_input_file_name P1H(void); -#if defined(Omega) || defined(eOmega) || defined(Aleph) +#if defined(Aleph) /* Declare this for Omega family, so they can parse the -8bit option, * even though it is a no-op for them. */ static int eightbitp; -#endif /* Omega || eOmega || Aleph */ +#endif /* Aleph */ -#if defined(pdfTeX) || defined(pdfeTeX) || defined(luaTeX) +#if defined(pdfTeX) || defined(luaTeX) char *ptexbanner; #endif @@ -631,8 +627,8 @@ maininit P2C(int, ac, string *, av) # define SYNCTEX_NO_OPTION INT_MAX synctexoption = SYNCTEX_NO_OPTION; #else -# /* Omit warning for Omega and non-TeX. */ -# if defined(TeX) && !defined(Omega) && !defined(eOmega) && !defined(Aleph) +# /* Omit warning for Aleph and non-TeX. */ +# if defined(TeX) && !defined(Aleph) # warning SyncTeX: -synctex command line option NOT available # endif #endif @@ -700,10 +696,10 @@ maininit P2C(int, ac, string *, av) iniversion = true; } else if (FILESTRCASEEQ (kpse_program_name, "virtex")) { virversion = true; -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(luaTeX) +#if !defined(Aleph) && !defined(luaTeX) } else if (FILESTRCASEEQ (kpse_program_name, "mltex")) { mltexp = true; -#endif /* !Omega && !eOmega && !Aleph && !luaTeX */ +#endif /* !Aleph && !luaTeX */ #endif /* TeX */ } @@ -717,7 +713,7 @@ maininit P2C(int, ac, string *, av) #ifdef TeX /* Sanity check: -mltex, -enc, -etex only work in combination with -ini. */ if (!iniversion) { -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(luaTeX) +#if !defined(Aleph) && !defined(luaTeX) if (mltexp) { fprintf(stderr, "-mltex only works with -ini\n"); } @@ -770,16 +766,16 @@ maininit P2C(int, ac, string *, av) kpse_src_compile); #endif /* MP */ #ifdef TeX -#if defined(Omega) || defined (eOmega) || defined (Aleph) +#if defined (Aleph) kpse_set_program_enabled (kpse_ocp_format, MAKE_OMEGA_OCP_BY_DEFAULT, kpse_src_compile); kpse_set_program_enabled (kpse_ofm_format, MAKE_OMEGA_OFM_BY_DEFAULT, kpse_src_compile); kpse_set_program_enabled (kpse_tfm_format, false, kpse_src_compile); -#else /* !Omega && !eOmega && !Aleph */ +#else /* !Aleph */ kpse_set_program_enabled (kpse_tfm_format, MAKE_TEX_TFM_BY_DEFAULT, kpse_src_compile); -#endif /* !Omega && !eOmega && !Aleph */ +#endif /* !Aleph */ kpse_set_program_enabled (kpse_tex_format, MAKE_TEX_TEX_BY_DEFAULT, kpse_src_compile); kpse_set_program_enabled (kpse_fmt_format, MAKE_TEX_FMT_BY_DEFAULT, @@ -871,7 +867,7 @@ topenin P1H(void) } #else char *ptr = &(argv[i][0]); - /* Don't use strcat, since in Omega the buffer elements aren't + /* Don't use strcat, since in Aleph the buffer elements aren't single bytes. */ while (*ptr) { buffer[k++] = *(ptr++); @@ -896,7 +892,7 @@ topenin P1H(void) /* One more time, this time converting to TeX's internal character representation. */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(XeTeX) && !defined(luaTeX) +#if !defined(Aleph) && !defined(XeTeX) && !defined(luaTeX) for (i = first; i < last; i++) buffer[i] = xord[buffer[i]]; #endif @@ -1046,7 +1042,7 @@ ipc_snd P3C(int, n, int, is_eof, char *, data) /* This routine notifies the server if there is an eof, or the filename if a new DVI file is starting. This is the routine called by TeX. - Omega defines str_start(#) as str_start_ar[# - too_big_char], with + Aleph defines str_start(#) as str_start_ar[# - too_big_char], with too_big_char = biggest_char + 1 = 65536 (omstr.ch).*/ void @@ -1061,14 +1057,14 @@ ipcpage P1C(int, is_eof) string cwd = xgetcwd (); ipc_open_out (); -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +#if !defined(Aleph) len = strstart[outputfilename + 1] - strstart[outputfilename]; #else len = strstartar[outputfilename + 1 - 65536L] - strstartar[outputfilename - 65536L]; #endif name = (string)xmalloc (len + 1); -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +#if !defined(Aleph) strncpy (name, (string)&strpool[strstart[outputfilename]], len); #else { @@ -1096,8 +1092,8 @@ ipcpage P1C(int, is_eof) #endif /* TeX && IPC */ #if defined (TeX) || defined (MF) || defined (MP) - /* TCX and Omega get along like sparks and gunpowder. */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(XeTeX) && !defined(luaTeX) + /* TCX and Aleph&Co get along like sparks and gunpowder. */ +#if !defined(Aleph) && !defined(XeTeX) && !defined(luaTeX) /* Return the next number following START, setting POST to the following character, as in strtol. Issue a warning and return -1 if no number @@ -1198,7 +1194,7 @@ readtcxfile P1H(void) WARNING1 ("Could not open char translation file `%s'", orig_filename); } } -#endif /* !Omega && !eOmega && !Aleph && !XeTeX */ +#endif /* !Aleph && !XeTeX && !luaTeX */ #endif /* TeX || MF || MP [character translation] */ #ifdef XeTeX /* XeTeX handles this differently, and allows odd quotes within names */ @@ -1337,12 +1333,12 @@ static struct option long_options[] { "ipc", 0, &ipcon, 1 }, { "ipc-start", 0, &ipcon, 2 }, #endif /* IPC */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(luaTeX) +#if !defined(Aleph) && !defined(luaTeX) { "mltex", 0, &mltexp, 1 }, #if !defined(XeTeX) { "enc", 0, &enctexp, 1 }, #endif /* !XeTeX */ -#endif /* !Omega && !eOmega && !Aleph */ +#endif /* !Aleph && !luaTeX */ #if defined (eTeX) || defined(pdfTeX) || defined(Aleph) || defined(XeTeX) || defined(luaTeX) { "etex", 0, &etexp, 1 }, #endif /* eTeX || pdfTeX || Aleph */ @@ -1519,10 +1515,10 @@ parse_options P2C(int, argc, string *, argv) translate_filename = optarg; } else if (ARGUMENT_IS ("default-translate-file")) { default_translate_filename = optarg; -#if defined(Omega) || defined(eOmega) || defined(Aleph) +#if defined(Aleph) } else if (ARGUMENT_IS ("8bit")) { /* FIXME: print snippy message? Possibly also for above? */ -#endif /* !Omega && !eOmega && !Aleph */ +#endif /* !Aleph */ #endif /* TeX || MF || MP */ #if defined (TeX) || defined (MF) @@ -1822,7 +1818,7 @@ boolean openoutnameok P1C(const_string, fname) closed using pclose(). */ -#if defined(pdfTeX) || defined(pdfeTeX) || defined(luaTeX) +#if defined(pdfTeX) || defined(luaTeX) static FILE *pipes [] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; @@ -1842,7 +1838,7 @@ open_in_or_pipe P3C(FILE **, f_ptr, int, filefmt, const_string, fopen_mode) *f_ptr = NULL; fname = (string)xmalloc(strlen((const_string)(nameoffile+1))+1); strcpy(fname,(const_string)(nameoffile+1)); -#if !defined(pdfTeX) && !defined(pdfeTeX) +#if !defined(pdfTeX) if (fullnameoffile) free (fullnameoffile); fullnameoffile = xstrdup (fname); @@ -2099,7 +2095,7 @@ input_line P1C(FILE *, f) --last; /* Don't bother using xord if we don't need to. */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(luaTeX) +#if !defined(Aleph) && !defined(luaTeX) for (i = first; i <= last; i++) buffer[i] = xord[buffer[i]]; #endif @@ -2517,13 +2513,13 @@ gettexstring P1C(strnumber, s) { poolpointer len; string name; -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +#if !defined(Aleph) len = strstart[s + 1] - strstart[s]; #else len = strstartar[s + 1 - 65536L] - strstartar[s - 65536L]; #endif name = (string)xmalloc (len + 1); -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +#if !defined(Aleph) strncpy (name, (string)&strpool[strstart[s]], len); #else { diff --git a/Build/source/texk/web2c/man/ChangeLog b/Build/source/texk/web2c/man/ChangeLog index cefa01af10e..68f0b6b46c9 100644 --- a/Build/source/texk/web2c/man/ChangeLog +++ b/Build/source/texk/web2c/man/ChangeLog @@ -1,3 +1,8 @@ +2009-03-30 Peter Breitenlohner <peb@mppmu.mpg.de> + + * omega.man (removed): Omega has been removed. Copied to ... + * aleph.man (new): ... here and changed "Omega" => "Aleph". + 2009-03-22 Karl Berry <karl@tug.org> * etex.man: missed WB definition, no such thing as elatex, diff --git a/Build/source/texk/web2c/man/Makefile.am b/Build/source/texk/web2c/man/Makefile.am index df3e78671e7..129f41b6c55 100644 --- a/Build/source/texk/web2c/man/Makefile.am +++ b/Build/source/texk/web2c/man/Makefile.am @@ -56,14 +56,10 @@ if OTANGLE man_sources += endif OTANGLE -if OMEGA -man_sources += omega.man -endif OMEGA -EXTRA_DIST += omega.man - if ALEPH -man_sources += +man_sources += aleph.man endif ALEPH +EXTRA_DIST += aleph.man man_sources += $(misc_man_sources) EXTRA_DIST += $(misc_man_sources) diff --git a/Build/source/texk/web2c/man/Makefile.in b/Build/source/texk/web2c/man/Makefile.in index 6d90996ce1c..ef20c5baf84 100644 --- a/Build/source/texk/web2c/man/Makefile.in +++ b/Build/source/texk/web2c/man/Makefile.in @@ -41,8 +41,7 @@ host_triplet = @host@ @LUATEX_TRUE@am__append_8 = @XETEX_TRUE@am__append_9 = @OTANGLE_TRUE@am__append_10 = -@OMEGA_TRUE@am__append_11 = omega.man -@ALEPH_TRUE@am__append_12 = +@ALEPH_TRUE@am__append_11 = aleph.man DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/../am/man.am ChangeLog subdir = man @@ -239,11 +238,10 @@ man_sources = $(bootstrap_man_sources) $(am__append_1) \ $(mpware_man_sources) $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) $(am__append_6) \ $(am__append_7) $(am__append_8) $(am__append_9) \ - $(am__append_10) $(am__append_11) $(am__append_12) \ - $(misc_man_sources) + $(am__append_10) $(am__append_11) $(misc_man_sources) EXTRA_DIST = $(bootstrap_man_sources) $(web_man_sources) \ $(mpware_man_sources) tex.man mf.man mpost.man etex.man \ - $(pdeftex_man_sources) omega.man $(misc_man_sources) \ + $(pdeftex_man_sources) aleph.man $(misc_man_sources) \ amslatex.min initex.min lamstex.min pdftexman.m4 slitex.min \ spell.add virtex.min bootstrap_man_sources = cweb.man tangle.man diff --git a/Build/source/texk/web2c/man/omega.man b/Build/source/texk/web2c/man/omega.man deleted file mode 100644 index e48e22a9a9f..00000000000 --- a/Build/source/texk/web2c/man/omega.man +++ /dev/null @@ -1,292 +0,0 @@ -.TH OMEGA 1 "27 December 1997" "Web2C @VERSION@" -.\"===================================================================== -.if n .ds MF Metafont -.if t .ds MF M\s-2ETAFONT\s0 -.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP -.if n .ds TX TeX -.ie t .ds OX \fIT\v'+0.25m'E\v'-0.25m'X\fP for troff -.el .ds OX TeX for nroff -.\" the same but obliqued -.\" BX definition must follow TX so BX can use TX -.if t .ds BX \fRB\s-2IB\s0\fP\*(TX -.if n .ds BX BibTeX -.\" LX definition must follow TX so LX can use TX -.if t .ds LX \fRL\\h'-0.36m'\\v'-0.15v'\s-2A\s0\\h'-0.15m'\\v'0.15v'\fP\*(TX -.if n .ds LX LaTeX -.if t .ds AX \fRA\\h'-0.1667m'\\v'0.20v'M\\v'-0.20v'\\h'-0.125m'S\fP\*(TX -.if n .ds AX AmSTeX -.if t .ds AY \fRA\\h'-0.1667m'\\v'0.20v'M\\v'-0.20v'\\h'-0.125m'S\fP\*(LX -.if n .ds AY AmSLaTeX -.\"===================================================================== -.SH NAME -omega, iniomega, viromega \- extended unicode TeX -.SH SYNOPSIS -.B omega -.RI [ options ] -[\fB&\fR \fIformat\fR ] -[ \fIfile\fR | \fB\e\fR \fIcommands\fR ] -.\"===================================================================== -.SH DESCRIPTION -Run the Omega typesetter on -.IR file , -usually creating -.IR file.dvi . -If the file argument has no extension, ".tex" will be appended to it. -Instead of a filename, a set of Omega commands can be given, the first -of which must start with a backslash. -With a -.BI & format -argument Omega uses a different set of precompiled commands, -contained in -.IR format.fmt ; -it is usually better to use the -.B -fmt -.I format -option instead. -.PP -Omega is a version of the \*(TX program modified for multilingual -typesetting. It uses unicode, and has additional primitives for -(among other things) bidirectional typesetting. -.PP -The -.B iniomega -and -.B viromega -commands are Omega's analogues to the -.B initex -and -.B virtex -commands. In this installation, they are symlinks to the -.B omega -executable. -.PP -Omega's command line options are similar to those of \*(TX. -.PP -Omega is experimental software. -.\"===================================================================== -.SH OPTIONS -This version of Omega understands the following command line options. -.TP -.BI --oft \ format -.rb -Use -.I format -as the name of the format to be used, instead of the name by which -Omega was called or a -.I %& -line. -.TP -.B -halt-on-error -.rb -Exit with an error code when an error is encountered during processing. -.TP -.B --help -.rb -Print help message and exit. -.TP -.B --ini -.rb -Be -.BR iniomega , -for dumping formats; this is implicitly true if the program is called -as -.BR iniomega . -.TP -.BI --interaction \ mode -.rb -Sets the interaction mode. The mode can be one of -.IR batchmode , -.IR nonstopmode , -.IR scrollmode , -and -.IR errorstopmode . -The meaning of these modes is the same as that of the corresponding -\ecommands. -.TP -.B --ipc -.rb -Send DVI output to a socket as well as the usual output file. Whether -this option is available is the choice of the installer. -.TP -.B --ipc-start -.rb -As -.BR --ipc , -and starts the server at the other end as well. Whether this option -is available is the choice of the installer. -.TP -.BI --kpathsea-debug \ bitmask -.rb -Sets path searching debugging flags according to the bitmask. See the -.I Kpathsea -manual for details. -.TP -.BI --maketex \ fmt -.rb -Enable -.RI mktex fmt , -where -.I fmt -must be one of -.I tex -or -.IR tfm . -.TP -.BI --no-maketex \ fmt -.rb -Disable -.RI mktex fmt , -where -.I fmt -must be one of -.I tex -or -.IR tfm . -.TP -.BI --output-comment \ string -.rb -Use -.I string -for the DVI file comment instead of the date. -.TP -.BI -output-directory \ directory -.rb Write output files in -.I directory -instead of the current directory. Look up input files in -.I directory -first, the along the normal search path. -.TP -.B --parse-first-line -.rb -If the first line of the main input file begins with -.I %& -parse it to look for a dump name. -.TP -.BI --progname \ name -.rb -Pretend to be program -.IR name . -This affects both the format used and the search paths. -.TP -.B --recorder -.rb -Enable the filename recorder. This leaves a trace of the files opened -for input and output in a file with extension -.IR .ofl . -(This option is always on.) -.TP -.B --shell-escape -.rb -Enable the -.BI \ewrite18{ command } -construct. The -.I command -can be any Bourne shell command. This construct is normally -disallowed for security reasons. -.TP -.B --version -.rb -Print version information and exit. -.\"===================================================================== -.SH ENVIRONMENT -See the Kpathsearch library documentation (the `Path specifications' -node) for precise details of how the environment variables are used. -The -.B kpsewhich -utility can be used to query the values of the variables. -.PP -One caveat: In most Omega formats, you cannot use ~ in a filename you -give directly to Omega, because ~ is an active character, and hence is -expanded, not taken as part of the filename. Other programs, such as -\*(MF, do not have this problem. -.PP -.TP -TEXMFOUTPUT -Normally, Omega puts its output files in the current directory. If -any output file cannot be opened there, it tries to open it in the -directory specified in the environment variable TEXMFOUTPUT. -There is no default value for that variable. For example, if you say -.I tex paper -and the current directory is not writable, if TEXMFOUTPUT has -the value -.IR /tmp , -Omega attempts to create -.I /tmp/paper.log -(and -.IR /tmp/paper.dvi , -if any output is produced.) -.TP -TEXINPUTS -Search path for -.I \einput -and -.I \eopenin -files. -This should probably start with ``.'', so -that user files are found before system files. An empty path -component will be replaced with the paths defined in the -.I texmf.cnf -file. For example, set TEXINPUTS to ".:/home/usr/tex:" to prepend the -current direcory and ``/home/user/tex'' to the standard search path. -.TP -TEXEDIT -Command template for switching to editor. The default, usually -.BR vi , -is set when Omega is compiled. -.\"===================================================================== -.SH FILES -The location of the files mentioned below varies from system to -system. Use the -.B kpsewhich -utility to find their locations. -.TP -.I omega.pool -Encoded text of Omega's messages. -.TP -.I *.oft -Predigested Omega format (.\|oft) files. -.br -.\"===================================================================== -.SH NOTES -This manual page is not meant to be exhaustive. The complete -documentation for this version of Omega can be found in the info -manual -.IR "Web2C: A TeX implementation" . -.\"===================================================================== -.SH BUGS -This version of Omega implements a number of optional extensions. -In fact, many of these extensions conflict to a greater or lesser -extent with the definition of Omega. When such extensions are -enabled, the banner printed when Omega starts is changed to print -.B Omegak -instead of -.BR Omega . -.PP -This version of Omega fails to trap arithmetic overflow when -dimensions are added or subtracted. Cases where this occurs are rare, -but when it does the generated -.I DVI -file will be invalid. -.PP -The -.I DVI -files produced by Omega may use extensions which make them incompatible -with most software designed to handle -.I DVI -files. In order to print or preview them, you should use -.B odvips -to generate a PostScript file. -.PP -Omega is experimental software, and if you are an active user it is -strongly recommended that you subscribe to the Omega mailing list. -Visit the Omega website -.B http://omega.cse.unsw.edu.au -for information on how to subscribe. -.\"===================================================================== -.SH "SEE ALSO" -.BR tex (1), -.BR mf (1), -.RB odvips (1), -.\"===================================================================== -.SH AUTHORS -The primary authors of Omega are John Plaice and Yannis Haralambous. diff --git a/Build/source/texk/web2c/mpdir/am/mp.am b/Build/source/texk/web2c/mpdir/am/mp.am index eb89d5b0e96..0b7d39ffe97 100644 --- a/Build/source/texk/web2c/mpdir/am/mp.am +++ b/Build/source/texk/web2c/mpdir/am/mp.am @@ -7,7 +7,7 @@ bin_PROGRAMS += mpost endif MP mpost_CPPFLAGS = -I$(srcdir)/mpdir -mpost_LDADD = libmpost.a $(LDADD) +mpost_LDADD = libmp.a $(LDADD) mpost_c_h = mpini.c mp0.c mp1.c mp2.c mpcoerce.h mpd.h nodist_mpost_SOURCES = $(mpost_c_h) mp-pool.c mpextra.c $(mpost_c_h): mp-web2c @@ -28,13 +28,13 @@ mp-pool.c: mp.pool $(makecpool) mpdir/mplib.h DISTCLEANFILES += $(nodist_mpost_SOURCES) mp-web2c \ mp.p mp.pool mp-tangle -## libmpost +## libmp ## -EXTRA_LIBRARIES += libmpost.a +EXTRA_LIBRARIES += libmp.a -libmpost_a_CPPFLAGS = -I$(srcdir)/mpdir +libmp_a_CPPFLAGS = -I$(srcdir)/mpdir -libmpost_a_SOURCES = \ +libmp_a_SOURCES = \ mpdir/avl.c \ mpdir/avl.h \ mpdir/avlstuff.c \ @@ -47,8 +47,8 @@ libmpost_a_SOURCES = \ mpdir/writefont.c \ mpdir/writet1.c -## We must create mpd.h before compiling the libmpost_a_SOURCES. -$(libmpost_a_SOURCES): mpd.h +## We must create mpd.h before compiling the libmp_a_SOURCES. +$(libmp_a_SOURCES): mpd.h ## Eventually delete these files ## diff --git a/Build/source/texk/web2c/omegadir/ChangeLog b/Build/source/texk/web2c/omegadir/ChangeLog deleted file mode 100644 index c0d6577f5bf..00000000000 --- a/Build/source/texk/web2c/omegadir/ChangeLog +++ /dev/null @@ -1,23 +0,0 @@ -2009-02-27 Peter Breitenlohner <peb@mppmu.mpg.de> - - Backport of changes for Aleph - - * omegaextra.h (BUG_ADDRESS): make consistent. - * omcprt.ch (new): do not announce copyright on the terminal. - * omage.mk: include omcprt.ch in sources for omega.web. - * com16bit.ch (banner_k): just make equivalent to banner, - since Web2C announces itself. - - * comsrcspec.ch, com16bit.ch: - Use runsystem() instead of system(), etc. See tex.ch entry in - ../ChangeLog - -2008-07-04 Karl Berry <karl@tug.org> - - * omega.mk (otps): use @OMEGA@ for otps_programs and otps. - Report from Francois Charrette, tldistro 03 Jul 2008 16:07:38. - -2008-03-23 Karl Berry <karl@freefriends.org> - - * Update to TeX 3.1415926; compile in pool files. - From Akira. diff --git a/Build/source/texk/web2c/omegadir/README b/Build/source/texk/web2c/omegadir/README deleted file mode 100644 index c8b8d0d048f..00000000000 --- a/Build/source/texk/web2c/omegadir/README +++ /dev/null @@ -1,12 +0,0 @@ -This directory contains part of the Omega distribution, other parts -are found in ../otps, and several files in the parent directory. You -will also need odvips, the sources of which might be present in -../../odvips. - -Omega is very much experimental software, and may prove hard or -impossible to build on your system. At present, you need to install -bison (the GNU version of yacc) and lex or flex to build otp2ocp from -scratch. If you do not have these programs, you can try to use the -y_tab.c-dist, y_tab.h-dist, and lex.yy.c-dist files to complete the -build. - diff --git a/Build/source/texk/web2c/omegadir/am/omega.am b/Build/source/texk/web2c/omegadir/am/omega.am deleted file mode 100644 index 77d97ab50ed..00000000000 --- a/Build/source/texk/web2c/omegadir/am/omega.am +++ /dev/null @@ -1,88 +0,0 @@ -## texk/web2c/omegadir/am/omega.am: Makefile fragment for Omega. - -## Omega -## -if OMEGA -bin_PROGRAMS += omega -endif OMEGA - -## With --enable-ipc, Omega may need to link with -lsocket. -omega_LDADD = $(LDADD) $(socketlibs) - -omega_CPPFLAGS = -I$(srcdir)/omegadir $(AM_CPPFLAGS) -omega_c_h = omegaini.c omega0.c omega1.c omega2.c omega3.c omegacoerce.h omegad.h -nodist_omega_SOURCES = $(omega_c_h) omega-pool.c omegaextra.c -omega_SOURCES = \ - omegadir/omega.c \ - omegadir/omegabis.c \ - omegadir/omegaextra.h \ - omegadir/omegamem.h \ - omegadir/omega-pool.h -## We must create omegad.h before compiling the omega_SOURCES, -## but certainly don't want to create omegad.h if Omega is not built. -if OMEGA -$(omega_SOURCES): omegad.h -endif OMEGA -$(omega_c_h): omega-web2c -omega-web2c: omega.p $(web2c_texmf) omegadir/omega.defines - $(web2c) omega - echo timestamp >$@ - touch $(omega_c_h) -omegaextra.c: lib/texmfmp.c omegad.h - sed s/TEX-OR-MF-OR-MP/omega/ $(srcdir)/lib/texmfmp.c >$@ -omega.p omega.pool: omega-tangle -omega-tangle: otangle omega.web omega.ch - $(otangle) omega omega - echo timestamp >$@ - touch omega.p omega.pool -omega-pool.c: omega.pool $(makecpool) omegadir/omega-pool.h - $(makecpool) omega.pool $(srcdir)/omegadir/omega-pool.h >$@ || rm -f $@ -## Generate omega.web -omega_web_srcs = \ - tex.web \ - omegadir/omnode.ch \ - omegadir/om16bit.ch \ - omegadir/omstr.ch \ - omegadir/omfont.ch \ - omegadir/omchar.ch \ - omegadir/omfi.ch \ - omegadir/ompar.ch \ - omegadir/omocp.ch \ - omegadir/omfilter.ch \ - omegadir/omtrans.ch \ - omegadir/omdir.ch \ - omegadir/omcprt.ch \ - omegadir/omxml.ch -omega.web: $(TIE) $(omega_web_srcs) - $(tie) -m omega.web $(omega_web_srcs) -## Generate omega.ch -omega_ch_srcs = \ - omegadir/comnode.ch \ - omegadir/com16bit.ch \ - omegadir/comstr.ch \ - omegadir/comfont.ch \ - omegadir/comchar.ch \ - omegadir/comfi.ch \ - omegadir/compar.ch \ - omegadir/comocp.ch \ - omegadir/comfilter.ch \ - omegadir/comtrans.ch \ - omegadir/comdir.ch \ - omegadir/comxml.ch \ - omegadir/comsrcspec.ch -omega.ch: $(TIE) omega.web $(omega_ch_srcs) - $(tie) -c omega.ch omega.web $(omega_ch_srcs) -EXTRA_DIST += $(omega_web_srcs) $(omega_ch_srcs) lib/texmfmp.c -DISTCLEANFILES += $(nodist_omega_SOURCES) omega.web omega.ch omega-web2c \ - omega.p omega.pool omega-tangle - -EXTRA_DIST += \ - omegadir/ChangeLog \ - omegadir/README \ - omegadir/omega.defines \ - omegadir/omega.version - -## Eventually delete these files -## -EXTRA_DIST += omegadir/omega.mk - diff --git a/Build/source/texk/web2c/omegadir/com16bit.ch b/Build/source/texk/web2c/omegadir/com16bit.ch deleted file mode 100644 index 72aa14e3149..00000000000 --- a/Build/source/texk/web2c/omegadir/com16bit.ch +++ /dev/null @@ -1,2818 +0,0 @@ -% com16bit.ch: Omega version of file tex.ch -% -% tex.ch for C compilation with web2c, derived from various other change files. -% By Tim Morgan, UC Irvine ICS Department, and many others. -% -% (05/28/86) ETM Started with TeX 2.0 -% (06/03/87) ETM Brought up to TeX 2.2 -% (09/26/87) ETM Brought up to TeX 2.3 -% (10/01/87) ETM Brought up to TeX 2.5 -% (12/21/87) ETM Brought up to TeX 2.7 -% (01/14/88) ETM Brought up to TeX 2.9 -% (02/20/88) PAM Revised format and module numbers -% (03/01/88) ETM Eliminated some unused variables and unnecesary tests -% (05/09/88) ETM Added yet another casting bug fix -% (06/21/88) ETM Brought up to TeX version 2.93 -% (12/11/88) ETM Brought up to TeX version 2.94 -% (01/12/89) PAM Brought up to TeX version 2.95 -% (02/14/89) ETM Brought up to TeX version 2.96 -% (03/10/89) ETM Brought up to TeX version 2.98 -% (07/06/89) ETM Brought up to TeX version 2.991 -% (11/30/89) KB To version 2.992 (8-bit). -% (01/10/90) SR To version 2.993. -% (03/27/90) KY To version 3.0. -% (more recent changes in ChangeLog) -% -% The TeX program is copyright (C) 1982 by D. E. Knuth. -% TeX is a trademark of the American Mathematical Society. -% -% The module numbers in this change file refer to TEX.WEB 3.141592 as -% of March, 1995 (published as Donald E. Knuth, TeX: The Program, -% Volume B of Computers & Typesetting). - -@x [0.0] l.83 - WEAVE: print changes only. - \def\?##1]{\hbox to 1in{\hfil##1.\ }} - } -@y 83 - \def\?##1]{\hbox{Changes to \hbox to 1em{\hfil##1}.\ }} - } -\let\maybe=\iffalse -@z - -@x -@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} -@y -@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} -@d banner_k==banner {Web2C announces itself} -@z - -@x [1.4] l.233 - program header -Actually the heading shown here is not quite normal: The |program| line -does not mention any |output| file, because \ph\ would ask the \TeX\ user -to specify a file name if |output| were specified here. -@:PASCAL H}{\ph@> -@^system dependencies@> -@y -@z - -@x [1.4] l.243 - labels in outer block not needed -program OMEGA; {all file names are defined dynamically} -label @<Labels in the outer block@>@/ -@y -program OMEGA; {all file names are defined dynamically} -@z - -@x [1.6] l.267 - labels in outer block not needed -@ Three labels must be declared in the main program, so we give them -symbolic names. - -@d start_of_TEX=1 {go here when \TeX's variables are initialized} -@d end_of_TEX=9998 {go here to close files and terminate gracefully} -@d final_end=9999 {this label marks the ending of the program} - -@<Labels in the out...@>= -start_of_TEX@t\hskip-2pt@>, end_of_TEX@t\hskip-2pt@>,@,final_end; - {key control points} -@y -@ For Web2c, labels are not declared in the main program, but -we still have to declare the symbolic names. - -@d start_of_TEX=1 {go here when \TeX's variables are initialized} -@d final_end=9999 {this label marks the ending of the program} -@z - -% Here we change these WEB symbols, which are used much as #ifdef's -% are in C, into something which will get translated into actual #ifdef's. -@x [1.7] l.292 - debug..gubed, stat..tats -@d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging} -@d gubed==@t@>@} {change this to `$\\{gubed}\equiv\null$' when debugging} -@y -@d debug==ifdef('TEXMF_DEBUG') -@d gubed==endif('TEXMF_DEBUG') -@z -@x [1.7] l.297 - debug..gubed, stat..tats -@d stat==@{ {change this to `$\\{stat}\equiv\null$' when gathering - usage statistics} -@d tats==@t@>@} {change this to `$\\{tats}\equiv\null$' when gathering - usage statistics} -@y -@d stat==ifdef('STAT') -@d tats==endif('STAT') -@z - -@x [1.8] l.312 - Same, for `init...tini'. -@d init== {change this to `$\\{init}\equiv\.{@@\{}$' in the production version} -@d tini== {change this to `$\\{tini}\equiv\.{@@\}}$' in the production version} -@y 312 -@d init==ifdef('INITEX') -@d tini==endif('INITEX') -@z - -@x [1.8] l.319 - init...tini is dynamic -@!init @<Initialize table entries (done by \.{INITEX} only)@>@;@+tini -@y 318 -@!init -if ini_version then - begin @<Initialize table entries (done by \.{INITEX} only)@>@; - end; -@+tini -@z - -@x [1.11] l.375 - Compile-time constants: most removed for dynamic allocation. -@<Constants...@>= -@!mem_max=30000; {greatest index in \TeX's internal |mem| array; - must be strictly less than |max_halfword|; - must be equal to |mem_top| in \.{INITEX}, otherwise |>=mem_top|} -@!mem_min=0; {smallest index in \TeX's internal |mem| array; - must be |min_halfword| or more; - must be equal to |mem_bot| in \.{INITEX}, otherwise |<=mem_bot|} -@!buf_size=500; {maximum number of characters simultaneously present in - current lines of open files and in control sequences between - \.{\\csname} and \.{\\endcsname}; must not exceed |max_halfword|} -@!error_line=72; {width of context lines on terminal error messages} -@!half_error_line=42; {width of first lines of contexts in terminal - error messages; should be between 30 and |error_line-15|} -@!max_print_line=79; {width of longest text lines output; should be at least 60} -@!stack_size=200; {maximum number of simultaneous input sources} -@!max_in_open=6; {maximum number of input files and error insertions that - can be going on simultaneously} -@y -@d file_name_size == maxint -@d ssup_error_line = 255 -@d ssup_max_strings == 2097151 -{Larger values may be used, but then the arrays consume much more memory.} -@d ssup_trie_opcode == 65535 -@d ssup_trie_size == @"3FFFFF - -@d ssup_hyph_size == 65535 {Changing this requires changing (un)dumping!} -@d iinf_hyphen_size == 610 {Must be not less than |hyph_prime|!} - -@<Constants...@>= -@!mem_bot=0; {smallest index in the |mem| array dumped by \.{INITEX}; - must not be less than |mem_min|} - {Use |mem_bot=0| for compilers which cannot decrement pointers.} -@z - -@x -@!font_max=65535; {maximum internal font number; must be at most |font_biggest|} -@!param_size=60; {maximum number of simultaneous macro parameters} -@!nest_size=40; {maximum number of semantic levels simultaneously active} -@!max_strings=3000; {maximum number of strings; must not exceed |max_halfword|} -@!string_vacancies=8000; {the minimum number of characters that should be - available for the user's control sequences and font names, - after \TeX's own error messages are stored} -@!pool_size=32000; {maximum number of characters in strings, including all - error messages and help texts, and the names of all fonts and - control sequences; must exceed |string_vacancies| by the total - length of \TeX's own strings, which is currently about 23000} -@!save_size=600; {space for saving values outside of current group; must be - at most |max_halfword|} -@!trie_size=8000; {space for hyphenation patterns; should be larger for - \.{INITEX} than it is in production versions of \TeX} -@!trie_op_size=500; {space for ``opcodes'' in the hyphenation patterns} -@!dvi_buf_size=800; {size of the output buffer; must be a multiple of 8} -@!file_name_size=40; {file names shouldn't be longer than this} -@!pool_name='TeXformats:OMEGA.POOL '; - {string of length |file_name_size|; tells where the string pool appears} -@y -@!font_max=65535; {maximum internal font number; must be at most |font_biggest|} -@!hash_offset=514; {smallest index in hash array, i.e., |hash_base| } - {Use |hash_offset=0| for compilers which cannot decrement pointers.} -@!trie_op_size=15011; {space for ``opcodes'' in the hyphenation patterns; - best if relatively prime to 313, 361, and 1009.} -@!neg_trie_op_size=-15011; {for lower |trie_op_hash| array bound; - must be equal to |-trie_op_size|.} -@!min_trie_op=0; {first possible trie op code for any language} -@!max_trie_op=ssup_trie_opcode; {largest possible trie opcode for any language} -@!pool_name=TEXMF_POOL_NAME; {this is configurable, for the sake of ML-\TeX} - {string of length |file_name_size|; tells where the string pool appears} -@!engine_name=TEXMF_ENGINE_NAME; {the name of this engine} -@# -@!inf_main_memory = 2000000; -@!sup_main_memory = 256000000; - -@!inf_trie_size = 80000; -@!sup_trie_size = ssup_trie_size; - -@!inf_max_strings = 100000; -@!sup_max_strings = ssup_max_strings; - -@!inf_strings_free = 100; -@!sup_strings_free = sup_max_strings; - -@!inf_buf_size = 500; -@!sup_buf_size = 30000000; - -@!inf_nest_size = 40; -@!sup_nest_size = 4000; - -@!inf_max_in_open = 6; -@!sup_max_in_open = 127; - -@!inf_param_size = 60; -@!sup_param_size = 6000; - -@!inf_save_size = 600; -@!sup_save_size = 80000; - -@!inf_stack_size = 200; -@!sup_stack_size = 30000; - -@!inf_dvi_buf_size = 800; -@!sup_dvi_buf_size = 65536; - -@!inf_pool_size = 32000; -@!sup_pool_size = 40000000; -@!inf_pool_free = 1000; -@!sup_pool_free = sup_pool_size; -@!inf_string_vacancies = 8000; -@!sup_string_vacancies = sup_pool_size - 23000; - -@!sup_hyph_size = ssup_hyph_size; -@!inf_hyph_size = iinf_hyphen_size; {Must be not less than |hyph_prime|!} -@z - -@x [1.12] l.427 - Constants that are WEB numeric macros. -@d mem_bot=0 {smallest index in the |mem| array dumped by \.{INITEX}; - must not be less than |mem_min|} -@d mem_top==30000 {largest index in the |mem| array dumped by \.{INITEX}; - must be substantially larger than |mem_bot| - and not greater than |mem_max|} -@d font_base=0 {smallest internal font number; must not be less - than |min_quarterword|} -@d hash_size=65536 {maximum number of control sequences; it should be at most - about |(mem_max-mem_min)/10|} -@d hash_prime=55711 {a prime number equal to about 85\pct! of |hash_size|} -@d hyph_size=307 {another prime; the number of \.{\\hyphenation} exceptions} -@y -@d font_base=0 {smallest internal font number; must not be less - than |min_quarterword|} -@d hash_size=65536 {maximum number of control sequences; it should be at most - about |(mem_max-mem_min)/10|} -@d hash_prime=55711 {a prime number equal to about 85\pct! of |hash_size|} -@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; - if you change this, you should also change |iinf_hyphen_size|.} -@z - -@x [1.16] l.498 - Use C macros for `incr' and `decr'. -@d incr(#) == #:=#+1 {increase a variable by unity} -@d decr(#) == #:=#-1 {decrease a variable by unity} -@y -@z - -% The text_char type is used as an array index into xord. The -% default type `char' produces signed integers, which are bad array -% indices in C. -@x [2.19] l.565 - data type text_char is 8-bit ASCII_code -@d text_char == char {the data type of characters in text files} -@y -@d text_char == ASCII_code {the data type of characters in text files} -@z - -% [3.26] name_of_file is no longer an array. And change the destination -% type to text_char, which fixes: -% -% Date: 19 Sep 1994 10:38:24 +0200 -% From: thorinn@diku.dk (Lars Mathiesen) -% When echoed to the screen and in the log, character codes -% above '177 in file names are shown wrongly (typically as ^@). -% -@x [3.26] l.789 - name_of_file is no longer an array -@!name_of_file:packed array[1..file_name_size] of char;@;@/ - {on some systems this may be a \&{record} variable} -@y -@!name_of_file:^char; -@z - -@x [3.27] l.794 - Do file opening in C. -@ The \ph\ compiler with which the present version of \TeX\ was prepared has -extended the rules of \PASCAL\ in a very convenient way. To open file~|f|, -we can write -$$\vbox{\halign{#\hfil\qquad&#\hfil\cr -|reset(f,@t\\{name}@>,'/O')|&for input;\cr -|rewrite(f,@t\\{name}@>,'/O')|&for output.\cr}}$$ -The `\\{name}' parameter, which is of type `{\bf packed array -$[\langle\\{any}\rangle]$ of \\{char}}', stands for the name of -the external file that is being opened for input or output. -Blank spaces that might appear in \\{name} are ignored. - -The `\.{/O}' parameter tells the operating system not to issue its own -error messages if something goes wrong. If a file of the specified name -cannot be found, or if such a file cannot be opened for some other reason -(e.g., someone may already be trying to write the same file), we will have -|@!erstat(f)<>0| after an unsuccessful |reset| or |rewrite|. This allows -\TeX\ to undertake appropriate corrective action. -@:PASCAL H}{\ph@> -@^system dependencies@> - -\TeX's file-opening procedures return |false| if no file identified by -|name_of_file| could be opened. - -@d reset_OK(#)==erstat(#)=0 -@d rewrite_OK(#)==erstat(#)=0 - -@p function a_open_in(var f:alpha_file):boolean; - {open a text file for input} -begin reset(f,name_of_file,'/O'); a_open_in:=reset_OK(f); -end; -@# -function a_open_out(var f:alpha_file):boolean; - {open a text file for output} -begin rewrite(f,name_of_file,'/O'); a_open_out:=rewrite_OK(f); -end; -@# -function b_open_in(var f:byte_file):boolean; - {open a binary file for input} -begin reset(f,name_of_file,'/O'); b_open_in:=reset_OK(f); -end; -@# -function b_open_out(var f:byte_file):boolean; - {open a binary file for output} -begin rewrite(f,name_of_file,'/O'); b_open_out:=rewrite_OK(f); -end; -@# -function w_open_in(var f:word_file):boolean; - {open a word file for input} -begin reset(f,name_of_file,'/O'); w_open_in:=reset_OK(f); -end; -@# -function w_open_out(var f:word_file):boolean; - {open a word file for output} -begin rewrite(f,name_of_file,'/O'); w_open_out:=rewrite_OK(f); -end; -@y -@ All of the file opening functions are defined in C. -@z - -@x [3.28] l.850 - Do file closing in C. -@ Files can be closed with the \ph\ routine `|close(f)|', which -@:PASCAL H}{\ph@> -@^system dependencies@> -should be used when all input or output with respect to |f| has been completed. -This makes |f| available to be opened again, if desired; and if |f| was used for -output, the |close| operation makes the corresponding external file appear -on the user's area, ready to be read. - -These procedures should not generate error messages if a file is -being closed before it has been successfully opened. - -@p procedure a_close(var f:alpha_file); {close a text file} -begin close(f); -end; -@# -procedure b_close(var f:byte_file); {close a binary file} -begin close(f); -end; -@# -procedure w_close(var f:word_file); {close a word file} -begin close(f); -end; -@y -@ And all the file closing routines as well. -@z - -@x [3.30] l.888 - Array size of input buffer is determined at runtime. -@!buffer:array[0..buf_size] of ASCII_code; {lines of characters being read} -@y -@!buffer:^ASCII_code; {lines of characters being read} -@z - -@x [3.31] l.933 - Do `input_ln' in C. -@p function input_ln(var f:alpha_file;@!bypass_eoln:boolean):boolean; - {inputs the next line or returns |false|} -var last_nonblank:0..buf_size; {|last| with trailing blanks removed} -begin if bypass_eoln then if not eof(f) then get(f); - {input the first character of the line into |f^|} -last:=first; {cf.\ Matthew 19\thinspace:\thinspace30} -if eof(f) then input_ln:=false -else begin last_nonblank:=first; - while not eoln(f) do - begin if last>=max_buf_stack then - begin max_buf_stack:=last+1; - if max_buf_stack=buf_size then - @<Report overflow of the input buffer, and abort@>; - end; - buffer[last]:=f^; get(f); incr(last); - if buffer[last-1]<>" " then last_nonblank:=last; - end; - last:=last_nonblank; input_ln:=true; - end; -end; -@y -We define |input_ln| in C, for efficiency. -@z - -% [3.32] `term_in' and `term_out' are standard input and output. -% Declare the variables that used to be constants. -@x [3.32] l.961 - `term_in' and `term_out' are standard input and output. -@<Glob...@>= -@!term_in:alpha_file; {the terminal as an input file} -@!term_out:alpha_file; {the terminal as an output file} -@y -@d term_in==stdin {the terminal as an input file} -@d term_out==stdout {the terminal as an output file} - -@<Glob...@>= -@!init -@!ini_version:boolean; {are we \.{INITEX}?} -@!dump_option:boolean; {was the dump name option used?} -@!dump_line:boolean; {was a \.{\%\AM format} line seen?} -tini@/ -@# -@!bound_default:integer; {temporary for setup} -@!bound_name:^char; {temporary for setup} -@# -@!main_memory:integer; {total memory words allocated in initex} -@!extra_mem_bot:integer; {|mem_min:=mem_bot-extra_mem_bot| except in \.{INITEX}} -@!mem_min:integer; {smallest index in \TeX's internal |mem| array; - must be |min_halfword| or more; - must be equal to |mem_bot| in \.{INITEX}, otherwise |<=mem_bot|} -@!mem_top:integer; {largest index in the |mem| array dumped by \.{INITEX}; - must be substantially larger than |mem_bot|, - equal to |mem_max| in \.{INITEX}, else not greater than |mem_max|} -@!extra_mem_top:integer; {|mem_max:=mem_top+extra_mem_top| except in \.{INITEX}} -@!mem_max:integer; {greatest index in \TeX's internal |mem| array; - must be strictly less than |max_halfword|; - must be equal to |mem_top| in \.{INITEX}, otherwise |>=mem_top|} -@!error_line:integer; {width of context lines on terminal error messages} -@!half_error_line:integer; {width of first lines of contexts in terminal - error messages; should be between 30 and |error_line-15|} -@!max_print_line:integer; - {width of longest text lines output; should be at least 60} -@!max_strings:integer; {maximum number of strings; must not exceed |max_halfword|} -@!strings_free:integer; {strings available after format loaded} -@!string_vacancies:integer; {the minimum number of characters that should be - available for the user's control sequences and font names, - after \TeX's own error messages are stored} -@!pool_size:integer; {maximum number of characters in strings, including all - error messages and help texts, and the names of all fonts and - control sequences; must exceed |string_vacancies| by the total - length of \TeX's own strings, which is currently about 23000} -@!pool_free:integer;{pool space free after format loaded} -@!hyph_size:integer; {maximun number of hyphen exceptions} -@!trie_size:integer; {space for hyphenation patterns; should be larger for - \.{INITEX} than it is in production versions of \TeX. 50000 is - needed for English, German, and Portuguese.} -@!buf_size:integer; {maximum number of characters simultaneously present in - current lines of open files and in control sequences between - \.{\\csname} and \.{\\endcsname}; must not exceed |max_halfword|} -@!stack_size:integer; {maximum number of simultaneous input sources} -@!max_in_open:integer; {maximum number of input files and error insertions that - can be going on simultaneously} -@!param_size:integer; {maximum number of simultaneous macro parameters} -@!nest_size:integer; {maximum number of semantic levels simultaneously active} -@!save_size:integer; {space for saving values outside of current group; must be - at most |max_halfword|} -@!dvi_buf_size:integer; {size of the output buffer; must be a multiple of 8} -@!quoted_filename:boolean; {current filename is quoted} -@z - -@x [3.33] l.964 - We don't need to open terminal files. -@ Here is how to open the terminal files -in \ph. The `\.{/I}' switch suppresses the first |get|. -@:PASCAL H}{\ph@> -@^system dependencies@> - -@d t_open_in==reset(term_in,'TTY:','/O/I') {open the terminal for text input} -@d t_open_out==rewrite(term_out,'TTY:','/O') {open the terminal for text output} -@y -@ Here is how to open the terminal files. |t_open_out| does nothing. -|t_open_in|, on the other hand, does the work of ``rescanning,'' or getting -any command line arguments the user has provided. It's defined in C. - -@d t_open_out == {output already open for text output} -@z - -@x [3.34] l.982 - Flushing output to terminal files. -these operations can be specified in \ph: -@:PASCAL H}{\ph@> -@^system dependencies@> - -@d update_terminal == break(term_out) {empty the terminal output buffer} -@d clear_terminal == break_in(term_in,true) {clear the terminal input buffer} -@y -these operations can be specified with {\mc UNIX}. |update_terminal| -does an |fflush|. |clear_terminal| is redefined -to do nothing, since the user should control the terminal. -@^system dependencies@> - -@d update_terminal == fflush (term_out) -@d clear_terminal == do_nothing -@z - -@x [3.35] l.1017 - Do `input_ln' in C => section not needed. -@<Report overflow of the input buffer, and abort@>= -if format_ident=0 then - begin write_ln(term_out,'Buffer size exceeded!'); goto final_end; -@.Buffer size exceeded@> - end -else begin cur_input.loc_field:=first; cur_input.limit_field:=last-1; - overflow("buffer size",buf_size); -@:TeX capacity exceeded buffer size}{\quad buffer size@> - end -@y -Routine is implemented in C, module is not needed. -@z - -@x [3.37] l.1055 - |init_terminal|, reading the command line. -@ The following program does the required initialization -without retrieving a possible command line. -It should be clear how to modify this routine to deal with command lines, -if the system permits them. -@^system dependencies@> - -@p function init_terminal:boolean; {gets the terminal input started} -label exit; -begin t_open_in; -@y -@ The following program does the required initialization. -Iff anything has been specified on the command line, then |t_open_in| -will return with |last > first|. -@^system dependencies@> - -@p function init_terminal:boolean; {gets the terminal input started} -label exit; -begin t_open_in; -if last > first then - begin loc := first; - while (loc < last) and (buffer[loc]=' ') do incr(loc); - if loc < last then - begin init_terminal := true; goto exit; - end; - end; -@z - -@x [3.37] l.1068 - |init_terminal|, output missing newline. - write(term_out,'! End of file on the terminal... why?'); -@y - write_ln(term_out,'! End of file on the terminal... why?'); -@z - -@x [4.38] l.1126 - Array size for string pool is determined at runtime. -@!pool_pointer = 0..pool_size; {for variables that point into |str_pool|} -@!str_number = 0..max_strings; {for variables that point into |str_start|} -@y -@!pool_pointer = integer; {for variables that point into |str_pool|} -@!str_number = 0..ssup_max_strings; {for variables that point into |str_start|} -@z - -@x [4.39] l.1131 - Dynamically size pool arrays. -@!str_pool:packed array[pool_pointer] of packed_ASCII_code; {the characters} -@!str_start_ar : array[str_number] of pool_pointer; {the starting pointers} -@y -@!str_pool: ^packed_ASCII_code; {the characters} -@!str_start_ar : ^pool_pointer; {the starting pointers} -@z - -@x [4.47] l.1237 - string recycling -@p @!init function get_strings_started:boolean; {initializes the string pool, -@y -@p @t\4@>@<Declare additional routines for string recycling@>@/ - -@!init function get_strings_started:boolean; {initializes the string pool, -@z - -@x -@ @d bad_pool(#)==begin wake_up_terminal; write_ln(term_out,#); - a_close(pool_file); get_strings_started:=false; return; - end -@<Read the other strings...@>= -name_of_file:=pool_name; {we needn't set |name_length|} -if a_open_in(pool_file) then - begin c:=false; - repeat @<Read one string, but return |false| if the - string memory space is getting too tight for comfort@>; - until c; - a_close(pool_file); get_strings_started:=true; - end -else bad_pool('! I can''t read OMEGA.POOL.') -@.I can't read OMEGA.POOL@> - -@ @<Read one string...@>= -begin if eof(pool_file) then bad_pool('! OMEGA.POOL has no check sum.'); -@.OMEGA.POOL has no check sum@> -read(pool_file,m,n); {read two digits of string length} -if m='*' then @<Check the pool check sum@> -else begin if (m<"0")or(m>"9")or@| - (n<"0")or(n>"9") then - bad_pool('! OMEGA.POOL line doesn''t begin with two digits.'); -@.OMEGA.POOL line doesn't...@> - l:=m*10+n-"0"*11; {compute the length} - if pool_ptr+l+string_vacancies>pool_size then - bad_pool('! You have to increase POOLSIZE.'); -@.You have to increase POOLSIZE@> - for k:=1 to l do - begin if eoln(pool_file) then m:=' '@+else read(pool_file,m); - append_char(m); - end; - read_ln(pool_file); g:=make_string; - end; -end - -@ The \.{WEB} operation \.{@@\$} denotes the value that should be at the -end of this \.{OMEGA.POOL} file; any other value means that the wrong pool -file has been loaded. -@^check sum@> - -@<Check the pool check sum@>= -begin a:=0; k:=1; -loop@+ begin if (n<"0")or(n>"9") then - bad_pool('! OMEGA.POOL check sum doesn''t have nine digits.'); -@.OMEGA.POOL check sum...@> - a:=10*a+n-"0"; - if k=9 then goto done; - incr(k); read(pool_file,n); - end; -done: if a<>@$ then bad_pool('! OMEGA.POOL doesn''t match; OTANGLE me again.'); -@.OMEGA.POOL doesn't match@> -c:=true; -end -@y -@ @<Read the other strings...@>= - g := loadpoolstrings((pool_size-string_vacancies)); - if g=0 then begin - wake_up_terminal; write_ln(term_out,'! You have to increase POOLSIZE.'); - get_strings_started:=false; - return; - end; - get_strings_started:=true; - -@ Empty module - -@ Empty module -@z - -@x [5.54] l.1422 - error_line -@!trick_buf:array[0..error_line] of ASCII_code; {circular buffer for -@y -@!trick_buf:array[0..ssup_error_line] of ASCII_code; {circular buffer for -@z - -@x [5.61] l.1556 - Print rest of banner, eliminate misleading `(no format preloaded)'. -wterm(banner); -if format_ident=0 then wterm_ln(' (no format preloaded)') -else begin slow_print(format_ident); print_ln; - end; -@y -wterm(banner); -wterm(version_string); -if format_ident>0 then slow_print(format_ident); -print_ln; -@z - -@x [6.73] l.1732 - Add unspecified_mode. -@d error_stop_mode=3 {stops at every opportunity to interact} -@y -@d error_stop_mode=3 {stops at every opportunity to interact} -@d unspecified_mode=4 {extra value for command-line switch} -@z - -@x [6.73] l.1738 - Add interaction_option. -@!interaction:batch_mode..error_stop_mode; {current level of interaction} -@y -@!interaction:batch_mode..error_stop_mode; {current level of interaction} -@!interaction_option:batch_mode..unspecified_mode; {set from command line} -@z - -@x [6.74] l.1740 - Allow override by command line switch. -@ @<Set init...@>=interaction:=error_stop_mode; -@y -@ @<Set init...@>=if interaction_option=unspecified_mode then - interaction:=error_stop_mode -else - interaction:=interaction_option; -@z - -% [6.81] Eliminate nonlocal goto, since C doesn't have them. -% Plus, it's nicer just to do an exit with the appropriate status code -% under Unix. We call it `uexit' because there's a WEB symbol called -% `exit' already. We use a C macro to change `uexit' back to `exit'. -@x [6.81] l.1852 - Eliminate nonlocal goto, since C doesn't have them. -@<Error hand...@>= -procedure jump_out; -begin goto end_of_TEX; -end; -@y -@d do_final_end==begin - update_terminal; - ready_already:=0; - if (history <> spotless) and (history <> warning_issued) then - uexit(1) - else - uexit(0); - end - -@<Error hand...@>= -procedure jump_out; -begin -close_files_and_terminate; -do_final_end; -end; -@z - -@x [6.84] l.1888 - Implement the switch-to-editor option. -line ready to be edited. But such an extension requires some system -wizardry, so the present implementation simply types out the name of the -file that should be -edited and the relevant line number. -@^system dependencies@> - -There is a secret `\.D' option available when the debugging routines haven't -been commented~out. -@^debugging@> -@y -line ready to be edited. -We do this by calling the external procedure |call_edit| with a pointer to -the filename, its length, and the line number. -However, here we just set up the variables that will be used as arguments, -since we don't want to do the switch-to-editor until after TeX has closed -its files. -@^system dependencies@> - -There is a secret `\.D' option available when the debugging routines haven't -been commented~out. -@^debugging@> -@d edit_file==input_stack[base_ptr] -@z - -@x [6.84] l.1903 - Implement the switch-to-editor option. -"E": if base_ptr>0 then - begin print_nl("You want to edit file "); -@.You want to edit file x@> - slow_print(input_stack[base_ptr].name_field); - print(" at line "); print_int(line); - interaction:=scroll_mode; jump_out; -@y -"E": if base_ptr>0 then - begin edit_name_start:=str_start(edit_file.name_field); - edit_name_length:=str_start(edit_file.name_field+1) - - str_start(edit_file.name_field); - edit_line:=line; - jump_out; -@z - -% [7.104] `remainder' is a library routine on some systems, so change -% its name to avoid conflicts. -@x [7.104] l.2227 - avoid name conflicts with lib routine remainder() -|remainder|, holds the remainder after a division. - -@<Glob...@>= -@y -|remainder|, holds the remainder after a division. - -@d remainder==tex_remainder - -@<Glob...@>= -@z - -@x [7.109] l.2352 - Define glue_ratio in C. -@!glue_ratio=real; {one-word representation of a glue expansion factor} -@y -@z - -@x [8.112] l.2435 - Efficiency. -macros are simplified in the obvious way when |min_quarterword=0|. -@^inner loop@>@^system dependencies@> - -@d qi(#)==#+min_quarterword - {to put an |eight_bits| item into a quarterword} -@d qo(#)==#-min_quarterword - {to take an |eight_bits| item out of a quarterword} -@d hi(#)==#+min_halfword - {to put a sixteen-bit item into a halfword} -@d ho(#)==#-min_halfword - {to take a sixteen-bit item from a halfword} -@y -macros are simplified in the obvious way when |min_quarterword=0|. -So they have been simplified here in the obvious way. -@^inner loop@>@^system dependencies@> - -@d qi(#)==# {to put an |eight_bits| item into a quarterword} -@d qo(#)==# {to take an |eight_bits| item from a quarterword} -@d hi(#)==# {to put a sixteen-bit item into a halfword} -@d ho(#)==# {to take a sixteen-bit item from a halfword} -@z - -% [8.113] We've put the memory structure into the include file -% `texmf.h', since it's too hard to translate automatically. -@x [8.113] l.2453 - data structures for main memory -@!quarterword = min_quarterword..max_quarterword; {1/4 of a word} -@!halfword=min_halfword..max_halfword; {1/2 of a word} -@!two_choices = 1..2; {used when there are two variants in a record} -@!four_choices = 1..4; {used when there are four variants in a record} -@!two_halves = packed record@;@/ - @!rh:halfword; - case two_choices of - 1: (@!lh:halfword); - 2: (@!b0:quarterword; @!b1:quarterword); - end; -@!four_quarters = packed record@;@/ - @!b0:quarterword; - @!b1:quarterword; - @!b2:quarterword; - @!b3:quarterword; - end; -@!memory_word = record@;@/ - case four_choices of - 1: (@!int:integer); - 2: (@!gr:glue_ratio); - 3: (@!hh:two_halves); - 4: (@!qqqq:four_quarters); - end; -@y -@!quarterword = min_quarterword..max_quarterword; -@!halfword = min_halfword..max_halfword; -@!two_choices = 1..2; {used when there are two variants in a record} -@!four_choices = 1..4; {used when there are four variants in a record} -@=#include "texmfmem.h";@> -@=#include "omegamem.h";@> -@z - -% [9.116] Change `mem' to `zmem', so we can define mem to be a register -% pointer to the memory array for speed. -@x [9.116] l.2545 - definition of main memory array -@!mem : array[mem_min..mem_max] of memory_word; {the big dynamic storage area} -@y -@!yzmem : ^memory_word; {the big dynamic storage area} -@!zmem : ^memory_word; {the big dynamic storage area} -@z - -% [9.127] Fix casting problem in C. -% There are several of these. They come from the rules C uses for -% comparing signed and unsigned quantities. Just doing the comparison -% can result in incorrect evaluation wrt the way Pascal would do it. -@x [9.127] l.2739 - Fix casting problem in C. -if r>p+1 then @<Allocate from the top of node |p| and |goto found|@>; -@y 2738 -if r>intcast(p+1) then @<Allocate from the top of node |p| and |goto found|@>; -@z - -% [11.165] Fix the word `free' so that it doesn't conflict with the -% standard C library routine of the same name. -@x [11.165] l.3364 - avoid conflict with lib function free() -are debugging.) -@y -are debugging.) - -@d free==free_arr -@z - -@x [11.165] l.3367 - dummy |free| and |was_free| arrays -@!debug @!free: packed array [mem_min..mem_max] of boolean; {free cells} -@t\hskip10pt@>@!was_free: packed array [mem_min..mem_max] of boolean; -@y - {The debug memory arrays have not been mallocated yet.} -@!debug @!free: packed array [0..9] of boolean; {free cells} -@t\hskip10pt@>@!was_free: packed array [0..9] of boolean; -@z - -@x [12.174] l.3526 - Eliminate unsigned comparisons to zero. - begin if (font(p)<font_base)or(font(p)>font_max) then - print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; -@y - begin @<Print the font identifier for |font(p)|@>; -@z - -@x [12.176] l.3563 - Eliminate unsigned comparisons to zero. -begin if p>mem_end then print_esc("CLOBBERED.") -else begin if (font(p)<font_base)or(font(p)>font_max) then print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; -@y -begin if p>mem_end then print_esc("CLOBBERED.") -else begin @<Print the font identifier for |font(p)|@>; -@z - -@x [12.186] l.3747 - Don't worry about strange floating point values. - if abs(mem[p+glue_offset].int)<@'4000000 then print("?.?") - else if abs(g)>float_constant(20000) then -@y 3747 - { The Unix |pc| folks removed this restriction with a remark that - invalid bit patterns were vanishingly improbable, so we follow - their example without really understanding it. - |if abs(mem[p+glue_offset].int)<@'4000000 then print('?.?')| - |else| } - if fabs(g)>float_constant(20000) then -@z - - -@x [16.213] l.4321 - texarray -@!nest:array[0..nest_size] of list_state_record; -@y -@!nest:^list_state_record; -@z - -@x [16.215] l.4344 - remove mem[] reference from initialize. -@<Start a new current page@>; -@y -@/{The following piece of code is a copy of module 991:} -page_contents:=empty; page_tail:=page_head; {|link(page_head):=null;|}@/ -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -page_depth:=0; page_max_depth:=0; -@z - -@x [17.241] l.5219 - Do `fix_date_and_time' in C. -@ The following procedure, which is called just before \TeX\ initializes its -input and output, establishes the initial values of the date and time. -@^system dependencies@> -Since standard \PASCAL\ cannot provide such information, something special -is needed. The program here simply specifies July 4, 1776, at noon; but -users probably want a better approximation to the truth. - -@p procedure fix_date_and_time; -begin time:=12*60; {minutes since midnight} -day:=4; {fourth day of the month} -month:=7; {seventh month of the year} -year:=1776; {Anno Domini} -end; -@y -@ The following procedure, which is called just before \TeX\ initializes its -input and output, establishes the initial values of the date and time. -It calls a macro-defined |date_and_time| routine. |date_and_time| -in turn is a C macro, which calls |get_date_and_time|, passing -it the addresses of the day, month, etc., so they can be set by the -routine. |get_date_and_time| also sets up interrupt catching if that -is conditionally compiled in the C code. -@^system dependencies@> - -@d fix_date_and_time==o_date_and_time(int_base+time_code, - int_base+day_code, - int_base+month_code, - int_base+year_code) -@z - -@x [18.262] l.5584 - Remove more unsigned comparisons to zero. -else if (newtext(p)<0)or(newtext(p)>=str_ptr) then print_esc("NONEXISTENT.") -@y -else if (newtext(p)>=str_ptr) then print_esc("NONEXISTENT.") -@z - -@x [19.271] l.5872 - texarray -@!save_stack : array[0..save_size] of memory_word; -@y -@!save_stack : ^memory_word; -@z - -@x [22.301] l.6432 - texarray -@!input_stack : array[0..stack_size] of in_state_record; -@y -@!input_stack : ^in_state_record; -@z - -@x [22.304] l.6536 - texarray -@!input_file : array[1..max_in_open] of alpha_file; -@!input_file_mode : array[1..max_in_open] of halfword; -@!input_file_translation : array[1..max_in_open] of halfword; -@!line : integer; {current line number in the current source file} -@!line_stack : array[1..max_in_open] of integer; -@!line_numbers : array[1..max_in_open] of integer; -@!file_names : array[1..max_in_open] of integer; -@y -@!input_file : ^alpha_file; -@!input_file_mode : ^halfword; -@!input_file_translation : ^halfword; -@!line : integer; {current line number in the current source file} -@!line_stack : ^integer; -@!line_numbers : ^integer; -@!file_names : ^integer; -@z - -@x [22.308] l.6701 - texarray -@!param_stack:array [0..param_size] of pointer; - {token list pointers for parameters} -@y -@!param_stack: ^pointer; - {token list pointers for parameters} -@z - -@x [23.328] l.7043 - keep top of source_filename_stack initialized -incr(in_open); push_input; index:=in_open; -@y -incr(in_open); push_input; index:=in_open; -source_filename_stack[index]:=0;full_source_filename_stack[index]:=0; -@z - -@x [23.331] l.7071 - init source file name stacks -begin input_ptr:=0; max_in_stack:=0; -@y -begin input_ptr:=0; max_in_stack:=0; -source_filename_stack[0]:=0;full_source_filename_stack[0]:=0; -@z - -@x [28.501] l.9747 - \eof18 -if_eof_code: begin scan_four_bit_int; b:=(read_open[cur_val]=closed); - end; -@y -if_eof_code: begin scan_four_bit_int_or_18; - if cur_val=18 then b:=not shellenabledp - else b:=(read_open[cur_val]=closed); - end; -@z - -@x [29.513] l.9951 - Area and extension rules for filenames. -@ The file names we shall deal with for illustrative purposes have the -following structure: If the name contains `\.>' or `\.:', the file area -consists of all characters up to and including the final such character; -otherwise the file area is null. If the remaining file name contains -`\..', the file extension consists of all such characters from the first -remaining `\..' to the end, otherwise the file extension is null. -@y -@ The file names we shall deal with have the -following structure: If the name contains `\./' or `\.:' -(for Amiga only), the file area -consists of all characters up to and including the final such character; -otherwise the file area is null. If the remaining file name contains -`\..', the file extension consists of all such characters from the last -`\..' to the end, otherwise the file extension is null. -@z - -@x [29.513] l.9963 - Area and extension rules for filenames. -@!area_delimiter:pool_pointer; {the most recent `\.>' or `\.:', if any} -@!ext_delimiter:pool_pointer; {the relevant `\..', if any} -@y -@!area_delimiter:pool_pointer; {the most recent `\./', if any} -@!ext_delimiter:pool_pointer; {the most recent `\..', if any} -@z - -@x [29.514] l.9973 - TeX area directories. -@d TEX_area=="TeXinputs:" -@.TeXinputs@> -@d TEX_font_area=="TeXfonts:" -@.TeXfonts@> -@y -In C, the default paths are specified separately. -@z - -@x [29.515] l.9995 - filenames: quoted -begin area_delimiter:=0; ext_delimiter:=0; -@y -begin area_delimiter:=0; ext_delimiter:=0; quoted_filename:=false; -@z - -@x [29.516] l.9992 - filenames: more_name -begin if c=" " then more_name:=false -@y -begin if (c=" ") and stop_at_space and (not quoted_filename) then - more_name:=false -else if c="""" then begin - quoted_filename:=not quoted_filename; - more_name:=true; - end -@z - -@x [29.516] l.9994 - filenames: more_name - if (c=">")or(c=":") then -@y - if IS_DIR_SEP(c) then -@z - -@x [29.516] l.9997 - filenames: more_name - else if (c=".")and(ext_delimiter=0) then ext_delimiter:=cur_length; -@y - else if c="." then ext_delimiter:=cur_length; -@z - -@x [29.517] l.10002 - end_name: string recycling -@ The third. -@^system dependencies@> - -@p procedure end_name; -@y -@ The third. -@^system dependencies@> -If a string is already in the string pool, the function -|slow_make_string| does not create a new string but returns this string -number, thus saving string space. Because of this new property of the -returned string number it is not possible to apply |flush_string| to -these strings. - -@p procedure end_name; -var temp_str: str_number; {result of file name cache lookups} -@!j,@!s,@!t: pool_pointer; {running indices} -@!must_quote:boolean; {whether we need to quote a string} -@z - -@x [29.517] l.10022 - end_name: spaces in filenames -@:TeX capacity exceeded number of strings}{\quad number of strings@> -@y -@:TeX capacity exceeded number of strings}{\quad number of strings@> -str_room(6); {Room for quotes, if needed.} -{add quotes if needed} -if area_delimiter<>0 then begin - {maybe quote |cur_area|} - must_quote:=false; - s:=str_start(str_ptr); - t:=str_start(str_ptr)+area_delimiter; - j:=s; - while (not must_quote) and (j<t) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; - if must_quote then begin - for j:=pool_ptr-1 downto t do str_pool[j+2]:=str_pool[j]; - str_pool[t+1]:=""""; - for j:=t-1 downto s do str_pool[j+1]:=str_pool[j]; - str_pool[s]:=""""; - if ext_delimiter<>0 then ext_delimiter:=ext_delimiter+2; - area_delimiter:=area_delimiter+2; - pool_ptr:=pool_ptr+2; - end; - end; -{maybe quote |cur_name|} -s:=str_start(str_ptr)+area_delimiter; -if ext_delimiter=0 then t:=pool_ptr else t:=str_start(str_ptr)+ext_delimiter-1; -must_quote:=false; -j:=s; -while (not must_quote) and (j<t) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; -if must_quote then begin - for j:=pool_ptr-1 downto t do str_pool[j+2]:=str_pool[j]; - str_pool[t+1]:=""""; - for j:=t-1 downto s do str_pool[j+1]:=str_pool[j]; - str_pool[s]:=""""; - if ext_delimiter<>0 then ext_delimiter:=ext_delimiter+2; - pool_ptr:=pool_ptr+2; - end; -if ext_delimiter<>0 then begin - {maybe quote |cur_ext|} - s:=str_start(str_ptr)+ext_delimiter-1; - t:=pool_ptr; - must_quote:=false; - j:=s; - while (not must_quote) and (j<t) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; - if must_quote then begin - str_pool[t+1]:=""""; - for j:=t-1 downto s do str_pool[j+1]:=str_pool[j]; - str_pool[s]:=""""; - pool_ptr:=pool_ptr+2; - end; - end; -@z - -@x [29.517] l.10011 - end_name: string recycling - str_start(str_ptr+1):=str_start(str_ptr)+area_delimiter; incr(str_ptr); - end; -if ext_delimiter=0 then - begin cur_ext:=""; cur_name:=make_string; -@y - str_start(str_ptr+1):=str_start(str_ptr)+area_delimiter; incr(str_ptr); - temp_str:=search_string(cur_area); - if temp_str>0 then - begin cur_area:=temp_str; - decr(str_ptr); {no |flush_string|, |pool_ptr| will be wrong!} - for j:=str_start(str_ptr+1) to pool_ptr-1 do - begin str_pool[j-area_delimiter]:=str_pool[j]; - end; - pool_ptr:=pool_ptr-area_delimiter; {update |pool_ptr|} - end; - end; -if ext_delimiter=0 then - begin cur_ext:=""; cur_name:=slow_make_string; -@z - -@x [29.517] l.10016 - end_name: string recycling -else begin cur_name:=str_ptr; - str_start(str_ptr+1):=str_start(str_ptr)+ext_delimiter-area_delimiter-1; - incr(str_ptr); cur_ext:=make_string; -@y -else begin cur_name:=str_ptr; - str_start(str_ptr+1):=str_start(str_ptr)+ext_delimiter-area_delimiter-1; - incr(str_ptr); cur_ext:=make_string; - decr(str_ptr); {undo extension string to look at name part} - temp_str:=search_string(cur_name); - if temp_str>0 then - begin cur_name:=temp_str; - decr(str_ptr); {no |flush_string|, |pool_ptr| will be wrong!} - for j:=str_start(str_ptr+1) to pool_ptr-1 do - begin str_pool[j-ext_delimiter+area_delimiter+1]:=str_pool[j]; - end; - pool_ptr:=pool_ptr-ext_delimiter+area_delimiter+1; {update |pool_ptr|} - end; - cur_ext:=slow_make_string; {remake extension string} -@z - -@x [29.518] l.10042 - print_file_name: quote if spaces in names. -begin slow_print(a); slow_print(n); slow_print(e); -@y -var must_quote: boolean; {whether to quote the filename} -@!j:pool_pointer; {index into |str_pool|} -begin -must_quote:=false; -if a<>0 then begin - j:=str_start(a); - while (not must_quote) and (j<str_start(a+1)) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; -end; -if n<>0 then begin - j:=str_start(n); - while (not must_quote) and (j<str_start(n+1)) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; -end; -if e<>0 then begin - j:=str_start(e); - while (not must_quote) and (j<str_start(e+1)) do begin - must_quote:=str_pool[j]=" "; incr(j); - end; -end; -{FIXME: Alternative is to assume that any filename that has to be quoted has - at least one quoted component...if we pick this, a number of insertions - of |print_file_name| should go away. -|must_quote|:=((|a|<>0)and(|str_pool|[|str_start|(|a|)]=""""))or - ((|n|<>0)and(|str_pool|[|str_start|(|n|)]=""""))or - ((|e|<>0)and(|str_pool|[|str_start|(|e|)]=""""));} -if must_quote then print_char(""""); -if a<>0 then - for j:=str_start(a) to str_start(a+1)-1 do - if so(str_pool[j])<>"""" then - print_char(so(str_pool[j])); -if n<>0 then - for j:=str_start(n) to str_start(n+1)-1 do - if so(str_pool[j])<>"""" then - print_char(so(str_pool[j])); -if e<>0 then - for j:=str_start(e) to str_start(e+1)-1 do - if so(str_pool[j])<>"""" then - print_char(so(str_pool[j])); -if must_quote then print_char(""""); -@z - -@x [29.519] l.10051 - have append_to_name skip quotes. -@d append_to_name(#)==begin c:=#; incr(k); - if k<=file_name_size then name_of_file[k]:=xchr[c]; - end -@y -@d append_to_name(#)==begin c:=#; if not (c="""") then begin incr(k); - if k<=file_name_size then name_of_file[k]:=xchr[c]; - end end -@z - -% [29.519] In pack_file_name, leave room for the extra null we append at -% the end of a filename. -@x [29.519] l.10047 - pack_file_name, leave room for the extra null -for j:=str_start(a) to str_start(a+1)-1 do append_to_name(so(str_pool[j])); -@y -if name_of_file then libc_free (name_of_file); -name_of_file:= xmalloc_array(char, 1 + length(a) + length(n) + length(e)); -for j:=str_start(a) to str_start(a+1)-1 do append_to_name(so(str_pool[j])); -@z - -@x [29.519] l.10051 - pack_file_name, append the extra null -for k:=name_length+1 to file_name_size do name_of_file[k]:=' '; -@y -name_of_file[name_length+1]:=0; -@z - -@x [29.520] l.10060 - filenames: default format. -@d format_default_length=20 {length of the |TEX_format_default| string} -@d format_area_length=11 {length of its area part} -@d format_ext_length=4 {length of its `\.{.fmt}' part} -@d format_extension=".fmt" {the extension, as a \.{WEB} constant} -@y -Under {\mc UNIX} we don't give the area part, instead depending -on the path searching that will happen during file opening. Also, the -length will be set in the main program. - -@d format_area_length=0 {length of its area part} -@d format_ext_length=4 {length of its `\.{.fmt}' part} -@d format_extension=".fmt" {the extension, as a \.{WEB} constant} -@z - -@x [29.521] l.10066 - filenames: default format, where `plain.fmt' is. -@!TEX_format_default:packed array[1..format_default_length] of char; - -@ @<Set init...@>= -TEX_format_default:='TeXformats:plain.fmt'; -@y -@!format_default_length: integer; -@!TEX_format_default: ^char; - -@ We set the name of the default format file and the length of that name -in C, instead of Pascal, since we want them to depend on the name of the -program. -@z - -@x [29.523] l.10095 - Change to pack_buffered_name as with pack_file_name. -for j:=1 to n do append_to_name(TEX_format_default[j]); -@y -if name_of_file then libc_free (name_of_file); -name_of_file := xmalloc_array (char, 1 + n + (b - a + 1) + format_ext_length); -for j:=1 to n do append_to_name(TEX_format_default[j]); -@z - -@x [29.523] l.10100 - Change to pack_buffered_name as with pack_file_name. -for k:=name_length+1 to file_name_size do name_of_file[k]:=' '; -@y -name_of_file[name_length+1]:=0; -@z - -@x [29.524] l.10118 - Format file opening: only try once, with path searching. - pack_buffered_name(0,loc,j-1); {try first without the system file area} - if w_open_in(fmt_file) then goto found; - pack_buffered_name(format_area_length,loc,j-1); - {now try the system format file area} - if w_open_in(fmt_file) then goto found; -@y - pack_buffered_name(0,loc,j-1); {Kpathsea does everything} - if w_open_in(fmt_file) then goto found; -@z - -@x [29.524] l.10124 - replace `PLAIN' in error messages with `default'. - wterm_ln('Sorry, I can''t find that format;',' will try PLAIN.'); -@y - wterm ('Sorry, I can''t find the format `'); - fputs (name_of_file + 1, stdout); - wterm ('''; will try `'); - fputs (TEX_format_default + 1, stdout); - wterm_ln ('''.'); -@z - -@x [29.524] l.10132 - replace `PLAIN' in error messages with `default'. - wterm_ln('I can''t find the PLAIN format file!'); -@.I can't find PLAIN...@> -@y - wterm ('I can''t find the format file `'); - fputs (TEX_format_default + 1, stdout); - wterm_ln ('''!'); -@.I can't find the format...@> -@z - -@x [29.525] l.10163 - make_name_string -@p function make_name_string:str_number; -var k:1..file_name_size; {index into |name_of_file|} -begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or - (cur_length>0) then - make_name_string:="?" -else begin for k:=1 to name_length do append_char(name_of_file[k]); - make_name_string:=make_string; - end; -@y -@p function make_name_string:str_number; -var k:1..file_name_size; {index into |name_of_file|} -save_area_delimiter, save_ext_delimiter: pool_pointer; -save_name_in_progress, save_stop_at_space: boolean; -begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or - (cur_length>0) then - make_name_string:="?" -else begin for k:=1 to name_length do append_char(name_of_file[k]); - make_name_string:=make_string; - {At this point we also set |cur_name|, |cur_ext|, and |cur_area| to - match the contents of |name_of_file|.} - save_area_delimiter:=area_delimiter; save_ext_delimiter:=ext_delimiter; - save_name_in_progress:=name_in_progress; save_stop_at_space:=stop_at_space; - name_in_progress:=true; - begin_name; - stop_at_space:=false; - k:=1; - while (k<=name_length)and(more_name(name_of_file[k])) do - incr(k); - stop_at_space:=save_stop_at_space; - end_name; - name_in_progress:=save_name_in_progress; - area_delimiter:=save_area_delimiter; ext_delimiter:=save_ext_delimiter; - end; -@z - -@x [29.526] l.10194 - stop scanning file name if we're at end-of-line. - if not more_name(cur_chr) then goto done; -@y - {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; -@z - -@x [29.530] l.10245 - prompt_file_name: prevent empty filenames. -var k:0..buf_size; {index into |buffer|} -@y -var k:0..buf_size; {index into |buffer|} -@!saved_cur_name:str_number; {to catch empty terminal input} -@!saved_cur_ext:str_number; {to catch empty terminal input} -@!saved_cur_area:str_number; {to catch empty terminal input} -@z - -@x [29.530] l.10252 - prompt_file_name: No default extension is TeX input file. -if e=".tex" then show_context; -@y -if (e=".tex") or (e="") then show_context; -print_ln; print("(Type <return> to retry, or <eof> to exit"); -if (e<>"") then - begin - print(" Default file extension is `"); print(e); print("'"); - end; -print(")"); print_ln; -@z - -@x [29.530] l.10258 - prompt_file_name: prevent empty filenames. -clear_terminal; prompt_input(": "); @<Scan file name in the buffer@>; -if cur_ext="" then cur_ext:=e; -@y -saved_cur_name:=cur_name; -saved_cur_ext:=cur_ext; -saved_cur_area:=cur_area; -clear_terminal; prompt_input(": "); @<Scan file name in the buffer@>; -if (length(cur_name)=0) and (cur_ext="") and (cur_area="") then - begin - cur_name:=saved_cur_name; - cur_ext:=saved_cur_ext; - cur_area:=saved_cur_area; - end -else - if cur_ext="" then cur_ext:=e; -@z - -@x [29.532] l.10263 - avoid conflict, `logname' in <unistd.h> on some systems. -@ Here's an example of how these conventions are used. Whenever it is time to -ship out a box of stuff, we shall use the macro |ensure_dvi_open|. - -@y -@ Here's an example of how these conventions are used. Whenever it is time to -ship out a box of stuff, we shall use the macro |ensure_dvi_open|. - -@d log_name == texmf_log_name -@z - -@x [29.534] l.10285 - Adjust for C string conventions. -@!months:packed array [1..36] of char; {abbreviations of month names} -@y -@!months:^char; -j:integer; -@z - -@x [29.534] l. - Send the job_name to the file recorder. -begin old_setting:=selector; -if job_name=0 then job_name:="texput"; -@y -begin old_setting:=selector; -if job_name=0 then job_name:=get_job_name("texput"); -pack_job_name(".ofl"); -recorder_change_filename(stringcast(name_of_file+1)); -@z - -@x [29.536] l.10324 - Print rest of banner. -begin wlog(banner); -@y -begin wlog(banner); -wlog(version_string); -@z - -@x [29.536] l.10327 - Adjust for C string conventions. -months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; -@y -months := ' JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; -@z - -% [29.537] Use a path when calling a_open_in to do a \input; also, try -% to open the file with and without the `.tex' extension, regardless of -% whether the file already has an extension. This allows filenames like -% `foo' and `foo.bar.tex', as well as `foo.tex' and `foo.bar'. -@x [29.537] l.10338 - start_input -begin scan_file_name; {set |cur_name| to desired file name} -if cur_ext="" then cur_ext:=".tex"; -pack_cur_name; -loop@+ begin begin_file_reading; {set up |cur_file| and new level of input} - if a_open_in(cur_file) then goto done; - if cur_area="" then - begin pack_file_name(cur_name,TEX_area,cur_ext); - if a_open_in(cur_file) then goto done; - end; -@y -var temp_str: str_number; -begin scan_file_name; {set |cur_name| to desired file name} -pack_cur_name; -loop@+begin - begin_file_reading; {set up |cur_file| and new level of input} - tex_input_type := 1; {Tell |open_input| we are \.{\\input}.} - {Kpathsea tries all the various ways to get the file.} - if open_in_name_ok(name_of_file+1) - and a_open_in(cur_file, kpse_tex_format) then - goto done; -@z - -@x [29.537] l.10348 - start_input: don't force ".tex" extension. - prompt_file_name("input file name",".tex"); -@y - prompt_file_name("input file name",""); -@z - -@x [29.537] l.10350 - start_input: string recycling -done: name:=a_make_name_string(cur_file); -@y -done: name:=a_make_name_string(cur_file); -if name=str_ptr-1 then {we can try to conserve string pool space now} - begin temp_str:=search_string(name); - if temp_str>0 then - begin name:=temp_str; flush_string; - end; - end; -@z - -@x [29.537] l.10352 - start_input: use different heuristic for initex. - begin job_name:=cur_name; open_log_file; -@y - begin job_name:=get_job_name(cur_name); open_log_file; -@z - -@x [29.537] l.10359 - start_input: don't return filename to string pool. -if name=str_ptr-1 then {we can conserve string pool space now} - begin flush_string; name:=cur_name; - end; -@y -@z - -@x [30.563] l.10943 - Don't use TEX_font_area. -if aire="" then pack_file_name(nom,TEX_font_area,".ofm") -else pack_file_name(nom,aire,".ofm"); -if not b_open_in(tfm_file) then abort; -@y -{|kpse_find_file| will append the |".ofm"| or |".tfm"|, - and avoid searching the disk before the font alias files as well.} -pack_file_name(nom,aire,""); -if not ofm_open_in(tfm_file) then abort; -@z - -% [30.564] Reading the tfm file. As a special case, whenever we open a -% tfm file, we read its first byte into `tfm_temp' right away. TeX -% looks at `fbyte' before calling `fget', so it ends up seeing every -% byte. This is Pascal-like I/O. -@x [30.564] l.10956 - reading the tfm file, define fget & fbyte -@d fget==get(tfm_file) -@d fbyte==tfm_file^ -@y -@d fget==tfm_temp:=getc(tfm_file) -@d fbyte==tfm_temp -@z - -% [32.575] We only want `eof' on the TFM file to be true if we -% previously had EOF, not if we're at EOF now. This is like `feof', and -% unlike our implementation of `eof' elsewhere. -@x [32.575] l.11161 - Reading the tfm file, replace eof() by feof(). -if eof(tfm_file) then abort; -@y -if feof(tfm_file) then abort; -@z - -@x [32.595] l.11860 - texarray -@!dvi_buf:array[dvi_index] of real_eight_bits; {buffer for \.{DVI} output} -@!half_buf:dvi_index; {half of |dvi_buf_size|} -@!dvi_limit:dvi_index; {end of the current half buffer} -@!dvi_ptr:dvi_index; {the next available buffer address} -@y -@!dvi_buf:^real_eight_bits; {buffer for \.{DVI} output} -@!half_buf:integer; {half of |dvi_buf_size|} -@!dvi_limit:integer; {end of the current half buffer} -@!dvi_ptr:integer; {the next available buffer address} -@z - -@x [32.597] l.11886 - write_dvi done in C. -@p procedure write_dvi(@!a,@!b:dvi_index); -var k:dvi_index; -begin for k:=a to b do write(dvi_file,dvi_buf[k]); -end; -@y -In C, we use a macro to call |fwrite| or |write| directly, writing all -the bytes in one shot. Much better even than writing four -bytes at a time. -@z - -@x [32.617] l.12261 - Use output_comment if the user set it. Assume it's short enough. - old_setting:=selector; selector:=new_string; -@y -if output_comment then - begin l:=strlen(output_comment); dvi_out(l); - for s:=0 to l-1 do dvi_out(output_comment[s]); - end -else begin {the default code is unchanged} - old_setting:=selector; selector:=new_string; -@z - -@x [32.617] l.12268 - Use output_comment if the user set it. - pool_ptr:=str_start(str_ptr); {flush the current string} -@y - pool_ptr:=str_start(str_ptr); {flush the current string} -end; -@z - -% We output each portion of the page as we get to it, if we are using -% IPC, so that the previewer (TeXView) can display it immediately. [SPM] -@x [32.640] l.12690 - IPC -dvi_out(eop); incr(total_pages); cur_s:=-1; -@y -dvi_out(eop); incr(total_pages); cur_s:=-1; -ifdef ('IPC') -if ipc_on>0 then - begin if dvi_limit=half_buf then - begin write_dvi(half_buf, dvi_buf_size-1); - flush_dvi; - dvi_gone:=dvi_gone+half_buf; - end; - if dvi_ptr>0 then - begin write_dvi(0, dvi_ptr-1); - flush_dvi; - dvi_offset:=dvi_offset+dvi_ptr; dvi_gone:=dvi_gone+dvi_ptr; - end; - dvi_ptr:=0; dvi_limit:=dvi_buf_size; - ipc_page(dvi_gone); - end; -endif ('IPC'); -@z - -@x [32.642] l.12742 - Use dvi_offset instead of dvi_buf_size with IPC stuff. - k:=4+((dvi_buf_size-dvi_ptr) mod 4); {the number of 223's} -@y -ifdef ('IPC') - k:=7-((3+dvi_offset+dvi_ptr) mod 4); {the number of 223's} -endif ('IPC') -ifndef ('IPC') - k:=4+((dvi_buf_size-dvi_ptr) mod 4); {the number of 223's} -endifn ('IPC') -@z - -@x [32.642] l.12773 - use print_file_name - print_nl("Output written on "); slow_print(output_file_name); -@y - print_nl("Output written on "); print_file_name(0, output_file_name, 0); -@z - -@x [38.859] l.16855 - Fix a casting/expression evaluation problem. -if abs(fit_class-fitness(r))>1 then d:=d+adj_demerits; -@y -if abs(intcast(fit_class)-intcast(fitness(r)))>1 then d:=d+adj_demerits; -@z - -@x [39.875] l.17170 - Another casting problem. - begin line_diff:=line_number(r)-best_line; -@y - begin line_diff:=intcast(line_number(r))-intcast(best_line); -@z - -@x [42.920] l.18068 - bigtrie: allow larger hyphenation tries. -@!trie_pointer=0..trie_size; {an index into |trie|} -@y -@!trie_pointer=0..ssup_trie_size; {an index into |trie|} -@z - -@x [42.921] l.18075 - bigtrie: allow larger hyphenation tries. -@!trie:array[trie_pointer] of two_halves; {|trie_link|, |trie_char|, |trie_op|} -@y -{We will dynamically allocate this arrays.} -@!trie:^two_halves; {|trie_link|} -@z - -%%%%%%%% dynamic hyph_size -@x 18126 m.925 -different from $\alpha$, we can conclude that $\alpha$ is not in the table. -@y 18126 -different from $\alpha$, we can conclude that $\alpha$ is not in the table. -This is a clever scheme which saves the need for a hash link array. -However, it is difficult to increase the size of the hyphen exception -arrays. To make this easier, the ordered hash has been replaced by -a simple hash, using an additional array |hyph_link|. The value -|0| in |hyph_link[k]| means that there are no more entries corresponding -to the specific hash chain. When |hyph_link[k]>0|, the next entry in -the hash chain is |hyph_link[k]-1|. This value is used because the -arrays start at |0|. -@z - -%%%%%%%% dynamic hyph_size -@x 18134 m.925 -@!hyph_pointer=0..hyph_size; {an index into the ordered hash table} -@y 18134 -@!hyph_pointer=0..ssup_hyph_size; {index into hyphen exceptions hash table; - enlarging this requires changing (un)dump code} -@z - -%%%%%%%% dynamic hyph_size -@x 18137 m.926 -@!hyph_word:array[hyph_pointer] of str_number; {exception words} -@!hyph_list:array[hyph_pointer] of pointer; {lists of hyphen positions} -@!hyph_count:hyph_pointer; {the number of words in the exception dictionary} -@y 18139 -@!hyph_word: ^str_number; {exception words} -@!hyph_list: ^pointer; {list of hyphen positions} -@!hyph_link: ^hyph_pointer; {link array for hyphen exceptions hash table} -@!hyph_count:integer; {the number of words in the exception dictionary} -@!hyph_next:integer; {next free slot in hyphen exceptions hash table} -@z - -%%%%%%%% dynamic hyph_size -@x 18145 m.928 -for z:=0 to hyph_size do - begin hyph_word[z]:=0; hyph_list[z]:=null; - end; -hyph_count:=0; -@y 18148 -for z:=0 to hyph_size do - begin hyph_word[z]:=0; hyph_list[z]:=null; hyph_link[z]:=0; - end; -hyph_count:=0; -hyph_next:=hyph_prime+1; if hyph_next>hyph_size then hyph_next:=hyph_prime; -@z - -%%%%%%%% dynamic hyph_size -@x 18163 m.930 -h:=hc[1]; incr(hn); hc[hn]:=cur_lang; -for j:=2 to hn do h:=(h+h+hc[j]) mod hyph_size; -loop@+ begin @<If the string |hyph_word[h]| is less than \(hc)|hc[1..hn]|, - |goto not_found|; but if the two strings are equal, - set |hyf| to the hyphen positions and |goto found|@>; - if h>0 then decr(h)@+else h:=hyph_size; - end; -not_found: decr(hn) -@y 18170 -h:=hc[1]; incr(hn); hc[hn]:=cur_lang; -for j:=2 to hn do h:=(h+h+hc[j]) mod hyph_prime; -loop@+ begin @<If the string |hyph_word[h]| is less than \(hc)|hc[1..hn]|, - |goto not_found|; but if the two strings are equal, - set |hyf| to the hyphen positions and |goto found|@>; - h:=hyph_link[h]; if h=0 then goto not_found; - decr(h); - end; -not_found: decr(hn) -@z - -%%%%%%%% dynamic hyph_size -@x 18172 m.931 -@ @<If the string |hyph_word[h]| is less than \(hc)...@>= -k:=hyph_word[h]; if k=0 then goto not_found; -if length(k)<hn then goto not_found; -if length(k)=hn then - begin j:=1; u:=str_start(k); - repeat if so(str_pool[u])<hc[j] then goto not_found; - if so(str_pool[u])>hc[j] then goto done; - incr(j); incr(u); - until j>hn; - @<Insert hyphens as specified in |hyph_list[h]|@>; - decr(hn); goto found; - end; -done: -@y 18184 -@ @<If the string |hyph_word[h]| is less than \(hc)...@>= -{This is now a simple hash list, not an ordered one, so -the module title is no longer descriptive.} -k:=hyph_word[h]; if k=0 then goto not_found; -if length(k)=hn then - begin j:=1; u:=str_start(k); - repeat - if so(str_pool[u])<>hc[j] then goto done; - incr(j); incr(u); - until j>hn; - @<Insert hyphens as specified in |hyph_list[h]|@>; - decr(hn); goto found; - end; -done: -@z - -% The GNU C compiler complains of unused variables. -@x -@!s,@!t:str_number; {strings being compared or stored} -@y -@!s:str_number; {strings being compared or stored} -@z - -%%%%%%%% dynamic hyph_size -@x 18274 m.939 - begin h:=(h+h+hc[j]) mod hyph_size; -@y 18274 - begin h:=(h+h+hc[j]) mod hyph_prime; -@z - -%%%%%%%% dynamic hyph_size -@x 18281 m.940 -@ @<Insert the \(p)pair |(s,p)|...@>= -if hyph_count=hyph_size then overflow("exception dictionary",hyph_size); -@:TeX capacity exceeded exception dictionary}{\quad exception dictionary@> -incr(hyph_count); -while hyph_word[h]<>0 do - begin @<If the string |hyph_word[h]| is less than \(or)or equal to - |s|, interchange |(hyph_word[h],hyph_list[h])| with |(s,p)|@>; - if h>0 then decr(h)@+else h:=hyph_size; - end; -hyph_word[h]:=s; hyph_list[h]:=p -@y 18290 -@ @<Insert the \(p)pair |(s,p)|...@>= - if hyph_next <= hyph_prime then - while (hyph_next>0) and (hyph_word[hyph_next-1]>0) do decr(hyph_next); -if (hyph_count=hyph_size)or(hyph_next=0) then - overflow("exception dictionary",hyph_size); -@:TeX capacity exceeded exception dictionary}{\quad exception dictionary@> -incr(hyph_count); -while hyph_word[h]<>0 do - begin @<If the string |hyph_word[h]| is less than \(or)or equal to - |s|, interchange |(hyph_word[h],hyph_list[h])| with |(s,p)|@>; - if hyph_link[h]=0 then - begin - hyph_link[h]:=hyph_next; - if hyph_next >= hyph_size then hyph_next:=hyph_prime; - if hyph_next > hyph_prime then incr(hyph_next); - end; - h:=hyph_link[h]-1; - end; - -found: hyph_word[h]:=s; hyph_list[h]:=p -@z - -%%%%%%%% dynamic hyph_size -@x 18292 m.941 -@ @<If the string |hyph_word[h]| is less than \(or)...@>= -k:=hyph_word[h]; -if length(k)<length(s) then goto found; -if length(k)>length(s) then goto not_found; -u:=str_start(k); v:=str_start(s); -repeat if str_pool[u]<str_pool[v] then goto found; -if str_pool[u]>str_pool[v] then goto not_found; -incr(u); incr(v); -until u=str_start(k+1); -found:q:=hyph_list[h]; hyph_list[h]:=p; p:=q;@/ -t:=hyph_word[h]; hyph_word[h]:=s; s:=t; -not_found: -@y 18303 -@ @<If the string |hyph_word[h]| is less than \(or)...@>= -{This is now a simple hash list, not an ordered one, so -the module title is no longer descriptive.} -k:=hyph_word[h]; -if length(k)<>length(s) then goto not_found; -u:=str_start(k); v:=str_start(s); -repeat if str_pool[u]<>str_pool[v] then goto not_found; -incr(u); incr(v); -until u=str_start(k+1); -{repeat hyphenation exception; flushing old data} -flush_string; s:=hyph_word[h]; {avoid |slow_make_string|!} -decr(hyph_count); -{ We could also |flush_list(hyph_list[h]);|, but it interferes - with \.{trip.log}. } -goto found; -not_found: -@z - -@x [43.943] l.18346 - web2c can't parse negative lower bounds in arrays. Sorry. -@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size; -@y -@!init@! trie_op_hash:array[neg_trie_op_size..trie_op_size] of 0..trie_op_size; -@z - -@x [43.944] l.18365 - web2c can't parse negative lower bounds in arrays. Sorry -var h:-trie_op_size..trie_op_size; {trial hash location} -@y -var h:neg_trie_op_size..trie_op_size; {trial hash location} -@z - -@x [43.944] l.18370 - Another casting problem, and use |neg_trie_op_size|. -begin h:=abs(n+313*d+361*v+1009*cur_lang) mod (trie_op_size+trie_op_size) - - trie_op_size; -@y -begin h:=abs(intcast(n)+313*intcast(d)+361*intcast(v)+1009*intcast(cur_lang)) - mod (trie_op_size - neg_trie_op_size) - + neg_trie_op_size; -@z - -@x [43.947] l.18438 - Dynamically allocate arrays, and a casting problem. -@!init @!trie_c:packed array[trie_pointer] of ASCII_code; - {characters to match} -@t\hskip10pt@>@!trie_o:packed array[trie_pointer] of quarterword; - {operations to perform} -@t\hskip10pt@>@!trie_l:packed array[trie_pointer] of trie_pointer; - {left subtrie links} -@t\hskip10pt@>@!trie_r:packed array[trie_pointer] of trie_pointer; - {right subtrie links} -@t\hskip10pt@>@!trie_ptr:trie_pointer; {the number of nodes in the trie} -@t\hskip10pt@>@!trie_hash:packed array[trie_pointer] of trie_pointer; - {used to identify equivalent subtries} -tini -@y -@!init @!trie_c:^ASCII_code; - {characters to match} -@t\hskip10pt@>@!trie_o:^quarterword; - {operations to perform} -@t\hskip10pt@>@!trie_l:^trie_pointer; - {left subtrie links} -@t\hskip10pt@>@!trie_r:^trie_pointer; - {right subtrie links} -@t\hskip10pt@>@!trie_ptr:trie_pointer; {the number of nodes in the trie} -@t\hskip10pt@>@!trie_hash:^trie_pointer; - {used to identify equivalent subtries} -tini -@z - -@x [43.948] l.18471 - Another casting problem. -begin h:=abs(trie_c[p]+1009*trie_o[p]+@| - 2718*trie_l[p]+3142*trie_r[p]) mod trie_size; -@y -begin h:=abs(intcast(trie_c[p])+1009*intcast(trie_o[p])+@| - 2718*intcast(trie_l[p])+3142*intcast(trie_r[p])) mod trie_size; -@z - -@x [43.590] l.18524 - Dynamically allocate & larger tries. -@!init@!trie_taken:packed array[1..trie_size] of boolean; - {does a family start here?} -@t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer; - {the first possible slot for each character} -@t\hskip10pt@>@!trie_max:trie_pointer; {largest location used in |trie|} -@t\hskip10pt@>@!trie_not_ready:boolean; {is the trie still in linked form?} -tini -@y -@!init@!trie_taken: ^boolean; - {does a family start here?} -@t\hskip10pt@>@!trie_min:^trie_pointer; - {the first possible slot for each character} -@t\hskip10pt@>@!trie_max:trie_pointer; {largest location used in |trie|} -@t\hskip10pt@>@!trie_not_ready:boolean; {is the trie still in linked form?} -tini -@z - -@x [43.951] l.18539 - Dynamically allocate. -trie_not_ready:=true; trie_root:=0; trie_c[0]:=si(0); trie_ptr:=0; -@y -trie_not_ready:=true; -@z - -%% -%% We can rewrite the original code after "main_loop_move+2" upto the -%% "tail_append(lig_stack)" in module 1036 as -%% -% -% main_loop_move+2: -% if font_bc[main_f]<=cur_chr then -% if cur_chr<=font_ec[main_f] then -% begin main_i:=char_info(main_f)(cur_l); -% if char_exists(main_i) goto main_loop_move+3; -% end; -% char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; -% main_loop_move+3: -% tail_append(lig_stack) {|main_loop_lookahead| is next} -% - -@x [49.1252] l.23230 - INI = VIR, so have to do runtime test. -hyph_data: if cur_chr=1 then - begin @!init new_patterns; goto done;@;@+tini@/ -@y 23215 -hyph_data: if cur_chr=1 then - begin @!init if ini_version then - begin new_patterns; goto done; end; @;@+tini@/ -@z - -@x -@!flushable_string:str_number; {string not yet referenced} -@y -@z - -% undo Knuth's change because -% a) the string is already replaced in |scan_file_name| and therefore -% b) the wrong string will get flushed!!! -% -@x [49.1260] l.23331 new_font: string recycling -- already done -flushable_string:=str_ptr-1; -@y -@z - -% If you don't want to remove code with the following two changes, -% please replace the former change by -% -% @x -% flushable_string:=str_ptr-1; -% @y -% if cur_name=str_ptr-1 then -% flushable_string:=str_ptr-1 -% else -% flushable_string:=str_ptr; {number of a non-existing} -% @z -% -% otherwise the wrong string will get removed by |flush_string|!! -% -@x [49.1260] l.23334 new_font: string recycling -- already done - begin if cur_name=flushable_string then - begin flush_string; cur_name:=font_name(f); - end; - if s>0 then -@y - begin if s>0 then -@z - -@x [49.1265] if batchmode, mktex... scripts should be silent. -interaction:=cur_chr; -@y -interaction:=cur_chr; -if interaction = batch_mode -then kpse_make_tex_discard_errors := 1 -else kpse_make_tex_discard_errors := 0; -@z - -@x [49.1275] l.23441 - Same stuff as for \input, this time for \openin. - if cur_ext="" then cur_ext:=".tex"; - pack_cur_name; - if a_open_in(read_file[n]) then read_open[n]:=just_open; -@y - pack_cur_name; - tex_input_type:=0; {Tell |open_input| we are \.{\\openin}.} - if open_in_name_ok(name_of_file+1) - and a_open_in(read_file[n], kpse_tex_format) then - read_open[n]:=just_open; -@z - -@x [50.1301] l.23679 - INI = VIR, so runtime test. -format_ident:=" (INIOMEGA)"; -@y -if ini_version then format_ident:=" (INIOMEGA)"; -@z - -% The GNU C compiler complains of unused variables. -@x [50.1302] l.23690 - Eliminate now-unused variable `w' in `store_fmt_file'. -var j,@!k,@!l:integer; {all-purpose indices} -@!p,@!q: pointer; {all-purpose pointers} -@!x: integer; {something to dump} -@!w: four_quarters; {four ASCII codes} -@y -var @!k:integer; {all-purpose indices} -@!p,@!q: pointer; {all-purpose pointers} -@!x: integer; {something to dump} -@!format_engine: ^char; -@z - -@x [50.1303] l.23722 - Ditto, for `load_fmt_file'. -@!w: four_quarters; {four ASCII codes} -@y -@!format_engine: ^char; -@z - -@x [50.1305] l.23751 - Do dumping and undumping of fmt files in C. -@d dump_wd(#)==begin fmt_file^:=#; put(fmt_file);@+end -@d dump_int(#)==begin fmt_file^.int:=#; put(fmt_file);@+end -@d dump_hh(#)==begin fmt_file^.hh:=#; put(fmt_file);@+end -@d dump_qqqq(#)==begin fmt_file^.qqqq:=#; put(fmt_file);@+end -@y -@z -@x [1306] -@d undump_wd(#)==begin get(fmt_file); #:=fmt_file^;@+end -@d undump_int(#)==begin get(fmt_file); #:=fmt_file^.int;@+end -@d undump_hh(#)==begin get(fmt_file); #:=fmt_file^.hh;@+end -@d undump_qqqq(#)==begin get(fmt_file); #:=fmt_file^.qqqq;@+end -@y -@z -@x [still 1306] debug format file -@d undump_size_end_end(#)==too_small(#)@+else undump_end_end -@y -@d format_debug_end(#)== - write_ln (stderr, ' = ', #); - end; -@d format_debug(#)== - if debug_format_file then begin - write (stderr, 'fmtdebug:', #); - format_debug_end -@d undump_size_end_end(#)== - too_small(#)@+else format_debug (#)(x); undump_end_end -@z - -@x [50,1307] l.23779 - texarray -dump_int(@$);@/ -@y -dump_int(@"57325458); {Web2C \TeX's magic constant: "W2TX"} -{Align engine to 4 bytes with one or more trailing NUL} -x:=strlen(engine_name); -format_engine:=xmalloc_array(char,x+4); -strcpy(format_engine, engine_name); -for k:=x to x+3 do format_engine[k]:=0; -x:=x+4-(x mod 4); -dump_int(x);dump_things(format_engine[0], x); -libc_free(format_engine);@/ -dump_int(@$);@/ -dump_int(max_halfword);@/ -@z - -%%%%%%%% dynamic hyph_size -@x 23784 m.1307 -dump_int(hyph_size) -@y 23784 -dump_int(hyph_prime) -@z - -@x [50.1308] l.23793 - texarray -x:=fmt_file^.int; -if x<>@$ then goto bad_fmt; {check that strings are the same} -undump_int(x); -if x<>mem_bot then goto bad_fmt; -undump_int(x); -if x<>mem_top then goto bad_fmt; -@y -@+init -if ini_version then - begin libc_free(str_pool); libc_free(str_start_ar); libc_free(yzmem); - end; -@+tini -undump_int(x); -format_debug('format magic number')(x); -if x<>@"57325458 then goto bad_fmt; {not a format file} -undump_int(x); -format_debug('engine name size')(x); -if (x<0) or (x>256) then goto bad_fmt; {corrupted format file} -format_engine:=xmalloc_array(char, x); -undump_things(format_engine[0], x); -format_engine[x-1]:=0; {force string termination, just in case} -if strcmp(engine_name, format_engine) then - begin wake_up_terminal; - wterm_ln('---! ', stringcast(name_of_file+1), ' was written by ', format_engine); - libc_free(format_engine); - goto bad_fmt; -end; -libc_free(format_engine); -undump_int(x); -format_debug('string pool checksum')(x); -if x<>@$ then begin {check that strings are the same} - wake_up_terminal; - wterm_ln('---! ', stringcast(name_of_file+1), ' doesn''t match ', pool_name); - goto bad_fmt; -end; -undump_int(x); -if x<>max_halfword then goto bad_fmt; {check |max_halfword|} - -undump_int(x); format_debug ('mem_bot')(x); -if x<>mem_bot then goto bad_fmt; -undump_int(mem_top); format_debug ('mem_top')(mem_top); -if mem_bot+1100>mem_top then goto bad_fmt; - - -head:=contrib_head; tail:=contrib_head; - page_tail:=page_head; {page initialization} - -mem_min := mem_bot - extra_mem_bot; -mem_max := mem_top + extra_mem_top; - -yzmem:=xmalloc_array (memory_word, mem_max - mem_min + 1); -zmem := yzmem - mem_min; {this pointer arithmetic fails with some compilers} -mem := zmem; -@z - -%%%%%%%% dynamic hyph_size -@x 23804 m.1308 -if x<>hyph_size then goto bad_fmt -@y 23804 -if x<>hyph_prime then goto bad_fmt -@z - -% [1309] Make dumping/undumping more efficient by doing whole arrays at -% a time, via fread/fwrite in texmfmp.c. -@x [50.1309] l.23814 - Make dumping/undumping more efficient. -for k:=too_big_char to str_ptr do dump_int(str_start(k)); -k:=0; -while k+4<pool_ptr do - begin dump_four_ASCII; k:=k+4; - end; -k:=pool_ptr-4; dump_four_ASCII; -@y -dump_things(str_start(too_big_char), str_ptr-too_big_char+1); -dump_things(str_pool[0], pool_ptr); -@z - -@x [50.1310] l.23829 - Make dumping/undumping more efficient. -undump_size(0)(pool_size)('string pool size')(pool_ptr); -undump_size(0)(max_strings)('max strings')(str_ptr); -for k:=too_big_char to str_ptr do undump(0)(pool_ptr)(str_start(k)); -k:=0; -while k+4<pool_ptr do - begin undump_four_ASCII; k:=k+4; - end; -k:=pool_ptr-4; undump_four_ASCII; -@y -undump_size(0)(sup_pool_size-pool_free)('string pool size')(pool_ptr); -if pool_size<pool_ptr+pool_free then - pool_size:=pool_ptr+pool_free; -undump_size(0)(sup_max_strings-strings_free)('sup strings')(str_ptr);@/ -if max_strings<str_ptr+strings_free then - max_strings:=str_ptr+strings_free; -str_start_ar:=xmalloc_array(pool_pointer, max_strings-biggest_char); -undump_things(str_start(too_big_char), str_ptr-too_big_char+1); -str_pool:=xmalloc_array(packed_ASCII_code, pool_size); -undump_things(str_pool[0], pool_ptr); -@z - -@x [50.1311] l.23850 - Make dumping/undumping more efficient. -repeat for k:=p to q+1 do dump_wd(mem[k]); -@y -repeat dump_things(mem[p], q+2-p); -@z - -@x [50.1311] l.23855 - Make dumping/undumping more efficient. -for k:=p to lo_mem_max do dump_wd(mem[k]); -@y -dump_things(mem[p], lo_mem_max+1-p); -@z - -@x [50.1311] l.23858 - Make dumping/undumping more efficient. -for k:=hi_mem_min to mem_end do dump_wd(mem[k]); -@y -dump_things(mem[hi_mem_min], mem_end+1-hi_mem_min); -@z - -@x [50.1312] l.23873 - Make dumping/undumping more efficient. -repeat for k:=p to q+1 do undump_wd(mem[k]); -@y -repeat undump_things(mem[p], q+2-p); -@z - -@x [50.1312] l.23878 - Make dumping/undumping more efficient. -for k:=p to lo_mem_max do undump_wd(mem[k]); -@y -undump_things(mem[p], lo_mem_max+1-p); -@z - -@x [50.1312] l.23888 - Make dumping/undumping more efficient. -for k:=hi_mem_min to mem_end do undump_wd(mem[k]); -@y -undump_things (mem[hi_mem_min], mem_end+1-hi_mem_min); -@z - -%%%%%%%% dynamic hyph_size -@x 24058 m.1324 -dump_int(hyph_count); -for k:=0 to hyph_size do if hyph_word[k]<>0 then - begin dump_int(k); dump_int(hyph_word[k]); dump_int(hyph_list[k]); - end; -@y 24061 -dump_int(hyph_count); -if hyph_next <= hyph_prime then hyph_next:=hyph_size; -dump_int(hyph_next);{minumum value of |hyphen_size| needed} -for k:=0 to hyph_size do if hyph_word[k]<>0 then - begin dump_int(k+65536*hyph_link[k]); - {assumes number of hyphen exceptions does not exceed 65535} - dump_int(hyph_word[k]); dump_int(hyph_list[k]); - end; -@z - -@x [50.1324] l.24066 - Make dumping/undumping more efficient - trie -for k:=0 to trie_max do dump_hh(trie[k]); -dump_int(max_hyph_char); -dump_int(trie_op_ptr); -for k:=1 to trie_op_ptr do - begin dump_int(hyf_distance[k]); - dump_int(hyf_num[k]); - dump_int(hyf_next[k]); - end; -@y -dump_things(trie[0],trie_max+1); -dump_int(max_hyph_char); -dump_int(trie_op_ptr); -dump_things(hyf_distance[1], trie_op_ptr); -dump_things(hyf_num[1], trie_op_ptr); -dump_things(hyf_next[1], trie_op_ptr); -@z - -@x [50.1325] l.24086 - Make dumping/undumping more efficient - trie -@<Undump the hyphenation tables@>= -@y -{This is only used for the hyphenation tries below, and the size is - always |j+1|.} -@d xmalloc_and_undump(#) == - if not # then #:=xmalloc_array(two_halves, j+1); - undump_things(#[0], j+1); - -@<Undump the hyphenation tables@>= -@z - -%%%%%%%% dynamic hyph_size -@x 24087 m.1325 -undump(0)(hyph_size)(hyph_count); -for k:=1 to hyph_count do - begin undump(0)(hyph_size)(j); - undump(0)(str_ptr)(hyph_word[j]); - undump(min_halfword)(max_halfword)(hyph_list[j]); - end; -@y 24092 -undump_size(0)(hyph_size)('hyph_size')(hyph_count); -undump_size(hyph_prime)(hyph_size)('hyph_size')(hyph_next); -j:=0; -for k:=1 to hyph_count do - begin undump_int(j); if j<0 then goto bad_fmt; - if j>65535 then - begin hyph_next:= j div 65536; j:=j - hyph_next * 65536; end - else hyph_next:=0; - if (j>=hyph_size)or(hyph_next>hyph_size) then goto bad_fmt; - hyph_link[j]:=hyph_next; - undump(0)(str_ptr)(hyph_word[j]); - undump(min_halfword)(max_halfword)(hyph_list[j]); - end; - {|j| is now the largest occupied location in |hyph_word|} - incr(j); - if j<hyph_prime then j:=hyph_prime; - hyph_next:=j; - if hyph_next >= hyph_size then hyph_next:=hyph_prime else - if hyph_next >= hyph_prime then incr(hyph_next); -@z - - -@x [50.1325] l.24094 - Make dumping/undumping more efficient - trie -for k:=0 to j do undump_hh(trie[k]); -undump_int(max_hyph_char); -undump_size(0)(trie_op_size)('trie op size')(j); @+init trie_op_ptr:=j;@+tini -for k:=1 to j do - begin undump(0)(63)(hyf_distance[k]); {a |small_number|} - undump(0)(63)(hyf_num[k]); - undump(min_quarterword)(max_quarterword)(hyf_next[k]); - end; -@y -{The first array has not been allocated yet unless we're \.{INITEX}; - we do that precisely so we don't allocate more space than necessary.} -xmalloc_and_undump(trie); -undump_int(max_hyph_char); -undump_size(0)(trie_op_size)('trie op size')(j); @+init trie_op_ptr:=j;@+tini -{I'm not sure we have such a strict limitation (64) on these values, so - let's leave them unchecked.} -undump_things(hyf_distance[1], j); -undump_things(hyf_num[1], j); -undump_upper_check_things(max_quarterword, hyf_next[1], j); -@z - -@x [50.1327] l.24117 - Allow command line to override dumped value. -undump(batch_mode)(error_stop_mode)(interaction); -@y -undump(batch_mode)(error_stop_mode)(interaction); -if interaction_option<>unspecified_mode then interaction:=interaction_option; -@z - -% [50.1327] As with TFM files, `eof' here means `have we previously -% encountered the end-of-file', not `are we at the end of the file'. -@x [50.1327] l.24120 - dumping/undumping, replace eof() by feof() -if (x<>69069)or eof(fmt_file) then goto bad_fmt -@y -if (x<>69069)or feof(fmt_file) then goto bad_fmt -@z - -@x [50.1328] l.24124 - Eliminate probably wrong word `preloaded' from format_idents. -print(" (preloaded format="); print(job_name); print_char(" "); -@y -print(" (format="); print(job_name); print_char(" "); -@z - -@x [51.1332] l.24203 - make the main program a procedure, for eqtb hack. -@p begin @!{|start_here|} -@y -@d const_chk(#)==begin if # < inf@&# then # := inf@&# else - if # > sup@&# then # := sup@&# end - -{|setup_bound_var| stuff duplicated in \.{mf.ch}.} -@d setup_bound_var(#)==bound_default:=#; setup_bound_var_end -@d setup_bound_var_end(#)==bound_name:=#; setup_bound_var_end_end -@d setup_bound_var_end_end(#)== - setup_bound_variable(addressof(#), bound_name, bound_default); - -@p procedure main_body; -begin @!{|start_here|} - -{Always start the file recorder?} - {recorder_enabled:=true;} - -{Bounds that may be set from the configuration file. We want the user to - be able to specify the names with underscores, but \.{TANGLE} removes - underscores, so we're stuck giving the names twice, once as a string, - once as the identifier. How ugly.} - setup_bound_var (1000000)('main_memory')(main_memory); - {|memory_word|s for |mem| in \.{INITEX}} - setup_bound_var (0)('extra_mem_top')(extra_mem_top); - {increase high mem in \.{VIRTEX}} - setup_bound_var (0)('extra_mem_bot')(extra_mem_bot); - {increase low mem in \.{VIRTEX}} - setup_bound_var (300000)('pool_size')(pool_size); - setup_bound_var (200000)('string_vacancies')(string_vacancies); - setup_bound_var (5000)('pool_free')(pool_free); {min pool avail after fmt} - setup_bound_var (100000)('max_strings')(max_strings); - setup_bound_var (100)('strings_free')(strings_free); - setup_bound_var (20000)('trie_size')(trie_size); - {if |ssup_trie_size| increases, recompile} - setup_bound_var (659)('hyph_size')(hyph_size); - setup_bound_var (20000)('buf_size')(buf_size); - setup_bound_var (50)('nest_size')(nest_size); - setup_bound_var (15)('max_in_open')(max_in_open); - setup_bound_var (60)('param_size')(param_size); - setup_bound_var (4000)('save_size')(save_size); - setup_bound_var (300)('stack_size')(stack_size); - setup_bound_var (16384)('dvi_buf_size')(dvi_buf_size); - setup_bound_var (79)('error_line')(error_line); - setup_bound_var (50)('half_error_line')(half_error_line); - setup_bound_var (79)('max_print_line')(max_print_line); - const_chk (main_memory); -@+init - if ini_version then begin - extra_mem_top := 0; - extra_mem_bot := 0; - end; -@+tini - if extra_mem_bot>sup_main_memory then extra_mem_bot:=sup_main_memory; - if extra_mem_top>sup_main_memory then extra_mem_top:=sup_main_memory; - {|mem_top| is an index, |main_memory| a size} - mem_top := mem_bot + main_memory -1; - mem_min := mem_bot; - mem_max := mem_top; - - {Check other constants against their sup and inf.} - const_chk (trie_size); - const_chk (hyph_size); - const_chk (buf_size); - const_chk (nest_size); - const_chk (max_in_open); - const_chk (param_size); - const_chk (save_size); - const_chk (stack_size); - const_chk (dvi_buf_size); - const_chk (pool_size); - const_chk (string_vacancies); - const_chk (pool_free); - const_chk (max_strings); - const_chk (strings_free); - if error_line > ssup_error_line then error_line := ssup_error_line; - - {array memory allocation} - buffer:=xmalloc_array (ASCII_code, buf_size); - nest:=xmalloc_array (list_state_record, nest_size); - save_stack:=xmalloc_array (memory_word, save_size); - input_stack:=xmalloc_array (in_state_record, stack_size); - input_file:=xmalloc_array (alpha_file, max_in_open); - input_file_mode:=xmalloc_array (halfword, max_in_open); - input_file_translation:=xmalloc_array (halfword, max_in_open); - line_stack:=xmalloc_array (integer, max_in_open); - line_numbers:=xmalloc_array (integer, max_in_open); - file_names:=xmalloc_array (integer, max_in_open); - param_stack:=xmalloc_array (halfword, param_size); - dvi_buf:=xmalloc_array (real_eight_bits, dvi_buf_size); - hyph_word:=xmalloc_array (str_number, hyph_size); - hyph_list:=xmalloc_array (halfword, hyph_size); - hyph_link:=xmalloc_array (hyph_pointer, hyph_size); -@+init -if ini_version then begin - yzmem:=xmalloc_array (memory_word, mem_top - mem_bot + 1); - zmem := yzmem - mem_bot; {Some compilers require |mem_bot=0|} - - str_start_ar:=xmalloc_array (pool_pointer, max_strings-biggest_char); - str_pool:=xmalloc_array (packed_ASCII_code, pool_size); -end; -@+tini -@z - -@x [51.1332] l.24215 - INI = VIR, so pool init needs runtime test -@!init if not get_strings_started then goto final_end; -init_prim; {call |primitive| for each primitive} -init_str_ptr:=str_ptr; init_pool_ptr:=pool_ptr; fix_date_and_time; -tini@/ -@y -@+init if ini_version then - begin if not get_strings_started then goto final_end; - init_prim; {call |primitive| for each primitive} - init_str_ptr:=str_ptr; init_pool_ptr:=pool_ptr; fix_date_and_time; - end; -@+tini@/ -@z - -@x [51.1332] l.24225 - main -end_of_TEX: close_files_and_terminate; -final_end: ready_already:=0; -end. -@y -close_files_and_terminate; -final_end: do_final_end; -end {|main_body|}; -@z - -@x [51.1333] l.24254 - Print new line before termination; switch to editor if necessary. - slow_print(log_name); print_char("."); - end; - end; -@y - print_file_name(0, log_name, 0); print_char("."); - end; - end; -print_ln; -if (edit_name_start<>0) and (interaction>batch_mode) then - call_edit(str_pool,edit_name_start,edit_name_length,edit_line); -@z - -@x [51.1334] l. - Remove reference to fontmemsize - wlog_ln(', out of ',font_mem_size:1,' for ',font_max-font_base:1);@/ -@y -@z - -@x [51.1335] l.24335 - Only do dump if ini. - begin @!init for c:=top_mark_code to split_bot_mark_code do - if cur_mark[c]<>null then delete_token_ref(cur_mark[c]); - if last_glue<>max_halfword then delete_glue_ref(last_glue); - store_fmt_file; return;@+tini@/ -@y - begin @!init if ini_version then - begin for c:=top_mark_code to split_bot_mark_code do - if cur_mark[c]<>null then delete_token_ref(cur_mark[c]); - store_fmt_file; return; - end;@+tini@/ -@z - -@x [51.1337] l.24361 - Handle %&format in all cases. -if (format_ident=0)or(buffer[loc]="&") then -@y -if (format_ident=0)or(buffer[loc]="&")or dump_line then -@z - -@x [51.1337] l.24371 - Allocate hyphenation tries. -fix_date_and_time;@/ -@y -fix_date_and_time;@/ - -@!init -if trie_not_ready then begin {initex without format loaded} - trie:=xmalloc_array (two_halves, trie_size); - - trie_c:=xmalloc_array (ASCII_code, trie_size); - trie_o:=xmalloc_array (quarterword, trie_size); - trie_l:=xmalloc_array (trie_pointer, trie_size); - trie_r:=xmalloc_array (trie_pointer, trie_size); - trie_hash:=xmalloc_array (trie_pointer, trie_size); - trie_taken:=xmalloc_array (boolean, trie_size); - trie_min:=xmalloc_array (trie_pointer, too_big_char); - - trie_root:=0; trie_c[0]:=si(0); trie_ptr:=0; - end; - tini@/ - -@z - -% [52.1338] Core-dump in debugging mode on 0 input. Under Unix, it's -% not possible to portably switch into the debugger while a program is -% running. The best approximation is to do a core dump, then run the -% debugger on it later. -@x [52.1338] l.24411 - Core-dump in debugging mode on 0 input. - begin goto breakpoint;@\ {go to every label at least once} - breakpoint: m:=0; @{'BREAKPOINT'@}@\ - end -@y - dump_core {do something to cause a core dump} -@z - -% The GNU C compiler complains of unused variables. -@x -procedure do_extension; -var i,@!j,@!k:integer; {all-purpose integers} -@!p,@!q,@!r:pointer; {all-purpose pointers} -@y -procedure do_extension; -var @!k:integer; {all-purpose integers} -@!p:pointer; {all-purpose pointers} -@z - -% [53.1350] (new_write_whatsit) Allow 18 as a \write stream. We never -% refer to an actual file, though, so we don't need to change the -% write_file or write_open arrays. We provide for disabling this at -% runtime, for paranoids. -@x [53.1350] l.24609 - system: Allow 18 as a \write stream. - else if cur_val>15 then cur_val:=16; -@y - else if (cur_val>15) and (cur_val <> 18) then cur_val:=16; -@z - -@x [53.1370] l.24770 - system: (write_out) \write18{foo} => system(foo). -begin @<Expand macros in the token list -@y -@!d:integer; {number of characters in incomplete current string} -@!clobbered:boolean; {system string is ok?} -@!runsystem_ret:integer; {return value from |runsystem|} -begin @<Expand macros in the token list -@z - -@x [53.1370] l.24773 - system: (write_out) \write18{foo} => system(foo). -if write_open[j] then selector:=j -@y -if j=18 then selector := new_string -else if write_open[j] then selector:=j -@z - -% Then call system(3) on that string. -@x [53.1370] l.24779 - system: (write_out) \write18{foo} => system(foo). -flush_list(def_ref); selector:=old_setting; -@y -flush_list(def_ref); -if j=18 then - begin if (tracing_online<=0) then - selector:=log_only {Show what we're doing in the log file.} - else selector:=term_and_log; {Show what we're doing.} - {If the log file isn't open yet, we can only send output to the terminal. - Calling |open_log_file| from here seems to result in bad data in the log.} - if not log_opened then selector:=term_only; - print_nl("runsystem("); - for d:=0 to cur_length-1 do - begin {|print| gives up if passed |str_ptr|, so do it by hand.} - print(so(str_pool[str_start(str_ptr)+d])); {N.B.: not |print_char|} - end; - print(")..."); - if shellenabledp then - begin str_room(1); append_char(0); {Append a null byte to the expansion.} - clobbered:=false; - for d:=0 to cur_length-1 do {Convert to external character set.} - begin - str_pool[str_start(str_ptr)+d]:=xchr[str_pool[str_start(str_ptr)+d]]; - if (str_pool[str_start(str_ptr)+d]=null_code) - and (d<cur_length-1) then clobbered:=true; - {minimal checking: NUL not allowed in argument string of |system|()} - end; - if clobbered then print("clobbered") - else begin {We have the command. See if we're allowed to execute it, - and report in the log. We don't check the actual exit status of - the command, or do anything with the output.} - for d:=0 to cur_length-1 do {Convert to external character set.} - begin - outside_string_array[d]:=xchr[str_pool[str_start(str_ptr)+d]]; - end; - outside_string_array[cur_length]:=null_code; - runsystem_ret := runsystem(stringcast(outside_string_array)); - if runsystem_ret = -1 then print("quotation error in system command") - else if runsystem_ret = 0 then print("disabled (restricted)") - else if runsystem_ret = 1 then print("executed") - else if runsystem_ret = 2 then print("executed (allowed)") - end; - end else begin - print("disabled"); {|shellenabledp| false} - end; - print_char("."); print_nl(""); print_ln; - pool_ptr:=str_start(str_ptr); {erase the string} -end; -selector:=old_setting; -@z - -@x [53.1373] Need new local. -procedure out_what(@!p:pointer); -var j:small_number; {write stream number} -@y -procedure out_what(@!p:pointer); -var j:small_number; {write stream number} - @!old_setting:0..max_selector; -@z - -@x [53.1374] Disallow certain \openout filenames, and log results. - while not a_open_out(write_file[j]) do - prompt_file_name("output file name",".tex"); - write_open[j]:=true; -@y - while not a_open_out(write_file[j]) - or not open_out_name_ok(name_of_file+1) do - prompt_file_name("output file name",".tex"); - write_open[j]:=true; - {If on first line of input, log file is not ready yet, so don't log.} - if log_opened then begin - old_setting:=selector; - if (tracing_online<=0) then - selector:=log_only {Show what we're doing in the log file.} - else selector:=term_and_log; {Show what we're doing.} - print_nl("\openout"); - print_int(j); - print(" = `"); - print_file_name(cur_name,cur_area,cur_ext); - print("'."); print_nl(""); print_ln; - selector:=old_setting; - end; -@z - -@x [54.1376] l.24903 - Add editor-switch variables to globals. -@* \[54] System-dependent changes. -@y -@* \[54/web2c] System-dependent changes for Web2c. -Here are extra variables for Web2c. (This numbering of the -system-dependent section allows easy integration of Web2c and e-\TeX, etc.) -@^<system dependencies@> - -@<Glob...@>= -@!edit_name_start: pool_pointer; {where the filename to switch to starts} -@!edit_name_length,@!edit_line: integer; {what line to start editing at} -@!ipc_on: cinttype; {level of IPC action, 0 for none [default]} -@!stop_at_space: boolean; {whether |more_name| returns false for space} - -@ The |edit_name_start| will be set to point into |str_pool| somewhere after -its beginning if \TeX\ is supposed to switch to an editor on exit. - -@<Set init...@>= -edit_name_start:=0; -stop_at_space:=true; - -@ These are used when we regenerate the representation of the first 256 -strings. - -@<Global...@> = -@!save_str_ptr: str_number; -@!save_pool_ptr: pool_pointer; -@!shellenabledp: cinttype; -@!restrictedshell: cinttype; -@!output_comment: ^char; -@!k,l: 0..65535; {used by `Make the first 256 strings', etc.} - -@ When debugging a macro package, it can be useful to see the exact -control sequence names in the format file. For example, if ten new -csnames appear, it's nice to know what they are, to help pinpoint where -they came from. (This isn't a truly ``basic'' printing procedure, but -that's a convenient module in which to put it.) - -@<Basic printing procedures@> = -procedure print_csnames (hstart:integer; hfinish:integer); -var c,h:integer; -begin - write_ln(stderr, 'fmtdebug:csnames from ', hstart, ' to ', hfinish, ':'); - for h := hstart to hfinish do begin - if newtext(h) > 0 then begin {if have anything at this position} - for c := str_start(newtext(h)) to str_start(newtext(h) + 1) - 1 - do begin - put_byte(str_pool[c], stderr); {print the characters} - end; - write_ln(stderr, '|'); - end; - end; -end; - -@ Are we printing extra info as we read the format file? - -@<Glob...@> = -@!debug_format_file: boolean; - - -@ A helper for printing file:line:error style messages. Look for a -filename in |full_source_filename_stack|, and if we fail to find -one fall back on the non-file:line:error style. - -@<Basic print...@>= -procedure print_file_line; -var level: 0..max_in_open; -begin - level:=in_open; - while (level>0) and (full_source_filename_stack[level]=0) do - decr(level); - if level=0 then - print_nl("! ") - else begin - print_nl (""); print (full_source_filename_stack[level]); print (":"); - if level=in_open then print_int (line) - else print_int (line_stack[index+1-(in_open-level)]); - print (": "); - end; -end; - -@ To be able to determine whether \.{\\write18} is enabled from within -\TeX\ we also implement \.{\\eof18}. We sort of cheat by having an -additional route |scan_four_bit_int_or_18| which is the same as -|scan_four_bit_int| except it also accepts the value 18. - -@<Declare procedures that scan restricted classes of integers@>= -procedure scan_four_bit_int_or_18; -begin scan_int; -if (cur_val<0)or((cur_val>15)and(cur_val<>18)) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 15,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; - -@* \[54/web2c-string] The string recycling routines. \TeX{} uses 2 -upto 4 {\it new\/} strings when scanning a filename in an \.{\\input}, -\.{\\openin}, or \.{\\openout} operation. These strings are normally -lost because the reference to them are not saved after finishing the -operation. |search_string| searches through the string pool for the -given string and returns either 0 or the found string number. - -@<Declare additional routines for string recycling@>= -function search_string(@!search:str_number):str_number; -label found; -var result: str_number; -@!s: str_number; {running index} -@!len: integer; {length of searched string} -begin result:=0; len:=length(search); -if len=0 then {trivial case} - begin result:=""; goto found; - end -else begin s:=search-1; {start search with newest string below |s|; |search>1|!} - while s>65535 do {first 65536 strings depend on implementation!!} - begin if length(s)=len then - if str_eq_str(s,search) then - begin result:=s; goto found; - end; - decr(s); - end; - end; -found:search_string:=result; -end; - -@ The following routine is a variant of |make_string|. It searches -the whole string pool for a string equal to the string currently built -and returns a found string. Otherwise a new string is created and -returned. Be cautious, you can not apply |flush_string| to a replaced -string! - -@<Declare additional routines for string recycling@>= -function slow_make_string : str_number; -label exit; -var s: str_number; {result of |search_string|} -@!t: str_number; {new string} -begin t:=make_string; s:=search_string(t); -if s>0 then - begin flush_string; slow_make_string:=s; return; - end; -slow_make_string:=t; -exit:end; - - -@* \[54] System-dependent changes. -@z diff --git a/Build/source/texk/web2c/omegadir/comchar.ch b/Build/source/texk/web2c/omegadir/comchar.ch deleted file mode 100644 index e9453955180..00000000000 --- a/Build/source/texk/web2c/omegadir/comchar.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comchar.ch: Local adaptations for file omchar.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comdir.ch b/Build/source/texk/web2c/omegadir/comdir.ch deleted file mode 100644 index b82a1016fd3..00000000000 --- a/Build/source/texk/web2c/omegadir/comdir.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comdir.ch: Local adaptations for file omdir.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comfi.ch b/Build/source/texk/web2c/omegadir/comfi.ch deleted file mode 100644 index bb554766295..00000000000 --- a/Build/source/texk/web2c/omegadir/comfi.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comfi.ch: Local adapatations for file omfi.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comfilter.ch b/Build/source/texk/web2c/omegadir/comfilter.ch deleted file mode 100644 index 64499611753..00000000000 --- a/Build/source/texk/web2c/omegadir/comfilter.ch +++ /dev/null @@ -1,123 +0,0 @@ -% comfilter.ch: Local adaptations for file omfilter.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x -@!inf_ocp_list_size = 1000; -@y -@!inf_ocp_list_size = 1000; -@!sup_ocp_buf_size = 1000000; -@!inf_ocp_buf_size = 1000; -@!sup_ocp_stack_size = 1000000; -@!inf_ocp_stack_size = 1000; -@z -%--------------------------------------- -@x -@!ocp_list_size:integer; -@y -@!ocp_list_size:integer; -@!ocp_buf_size:integer; -@!ocp_stack_size:integer; -@z -%--------------------------------------- -@x -for k:=0 to active_max_ptr-1 do dump_wd(active_info[k]); -print_ln; print_int(active_max_ptr); print(" words of active ocps"); - -@ @<Undump the active ocp information@>= -undump_size(0)(active_mem_size)('active start point')(active_min_ptr); -undump_size(0)(active_mem_size)('active mem size')(active_max_ptr); -for k:=0 to active_max_ptr-1 do undump_wd(active_info[k]); -@y -dump_things(active_info[0], active_max_ptr); -print_ln; print_int(active_max_ptr); print(" words of active ocps"); - -@ @<Undump the active ocp information@>= -undump_size(0)(active_mem_size)('active start point')(active_min_ptr); -undump_size(0)(active_mem_size)('active mem size')(active_max_ptr); -undump_things(active_info[0], active_max_ptr); -@z -%--------------------------------------- -@x - setup_bound_var(1000)('ocp_list_size')(ocp_list_size); -@y - setup_bound_var(1000)('ocp_list_size')(ocp_list_size); - setup_bound_var(1000)('ocp_buf_size')(ocp_buf_size); - setup_bound_var(1000)('ocp_stack_size')(ocp_stack_size); -@z -%--------------------------------------- -@x - ocp_list_list:=xmalloc_array (ocp_list_index, ocp_list_size); -@y - ocp_list_list:=xmalloc_array (ocp_list_index, ocp_list_size); - otp_init_input_buf:=xmalloc_array (quarterword, ocp_buf_size); - otp_input_buf:=xmalloc_array (quarterword, ocp_buf_size); - otp_output_buf:=xmalloc_array (quarterword, ocp_buf_size); - otp_stack_buf:=xmalloc_array (quarterword, ocp_stack_size); - otp_calcs:=xmalloc_array (halfword, ocp_stack_size); - otp_states:=xmalloc_array (halfword, ocp_stack_size); -@z -%--------------------------------------- -@x -@!otp_init_input_buf:array[0..20000] of quarterword; - -@!otp_input_start:halfword; -@!otp_input_last:halfword; -@!otp_input_end:halfword; -@!otp_input_buf:array[0..20000] of quarterword; - -@!otp_output_end:halfword; -@!otp_output_buf:array[0..20000] of quarterword; - -@!otp_stack_used:halfword; -@!otp_stack_last:halfword; -@!otp_stack_new:halfword; -@!otp_stack_buf:array[0..1000] of quarterword; - -@!otp_pc:halfword; - -@!otp_calc_ptr:halfword; -@!otp_calcs:array[0..1000] of halfword; -@!otp_state_ptr:halfword; -@!otp_states:array[0..1000] of halfword; -@y -@!otp_init_input_buf:^quarterword; - -@!otp_input_start:halfword; -@!otp_input_last:halfword; -@!otp_input_end:halfword; -@!otp_input_buf:^quarterword; - -@!otp_output_end:halfword; -@!otp_output_buf:^quarterword; - -@!otp_stack_used:halfword; -@!otp_stack_last:halfword; -@!otp_stack_new:halfword; -@!otp_stack_buf:^quarterword; - -@!otp_pc:halfword; - -@!otp_calc_ptr:halfword; -@!otp_calcs:^halfword; -@!otp_state_ptr:halfword; -@!otp_states:^halfword; -@z diff --git a/Build/source/texk/web2c/omegadir/comfont.ch b/Build/source/texk/web2c/omegadir/comfont.ch deleted file mode 100644 index 7d490e54985..00000000000 --- a/Build/source/texk/web2c/omegadir/comfont.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comfonts.ch: Local adaptations for file omfonts.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comnode.ch b/Build/source/texk/web2c/omegadir/comnode.ch deleted file mode 100644 index 9e2faf5f55b..00000000000 --- a/Build/source/texk/web2c/omegadir/comnode.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comnode.ch: Local adaptations for file omnode.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comocp.ch b/Build/source/texk/web2c/omegadir/comocp.ch deleted file mode 100644 index 0c7056cd610..00000000000 --- a/Build/source/texk/web2c/omegadir/comocp.ch +++ /dev/null @@ -1,141 +0,0 @@ -% comcop.ch: Local adaptations for file omocp.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x -@!inf_hyph_size = iinf_hyphen_size; {Must be not less than |hyph_prime|!} -@y -@!inf_hyph_size = iinf_hyphen_size; {Must be not less than |hyph_prime|!} -@!sup_ocp_list_size = 1000000; -@!inf_ocp_list_size = 1000; -@z -%--------------------------------------- -@x -@!max_print_line:integer; - {width of longest text lines output; should be at least 60} -@y -@!max_print_line:integer; - {width of longest text lines output; should be at least 60} -@!ocp_list_size:integer; -@z -%--------------------------------------- -@x -if not b_open_in(ocp_file) then ocp_abort("opening file"); -@y -if not ocp_open_in(ocp_file) then ocp_abort("opening file"); -@z -%--------------------------------------- -@x -@d ocpget==get(ocp_file) -@d ocpbyte==ocp_file^ -@y -@d ocpget==ocp_temp:=getc(ocp_file) -@d ocpbyte==ocp_temp -@z -%--------------------------------------- -@x -@!ocp_list_info:array[ocp_list_index] of memory_word; - {the big collection of ocp list data} -@!ocp_listmem_ptr:ocp_list_index; {first unused word of |ocp_list_info|} -@!ocp_listmem_run_ptr:ocp_list_index; {temp unused word of |ocp_list_info|} -@!ocp_lstack_info:array[ocp_lstack_index] of memory_word; - {the big collection of ocp lstack data} -@!ocp_lstackmem_ptr:ocp_lstack_index; {first unused word of |ocp_lstack_info|} -@!ocp_lstackmem_run_ptr:ocp_lstack_index; {temp unused word of |ocp_lstack_info|} -@!ocp_list_ptr:internal_ocp_list_number; {largest internal ocp list number in use} -@!ocp_list_list:array[internal_ocp_list_number] of ocp_list_index; -@y -@!ocp_list_info:^memory_word; - {the big collection of ocp list data} -@!ocp_listmem_ptr:ocp_list_index; {first unused word of |ocp_list_info|} -@!ocp_listmem_run_ptr:ocp_list_index; {temp unused word of |ocp_list_info|} -@!ocp_lstack_info:^memory_word; - {the big collection of ocp lstack data} -@!ocp_lstackmem_ptr:ocp_lstack_index; {first unused word of |ocp_lstack_info|} -@!ocp_lstackmem_run_ptr:ocp_lstack_index; {temp unused word of |ocp_lstack_info|} -@!ocp_list_ptr:internal_ocp_list_number; {largest internal ocp list number in use} -@!ocp_list_list:^ocp_list_index; -@z -%--------------------------------------- -@x -@ @<Dump the ocp list information@>= -dump_int(ocp_listmem_ptr); -for k:=0 to ocp_listmem_ptr-1 do dump_wd(ocp_list_info[k]); -dump_int(ocp_list_ptr); -for k:=null_ocp_list to ocp_list_ptr do begin - dump_int(ocp_list_list[k]); - print_nl("\ocplist"); - print_esc(ocp_list_id_text(k)); - print_char("="); - print_ocp_list(ocp_list_list[k]); - end; -dump_int(ocp_lstackmem_ptr); -for k:=0 to ocp_lstackmem_ptr-1 do dump_wd(ocp_lstack_info[k]) -@y -@ @<Dump the ocp list information@>= -dump_int(ocp_listmem_ptr); -dump_things(ocp_list_info[0], ocp_listmem_ptr); -dump_int(ocp_list_ptr); -dump_things(ocp_list_list[null_ocp_list], ocp_list_ptr+1-null_ocp_list); -for k:=null_ocp_list to ocp_list_ptr do begin - print_nl("\ocplist"); - print_esc(ocp_list_id_text(k)); - print_char("="); - print_ocp_list(ocp_list_list[k]); - end; -dump_int(ocp_lstackmem_ptr); -dump_things(ocp_lstack_info[0], ocp_lstackmem_ptr) -@z -%--------------------------------------- -@x -@ @<Undump the ocp list information@>= -undump_size(1)(1000000)('ocp list mem size')(ocp_listmem_ptr); -for k:=0 to ocp_listmem_ptr-1 do undump_wd(ocp_list_info[k]); -undump_size(ocp_list_base)(ocp_list_biggest)('ocp list max')(ocp_list_ptr); -for k:=null_ocp_list to ocp_list_ptr do - undump_int(ocp_list_list[k]); -undump_size(1)(1000000)('ocp lstack mem size')(ocp_lstackmem_ptr); -for k:=0 to ocp_lstackmem_ptr-1 do undump_wd(ocp_lstack_info[k]) -@y -@ @<Undump the ocp list information@>= -undump_size(1)(1000000)('ocp list mem size')(ocp_listmem_ptr); -undump_things(ocp_list_info[0], ocp_listmem_ptr); -undump_size(0)(1000000)('ocp list max')(ocp_list_ptr); -undump_things(ocp_list_list[null_ocp_list], ocp_list_ptr+1-null_ocp_list); -undump_size(0)(1000000)('ocp lstack mem size')(ocp_lstackmem_ptr); -undump_things(ocp_lstack_info[0], ocp_lstackmem_ptr) -@z -%--------------------------------------- -@x - setup_bound_var (79)('max_print_line')(max_print_line); -@y - setup_bound_var (79)('max_print_line')(max_print_line); - setup_bound_var(1000)('ocp_list_size')(ocp_list_size); -@z -%--------------------------------------- -@x - hyph_link:=xmalloc_array (hyph_pointer, hyph_size); -@y - hyph_link:=xmalloc_array (hyph_pointer, hyph_size); - ocp_list_info:=xmalloc_array (memory_word, ocp_list_size); - ocp_lstack_info:=xmalloc_array (memory_word, ocp_list_size); - ocp_list_list:=xmalloc_array (ocp_list_index, ocp_list_size); -@z diff --git a/Build/source/texk/web2c/omegadir/compar.ch b/Build/source/texk/web2c/omegadir/compar.ch deleted file mode 100644 index ac5baddf9b4..00000000000 --- a/Build/source/texk/web2c/omegadir/compar.ch +++ /dev/null @@ -1,20 +0,0 @@ -% Local adaptations for file ompar.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comsrcspec.ch b/Build/source/texk/web2c/omegadir/comsrcspec.ch deleted file mode 100644 index 4656f2ce35c..00000000000 --- a/Build/source/texk/web2c/omegadir/comsrcspec.ch +++ /dev/null @@ -1,353 +0,0 @@ -@x -@!dvi_buf_size:integer; {size of the output buffer; must be a multiple of 8} -@!quoted_filename:boolean; {current filename is quoted} -@y -@!dvi_buf_size:integer; {size of the output buffer; must be a multiple of 8} -@!quoted_filename:boolean; {current filename is quoted} -@!special_loc:pointer; -@!special_token:halfword; - -@!parse_first_line_p:cinttype; {parse the first line for options} -@!file_line_error_style_p:cinttype; {format messages as file:line:error} -@!halt_on_error_p:boolean; {stop at first error} - -@!src_specials_p : boolean; -@!insert_src_special_auto : boolean; -@!insert_src_special_every_par : boolean; -@!insert_src_special_every_parend : boolean; -@!insert_src_special_every_cr : boolean; -@!insert_src_special_every_math : boolean; -@!insert_src_special_every_hbox : boolean; -@!insert_src_special_every_vbox : boolean; -@!insert_src_special_every_display : boolean; -@z - -@x -wterm(banner); -wterm(version_string); -if format_ident>0 then slow_print(format_ident); -print_ln; -@y -if src_specials_p or file_line_error_style_p or parse_first_line_p then - wterm(banner_k) -else - wterm(banner); -wterm(version_string); -if format_ident>0 then slow_print(format_ident); -print_ln; -if shellenabledp then begin - wterm(' '); - if restrictedshell then begin - wterm('restricted '); - end; - wterm_ln('\write18 enabled.'); -end; -if src_specials_p then begin - wterm_ln(' Source specials enabled.') -end; -if file_line_error_style_p then begin - wterm_ln(' file:line:error style messages enabled.') -end; -if parse_first_line_p then begin - wterm_ln(' %&-line parsing enabled.') -end; -@z - -@x - print_nl("! "); print(#); -@y - if file_line_error_style_p then print_file_line - else print_nl("! "); - print(#); -@z - -@x -print_char("."); show_context; -@y -print_char("."); show_context; -if (halt_on_error_p) then begin - history:=fatal_error_stop; jump_out; -end; -@z - -@x -@!in_open : 0..max_in_open; {the number of lines in the buffer, less one} -@!open_parens : 0..max_in_open; {the number of open text files} -@!input_file : ^alpha_file; -@!input_file_mode : ^halfword; -@!input_file_translation : ^halfword; -@!line : integer; {current line number in the current source file} -@!line_stack : ^integer; -@y -@!in_open : 0..max_in_open; {the number of lines in the buffer, less one} -@!open_parens : 0..max_in_open; {the number of open text files} -@!input_file : ^alpha_file; -@!input_file_mode : ^halfword; -@!input_file_translation : ^halfword; -@!line : integer; {current line number in the current source file} -@!line_stack : ^integer; -@!source_filename_stack : ^str_number; -@!full_source_filename_stack : ^str_number; -@z - -@x -begin wlog(banner); -wlog(version_string); -@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(version_string); -if shellenabledp then begin - wlog_cr; - wlog(' '); - if restrictedshell then begin - wlog('restricted '); - end; - wlog('\write18 enabled.') -end; -if src_specials_p then begin - wlog_cr; - wlog(' Source specials enabled.') -end; -if file_line_error_style_p then begin - wlog_cr; - wlog(' file:line:error style messages enabled.') -end; -if parse_first_line_p then begin - wlog_cr; - wlog(' %&-line parsing enabled.'); -end; -@z - -%% ** 537 ****************************************************************** - -@x -done: name:=a_make_name_string(cur_file); -if name=str_ptr-1 then {we can try to conserve string pool space now} - begin temp_str:=search_string(name); - if temp_str>0 then - begin name:=temp_str; flush_string; - end; - end; -@y -done: name:=a_make_name_string(cur_file); -source_filename_stack[in_open]:=name; -full_source_filename_stack[in_open]:=make_full_name_string; -if name=str_ptr-1 then {we can try to conserve string pool space now} - begin temp_str:=search_string(name); - if temp_str>0 then - begin name:=temp_str; flush_string; - end; - end; -@z - -%%@x -%%if term_offset+length(name)>max_print_line-2 then print_ln -%%else if (term_offset>0)or(file_offset>0) then print_char(" "); -%%print_char("("); incr(open_parens); slow_print(name); update_terminal; -%%@y -%%if term_offset+length(full_source_filename_stack[in_open])>max_print_line-2 then print_ln -%%else if (term_offset>0)or(file_offset>0) then print_char(" "); -%%print_char("("); incr(open_parens); slow_print(full_source_filename_stack[in_open]); update_terminal; -%%@z - -%% ** 774 ****************************************************************** - - @x -if every_cr<>null then begin_token_list(every_cr,every_cr_text); - @y -if (insert_src_special_every_cr and head<>tail) then insert_src_special; -if every_cr<>null then begin_token_list(every_cr,every_cr_text); - @z - -%% ** 799 ****************************************************************** - - @x -if every_cr<>null then begin_token_list(every_cr,every_cr_text); - @y -if (insert_src_special_every_cr) then insert_src_special; -if every_cr<>null then begin_token_list(every_cr,every_cr_text); - @z - -%% ** 1034 ****************************************************************** - -@x -@<Append character |cur_chr|...@>= -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;@/ -@z - -%% ** 1083 ****************************************************************** - - @x - if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text); - @y - if (insert_src_special_every_vbox) then insert_src_special; - if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text); - @z - - @x - if every_hbox<>null then begin_token_list(every_hbox,every_hbox_text); - @y - if (insert_src_special_every_hbox) then insert_src_special; - if every_hbox<>null then begin_token_list(every_hbox,every_hbox_text); - @z - -%% ** 1091 ****************************************************************** -% Disabled, prevents merge with web2c's tex.ch. - @x -if indented then begin - p:=new_null_box; box_dir(p):=par_direction; - width(p):=par_indent;@+ - tail_append(p); - end; - @y -if indented then begin - p:=new_null_box; box_dir(p):=par_direction; - width(p):=par_indent;@+ - tail_append(p); - if (insert_src_special_every_par) then insert_src_special;@+ - end; - @z - -%% insert source special at par because this is disabled above -@x -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - box_dir(tail):=info(par_dir_stack); - change_dir(tail,info(par_dir_stack)); - end; -@y -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - box_dir(tail):=info(par_dir_stack); - change_dir(tail,info(par_dir_stack)); - if (insert_src_special_every_par) then insert_src_special;@+ - end; -@z - -%% ** 1096 ****************************************************************** - - @x fixme: etex conflict - else line_break(widow_penalty); - @y - else begin - if (insert_src_special_every_parend) then insert_src_special; - line_break(widow_penalty); - end; - @z - -%% ** 1139 ****************************************************************** - -@x -if every_math<>null then begin_token_list(every_math,every_math_text); -@y -if (insert_src_special_every_math) then insert_src_special; -if every_math<>null then begin_token_list(every_math,every_math_text); -@z - -%% ** 1145 ****************************************************************** - - @x -if every_display<>null then begin_token_list(every_display,every_display_text); - @y -if (insert_src_special_every_display) then append_src_special; -if every_display<>null then begin_token_list(every_display,every_display_text); - @z - -%% ** 1167 ****************************************************************** - -@x - if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text); -@y - if (insert_src_special_every_vbox) then insert_src_special; - if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text); -@z - -%% ** 1313 ****************************************************************** - -@x -dump_int(par_loc); dump_int(write_loc);@/ -@y -dump_int(par_loc); dump_int(write_loc); dump_int(special_loc);@/ -@z - -%% ** 1314 ****************************************************************** - -@x -undump(hash_base)(frozen_control_sequence)(write_loc);@/ -@y -undump(hash_base)(frozen_control_sequence)(write_loc);@/ -undump(hash_base)(frozen_control_sequence)(special_loc); -special_token:=cs_token_flag+special_loc;@/ -@z - -@x - line_stack:=xmalloc_array (integer, max_in_open); -@y - line_stack:=xmalloc_array (integer, max_in_open); - source_filename_stack:=xmalloc_array (str_number, max_in_open); - full_source_filename_stack:=xmalloc_array (str_number, max_in_open); -@z - -%% ** 1344 ****************************************************************** - -@x -primitive("special",extension,special_node);@/ -@y -primitive("special",extension,special_node);@/ -special_loc:=cur_val; special_token:=cs_token_flag+special_loc;@/ -@z - -%% ** 1379 ****************************************************************** - -@x -@* \[55] Index. -@y - -@ @<Declare action procedures for use by |main_control|@>= - -procedure insert_src_special; -var toklist, p, q : pointer; -begin - if (source_filename_stack[in_open] > 0 and is_new_source (source_filename_stack[in_open], line)) then begin - toklist := get_avail; - p := toklist; - info(p) := special_token; - link(p) := get_avail; p := link(p); - info(p) := left_brace_token+"{"; - q := str_toks (make_src_special (source_filename_stack[in_open], line)); - link(p) := link(temp_head); - p := q; - link(p) := get_avail; p := link(p); - info(p) := right_brace_token+"}"; - ins_list (toklist); - remember_source_info (source_filename_stack[in_open], line); - end; -end; - -procedure append_src_special; -var q : pointer; -begin - if (source_filename_stack[in_open] > 0 and is_new_source (source_filename_stack[in_open], line)) then begin - new_whatsit (special_node, write_node_size); - write_stream(tail) := null; - def_ref := get_avail; - token_ref_count(def_ref) := null; - q := str_toks (make_src_special (source_filename_stack[in_open], line)); - link(def_ref) := link(temp_head); - write_tokens(tail) := def_ref; - remember_source_info (source_filename_stack[in_open], line); - end; -end; - -@* \[55] Index. -@z diff --git a/Build/source/texk/web2c/omegadir/comstr.ch b/Build/source/texk/web2c/omegadir/comstr.ch deleted file mode 100644 index 95c089816b5..00000000000 --- a/Build/source/texk/web2c/omegadir/comstr.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comstr.ch: Local adaptations for file omstr.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comtrans.ch b/Build/source/texk/web2c/omegadir/comtrans.ch deleted file mode 100644 index 5f03ceac5f4..00000000000 --- a/Build/source/texk/web2c/omegadir/comtrans.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comtrans.ch: Local adaptations for file omtrans.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/comxml.ch b/Build/source/texk/web2c/omegadir/comxml.ch deleted file mode 100644 index 6c68ae40e33..00000000000 --- a/Build/source/texk/web2c/omegadir/comxml.ch +++ /dev/null @@ -1,20 +0,0 @@ -% comxml.ch: Local adaptations for file omxml.ch -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/om16bit.ch b/Build/source/texk/web2c/omegadir/om16bit.ch deleted file mode 100644 index eb10ed85e8a..00000000000 --- a/Build/source/texk/web2c/omegadir/om16bit.ch +++ /dev/null @@ -1,2826 +0,0 @@ -% om16bit.ch: Basic changes to TeX data structures allowing all -% 8-bit entities to become 32-bit entities, in particular -% characters and glyphs. -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -@x limbo l.1 - Omega -% This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved. -@y -% This program is copyright -% (C) 1994--2000 by John Plaice and Yannis Haralambous. -% It is designed to be a change file for D. E. Knuth's TeX. -% -% This program is copyright (C) 1982 by D. E. Knuth. -@z -%--------------------------------------- -@x limbo l.80 -\def\title{\TeX82} -@y -\def\title{$\Omega$ (OMEGA)} -@z -%--------------------------------------- -@x [1] m.1 l.90 - Omega -This is \TeX, a document compiler intended to produce typesetting of high -quality. -The \PASCAL\ program that follows is the definition of \TeX82, a standard -@:PASCAL}{\PASCAL@> -@!@:TeX82}{\TeX82@> -@y -This is $\Omega$, a document compiler intended to simplify high-quality -typesetting for many of the world's languages. It is an extension -of D. E. Knuth's \TeX, which was designed essentially for the -typesetting of languages using the Latin alphabet. - -The $\Omega$ system loosens many of the restrictions imposed by~\TeX: -register numbers are no longer limited to 8~bits; fonts may have more -than 256~characters; more than 256~fonts may be used; etc. In addition, -$\Omega$ allows much more complex ligature mechanisms between characters, -thereby simplifying the typesetting of alphabets that have preserved -their calligraphic traditions. - -The \PASCAL\ program that follows is a modification of the definition of \TeX82, -a standard @:PASCAL}{\PASCAL@> @!@:TeX82}{\TeX82@> -@z -%--------------------------------------- -@x [1] m.1 l.97 - Omega -will be obtainable on a great variety of computers. - -@y -will be obtainable on a great variety of computers. - -As little as possible is changed in this document. This means that -unless the contrary is explicitly stated, references to \TeX\ in the -documentation are equally applicable to~$\Omega$. References to `the -author' in the documentation are to D. E. Knuth. - -@z -%--------------------------------------- -@x [1] m.2 l.187 - Omega -@d banner=='This is TeX, Version 3.1415926' {printed when \TeX\ starts} -@y -@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} -@z -%--------------------------------------- -@x [1] m.4 l.243 -program TEX; {all file names are defined dynamically} -@y -program OMEGA; {all file names are defined dynamically} -@z -%--------------------------------------- -@x [1] m.11 l.392 - Omega -@!font_max=75; {maximum internal font number; must not exceed |max_quarterword| - and must be at most |font_base+256|} -@!font_mem_size=20000; {number of words of |font_info| for all fonts} -@y -@!font_max=65535; {maximum internal font number; must be at most |font_biggest|} -@z -%--------------------------------------- -@x [1] m.11 l.412 - Omega -@!pool_name='TeXformats:TEX.POOL '; -@y -@!pool_name='TeXformats:OMEGA.POOL '; -@z -%--------------------------------------- -@x [1] m.12 l.437 - Omega -@d hash_size=2100 {maximum number of control sequences; it should be at most - about |(mem_max-mem_min)/10|} -@d hash_prime=1777 {a prime number equal to about 85\pct! of |hash_size|} -@d hyph_size=307 {another prime; the number of \.{\\hyphenation} exceptions} -@y -@d hash_size=65536 {maximum number of control sequences; it should be at most - about |(mem_max-mem_min)/10|} -@d hash_prime=55711 {a prime number equal to about 85\pct! of |hash_size|} -@d hyph_size=307 {another prime; the number of \.{\\hyphenation} exceptions} -@d biggest_char=65535 {the largest allowed character number; - must be |<=max_quarterword|} -@d too_big_char=65536 {|biggest_char+1|} -@d special_char=65537 {|biggest_char+2|} -@d number_chars=65536 {|biggest_char+1|} -@d biggest_reg=65535 {the largest allowed register number; - must be |<=max_quarterword|} -@d number_regs=65536 {|biggest_reg+1|} -@d font_biggest=65535 {the real biggest font} -@d number_fonts=font_biggest-font_base+2 -@d number_math_fonts=768 -@d math_font_biggest=767 -@d text_size=0 {size code for the largest size in a family} -@d script_size=256 {size code for the medium size in a family} -@d script_script_size=512 {size code for the smallest size in a family} -@d biggest_lang=255 -@d too_big_lang=256 -@z -%--------------------------------------- -@x [8] m.110 l.2355 - Omega -In order to make efficient use of storage space, \TeX\ bases its major data -structures on a |memory_word|, which contains either a (signed) integer, -possibly scaled, or a (signed) |glue_ratio|, or a small number of -fields that are one half or one quarter of the size used for storing -integers. - -@y -In order to make efficient use of storage space, \TeX\ bases its major data -structures on a |memory_word|, which contains either a (signed) integer, -possibly scaled, or a (signed) |glue_ratio|, or a small number of -fields that are one half or one quarter of the size used for storing -integers. - -That is the description for \TeX. For $\Omega$, we are going to keep -the same terminology, except that |quarterword| is going to refer to -16~bits, and |halfword| is going to refer to 32~bits. So, in fact, -a |memory_word| will take 64 bits, and, on a 64-bit machine, will run -smaller than \TeX\ will! - -@z -%--------------------------------------- -@x [8] m.110 l.2378 - Omega -Since we are assuming 32-bit integers, a halfword must contain at least -16 bits, and a quarterword must contain at least 8 bits. -@^system dependencies@> -But it doesn't hurt to have more bits; for example, with enough 36-bit -words you might be able to have |mem_max| as large as 262142, which is -eight times as much memory as anybody had during the first four years of -\TeX's existence. - -N.B.: Valuable memory space will be dreadfully wasted unless \TeX\ is compiled -by a \PASCAL\ that packs all of the |memory_word| variants into -the space of a single integer. This means, for example, that |glue_ratio| -words should be |short_real| instead of |real| on some computers. Some -\PASCAL\ compilers will pack an integer whose subrange is `|0..255|' into -an eight-bit field, but others insist on allocating space for an additional -sign bit; on such systems you can get 256 values into a quarterword only -if the subrange is `|-128..127|'. - -@y -@z -%--------------------------------------- -@x [8] m.110 l.2406 - Omega -@d max_quarterword=255 {largest allowable value in a |quarterword|} -@d min_halfword==0 {smallest allowable value in a |halfword|} -@d max_halfword==65535 {largest allowable value in a |halfword|} -@y -@d max_quarterword=@"FFFF {largest allowable value in a |quarterword|} -@d min_halfword=0 {smallest allowable value in a |halfword|} -@d max_halfword=@"3FFFFFFF {largest allowable value in a |halfword|} -@z -%--------------------------------------- -@x [8] m.111 l.2416 - Omega -if (min_quarterword>0)or(max_quarterword<127) then bad:=11; -if (min_halfword>0)or(max_halfword<32767) then bad:=12; -@y -if (min_quarterword>0)or(max_quarterword<@"7FFF) then bad:=11; -if (min_halfword>0)or(max_halfword<@"3FFFFFFF) then bad:=12; -@z -%--------------------------------------- -@x [8] m.111 l.2423 - Omega -if font_max>font_base+256 then bad:=16; -@y -if font_max>font_base+@"10000 then bad:=16; -@z -%--------------------------------------- -@x [8] m.111 l.2426 - Omega -if max_quarterword-min_quarterword<255 then bad:=19; -@y -if max_quarterword-min_quarterword<@"FFFF then bad:=19; -@z -%--------------------------------------- -@x [9] m.120 - Omega -@ The function |get_avail| returns a pointer to a new one-word node whose -|link| field is null. However, \TeX\ will halt if there is no more room left. -@^inner loop@> - -If the available-space list is empty, i.e., if |avail=null|, -we try first to increase |mem_end|. If that cannot be done, i.e., if -|mem_end=mem_max|, we try to decrease |hi_mem_min|. If that cannot be -done, i.e., if |hi_mem_min=lo_mem_max+1|, we have to quit. - -@p function get_avail : pointer; {single-word node allocation} -var p:pointer; {the new node being got} -begin p:=avail; {get top location in the |avail| stack} -if p<>null then avail:=link(avail) {and pop it off} -else if mem_end<mem_max then {or go into virgin territory} - begin incr(mem_end); p:=mem_end; - end -else begin decr(hi_mem_min); p:=hi_mem_min; - if hi_mem_min<=lo_mem_max then - begin runaway; {if memory is exhausted, display possible runaway text} - overflow("main memory size",mem_max+1-mem_min); - {quit; all one-word nodes are busy} -@:TeX capacity exceeded main memory size}{\quad main memory size@> - end; - end; -link(p):=null; {provide an oft-desired initialization of the new node} -@!stat incr(dyn_used);@+tats@;{maintain statistics} -get_avail:=p; -end; -@y -@ The function |get_avail| returns a pointer to a new one-word node whose -|link| field is null. However, \TeX\ will halt if there is no more room left. -@^inner loop@> - -If the available-space list is empty, i.e., if |avail=null|, -we try first to increase |mem_end|. If that cannot be done, i.e., if -|mem_end=mem_max|, we try to decrease |hi_mem_min|. If that cannot be -done, i.e., if |hi_mem_min=lo_mem_max+1|, we have to quit. - -For Omega, we actually return a pointer to the first word, -rather than the zeroth word. - -@p function get_avail : pointer; {single-word node allocation} -var p:pointer; {the new node being got} -begin p:=avail; {get top location in the |avail| stack} -if p<>null then avail:=link(avail) {and pop it off} -else if (mem_end+1)<mem_max then {or go into virgin territory} - begin mem_end:=mem_end+2; p:=mem_end; - link(p):=null; info(p):=null; incr(p); - end -else begin hi_mem_min:=hi_mem_min-2; p:=hi_mem_min; - if hi_mem_min<=lo_mem_max then - begin runaway; {if memory is exhausted, display possible runaway text} - overflow("main memory size",mem_max+1-mem_min); - {quit; all one-word nodes are busy} -@:TeX capacity exceeded main memory size}{\quad main memory size@> - end; - end; -link(p):=null; {provide an oft-desired initialization of the new node} -@!stat incr(dyn_used);@+tats@;{maintain statistics} -get_avail:=p; -end; -@z -%--------------------------------------- -@x [9] m.121 - Omega -@d free_avail(#)== {single-word node liberation} - begin link(#):=avail; avail:=#; - @!stat decr(dyn_used);@+tats@/ - end -@y -@d free_avail(#)== {single-word node liberation} - begin link(#):=avail; avail:=#; - link(#-1):=null; info(#-1):=null; - @!stat decr(dyn_used);@+tats@/ - end -@z -%--------------------------------------- -@x [9] m.120 - Omega -@d fast_get_avail(#)==@t@>@;@/ - begin #:=avail; {avoid |get_avail| if possible, to save time} - if #=null then #:=get_avail - else begin avail:=link(#); link(#):=null; - @!stat incr(dyn_used);@+tats@/ - end; - end -@y -@d fast_get_avail(#)==@t@>@;@/ - begin #:=avail; {avoid |get_avail| if possible, to save time} - if #=null then #:=get_avail - else begin avail:=link(#); link(#):=null; - link(#-1):=null; info(#-1):=null; - @!stat incr(dyn_used);@+tats@/ - end; - end -@z -%--------------------------------------- -@x [10] m.125 -@ A call to |get_node| with argument |s| returns a pointer to a new node -of size~|s|, which must be 2~or more. The |link| field of the first word -of this new node is set to null. An overflow stop occurs if no suitable -space exists. - -If |get_node| is called with $s=2^{30}$, it simply merges adjacent free -areas and returns the value |max_halfword|. - -@p function get_node(@!s:integer):pointer; {variable-size node allocation} -label found,exit,restart; -var p:pointer; {the node currently under inspection} -@!q:pointer; {the node physically after node |p|} -@!r:integer; {the newly allocated node, or a candidate for this honor} -@!t:integer; {temporary register} -begin restart: p:=rover; {start at some free node in the ring} -repeat @<Try to allocate within node |p| and its physical successors, - and |goto found| if allocation was possible@>; -@^inner loop@> -p:=rlink(p); {move to the next node in the ring} -until p=rover; {repeat until the whole list has been traversed} -if s=@'10000000000 then - begin get_node:=max_halfword; return; - end; -if lo_mem_max+2<hi_mem_min then if lo_mem_max+2<=mem_bot+max_halfword then - @<Grow more variable-size memory and |goto restart|@>; -overflow("main memory size",mem_max+1-mem_min); - {sorry, nothing satisfactory is left} -@:TeX capacity exceeded main memory size}{\quad main memory size@> -found: link(r):=null; {this node is now nonempty} -@!stat var_used:=var_used+s; {maintain usage statistics} -tats@;@/ -get_node:=r; -exit:end; -@y -@ A call to |get_node| with argument |s| returns a pointer to a new node -of size~|s|, which must be 2~or more. The |link| field of the first word -of this new node is set to null. An overflow stop occurs if no suitable -space exists. - -If |get_node| is called with $s=2^{30}$, it simply merges adjacent free -areas and returns the value |max_halfword|. - -@p function get_node(@!s:integer):pointer; {variable-size node allocation} -label found,exit,restart; -var p:pointer; {the node currently under inspection} -@!q:pointer; {the node physically after node |p|} -@!r:integer; {the newly allocated node, or a candidate for this honor} -@!t:integer; {temporary register} -begin -if s<>@'10000000000 then incr(s); -restart: p:=rover; {start at some free node in the ring} -repeat @<Try to allocate within node |p| and its physical successors, - and |goto found| if allocation was possible@>; -@^inner loop@> -p:=rlink(p); {move to the next node in the ring} -until p=rover; {repeat until the whole list has been traversed} -if s=@'10000000000 then - begin get_node:=max_halfword; return; - end; -if lo_mem_max+2<hi_mem_min then if lo_mem_max+2<=mem_bot+max_halfword then - @<Grow more variable-size memory and |goto restart|@>; -overflow("main memory size",mem_max+1-mem_min); - {sorry, nothing satisfactory is left} -@:TeX capacity exceeded main memory size}{\quad main memory size@> -found: incr(r); link(r):=null; {this node is now nonempty} -@!stat var_used:=var_used+s; {maintain usage statistics} -tats@;@/ -link(r-1):=null; info(r-1):=null; -get_node:=r; -exit:end; -@z -%--------------------------------------- -@x [10] m.130 -@p procedure free_node(@!p:pointer; @!s:halfword); {variable-size node - liberation} -var q:pointer; {|llink(rover)|} -begin node_size(p):=s; link(p):=empty_flag; -q:=llink(rover); llink(p):=q; rlink(p):=rover; {set both links} -llink(rover):=p; rlink(q):=p; {insert |p| into the ring} -@!stat var_used:=var_used-s;@+tats@;{maintain statistics} -end; -@y -@p procedure free_node(@!p:pointer; @!s:halfword); {variable-size node - liberation} -var q:pointer; {|llink(rover)|} -begin -decr(p); incr(s); -link(p):=null; info(p):=null; -node_size(p):=s; link(p):=empty_flag; -q:=llink(rover); llink(p):=q; rlink(p):=rover; {set both links} -llink(rover):=p; rlink(q):=p; {insert |p| into the ring} -@!stat var_used:=var_used-s;@+tats@;{maintain statistics} -end; -@z -%--------------------------------------- -@x [10] m.134 l.2832 - Omega -Note that the format of a |char_node| allows for up to 256 different -fonts and up to 256 characters per font; but most implementations will -probably limit the total number of fonts to fewer than 75 per job, -and most fonts will stick to characters whose codes are -less than 128 (since higher codes -are more difficult to access on most keyboards). - -Extensions of \TeX\ intended for oriental languages will need even more -than $256\times256$ possible characters, when we consider different sizes -@^oriental characters@>@^Chinese characters@>@^Japanese characters@> -and styles of type. It is suggested that Chinese and Japanese fonts be -handled by representing such characters in two consecutive |char_node| -entries: The first of these has |font=font_base|, and its |link| points -to the second; -the second identifies the font and the character dimensions. -The saving feature about oriental characters is that most of them have -the same box dimensions. The |character| field of the first |char_node| -is a ``\\{charext}'' that distinguishes between graphic symbols whose -dimensions are identical for typesetting purposes. (See the \MF\ manual.) -Such an extension of \TeX\ would not be difficult; further details are -left to the reader. -@y -Note that the format of a |char_node| allows for up to 65536 different -fonts and up to 65536 characters per font. -@z -%--------------------------------------- -@x [15] m.208 l.4127 - Omega -@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 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 omath_given=math_given+1 {math code defined by \.{\\omathchardef}} -@d last_item=omath_given+1 {most recent item ( \.{\\lastpenalty}, - \.{\\lastkern}, \.{\\lastskip} )} -@d max_non_prefixed_command=last_item - {largest command code that can't be \.{\\global}} -@z -%--------------------------------------- -@x [15] m.209 l.4138 - Omega -@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}, - \.{\\insertpenalties} )} -@d set_box_dimen=83 {change dimension of box ( \.{\\wd}, \.{\\ht}, \.{\\dp} )} -@d set_shape=84 {specify fancy paragraph shape ( \.{\\parshape} )} -@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} )} -@d let=94 {assign a command code ( \.{\\let}, \.{\\futurelet} )} -@d shorthand_def=95 {code definition ( \.{\\chardef}, \.{\\countdef}, etc.~)} -@d read_to_cs=96 {read into a control sequence ( \.{\\read} )} -@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 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 set_aux=assign_font_int+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}, - \.{\\insertpenalties} )} -@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} )} -@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 register=def_font+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} )} -@d let=prefix+1 - {assign a command code ( \.{\\let}, \.{\\futurelet} )} -@d shorthand_def=let+1 - {code definition ( \.{\\chardef}, \.{\\countdef}, etc.~)} -@d read_to_cs=shorthand_def+1 - {read into a control sequence ( \.{\\read} )} -@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 max_command=set_interaction - {the largest command code seen at |big_switch|} -@z -%--------------------------------------- -@x [17] m.220 l.4486 - Omega -@d eq_level(#)==eq_level_field(eqtb[#]) {level of definition} -@d eq_type(#)==eq_type_field(eqtb[#]) {command code for equivalent} -@d equiv(#)==equiv_field(eqtb[#]) {equivalent value} -@y -@d eq_level(#)==new_eq_level(#) {level of definition} -@d eq_type(#)==new_eq_type(#) {command code for equivalent} -@d equiv(#)==new_equiv(#) {equivalent value} -@d equiv1(#)==new_equiv1(#) {equivalent value} -@z -%--------------------------------------- -@x [17] m.222 l.4496 - Omega -In the first region we have 256 equivalents for ``active characters'' that -act as control sequences, followed by 256 equivalents for single-character -control sequences. -@y -In the first region we have |number_chars| equivalents for ``active characters'' -that act as control sequences, followed by |number_chars| equivalents for -single-character control sequences. -@z -%--------------------------------------- -@x [17] m.222 l.4507 - Omega -@d single_base=active_base+256 {equivalents of one-character control sequences} -@d null_cs=single_base+256 {equivalent of \.{\\csname\\endcsname}} -@y -@d single_base=active_base+number_chars - {equivalents of one-character control sequences} -@d null_cs=single_base+number_chars {equivalent of \.{\\csname\\endcsname}} -@z -%--------------------------------------- -@x [17] m.222 l.4530 - Omega -eq_type(undefined_control_sequence):=undefined_cs; -equiv(undefined_control_sequence):=null; -eq_level(undefined_control_sequence):=level_zero; -for k:=active_base to undefined_control_sequence-1 do - eqtb[k]:=eqtb[undefined_control_sequence]; -@y -set_eq_type(undefined_control_sequence,undefined_cs); -set_equiv(undefined_control_sequence,null); -set_eq_level(undefined_control_sequence,level_zero); -@z -%--------------------------------------- -@x [17] m.224 l.4547 - Omega -@ Region 3 of |eqtb| contains the 256 \.{\\skip} registers, as well as the -glue parameters defined here. It is important that the ``muskip'' -parameters have larger numbers than the others. -@y -@ Region 3 of |eqtb| contains the |number_regs| \.{\\skip} registers, -as well as the glue parameters defined here. It is important that the -``muskip'' parameters have larger numbers than the others. -@z -%--------------------------------------- -@x [17] m.224 l.4572 - Omega -@d skip_base=glue_base+glue_pars {table of 256 ``skip'' registers} -@d mu_skip_base=skip_base+256 {table of 256 ``muskip'' registers} -@d local_base=mu_skip_base+256 {beginning of region 4} -@y -@d skip_base=glue_base+glue_pars {table of |number_regs| ``skip'' registers} -@d mu_skip_base=skip_base+number_regs - {table of |number_regs| ``muskip'' registers} -@d local_base=mu_skip_base+number_regs {beginning of region 4} -@z -%--------------------------------------- -@x [17] m.228 l.4685 - Omega -equiv(glue_base):=zero_glue; eq_level(glue_base):=level_one; -eq_type(glue_base):=glue_ref; -for k:=glue_base+1 to local_base-1 do eqtb[k]:=eqtb[glue_base]; -@y -set_equiv(glue_base,zero_glue); set_eq_level(glue_base,level_one); -set_eq_type(glue_base,glue_ref); -@z -%--------------------------------------- -@x [17] m.230 l.4721 - Omega -@d toks_base=local_base+10 {table of 256 token list registers} -@d box_base=toks_base+256 {table of 256 box registers} -@d cur_font_loc=box_base+256 {internal font number outside math mode} -@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} -@d uc_code_base=lc_code_base+256 {table of 256 uppercase mappings} -@d sf_code_base=uc_code_base+256 {table of 256 spacefactor mappings} -@d math_code_base=sf_code_base+256 {table of 256 math mode mappings} -@d int_base=math_code_base+256 {beginning of region 5} -@y -@d toks_base=local_base+10 {table of |number_regs| token list registers} -@d box_base=toks_base+number_regs {table of |number_regs| box registers} -@d cur_font_loc=box_base+number_regs {internal font number outside math mode} -@d math_font_base=cur_font_loc+1 - {table of |number_math_fonts| math font numbers} -@d cat_code_base=math_font_base+number_math_fonts - {table of |number_chars| command codes (the ``catcodes'')} -@d lc_code_base=cat_code_base+number_chars - {table of |number_chars| lowercase mappings} -@d uc_code_base=lc_code_base+number_chars - {table of |number_chars| uppercase mappings} -@d sf_code_base=uc_code_base+number_chars - {table of |number_chars| spacefactor mappings} -@d math_code_base=sf_code_base+number_chars - {table of |number_chars| math mode mappings} -@d int_base=math_code_base+number_chars {beginning of region 5} -@z -%--------------------------------------- -@x [17] m.232 l.4802 - Omega -@d var_code==@'70000 {math code meaning ``use the current family''} - -@<Initialize table entries...@>= -par_shape_ptr:=null; eq_type(par_shape_loc):=shape_ref; -eq_level(par_shape_loc):=level_one;@/ -for k:=output_routine_loc to toks_base+255 do - eqtb[k]:=eqtb[undefined_control_sequence]; -box(0):=null; eq_type(box_base):=box_ref; eq_level(box_base):=level_one; -for k:=box_base+1 to box_base+255 do eqtb[k]:=eqtb[box_base]; -cur_font:=null_font; eq_type(cur_font_loc):=data; -eq_level(cur_font_loc):=level_one;@/ -for k:=math_font_base to math_font_base+47 do eqtb[k]:=eqtb[cur_font_loc]; -equiv(cat_code_base):=0; eq_type(cat_code_base):=data; -eq_level(cat_code_base):=level_one;@/ -for k:=cat_code_base+1 to int_base-1 do eqtb[k]:=eqtb[cat_code_base]; -for k:=0 to 255 do - begin cat_code(k):=other_char; math_code(k):=hi(k); sf_code(k):=1000; - end; -cat_code(carriage_return):=car_ret; cat_code(" "):=spacer; -cat_code("\"):=escape; cat_code("%"):=comment; -cat_code(invalid_code):=invalid_char; cat_code(null_code):=ignore; -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 -@d var_code==@"7000000 {math code meaning ``use the current family''} - -@<Initialize table entries...@>= -set_equiv(par_shape_loc,null); set_eq_type(par_shape_loc,shape_ref); -set_eq_level(par_shape_loc,level_one);@/ -set_equiv(cat_code_base+carriage_return,car_ret); -set_equiv(cat_code_base+" ",spacer); -set_equiv(cat_code_base+"\",escape); -set_equiv(cat_code_base+"%",comment); -set_equiv(cat_code_base+invalid_code,invalid_char); -set_equiv(cat_code_base+null_code,ignore); -for k:="0" to "9" do set_equiv(math_code_base+k,hi(k+var_code)); -for k:="A" to "Z" do - begin set_equiv(cat_code_base+k,letter); - set_equiv(cat_code_base+k+"a"-"A",letter);@/ - set_equiv(math_code_base+k,hi(k+var_code+@"10000)); - set_equiv(math_code_base+k+"a"-"A",hi(k+"a"-"A"+var_code+@"10000));@/ - set_equiv(lc_code_base+k,k+"a"-"A"); - set_equiv(lc_code_base+k+"a"-"A",k+"a"-"A");@/ - set_equiv(uc_code_base+k,k); - set_equiv(uc_code_base+k+"a"-"A",k);@/ - set_equiv(sf_code_base+k,999); - end; -@z -%--------------------------------------- -@x [17] m.234 l.4857 - Omega -@ @<Show the font identifier in |eqtb[n]|@>= -begin if n=cur_font_loc then print("current font") -else if n<math_font_base+16 then - begin print_esc("textfont"); print_int(n-math_font_base); - end -else if n<math_font_base+32 then - begin print_esc("scriptfont"); print_int(n-math_font_base-16); - end -else begin print_esc("scriptscriptfont"); print_int(n-math_font_base-32); - end; -print_char("=");@/ -print_esc(hash[font_id_base+equiv(n)].rh); - {that's |font_id_text(equiv(n))|} -@y -@ @<Show the font identifier in |eqtb[n]|@>= -begin if n=cur_font_loc then print("current font") -else if n<math_font_base+script_size then - begin print_esc("textfont"); print_int(n-math_font_base); - end -else if n<math_font_base+script_script_size then - begin print_esc("scriptfont"); print_int(n-math_font_base-script_size); - end -else begin print_esc("scriptscriptfont"); - print_int(n-math_font_base-script_script_size); - end; -print_char("=");@/ -print_esc(newtext(font_id_base+equiv(n))); - {that's |font_id_text(equiv(n))|} -@z -%--------------------------------------- -@x [17] m.236 l.4955 - Omega -@d count_base=int_base+int_pars {256 user \.{\\count} registers} -@d del_code_base=count_base+256 {256 delimiter code mappings} -@d dimen_base=del_code_base+256 {beginning of region 6} -@# -@d del_code(#)==eqtb[del_code_base+#].int -@d count(#)==eqtb[count_base+#].int -@d int_par(#)==eqtb[int_base+#].int {an integer parameter} -@y -@d count_base=int_base+int_pars {|number_regs| user \.{\\count} registers} -@d del_code_base=count_base+number_regs {|number_chars| delimiter code mappings} -@d dimen_base=del_code_base+number_chars {beginning of region 6} -@# -@d del_code0(#)==new_equiv(del_code_base+#) -@d del_code1(#)==new_equiv1(del_code_base+#) -@d count(#)==new_eqtb_int(count_base+#) -@d int_par(#)==new_eqtb_int(int_base+#) {an integer parameter} -@z -%--------------------------------------- -@x [17] m.240 l.5213 - Omega -for k:=int_base to del_code_base-1 do eqtb[k].int:=0; -mag:=1000; tolerance:=10000; hang_after:=1; max_dead_cycles:=25; -escape_char:="\"; end_line_char:=carriage_return; -for k:=0 to 255 do del_code(k):=-1; -del_code("."):=0; {this null delimiter is used in error recovery} -@y -set_new_eqtb_int(int_base+mag_code,1000); -set_new_eqtb_int(int_base+tolerance_code,10000); -set_new_eqtb_int(int_base+hang_after_code,1); -set_new_eqtb_int(int_base+max_dead_cycles_code,25); -set_new_eqtb_int(int_base+escape_char_code,"\"); -set_new_eqtb_int(int_base+end_line_char_code,carriage_return); -set_equiv(del_code_base+".",0); -set_equiv1(del_code_base+".",0); - {this null delimiter is used in error recovery} - -@ @<Set newline character to -1@>= -set_new_eqtb_int(int_base+new_line_char_code,-1) - -@ @<Set newline character to nl@>= -set_new_eqtb_int(int_base+new_line_char_code,nl) - -@z -%--------------------------------------- -@x [17] m.242 l.5240 - Omega -print_char("="); print_int(eqtb[n].int); -@y -print_char("="); print_int(new_eqtb_int(n)); -@z -%--------------------------------------- -@x [17] m.247 l.5273 - Omega -here, and the 256 \.{\\dimen} registers. -@y -here, and the |number_regs| \.{\\dimen} registers. -@z -%--------------------------------------- -@x [17] m.247 l.5298 - Omega - {table of 256 user-defined \.{\\dimen} registers} -@d eqtb_size=scaled_base+255 {largest subscript of |eqtb|} -@# -@d dimen(#)==eqtb[scaled_base+#].sc -@d dimen_par(#)==eqtb[dimen_base+#].sc {a scaled quantity} -@y - {table of |number_regs| user-defined \.{\\dimen} registers} -@d eqtb_size=scaled_base+biggest_reg {largest subscript of |eqtb|} -@# -@d dimen(#)==new_eqtb_sc(scaled_base+(#)) -@d dimen_par(#)==new_eqtb_sc(dimen_base+(#)) {a scaled quantity} -@z -%--------------------------------------- -@x [17] m.250 l.5405 - Omega -for k:=dimen_base to eqtb_size do eqtb[k].sc:=0; -@y - -@ @p function init_eqtb_entry (p:pointer):memory_word; -var mw:memory_word; -begin - { Regions 1 and 2 } - if (p>=active_base) and - (p<=undefined_control_sequence) then begin - equiv_field(mw):=null; - eq_type_field(mw):=undefined_cs; - eq_level_field(mw):=level_zero; - end - { Region 3 } - else if (p>=glue_base) and - (p<=local_base+1) then begin - equiv_field(mw):=zero_glue; - eq_type_field(mw):=glue_ref; - eq_level_field(mw):=level_one; - end - { Region 4 } - else if (p>=par_shape_loc) and - (p<=toks_base+biggest_reg) then begin - equiv_field(mw):=null; - eq_type_field(mw):=undefined_cs; - eq_level_field(mw):=level_zero; - end - else if (p>=box_base) and - (p<=box_base+biggest_reg) then begin - equiv_field(mw):=null; - eq_type_field(mw):=box_ref; - eq_level_field(mw):=level_one; - end - else if (p>=cur_font_loc) and - (p<=math_font_base+math_font_biggest) then begin - equiv_field(mw):=null_font; - eq_type_field(mw):=data; - eq_level_field(mw):=level_one; - end - else if (p>=cat_code_base) and - (p<=cat_code_base+biggest_char) then begin - equiv_field(mw):=other_char; - eq_type_field(mw):=data; - eq_level_field(mw):=level_one; - end - else if (p>=lc_code_base) and - (p<=uc_code_base+biggest_char) then begin - equiv_field(mw):=0; - eq_type_field(mw):=data; - eq_level_field(mw):=level_one; - end - else if (p>=sf_code_base) and - (p<=sf_code_base+biggest_char) then begin - equiv_field(mw):=1000; - eq_type_field(mw):=data; - eq_level_field(mw):=level_one; - end - else if (p>=math_code_base) and - (p<=math_code_base+biggest_char) then begin - equiv_field(mw):=hi(p-math_code_base); - eq_type_field(mw):=data; - eq_level_field(mw):=level_one; - end - { Region 5 } - else if (p>=int_base) and (p<=del_code_base-1) then begin - setintzero(mw,0); - setintone(mw,0); - end - else if (p>=del_code_base) and (p<=del_code_base+biggest_char) then begin - setintzero(mw,-1); - setintone(mw,-1); - end - { Region 6 } - else if (p>=dimen_base) and (p<=eqtb_size) then begin - setintzero(mw,0); - setintone(mw,0); - end - else begin - equiv_field(mw):=null; - eq_type_field(mw):=undefined_cs; - eq_level_field(mw):=level_zero; - end; - init_eqtb_entry:=mw; -end; - -@z -%--------------------------------------- -@x [17] m.251 l.5411 - Omega -print_char("="); print_scaled(eqtb[n].sc); print("pt"); -@y -print_char("="); print_scaled(new_eqtb_sc(n)); print("pt"); -@z -%--------------------------------------- -@x [17] m.254 l.5435 - Omega -@ The last two regions of |eqtb| have fullword values instead of the -three fields |eq_level|, |eq_type|, and |equiv|. An |eq_type| is unnecessary, -but \TeX\ needs to store the |eq_level| information in another array -called |xeq_level|. - -@<Glob...@>= -@!eqtb:array[active_base..eqtb_size] of memory_word; -@!xeq_level:array[int_base..eqtb_size] of quarterword; -@y -@ The last two regions of |eqtb| have fullword values instead of the -three fields |eq_level|, |eq_type|, and |equiv|. An |eq_type| is unnecessary, -but \TeX\ needs to store the |eq_level| information in another array -called |xeq_level|. - -@d xeq_level(#) == new_xeq_level(eqtb_size+eqtb_size+#) -@d set_xeq_level(#) == set_new_eqtb_int(eqtb_size+eqtb_size+#) -@z -%--------------------------------------- -@x [17] m.255 l.5439 - Omega -for k:=int_base to eqtb_size do xeq_level[k]:=level_one; -@y -@z -%--------------------------------------- -@x [17] m.255 l.5446 - Omega -for q:=active_base to box_base+255 do -@y -for q:=active_base to box_base+biggest_reg do -@z -%--------------------------------------- -@x [18] m.256 l.5477 - Omega -@d next(#) == hash[#].lh {link for coalesced lists} -@d text(#) == hash[#].rh {string number for control sequence name} -@d hash_is_full == (hash_used=hash_base) {test if all positions are occupied} -@d font_id_text(#) == text(font_id_base+#) {a frozen font identifier's name} - -@<Glob...@>= -@!hash: array[hash_base..undefined_control_sequence-1] of two_halves; - {the hash table} -@y -@d hash_is_full == (hash_used=hash_base) {test if all positions are occupied} -@d font_id_text(#) == newtext(font_id_base+#) {a frozen font identifier's name} -@d newtext(#) == new_hash_text(eqtb_size+#) -@d newnext(#) == new_hash_next(eqtb_size+#) -@d settext(#) == set_hash_text(eqtb_size+#) -@d setnext(#) == set_hash_next(eqtb_size+#) - -@<Glob...@>= -@z -%--------------------------------------- -@x [18] m.257 l.5491 - Omega -next(hash_base):=0; text(hash_base):=0; -for k:=hash_base+1 to undefined_control_sequence-1 do hash[k]:=hash[hash_base]; -@y -@z -%--------------------------------------- -@x [18] m.258 l.5497 - Omega -hash_used:=frozen_control_sequence; {nothing is used} -cs_count:=0; -eq_type(frozen_dont_expand):=dont_expand; -text(frozen_dont_expand):="notexpanded:"; -@y -hash_used:=frozen_control_sequence; {nothing is used} -cs_count:=0; -set_eq_type(frozen_dont_expand,dont_expand); -settext(frozen_dont_expand,"notexpanded:"); -@z -%--------------------------------------- -@x [18] m.259 l.5514 - Omega -@!k:pointer; {index in |buffer| array} -begin @<Compute the hash code |h|@>; -p:=h+hash_base; {we start searching here; note that |0<=h<hash_prime|} -loop@+begin if text(p)>0 then if length(text(p))=l then - if str_eq_buf(text(p),j) then goto found; - if next(p)=0 then - begin if no_new_control_sequence then - p:=undefined_control_sequence - else @<Insert a new control sequence after |p|, then make - |p| point to it@>; - goto found; - end; - p:=next(p); - end; -found: id_lookup:=p; -@y -@!k:pointer; {index in |buffer| array} -@!newstring:integer; -begin @<Compute the hash code |h|@>; -p:=h+hash_base; {we start searching here; note that |0<=h<hash_prime|} -loop@+begin if newtext(p)>0 then if length(newtext(p))=l then - if str_eq_buf(newtext(p),j) then goto found; - if newnext(p)=0 then - begin if no_new_control_sequence then - p:=undefined_control_sequence - else @<Insert a new control sequence after |p|, then make - |p| point to it@>; - goto found; - end; - p:=newnext(p); - end; -found: id_lookup:=p; -@z -%--------------------------------------- -@x [18] m.260 l.5532 - Omega -begin if text(p)>0 then - begin repeat if hash_is_full then overflow("hash size",hash_size); -@:TeX capacity exceeded hash size}{\quad hash size@> - decr(hash_used); - until text(hash_used)=0; {search for an empty location in |hash|} - next(p):=hash_used; p:=hash_used; - end; -str_room(l); d:=cur_length; -while pool_ptr>str_start[str_ptr] do - begin decr(pool_ptr); str_pool[pool_ptr+l]:=str_pool[pool_ptr]; - end; {move current string up to make room for another} -for k:=j to j+l-1 do append_char(buffer[k]); -text(p):=make_string; pool_ptr:=pool_ptr+d; -@y -begin if newtext(p)>0 then - begin repeat if hash_is_full then overflow("hash size",hash_size); -@:TeX capacity exceeded hash size}{\quad hash size@> - decr(hash_used); - until newtext(hash_used)=0; {search for an empty location in |hash|} - setnext(p,hash_used); p:=hash_used; - end; -str_room(l); d:=cur_length; -while pool_ptr>str_start[str_ptr] do - begin decr(pool_ptr); str_pool[pool_ptr+l]:=str_pool[pool_ptr]; - end; {move current string up to make room for another} -for k:=j to j+l-1 do append_char(buffer[k]); -newstring:=make_string; -settext(p,newstring); pool_ptr:=pool_ptr+d; -@z -%--------------------------------------- -@x [18] m.262 l.5584 - Omega -else if (text(p)<0)or(text(p)>=str_ptr) then print_esc("NONEXISTENT.") -@.NONEXISTENT@> -else begin print_esc(text(p)); -@y -else if (newtext(p)<0)or(newtext(p)>=str_ptr) then print_esc("NONEXISTENT.") -@.NONEXISTENT@> -else begin print_esc(newtext(p)); -@z -%--------------------------------------- -@x [18] m.263 l.5601 - Omega -else print_esc(text(p)); -@y -else print_esc(newtext(p)); -@z -%--------------------------------------- -@x [18] m.264 l.5610 - Omega -@p @!init procedure primitive(@!s:str_number;@!c:quarterword;@!o:halfword); -var k:pool_pointer; {index into |str_pool|} -@!j:small_number; {index into |buffer|} -@!l:small_number; {length of the string} -begin if s<256 then cur_val:=s+single_base -else begin k:=str_start[s]; l:=str_start[s+1]-k; - {we will move |s| into the (empty) |buffer|} - for j:=0 to l-1 do buffer[j]:=so(str_pool[k+j]); - cur_val:=id_lookup(0,l); {|no_new_control_sequence| is |false|} - flush_string; text(cur_val):=s; {we don't want to have the string twice} - end; -eq_level(cur_val):=level_one; eq_type(cur_val):=c; equiv(cur_val):=o; -@y -@p @!init procedure primitive(@!s:str_number;@!c:quarterword;@!o:halfword); -var k:pool_pointer; {index into |str_pool|} -@!j:small_number; {index into |buffer|} -@!l:small_number; {length of the string} -begin if s<=biggest_char then cur_val:=s+single_base -else begin k:=str_start[s]; l:=str_start[s+1]-k; - {we will move |s| into the (empty) |buffer|} - for j:=0 to l-1 do buffer[j]:=so(str_pool[k+j]); - cur_val:=id_lookup(0,l); {|no_new_control_sequence| is |false|} - flush_string; settext(cur_val,s); {we don't want to have the string twice} - end; -set_eq_level(cur_val,level_one); set_eq_type(cur_val,c); -set_equiv(cur_val,o); -@z -%--------------------------------------- -@x [18] m.265 l.5648 - Omega -primitive("delimiter",delim_num,0);@/ -@!@:delimiter_}{\.{\\delimiter} primitive@> -@y -primitive("delimiter",delim_num,0);@/ -@!@:delimiter_}{\.{\\delimiter} primitive@> -primitive("odelimiter",delim_num,1);@/ -@!@:delimiter_}{\.{\\odelimiter} primitive@> -@z -%--------------------------------------- -@x [18] m.265 l.5656 - Omega -text(frozen_end_group):="endgroup"; eqtb[frozen_end_group]:=eqtb[cur_val];@/ -@y -settext(frozen_end_group,"endgroup"); -set_new_eqtb(frozen_end_group,new_eqtb(cur_val));@/ -@z -%--------------------------------------- -@x [18] m.265 l.5673 - Omega -primitive("mathaccent",math_accent,0);@/ -@!@:math_accent_}{\.{\\mathaccent} primitive@> -primitive("mathchar",math_char_num,0);@/ -@!@:math_char_}{\.{\\mathchar} primitive@> -@y -primitive("mathaccent",math_accent,0);@/ -@!@:math_accent_}{\.{\\mathaccent} primitive@> -primitive("mathchar",math_char_num,0);@/ -@!@:math_char_}{\.{\\mathchar} primitive@> -primitive("omathaccent",math_accent,1);@/ -@!@:math_accent_}{\.{\\omathaccent} primitive@> -primitive("omathchar",math_char_num,1);@/ -@!@:math_char_}{\.{\\omathchar} primitive@> -@z -%--------------------------------------- -@x [18] m.265 l.5697 - Omega -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -@y -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -primitive("oradical",radical,1);@/ -@!@:radical_}{\.{\\oradical} primitive@> -@z -%--------------------------------------- -@x [18] m.265 l.5701 - Omega -primitive("relax",relax,256); {cf.\ |scan_file_name|} -@!@:relax_}{\.{\\relax} primitive@> -text(frozen_relax):="relax"; eqtb[frozen_relax]:=eqtb[cur_val];@/ -@y -primitive("relax",relax,too_big_char); {cf.\ |scan_file_name|} -@!@:relax_}{\.{\\relax} primitive@> -settext(frozen_relax,"relax"); -set_new_eqtb(frozen_relax,new_eqtb(cur_val));@/ -@z -%--------------------------------------- -@x [19] m.276 l.5951 - Omega -else begin save_stack[save_ptr]:=eqtb[p]; incr(save_ptr); -@y -else begin save_stack[save_ptr]:=new_eqtb(p); incr(save_ptr); -@z -%--------------------------------------- -@x [19] m.277 l.5967 - Omega -begin if eq_level(p)=cur_level then eq_destroy(eqtb[p]) -else if cur_level>level_one then eq_save(p,eq_level(p)); -eq_level(p):=cur_level; eq_type(p):=t; equiv(p):=e; -@y -begin if eq_level(p)=cur_level then eq_destroy(new_eqtb(p)) -else if cur_level>level_one then eq_save(p,eq_level(p)); -set_eq_level(p,cur_level); set_eq_type(p,t); set_equiv(p,e); -@z -%--------------------------------------- -@x [19] m.278 l.5980 - Omega -@p procedure eq_word_define(@!p:pointer;@!w:integer); -begin if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; -end; -@y -@p procedure eq_word_define(@!p:pointer;@!w:integer); -begin if xeq_level(p)<>cur_level then - begin eq_save(p,xeq_level(p)); set_xeq_level(p,cur_level); - end; -set_new_eqtb_int(p,w); -end; - -procedure del_eq_word_define(@!p:pointer;@!w,wone:integer); -begin if xeq_level(p)<>cur_level then - begin eq_save(p,xeq_level(p)); set_xeq_level(p,cur_level); - end; -set_equiv(p,w); set_equiv1(p,wone); -end; - -@z -%--------------------------------------- -@x [19] m.279 l.5990 - Omega -begin eq_destroy(eqtb[p]); -eq_level(p):=level_one; eq_type(p):=t; equiv(p):=e; -end; -@# -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -@y -begin eq_destroy(new_eqtb(p)); -set_eq_level(p,level_one); set_eq_type(p,t); set_equiv(p,e); -end; -@# -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin set_new_eqtb_int(p,w); set_xeq_level(p,level_one); -end; - -procedure del_geq_word_define(@!p:pointer;@!w,wone:integer); - {global |del_eq_word_define|} -begin set_equiv(p,w); set_equiv1(p,wone); set_xeq_level(p,level_one); -end; -@z -%--------------------------------------- -@x [19] m.282 l.6036 - Omega - else save_stack[save_ptr]:=eqtb[undefined_control_sequence]; -@y - else save_stack[save_ptr]:=new_eqtb(undefined_control_sequence); -@z -%--------------------------------------- -@x [19] m.283 l.6056 - Omega - else begin eq_destroy(eqtb[p]); {destroy the current value} - eqtb[p]:=save_stack[save_ptr]; {restore the saved value} - @!stat if tracing_restores>0 then restore_trace(p,"restoring");@+tats@;@/ - end -else if xeq_level[p]<>level_one then - begin eqtb[p]:=save_stack[save_ptr]; xeq_level[p]:=l; -@y - else begin eq_destroy(new_eqtb(p)); {destroy the current value} - set_new_eqtb(p,save_stack[save_ptr]); {restore the saved value} - @!stat if tracing_restores>0 then restore_trace(p,"restoring");@+tats@;@/ - end -else if xeq_level(p)<>level_one then - begin set_new_eqtb(p,save_stack[save_ptr]); set_xeq_level(p,l); -@z -%--------------------------------------- -@x [20] m.289 l.6129 - Omega -number $2^8m+c$; the command code is in the range |1<=m<=14|. (2)~A control -sequence whose |eqtb| address is |p| is represented as the number -|cs_token_flag+p|. Here |cs_token_flag=@t$2^{12}-1$@>| is larger than -@y -number $2^16m+c$; the command code is in the range |1<=m<=14|. (2)~A control -sequence whose |eqtb| address is |p| is represented as the number -|cs_token_flag+p|. Here |cs_token_flag=@t$2^{20}-1$@>| is larger than -@z -%--------------------------------------- -@x [20] m.289 l.6142 - Omega -@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} -@d left_brace_token=@'0400 {$2^8\cdot|left_brace|$} -@d left_brace_limit=@'1000 {$2^8\cdot(|left_brace|+1)$} -@d right_brace_token=@'1000 {$2^8\cdot|right_brace|$} -@d right_brace_limit=@'1400 {$2^8\cdot(|right_brace|+1)$} -@d math_shift_token=@'1400 {$2^8\cdot|math_shift|$} -@d tab_token=@'2000 {$2^8\cdot|tab_mark|$} -@d out_param_token=@'2400 {$2^8\cdot|out_param|$} -@d space_token=@'5040 {$2^8\cdot|spacer|+|" "|$} -@d letter_token=@'5400 {$2^8\cdot|letter|$} -@d other_token=@'6000 {$2^8\cdot|other_char|$} -@d match_token=@'6400 {$2^8\cdot|match|$} -@d end_match_token=@'7000 {$2^8\cdot|end_match|$} -@y -@d cs_token_flag=@"FFFFF {amount added to the |eqtb| location in a - token that stands for a control sequence; is a multiple of~65536, less~1} -@d max_char_val=@"10000 {to separate char and command code} -@d left_brace_token=@"10000 {$2^16\cdot|left_brace|$} -@d left_brace_limit=@"20000 {$2^16\cdot(|left_brace|+1)$} -@d right_brace_token=@"20000 {$2^16\cdot|right_brace|$} -@d right_brace_limit=@"30000 {$2^16\cdot(|right_brace|+1)$} -@d math_shift_token=@"30000 {$2^16\cdot|math_shift|$} -@d tab_token=@"40000 {$2^16\cdot|tab_mark|$} -@d out_param_token=@"50000 {$2^16\cdot|out_param|$} -@d space_token=@"A0020 {$2^16\cdot|spacer|+|" "|$} -@d letter_token=@"B0000 {$2^16\cdot|letter|$} -@d other_token=@"C0000 {$2^16\cdot|other_char|$} -@d match_token=@"D0000 {$2^16\cdot|match|$} -@d end_match_token=@"E0000 {$2^16\cdot|end_match|$} -@z -%--------------------------------------- -@x [20] m.293 l.6256 - Omega -else begin m:=info(p) div @'400; c:=info(p) mod @'400; -@y -else begin m:=info(p) div max_char_val; c:=info(p) mod max_char_val; -@z -%--------------------------------------- -@x [21] m.298 l.6375 - Omega -procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); -@y -procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); -@z -%--------------------------------------- -@x [24] m.334 l.7110 - Omega -primitive("par",par_end,256); {cf.\ |scan_file_name|} -@y -primitive("par",par_end,too_big_char); {cf. |scan_file_name|} -@z -%--------------------------------------- -@x [24] m.357 l.7462 - Omega - else begin cur_cmd:=t div @'400; cur_chr:=t mod @'400; -@y - else begin cur_cmd:=t div max_char_val; cur_chr:=t mod max_char_val; -@z -%--------------------------------------- -@x [24] m.358 l.7479 - Omega -@d no_expand_flag=257 {this characterizes a special variant of |relax|} -@y -@d no_expand_flag=special_char {this characterizes a special variant of |relax|} -@z -%--------------------------------------- -@x [24] m.365 l.7606 - Omega -if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr -@y -if cur_cs=0 then cur_tok:=(cur_cmd*max_char_val)+cur_chr -@z -%--------------------------------------- -@x [25] m.374 l.7728 - Omega - begin eq_define(cur_cs,relax,256); {N.B.: The |save_stack| might change} -@y - begin eq_define(cur_cs,relax,too_big_char); - {N.B.: The |save_stack| might change} -@z -%--------------------------------------- -@x [25] m.374 l.7750 - Omega - buffer[j]:=info(p) mod @'400; incr(j); p:=link(p); -@y - buffer[j]:=info(p) mod max_char_val; incr(j); p:=link(p); -@z -%--------------------------------------- -@x [25] m.380 l.7812 - Omega -done: if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr -@y -done: if cur_cs=0 then cur_tok:=(cur_cmd*max_char_val)+cur_chr -@z -%--------------------------------------- -@x [25] m.381 l.7824 - Omega -if cur_cs=0 then cur_tok:=(cur_cmd*@'400)+cur_chr -@y -if cur_cs=0 then cur_tok:=(cur_cmd*max_char_val)+cur_chr -@z -%--------------------------------------- -@x [25] m.391 l.7985 - Omega -if (info(r)>match_token+255)or(info(r)<match_token) then s:=null -@y -if (info(r)>=end_match_token)or(info(r)<match_token) then s:=null -@z -%--------------------------------------- -@x [26] m.407 l.8161 - Omega -@ The |scan_left_brace| routine is called when a left brace is supposed to be -the next non-blank token. (The term ``left brace'' means, more precisely, -a character whose catcode is |left_brace|.) \TeX\ allows \.{\\relax} to -appear before the |left_brace|. - -@p procedure scan_left_brace; {reads a mandatory |left_brace|} -begin @<Get the next non-blank non-relax non-call token@>; -if cur_cmd<>left_brace then - begin print_err("Missing { inserted"); -@.Missing \{ inserted@> - help4("A left brace was mandatory here, so I've put one in.")@/ - ("You might want to delete and/or insert some corrections")@/ - ("so that I will find a matching right brace soon.")@/ - ("(If you're confused by all this, try typing `I}' now.)"); - back_error; cur_tok:=left_brace_token+"{"; cur_cmd:=left_brace; - cur_chr:="{"; incr(align_state); - end; -end; -@y -@ The |scan_left_brace| routine is called when a left brace is supposed to be -the next non-blank token. (The term ``left brace'' means, more precisely, -a character whose catcode is |left_brace|.) \TeX\ allows \.{\\relax} to -appear before the |left_brace|. - -@p procedure scan_left_brace; {reads a mandatory |left_brace|} -begin @<Get the next non-blank non-relax non-call token@>; -if cur_cmd<>left_brace then - begin print_err("Missing { inserted"); -@.Missing \{ inserted@> - help4("A left brace was mandatory here, so I've put one in.")@/ - ("You might want to delete and/or insert some corrections")@/ - ("so that I will find a matching right brace soon.")@/ - ("(If you're confused by all this, try typing `I}' now.)"); - back_error; cur_tok:=left_brace_token+"{"; cur_cmd:=left_brace; - cur_chr:="{"; incr(align_state); - end; -end; - -@ The |scan_right_brace| routine is called when a right brace is supposed to be -the next non-blank token. (The term ``right brace'' means, more precisely, -a character whose catcode is |right_brace|.) \TeX\ allows \.{\\relax} to -appear before the |right_brace|. - -@p procedure scan_right_brace; {reads a mandatory |right_brace|} -begin @<Get the next non-blank non-relax non-call token@>; -if cur_cmd<>right_brace then - begin print_err("Missing { inserted"); -@.Missing \{ inserted@> - help4("A right brace was mandatory here, so I've put one in.")@/ - ("You might want to delete and/or insert some corrections")@/ - ("so that I will find a matching right brace soon.")@/ - ("(If you're confused by all this, try typing `I}' now.)"); - back_error; cur_tok:=right_brace_token+"}"; cur_cmd:=right_brace; - cur_chr:="}"; incr(align_state); - end; -end; -@z -%--------------------------------------- -@x [26] m.410 l.8293 - Omega -@!cur_val:integer; {value returned by numeric scanners} -@y -@!cur_val:integer; {value returned by numeric scanners} -@z -%--------------------------------------- -@x [26] m.413 l.8335 - Omega -assign_int: scanned_result(eqtb[m].int)(int_val); -assign_dimen: scanned_result(eqtb[m].sc)(dimen_val); -@y -assign_int: scanned_result(new_eqtb_int(m))(int_val); -assign_dimen: scanned_result(new_eqtb_sc(m))(dimen_val); -@z -%--------------------------------------- -@x [26] m.413 l.8345 - Omega -char_given,math_given: scanned_result(cur_chr)(int_val); -@y -char_given,math_given,omath_given: scanned_result(cur_chr)(int_val); -@z -%--------------------------------------- -@x [26] m.414 l.8356 - Omega -@ @<Fetch a character code from some table@>= -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 -@ @<Fetch a character code from some table@>= -begin scan_char_num; -if m=math_code_base then begin - cur_val1:=ho(math_code(cur_val)); - if ((cur_val1 div @"1000000)>8) or - (((cur_val1 mod @"1000000) div @"10000)>15) or - ((cur_val1 mod @"10000)>255) then - begin print_err("Extended mathchar used as mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and ""7FFF.")@/ - ("I changed this one to zero."); int_error(cur_val1); cur_val1:=0; - end; - cur_val1:=((cur_val1 div @"1000000)*@"1000) + - (((cur_val1 mod @"1000000) div @"10000)*@"100) + - (cur_val1 mod @"10000); - scanned_result(cur_val1)(int_val) - end -else if m=(math_code_base+256) 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(new_eqtb_int(m+cur_val))(int_val); -@z -%--------------------------------------- -@x [26] m.433 l.8593 - Omega -procedure scan_eight_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>255) then - begin print_err("Bad register code"); -@.Bad register code@> - help2("A register number must be between 0 and 255.")@/ -@y -procedure scan_eight_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>biggest_reg) then - begin print_err("Bad register code"); -@.Bad register code@> - help2("A register number must be between 0 and 65535.")@/ -@z -%--------------------------------------- -@x [26] m.434 l.8604 - Omega -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.")@/ -@y -procedure scan_char_num; -begin scan_int; -if (cur_val<0)or(cur_val>biggest_char) then - begin print_err("Bad character code"); -@.Bad character code@> - help2("A character number must be between 0 and 65535.")@/ -@z -%--------------------------------------- -@x [26] m.435 l.8618 - Omega -procedure scan_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>15) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 15,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>15) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 15,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; - -procedure scan_big_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>255) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 255,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@z -%--------------------------------------- -@x [26] m.436 l.8629 - Omega -procedure scan_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_real_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; - -procedure scan_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -cur_val := ((cur_val div @"1000) * @"1000000) + - (((cur_val mod @"1000) div @"100) * @"10000) + - (cur_val mod @"100); -end; - -procedure scan_big_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@"7FFFFFF) then - begin print_err("Bad extended mathchar"); -@.Bad mathchar@> - help2("An extended mathchar number must be between 0 and ""7FFFFFF.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@z -%--------------------------------------- -@x [26] m.437 l.8640 - Omega -procedure scan_twenty_seven_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_twenty_seven_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -cur_val1 := (((cur_val mod @"1000) div @"100) * @"10000) + - (cur_val mod @"100); -cur_val := cur_val div @"1000; -cur_val := ((cur_val div @"1000) * @"1000000) + - (((cur_val mod @"1000) div @"100) * @"10000) + - (cur_val mod @"100); -end; - -procedure scan_fifty_one_bit_int; -var iiii:integer; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter (first part) must be between 0 and 2^{27}-1.") - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -iiii:=cur_val; -scan_int; -if (cur_val<0)or(cur_val>@"FFFFFF) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> -help2("A numeric delimiter (second part) must be between 0 and 2^{24}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -cur_val1:=cur_val; -cur_val:=iiii; -end; - -procedure scan_string_argument; -var s:integer; -begin -scan_left_brace; -get_x_token; -while (cur_cmd<>right_brace) do - begin - if (cur_cmd=letter) or (cur_cmd=other_char) then begin - str_room(1); append_char(cur_chr); - end - else if (cur_cmd=spacer) then begin - str_room(1); append_char(" "); - end - else begin - print_nl("Bad token appearing in string argument"); - end; - get_x_token; - end; -s:=make_string; -if str_eq_str("mi",s) then s:="mi"; -if str_eq_str("mo",s) then s:="mo"; -if str_eq_str("mn",s) then s:="mn"; -cur_val:=s; -end; -@z -%--------------------------------------- -@x [26] m.442 l.8720 - Omega -if cur_val>255 then - begin print_err("Improper alphabetic constant"); -@y -if cur_val>biggest_char then - begin print_err("Improper alphabetic constant"); -@z -%--------------------------------------- -@x [27] m.468 l.9200 - Omega -@d job_name_code=5 {command code for \.{\\jobname}} -@y -@d omega_code=5 {command code for \.{\\OmegaVersion}} -@d job_name_code=6 {command code for \.{\\jobname}} -@z -%--------------------------------------- -@x [27] m.468 l.9200 - Omega -primitive("jobname",convert,job_name_code);@/ -@!@:job_name_}{\.{\\jobname} primitive@> -@y -primitive("OmegaVersion",convert,omega_code);@/ -@!@:omega_version_}{\.{\\OmegaVersion} primitive@> -primitive("jobname",convert,job_name_code);@/ -@!@:job_name_}{\.{\\jobname} primitive@> -@z -%--------------------------------------- -@x [27] m.469 l.9223 - Omega - othercases print_esc("jobname") -@y - omega_code: print_esc("OmegaVersion"); - othercases print_esc("jobname") -@z -%--------------------------------------- -@x [27] m.471 l.9248 - Omega -job_name_code: if job_name=0 then open_log_file; -@y -omega_code:; -job_name_code: if job_name=0 then open_log_file; -@z -%--------------------------------------- -@x [27] m.472 l.9258 - Omega -job_name_code: print(job_name); -@y -omega_code: print("1.23.2.3"); -job_name_code: print(job_name); -@z -%--------------------------------------- -@x [28] m.491 l.9610 - Omega -text(frozen_fi):="fi"; eqtb[frozen_fi]:=eqtb[cur_val]; -@y -settext(frozen_fi,"fi"); set_new_eqtb(frozen_fi,new_eqtb(cur_val)); -@z -%--------------------------------------- -@x [28] m.506 l.9802 - Omega -if (cur_cmd>active_char)or(cur_chr>255) then {not a character} - begin m:=relax; n:=256; -@y -if (cur_cmd>active_char)or(cur_chr>biggest_char) then {not a character} - begin m:=relax; n:=too_big_char; -@z -%--------------------------------------- -@x [28] m.506 l.9808 - Omega -if (cur_cmd>active_char)or(cur_chr>255) then - begin cur_cmd:=relax; cur_chr:=256; -@y -if (cur_cmd>active_char)or(cur_chr>biggest_char) then - begin cur_cmd:=relax; cur_chr:=too_big_char; -@z -%--------------------------------------- -@x [29] m.526 l.10178 - Omega -loop@+begin if (cur_cmd>other_char)or(cur_chr>255) then {not a character} -@y -loop@+begin if (cur_cmd>other_char)or(cur_chr>biggest_char) then - {not a character} -@z -%--------------------------------------- -@x [37] m.780 l.15354 - Omega -@d span_code=256 {distinct from any character} -@d cr_code=257 {distinct from |span_code| and from any character} -@y -@d span_code=special_char {distinct from any character} -@d cr_code=span_code+1 {distinct from |span_code| and from any character} -@z -%--------------------------------------- -@x [37] m.780 l.15364 - Omega -text(frozen_cr):="cr"; eqtb[frozen_cr]:=eqtb[cur_val];@/ -primitive("crcr",car_ret,cr_cr_code); -@!@:cr_cr_}{\.{\\crcr} primitive@> -text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate"; -eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list; -eq_level(frozen_endv):=level_one;@/ -eqtb[frozen_end_template]:=eqtb[frozen_endv]; -eq_type(frozen_end_template):=end_template; -@y -settext(frozen_cr,"cr"); -set_new_eqtb(frozen_cr,new_eqtb(cur_val));@/ -primitive("crcr",car_ret,cr_cr_code); -@!@:cr_cr_}{\.{\\crcr} primitive@> -settext(frozen_end_template,"endtemplate"); settext(frozen_endv,"endtemplate"); -set_eq_type(frozen_endv,endv); set_equiv(frozen_endv,null_list); -set_eq_level(frozen_endv,level_one);@/ -set_new_eqtb(frozen_end_template,new_eqtb(frozen_endv)); -set_eq_type(frozen_end_template,end_template); -@z -%--------------------------------------- -@x [37] m.798 l.15651 - Omega -if n>max_quarterword then confusion("256 spans"); {this can happen, but won't} -@^system dependencies@> -@:this can't happen 256 spans}{\quad 256 spans@> -@y -if n>max_quarterword then confusion("too many spans"); - {this can happen, but won't} -@^system dependencies@> -@:this can't happen too many spans}{\quad too many spans@> -@z -%--------------------------------------- -@x [37] m.804 l.15794 - Omega - overfull_rule:=0; {prevent rule from being packaged} - p:=hpack(preamble,saved(1),saved(0)); overfull_rule:=rule_save; -@y - set_new_eqtb_sc(dimen_base+overfull_rule_code,0); - {prevent rule from being packaged} - p:=hpack(preamble,saved(1),saved(0)); - set_new_eqtb_sc(dimen_base+overfull_rule_code,rule_save); -@z -%--------------------------------------- -@x [37] m.827 l.16255 - Omega -check_shrinkage(left_skip); check_shrinkage(right_skip);@/ -@y -if (shrink_order(left_skip)<>normal)and(shrink(left_skip)<>0) then - begin set_equiv(glue_base+left_skip_code,finite_shrink(left_skip)); - end; -if (shrink_order(right_skip)<>normal)and(shrink(right_skip)<>0) then - begin set_equiv(glue_base+right_skip_code,finite_shrink(right_skip)); - end; -@z -%--------------------------------------- -@x [40] m.891 l.17434 - Omega -$c_1$ will be treated as nonletters. The |hyphen_char| for that font -must be between 0 and 255, otherwise hyphenation will not be attempted. -@y -$c_1$ will be treated as nonletters. The |hyphen_char| for that font must -be between 0 and |biggest_char|, otherwise hyphenation will not be attempted. -@z -%--------------------------------------- -@x [40] m.892 l.17469 - Omega -@!hc:array[0..65] of 0..256; {word to be hyphenated} -@!hn:small_number; {the number of positions occupied in |hc|} -@!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result} -@!hf:internal_font_number; {font number of the letters in |hc|} -@!hu:array[0..63] of 0..256; {like |hc|, before conversion to lowercase} -@!hyf_char:integer; {hyphen character of the relevant font} -@!cur_lang,@!init_cur_lang:ASCII_code; {current hyphenation table of interest} -@!l_hyf,@!r_hyf,@!init_l_hyf,@!init_r_hyf:integer; {limits on fragment sizes} -@!hyf_bchar:halfword; {boundary character after $c_n$} -@y -@!hc:array[0..65] of 0..too_big_char; {word to be hyphenated} -@!hn:small_number; {the number of positions occupied in |hc|} -@!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result} -@!hf:internal_font_number; {font number of the letters in |hc|} -@!hu:array[0..63] of 0..too_big_char; - {like |hc|, before conversion to lowercase} -@!hyf_char:integer; {hyphen character of the relevant font} -@!cur_lang,@!init_cur_lang:0..biggest_lang; - {current hyphenation table of interest} -@!l_hyf,@!r_hyf,@!init_l_hyf,@!init_r_hyf:integer; {limits on fragment sizes} -@!hyf_bchar:halfword; {boundary character after $c_n$} -@!max_hyph_char:integer; - -@ @<Set initial values of key variables@>= -max_hyph_char:=too_big_lang; - -@z -%--------------------------------------- -@x [40] m.893 l.17483 - Omega -@!c:0..255; {character being considered for hyphenation} -@y -@!c:ASCII_code; {character being considered for hyphenation} -@z -%--------------------------------------- -@x [40] m.896 l.17534 - Omega -if hyf_char>255 then goto done1; -@y -if hyf_char>biggest_char then goto done1; -@z -%--------------------------------------- -@x [40] m.897 l.17546 - Omega - if lc_code(c)=0 then goto done3; -@y - if lc_code(c)=0 then goto done3; - if lc_code(c)>max_hyph_char then goto done3; -@z -%--------------------------------------- -@x [40] m.898 l.17572 - Omega - if lc_code(c)=0 then goto done3; -@y - if lc_code(c)=0 then goto done3; - if lc_code(c)>max_hyph_char then goto done3; -@z -%--------------------------------------- -@x [41] m.903 l.17648 - Omega - begin hu[0]:=256; init_lig:=false; -@y - begin hu[0]:=max_hyph_char; init_lig:=false; -@z -%--------------------------------------- -@x [41] m.903 l.17660 - Omega -found2: s:=ha; j:=0; hu[0]:=256; init_lig:=false; init_list:=null; -@y -found2: s:=ha; j:=0; hu[0]:=max_hyph_char; init_lig:=false; init_list:=null; -@z -%--------------------------------------- -@x [41] m.905 l.17707 - Omega -getting the input $x_j\ldots x_n$ from the |hu| array. If $x_j=256$, -we consider $x_j$ to be an implicit left boundary character; in this -case |j| must be strictly less than~|n|. There is a -parameter |bchar|, which is either 256 or an implicit right boundary character -@y -getting the input $x_j\ldots x_n$ from the |hu| array. If $x_j=|max_hyph_char|$, -we consider $x_j$ to be an implicit left boundary character; in this -case |j| must be strictly less than~|n|. There is a -parameter |bchar|, which is either |max_hyph_char| -or an implicit right boundary character -@z -%--------------------------------------- -@x [41] m.916 l.17980 - Omega - begin decr(l); c:=hu[l]; c_loc:=l; hu[l]:=256; -@y - begin decr(l); c:=hu[l]; c_loc:=l; hu[l]:=max_hyph_char; -@z -%--------------------------------------- -@x [42] m.921 l.18079 - Omega -@!op_start:array[ASCII_code] of 0..trie_op_size; {offset for current language} -@y -@!op_start:array[0..biggest_lang] of 0..trie_op_size; - {offset for current language} -@z -%--------------------------------------- -@x [42] m.923 l.18086 - Omega -hyphenation algorithm is quite short. In the following code we set |hc[hn+2]| -to the impossible value 256, in order to guarantee that |hc[hn+3]| will -@y -hyphenation algorithm is quite short. In the following code we set |hc[hn+2]| to -the impossible value |max_hyph_char|, in order to guarantee that |hc[hn+3]| will -@z -%--------------------------------------- -@x [42] m.923 l.18095 - Omega -hc[0]:=0; hc[hn+1]:=0; hc[hn+2]:=256; {insert delimiters} -@y -hc[0]:=0; hc[hn+1]:=0; hc[hn+2]:=max_hyph_char; {insert delimiters} -@z -%--------------------------------------- -@x [42] m.934 l.18206 - Omega -@d set_cur_lang==if language<=0 then cur_lang:=0 - else if language>255 then cur_lang:=0 -@y -@d set_cur_lang==if language<=0 then cur_lang:=0 - else if language>biggest_lang then cur_lang:=0 -@z -%--------------------------------------- -@x [43] m.943 l.18348 - Omega -@!trie_used:array[ASCII_code] of quarterword; - {largest opcode used so far for this language} -@!trie_op_lang:array[1..trie_op_size] of ASCII_code; -@y -@!trie_used:array[0..biggest_lang] of quarterword; - {largest opcode used so far for this language} -@!trie_op_lang:array[1..trie_op_size] of 0..biggest_lang; -@z -%--------------------------------------- -@x [43] m.945 l.18400 - Omega -for j:=1 to 255 do op_start[j]:=op_start[j-1]+qo(trie_used[j-1]); -@y -for j:=1 to biggest_lang do op_start[j]:=op_start[j-1]+qo(trie_used[j-1]); -@z -%--------------------------------------- -@x [43] m.946 l.18416 - Omega -for k:=0 to 255 do trie_used[k]:=min_quarterword; -@y -for k:=0 to biggest_lang do trie_used[k]:=min_quarterword; -@z -%--------------------------------------- -@x [43] m.947 l.18438 - Omega -@!init @!trie_c:packed array[trie_pointer] of packed_ASCII_code; -@y -@!init @!trie_c:packed array[trie_pointer] of ASCII_code; -@z -%--------------------------------------- -@x [43] m.952 l.18551 - Omega -for p:=0 to 255 do trie_min[p]:=p+1; -@y -for p:=0 to biggest_char do trie_min[p]:=p+1; -@z -%--------------------------------------- -@x [43] m.953 l.18569 - Omega -@!ll:1..256; {upper limit of |trie_min| updating} -@y -@!ll:1..too_big_char; {upper limit of |trie_min| updating} -@z -%--------------------------------------- -@x [43] m.953 l.18573 - Omega - @<Ensure that |trie_max>=h+256|@>; -@y - @<Ensure that |trie_max>=h+max_hyph_char|@>; -@z -%--------------------------------------- -@x [43] m.954 l.18582 - Omega -@ By making sure that |trie_max| is at least |h+256|, we can be sure that -|trie_max>z|, since |h=z-c|. It follows that location |trie_max| will -never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|. - -@<Ensure that |trie_max>=h+256|@>= -if trie_max<h+256 then - begin if trie_size<=h+256 then overflow("pattern memory",trie_size); -@y -@ By making sure that |trie_max| is at least |h+max_hyph_char|, -we can be sure that -|trie_max>z|, since |h=z-c|. It follows that location |trie_max| will -never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|. - -@<Ensure that |trie_max>=h+max_hyph_char|@>= -if trie_max<h+max_hyph_char then - begin if trie_size<=h+max_hyph_char then overflow("pattern memory",trie_size); -@z -%--------------------------------------- -@x [43] m.954 l.18592 - Omega - until trie_max=h+256; -@y - until trie_max=h+max_hyph_char; -@z -%--------------------------------------- -@x [43] m.956 l.18607 - Omega -if l<256 then - begin if z<256 then ll:=z @+else ll:=256; -@y -if l<max_hyph_char then - begin if z<max_hyph_char then ll:=z @+else ll:=max_hyph_char; -@z -%--------------------------------------- -@x [43] m.958 l.18637 - Omega -if trie_root=0 then {no patterns were given} - begin for r:=0 to 256 do trie[r]:=h; - trie_max:=256; -@y -if trie_root=0 then {no patterns were given} - begin for r:=0 to max_hyph_char do trie[r]:=h; - trie_max:=max_hyph_char; -@z -%--------------------------------------- -@x [43] m.962 l.18714 - Omega -@ @<Append a new letter or a hyphen level@>= -if digit_sensed or(cur_chr<"0")or(cur_chr>"9") then - begin if cur_chr="." then cur_chr:=0 {edge-of-word delimiter} - else begin cur_chr:=lc_code(cur_chr); - if cur_chr=0 then - begin print_err("Nonletter"); -@.Nonletter@> - help1("(See Appendix H.)"); error; - end; - end; -@y -@ @<Append a new letter or a hyphen level@>= -if digit_sensed or(cur_chr<"0")or(cur_chr>"9") then - begin if cur_chr="." then cur_chr:=0 {edge-of-word delimiter} - else begin cur_chr:=lc_code(cur_chr); - if cur_chr=0 then - begin print_err("Nonletter"); -@.Nonletter@> - help1("(See Appendix H.)"); error; - end; - end; - if cur_chr>max_hyph_char then max_hyph_char:=cur_chr; -@z -%--------------------------------------- -@x [43] m.966 l. - Omega -procedure init_trie; -var @!p:trie_pointer; {pointer for initialization} -@!j,@!k,@!t:integer; {all-purpose registers for initialization} -@!r,@!s:trie_pointer; {used to clean up the packed |trie|} -@!h:two_halves; {template used to zero out |trie|'s holes} -begin @<Get ready to compress the trie@>; -@y -procedure init_trie; -var @!p:trie_pointer; {pointer for initialization} -@!j,@!k,@!t:integer; {all-purpose registers for initialization} -@!r,@!s:trie_pointer; {used to clean up the packed |trie|} -@!h:two_halves; {template used to zero out |trie|'s holes} -begin -incr(max_hyph_char); -@<Get ready to compress the trie@>; -@z -%--------------------------------------- -@x [44] m.977 l.19008 - Omega -if q=null then box(n):=null {the |eq_level| of the box stays the same} -else box(n):=vpack(q,natural); -@y -if q=null then set_equiv(box_base+n,null) - {the |eq_level| of the box stays the same} -else set_equiv(box_base+n,vpack(q,natural)); -@z -%--------------------------------------- -@x [45] m.992 l.24928 - Omega -flush_node_list(box(n)); box(n):=null; -@y -flush_node_list(box(n)); set_equiv(box_base+n,null); -@z -%--------------------------------------- -@x [45] m.994 l.19364 - Omega -@!n:min_quarterword..255; {insertion box number} -@y -@!n:min_quarterword..biggest_reg; {insertion box number} -@z -%--------------------------------------- -@x [45] m.1012 l.19655 - Omega -@!n:min_quarterword..255; {insertion box number} -@y -@!n:min_quarterword..biggest_reg; {insertion box number} -@z -%--------------------------------------- -@x [45] m.1014 l.19710 - Omega -split_top_skip:=save_split_top_skip; -@y -set_equiv(glue_base+split_top_skip_code,save_split_top_skip); -@z -%--------------------------------------- -@x [45] m.1017 l.19753 - Omega -save_vbadness:=vbadness; vbadness:=inf_bad; -save_vfuzz:=vfuzz; vfuzz:=max_dimen; {inhibit error messages} -box(255):=vpackage(link(page_head),best_size,exactly,page_max_depth); -vbadness:=save_vbadness; vfuzz:=save_vfuzz; -@y -save_vbadness:=vbadness; -set_new_eqtb_int(int_base+vbadness_code,inf_bad); -save_vfuzz:=vfuzz; -set_new_eqtb_sc(dimen_base+vfuzz_code,max_dimen); - {inhibit error messages} -set_equiv(box_base+255, - vpackage(link(page_head),best_size,exactly,page_max_depth)); -set_new_eqtb_int(int_base+vbadness_code,save_vbadness); -set_new_eqtb_sc(dimen_base+vfuzz_code,save_vfuzz); -@z -%--------------------------------------- -@x [45] m.1018 l.19774 - Omega - if box(n)=null then box(n):=new_null_box; -@y - if box(n)=null then set_equiv(box_base+n,new_null_box); -@z -%--------------------------------------- -@x [45] m.1021 l.19817 - Omega - split_top_skip:=split_top_ptr(p); - ins_ptr(p):=prune_page_top(broken_ptr(r)); - if ins_ptr(p)<>null then - begin temp_ptr:=vpack(ins_ptr(p),natural); - height(p):=height(temp_ptr)+depth(temp_ptr); - free_node(temp_ptr,box_node_size); wait:=true; - end; - end; -best_ins_ptr(r):=null; -n:=qo(subtype(r)); -temp_ptr:=list_ptr(box(n)); -free_node(box(n),box_node_size); -box(n):=vpack(temp_ptr,natural); -@y - set_equiv(glue_base+split_top_skip_code,split_top_ptr(p)); - ins_ptr(p):=prune_page_top(broken_ptr(r)); - if ins_ptr(p)<>null then - begin temp_ptr:=vpack(ins_ptr(p),natural); - height(p):=height(temp_ptr)+depth(temp_ptr); - free_node(temp_ptr,box_node_size); wait:=true; - end; - end; -best_ins_ptr(r):=null; -n:=qo(subtype(r)); -temp_ptr:=list_ptr(box(n)); -free_node(box(n),box_node_size); -set_equiv(box_base+n,vpack(temp_ptr,natural)); -@z -%--------------------------------------- -@x [45] m.1023 l.19854 - Omega -ship_out(box(255)); box(255):=null; -@y -ship_out(box(255)); set_equiv(box_base+255,null); -@z -%--------------------------------------- -@x [46] m.1046 l.20339 - Omega -non_math(math_given), non_math(math_comp), non_math(delim_num), -@y -non_math(math_given), non_math(omath_given), -non_math(math_comp), non_math(delim_num), -@z -%--------------------------------------- -@x [47] m.1071 l.20718 - Omega -|box_flag+255| represent `\.{\\setbox0}' through `\.{\\setbox255}'; -codes |box_flag+256| through |box_flag+511| represent `\.{\\global\\setbox0}' -through `\.{\\global\\setbox255}'; -code |box_flag+512| represents `\.{\\shipout}'; and codes |box_flag+513| -through |box_flag+515| represent `\.{\\leaders}', `\.{\\cleaders}', -@y -|box_flag+biggest_reg| represent `\.{\\setbox0}' through -`\.{\\setbox}|biggest_reg|'; codes |box_flag+biggest_reg+1| through -|box_flag+2*biggest_reg| represent `\.{\\global\\setbox0}' -through `\.{\\global\\setbox}|biggest_reg|'; code |box_flag+2*number_regs| -represents `\.{\\shipout}'; and codes |box_flag+2*number_regs+1| -through |box_flag+2*number_regs+3| represent `\.{\\leaders}', `\.{\\cleaders}', -@z -%--------------------------------------- -@x [47] m.1071 l.20732 - Omega -@d ship_out_flag==box_flag+512 {context code for `\.{\\shipout}'} -@d leader_flag==box_flag+513 {context code for `\.{\\leaders}'} -@y -@d ship_out_flag==box_flag+(number_regs+number_regs) - {context code for `\.{\\shipout}'} -@d leader_flag==ship_out_flag+1 {context code for `\.{\\leaders}'} -@z -%--------------------------------------- -@x [47] m.1077 l.20853 - Omega -if box_context<box_flag+256 then - eq_define(box_base-box_flag+box_context,box_ref,cur_box) -else geq_define(box_base-box_flag-256+box_context,box_ref,cur_box) -@y -if box_context<box_flag+number_regs then - eq_define(box_base-box_flag+box_context,box_ref,cur_box) -else geq_define(box_base-box_flag-number_regs+box_context,box_ref,cur_box) -@z -%--------------------------------------- -@x [47] m.1079 l.20888 - Omega - box(cur_val):=null; {the box becomes void, at the same level} -@y - set_equiv(box_base+cur_val,null); - {the box becomes void, at the same level} -@z -%--------------------------------------- -@x [47] m.1100 l.21156 - Omega - if saved(0)<255 then -@y - if saved(0)<>255 then -@z -%--------------------------------------- -@x [47] m.1109 l.21265 - Omega -@ The |un_hbox| and |un_vbox| commands unwrap one of the 256 current boxes. -@y -@ The |un_hbox| and |un_vbox| commands unwrap one of the current boxes. -@z -%--------------------------------------- -@x [47] m.1110 l.21287 - Omega -else begin link(tail):=list_ptr(p); box(cur_val):=null; -@y -else begin link(tail):=list_ptr(p); -set_equiv(box_base+cur_val,null); -@z -%--------------------------------------- -@x [47] m.1117 l.21342 - Omega - if c>=0 then if c<256 then pre_break(tail):=new_character(cur_font,c); -@y - if c>=0 then if c<=biggest_char then - pre_break(tail):=new_character(cur_font,c); -@z -%--------------------------------------- -@x [48] m.1151 l.21810 - Omega -@ Recall that the |nucleus|, |subscr|, and |supscr| fields in a noad are -broken down into subfields called |math_type| and either |info| or -|(fam,character)|. The job of |scan_math| is to figure out what to place -in one of these principal fields; it looks at the subformula that -comes next in the input, and places an encoding of that subformula -into a given word of |mem|. - -@d fam_in_range==((cur_fam>=0)and(cur_fam<16)) - -@<Declare act...@>= -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; -char_num: begin scan_char_num; cur_chr:=cur_val; cur_cmd:=char_given; - goto reswitch; - end; -math_char_num: begin scan_fifteen_bit_int; c:=cur_val; - end; -math_given: c:=cur_chr; -delim_num: begin scan_twenty_seven_bit_int; c:=cur_val div @'10000; - end; -othercases @<Scan a subformula enclosed in braces and |return|@> -endcases;@/ -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; -exit:end; -@y -@ Recall that the |nucleus|, |subscr|, and |supscr| fields in a noad are -broken down into subfields called |math_type| and either |info| or -|(fam,character)|. The job of |scan_math| is to figure out what to place -in one of these principal fields; it looks at the subformula that -comes next in the input, and places an encoding of that subformula -into a given word of |mem|. - -@d fam_in_range==((cur_fam>=0)and(cur_fam<16)) - -@<Declare act...@>= -@t\4@>@<Declare the function called |fin_mlist|@>@t@>@;@/ - -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=@"8000000 then - begin @<Treat |cur_chr| as an active character@>; - goto restart; - end; - end; -char_num: begin scan_char_num; cur_chr:=cur_val; cur_cmd:=char_given; - goto reswitch; - end; -math_char_num: begin - if cur_chr=0 then scan_fifteen_bit_int - else scan_big_fifteen_bit_int; - c:=cur_val; - end; -math_given: begin - c := ((cur_chr div @"1000) * @"1000000) + - (((cur_chr mod @"1000) div @"100) * @"10000) + - (cur_chr mod @"100); - end; -omath_given: begin c:=cur_chr; - end; -delim_num: begin - if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - c:=cur_val; - end; -othercases @<Scan a subformula enclosed in braces and |return|@> -endcases;@/ -math_type(p):=math_char; character(p):=qi(c mod @"10000); -if (c>=var_code)and fam_in_range then fam(p):=cur_fam -else fam(p):=(c div @"10000) mod @"100; -exit:end; -@z -%--------------------------------------- -@x [48] m.1154 l.21860 - Omega -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; -mmode+math_char_num: begin scan_fifteen_bit_int; set_math_char(cur_val); - end; -mmode+math_given: set_math_char(cur_chr); -mmode+delim_num: begin scan_twenty_seven_bit_int; - set_math_char(cur_val div @'10000); -@y -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; -mmode+math_char_num: begin - if cur_chr=0 then scan_fifteen_bit_int - else scan_big_fifteen_bit_int; - set_math_char(cur_val); - end; -mmode+math_given: begin - set_math_char(((cur_chr div @"1000) * @"1000000) + - (((cur_chr mod @"1000) div @"100) * @"10000) + - (cur_chr mod @"100)); - end; -mmode+omath_given: begin - set_math_char(cur_chr); - end; -mmode+delim_num: begin - if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - set_math_char(cur_val); -@z -%--------------------------------------- -@x [48] m.1155 l.21878 - Omega -procedure set_math_char(@!c:integer); -var p:pointer; {the new noad} -begin if c>=@'100000 then - @<Treat |cur_chr|...@> -else begin p:=new_noad; math_type(nucleus(p)):=math_char; - character(nucleus(p)):=qi(c mod 256); - fam(nucleus(p)):=(c div 256) mod 16; - if c>=var_code then - begin if fam_in_range then fam(nucleus(p)):=cur_fam; - type(p):=ord_noad; - end - else type(p):=ord_noad+(c div @'10000); - link(tail):=p; tail:=p; - end; -end; -@y -procedure set_math_char(@!c:integer); -var p,q,r:pointer; {the new noad} -begin if c>=@"8000000 then - @<Treat |cur_chr|...@> -else begin p:=new_noad; math_type(nucleus(p)):=math_char; - character(nucleus(p)):=qi(c mod @"10000); - fam(nucleus(p)):=(c div @"10000) mod @"100; - if c>=var_code then - begin if fam_in_range then fam(nucleus(p)):=cur_fam; - type(p):=ord_noad; - end - else type(p):=ord_noad+(c div @"1000000); - link(tail):=p; tail:=p; - end; -end; -@z -%--------------------------------------- -@x [48] m.1160 l.21966 - Omega -procedure scan_delimiter(@!p:pointer;@!r:boolean); -begin if r then scan_twenty_seven_bit_int -else begin @<Get the next non-blank non-relax...@>; - case cur_cmd of - letter,other_char: cur_val:=del_code(cur_chr); - delim_num: scan_twenty_seven_bit_int; - othercases cur_val:=-1 - endcases; - end; -if cur_val<0 then @<Report that an invalid delimiter code is being changed - to null; set~|cur_val:=0|@>; -small_fam(p):=(cur_val div @'4000000) mod 16; -small_char(p):=qi((cur_val div @'10000) mod 256); -large_fam(p):=(cur_val div 256) mod 16; -large_char(p):=qi(cur_val mod 256); -@y -procedure scan_delimiter(@!p:pointer;@!r:integer); -begin if r=1 then scan_twenty_seven_bit_int -else if r=2 then scan_fifty_one_bit_int -else begin @<Get the next non-blank non-relax...@>; - case cur_cmd of - letter,other_char: begin - cur_val:=del_code0(cur_chr); cur_val1:=del_code1(cur_chr); - end; - delim_num: if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - othercases begin cur_val:=-1; cur_val1:=-1; end; - endcases; - end; -if cur_val<0 then begin @<Report that an invalid delimiter code is being changed - to null; set~|cur_val:=0|@>; - cur_val1:=0; - end; -small_fam(p):=(cur_val div @"10000) mod @"100; -small_char(p):=qi(cur_val mod @"10000); -large_fam(p):=(cur_val1 div @"10000) mod @"100; -large_char(p):=qi(cur_val1 mod @"10000); -@z -%--------------------------------------- -@x [48] m.1163 l.22005 - Omega -scan_delimiter(left_delimiter(tail),true); scan_math(nucleus(tail)); -@y -scan_delimiter(left_delimiter(tail),cur_chr+1); scan_math(nucleus(tail)); -@z -%--------------------------------------- -@x [48] m.1165 l.22012 - Omega -procedure math_ac; -begin if cur_cmd=accent then - @<Complain that the user should have said \.{\\mathaccent}@>; -tail_append(get_node(accent_noad_size)); -type(tail):=accent_noad; subtype(tail):=normal; -mem[nucleus(tail)].hh:=empty_field; -mem[subscr(tail)].hh:=empty_field; -mem[supscr(tail)].hh:=empty_field; -math_type(accent_chr(tail)):=math_char; -scan_fifteen_bit_int; -character(accent_chr(tail)):=qi(cur_val mod 256); -if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam -else fam(accent_chr(tail)):=(cur_val div 256) mod 16; -scan_math(nucleus(tail)); -end; -@y -procedure math_ac; -begin if cur_cmd=accent then - @<Complain that the user should have said \.{\\mathaccent}@>; -tail_append(get_node(accent_noad_size)); -type(tail):=accent_noad; subtype(tail):=normal; -mem[nucleus(tail)].hh:=empty_field; -mem[subscr(tail)].hh:=empty_field; -mem[supscr(tail)].hh:=empty_field; -math_type(accent_chr(tail)):=math_char; -if cur_chr=0 then scan_fifteen_bit_int -else scan_big_fifteen_bit_int; -character(accent_chr(tail)):=qi(cur_val mod @"10000); -if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam -else fam(accent_chr(tail)):=(cur_val div @"10000) mod @"100; -scan_math(nucleus(tail)); -end; -@z -%--------------------------------------- -@x [48] m.1174 l.22085 - Omega -@t\4@>@<Declare the function called |fin_mlist|@>@t@>@;@/ -@y -@z -%--------------------------------------- -@x [48] m.1188 l.22284 - Omega -text(frozen_right):="right"; eqtb[frozen_right]:=eqtb[cur_val]; -@y -settext(frozen_right,"right"); -set_new_eqtb(frozen_right,new_eqtb(cur_val)); -@z -%--------------------------------------- -@x [49] m.1214 l.22700 - Omega -@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) -@y -@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) -@d del_word_define(#)==if global - then del_geq_word_define(#)@+else del_eq_word_define(#) -@z -%--------------------------------------- -@x [49] m.1216 l.22734 - Omega -text(frozen_protection):="inaccessible"; -@y -settext(frozen_protection,"inaccessible"); -@z -%--------------------------------------- -@x [49] m.1222 l.22789 - Omega -@d char_def_code=0 {|shorthand_def| for \.{\\chardef}} -@d math_char_def_code=1 {|shorthand_def| for \.{\\mathchardef}} -@d count_def_code=2 {|shorthand_def| for \.{\\countdef}} -@d dimen_def_code=3 {|shorthand_def| for \.{\\dimendef}} -@d skip_def_code=4 {|shorthand_def| for \.{\\skipdef}} -@d mu_skip_def_code=5 {|shorthand_def| for \.{\\muskipdef}} -@d toks_def_code=6 {|shorthand_def| for \.{\\toksdef}} - -@<Put each...@>= -primitive("chardef",shorthand_def,char_def_code);@/ -@!@:char_def_}{\.{\\chardef} primitive@> -primitive("mathchardef",shorthand_def,math_char_def_code);@/ -@!@:math_char_def_}{\.{\\mathchardef} primitive@> -@y -@d char_def_code=0 {|shorthand_def| for \.{\\chardef}} -@d math_char_def_code=1 {|shorthand_def| for \.{\\mathchardef}} -@d omath_char_def_code=2 {|shorthand_def| for \.{\\omathchardef}} -@d count_def_code=3 {|shorthand_def| for \.{\\countdef}} -@d dimen_def_code=4 {|shorthand_def| for \.{\\dimendef}} -@d skip_def_code=5 {|shorthand_def| for \.{\\skipdef}} -@d mu_skip_def_code=6 {|shorthand_def| for \.{\\muskipdef}} -@d toks_def_code=7 {|shorthand_def| for \.{\\toksdef}} - -@<Put each...@>= -primitive("chardef",shorthand_def,char_def_code);@/ -@!@:char_def_}{\.{\\chardef} primitive@> -primitive("mathchardef",shorthand_def,math_char_def_code);@/ -@!@:math_char_def_}{\.{\\mathchardef} primitive@> -primitive("omathchardef",shorthand_def,omath_char_def_code);@/ -@!@:math_char_def_}{\.{\\omathchardef} primitive@> -@z -%--------------------------------------- -@x [49] m.1224 l.22833 - Omega -shorthand_def: begin n:=cur_chr; get_r_token; p:=cur_cs; define(p,relax,256); - scan_optional_equals; - case n of - char_def_code: begin scan_char_num; define(p,char_given,cur_val); - end; - math_char_def_code: begin scan_fifteen_bit_int; define(p,math_given,cur_val); - end; -@y -shorthand_def: begin n:=cur_chr; get_r_token; p:=cur_cs; - define(p,relax,too_big_char); scan_optional_equals; - case n of - char_def_code: begin scan_char_num; define(p,char_given,cur_val); - end; - math_char_def_code: begin scan_real_fifteen_bit_int; - define(p,math_given,cur_val); - end; - omath_char_def_code: begin scan_big_fifteen_bit_int; - define(p,omath_given,cur_val); - end; -@z -%--------------------------------------- -@x [49] m.1230 l. - Omega -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -primitive("lccode",def_code,lc_code_base); -@!@:lc_code_}{\.{\\lccode} primitive@> -primitive("uccode",def_code,uc_code_base); -@!@:uc_code_}{\.{\\uccode} primitive@> -primitive("sfcode",def_code,sf_code_base); -@!@:sf_code_}{\.{\\sfcode} primitive@> -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -@y -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -primitive("omathcode",def_code,math_code_base+256); -@!@:math_code_}{\.{\\omathcode} primitive@> -primitive("lccode",def_code,lc_code_base); -@!@:lc_code_}{\.{\\lccode} primitive@> -primitive("uccode",def_code,uc_code_base); -@!@:uc_code_}{\.{\\uccode} primitive@> -primitive("sfcode",def_code,sf_code_base); -@!@:sf_code_}{\.{\\sfcode} primitive@> -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -primitive("odelcode",def_code,del_code_base+256); -@!@:del_code_}{\.{\\odelcode} primitive@> -@z -%--------------------------------------- -@x [49] m.1232 l.22990 - Omega -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); -@y -def_code: begin - if cur_chr=(del_code_base+256) then begin - p:=cur_chr-256; scan_char_num; p:=p+cur_val; scan_optional_equals; - scan_int; cur_val1:=cur_val; scan_int; {backwards} - if (cur_val1>@"FFFFFF) or (cur_val>@"FFFFFF) then - begin print_err("Invalid code ("); print_int(cur_val1); print(" "); - print_int(cur_val); - print("), should be at most ""FFFFFF ""FFFFFF"); - help1("I'm going to use 0 instead of that illegal code value.");@/ - error; cur_val1:=0; cur_val:=0; - end; - del_word_define(p,cur_val1,cur_val); - end - else 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<(math_code_base+256) then begin - if cur_val=@"8000 then cur_val:=@"8000000 - else cur_val:=((cur_val div @"1000) * @"1000000) + - (((cur_val mod @"1000) div @"100) * @"10000) + - (cur_val mod @"100); - define(p,data,hi(cur_val)); - end - else if p<del_code_base then define(p-256,data,hi(cur_val)) - else begin - cur_val1:=cur_val div @"1000; - cur_val1:=(cur_val1 div @"100)*@"10000 + (cur_val1 mod @"100); - cur_val:=cur_val mod @"1000; - cur_val:=(cur_val div @"100)*@"10000 + (cur_val mod @"100); - del_word_define(p,cur_val1,cur_val); - end; - end; -@z -%--------------------------------------- -@x [49] m.1233 l.22990 - Omega -if cur_chr=cat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@'100000 -else if cur_chr=sf_code_base then n:=@'77777 -else if cur_chr=del_code_base then n:=@'77777777 -else n:=255 -@y -if cur_chr=cat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@'100000 -else if cur_chr=(math_code_base+256) then n:=@"8000000 -else if cur_chr=sf_code_base then n:=@'77777 -else if cur_chr=del_code_base then n:=@'77777777 -else n:=biggest_char -@z -%--------------------------------------- -@x [49] m.1234 l.22990 - Omega -def_family: begin p:=cur_chr; scan_four_bit_int; p:=p+cur_val; -@y -def_family: begin p:=cur_chr; scan_big_four_bit_int; p:=p+cur_val; -@z -%--------------------------------------- -@x [49] m.1238 l.23059 - Omega - if q=advance then cur_val:=cur_val+eqtb[l].int; -@y - if q=advance then cur_val:=cur_val+new_eqtb_int(l); -@z -%--------------------------------------- -@x [49] m.1240 l.23086 - Omega - if p=int_val then cur_val:=mult_integers(eqtb[l].int,cur_val) - else cur_val:=nx_plus_y(eqtb[l].int,cur_val,0) - else cur_val:=x_over_n(eqtb[l].int,cur_val) -@y - if p=int_val then cur_val:=mult_integers(new_eqtb_int(l),cur_val) - else cur_val:=nx_plus_y(new_eqtb_int(l),cur_val,0) - else cur_val:=x_over_n(new_eqtb_int(l),cur_val) -@z -%--------------------------------------- -@x [49] m.1241 l.23109 - Omega - if global then n:=256+cur_val@+else n:=cur_val; -@y - if global then n:=number_regs+cur_val@+else n:=cur_val; -@z -%--------------------------------------- -@x [49] m.1289 l.23546 - Omega -|cs_token_flag+active_base| is a multiple of~256. -@y -|cs_token_flag+active_base| is a multiple of~|max_char_val|. -@z -%--------------------------------------- -@x [49] m.1289 l.23552 - Omega - begin c:=t mod 256; -@y - begin c:=t mod max_char_val; -@z -%--------------------------------------- -@x [50] m.1313 l.23892 - Omega -@<Dump regions 1 to 4 of |eqtb|@>; -@<Dump regions 5 and 6 of |eqtb|@>; -@y -dump_eqtb_table; -@z -%--------------------------------------- -@x [50] m.1314 l.23904 - Omega -@<Undump regions 1 to 6 of |eqtb|@>; -@y -undump_eqtb_table; -@z -%--------------------------------------- -@x [50] m.1315 l.23904 - Omega -@ The table of equivalents usually contains repeated information, so we dump it -in compressed form: The sequence of $n+2$ values $(n,x_1,\ldots,x_n,m)$ in the -format file represents $n+m$ consecutive entries of |eqtb|, with |m| extra -copies of $x_n$, namely $(x_1,\ldots,x_n,x_n,\ldots,x_n)$. - -@<Dump regions 1 to 4 of |eqtb|@>= -k:=active_base; -repeat j:=k; -while j<int_base-1 do - begin if (equiv(j)=equiv(j+1))and(eq_type(j)=eq_type(j+1))and@| - (eq_level(j)=eq_level(j+1)) then goto found1; - incr(j); - end; -l:=int_base; goto done1; {|j=int_base-1|} -found1: incr(j); l:=j; -while j<int_base-1 do - begin if (equiv(j)<>equiv(j+1))or(eq_type(j)<>eq_type(j+1))or@| - (eq_level(j)<>eq_level(j+1)) then goto done1; - incr(j); - end; -done1:dump_int(l-k); -while k<l do - begin dump_wd(eqtb[k]); incr(k); - end; -k:=j+1; dump_int(k-l); -until k=int_base - -@ @<Dump regions 5 and 6 of |eqtb|@>= -repeat j:=k; -while j<eqtb_size do - begin if eqtb[j].int=eqtb[j+1].int then goto found2; - incr(j); - end; -l:=eqtb_size+1; goto done2; {|j=eqtb_size|} -found2: incr(j); l:=j; -while j<eqtb_size do - begin if eqtb[j].int<>eqtb[j+1].int then goto done2; - incr(j); - end; -done2:dump_int(l-k); -while k<l do - begin dump_wd(eqtb[k]); incr(k); - end; -k:=j+1; dump_int(k-l); -until k>eqtb_size - -@ @<Undump regions 1 to 6 of |eqtb|@>= -k:=active_base; -repeat undump_int(x); -if (x<1)or(k+x>eqtb_size+1) then goto bad_fmt; -for j:=k to k+x-1 do undump_wd(eqtb[j]); -k:=k+x; -undump_int(x); -if (x<0)or(k+x>eqtb_size+1) then goto bad_fmt; -for j:=k to k+x-1 do eqtb[j]:=eqtb[k-1]; -k:=k+x; -until k>eqtb_size -@y - -@z -%--------------------------------------- -@x [50] m.1318 l.23967 - Omega -@<Dump the hash table@>= -dump_int(hash_used); cs_count:=frozen_control_sequence-1-hash_used; -for p:=hash_base to hash_used do if text(p)<>0 then - begin dump_int(p); dump_hh(hash[p]); incr(cs_count); - end; -for p:=hash_used+1 to undefined_control_sequence-1 do dump_hh(hash[p]); -dump_int(cs_count);@/ -print_ln; print_int(cs_count); print(" multiletter control sequences") -@y -@<Dump the hash table@>= -dump_int(hash_used); -@z -%--------------------------------------- -@x [50] m.1319 l.23976 - Omega -undump(hash_base)(frozen_control_sequence)(hash_used); p:=hash_base-1; -repeat undump(p+1)(hash_used)(p); undump_hh(hash[p]); -until p=hash_used; -for p:=hash_used+1 to undefined_control_sequence-1 do undump_hh(hash[p]); -undump_int(cs_count) -@y -undump(hash_base)(frozen_control_sequence)(hash_used); -@z -%--------------------------------------- -@x [50] m.1324 l.24066 - Omega -for k:=0 to trie_max do dump_hh(trie[k]); -@y -for k:=0 to trie_max do dump_hh(trie[k]); -dump_int(max_hyph_char); -@z -%--------------------------------------- -@x [50] m.1324 l.24078 - Omega -for k:=255 downto 0 do if trie_used[k]>min_quarterword then -@y -for k:=biggest_lang downto 0 do if trie_used[k]>min_quarterword then -@z -%--------------------------------------- -@x [50] m.1325 l.24094 - Omega -for k:=0 to j do undump_hh(trie[k]); -@y -for k:=0 to j do undump_hh(trie[k]); -undump_int(max_hyph_char); -@z -%--------------------------------------- -@x [50] m.1325 l.24101 - Omega -init for k:=0 to 255 do trie_used[k]:=min_quarterword;@+tini@;@/ -k:=256; -@y -init for k:=0 to biggest_lang do trie_used[k]:=min_quarterword;@+tini@;@/ -k:=biggest_lang+1; -@z -%--------------------------------------- -@x [50] m.1326 l.24100 - Omega -dump_int(interaction); dump_int(format_ident); dump_int(69069); -tracing_stats:=0 -@y -dump_int(interaction); dump_int(format_ident); dump_int(69069); -set_new_eqtb_int(int_base+tracing_stats_code,0) -@z -%--------------------------------------- -@x [53] m.1341 l.24506 - Omega -@d what_lang(#)==link(#+1) {language number, in the range |0..255|} -@y -@d what_lang(#)==link(#+1) {language number, in the range |0..biggest_lang|} -@z -%--------------------------------------- -@x [53] m.1370 -@!write_file:array[0..15] of alpha_file; -@y -@!outside_string_array: array[0..1000] of 0..255; -@!write_file:array[0..15] of alpha_file; -@z -%--------------------------------------- -@x [53] m. l.24761 - Omega -text(end_write):="endwrite"; eq_level(end_write):=level_one; -eq_type(end_write):=outer_call; equiv(end_write):=null; -@y -settext(end_write,"endwrite"); set_eq_level(end_write,level_one); -set_eq_type(end_write,outer_call); set_equiv(end_write,null); -@z -%--------------------------------------- -@x [53] m.1376 l.24878 - Omega -else if language>255 then l:=0 -@y -else if language>biggest_lang then l:=0 -@z -%--------------------------------------- -@x [53] m.1377 l.24893 - Omega - else if cur_val>255 then clang:=0 -@y - else if cur_val>biggest_lang then clang:=0 -@z -%--------------------------------------- -@x [54] -This section should be replaced, if necessary, by any special -modifications of the program -that are necessary to make \TeX\ work at a particular installation. -It is usually best to design your change file so that all changes to -previous sections preserve the section numbering; then everybody's version -will be consistent with the published program. More extensive changes, -which introduce new sections, can be inserted here; then only the index -itself will get a new section number. -@^system dependencies@> - -@y -@* \[54] $\Omega$ changes. - -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/omchar.ch b/Build/source/texk/web2c/omegadir/omchar.ch deleted file mode 100644 index bb2b8b19567..00000000000 --- a/Build/source/texk/web2c/omegadir/omchar.ch +++ /dev/null @@ -1,84 +0,0 @@ -% omchar.ch: Primitives to access the components of font metric files. -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [26] m.416 l.8407 - Omega char dimensions -primitive("dp",set_box_dimen,depth_offset); -@!@:dp_}{\.{\\dp} primitive@> -@y -primitive("dp",set_box_dimen,depth_offset); -@!@:dp_}{\.{\\dp} primitive@> -primitive("charwd",set_box_dimen,(width_offset+3)); -@!@:charwd_}{\.{\\charwd} primitive@> -primitive("charht",set_box_dimen,(height_offset+3)); -@!@:charht_}{\.{\\charht} primitive@> -primitive("chardp",set_box_dimen,(depth_offset+3)); -@!@:chardp_}{\.{\\chardp} primitive@> -primitive("charit",set_box_dimen,(depth_offset+4)); -@!@:charit_}{\.{\\charit} primitive@> -@z -%--------------------------------------- -@x [26] m.416 l.8425 - Omega char dimensions -set_box_dimen: if chr_code=width_offset then print_esc("wd") -else if chr_code=height_offset then print_esc("ht") -else print_esc("dp"); -@y -set_box_dimen: if chr_code=width_offset then print_esc("wd") -else if chr_code=height_offset then print_esc("ht") -else if chr_code=depth_offset then print_esc("dp") -else if chr_code=(width_offset+3) then print_esc("charwd") -else if chr_code=(height_offset+3) then print_esc("charht") -else if chr_code=(depth_offset+3) then print_esc("chardp") -else print_esc("charit"); -@z -%--------------------------------------- -@x [26] m.419 l.8461 - Omega char dimensions -begin scan_eight_bit_int; -if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc; -cur_val_level:=dimen_val; -end -@y -if m<=3 then -begin - scan_eight_bit_int; - if box(cur_val)=null then cur_val:=0 @+else - cur_val:=mem[box(cur_val)+m].sc; - cur_val_level:=dimen_val; -end -else -begin - scan_char_num; - if m=(width_offset+3) then begin - cur_val:= char_width(main_f)(char_info(main_f)(cur_val)) - end - else if m=(height_offset+3) then begin - cur_val:= char_height(main_f)(height_depth(char_info(main_f)(cur_val))) - end - else if m=(depth_offset+3) then begin - cur_val:= char_depth(main_f)(height_depth(char_info(main_f)(cur_val))) - end - else begin - cur_val:= char_italic(main_f)(char_info(main_f)(cur_val)); - end; - cur_val_level:=dimen_val; -end -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/omcprt.ch b/Build/source/texk/web2c/omegadir/omcprt.ch deleted file mode 100644 index a6ab9d581b8..00000000000 --- a/Build/source/texk/web2c/omegadir/omcprt.ch +++ /dev/null @@ -1,11 +0,0 @@ -@x -wterm_ln('Copyright (c) 1994--2000 John Plaice and Yannis Haralambous'); -@y -{Let's not announce the copyright on the terminal, nothing else does.} -@z -@x -print_nl("Copyright (c) 1994--2000 John Plaice and Yannis Haralambous"); -@y -print_nl("Copyright (C) 1994--2000 John Plaice and Yannis Haralambous"); -@z - diff --git a/Build/source/texk/web2c/omegadir/omdir.ch b/Build/source/texk/web2c/omegadir/omdir.ch deleted file mode 100644 index 23e2c8f4602..00000000000 --- a/Build/source/texk/web2c/omegadir/omdir.ch +++ /dev/null @@ -1,4172 +0,0 @@ -% omdir.ch: Primitives to deal with multiple-direction text -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%------------------------- -@x [10] m.135 -@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 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 dir_offset = 7 {position of |box_dir| in a box node} -@d box_dir(#) == mem[#+dir_offset].int -@z -%------------------------- -@x [10] m.136 -@p function new_null_box:pointer; {creates a new box node} -var p:pointer; {the new node} -begin p:=get_node(box_node_size); type(p):=hlist_node; -subtype(p):=min_quarterword; -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)); -@<LOCAL: Add info node pointer@>; -new_null_box:=p; -@y -@p function new_null_box:pointer; {creates a new box node} -var p:pointer; {the new node} -begin p:=get_node(box_node_size); type(p):=hlist_node; -subtype(p):=min_quarterword; -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)); -@<LOCAL: Add info node pointer@>; -box_dir(p):=text_direction; -new_null_box:=p; -@z -%------------------------- -@x [10] m.138 -@d rule_node=2 {|type| of rule nodes} -@d rule_node_size=4 {number of words to allocate for a rule node} -@d null_flag==-@'10000000000 {$-2^{30}$, signifies a missing item} -@d is_running(#) == (#=null_flag) {tests for a running dimension} -@y -@d rule_node=2 {|type| of rule nodes} -@d rule_node_size=5 {number of words to allocate for a rule node} -@d null_flag==-@'10000000000 {$-2^{30}$, signifies a missing item} -@d is_running(#) == (#=null_flag) {tests for a running dimension} -@d rule_dir(#)==info(#+4) -@z -%------------------------- -@x [10] m.139 -@p function new_rule:pointer; -var p:pointer; {the new node} -begin p:=get_node(rule_node_size); type(p):=rule_node; -subtype(p):=0; {the |subtype| is not used} -width(p):=null_flag; depth(p):=null_flag; height(p):=null_flag; -@<LOCAL: Add info node pointer@>; -new_rule:=p; -end; -@y -@p function new_rule:pointer; -var p:pointer; {the new node} -begin p:=get_node(rule_node_size); type(p):=rule_node; -subtype(p):=0; {the |subtype| is not used} -width(p):=null_flag; depth(p):=null_flag; height(p):=null_flag; -@<LOCAL: Add info node pointer@>; -rule_dir(p):=-1; -new_rule:=p; -end; -@z -%------------------------- -@x [10] m.160 -@d info_node=unset_node+2 {|type| to hold local information} - -@d ptr_info(#) == link(#-1) {pointer to the local info node} - -@d info_size=5 -@d info_ref_count(#) == link(#+1) {reference count to this node} -@d info_pen_inter(#) == info(#+2) {\.{\\localinterlinepenalty}} -@d info_pen_broken(#) == link(#+2) {\.{\\localbrokenpenalty}} -@d info_left_box(#) == info(#+3) {\.{\\localleftbox}} -@d info_right_box(#) == link(#+3) {\.{\\localrightbox}} -@d info_file(#) == info(#+4) {file names and line numbers} -@y -@d dir_node=unset_node+2 {|type| to keep track of stacks of directions} - -@d dir_size=3 -@d dir_no(#) == info(#+1) {number of directions to keep track of} -@d dir_ref_count(#) == link(#+1) {reference count to this node} - -@d dir_incr_ref_count(#)==begin - if (#)<>null then incr(dir_ref_count(#)); - end -@d dir_decr_ref_count(#)==begin - if (#)<>null then begin - decr(dir_ref_count(#)); - if dir_ref_count(#) = 0 then begin - free_node(#,file_size+dir_no(#)); - #:=null; - end; - end; - end - -@d info_node=unset_node+3 {|type| to hold local information} - -@d ptr_info(#) == link(#-1) {pointer to the local info node} - -@d info_size=5 -@d info_ref_count(#) == link(#+1) {reference count to this node} -@d info_pen_inter(#) == info(#+2) {\.{\\localinterlinepenalty}} -@d info_pen_broken(#) == link(#+2) {\.{\\localbrokenpenalty}} -@d info_left_box(#) == info(#+3) {\.{\\localleftbox}} -@d info_right_box(#) == link(#+3) {\.{\\localrightbox}} -@d info_file(#) == info(#+4) {file names and line numbers} -@d info_dir(#) == link(#+4) {direction} - -@d get_dir(#) == mem[info_dir(ptr_info(#))+ - 2*dir_no(info_dir(ptr_info(#)))+1].int -@z -%------------------------- -@x [10] m.160 - free_node(#,info_size); -@y - dir_decr_ref_count(info_dir(#)); - info_dir(#):=null; - free_node(#,info_size); -@z -%------------------------- -@x [10] m.176 -@p procedure print_font_and_char(@!p:integer); {prints |char_node| data} -begin if p>mem_end then print_esc("CLOBBERED.") -else begin if (font(p)<font_base)or(font(p)>font_max) then print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); print_ASCII(qo(character(p))); - end; -end; -@y -@p procedure print_dir(d:integer); -begin -print(dir_names[dir_primary[d]]); -print(dir_names[dir_secondary[d]]); -print(dir_names[dir_tertiary[d]]); -end; -@# -procedure print_dir_node(p:pointer); -var i:integer; -begin -if dir_no(p)=1 then print(" dir=") -else print(" dirs="); -for i:=1 to dir_no(p) do begin - print_dir(mem[p+2*i+1].int); - if i<>dir_no(p) then print(","); - end; -end; -@# -procedure print_font_and_char(@!p:integer); {prints |char_node| data} -begin if p>mem_end then print_esc("CLOBBERED.") -else begin if (font(p)<font_base)or(font(p)>font_max) then print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); print_ASCII(qo(character(p))); - end; -end; -@z -%------------------------- -@x [12] m.183 -@ @<Display node |p|@>= -if is_char_node(p) then print_font_and_char(p) -@y -@ @<Display node |p|@>= -if is_char_node(p) then begin print_font_and_char(p); - print_dir_node(info_dir(ptr_info(p))); - {print(" dir="); print_dir(get_dir(p));} - end -@z -%------------------------- -@x [12] m.184 -@ @<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"); -print("box("); print_scaled(height(p)); print_char("+"); -print_scaled(depth(p)); print(")x"); print_scaled(width(p)); -if type(p)=unset_node then - @<Display special fields of the unset node |p|@> -else begin @<Display the value of |glue_set(p)|@>; - if shift_amount(p)<>0 then - begin print(", shifted "); print_scaled(shift_amount(p)); - end; - end; -node_list_display(list_ptr(p)); {recursive call} -end -@y -@ @<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"); -print("box("); print_scaled(height(p)); print_char("+"); -print_scaled(depth(p)); print(")x"); print_scaled(width(p)); -if type(p)=unset_node then - @<Display special fields of the unset node |p|@> -else begin @<Display the value of |glue_set(p)|@>; - if shift_amount(p)<>0 then - begin print(", shifted "); print_scaled(shift_amount(p)); - end; - print(", direction "); print_dir(box_dir(p)); - end; -node_list_display(list_ptr(p)); {recursive call} -end -@z -%------------------------- -@x [12] m.193 -@ @<Display ligature |p|@>= -begin print_font_and_char(lig_char(p)); print(" (ligature "); -@y -@ @<Display ligature |p|@>= -begin print_font_and_char(lig_char(p)); -print_dir_node(info_dir(ptr_info(p))); -{print(" dir="); print_dir(get_dir(p));} -print(" (ligature "); -@z -%------------------------- -@x [13] m.202 - info_node: begin - @<LOCAL: Delete info node@>; - goto done; end; {do not delete node at this time} -@y - info_node: begin - @<LOCAL: Delete info node@>; - goto done; end; {do not delete node at this time} - dir_node: begin - @<LOCAL: Delete direction node@>; - goto done; end; {do not delete node at this time} -@z -%------------------------- -@x [13] m.206 -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 -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} -@z -%------------------------- -@x [15] m.209 -@d max_internal=register - {the largest code that can follow \.{\\the}} -@y -@d assign_next_fake_math=register+1 {(\.{\\nextfakemath})} -@d assign_box_dir=register+2 {(\.{\\boxdir})} -@d assign_dir=register+3 {(\.{\\pagedir}, \.{\\textdir})} -@d max_internal=assign_dir - {the largest code that can follow \.{\\the}} -@z -%------------------------- -@x [17] m.230 -@d local_par_info_base=local_right_box_base+1 -@y -@d local_dir_base=local_right_box_base+1 -@d local_par_info_base=local_dir_base+1 -@z -%------------------------- -@x [17] m.230 -@d local_par_info==equiv(local_par_info_base) -@y -@d local_dir==equiv(local_dir_base) -@d local_par_info==equiv(local_par_info_base) -@z -%------------------------- -@x [17] m.236 -@d int_pars=58 {total number of integer parameters} -@d count_base=int_base+int_pars {|number_regs| user \.{\\count} registers} -@y -@d int_pars=58 {total number of integer parameters} -@d dir_base=int_base+int_pars -@d page_direction_code=0 -@d body_direction_code=1 -@d par_direction_code=2 -@d text_direction_code=3 -@d math_direction_code=4 -@d dir_pars=5 -@d count_base=dir_base+dir_pars {|number_regs| user \.{\\count} registers} -@z -%------------------------- -@x [17] m.238 -@d local_broken_penalty==int_par(local_broken_penalty_code) -@y -@d local_broken_penalty==int_par(local_broken_penalty_code) -@d dir_par(#)==new_eqtb_int(dir_base+#) {a direction parameter} -@d page_direction==dir_par(page_direction_code) -@d body_direction==dir_par(body_direction_code) -@d par_direction==dir_par(par_direction_code) -@d text_direction==dir_par(text_direction_code) -@d math_direction==dir_par(math_direction_code) -@z -%------------------------- -@x [17] m.247 -@d dimen_pars=21 {total number of dimension parameters} -@y -@d page_width_code=21 -@d page_height_code=22 -@d page_right_offset_code=23 -@d page_bottom_offset_code=24 -@d dimen_pars=25 {total number of dimension parameters} -@z -%------------------------- -@x [17] m.247 -@d emergency_stretch==dimen_par(emergency_stretch_code) -@y -@d emergency_stretch==dimen_par(emergency_stretch_code) -@d page_width==dimen_par(page_width_code) -@d page_height==dimen_par(page_height_code) -@d page_right_offset==dimen_par(page_right_offset_code) -@d page_bottom_offset==dimen_par(page_bottom_offset_code) -@z -%------------------------- -@x [26] m.410 -@d int_val=0 {integer values} -@d dimen_val=1 {dimension values} -@d glue_val=2 {glue specifications} -@d mu_val=3 {math glue specifications} -@d ident_val=4 {font identifier} -@d tok_val=5 {token lists} - -@<Glob...@>= -@!cur_val:integer; {value returned by numeric scanners} -@!cur_val_level:int_val..tok_val; {the ``level'' of this value} -@y -@d int_val=0 {integer values} -@d dimen_val=1 {dimension values} -@d glue_val=2 {glue specifications} -@d mu_val=3 {math glue specifications} -@d dir_val=4 {directions} -@d ident_val=5 {font identifier} -@d tok_val=6 {token lists} - -@<Glob...@>= -@!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; {delcodes are now 51 digits} -@!cur_val2:integer; {will be used in omxml.ch; this is cheating} -@!cur_val_level:int_val..dir_val; {the ``level'' of this value} -@!tmp_dir_stack:pointer; -@!par_dir_stack:pointer; -@!math_dir_stack:pointer; -@!align_dir_stack:pointer; -@z -%------------------------- -@x [26] m.413 -assign_int: scanned_result(new_eqtb_int(m))(int_val); -@y -assign_int: scanned_result(new_eqtb_int(m))(int_val); -assign_box_dir: begin - scan_eight_bit_int; - m:=cur_val; - if box(m)<>null then cur_val:=box_dir(box(m)) - else cur_val:=0; - cur_val_level:=dir_val; - end; -assign_dir: scanned_result(new_eqtb_int(m))(dir_val); -@z -%------------------------- -@x [26] m.437 -@ @<Declare procedures that scan restricted classes of integers@>= -procedure scan_eight_bit_int; -@y -@ -@d dir_T=0 -@d dir_L=1 -@d dir_B=2 -@d dir_R=3 -@d dir_eq_end(#)==(#) -@d dir_eq(#)==(#)=dir_eq_end -@d dir_ne_end(#)==(#) -@d dir_ne(#)==(#)<>dir_ne_end -@d dir_opposite_end(#)==((#) mod 4) -@d dir_opposite(#)==(((#)+2) mod 4)=dir_opposite_end -@d dir_parallel_end(#)==((#) mod 2) -@d dir_parallel(#)==((#) mod 2)=dir_parallel_end -@d dir_orthogonal_end(#)==(# mod 2) -@d dir_orthogonal(#)==((#) mod 2)<>dir_orthogonal_end -@d dir_next_end(#)==((#) mod 4) -@d dir_next(#)==(((#)+3) mod 4)=dir_next_end -@d dir_prev_end(#)==((#) mod 4) -@d dir_prev(#)==(((#)+1) mod 4)=dir_prev_end - -{box directions} -@d dir_TL_=0 -@d dir_TR_=1 -@d dir_LT_=2 -@d dir_LB_=3 -@d dir_BL_=4 -@d dir_BR_=5 -@d dir_RT_=6 -@d dir_RB_=7 - -{font directions} -@d dir__LT= 0 -@d dir__LL= 1 -@d dir__LB= 2 -@d dir__LR= 3 -@d dir__RT= 4 -@d dir__RL= 5 -@d dir__RB= 6 -@d dir__RR= 7 -@d dir__TT= 8 -@d dir__TL= 9 -@d dir__TB=10 -@d dir__TR=11 -@d dir__BT=12 -@d dir__BL=13 -@d dir__BB=14 -@d dir__BR=15 - -@d is_mirrored(#)==dir_opposite(dir_primary[#])(dir_tertiary[#]) -@d is_rotated(#)==dir_parallel(dir_secondary[#])(dir_tertiary[#]) -@d font_direction(#)==(# mod 16) -@d box_direction(#)==(# div 4) - -@d scan_single_dir(#)==begin -if scan_keyword("T") then #:=dir_T -else if scan_keyword("L") then #:=dir_L -else if scan_keyword("B") then #:=dir_B -else if scan_keyword("R") then #:=dir_R -else begin - print_err("Bad direction"); cur_val:=0; - goto exit; - end -end - -@<Declare procedures that scan restricted classes of integers@>= -@<DIR: Declare |change_dir|@>; -procedure scan_dir; -var d1,d2,d3: integer; -begin -get_x_token; -if cur_cmd=assign_dir then begin - cur_val:=new_eqtb_int(cur_chr); - goto exit; - end -else back_input; -scan_single_dir(d1); -scan_single_dir(d2); -if dir_parallel(d1)(d2) then begin - print_err("Bad direction"); cur_val:=0; - goto exit; - end; -scan_single_dir(d3); -cur_val:=d1*8+dir_rearrange[d2]*4+d3; -exit: -end; - -@ @<Declare procedures that scan restricted classes of integers@>= -procedure scan_eight_bit_int; -@z -%------------------------- -@x [27] m.463 -@p function scan_rule_spec:pointer; -label reswitch; -var q:pointer; {the rule node being created} -begin q:=new_rule; {|width|, |depth|, and |height| all equal |null_flag| now} -if cur_cmd=vrule then width(q):=default_rule -else begin height(q):=default_rule; depth(q):=0; - end; -@y -@p function scan_rule_spec:pointer; -label reswitch; -var q:pointer; {the rule node being created} -begin q:=new_rule; {|width|, |depth|, and |height| all equal |null_flag| now} -if cur_cmd=vrule then begin - width(q):=default_rule; - rule_dir(q):=body_direction; - end -else begin - height(q):=default_rule; depth(q):=0; - rule_dir(q):=text_direction; -end; -@z -%------------------------- -@x [27] m.465 - int_val:print_int(cur_val); -@y - int_val:print_int(cur_val); - dir_val:print_dir(cur_val); -@z -%------------------------- -@x [30] m.550 -@d offset_false_bchar=offset_bchar+1 -@d offset_ivalues_start=offset_false_bchar+1 -@y -@d offset_false_bchar=offset_bchar+1 -@d offset_natural_dir=offset_false_bchar+1 -@d offset_ivalues_start=offset_natural_dir+1 -@z -%------------------------- -@x [30] m.550 -@d font_false_bchar(#)==font_info(#)(offset_false_bchar).int -@y -@d font_false_bchar(#)==font_info(#)(offset_false_bchar).int -@d font_natural_dir(#)==font_info(#)(offset_natural_dir).int -@z -%------------------------- -@x [30] m.560 -@p function read_font_info(@!u:pointer;@!nom,@!aire:str_number; - @!s:scaled;offset:quarterword):internal_font_number; {input a \.{TFM} file} -@y -@p function read_font_info(@!u:pointer;@!nom,@!aire:str_number; - @!s:scaled;offset:quarterword;natural_dir:integer):internal_font_number; - {input a \.{TFM} file} -@z -%------------------------- -@x [30] m.560 -font_offset(f):=offset; -@y -font_offset(f):=offset; -font_natural_dir(f):=natural_dir; -@z -%------------------------- -@x [31] m.586 -@d set_rule=132 {typeset a rule and move right} -@y -@d set_rule=132 {typeset a rule and move right} -@d put1==133 {typeset a character without moving} -@z -%------------------------- -@x [31] m.586 -@d right1=143 {move right} -@y -@d right1==143 {move right} -@d right4==146 {move right, 4 bytes} -@z -%------------------------- -@x [31] m.586 -@d down1=157 {move down} -@y -@d down1=157 {move down} -@d down4=160 {move down, 4 bytes} -@z -%------------------------- -@x [32] m.607 -@p procedure movement(@!w:scaled;@!o:eight_bits); -label exit,found,not_found,2,1; -var mstate:small_number; {have we seen a |y| or |z|?} -@!p,@!q:pointer; {current and top nodes on the stack} -@!k:integer; {index into |dvi_buf|, modulo |dvi_buf_size|} -begin q:=get_node(movement_node_size); {new node for the top of the stack} -width(q):=w; location(q):=dvi_offset+dvi_ptr; -if o=down1 then - begin link(q):=down_ptr; down_ptr:=q; - end -else begin link(q):=right_ptr; right_ptr:=q; - end; -@<Look at the other stack entries until deciding what sort of \.{DVI} command - to generate; |goto found| if node |p| is a ``hit''@>; -@<Generate a |down| or |right| command for |w| and |return|@>; -found: @<Generate a |y0| or |z0| command in order to reuse a previous - appearance of~|w|@>; -exit:end; -@y -@d dvi_set(#)==oval:=#-font_offset(f); ocmd:=set1; out_cmd -@d dvi_put(#)==oval:=#-font_offset(f); ocmd:=put1; out_cmd -@d dvi_set_rule_end(#)==dvi_four(#) -@d dvi_set_rule(#)==dvi_out(set_rule); dvi_four(#); dvi_set_rule_end -@d dvi_put_rule_end(#)==dvi_four(#) -@d dvi_put_rule(#)==dvi_out(put_rule); dvi_four(#); dvi_put_rule_end -@d dvi_right(#)==dvi_out(right4); dvi_four(#); -@d dvi_left(#)==dvi_out(right4); dvi_four(-#); -@d dvi_down(#)==dvi_out(down4); dvi_four(#); -@d dvi_up(#)==dvi_out(down4); dvi_four(-#); - -@p procedure movement(@!w:scaled;@!o:eight_bits); -label exit,found,not_found,2,1; -var mstate:small_number; {have we seen a |y| or |z|?} -@!p,@!q:pointer; {current and top nodes on the stack} -@!k:integer; {index into |dvi_buf|, modulo |dvi_buf_size|} -begin -case box_direction(dvi_direction) of - dir_TL_: begin - end; - dir_TR_: begin - if o=right1 then negate(w); - end; - dir_LT_: begin - if o=right1 then o:=down1 - else o:=right1; - end; - dir_LB_: begin - if o=right1 then begin - o:=down1; negate(w); - end - else o:=right1; - end; - dir_BL_: begin - if o=down1 then negate(w); - end; - dir_BR_: begin - negate(w); - end; - dir_RT_: begin - if o=right1 then o:=down1 - else begin o:=right1; negate(w); - end; - end; - dir_RB_: begin - if o=right1 then o:=down1 else o:=right1; - negate(w); - end; - end; -if false then begin -q:=get_node(movement_node_size); {new node for the top of the stack} -width(q):=w; location(q):=dvi_offset+dvi_ptr; -if o=down1 then - begin link(q):=down_ptr; down_ptr:=q; - end -else begin link(q):=right_ptr; right_ptr:=q; - end; -@<Look at the other stack entries until deciding what sort of \.{DVI} command - to generate; |goto found| if node |p| is a ``hit''@>; -end; -@<Generate a |down| or |right| command for |w| and |return|@>; -found: @<Generate a |y0| or |z0| command in order to reuse a previous - appearance of~|w|@>; -exit:end; -@z -%------------------------- -@x [32] m.610 -info(q):=yz_OK; -@y -@z -%------------------------- -@x [32] m.617 -dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font; -@y -dvi_h:=0; dvi_v:=0; cur_h:=0; cur_v:=0; dvi_f:=null_font; -@z -%------------------------- -@x [32] m.619 -procedure hlist_out; {output an |hlist_node| box} -label reswitch, move_past, fin_rule, next_p; -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; -var base_line: scaled; {the baseline coordinate for this box} -c_wd,c_ht,c_dp: scaled; - {the real width, height and depth of the character} -c_htdp: quarterword; {height-depth entry in |char_info|} -c_info: four_quarters; {|char_info| entry} -edge_v: scaled; -edge_h: scaled; -effective_horizontal: scaled; -basepoint_horizontal: scaled; -basepoint_vertical: scaled; -saving_h: scaled; -saving_v: scaled; -save_direction: integer; -dir_tmp,dir_ptr: pointer; -dvi_dir_h,dvi_dir_ptr,dvi_temp_ptr: integer; -char_first: integer; -cur_direction: integer; -new_dir_node,prev_dir_node: pointer; -i,d,dir_level,m: integer; {counters for the direction stuff} -dir_found: boolean; -@z -%------------------------- -@x [32] m.619 -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; -if char_specials>0 then begin - should_create_special:=true; - chars_since_last_special:=char_specials; - end -else begin - should_create_special:=false; - chars_since_last_special:=-1000000; - end; -while p<>null do @<Output node |p| for |hlist_out| and move to the next node, - maintaining the condition |cur_v=base_line|@>; -prune_movements(save_loc); -if cur_s>0 then dvi_pop(save_loc); -decr(cur_s); -@y -save_direction:=dvi_direction; -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; -if dvi_direction<>box_dir(this_box) then begin - dvi_direction:=box_dir(this_box); - synch_v; synch_h; - saving_h:=dvi_h; saving_v:=dvi_v; - end; -@<DIR: Initialize the text direction@>; -if char_specials>0 then begin - should_create_special:=true; - chars_since_last_special:=char_specials; - end -else begin - should_create_special:=false; - chars_since_last_special:=-1000000; - end; -while p<>null do @<Output node |p| for |hlist_out| and move to the next node, - maintaining the condition |cur_v=base_line|@>; -@<DIR: Finalize the text direction@>; -if dvi_direction<>save_direction then begin - dvi_direction:=save_direction; - synch_v; synch_h; - cur_h:=saving_h; cur_v:=saving_v; - end; -prune_movements(save_loc); -if cur_s>0 then dvi_pop(save_loc); -decr(cur_s); -@z -%------------------------- -@x [32] m.620 -@<Output node |p| for |hlist_out|...@>= -reswitch: if is_char_node(p) then - begin synch_h; synch_v; - if should_create_special then begin - should_create_special:=false; - if chars_since_last_special>=char_specials then - if ptr_info(p)<>null then - if info_file(ptr_info(p))<>null then begin - @<LOCAL: Create special node@>; - chars_since_last_special:=0; - end; - end; - repeat f:=font(p); c:=character(p); - incr(chars_since_last_special); - if f<>dvi_f then @<Change font |dvi_f| to |f|@>; - oval:=c-font_offset(f); ocmd:=set1; out_cmd;@/ - cur_h:=cur_h+char_width(f)(char_info(f)(c)); - 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; - if should_create_special then begin - should_create_special:=false; - if chars_since_last_special>=char_specials then - if ptr_info(p)<>null then - if info_file(ptr_info(p))<>null then begin - @<LOCAL: Create special node@>; - chars_since_last_special:=0; - end; - end; - repeat f:=font(p); c:=character(p); - incr(chars_since_last_special); - if f<>dvi_f then @<Change font |dvi_f| to |f|@>; - c_info:=char_info(f)(c); - c_htdp:=height_depth(c_info); - if is_rotated(dvi_direction) then begin - c_ht:=char_width(f)(c_info) div 2; - c_wd:=char_height(f)(c_htdp)+char_depth(f)(c_htdp); - end - else begin - c_ht:=char_height(f)(c_htdp); - c_dp:=char_depth(f)(c_htdp); - c_wd:=char_width(f)(c_info); - end; - cur_h:=cur_h+c_wd; - if (font_natural_dir(f)<>-1) then - case font_direction(dvi_direction) of - dir__LT,dir__LB: begin - dvi_set(c); - end; - dir__RT,dir__RB: begin - dvi_put(c); - dvi_left(c_wd); - end; - dir__TL,dir__TR: begin - dvi_put(c); - dvi_down(c_wd); - end; - dir__BL,dir__BR: begin - dvi_put(c); - dvi_up(c_wd); - end; - dir__LL,dir__LR: begin - dvi_put(c); - dvi_right(c_wd); - end; - dir__RL,dir__RR: begin - dvi_put(c); - dvi_left(c_wd); - end; - dir__TT,dir__TB: begin - dvi_put(c); - dvi_down(c_wd); - end; - dir__BT,dir__BB: begin - dvi_put(c); - dvi_up(c_wd); - end; - end - else - case font_direction(dvi_direction) of - dir__LT: begin - dvi_set(c); - end; - dir__LB: begin - dvi_down(c_ht); - dvi_set(c); - dvi_up(c_ht); - end; - dir__RT: begin - dvi_left(c_wd); - dvi_put(c); - end; - dir__RB: begin - dvi_left(c_wd); - dvi_down(c_ht); - dvi_put(c); - dvi_up(c_ht); - end; - dir__TL: begin - dvi_down(c_wd); - dvi_left(c_ht); - dvi_put(c); - dvi_right(c_ht); - end; - dir__TR: begin - dvi_down(c_wd); - dvi_left(c_dp); - dvi_put(c); - dvi_right(c_dp); - end; - dir__BL: begin - dvi_left(c_ht); - dvi_put(c); - dvi_right(c_ht); - dvi_up(c_wd); - end; - dir__BR: begin - dvi_left(c_dp); - dvi_put(c); - dvi_right(c_dp); - dvi_up(c_wd); - end; - dir__LL,dir__LR: begin - dvi_down(c_ht); - dvi_put(c); - dvi_up(c_ht); - dvi_right(c_wd); - end; - dir__RL,dir__RR: begin - dvi_left(c_wd); - dvi_down(c_ht); - dvi_put(c); - dvi_up(c_ht); - end; - dir__TT,dir__TB: begin - dvi_down(c_wd); - dvi_left(c_ht); - dvi_put(c); - dvi_right(c_ht); - end; - dir__BT,dir__BB: begin - dvi_left(c_ht); - dvi_put(c); - dvi_right(c_ht); - dvi_up(c_wd); - end; - end; - p:=link(p); - dvi_h:=cur_h; - @<DIR: Check if the text direction has changed@>; - until not is_char_node(p); - end -else @<Output the non-|char_node| |p| for |hlist_out| - and move to the next node@> -@z -%------------------------- -@x [32] m.622 -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@>; -glue_node: @<Move right or output leaders@>; -kern_node,math_node:cur_h:=cur_h+width(p); -ligature_node: @<Make node |p| look like a |char_node| and |goto reswitch|@>; -othercases do_nothing -endcases;@/ -goto next_p; -fin_rule: @<Output a rule in an hlist@>; -move_past: cur_h:=cur_h+rule_wd; -next_p: -if type(p)<>kern_node then should_create_special:=true; -p:=link(p); -end -@y -rule_node: begin - if rule_dir(p)=-1 then begin - print("Rule direction is not defined"); print_ln; - end; - if not (dir_orthogonal(dir_primary[rule_dir(p)]) - (dir_primary[dvi_direction])) then begin - rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p); - end - else begin - rule_ht:=width(p) div 2; - rule_dp:=width(p) div 2; - rule_wd:=height(p)+depth(p); - end; - goto fin_rule; - end; -whatsit_node: @<Output the whatsit node |p| in an hlist@>; -glue_node: @<Move right or output leaders@>; -kern_node,math_node:cur_h:=cur_h+width(p); -ligature_node: @<Make node |p| look like a |char_node| and |goto reswitch|@>; -othercases do_nothing -endcases;@/ -goto next_p; -fin_rule: @<Output a rule in an hlist@>; -move_past: cur_h:=cur_h+rule_wd; -next_p: -if type(p)<>kern_node then should_create_special:=true; -p:=link(p); -@<DIR: Check if the text direction has changed@>; -end -@z -%------------------------- -@x [32] m.623 -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} - temp_ptr:=p; edge:=cur_h; - 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 -begin -if not (dir_orthogonal(dir_primary[box_dir(p)]) - (dir_primary[dvi_direction])) then begin - effective_horizontal:=width(p); - basepoint_vertical:=0; - if dir_opposite(dir_secondary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=width(p) - else - basepoint_horizontal:=0; - end -else begin - effective_horizontal:=height(p)+depth(p); - if not (is_mirrored(box_dir(p))) then - if dir_eq(dir_primary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(p) - else - basepoint_horizontal:=depth(p) - else - if dir_eq(dir_primary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(p) - else - basepoint_horizontal:=depth(p); - if dir_eq(dir_secondary[box_dir(p)]) - (dir_primary[dvi_direction]) then - basepoint_vertical:= -(width(p) div 2) - else - basepoint_vertical:= (width(p) div 2); - end; -if not (is_mirrored(dvi_direction)) then - basepoint_vertical := basepoint_vertical + shift_amount(p) - {shift the box `down'} -else - basepoint_vertical := basepoint_vertical - shift_amount(p); - {shift the box `up'} -if list_ptr(p)=null then cur_h:=cur_h + effective_horizontal -else begin - temp_ptr:=p; edge:=cur_h; cur_h:=cur_h + basepoint_horizontal; - edge_v:=cur_v; cur_v:=base_line + basepoint_vertical; - {if dvi_direction<>box_dir(p) then begin} - synch_h; synch_v; - {end;} - save_h:=dvi_h; save_v:=dvi_v; - if type(p)=vlist_node then vlist_out@+else hlist_out; - dvi_h:=save_h; dvi_v:=save_v; - cur_h:=edge+effective_horizontal; cur_v:=base_line; - end -end -@z -%------------------------- -@x [32] m.624 - dvi_out(set_rule); dvi_four(rule_ht); dvi_four(rule_wd); -@y - case font_direction(dvi_direction) of - dir__LT: begin - dvi_set_rule(rule_ht)(rule_wd); - end; - dir__LB: begin - dvi_down(rule_ht); - dvi_set_rule(rule_ht)(rule_wd); - dvi_up(rule_ht); - end; - dir__RT: begin - dvi_left(rule_wd); - dvi_put_rule(rule_ht)(rule_wd); - end; - dir__RB: begin - dvi_left(rule_wd); - dvi_down(rule_ht); - dvi_put_rule(rule_ht)(rule_wd); - dvi_up(rule_ht); - end; - dir__TL: begin - dvi_down(rule_wd); - dvi_left(rule_ht); - dvi_set_rule(rule_wd)(rule_ht); - end; - dir__TR: begin - dvi_down(rule_wd); - dvi_put_rule(rule_wd)(rule_ht); - end; - dir__BL: begin - dvi_left(rule_ht); - dvi_set_rule(rule_wd)(rule_ht); - dvi_up(rule_wd); - end; - dir__BR: begin - dvi_put_rule(rule_wd)(rule_ht); - dvi_up(rule_wd); - end; - end; -@z -%------------------------- -@x [32] m.626 -leader_wd:=width(leader_box); -@y -if not (dir_orthogonal(dir_primary[box_dir(leader_box)]) - (dir_primary[dvi_direction])) then - leader_wd:=width(leader_box) -else - leader_wd:=height(leader_box)+depth(leader_box); -@z -%------------------------- -@x [32] m.628 -@<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; -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_v:=base_line; -cur_h:=save_h+leader_wd+lx; -end -@y -@<Output a leader box at |cur_h|, ...@>= -begin -if not (dir_orthogonal(dir_primary[box_dir(leader_box)]) - (dir_primary[dvi_direction])) then begin - basepoint_vertical:=0; - if dir_opposite(dir_secondary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=width(leader_box) - else - basepoint_horizontal:=0; - end -else begin - if not (is_mirrored(box_dir(leader_box))) then - if dir_eq(dir_primary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(leader_box) - else - basepoint_horizontal:=depth(leader_box) - else - if dir_eq(dir_primary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=depth(leader_box) - else - basepoint_horizontal:=height(leader_box); - if dir_eq(dir_secondary[box_dir(leader_box)]) - (dir_primary[dvi_direction]) then - basepoint_vertical:= -(width(leader_box) div 2) - else - basepoint_vertical:= (width(leader_box) div 2); - end; -if not (is_mirrored(dvi_direction)) then - basepoint_vertical := basepoint_vertical + shift_amount(leader_box) - {shift the box `down'} -else - basepoint_vertical := basepoint_vertical - shift_amount(leader_box); - {shift the box `up'} -temp_ptr:=leader_box; -synch_h; save_h:=dvi_h; -cur_h:=cur_h + basepoint_horizontal; -edge_v:=cur_v; cur_v:=base_line + basepoint_vertical; -synch_v; save_v:=dvi_v; -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_v:=base_line; -cur_h:=save_h+leader_wd+lx; -end -@z -%------------------------- -@x [32] m.629 -@!cur_g:scaled; {rounded equivalent of |cur_glue| times the glue ratio} -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); -top_edge:=cur_v; -while p<>null do @<Output node |p| for |vlist_out| and move to the next node, - maintaining the condition |cur_h=left_edge|@>; -prune_movements(save_loc); -if cur_s>0 then dvi_pop(save_loc); -decr(cur_s); -@y -@!cur_g:scaled; {rounded equivalent of |cur_glue| times the glue ratio} -@!save_direction: integer; -@!effective_vertical: scaled; -@!basepoint_horizontal: scaled; -@!basepoint_vertical: scaled; -@!edge_v: scaled; -@!saving_v: scaled; -@!saving_h: scaled; -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); -saving_v:=dvi_v; saving_h:=dvi_h; -save_direction:=dvi_direction; -if dvi_direction<>box_dir(this_box) then begin - dvi_direction:=box_dir(this_box); - synch_v; synch_h; - saving_h:=dvi_h; saving_v:=dvi_v; - end; -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); -top_edge:=cur_v; -while p<>null do @<Output node |p| for |vlist_out| and move to the next node, - maintaining the condition |cur_h=left_edge|@>; -prune_movements(save_loc); -if cur_s>0 then dvi_pop(save_loc); -decr(cur_s); -if dvi_direction<>save_direction then begin - dvi_direction:=save_direction; - synch_v; synch_h; - cur_h:=saving_h; cur_v:=saving_v; - end; -@z -%------------------------- -@x [32] m.631 -rule_node: begin rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p); - goto fin_rule; - end; -@y -rule_node: begin - if not (dir_orthogonal(dir_primary[rule_dir(p)]) - (dir_primary[dvi_direction])) then begin - rule_ht:=height(p); rule_dp:=depth(p); rule_wd:=width(p); - end - else begin - rule_ht:=width(p) div 2; - rule_dp:=width(p) div 2; - rule_wd:=height(p)+depth(p); - end; - goto fin_rule; - end; -@z -%------------------------- -@x [32] m.632 -@<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; - cur_h:=left_edge+shift_amount(p); {shift the box right} - temp_ptr:=p; - 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 -@<Output a box in a vlist@>= -begin -if not (dir_orthogonal(dir_primary[box_dir(p)]) - (dir_primary[dvi_direction])) then begin - effective_vertical:=height(p)+depth(p); - if (is_mirrored(box_dir(p))) then - basepoint_vertical:=depth(p) - else - basepoint_vertical:=height(p); - if dir_opposite(dir_secondary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=width(p) - else - basepoint_horizontal:=0; - end -else begin - effective_vertical:=width(p); - if not (is_mirrored(box_dir(p))) then - if dir_eq(dir_primary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(p) - else - basepoint_horizontal:=depth(p) - else - if dir_eq(dir_primary[box_dir(p)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(p) - else - basepoint_horizontal:=depth(p); - if dir_eq(dir_secondary[box_dir(p)]) - (dir_primary[dvi_direction]) then - basepoint_vertical:=0 - else - basepoint_vertical:=width(p); - end; -basepoint_horizontal := basepoint_horizontal + shift_amount(p); - {shift the box `right'} -if list_ptr(p)=null then begin - cur_v:=cur_v+effective_vertical; - end -else begin - edge_v:=cur_v; - cur_h:=left_edge + basepoint_horizontal; - cur_v:=cur_v + basepoint_vertical; - if dvi_direction<>box_dir(p) then begin - synch_h; - end; - synch_v; - save_h:=dvi_h; save_v:=dvi_v; - temp_ptr:=p; - if type(p)=vlist_node then vlist_out@+else hlist_out; - dvi_h:=save_h; dvi_v:=save_v; - cur_h:=left_edge; cur_v:=edge_v + effective_vertical; - end -end -@z -%------------------------- -@x [32] m.633 - dvi_out(put_rule); dvi_four(rule_ht); dvi_four(rule_wd); -@y - case font_direction(dvi_direction) of - dir__LT: begin - dvi_put_rule(rule_ht)(rule_wd); - end; - dir__LB: begin - dvi_down(rule_ht); - dvi_put_rule(rule_ht)(rule_wd); - dvi_up(rule_ht); - end; - dir__RT: begin - dvi_left(rule_wd); - dvi_set_rule(rule_ht)(rule_wd); - end; - dir__RB: begin - dvi_down(rule_ht); - dvi_left(rule_wd); - dvi_set_rule(rule_ht)(rule_wd); - dvi_up(rule_ht); - end; - dir__TL: begin - dvi_down(rule_wd); - dvi_left(rule_ht); - dvi_set_rule(rule_wd)(rule_ht); - dvi_up(rule_wd); - end; - dir__TR: begin - dvi_down(rule_wd); - dvi_put_rule(rule_wd)(rule_ht); - dvi_up(rule_wd); - end; - dir__BL: begin - dvi_left(rule_ht); - dvi_set_rule(rule_wd)(rule_ht); - end; - dir__BR: begin - dvi_put_rule(rule_wd)(rule_ht); - end; - end; -@z -%------------------------- -@x [32] m.635 -leader_ht:=height(leader_box)+depth(leader_box); -@y -if not (dir_orthogonal(dir_primary[box_dir(leader_box)]) - (dir_primary[dvi_direction])) then - leader_ht:=height(leader_box)+depth(leader_box) -else - leader_ht:=width(leader_box); -@z -%------------------------- -@x [32] m.637 -@<Output a leader box at |cur_v|, ...@>= -begin cur_h:=left_edge+shift_amount(leader_box); synch_h; save_h:=dvi_h;@/ -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 -@<Output a leader box at |cur_v|, ...@>= -begin -if not (dir_orthogonal(dir_primary[box_dir(leader_box)]) - (dir_primary[dvi_direction])) then begin - effective_vertical:=height(leader_box)+depth(leader_box); - if (is_mirrored(box_dir(leader_box))) then - basepoint_vertical:=depth(leader_box) - else - basepoint_vertical:=height(leader_box); - if dir_opposite(dir_secondary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=width(leader_box) - else - basepoint_horizontal:=0; - end -else begin - effective_vertical:=width(leader_box); - if not (is_mirrored(box_dir(leader_box))) then - if dir_eq(dir_primary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=height(leader_box) - else - basepoint_horizontal:=depth(leader_box) - else - if dir_eq(dir_primary[box_dir(leader_box)]) - (dir_secondary[dvi_direction]) then - basepoint_horizontal:=depth(leader_box) - else - basepoint_horizontal:=height(leader_box); - if dir_eq(dir_secondary[box_dir(leader_box)]) - (dir_primary[dvi_direction]) then - basepoint_vertical:= width(leader_box) - else - basepoint_vertical:= 0; - end; -basepoint_horizontal := basepoint_horizontal + shift_amount(leader_box); - {shift the box `right'} -temp_ptr:=leader_box; -edge_v:=cur_v; -cur_h:=left_edge + basepoint_horizontal; -cur_v:=cur_v + basepoint_vertical; -synch_h; synch_v; save_h:=dvi_h; save_v:=dvi_v; -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_h:=save_h; dvi_v:=save_v; -cur_h:=left_edge; cur_v:=edge_v+leader_ht+lx; -end -@z -%------------------------- -@x [32] m.640 -cur_v:=height(p)+v_offset; temp_ptr:=p; -if type(p)=vlist_node then vlist_out@+else hlist_out; -@y -dvi_direction:=page_direction; -case box_direction(dvi_direction) of -dir_TL_,dir_LT_: begin - end; -dir_TR_,dir_RT_: begin - dvi_right(page_right_offset); - end; -dir_RB_,dir_BR_: begin - dvi_right(page_right_offset); - dvi_down(page_bottom_offset); - end; -dir_BL_,dir_LB_: begin - dvi_down(page_bottom_offset); - end; -end; -cur_h:=h_offset; -cur_v:=height(p)+v_offset; -case box_direction(dvi_direction) of -dir_TL_: begin - dvi_down(cur_v); - dvi_right(cur_h); - end; -dir_TR_: begin - dvi_down(cur_v); - dvi_right(-cur_h); - end; -dir_LT_: begin - dvi_right(cur_v); - dvi_down(cur_h); - end; -dir_LB_: begin - dvi_right(cur_v); - dvi_down(-cur_h); - end; -dir_BL_: begin - dvi_down(-cur_v); - dvi_right(cur_h); - end; -dir_BR_: begin - dvi_down(-cur_v); - dvi_right(-cur_h); - end; -dir_RT_: begin - dvi_right(-cur_v); - dvi_down(cur_h); - end; -dir_RB_: begin - dvi_right(-cur_v); - dvi_down(-cur_h); - end; -end; -dvi_h:=cur_h; -dvi_v:=cur_v; -temp_ptr:=p; -if type(p)=vlist_node then vlist_out@+else hlist_out; -@z -%------------------------- -@x [33] m.644 -@d exactly=0 {a box dimension is pre-specified} -@d additional=1 {a box dimension is increased from the natural one} -@d natural==0,additional {shorthand for parameters to |hpack| and |vpack|} -@y -@d exactly=0 {a box dimension is pre-specified} -@d additional=1 {a box dimension is increased from the natural one} -@d natural==0,additional {shorthand for parameters to |hpack| and |vpack|} - -@<Glob...@>= -spec_direction:integer; - -@z -%------------------------- -@x [33] m.645 -procedure scan_spec(@!c:group_code;@!three_codes:boolean); - {scans a box specification and left brace} -label found; -var @!s:integer; {temporarily saved value} -@!spec_code:exactly..additional; -begin if three_codes then s:=saved(0); -if scan_keyword("to") then spec_code:=exactly -@.to@> -else if scan_keyword("spread") then spec_code:=additional -@.spread@> -else begin spec_code:=additional; cur_val:=0; - goto found; - end; -scan_normal_dimen; -found: if three_codes then - begin saved(0):=s; incr(save_ptr); - end; -saved(0):=spec_code; saved(1):=cur_val; save_ptr:=save_ptr+2; -new_save_level(c); scan_left_brace; -end; -@y -procedure scan_spec(@!c:group_code;@!four_codes:boolean); - {scans a box specification and left brace} -label found; -var @!s:integer; {temporarily saved value} -@!spec_code:exactly..additional; -begin if four_codes then s:=saved(0); -if abs(mode)=mmode then - spec_direction:=math_direction -else - spec_direction:=text_direction; -if scan_keyword("dir") then begin - scan_dir; spec_direction:=cur_val; - end; -if scan_keyword("to") then spec_code:=exactly -@.to@> -else if scan_keyword("spread") then spec_code:=additional -@.spread@> -else begin spec_code:=additional; cur_val:=0; - goto found; - end; -scan_normal_dimen; -found: if four_codes then - begin saved(0):=s; incr(save_ptr); - end; -saved(0):=spec_code; saved(1):=cur_val; -saved(2):=spec_direction; -save_ptr:=save_ptr+3; -new_save_level(c); scan_left_brace; -eq_word_define(dir_base+text_direction_code,spec_direction); -make_local_direction(spec_direction,true); -end; -@z -%------------------------- -@x [33] m.649 -@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} -@!q:pointer; {trails behind |p|} -@!h,@!d,@!x:scaled; {height, depth, and natural width} -@!s:scaled; {shift amount} -@!g:pointer; {points to a glue specification} -@!o:glue_ord; {order of infinity} -@!f:internal_font_number; {the font in a |char_node|} -@!i:four_quarters; {font information about a |char_node|} -@!hd:eight_bits; {height and depth indices for a character} -begin last_badness:=0; r:=get_node(box_node_size); type(r):=hlist_node; -@y -@p function hpack(@!p:pointer;@!w:scaled;@!m:small_number;@!hpack_dir:integer): -pointer; -label reswitch, common_ending, exit; -var r:pointer; {the box node that will be returned} -@!q:pointer; {trails behind |p|} -@!h,@!d,@!x:scaled; {height, depth, and natural width} -@!s:scaled; {shift amount} -@!g:pointer; {points to a glue specification} -@!o:glue_ord; {order of infinity} -@!f:internal_font_number; {the font in a |char_node|} -@!i:four_quarters; {font information about a |char_node|} -@!hd:eight_bits; {height and depth indices for a character} -begin last_badness:=0; r:=get_node(box_node_size); type(r):=hlist_node; -box_dir(r):=hpack_dir; -if (hpack_dir<0) or (hpack_dir>31) then begin - print_ln; print("hpack_dir="); print_int(hpack_dir); print_ln; - end; -ptr_info(r):=local_par_info; -info_incr_ref_count(local_par_info); -@z -%------------------------- -@x [33] m.649 -exit: hpack:=r; -end; -@y -exit: -{ -if is_mirrored(hpack_dir) then begin - hd:=depth(p); depth(p):=height(p); height(p):=hd; - end; -} -hpack:=r; -end; -@z -%------------------------- -@x [33] m.653 -@<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 -if (type(p)=hlist_node) or (type(p)=vlist_node) then begin - if dir_orthogonal(dir_primary[hpack_dir]) - (dir_primary[box_dir(p)]) then begin - x:=x+height(p)+depth(p); - s:=shift_amount(p); - if (width(p) div 2)-s>h then h:=(width(p) div 2)-s; - if (width(p) div 2)+s>d then d:=(width(p) div 2)+s; - end - else if dir_opposite(dir_primary[hpack_dir]) - (dir_primary[box_dir(p)]) then begin - x:=x+width(p); - s:=shift_amount(p); - if depth(p)-s>h then h:=depth(p)-s; - if height(p)+s>d then d:=height(p)+s; - end - else begin - x:=x+width(p); - 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 - end -else 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; -end -@z -%------------------------- -@x [33] m.654 -@<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); -if is_rotated(get_dir(p)) then begin - x:=x+char_height(f)(hd)+char_depth(f)(hd);@/ - s:=char_width(f)(i) div 2;@+if s>h then h:=s; - s:=char_width(f)(i) div 2;@+if s>d then d:=s; - end -else if dir_opposite(dir_tertiary[hpack_dir]) - (dir_tertiary[get_dir(p)]) then begin - x:=x+char_width(f)(i);@/ - s:=char_depth(f)(hd);@+if s>h then h:=s; - s:=char_height(f)(hd);@+if s>d then d:=s; - end -else begin - 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; - end; -p:=link(p); -end -@z -%------------------------- -@x [33] m.666 -@ @<Report an overfull hbox and |goto common_ending|, if...@>= -if (-x-total_shrink[normal]>hfuzz)or(hbadness<100) then - begin if (overfull_rule>0)and(-x-total_shrink[normal]>hfuzz) then - begin while link(q)<>null do q:=link(q); - link(q):=new_rule; - width(link(q)):=overfull_rule; - end; -@y -@ @<Report an overfull hbox and |goto common_ending|, if...@>= -if (-x-total_shrink[normal]>hfuzz)or(hbadness<100) then - begin if (overfull_rule>0)and(-x-total_shrink[normal]>hfuzz) then - begin while link(q)<>null do q:=link(q); - link(q):=new_rule; rule_dir(q):=box_dir(r); - width(link(q)):=overfull_rule; - end; -@z -%------------------------- -@x [33] m.668 -@p function vpackage(@!p:pointer;@!h:scaled;@!m:small_number;@!l:scaled): - pointer; -label common_ending, exit; -var r:pointer; {the box node that will be returned} -@!w,@!d,@!x:scaled; {width, depth, and natural height} -@!s:scaled; {shift amount} -@!g:pointer; {points to a glue specification} -@!o:glue_ord; {order of infinity} -begin last_badness:=0; r:=get_node(box_node_size); type(r):=vlist_node; -@y -@p function vpackage(@!p:pointer;@!h:scaled;@!m:small_number;@!l:scaled; -@!vpack_dir:integer):pointer; -label common_ending, exit; -var r:pointer; {the box node that will be returned} -@!w,@!d,@!x:scaled; {width, depth, and natural height} -@!s:scaled; {shift amount} -@!g:pointer; {points to a glue specification} -@!o:glue_ord; {order of infinity} -@!dh:scaled; -begin last_badness:=0; r:=get_node(box_node_size); type(r):=vlist_node; -box_dir(r):=vpack_dir; -if (vpack_dir<0) or (vpack_dir>31) then begin - print_ln; print("vpack_dir="); print_int(vpack_dir); print_ln; - end; -ptr_info(r):=local_par_info; -info_incr_ref_count(local_par_info); -@z -%------------------------- -@x [33] m.668 -exit: vpackage:=r; -end; -@y -exit: -{ -if is_mirrored(vpack_dir) then begin - dh:=depth(r); depth(r):=height(r); height(r):=dh; - end; -} -vpackage:=r; -end; -@z -%------------------------- -@x [33] m.670 -@ @<Incorporate box dimensions into the dimensions of the vbox...@>= -begin x:=x+d+height(p); d:=depth(p); -if type(p)>=rule_node then s:=0 @+else s:=shift_amount(p); -if width(p)+s>w then w:=width(p)+s; -end -@y -@ @<Incorporate box dimensions into the dimensions of the vbox...@>= -begin -if (type(p)=hlist_node) or (type(p)=vlist_node) then begin - if dir_orthogonal(dir_primary[vpack_dir]) - (dir_primary[box_dir(p)]) then begin - x:=x+d+(width(p) div 2); d:=width(p) div 2; - s:=shift_amount(p); - if depth(p)+height(p)+s>w then w:=depth(p)+height(p)+s; - end - else if dir_opposite(dir_primary[vpack_dir]) - (dir_primary[box_dir(p)]) then begin - x:=x+d+depth(p); d:=height(p); - s:=shift_amount(p); - if width(p)+s>w then w:=width(p)+s; - end - else begin - x:=x+d+height(p); d:=depth(p); - s:=shift_amount(p); - if width(p)+s>w then w:=width(p)+s; - end - end -else - begin x:=x+d+height(p); d:=depth(p); - if type(p)>=rule_node then s:=0 @+else s:=shift_amount(p); - if width(p)+s>w then w:=width(p)+s; - end; -end -@z -%------------------------- -@x [33] m.679 - begin d:=width(baseline_skip)-prev_depth-height(b); - if d<line_skip_limit then p:=new_param_glue(line_skip_code) - else begin p:=new_skip_param(baseline_skip_code); - width(temp_ptr):=d; {|temp_ptr=glue_ptr(p)|} - end; - link(tail):=p; tail:=p; - end; -link(tail):=b; tail:=b; prev_depth:=depth(b); -@y - begin - if (type(b)=hlist_node) and (is_mirrored(box_dir(b))) then - d:=width(baseline_skip)-prev_depth-depth(b) - else - d:=width(baseline_skip)-prev_depth-height(b); - if d<line_skip_limit then p:=new_param_glue(line_skip_code) - else begin p:=new_skip_param(baseline_skip_code); - width(temp_ptr):=d; {|temp_ptr=glue_ptr(p)|} - end; - link(tail):=p; tail:=p; - end; -link(tail):=b; tail:=b; -if (type(b)=hlist_node) and (is_mirrored(box_dir(b))) then - prev_depth:=height(b) -else - prev_depth:=depth(b); -@z -%------------------------- -@x [35] m.704 -@p function fraction_rule(@!t:scaled):pointer; - {construct the bar for a fraction} -var p:pointer; {the new node} -begin p:=new_rule; height(p):=t; depth(p):=0; fraction_rule:=p; -end; -@y -@p function fraction_rule(@!t:scaled):pointer; - {construct the bar for a fraction} -var p:pointer; {the new node} -begin p:=new_rule; rule_dir(p):=info(math_dir_stack); -height(p):=t; depth(p):=0; fraction_rule:=p; -end; -@z -%------------------------- -@x [35] m.705 -@p function overbar(@!b:pointer;@!k,@!t:scaled):pointer; -var p,@!q:pointer; {nodes being constructed} -begin p:=new_kern(k); link(p):=b; q:=fraction_rule(t); link(q):=p; -p:=new_kern(t); link(p):=q; overbar:=vpack(p,natural); -end; -@y -@p function overbar(@!b:pointer;@!k,@!t:scaled):pointer; -var p,@!q:pointer; {nodes being constructed} -begin p:=new_kern(k); link(p):=b; q:=fraction_rule(t); link(q):=p; -p:=new_kern(t); link(p):=q; -overbar:=vpackage(p,natural,max_dimen,info(math_dir_stack)); -end; -@z -%------------------------- -@x [36] m.706 -else begin b:=new_null_box; -@y -else begin b:=new_null_box; box_dir(b):=info(math_dir_stack); -@z -%------------------------- -@x [36] m.709 -function char_box(@!f:internal_font_number;@!c:quarterword):pointer; -var q:four_quarters; -@!hd:eight_bits; {|height_depth| byte} -@!b,@!p:pointer; {the new box and its character node} -begin q:=char_info(f)(c); hd:=height_depth(q); -b:=new_null_box; width(b):=char_width(f)(q)+char_italic(f)(q); -height(b):=char_height(f)(hd); depth(b):=char_depth(f)(hd); -p:=get_avail; character(p):=c; font(p):=f; list_ptr(b):=p; char_box:=b; -end; -@y -function char_box(@!f:internal_font_number;@!c:quarterword):pointer; -var q:four_quarters; -@!hd:eight_bits; {|height_depth| byte} -@!b,@!p:pointer; {the new box and its character node} -begin q:=char_info(f)(c); hd:=height_depth(q); -b:=new_null_box; width(b):=char_width(f)(q)+char_italic(f)(q); -box_dir(b):=info(math_dir_stack); -height(b):=char_height(f)(hd); depth(b):=char_depth(f)(hd); -p:=get_avail; character(p):=c; font(p):=f; list_ptr(b):=p; -ptr_info(p):=local_par_info; info_incr_ref_count(local_par_info); -char_box:=b; -end; -@z -%------------------------- -@x [36] m.713 -@ @<Construct an extensible...@>= -begin b:=new_null_box; -@y -@ @<Construct an extensible...@>= -begin b:=new_null_box; -box_dir(b):=info(math_dir_stack); -@z -%------------------------- -@x [36] m.715 -@p function rebox(@!b:pointer;@!w:scaled):pointer; -var p:pointer; {temporary register for list manipulation} -@!f:internal_font_number; {font in a one-character box} -@!v:scaled; {width of a character without italic correction} -begin if (width(b)<>w)and(list_ptr(b)<>null) then - 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; - free_node(b,box_node_size); - b:=new_glue(ss_glue); link(b):=p; - while link(p)<>null do p:=link(p); - link(p):=new_glue(ss_glue); - rebox:=hpack(b,w,exactly); - end -else begin width(b):=w; rebox:=b; - end; -end; -@y -@p function rebox(@!b:pointer;@!w:scaled):pointer; -var p:pointer; {temporary register for list manipulation} -@!f:internal_font_number; {font in a one-character box} -@!v:scaled; {width of a character without italic correction} -begin if (width(b)<>w)and(list_ptr(b)<>null) then - begin if type(b)=vlist_node then b:=hpack(b,natural,info(math_dir_stack)); - 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; - free_node(b,box_node_size); - b:=new_glue(ss_glue); link(b):=p; - while link(p)<>null do p:=link(p); - link(p):=new_glue(ss_glue); - rebox:=hpack(b,w,exactly,info(math_dir_stack)); - end -else begin width(b):=w; rebox:=b; - end; -end; -@z -%------------------------- -@x [36] m.720 -function clean_box(@!p:pointer;@!s:integer):pointer; -label found; -var q:pointer; {beginning of a list to be boxed} -@!save_style:integer; {|cur_style| to be restored} -@!x:pointer; {box to be returned} -@!r:pointer; {temporary pointer} -begin case math_type(p) of -math_char: begin cur_mlist:=new_noad; mem[nucleus(cur_mlist)]:=mem[p]; - end; -sub_box: begin q:=info(p); goto found; - end; -sub_mlist: cur_mlist:=info(p); -othercases begin q:=new_null_box; goto found; - end -endcases;@/ -save_style:=cur_style; cur_style:=s; mlist_penalties:=false;@/ -mlist_to_hlist; q:=link(temp_head); {recursive call} -cur_style:=save_style; {restore the style} -@<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>; -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); -@<Simplify a trivial box@>; -clean_box:=x; -end; -@y -function clean_box(@!p:pointer;@!s:integer):pointer; -label found; -var q:pointer; {beginning of a list to be boxed} -@!save_style:integer; {|cur_style| to be restored} -@!x:pointer; {box to be returned} -@!r:pointer; {temporary pointer} -begin case math_type(p) of -math_char: begin cur_mlist:=new_noad; mem[nucleus(cur_mlist)]:=mem[p]; - end; -sub_box: begin q:=info(p); goto found; - end; -sub_mlist: cur_mlist:=info(p); -othercases begin q:=new_null_box; box_dir(q):=info(math_dir_stack); goto found; - end -endcases;@/ -save_style:=cur_style; cur_style:=s; mlist_penalties:=false;@/ -mlist_to_hlist; q:=link(temp_head); {recursive call} -cur_style:=save_style; {restore the style} -@<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>; -found: if is_char_node(q)or(q=null) then - x:=hpack(q,natural,info(math_dir_stack)) - 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,info(math_dir_stack)); -@<Simplify a trivial box@>; -clean_box:=x; -end; -@z -%------------------------- -@x [36] m.727 -@<Process node-or-noad...@>= -begin @<Do first-pass processing based on |type(q)|; |goto done_with_noad| - if a noad has been fully processed, |goto check_dimensions| if it - has been translated into |new_hlist(q)|, or |goto done_with_node| - if a node has been fully processed@>; -check_dimensions: z:=hpack(new_hlist(q),natural); -if height(z)>max_h then max_h:=height(z); -if depth(z)>max_d then max_d:=depth(z); -free_node(z,box_node_size); -done_with_noad: r:=q; r_type:=type(r); -done_with_node: q:=link(q); -end -@y -@<Process node-or-noad...@>= -begin @<Do first-pass processing based on |type(q)|; |goto done_with_noad| - if a noad has been fully processed, |goto check_dimensions| if it - has been translated into |new_hlist(q)|, or |goto done_with_node| - if a node has been fully processed@>; -check_dimensions: z:=hpack(new_hlist(q),natural,info(math_dir_stack)); -if height(z)>max_h then max_h:=height(z); -if depth(z)>max_d then max_d:=depth(z); -free_node(z,box_node_size); -done_with_noad: r:=q; r_type:=type(r); -done_with_node: q:=link(q); -end -@z -%------------------------- -@x [36] m.735 -procedure make_under(@!q:pointer); -var p,@!x,@!y: pointer; {temporary registers for box construction} -@!delta:scaled; {overall height plus depth} -begin x:=clean_box(nucleus(q),cur_style); -p:=new_kern(3*default_rule_thickness); link(x):=p; -link(p):=fraction_rule(default_rule_thickness); -y:=vpack(x,natural); -delta:=height(y)+depth(y)+default_rule_thickness; -height(y):=height(x); depth(y):=delta-height(y); -info(nucleus(q)):=y; math_type(nucleus(q)):=sub_box; -end; -@y -procedure make_under(@!q:pointer); -var p,@!x,@!y: pointer; {temporary registers for box construction} -@!delta:scaled; {overall height plus depth} -begin x:=clean_box(nucleus(q),cur_style); -p:=new_kern(3*default_rule_thickness); link(x):=p; -link(p):=fraction_rule(default_rule_thickness); -y:=vpackage(x,natural,max_dimen,info(math_dir_stack)); -delta:=height(y)+depth(y)+default_rule_thickness; -height(y):=height(x); depth(y):=delta-height(y); -info(nucleus(q)):=y; math_type(nucleus(q)):=sub_box; -end; -@z -%------------------------- -@x [36] m.737 -procedure make_radical(@!q:pointer); -var x,@!y:pointer; {temporary registers for box construction} -@!delta,@!clr:scaled; {dimensions involved in the calculation} -begin x:=clean_box(nucleus(q),cramped_style(cur_style)); -if cur_style<text_style then {display style} - clr:=default_rule_thickness+(abs(math_x_height(cur_size)) div 4) -else begin clr:=default_rule_thickness; clr:=clr + (abs(clr) div 4); - end; -y:=var_delimiter(left_delimiter(q),cur_size,height(x)+depth(x)+clr+ - default_rule_thickness); -delta:=depth(y)-(height(x)+depth(x)+clr); -if delta>0 then clr:=clr+half(delta); {increase the actual clearance} -shift_amount(y):=-(height(x)+clr); -link(y):=overbar(x,clr,height(y)); -info(nucleus(q)):=hpack(y,natural); math_type(nucleus(q)):=sub_box; -end; -@y -procedure make_radical(@!q:pointer); -var x,@!y:pointer; {temporary registers for box construction} -@!delta,@!clr:scaled; {dimensions involved in the calculation} -begin x:=clean_box(nucleus(q),cramped_style(cur_style)); -if cur_style<text_style then {display style} - clr:=default_rule_thickness+(abs(math_x_height(cur_size)) div 4) -else begin clr:=default_rule_thickness; clr:=clr + (abs(clr) div 4); - end; -y:=var_delimiter(left_delimiter(q),cur_size,height(x)+depth(x)+clr+ - default_rule_thickness); -delta:=depth(y)-(height(x)+depth(x)+clr); -if delta>0 then clr:=clr+half(delta); {increase the actual clearance} -shift_amount(y):=-(height(x)+clr); -link(y):=overbar(x,clr,height(y)); -info(nucleus(q)):=hpack(y,natural,info(math_dir_stack)); -math_type(nucleus(q)):=sub_box; -end; -@z -%------------------------- -@x [36] m.738 - y:=vpack(y,natural); width(y):=width(x); -@y - y:=vpackage(y,natural,max_dimen,info(math_dir_stack)); width(y):=width(x); -@z -%------------------------- -@x [36] m.747 -@ @<Construct a vlist box for the fraction...@>= -v:=new_null_box; type(v):=vlist_node; -@y -@ @<Construct a vlist box for the fraction...@>= -v:=new_null_box; box_dir(v):=info(math_dir_stack); type(v):=vlist_node; -@z -%------------------------- -@x [36] m.748 -@ @<Put the \(f)fraction into a box with its delimiters...@>= -if cur_style<text_style then delta:=delim1(cur_size) -else delta:=delim2(cur_size); -x:=var_delimiter(left_delimiter(q), cur_size, delta); link(x):=v;@/ -z:=var_delimiter(right_delimiter(q), cur_size, delta); link(v):=z;@/ -new_hlist(q):=hpack(x,natural) -@y -@ @<Put the \(f)fraction into a box with its delimiters...@>= -if cur_style<text_style then delta:=delim1(cur_size) -else delta:=delim2(cur_size); -x:=var_delimiter(left_delimiter(q), cur_size, delta); link(x):=v;@/ -z:=var_delimiter(right_delimiter(q), cur_size, delta); link(v):=z;@/ -new_hlist(q):=hpack(x,natural,info(math_dir_stack)) -@z -%------------------------- -@x [36] m.750 -@<Construct a box with limits above and below it...@>= -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)); -v:=new_null_box; type(v):=vlist_node; width(v):=width(y); -@y -@<Construct a box with limits above and below it...@>= -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)); -v:=new_null_box; box_dir(v):=info(math_dir_stack); -type(v):=vlist_node; width(v):=width(y); -@z -%------------------------- -@x [36] m.754 -@<Convert \(n)|nucleus(q)| to an hlist and attach the sub/superscripts@>= -case math_type(nucleus(q)) of -math_char, math_text_char: - @<Create a character node |p| for |nucleus(q)|, possibly followed - by a kern node for the italic correction, and set |delta| to the - italic correction if a subscript is present@>; -empty: p:=null; -sub_box: p:=info(nucleus(q)); -sub_mlist: begin cur_mlist:=info(nucleus(q)); save_style:=cur_style; - mlist_penalties:=false; mlist_to_hlist; {recursive call} -@^recursion@> - cur_style:=save_style; @<Set up the values...@>; - p:=hpack(link(temp_head),natural); - end; -@y -@<Convert \(n)|nucleus(q)| to an hlist and attach the sub/superscripts@>= -case math_type(nucleus(q)) of -math_char, math_text_char: - @<Create a character node |p| for |nucleus(q)|, possibly followed - by a kern node for the italic correction, and set |delta| to the - italic correction if a subscript is present@>; -empty: p:=null; -sub_box: p:=info(nucleus(q)); -sub_mlist: begin cur_mlist:=info(nucleus(q)); save_style:=cur_style; - mlist_penalties:=false; mlist_to_hlist; {recursive call} -@^recursion@> - cur_style:=save_style; @<Set up the values...@>; - p:=hpack(link(temp_head),natural,info(math_dir_stack)); - end; -@z -%------------------------- -@x [36] m.756 -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:integer; {subsidiary size code} -begin p:=new_hlist(q); -if is_char_node(p) then - begin shift_up:=0; shift_down:=0; - end -else begin z:=hpack(p,natural); -@y -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:integer; {subsidiary size code} -begin p:=new_hlist(q); -if is_char_node(p) then - begin shift_up:=0; shift_down:=0; - end -else begin z:=hpack(p,natural,info(math_dir_stack)); -@z -%------------------------- -@x [36] m.759 -x:=vpack(x,natural); shift_amount(x):=shift_down; -@y -x:=vpackage(x,natural,max_dimen,info(math_dir_stack)); -shift_amount(x):=shift_down; -@z -%------------------------- -@x [37] m.774 -procedure init_align; -label done, done1, done2, continue; -var save_cs_ptr:pointer; {|warning_index| value for error messages} -@!p:pointer; {for short-term temporary use} -begin save_cs_ptr:=cur_cs; {\.{\\halign} or \.{\\valign}, usually} -push_alignment; align_state:=-1000000; {enter a new alignment level} -@<Check for improper alignment in displayed math@>; -push_nest; {enter a new semantic level} -@<Change current mode to |-vmode| for \.{\\halign}, |-hmode| for \.{\\valign}@>; -scan_spec(align_group,false);@/ -@<Scan the preamble and record it in the |preamble| list@>; -new_save_level(align_group); -@y -procedure init_align; -label done, done1, done2, continue; -var save_cs_ptr:pointer; {|warning_index| value for error messages} -@!p:pointer; {for short-term temporary use} -begin save_cs_ptr:=cur_cs; {\.{\\halign} or \.{\\valign}, usually} -push_alignment; align_state:=-1000000; {enter a new alignment level} -@<Check for improper alignment in displayed math@>; -push_nest; {enter a new semantic level} -@<Change current mode to |-vmode| for \.{\\halign}, |-hmode| for \.{\\valign}@>; -scan_spec(align_group,false);@/ -@<Scan the preamble and record it in the |preamble| list@>; -new_save_level(align_group); -tmp_dir_stack:=get_avail; info(tmp_dir_stack):=spec_direction; -link(tmp_dir_stack):=align_dir_stack; -align_dir_stack:=tmp_dir_stack; -@z -%------------------------- -@x [37] m.779 -@ @<Scan preamble text until |cur_cmd| is |tab_mark| or |car_ret|...@>= -@<Scan the template \<u_j>, putting the resulting token list in |hold_head|@>; -link(cur_align):=new_null_box; cur_align:=link(cur_align); {a new alignrecord} -info(cur_align):=end_span; width(cur_align):=null_flag; -u_part(cur_align):=link(hold_head); -@<Scan the template \<v_j>, putting the resulting token list in |hold_head|@>; -v_part(cur_align):=link(hold_head) -@y -@ @<Scan preamble text until |cur_cmd| is |tab_mark| or |car_ret|...@>= -@<Scan the template \<u_j>, putting the resulting token list in |hold_head|@>; -link(cur_align):=new_null_box; cur_align:=link(cur_align); {a new alignrecord} -box_dir(cur_align):=info(align_dir_stack); -info(cur_align):=end_span; width(cur_align):=null_flag; -u_part(cur_align):=link(hold_head); -@<Scan the template \<v_j>, putting the resulting token list in |hold_head|@>; -v_part(cur_align):=link(hold_head) -@z -%------------------------- -@x [37] m.793 -@ @<Lengthen the preamble...@>= -begin link(q):=new_null_box; p:=link(q); {a new alignrecord} -info(p):=end_span; width(p):=null_flag; cur_loop:=link(cur_loop); -@<Copy the templates from node |cur_loop| into node |p|@>; -cur_loop:=link(cur_loop); -link(p):=new_glue(glue_ptr(cur_loop)); -end -@y -@ @<Lengthen the preamble...@>= -begin link(q):=new_null_box; p:=link(q); {a new alignrecord} -box_dir(p):=info(align_dir_stack); -info(p):=end_span; width(p):=null_flag; cur_loop:=link(cur_loop); -@<Copy the templates from node |cur_loop| into node |p|@>; -cur_loop:=link(cur_loop); -link(p):=new_glue(glue_ptr(cur_loop)); -end -@z -%------------------------- -@x [37] m.796 -@ @<Package an unset...@>= -begin if mode=-hmode then - begin adjust_tail:=cur_tail; u:=hpack(link(head),natural); w:=width(u); - cur_tail:=adjust_tail; adjust_tail:=null; - end -else begin u:=vpackage(link(head),natural,0); w:=height(u); - end; -@y -@ @<Package an unset...@>= -begin if mode=-hmode then - begin adjust_tail:=cur_tail; - u:=hpack(link(head),natural,info(align_dir_stack)); - w:=width(u); - cur_tail:=adjust_tail; adjust_tail:=null; - end -else begin u:=vpackage(link(head),natural,0,info(align_dir_stack)); - w:=height(u); - end; -@z -%------------------------- -@x [37] m.799 -@p procedure fin_row; -var p:pointer; {the new unset box} -begin if mode=-hmode then - begin p:=hpack(link(head),natural); - pop_nest; append_to_vlist(p); - if cur_head<>cur_tail then - begin link(tail):=link(cur_head); tail:=cur_tail; - end; - end -else begin p:=vpack(link(head),natural); pop_nest; - link(tail):=p; tail:=p; space_factor:=1000; - end; -@y -@p procedure fin_row; -var p:pointer; {the new unset box} -begin if mode=-hmode then - begin p:=hpack(link(head),natural,info(align_dir_stack)); - pop_nest; append_to_vlist(p); - if cur_head<>cur_tail then - begin link(tail):=link(cur_head); tail:=cur_tail; - end; - end -else begin p:=vpackage(link(head),natural,max_dimen,info(align_dir_stack)); - pop_nest; link(tail):=p; tail:=p; space_factor:=1000; - end; -@z -%------------------------- -@x [37] m.800 -flush_node_list(p); pop_alignment; -@<Insert the \(c)current list into its environment@>; -@y -flush_node_list(p); pop_alignment; -tmp_dir_stack:=align_dir_stack; -align_dir_stack:=link(align_dir_stack); -free_avail(tmp_dir_stack); -@<Insert the \(c)current list into its environment@>; -@z -%------------------------- -@x [37] m.804 -@<Package the preamble list...@>= -save_ptr:=save_ptr-2; pack_begin_line:=-mode_line; -if mode=-vmode then - begin rule_save:=overfull_rule; - set_new_eqtb_sc(dimen_base+overfull_rule_code,0); - {prevent rule from being packaged} - p:=hpack(preamble,saved(1),saved(0)); - set_new_eqtb_sc(dimen_base+overfull_rule_code,rule_save); - end -else begin q:=link(preamble); - repeat height(q):=width(q); width(q):=0; q:=link(link(q)); - until q=null; - p:=vpack(preamble,saved(1),saved(0)); - q:=link(preamble); - repeat width(q):=height(q); height(q):=0; q:=link(link(q)); - until q=null; - end; -@y -@<Package the preamble list...@>= -save_ptr:=save_ptr-3; pack_begin_line:=-mode_line; -if mode=-vmode then - begin rule_save:=overfull_rule; - set_new_eqtb_sc(dimen_base+overfull_rule_code,0); - {prevent rule from being packaged} - p:=hpack(preamble,saved(1),saved(0),saved(2)); - set_new_eqtb_sc(dimen_base+overfull_rule_code,rule_save); - end -else begin q:=link(preamble); - repeat height(q):=width(q); width(q):=0; q:=link(link(q)); - until q=null; - p:=vpackage(preamble,saved(1),saved(0),max_dimen,saved(2)); - q:=link(preamble); - repeat width(q):=height(q); height(q):=0; q:=link(link(q)); - until q=null; - end; -@z -%------------------------- -@x [37] m.806 -@ @<Make the running dimensions in rule |q| extend...@>= -begin if is_running(width(q)) then width(q):=width(p); -if is_running(height(q)) then height(q):=height(p); -if is_running(depth(q)) then depth(q):=depth(p); -if o<>0 then - begin r:=link(q); link(q):=null; q:=hpack(q,natural); - shift_amount(q):=o; link(q):=r; link(s):=q; - end; -end -@y -@ @<Make the running dimensions in rule |q| extend...@>= -begin if is_running(width(q)) then width(q):=width(p); -if is_running(height(q)) then height(q):=height(p); -if is_running(depth(q)) then depth(q):=depth(p); -if o<>0 then - begin r:=link(q); link(q):=null; q:=hpack(q,natural,info(align_dir_stack)); - shift_amount(q):=o; link(q):=r; link(s):=q; - end; -end -@z -%------------------------- -@x [37] m.809 -@ @<Append tabskip glue and an empty box to list |u|...@>= -s:=link(s); v:=glue_ptr(s); link(u):=new_glue(v); u:=link(u); -subtype(u):=tab_skip_code+1; t:=t+width(v); -if glue_sign(p)=stretching then - begin if stretch_order(v)=glue_order(p) then - t:=t+round(float(glue_set(p))*stretch(v)); -@^real multiplication@> - end -else if glue_sign(p)=shrinking then - begin if shrink_order(v)=glue_order(p) then - t:=t-round(float(glue_set(p))*shrink(v)); - end; -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 -@ @<Append tabskip glue and an empty box to list |u|...@>= -s:=link(s); v:=glue_ptr(s); link(u):=new_glue(v); u:=link(u); -subtype(u):=tab_skip_code+1; t:=t+width(v); -if glue_sign(p)=stretching then - begin if stretch_order(v)=glue_order(p) then - t:=t+round(float(glue_set(p))*stretch(v)); -@^real multiplication@> - end -else if glue_sign(p)=shrinking then - begin if shrink_order(v)=glue_order(p) then - t:=t-round(float(glue_set(p))*shrink(v)); - end; -s:=link(s); link(u):=new_null_box; u:=link(u); -box_dir(u):=info(align_dir_stack); -t:=t+width(s); -if mode=-vmode then width(u):=width(s)@+else - begin type(u):=vlist_node; height(u):=width(s); - end -@z -%------------------------- -@x [38] m.814 -@!init_local_par_info:pointer; -@!last_local_par_info:pointer; -@!current_file_node:pointer; - -@ @<Set initial...@>= -@y -@!init_local_par_info:pointer; -@!last_local_par_info:pointer; -@!current_file_node:pointer; -@!break_c_htdp:quarterword; {height-depth entry in |char_info|} -@!next_fake_math_flag:integer; -@!line_break_dir:pointer; - -@ @<Set initial...@>= -next_fake_math_flag:=0; -@z -%------------------------- -@x [38] m.815 -@p@t\4@>@<Declare subprocedures for |line_break|@> -procedure line_break(@!final_widow_penalty:integer); -@y -@p@t\4@>@<Declare subprocedures for |line_break|@> -procedure line_break(@!final_widow_penalty:integer;@!break_dir:integer); -@z -%------------------------- -@x [38] m.816 -link(tail):=new_param_glue(par_fill_skip_code); -@y -final_par_glue:=new_param_glue(par_fill_skip_code); -link(tail):=final_par_glue; -change_dir(final_par_glue,break_dir); -line_break_dir:=break_dir; -@z -%------------------------- -@x [38] m.816 -init_cur_lang:=prev_graf mod @'200000; -init_l_hyf:=prev_graf div @'20000000; -init_r_hyf:=(prev_graf div @'200000) mod @'100; -@y -init_cur_lang:=prev_graf mod @'200000; -init_l_hyf:=prev_graf div @'20000000; -init_r_hyf:=(prev_graf div @'200000) mod @'100; -@z -%------------------------- -@x [39] m.821 -@!pass_number:halfword; {the number of passive nodes allocated on this pass} -@y -@!pass_number:halfword; {the number of passive nodes allocated on this pass} -@!final_par_glue:pointer; -@z -%------------------------- -@x [38] m.841 -@<Subtract the width of node |v|...@>= -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); -@y -@<Subtract the width of node |v|...@>= -if is_char_node(v) then - begin f:=font(v); - if is_rotated(get_dir(v)) then begin - break_c_htdp:=height_depth(char_info(f)(character(v))); - break_width[1]:=break_width[1]-char_height(f)(break_c_htdp) - -char_depth(f)(break_c_htdp); - end - else - 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));@/ - if is_rotated(get_dir(v)) then begin - break_c_htdp:=height_depth(char_info(f)(character(lig_char(v)))); - break_width[1]:=break_width[1]-char_height(f)(break_c_htdp) - -char_depth(f)(break_c_htdp); - end - else - break_width[1]:=@|break_width[1]- - char_width(f)(char_info(f)(character(lig_char(v)))); - end; - hlist_node,vlist_node: - if not (dir_orthogonal(dir_primary[box_dir(v)]) - (dir_primary[line_break_dir])) then - break_width[1]:=break_width[1]-width(v) - else - break_width[1]:=break_width[1]-(depth(v)+height(v)); - rule_node,kern_node: - break_width[1]:=break_width[1]-width(v); -@z -%------------------------- -@x [38] m.842 -@ @<Add the width of node |s| to |b...@>= -if is_char_node(s) then - begin f:=font(s); - 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 -@ @<Add the width of node |s| to |b...@>= -if is_char_node(s) then - begin f:=font(s); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(s))); - break_width[1]:=break_width[1]+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - 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)); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(lig_char(s)))); - break_width[1]:=break_width[1]+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - break_width[1]:=break_width[1]+ - char_width(f)(char_info(f)(character(lig_char(s)))); - end; - hlist_node,vlist_node: - if not (dir_orthogonal(dir_primary[box_dir(s)]) - (dir_primary[line_break_dir])) then - break_width[1]:=break_width[1]+width(s) - else - break_width[1]:=break_width[1]+(depth(s)+height(s)); - rule_node,kern_node: - break_width[1]:=break_width[1]+width(s); -@z -%------------------------- -@x [38] m.866 -hlist_node,vlist_node,rule_node: act_width:=act_width+width(cur_p); -@y -hlist_node,vlist_node: -if not (dir_orthogonal(dir_primary[box_dir(cur_p)]) - (dir_primary[line_break_dir])) -then act_width:=act_width+width(cur_p) -else act_width:=act_width+(depth(cur_p)+height(cur_p)); -rule_node: act_width:=act_width+width(cur_p); -@z -%------------------------- -@x [38] m.866 - act_width:=act_width+char_width(f)(char_info(f)(character(lig_char(cur_p)))); -@y - if is_rotated(get_dir(cur_p)) then begin - break_c_htdp:=height_depth(char_info(f)(character(lig_char(cur_p)))); - act_width:=act_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - act_width:=act_width+ - char_width(f)(char_info(f)(character(lig_char(cur_p)))); -@z -%------------------------- -@x [38] m.867 -act_width:=act_width+char_width(f)(char_info(f)(character(cur_p))); -@y -if is_rotated(get_dir(cur_p)) then begin - break_c_htdp:=height_depth(char_info(f)(character(cur_p))); - act_width:=act_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end -else - act_width:=act_width+char_width(f)(char_info(f)(character(cur_p))); -@z -%------------------------- -@x [38] m.870 -@ @<Add the width of node |s| to |disc_width|@>= -if is_char_node(s) then - begin f:=font(s); - 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 -@ @<Add the width of node |s| to |disc_width|@>= -if is_char_node(s) then - begin f:=font(s); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(s))); - disc_width:=disc_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - 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)); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(lig_char(s)))); - disc_width:=disc_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - disc_width:=disc_width+ - char_width(f)(char_info(f)(character(lig_char(s)))); - end; - hlist_node,vlist_node: - if not (dir_orthogonal(dir_primary[box_dir(s)]) - (dir_primary[line_break_dir])) - then disc_width:=disc_width+width(s) - else disc_width:=disc_width+(depth(s)+height(s)); - rule_node,kern_node: - disc_width:=disc_width+width(s); -@z -%------------------------- -@x [38] m.871 -@ @<Add the width of node |s| to |act_width|@>= -if is_char_node(s) then - begin f:=font(s); - 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 -@ @<Add the width of node |s| to |act_width|@>= -if is_char_node(s) then - begin f:=font(s); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(s))); - act_width:=act_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - 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)); - if is_rotated(get_dir(s)) then begin - break_c_htdp:=height_depth(char_info(f)(character(lig_char(s)))); - act_width:=act_width+char_height(f)(break_c_htdp) - +char_depth(f)(break_c_htdp); - end - else - act_width:=act_width+ - char_width(f)(char_info(f)(character(lig_char(s)))); - end; - hlist_node,vlist_node: - if not (dir_orthogonal(dir_primary[box_dir(s)]) - (dir_primary[line_break_dir])) - then act_width:=act_width+width(s) - else act_width:=act_width+(depth(s)+height(s)); - rule_node,kern_node: - act_width:=act_width+width(s); -@z -%------------------------- -@x [39] m.877 -@ The total number of lines that will be set by |post_line_break| -is |best_line-prev_graf-1|. The last breakpoint is specified by -|break_node(best_bet)|, and this passive node points to the other breakpoints -via the |prev_break| links. The finishing-up phase starts by linking the -relevant passive nodes in forward order, changing |prev_break| to -|next_break|. (The |next_break| fields actually reside in the same memory -space as the |prev_break| fields did, but we give them a new name because -of their new significance.) Then the lines are justified, one by one. - -@d next_break==prev_break {new name for |prev_break| after links are reversed} - -@<Declare subprocedures for |line_break|@>= -procedure post_line_break(@!final_widow_penalty:integer); -label done,done1; -var q,@!r,@!s:pointer; {temporary registers for list manipulation} -@!disc_break:boolean; {was the current break at a discretionary node?} -@!post_disc_break:boolean; {and did it have a nonempty post-break part?} -@!cur_width:scaled; {width of line number |cur_line|} -@!cur_indent:scaled; {left margin of line number |cur_line|} -@!t:quarterword; {used for replacement counts in discretionary nodes} -@!pen:integer; {use when calculating penalties between lines} -@!cur_line: halfword; {the current line number being justified} -begin @<Reverse the links of the relevant passive nodes, setting |cur_p| to the - first breakpoint@>; -cur_line:=prev_graf+1; -repeat @<Justify the line ending at breakpoint |cur_p|, and append it to the - current vertical list, together with associated penalties and other - insertions@>; -incr(cur_line); cur_p:=next_break(cur_p); -if cur_p<>null then if not post_disc_break then - @<Prune unwanted nodes at the beginning of the next line@>; -until cur_p=null; -if (cur_line<>best_line)or(link(temp_head)<>null) then - confusion("line breaking"); -@:this can't happen line breaking}{\quad line breaking@> -prev_graf:=best_line-1; -end; -@y -@ The total number of lines that will be set by |post_line_break| -is |best_line-prev_graf-1|. The last breakpoint is specified by -|break_node(best_bet)|, and this passive node points to the other breakpoints -via the |prev_break| links. The finishing-up phase starts by linking the -relevant passive nodes in forward order, changing |prev_break| to -|next_break|. (The |next_break| fields actually reside in the same memory -space as the |prev_break| fields did, but we give them a new name because -of their new significance.) Then the lines are justified, one by one. - -The |post_line_break| must also keep an dir stack, so that it can -output end direction instructions at the ends of lines -and begin direction instructions at the beginnings of lines. - -@d next_break==prev_break {new name for |prev_break| after links are reversed} - -@<Declare subprocedures for |line_break|@>= -procedure post_line_break(@!final_widow_penalty:integer); -label done,done1; -var q,@!r,@!s:pointer; {temporary registers for list manipulation} -@!disc_break:boolean; {was the current break at a discretionary node?} -@!post_disc_break:boolean; {and did it have a nonempty post-break part?} -@!cur_width:scaled; {width of line number |cur_line|} -@!cur_indent:scaled; {left margin of line number |cur_line|} -@!t:quarterword; {used for replacement counts in discretionary nodes} -@!pen:integer; {use when calculating penalties between lines} -@!cur_line: halfword; {the current line number being justified} -begin @<Reverse the links of the relevant passive nodes, setting |cur_p| to the - first breakpoint@>; -cur_line:=prev_graf+1; -repeat @<Justify the line ending at breakpoint |cur_p|, and append it to the - current vertical list, together with associated penalties and other - insertions@>; -incr(cur_line); cur_p:=next_break(cur_p); -if cur_p<>null then if not post_disc_break then - @<Prune unwanted nodes at the beginning of the next line@>; -until cur_p=null; -if (cur_line<>best_line)or(link(temp_head)<>null) then - confusion("line breaking"); -@:this can't happen line breaking}{\quad line breaking@> -prev_graf:=best_line-1; -end; -@z -%------------------------- -@x [39] m.889 -adjust_tail:=adjust_head; just_box:=hpack(q,cur_width,exactly); -@y -adjust_tail:=adjust_head; -just_box:=hpack(q,cur_width,exactly,line_break_dir); -@z -%------------------------- -@x [40] m.892 -@!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result} -@y -@!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result} -@!ha_local:pointer; {points to the local information for the first char node} -@z -%------------------------- -@x [40] m.896 -@<Skip to node |ha|, or |goto done1|...@>= -loop@+ begin if is_char_node(s) then - begin c:=qo(character(s)); hf:=font(s); - end - else if type(s)=ligature_node then - if lig_ptr(s)=null then goto continue - else begin q:=lig_ptr(s); c:=qo(character(q)); hf:=font(q); - end - else if (type(s)=kern_node)and(subtype(s)=normal) then goto continue - else if type(s)=whatsit_node then - begin @<Advance \(p)past a whatsit node in the \(p)pre-hyphenation loop@>; - goto continue; - end - else goto done1; - if lc_code(c)<>0 then - if (lc_code(c)=c)or(uc_hyph>0) then goto done2 - else goto done1; -continue: prev_s:=s; s:=link(prev_s); - end; -done2: hyf_char:=hyphen_char(hf); -if hyf_char<0 then goto done1; -if hyf_char>biggest_char then goto done1; -ha:=prev_s -@y -@<Skip to node |ha|, or |goto done1|...@>= -loop@+ begin if is_char_node(s) then - begin c:=qo(character(s)); hf:=font(s); - end - else if type(s)=ligature_node then - if lig_ptr(s)=null then goto continue - else begin q:=lig_ptr(s); c:=qo(character(q)); hf:=font(q); - end - else if (type(s)=kern_node)and(subtype(s)=normal) then goto continue - else if type(s)=whatsit_node then - begin @<Advance \(p)past a whatsit node in the \(p)pre-hyphenation loop@>; - goto continue; - end - else goto done1; - if lc_code(c)<>0 then - if (lc_code(c)=c)or(uc_hyph>0) then goto done2 - else goto done1; -continue: prev_s:=s; s:=link(prev_s); - end; -done2: hyf_char:=hyphen_char(hf); -if hyf_char<0 then goto done1; -if hyf_char>biggest_char then goto done1; -ha:=prev_s; -ha_local:=ptr_info(s) -@z -%------------------------- -@x [40] m.908 -@ @d append_charnode_to_t(#)== begin link(t):=get_avail; t:=link(t); - font(t):=hf; character(t):=#; - end -@y -@ @d append_charnode_to_t(#)== begin link(t):=get_avail; t:=link(t); - ptr_info(t):=ha_local; info_incr_ref_count(ha_local); - font(t):=hf; character(t):=#; - end -@z -%------------------------- -@x [40] m.910 -@ @d wrap_lig(#)==if ligature_present then - begin p:=new_ligature(hf,cur_l,link(cur_q)); - if lft_hit then - begin subtype(p):=2; lft_hit:=false; - end; - if # then if lig_stack=null then - begin incr(subtype(p)); rt_hit:=false; - end; - link(cur_q):=p; t:=p; ligature_present:=false; - end -@y -@ @d wrap_lig(#)==if ligature_present then - begin p:=new_ligature(hf,cur_l,link(cur_q)); - info_decr_ref_count(ptr_info(p)); - ptr_info(p):=ha_local; info_incr_ref_count(ha_local); - if lft_hit then - begin subtype(p):=2; lft_hit:=false; - end; - if # then if lig_stack=null then - begin incr(subtype(p)); rt_hit:=false; - end; - link(cur_q):=p; t:=p; ligature_present:=false; - end -@z -%------------------------- -@x [40] m.910 -wrap_lig(rt_hit); -if w<>0 then - begin link(t):=new_kern(w); t:=link(t); w:=0; - end; -@y -wrap_lig(rt_hit); -if w<>0 then - begin link(t):=new_kern(w); t:=link(t); w:=0; - info_decr_ref_count(ptr_info(t)); - ptr_info(t):=ha_local; info_incr_ref_count(ha_local); - end; -@z -%------------------------- -@x [40] m.911 -qi(2),qi(6):begin cur_r:=rem_byte(q); {\.{\?=:}, \.{\?=:>}} - if lig_stack>null then character(lig_stack):=cur_r - else begin lig_stack:=new_lig_item(cur_r); - if j=n then bchar:=non_char - else begin p:=get_avail; lig_ptr(lig_stack):=p; - character(p):=qi(hu[j+1]); font(p):=hf; - end; - end; - end; -qi(3):begin cur_r:=rem_byte(q); {\.{\?=:\?}} - p:=lig_stack; lig_stack:=new_lig_item(cur_r); link(lig_stack):=p; - end; -@y -qi(2),qi(6):begin cur_r:=rem_byte(q); {\.{\?=:}, \.{\?=:>}} - if lig_stack>null then character(lig_stack):=cur_r - else begin lig_stack:=new_lig_item(cur_r); - info_decr_ref_count(ptr_info(lig_stack)); - ptr_info(lig_stack):=ha_local; info_incr_ref_count(ha_local); - if j=n then bchar:=non_char - else begin p:=get_avail; lig_ptr(lig_stack):=p; - character(p):=qi(hu[j+1]); font(p):=hf; - ptr_info(p):=ha_local; info_incr_ref_count(ha_local); - end; - end; - end; -qi(3):begin cur_r:=rem_byte(q); {\.{\?=:\?}} - p:=lig_stack; lig_stack:=new_lig_item(cur_r); link(lig_stack):=p; - info_decr_ref_count(ptr_info(lig_stack)); - ptr_info(lig_stack):=ha_local; info_incr_ref_count(ha_local); - end; -@z -%------------------------- -@x [40] m.914 -@<Create and append a discretionary node as an alternative...@>= -repeat r:=get_node(small_node_size); -link(r):=link(hold_head); type(r):=disc_node; -@y -@<Create and append a discretionary node as an alternative...@>= -repeat r:=get_node(small_node_size); -link(r):=link(hold_head); type(r):=disc_node; -ptr_info(r):=ha_local; info_incr_ref_count(ha_local); -@z -%------------------------- -@x [44] m.977 -@p function vsplit(@!n:eight_bits; @!h:scaled):pointer; - {extracts a page of height |h| from box |n|} -label exit,done; -var v:pointer; {the box to be split} -p:pointer; {runs through the vlist} -q:pointer; {points to where the break occurs} -begin v:=box(n); -if split_first_mark<>null then - begin delete_token_ref(split_first_mark); split_first_mark:=null; - delete_token_ref(split_bot_mark); split_bot_mark:=null; - end; -@<Dispense with trivial cases of void or bad boxes@>; -q:=vert_break(list_ptr(v),h,split_max_depth); -@<Look at all the marks in nodes before the break, and set the final - link to |null| at the break@>; -q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size); -if q=null then set_equiv(box_base+n,null) - {the |eq_level| of the box stays the same} -else set_equiv(box_base+n,vpack(q,natural)); -vsplit:=vpackage(p,h,exactly,split_max_depth); -exit: end; -@y -@p function vsplit(@!n:eight_bits; @!h:scaled):pointer; - {extracts a page of height |h| from box |n|} -label exit,done; -var v:pointer; {the box to be split} -vdir:integer; {the direction of the box to be split} -p:pointer; {runs through the vlist} -q:pointer; {points to where the break occurs} -begin v:=box(n); vdir:=box_dir(v); -if split_first_mark<>null then - begin delete_token_ref(split_first_mark); split_first_mark:=null; - delete_token_ref(split_bot_mark); split_bot_mark:=null; - end; -@<Dispense with trivial cases of void or bad boxes@>; -q:=vert_break(list_ptr(v),h,split_max_depth); -@<Look at all the marks in nodes before the break, and set the final - link to |null| at the break@>; -q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size); -if q=null then set_equiv(box_base+n,null) - {the |eq_level| of the box stays the same} -else set_equiv(box_base+n,vpackage(q,natural,max_dimen,vdir)); -vsplit:=vpackage(p,h,exactly,split_max_depth,vdir); -exit: end; -@z -%------------------------- -@x [45] m.1001 -if width(temp_ptr)>height(p) then width(temp_ptr):=width(temp_ptr)-height(p) -else width(temp_ptr):=0; -@y -if (type(p)=hlist_node) and (is_mirrored(body_direction)) then begin - if width(temp_ptr)>depth(p) then width(temp_ptr):=width(temp_ptr)-depth(p) - else width(temp_ptr):=0; - end -else begin - if width(temp_ptr)>height(p) then width(temp_ptr):=width(temp_ptr)-height(p) - else width(temp_ptr):=0; - end; -@z -%------------------------- -@x [45] m.1002 -begin page_total:=page_total+page_depth+height(p); -page_depth:=depth(p); -@y -begin -if (type(p)=hlist_node) and (is_mirrored(body_direction)) then begin - page_total:=page_total+page_depth+depth(p); - page_depth:=height(p); - end -else begin - page_total:=page_total+page_depth+height(p); - page_depth:=depth(p); - end; -@z -%------------------------- -@x [45] m.1017 -set_equiv(box_base+255, - vpackage(link(page_head),best_size,exactly,page_max_depth)); -@y -set_equiv(box_base+255, - vpackage(link(page_head),best_size,exactly,page_max_depth,body_direction)); -@z -%------------------------- -@x [45] m.1018 -@<Prepare all the boxes involved in insertions to act as queues@>= -begin r:=link(page_ins_head); -while r<>page_ins_head do - begin if best_ins_ptr(r)<>null then - begin n:=qo(subtype(r)); ensure_vbox(n); - if box(n)=null then set_equiv(box_base+n,new_null_box); -@y -@<Prepare all the boxes involved in insertions to act as queues@>= -begin r:=link(page_ins_head); -while r<>page_ins_head do - begin if best_ins_ptr(r)<>null then - begin n:=qo(subtype(r)); ensure_vbox(n); - if box(n)=null then set_equiv(box_base+n,new_null_box); - box_dir(box(n)):=body_direction; -@z -%------------------------- -@x [45] m.1021 -@ @<Wrap up the box specified by node |r|, splitting node |p| if...@>= -begin if type(r)=split_up then - if (broken_ins(r)=p)and(broken_ptr(r)<>null) then - begin while link(s)<>broken_ptr(r) do s:=link(s); - link(s):=null; - set_equiv(glue_base+split_top_skip_code,split_top_ptr(p)); - ins_ptr(p):=prune_page_top(broken_ptr(r)); - if ins_ptr(p)<>null then - begin temp_ptr:=vpack(ins_ptr(p),natural); - height(p):=height(temp_ptr)+depth(temp_ptr); - free_node(temp_ptr,box_node_size); wait:=true; - end; - end; -best_ins_ptr(r):=null; -n:=qo(subtype(r)); -temp_ptr:=list_ptr(box(n)); -free_node(box(n),box_node_size); -set_equiv(box_base+n,vpack(temp_ptr,natural)); -@y -@ @<Wrap up the box specified by node |r|, splitting node |p| if...@>= -begin if type(r)=split_up then - if (broken_ins(r)=p)and(broken_ptr(r)<>null) then - begin while link(s)<>broken_ptr(r) do s:=link(s); - link(s):=null; - set_equiv(glue_base+split_top_skip_code,split_top_ptr(p)); - ins_ptr(p):=prune_page_top(broken_ptr(r)); - if ins_ptr(p)<>null then - begin temp_ptr:=vpackage(ins_ptr(p),natural,max_dimen,body_direction); - height(p):=height(temp_ptr)+depth(temp_ptr); - free_node(temp_ptr,box_node_size); wait:=true; - end; - end; -best_ins_ptr(r):=null; -n:=qo(subtype(r)); -temp_ptr:=list_ptr(box(n)); -free_node(box(n),box_node_size); -set_equiv(box_base+n,vpackage(temp_ptr,natural,max_dimen,body_direction)); -@z -%------------------------- -@x [45] m.1054 -function its_all_over:boolean; {do this when \.{\\end} or \.{\\dump} occurs} -label exit; -begin if privileged then - begin if (page_head=page_tail)and(head=tail)and(dead_cycles=0) then - begin its_all_over:=true; return; - end; - back_input; {we will try to end again after ejecting residual material} - tail_append(new_null_box); -@y -function its_all_over:boolean; {do this when \.{\\end} or \.{\\dump} occurs} -label exit; -begin if privileged then - begin if (page_head=page_tail)and(head=tail)and(dead_cycles=0) then - begin its_all_over:=true; return; - end; - back_input; {we will try to end again after ejecting residual material} - tail_append(new_null_box); box_dir(tail):=info(par_dir_stack); -@z -%------------------------- -@x [47] m.1071 -primitive("xleaders",leader_ship,x_leaders); -@!@:x_leaders_}{\.{\\xleaders} primitive@> -@y -primitive("xleaders",leader_ship,x_leaders); -@!@:x_leaders_}{\.{\\xleaders} primitive@> -primitive("boxdir",assign_box_dir,0); -@!@:box_dir}{\.{\\boxdir} primitive@> -@z -%------------------------- -@x [47] m.1073 -any_mode(make_box): begin_box(0); -@y -any_mode(make_box): begin_box(0); -any_mode(assign_box_dir): begin scan_eight_bit_int; - cur_box:=box(cur_val); - scan_optional_equals; scan_dir; - if cur_box<>null then box_dir(cur_box):=cur_val; - end; -@z -%------------------------- -@x [47] m.1076 -@<Append box |cur_box| to the current...@>= -begin if cur_box<>null then - begin shift_amount(cur_box):=box_context; - if abs(mode)=vmode then - begin append_to_vlist(cur_box); - if adjust_tail<>null then - begin if adjust_head<>adjust_tail then - begin link(tail):=link(adjust_head); tail:=adjust_tail; - end; - adjust_tail:=null; - end; - if mode>0 then build_page; - end - else begin if abs(mode)=hmode then space_factor:=1000 - else begin p:=new_noad; - math_type(nucleus(p)):=sub_box; - info(nucleus(p)):=cur_box; cur_box:=p; - end; - link(tail):=cur_box; tail:=cur_box; - end; - end; -end -@y -@<Append box |cur_box| to the current...@>= -begin if cur_box<>null then - begin shift_amount(cur_box):=box_context; - ptr_info(cur_box):=local_par_info; - info_incr_ref_count(local_par_info); - if abs(mode)=vmode then - begin append_to_vlist(cur_box); - if adjust_tail<>null then - begin if adjust_head<>adjust_tail then - begin link(tail):=link(adjust_head); tail:=adjust_tail; - end; - adjust_tail:=null; - end; - if mode>0 then build_page; - end - else begin if abs(mode)=hmode then space_factor:=1000 - else begin p:=new_noad; - math_type(nucleus(p)):=sub_box; - info(nucleus(p)):=cur_box; cur_box:=p; - end; - link(tail):=cur_box; tail:=cur_box; - end; - end; -end -@z -%------------------------- -@x [47] m.1083 -begin k:=cur_chr-vtop_code; saved(0):=box_context; -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 -begin k:=cur_chr-vtop_code; saved(0):=box_context; -case abs(mode) of -vmode: spec_direction:=body_direction; -hmode: spec_direction:=text_direction; -mmode: spec_direction:=math_direction; -end; -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; -@z -%------------------------- -@x [47] m.1086 -procedure package(@!c:small_number); -var h:scaled; {height of box} -@!p:pointer; {first node in a box} -@!d:scaled; {max depth} -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 -procedure package(@!c:small_number); -var h:scaled; {height of box} -@!p:pointer; {first node in a box} -@!d:scaled; {max depth} -begin d:=box_max_depth; unsave; save_ptr:=save_ptr-4; -if mode=-hmode then cur_box:=hpack(link(head),saved(2),saved(1),saved(3)) -else begin cur_box:=vpackage(link(head),saved(2),saved(1),d,saved(3)); - if c=vtop_code then @<Readjust the height and depth of |cur_box|, - for \.{\\vtop}@>; - end; -pop_nest; box_end(saved(0)); -end; -@z -%------------------------- -@x [47] m.1091 -procedure new_graf(@!indented:boolean); -begin prev_graf:=0; -if (mode=vmode)or(head<>tail) then - tail_append(new_param_glue(par_skip_code)); -push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang; -prev_graf:=(norm_min(left_hyphen_min)*@'100+norm_min(right_hyphen_min)) - *@'200000+cur_lang; -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - end; -@y -procedure new_graf(@!indented:boolean); -begin prev_graf:=0; -if (mode=vmode)or(head<>tail) then - tail_append(new_param_glue(par_skip_code)); -push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang; -prev_graf:=(norm_min(left_hyphen_min)*@'100+norm_min(right_hyphen_min)) - *@'200000+cur_lang; -tmp_dir_stack:=get_avail; info(tmp_dir_stack):=par_direction; -link(tmp_dir_stack):=par_dir_stack; -par_dir_stack:=tmp_dir_stack; -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - box_dir(tail):=info(par_dir_stack); - change_dir(tail,info(par_dir_stack)); - end; -@z -%------------------------- -@x [47] m.1093 -procedure indent_in_hmode; -var p,@!q:pointer; -begin if cur_chr>0 then {\.{\\indent}} - begin p:=new_null_box; width(p):=par_indent; -@y -procedure indent_in_hmode; -var p,@!q:pointer; -begin if cur_chr>0 then {\.{\\indent}} - begin p:=new_null_box; width(p):=par_indent; - box_dir(p):=info(par_dir_stack); - change_dir(p,info(par_dir_stack)); -@z -%------------------------- -@x [47] m.1096 -procedure end_graf; -begin if mode=hmode then - begin if head=tail then pop_nest {null paragraphs are ignored} - else line_break(widow_penalty); - normal_paragraph; - error_count:=0; - end; -end; -@y -procedure end_graf; -begin if mode=hmode then - begin if head=tail then pop_nest {null paragraphs are ignored} - else line_break(widow_penalty,info(par_dir_stack)); - tmp_dir_stack:=par_dir_stack; - par_dir_stack:=link(par_dir_stack); - free_avail(tmp_dir_stack); - normal_paragraph; - error_count:=0; - end; -end; -@z -%------------------------- -@x [48] m.1100 -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:=vpackage(link(head),natural,max_dimen,body_direction); 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; -@z -%------------------------- -@x [48] m.1119 -procedure build_local_box; -var p:pointer; - kind:integer; -begin -unsave; -kind:=saved(-1); -decr(save_ptr); -p:=link(head); pop_nest; -p:=hpack(p,natural); -@y -procedure build_local_box; -var p:pointer; - kind:integer; -begin -unsave; -kind:=saved(-1); -decr(save_ptr); -p:=link(head); pop_nest; -p:=hpack(p,natural,text_direction); -@z -%------------------------- -@x [48] m.1125 -@<Append the accent with appropriate kerns...@>= -begin t:=slant(f)/float_constant(65536); -@^real division@> -i:=char_info(f)(character(q)); -w:=char_width(f)(i); h:=char_height(f)(height_depth(i)); -if h<>x then {the accent must be shifted up or down} - begin p:=hpack(p,natural); shift_amount(p):=x-h; - end; -@y -@<Append the accent with appropriate kerns...@>= -begin t:=slant(f)/float_constant(65536); -@^real division@> -i:=char_info(f)(character(q)); -w:=char_width(f)(i); h:=char_height(f)(height_depth(i)); -if h<>x then {the accent must be shifted up or down} - begin p:=hpack(p,natural,text_direction); shift_amount(p):=x-h; - end; -@z -%------------------------- -@x [48] m.1136 -procedure push_math(@!c:group_code); -begin push_nest; mode:=-mmode; incompleat_noad:=null; new_save_level(c); -end; -@y -procedure push_math(@!c:group_code); -begin -push_nest; mode:=-mmode; incompleat_noad:=null; new_save_level(c); -make_local_direction(info(math_dir_stack),true); -end; -@z -%------------------------- -@x [48] m.1138 -procedure init_math; -label reswitch,found,not_found,done; -var w:scaled; {new or partial |pre_display_size|} -@!l:scaled; {new |display_width|} -@!s:scaled; {new |display_indent|} -@!p:pointer; {current node when calculating |pre_display_size|} -@!q:pointer; {glue specification when calculating |pre_display_size|} -@!f:internal_font_number; {font in current |char_node|} -@!n:integer; {scope of paragraph shape specification} -@!v:scaled; {|w| plus possible glue amount} -@!d:scaled; {increment to |v|} -begin get_token; {|get_x_token| would fail on \.{\\ifmmode}\thinspace!} -@y -procedure init_math; -label reswitch,found,not_found,done; -var w:scaled; {new or partial |pre_display_size|} -@!l:scaled; {new |display_width|} -@!s:scaled; {new |display_indent|} -@!p:pointer; {current node when calculating |pre_display_size|} -@!q:pointer; {glue specification when calculating |pre_display_size|} -@!f:internal_font_number; {font in current |char_node|} -@!n:integer; {scope of paragraph shape specification} -@!v:scaled; {|w| plus possible glue amount} -@!d:scaled; {increment to |v|} -begin get_token; {|get_x_token| would fail on \.{\\ifmmode}\thinspace!} -tmp_dir_stack:=get_avail; -if next_fake_math_flag=0 then - info(tmp_dir_stack):=math_direction -else begin - info(tmp_dir_stack):=text_direction; - next_fake_math_flag:=0; - end; -link(tmp_dir_stack):=math_dir_stack; -math_dir_stack:=tmp_dir_stack; -@z -%------------------------- -@x [48] m.1145 -@<Go into display math mode@>= -begin if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'} - begin pop_nest; w:=-max_dimen; - end -else begin line_break(display_widow_penalty);@/ -@y -@<Go into display math mode@>= -begin if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'} - begin pop_nest; w:=-max_dimen; - end -else begin line_break(display_widow_penalty,info(par_dir_stack));@/ -@z -%------------------------- -@x [48] m.1168 -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-3; - p:=vpackage(link(head),saved(1),saved(0),max_dimen,saved(2)); pop_nest; - tail_append(new_noad); type(tail):=vcenter_noad; - math_type(nucleus(tail)):=sub_box; info(nucleus(tail)):=p; - end; -@z -%------------------------- -@x [48] m.1174 -begin unsave; p:=fin_mlist(null); -@y -begin unsave; p:=fin_mlist(null); -@z -%------------------------- -@x [48] m.1186 -math_group: begin unsave; decr(save_ptr);@/ -@y -math_group: begin unsave; decr(save_ptr);@/ -@z -%------------------------- -@x [48] m.1191 - else begin p:=fin_mlist(p); unsave; {end of |math_left_group|} -@y - else begin p:=fin_mlist(p); unsave; {end of |math_left_group|} -@z -%------------------------- -@x [48] m.1194 -procedure after_math; -var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'} -@!danger:boolean; {not enough symbol fonts are present} -@!m:integer; {|mmode| or |-mmode|} -@!p:pointer; {the formula} -@!a:pointer; {box containing equation number} -@<Local variables for finishing a displayed formula@>@; -begin danger:=false; -@<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; -m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest} -if mode=-m then {end of equation number} - begin @<Check that another \.\$ follows@>; - cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; - mlist_to_hlist; a:=hpack(link(temp_head),natural); - unsave; decr(save_ptr); {now |cur_group=math_shift_group|} - if saved(0)=1 then l:=true; -@y -procedure after_math; -var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'} -@!danger:boolean; {not enough symbol fonts are present} -@!m:integer; {|mmode| or |-mmode|} -@!p:pointer; {the formula} -@!a:pointer; {box containing equation number} -@<Local variables for finishing a displayed formula@>@; -begin danger:=false; -@<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; -m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest} -if mode=-m then {end of equation number} - begin @<Check that another \.\$ follows@>; - cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; - mlist_to_hlist; a:=hpack(link(temp_head),natural,info(math_dir_stack)); - unsave; decr(save_ptr); {now |cur_group=math_shift_group|} - if saved(0)=1 then l:=true; -@z -%------------------------- -@x [48] m.1196 -@<Finish math in text@>= -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 -@<Finish math in text@> = -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; -tmp_dir_stack:=math_dir_stack; -math_dir_stack:=link(math_dir_stack); -free_avail(tmp_dir_stack); -end -@z -%------------------------- -@x [48] m.1199 -@<Finish displayed math@>= -cur_mlist:=p; cur_style:=display_style; mlist_penalties:=false; -mlist_to_hlist; p:=link(temp_head);@/ -adjust_tail:=adjust_head; b:=hpack(p,natural); p:=list_ptr(b); -t:=adjust_tail; adjust_tail:=null;@/ -w:=width(b); z:=display_width; s:=display_indent; -@y -@<Finish displayed math@>= -cur_mlist:=p; cur_style:=display_style; mlist_penalties:=false; -mlist_to_hlist; p:=link(temp_head);@/ -adjust_tail:=adjust_head; b:=hpack(p,natural,info(math_dir_stack)); -p:=list_ptr(b); -t:=adjust_tail; adjust_tail:=null;@/ -w:=width(b); z:=display_width; s:=display_indent; -@z -%------------------------- -@x [48] m.1200 -procedure resume_after_display; -begin if cur_group<>math_shift_group then confusion("display"); -@:this can't happen display}{\quad display@> -unsave; prev_graf:=prev_graf+3; -@y -procedure resume_after_display; -begin if cur_group<>math_shift_group then confusion("display"); -@:this can't happen display}{\quad display@> -unsave; prev_graf:=prev_graf+3; -tmp_dir_stack:=math_dir_stack; -math_dir_stack:=link(math_dir_stack); -free_avail(tmp_dir_stack); -@z -%------------------------- -@x [48] m.1201 -@<Squeeze the equation as much as possible...@>= -begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| - (total_shrink[sfi]<>0)or(total_shrink[fil]<>0)or - (total_shrink[fill]<>0)or(total_shrink[filll]<>0)) then - begin free_node(b,box_node_size); - b:=hpack(p,z-q,exactly); - end -else begin e:=0; - if w>z then - begin free_node(b,box_node_size); - b:=hpack(p,z,exactly); - end; - end; -w:=width(b); -end -@y -@<Squeeze the equation as much as possible...@>= -begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| - (total_shrink[sfi]<>0)or(total_shrink[fil]<>0)or - (total_shrink[fill]<>0)or(total_shrink[filll]<>0)) then - begin free_node(b,box_node_size); - b:=hpack(p,z-q,exactly,info(math_dir_stack)); - end -else begin e:=0; - if w>z then - begin free_node(b,box_node_size); - b:=hpack(p,z,exactly,info(math_dir_stack)); - end; - end; -w:=width(b); -end -@z -%------------------------- -@x [49] m.1204 -@ @<Append the display and perhaps also the equation number@>= -if e<>0 then - begin r:=new_kern(z-w-e-d); - if l then - begin link(a):=r; link(r):=b; b:=a; d:=0; - end - else begin link(b):=r; link(r):=a; - end; - b:=hpack(b,natural); - end; -shift_amount(b):=s+d; append_to_vlist(b) -@y -@ @<Append the display and perhaps also the equation number@>= -if e<>0 then - begin r:=new_kern(z-w-e-d); - if l then - begin link(a):=r; link(r):=b; b:=a; d:=0; - end - else begin link(b):=r; link(r):=a; - end; - b:=hpack(b,natural,info(math_dir_stack)); - end; -shift_amount(b):=s+d; append_to_vlist(b) -@z -%------------------------- -@x [49] m.1210 -any_mode(assign_int), -@y -any_mode(assign_next_fake_math), -any_mode(assign_int), -any_mode(assign_dir), -@z -%------------------------- -@x [49] m.1228 -assign_dimen: begin p:=cur_chr; scan_optional_equals; - scan_normal_dimen; word_define(p,cur_val); - end; -@y -assign_next_fake_math: next_fake_math_flag:=1; -assign_dir: begin - @<DIR: Assign direction codes@> - end; -assign_dimen: begin p:=cur_chr; scan_optional_equals; - scan_normal_dimen; word_define(p,cur_val); - end; -@z -%------------------------- -@x [49] m.1257 -@!flushable_string:str_number; {string not yet referenced} -@y -@!natural_dir:integer;{the natural direction of the font} -@!flushable_string:str_number; {string not yet referenced} -@z -%------------------------- -@x [49] m.1257 -if scan_keyword("offset") then begin - scan_int; - offset:=cur_val; - if (cur_val<0) then begin - print_err("Illegal offset has been changed to 0"); - help1("The offset must be bigger than 0."); int_error(cur_val); - offset:=0; - end - end -else offset:=0; -name_in_progress:=false; -@<If this font has already been loaded, set |f| to the internal - font number and |goto common_ending|@>; -f:=read_font_info(u,cur_name,cur_area,s,offset); -@y -if scan_keyword("offset") then begin - scan_int; - offset:=cur_val; - if (cur_val<0) then begin - print_err("Illegal offset has been changed to 0"); - help1("The offset must be bigger than 0."); int_error(cur_val); - offset:=0; - end - end -else offset:=0; -if scan_keyword("naturaldir") then begin - scan_dir; - natural_dir:=cur_val; - end -else natural_dir:=-1; -name_in_progress:=false; -@<If this font has already been loaded, set |f| to the internal - font number and |goto common_ending|@>; -f:=read_font_info(u,cur_name,cur_area,s,offset,natural_dir); -@z -%------------------------- -@x [51] m.1337 -if (loc<limit)and(cat_code(buffer[loc])<>escape) then start_input; - {\.{\\input} assumed} -@y -if (loc<limit)and(cat_code(buffer[loc])<>escape) then start_input; - {\.{\\input} assumed} -@<DIR: Initialize direction stacks@>; -@z -%------------------------- -@x [53] m.1341 -@d language_node=4 {|subtype| in whatsits that change the current language} -@y -@d language_node=4 {|subtype| in whatsits that change the current language} -@d dir_node_size=4 {number of words in change direction node} -@d dir_dir(#)==info(#+1) {keep the direction to be taken} -@d dir_dvi_ptr(#)==link(#+1) {for reflecting dvi output} -@d dir_dvi_h(#)==info(#+2) {for reflecting dvi output} -@z -%------------------------- -@x [53] m.1342 -@!write_open:array[0..17] of boolean; -@y -@!write_open:array[0..17] of boolean; -@!neg_wd:scaled; -@!pos_wd:scaled; -@!neg_ht:scaled; -@!dvi_direction:integer; -@!dir_primary:array[0..31] of 0..31; -@!dir_secondary:array[0..31] of 0..31; -@!dir_tertiary:array[0..31] of 0..31; -@!dir_rearrange:array[0..3] of 0..31; -@!dir_names:array[0..3] of str_number; -@z -%------------------------- -@x [53] m.1343 -for k:=0 to 17 do write_open[k]:=false; -@y -for k:=0 to 17 do write_open[k]:=false; -set_new_eqtb_int(dir_base+page_direction_code,0); -set_new_eqtb_int(dir_base+body_direction_code,0); -set_new_eqtb_int(dir_base+par_direction_code,0); -set_new_eqtb_int(dir_base+text_direction_code,0); -set_new_eqtb_int(dir_base+math_direction_code,0); -set_new_eqtb_sc(dimen_base+page_height_code,55380984); {29.7cm} -set_new_eqtb_sc(dimen_base+page_width_code,39158276); {21cm} -set_new_eqtb_sc(dimen_base+page_bottom_offset_code,page_height-9472573); - {-2 inches} -set_new_eqtb_sc(dimen_base+page_right_offset_code,page_width-9472573); - {-2 inches} -for k:= 0 to 7 do begin - dir_primary [k ]:=dir_T; - dir_primary [k+ 8]:=dir_L; - dir_primary [k+16]:=dir_B; - dir_primary [k+24]:=dir_R; - end; -for k:= 0 to 3 do begin - dir_secondary[k ]:=dir_L; - dir_secondary[k+ 4]:=dir_R; - dir_secondary[k+ 8]:=dir_T; - dir_secondary[k+12]:=dir_B; - - dir_secondary[k+16]:=dir_L; - dir_secondary[k+20]:=dir_R; - dir_secondary[k+24]:=dir_T; - dir_secondary[k+28]:=dir_B; - end; -for k:=0 to 7 do begin - dir_tertiary[k*4 ]:=dir_T; - dir_tertiary[k*4+1]:=dir_L; - dir_tertiary[k*4+2]:=dir_B; - dir_tertiary[k*4+3]:=dir_R; - end; -dir_rearrange[0]:=0; -dir_rearrange[1]:=0; -dir_rearrange[2]:=1; -dir_rearrange[3]:=1; -dir_names[0]:="T"; -dir_names[1]:="L"; -dir_names[2]:="B"; -dir_names[3]:="R"; -@z -%------------------------- -@x [53] m.1344 -@d set_language_code=5 {command modifier for \.{\\setlanguage}} -@y -@d set_language_code=5 {command modifier for \.{\\setlanguage}} -@d dir_whatsit_node=6 {|subtype| in whatsits for change direction node} -@z -%------------------------- -@x [53] m.1344 -primitive("localinterlinepenalty",assign_int, - int_base+local_inter_line_penalty_code);@/ -primitive("localbrokenpenalty",assign_int, - int_base+local_broken_penalty_code);@/ -@y -primitive("localinterlinepenalty",assign_int, - int_base+local_inter_line_penalty_code);@/ -primitive("localbrokenpenalty",assign_int, - int_base+local_broken_penalty_code);@/ -primitive("pagedir",assign_dir,dir_base+page_direction_code);@/ -primitive("bodydir",assign_dir,dir_base+body_direction_code);@/ -primitive("pardir",assign_dir,dir_base+par_direction_code);@/ -primitive("textdir",assign_dir,dir_base+text_direction_code);@/ -primitive("mathdir",assign_dir,dir_base+math_direction_code);@/ -primitive("pageheight",assign_dimen,dimen_base+page_height_code);@/ -primitive("pagewidth",assign_dimen,dimen_base+page_width_code);@/ -primitive("nextfakemath",assign_next_fake_math,0);@/ -{ -primitive("pagerightoffset",assign_dimen,dimen_base+page_right_offset_code);@/ -primitive("pagebottomoffset",assign_dimen,dimen_base+page_bottom_offset_code);@/ -} -@z -%------------------------- -@x [53] m.1346 - set_language_code:print_esc("setlanguage"); - othercases print("[unknown extension!]") - endcases; -@y - set_language_code:print_esc("setlanguage"); - othercases print("[unknown extension!]") - endcases; -@z -%------------------------- -@x [53] m.1348 -set_language_code:@<Implement \.{\\setlanguage}@>; -@y -set_language_code:@<Implement \.{\\setlanguage}@>; -@z -%------------------------- -@x [53] m.1349 -procedure new_whatsit(@!s:small_number;@!w:small_number); -var p:pointer; {the new node} -begin p:=get_node(w); type(p):=whatsit_node; subtype(p):=s; -link(tail):=p; tail:=p; -end; -@y -procedure new_whatsit(@!s:small_number;@!w:small_number); -var p:pointer; {the new node} -begin p:=get_node(w); type(p):=whatsit_node; subtype(p):=s; -@<LOCAL: Add info node pointer@>; -link(tail):=p; tail:=p; -end; -@z -%------------------------- -@x [53] m.1356 -language_node:begin print_esc("setlanguage"); - print_int(what_lang(p)); print(" (hyphenmin "); - print_int(what_lhm(p)); print_char(","); - print_int(what_rhm(p)); print_char(")"); - end; -@y -language_node:begin print_esc("setlanguage"); - print_int(what_lang(p)); print(" (hyphenmin "); - print_int(what_lhm(p)); print_char(","); - print_int(what_rhm(p)); print_char(")"); - end; -dir_whatsit_node: - if dir_dir(p)<0 then begin - print_esc("enddir"); print(" "); print_dir(dir_dir(p)+64); - end - else begin - print_esc("begindir"); print(" "); print_dir(dir_dir(p)); - end; -@z -%------------------------- -@x [53] m.1357 -close_node,language_node: begin r:=get_node(small_node_size); - words:=small_node_size; - end; -@y -close_node,language_node: begin r:=get_node(small_node_size); - words:=small_node_size; - end; -dir_whatsit_node: begin r:=get_node(dir_node_size); - words:=small_node_size; - end; -@z -%------------------------- -@x [53] m.1358 -close_node,language_node: free_node(p,small_node_size); -@y -close_node,language_node: free_node(p,small_node_size); -dir_whatsit_node: free_node(p,dir_node_size); -@z -%------------------------- -@x -procedure make_info_node; -{This function creates an |info_node|} -var p:pointer; -begin -p:=get_node(info_size); type(p):=info_node; -link(p):=null; -info_ref_count(p):=1; -info_pen_inter(p):=local_inter_line_penalty; -info_pen_broken(p):=local_broken_penalty; -if local_left_box=null then - info_left_box(p):=null -else - info_left_box(p):=copy_node_list(local_left_box); -if local_right_box=null then - info_right_box(p):=null -else - info_right_box(p):=copy_node_list(local_right_box); -if current_file_node=null then begin - info_file(p):=null; - end -else begin - info_file(p):=current_file_node; - file_incr_ref_count(current_file_node); - end; -eq_define(local_par_info_base,data,p); -end; -@y -procedure init_local_direction; forward; -procedure make_info_node; -{This function creates an |info_node|} -var p:pointer; -begin -if local_dir=null then init_local_direction -else begin - p:=get_node(info_size); type(p):=info_node; - link(p):=null; - info_ref_count(p):=1; - info_pen_inter(p):=local_inter_line_penalty; - info_pen_broken(p):=local_broken_penalty; - if local_left_box=null then - info_left_box(p):=null - else - info_left_box(p):=copy_node_list(local_left_box); - if local_right_box=null then - info_right_box(p):=null - else - info_right_box(p):=copy_node_list(local_right_box); - if current_file_node=null then begin - info_file(p):=null; - end - else begin - info_file(p):=current_file_node; - file_incr_ref_count(current_file_node); - end; - info_dir(p):=local_dir; - dir_incr_ref_count(local_dir); - eq_define(local_par_info_base,data,p); - end; -end; - -procedure init_local_direction; -var new_ptr:pointer; - no_levels:integer; -begin -no_levels:=1; -new_ptr:=get_node(dir_size+no_levels*2); -type(new_ptr):=dir_node; -dir_no(new_ptr):=no_levels; -dir_ref_count(new_ptr):=1; -mem[new_ptr+2*no_levels].int:=cur_level; -mem[new_ptr+2*no_levels+1].int:=cur_val; -eq_define(local_dir_base,data,new_ptr); -make_info_node; -end; - -procedure make_local_direction(new_val:integer;new_stack:boolean); -var old_ptr,new_ptr:pointer; - i,no_levels:integer; -begin -old_ptr:=local_dir; -if new_stack then - no_levels:=1 -else if mem[old_ptr+2*dir_no(old_ptr)].int=cur_level then - no_levels:=dir_no(old_ptr) -else - no_levels:=dir_no(old_ptr)+1; -new_ptr:=get_node(dir_size+no_levels*2); -type(new_ptr):=dir_node; -dir_no(new_ptr):=no_levels; -dir_ref_count(new_ptr):=1; -for i:=1 to no_levels-1 do begin - mem[new_ptr+2*i].int:=mem[old_ptr+2*i].int; - mem[new_ptr+2*i+1].int:=mem[old_ptr+2*i+1].int; - end; -mem[new_ptr+2*no_levels].int:=cur_level; -mem[new_ptr+2*no_levels+1].int:=new_val; -eq_define(local_dir_base,data,new_ptr); -make_info_node; -end; -@z -%------------------------- -@x -@ @<LOCAL: Change file node@>= -begin -make_file_node; -end - -@y -@ @<LOCAL: Change file node@>= -begin -make_file_node; -end - -@ @<LOCAL: Delete direction node@>= -begin -dir_decr_ref_count(p); -end - -@ @<DIR: Initialize direction stacks@>= -begin -par_dir_stack:=null; -math_dir_stack:=null; -align_dir_stack:=null; -init_local_direction; -end - -@ @<DIR: Assign direction codes@>= -case cur_chr of -dir_base+page_direction_code: begin - if its_all_over then begin - scan_dir; - eq_word_define(dir_base+page_direction_code,cur_val); - end; - end; -dir_base+body_direction_code: begin - if its_all_over then begin - scan_dir; - eq_word_define(dir_base+body_direction_code,cur_val); - end; - end; -dir_base+par_direction_code: begin - scan_dir; - eq_word_define(dir_base+par_direction_code,cur_val); - end; -dir_base+text_direction_code: begin scan_dir; - eq_word_define(dir_base+text_direction_code,cur_val); - make_local_direction(cur_val,false); - end; -dir_base+math_direction_code: begin scan_dir; - eq_word_define(dir_base+math_direction_code,cur_val); - end; -end; - -@ -@d push_dir_node(#)== -begin dir_tmp:=get_node(dir_node_size); -type(dir_tmp):=whatsit_node; subtype(dir_tmp):=dir_whatsit_node; -dir_dir(dir_tmp):=#; -link(dir_tmp):=dir_ptr; dir_ptr:=dir_tmp; -end - -@d pop_dir_node== -begin dir_tmp:=dir_ptr; -dir_ptr:=link(dir_tmp); -free_node(dir_tmp,dir_node_size); -end - -@ @<DIR: Declare |change_dir|@>= -procedure change_dir(p:pointer;dir:integer); -var new_info:pointer; - old_info:pointer; - new_dir_node:pointer; -begin -old_info:=ptr_info(p); -if old_info=null then confusion("changedir"); -new_info:=get_node(info_size); type(new_info):=info_node; -link(new_info):=null; -info_ref_count(new_info):=1; -info_pen_inter(new_info):=info_pen_inter(old_info); -info_pen_broken(new_info):=info_pen_broken(old_info); -if info_left_box(old_info)=null then - info_left_box(new_info):=null -else - info_left_box(new_info):=copy_node_list(info_left_box(old_info)); -if info_right_box(old_info)=null then - info_right_box(new_info):=null -else - info_right_box(new_info):=copy_node_list(info_right_box(old_info)); -info_file(new_info):=info_file(old_info); -file_incr_ref_count(info_file(old_info)); -new_dir_node:=get_node(dir_size+2); -type(new_dir_node):=dir_node; -dir_no(new_dir_node):=1; -dir_ref_count(new_dir_node):=2; {core dump if we put 1; why?} -mem[new_dir_node+2].int:=0; -mem[new_dir_node+3].int:=dir; -info_dir(new_info):=new_dir_node; -ptr_info(p):=new_info; -info_decr_ref_count(old_info); -end - -@ @<DIR: Initialize the text direction@>= -begin -dir_ptr:=null; -cur_direction:=dvi_direction; -new_dir_node:=info_dir(ptr_info(p)); -for i:=1 to dir_no(new_dir_node) do - @<DIR: PUSH a new direction for mixed direction typesetting@>; -prev_dir_node:=new_dir_node; -end - -@ @<DIR: Finalize the text direction@>= -begin -for i:=dir_no(prev_dir_node) downto 1 do - @<DIR: POP a new direction for mixed direction typesetting@>; -end - -@ @<DIR: Check if the text direction has changed@>= -begin -if p<>null then -if ptr_info(p)<>null then -if info_dir(ptr_info(p))<>null then begin - new_dir_node:=info_dir(ptr_info(p)); - if new_dir_node<>prev_dir_node then begin - m:=dir_no(prev_dir_node); - if dir_no(new_dir_node)<m then m:=dir_no(new_dir_node); - i:=1; dir_level:=0; dir_found:=false; - while not dir_found do begin - if i>m then dir_found:=true - else if mem[prev_dir_node+2*i+1].int = mem[new_dir_node+2*i+1].int then - incr(dir_level) - else dir_found:=true; - incr(i); - end; - for i:=dir_no(prev_dir_node) downto dir_level+1 do - @<DIR: POP a new direction for mixed direction typesetting@>; - for i:=dir_level+1 to dir_no(new_dir_node) do - @<DIR: PUSH a new direction for mixed direction typesetting@>; - prev_dir_node:=new_dir_node; - end - end -else begin print("No local node"); print_ln; end -else begin print("No direction node"); print_ln; end -end - -@ @<DIR: PUSH a new direction for mixed direction typesetting@>=begin - synch_h; synch_v; - d:=mem[new_dir_node+2*i+1].int; - if not((i=1) and (cur_direction=d)) then begin - push_dir_node(dvi_direction); - if dir_opposite(dir_secondary[d])(dir_secondary[dvi_direction]) then begin - if (dir_secondary[dvi_direction]=0) or - (dir_secondary[dvi_direction]=2) then - dvi_out(down4) - else - dvi_out(right4); - dir_dvi_ptr(dir_ptr):=dvi_ptr; - dir_dvi_h(dir_ptr):=dvi_h; - dvi_four(0); - cur_h:=0; dvi_h:=0; - end - else begin - dir_dvi_ptr(dir_ptr):=dvi_ptr; - dir_dvi_h(dir_ptr):=dvi_h; - end; - append_string("om:"); - append_string("startdir="); - append_char(dir_names[dir_primary[d]]); - append_char(dir_names[dir_secondary[d]]); - append_char(dir_names[dir_tertiary[d]]); - g:=make_string; - if length(g)<256 then - begin dvi_out(xxx1); dvi_out(length(g)); - end - else begin dvi_out(xxx4); dvi_four(length(g)); - end; - for newk:=str_start(g) to pool_ptr-1 do dvi_out(so(str_pool[newk])); - flush_string; {erase the string} - dvi_direction:=d; - end - end - -@ @<DIR: POP a new direction for mixed direction typesetting@>=begin - synch_h; synch_v; - d:=mem[prev_dir_node+2*i+1].int; - if not((i=1) and (cur_direction=d)) then begin - dvi_dir_h:=dir_dvi_h(dir_ptr); - dvi_dir_ptr:=dir_dvi_ptr(dir_ptr); - dvi_direction:=dir_dir(dir_ptr); - pop_dir_node; - if dir_opposite(dir_secondary[d])(dir_secondary[dvi_direction]) then begin - dvi_temp_ptr:=dvi_ptr; - dvi_ptr:=dvi_dir_ptr; - if (dir_secondary[dvi_direction]=0) or - (dir_secondary[dvi_direction]=1) then - dvi_four(cur_h) - else - dvi_four(-cur_h); - dvi_ptr:=dvi_temp_ptr; - append_string("om:"); - append_string("enddir="); - append_char(dir_names[dir_primary[d]]); - append_char(dir_names[dir_secondary[d]]); - append_char(dir_names[dir_tertiary[d]]); - g:=make_string; - if length(g)<256 then - begin dvi_out(xxx1); dvi_out(length(g)); - end - else begin dvi_out(xxx4); dvi_four(length(g)); - end; - for newk:=str_start(g) to pool_ptr-1 do dvi_out(so(str_pool[newk])); - flush_string; {erase the string} - if (dir_secondary[dvi_direction]=0) or - (dir_secondary[dvi_direction]=2) then - dvi_out(down4) - else - dvi_out(right4); - if (dir_secondary[dvi_direction]=0) or - (dir_secondary[dvi_direction]=1) then - dvi_four(cur_h) - else - dvi_four(-cur_h); - cur_h:=dvi_dir_h+cur_h; dvi_h:=cur_h; - end - else begin - append_string("om:"); - append_string("enddir="); - append_char(dir_names[dir_primary[d]]); - append_char(dir_names[dir_secondary[d]]); - append_char(dir_names[dir_tertiary[d]]); - g:=make_string; - if length(g)<256 then - begin dvi_out(xxx1); dvi_out(length(g)); - end - else begin dvi_out(xxx4); dvi_four(length(g)); - end; - for newk:=str_start(g) to pool_ptr-1 do dvi_out(so(str_pool[newk])); - flush_string; {erase the string} - end - end - end -@z diff --git a/Build/source/texk/web2c/omegadir/omega-pool.h b/Build/source/texk/web2c/omegadir/omega-pool.h deleted file mode 100644 index 22824eb2682..00000000000 --- a/Build/source/texk/web2c/omegadir/omega-pool.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef OMEGA_POOL_H -#define OMEGA_POOL_H -typedef int integer; -typedef integer strnumber; -typedef unsigned short packedASCIIcode; -typedef integer poolpointer; -extern packedASCIIcode * strpool; -extern poolpointer poolptr; -#endif diff --git a/Build/source/texk/web2c/omegadir/omega.c b/Build/source/texk/web2c/omegadir/omega.c deleted file mode 100644 index e96b1444ec3..00000000000 --- a/Build/source/texk/web2c/omegadir/omega.c +++ /dev/null @@ -1,624 +0,0 @@ -/* omega.c: C routines to support the Omega Pascal Web distribution - -This file is part of Omega, -which is based on the web2c distribution of TeX, - -Copyright (c) 1994--2001 John Plaice and Yannis Haralambous - -Omega is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Omega is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Omega; if not, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#define EXTERN extern -#include "omegad.h" - -void -btestin(void) -{ - string fname = - kpse_find_file (nameoffile + 1, kpse_program_binary_format, true); - - if (fname) { - libcfree(nameoffile); - nameoffile = (char *)xmalloc(2+strlen(fname)); - namelength = strlen(fname); - strcpy(nameoffile+1, fname); - } - else { - libcfree(nameoffile); - nameoffile = (char *)xmalloc(2); - namelength = 0; - nameoffile[0] = 0; - nameoffile[1] = 0; - } -} - -int -getfilemode P2C(FILE *, f, int, def) -{ - int c,m; - if ((def==0)||(feof(f))) m=0; - else { - c = getc(f); - if (c==EOF) m=0; - else if (c==0x5c) { - if (feof(f)) m=0; - else { - c = getc(f); - if (c==EOF) m=0; - else if (c==0) m=4; - else m=1; - ungetc(c,f); - c=0x5c; - } - } - else if (c==0x25) { - if (feof(f)) m=0; - else { - c = getc(f); - if (c==EOF) m=0; - else if (c==0) m=4; - else m=1; - ungetc(c,f); - c=0x25; - } - } - else if (c==0xe0) m=2; - else if (c==0x6c) m=2; - else if (c==0) { - if (feof(f)) m=0; - else { - c = getc(f); - if (c==EOF) m=0; - else if (c==0x5c) m=3; - else if (c==0x25) m=3; - else m=def; - ungetc(c,f); - c=0; - } - } - else m=def; - ungetc(c,f); - } - return m; -} - -int -getc_two_LE P1C(FILE *, f) -{ - register int i,j; - i = getc(f); - if (i==EOF) { return i; } - j = getc(f); - if (j==EOF) { return j; } - return ((j<<8)|i); -} - -void -ungetc_two_LE P2C(int, c, FILE *, f) -{ - ungetc((c>>8), f); - ungetc((c&0377), f); -} - -int -getc_two P1C(FILE *, f) -{ - register int i,j; - i = getc(f); - if (i==EOF) { return i; } - j = getc(f); - if (j==EOF) { return j; } - return ((i<<8)|j); -} - -void -ungetc_two P2C(int, c, FILE *, f) -{ - ungetc((c&0377), f); - ungetc((c>>8), f); -} - -#define advance_cin if ((c_in = fgetc(f)) == EOF) return EOF - -int -getc_UTF8 P1C(FILE *, f) -{ - register int c_in,c_out; - - advance_cin; - if (c_in<0x80) { - c_out = c_in & 0x7f; - } else if (c_in<0xe0) { - c_out = (c_in & 0x1f) << 6; - advance_cin; - c_out |= c_in & 0x3f; - } else if (c_in<=0xf0) { - c_out = (c_in & 0xf) << 12; - advance_cin; - c_out |= (c_in & 0x3f) << 6; - advance_cin; - c_out |= c_in & 0x3f; - } else if (c_in<0xf8) { - c_out = (c_in & 0x7) << 18; - advance_cin; - c_out |= (c_in & 0x3f) << 12; - advance_cin; - c_out |= (c_in & 0x3f) << 6; - advance_cin; - c_out |= c_in & 0x3f; - } else if (c_in<0xfc) { - c_out = (c_in & 0x3) << 24; - advance_cin; - c_out |= (c_in & 0x3f) << 18; - advance_cin; - c_out |= (c_in & 0x3f) << 12; - advance_cin; - c_out |= (c_in & 0x3f) << 6; - advance_cin; - c_out |= c_in & 0x3f; - } else { /* c>=0xfc */ - c_out = (c_in & 0x1) << 30; - advance_cin; - c_out |= (c_in & 0x3f) << 24; - advance_cin; - c_out |= (c_in & 0x3f) << 18; - advance_cin; - c_out |= (c_in & 0x3f) << 12; - advance_cin; - c_out |= (c_in & 0x3f) << 6; - advance_cin; - c_out |= c_in & 0x3f; - } - return c_out; -} - -void -ungetc_UTF8 P2C(int, c, FILE *, f) -{ - /* Still to be done */ -} - -#define advance_two_cin advance_cin; \ - c_in_hi = c_in; \ - advance_cin; \ - c_in = (c_in_hi & 0xff) << 8 - -int -getc_UTF16 P1C(FILE *, f) -{ - register int c_in,c_in_hi,c_out; - - advance_two_cin; - if ((c_in>=0xd800) && (c_in<=0xdbff)) { - c_out = (c_in - 0xd800) * 0x400; - advance_two_cin; - if ((c_in>=0xdc00) && (c_in<=0xdfff)) { - c_out += (c_in - 0xdc00) + 0x10000; - } else { - return 0xfffd; - } - } else { - c_out = c_in; - } - return c_out; -} - -void -ungetc_UTF16 P2C(int, c, FILE *, f) -{ - /* Still to be done */ -} - -#define advance_twoLE_cin advance_cin; \ - c_in_lo = c_in; \ - advance_cin; \ - c_in = (c_in << 8) | (c_in_lo & 0xff) - -int -getc_UTF16LE P1C(FILE *, f) -{ - register int c_in,c_in_lo,c_out; - - advance_twoLE_cin; - if ((c_in>=0xd800) && (c_in<=0xdbff)) { - c_out = (c_in - 0xd800) * 0x400; - advance_twoLE_cin; - if ((c_in>=0xdc00) && (c_in<=0xdfff)) { - c_out += (c_in - 0xdc00) + 0x10000; - } else { - return 0xfffd; - } - } else { - c_out = c_in; - } - return c_out; -} - -void -ungetc_UTF16LE P2C(int, c, FILE *, f) -{ - /* Still to be done */ -} - - -extern boolean zpnewinputln (); - -boolean -newinputln P4C(FILE *,f, halfword,themode, halfword,translation, boolean,bypass) -{ - return zpnewinputln((alphafile)f, - (halfword)themode, - (halfword)translation, - (boolean) bypass); -} - -boolean -new_input_line P2C(FILE *, f, halfword, themode) -{ - register int i=EOF; - - last = first; - otpinputend = 0; - - if (themode==1) { - while ((otpinputend < ocpbufsize) && ((i = getc (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc(f); if (i != '\n') ungetc(i,f); - } - } else if (themode==2) { - while ((otpinputend < ocpbufsize) && ((i = getc (f)) != EOF) && - (i != 0x25)) - otpinputbuf[++otpinputend] = i; - } else if (themode==3) { - while ((otpinputend < ocpbufsize) && ((i = getc_two (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc_two(f); if (i != '\n') ungetc_two(i,f); - } - } else if (themode==4) { - while ((otpinputend < ocpbufsize) && ((i = getc_two_LE (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc_two_LE(f); if (i != '\n') ungetc_two_LE(i,f); - } - } else if (themode==5) { - while ((otpinputend < ocpbufsize) && ((i = getc_UTF8 (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc_UTF8(f); if (i != '\n') ungetc_UTF8(i,f); - } - } else if (themode==6) { - while ((otpinputend < ocpbufsize) && ((i = getc_UTF16 (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc_UTF16(f); if (i != '\n') ungetc_UTF16(i,f); - } - } else /* themode==7 */ { - while ((otpinputend < ocpbufsize) && ((i = getc_UTF16LE (f)) != EOF) && - ((i != '\r') && (i != '\n'))) - otpinputbuf[++otpinputend] = i; - if (i=='\r') { - i=getc_UTF16LE(f); if (i != '\n') ungetc_UTF16LE(i,f); - } - } - - if (i == EOF && otpinputend == 0) - return false; - - /* We didn't get the whole line because our buffer was too small. -*/ - if (i != EOF && (((themode!=2) && (i != '\n')) || ((themode==2) && (i != 0x25)))) - { - (void) fprintf (stderr, - "! Unable to read an entire line---ocp_buf_size=%ld.\n",ocpbufsize); - (void) fprintf (stderr, "Please increase ocp_buf_size in texmf.cnf.\n"); - uexit (1); - } - - return true; -} - -extern memoryword ziniteqtbentry () ; - -hashword hashtable[HASHTABLESIZE]; - -void -inithhashtable P1H(void) -{ - int i; - for (i=0; i<HASHTABLESIZE; i++) { - hashtable[i].p = -1; - } - -} - -hashword * -createeqtbpos P1C(int, p) -{ - hashword *runner= &(hashtable[p%HASHTABLESIZE]); - if (runner->p==p) return runner; - while (runner->p != -1) { - runner = runner->ptr; - if (runner->p == p) return runner; - } - runner->p = p; - runner->mw = ziniteqtbentry(p); - runner->ptr = (hashword *) xmalloc(sizeof(hashword)); - (runner->ptr)->p = -1; - return runner; -} - -memoryword * -createeqtbptr P1C(int, p) -{ - hashword *runner= &(hashtable[p%HASHTABLESIZE]); - if (runner->p==p) return (&(runner->mw)); - while (runner->p != -1) { - runner = runner->ptr; - if (runner->p == p) return (&(runner->mw)); - } - runner->p = p; - runner->mw = ziniteqtbentry(p); - runner->ptr = (hashword *) xmalloc(sizeof(hashword)); - (runner->ptr)->p = -1; - return (&(runner->mw)); -} - -hashword * -createxeqlevel P1C(int, p) -{ - hashword *runner= &(hashtable[p%HASHTABLESIZE]); - if (runner->p==p) return runner; - while (runner->p != -1) { - runner = runner->ptr; - if (runner->p == p) return runner; - } - runner->p = p; - runner->mw.cint = 1; - runner->mw.cint1 = 0; - runner->ptr = (hashword *) xmalloc(sizeof(hashword)); - (runner->ptr)->p = -1; - return runner; -} - -hashword * -createhashpos P1C(int, p) -{ - hashword *runner= &(hashtable[p%HASHTABLESIZE]); - if (runner->p==p) return runner; - while (runner->p != -1) { - runner = runner->ptr; - if (runner->p == p) return runner; - } - runner->p = p; - runner->mw.cint = 0; - runner->mw.cint1 = 0; - runner->ptr = (hashword *) xmalloc(sizeof(hashword)); - (runner->ptr)->p = -1; - return runner; -} - -void -dumphhashtable P1H(void) -{ - int i; - hashword *runner; - for (i=0; i<HASHTABLESIZE; i++) { - runner=&(hashtable[i]); - if (runner->p != -1) { - dumpint(-i); - while (runner->p != -1) { - dumpint(runner->p); - dumpwd(runner->mw); - runner=runner->ptr; - } - } - } - dumpint(-HASHTABLESIZE); -} - -void -undumphhashtable P1H(void) -{ - int i,j; - hashword *runner; - j=0; - undumpint(i); - while (j<HASHTABLESIZE) { - i = (-i); - while (j<i) { - hashtable[j].p = -1; - j++; - } - if (i<HASHTABLESIZE) { - runner = &(hashtable[j]); - undumpint(i); - while (i>=0) { - runner->p = i; - undumpwd(runner->mw); - undumpint(i); - runner->ptr = (hashword *) xmalloc(sizeof(hashword)); - runner = runner->ptr; - } - runner->p = -1; - j++; - } - } -} - -void -odateandtime P4C(int,timecode, int,daycode, int,monthcode, int,yearcode) -{ - integer tc,dc,mc,yc; - dateandtime(tc,dc,mc,yc); - setneweqtbint(timecode,tc); - setneweqtbint(daycode,dc); - setneweqtbint(monthcode,mc); - setneweqtbint(yearcode,yc); -} - -memoryword **fonttables; -static int font_entries = 0; - -void -allocatefonttable P2C(int, font_number, int, font_size) -{ - int i; - if (font_entries==0) { - fonttables = (memoryword **) xmalloc(256*sizeof(memoryword**)); - font_entries=256; - } else if ((font_number==256)&&(font_entries==256)) { - fonttables = (memoryword **) xrealloc(fonttables, 65536); - font_entries=65536; - } - fonttables[font_number] = - (memoryword *) xmalloc((font_size+1)*sizeof(memoryword)); - fonttables[font_number][0].cint = font_size; - fonttables[font_number][0].cint1 = 0; - for (i=1; i<=font_size; i++) { - fonttables[font_number][i].cint = 0; - fonttables[font_number][i].cint1 = 0; - } -} - -void -dumpfonttable P2C(int, font_number, int, words) -{ - fonttables[font_number][0].cint=words; - dumpthings(fonttables[font_number][0], fonttables[font_number][0].cint+1); -} - -void -undumpfonttable P1C(int, font_number) -{ - memoryword sizeword; - if (font_entries==0) { - fonttables = (memoryword **) xmalloc(256*sizeof(memoryword**)); - font_entries=256; - } else if ((font_number==256)&&(font_entries==256)) { - fonttables = (memoryword **) xrealloc(fonttables, 65536); - font_entries=65536; - } - - undumpthings(sizeword,1); - fonttables[font_number] = - (memoryword *) xmalloc((sizeword.cint+1)*sizeof(memoryword)); - fonttables[font_number][0].cint = sizeword.cint; - undumpthings(fonttables[font_number][1], sizeword.cint); -} - -memoryword **fontsorttables; -static int fontsort_entries = 0; - -void -allocatefontsorttable P2C(int, fontsort_number, int, fontsort_size) -{ - int i; - if (fontsort_entries==0) { - fontsorttables = (memoryword **) xmalloc(256*sizeof(memoryword**)); - fontsort_entries=256; - } else if ((fontsort_number==256)&&(fontsort_entries==256)) { - fontsorttables = (memoryword **) xrealloc(fontsorttables, 65536); - fontsort_entries=65536; - } - fontsorttables[fontsort_number] = - (memoryword *) xmalloc((fontsort_size+1)*sizeof(memoryword)); - fontsorttables[fontsort_number][0].cint = fontsort_size; - fontsorttables[fontsort_number][0].cint1 = 0; - for (i=1; i<=fontsort_size; i++) { - fontsorttables[fontsort_number][i].cint = 0; - fontsorttables[fontsort_number][i].cint1 = 0; - } -} - -void -dumpfontsorttable P2C(int, fontsort_number, int, words) -{ - fontsorttables[fontsort_number][0].cint=words; - dumpthings(fontsorttables[fontsort_number][0], - fontsorttables[fontsort_number][0].cint+1); -} - -void -undumpfontsorttable P1C(int, fontsort_number) -{ - memoryword sizeword; - if (fontsort_entries==0) { - fontsorttables = (memoryword **) xmalloc(256*sizeof(memoryword**)); - fontsort_entries=256; - } else if ((fontsort_number==256)&&(fontsort_entries==256)) { - fontsorttables = (memoryword **) xrealloc(fontsorttables, 65536); - fontsort_entries=65536; - } - - undumpthings(sizeword,1); - fontsorttables[fontsort_number] = - (memoryword *) xmalloc((sizeword.cint+1)*sizeof(memoryword)); - fontsorttables[fontsort_number][0].cint = sizeword.cint; - undumpthings(fontsorttables[fontsort_number][1], sizeword.cint); -} - -int **ocptables; -static int ocp_entries = 0; - -void -allocateocptable P2C(int, ocp_number, int, ocp_size) -{ - int i; - if (ocp_entries==0) { - ocptables = (int **) xmalloc(256*sizeof(int**)); - ocp_entries=256; - } else if ((ocp_number==256)&&(ocp_entries==256)) { - ocptables = (int **) xrealloc(ocptables, 65536); - ocp_entries=65536; - } - ocptables[ocp_number] = - (int *) xmalloc((1+ocp_size)*sizeof(int)); - ocptables[ocp_number][0] = ocp_size; - for (i=1; i<=ocp_size; i++) { - ocptables[ocp_number][i] = 0; - } -} - -void -dumpocptable P1C(int, ocp_number) -{ - dumpthings(ocptables[ocp_number][0], ocptables[ocp_number][0]+1); -} - -void -undumpocptable P1C(int, ocp_number) -{ - int sizeword; - if (ocp_entries==0) { - ocptables = (int **) xmalloc(256*sizeof(int**)); - ocp_entries=256; - } else if ((ocp_number==256)&&(ocp_entries==256)) { - ocptables = (int **) xrealloc(ocptables, 65536); - ocp_entries=65536; - } - undumpthings(sizeword,1); - ocptables[ocp_number] = - (int *) xmalloc((1+sizeword)*sizeof(int)); - ocptables[ocp_number][0] = sizeword; - undumpthings(ocptables[ocp_number][1], sizeword); -} diff --git a/Build/source/texk/web2c/omegadir/omega.defines b/Build/source/texk/web2c/omegadir/omega.defines deleted file mode 100644 index c47c515314f..00000000000 --- a/Build/source/texk/web2c/omegadir/omega.defines +++ /dev/null @@ -1,74 +0,0 @@ -{ omega.defines: Web declarations of Omega - -This file is part of Omega, -which is based on the web2c distribution of TeX, - -Copyright (c) 1994--2001, 2008 John Plaice and Yannis Haralambous - -Omega is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Omega is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Omega; if not, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -} - -@define function newinputln (); -@define function getfilemode (); -@define function newinputline (); -@define function neweqtb (); -@define function neweqtbint (); -@define function neweqtbsc (); -@define function newequiv (); -@define function newequiv1 (); -@define function neweqlevel (); -@define function neweqtype (); - -@define function newhashnext (); -@define function newhashtext (); -@define function newxeqlevel (); - -@define procedure odateandtime (); -@define procedure allocatefonttable (); -@define procedure dumpfonttable (); -@define procedure undumpfonttable (); -@define procedure allocatefontsorttable (); -@define procedure dumpfontsorttable (); -@define procedure undumpfontsorttable (); -@define procedure allocateocptable (); -@define procedure dumpocptable (); -@define procedure undumpocptable (); -@define procedure initeqtbtable; -@define procedure dumpeqtbtable; -@define procedure undumpeqtbtable; -@define procedure setneweqtb (); -@define procedure setneweqtbint (); -@define procedure setneweqtbsc (); -@define procedure setequiv (); -@define procedure setequiv1 (); -@define procedure seteqtype (); -@define procedure seteqlevel (); -@define procedure btestin ; -@define procedure runexternalocp (); -@define procedure changeomegafilename (); - -@define procedure sethashnext (); -@define procedure sethashtext (); -@define procedure setintzero (); -@define procedure setintone (); - -@define var fonttables; -@define var fontsorttables; -@define var ocptables; - -@define var ocptemp; - -{ end of omega.defines } diff --git a/Build/source/texk/web2c/omegadir/omega.mk b/Build/source/texk/web2c/omegadir/omega.mk deleted file mode 100644 index f11b6783045..00000000000 --- a/Build/source/texk/web2c/omegadir/omega.mk +++ /dev/null @@ -1,225 +0,0 @@ -# Makefile fragment for Omega and web2c. --infovore@xs4all.nl. Public domain. -# This fragment contains the parts of the makefile that are most likely to -# differ between releases of Omega. - -Makefile: omegadir/omega.mk - -omegafonts_programs = @OMEGA@ omegafonts/omfonts -otps_programs = @OMEGA@ otps/otp2ocp otps/outocp -omegafonts = @OMEGA@ omegafonts -otps = @OMEGA@ otps - -odvicopy = odvicopy -odvitype = odvitype -otangle = otangle -omegaware_c = odvicopy.c odvitype.c otangle.c -omegaware_programs = $(otangle) $(odvicopy) $(odvitype) - -omega_programs = $(omega) $(otangle) $(odvicopy) $(odvitype) \ - $(otps_programs) $(omegafonts_programs) - -# The otangle used in the build is not be the otangle we build if we are -# cross-compiling. -OTANGLE = @OTANGLE@ - -# Omegaware - -odvicopy: odvicopy.o - $(kpathsea_link) odvicopy.o $(LOADLIBES) -odvicopy.c odvicopy.h: $(web2c_common) $(web2c_programs) odvicopy.p - $(web2c) odvicopy -odvicopy.p: tangle omegaware/odvicopy.web omegaware/odvicopy.ch - WEBINPUTS=$(srcdir)/omegaware $(TANGLE) odvicopy odvicopy -check: odvicopy-check -odvicopy-check: odvicopy -# ./odvicopy $(srcdir)/tests/story tests/xstory.dvi -## Redirect stderr so the terminal output will end up in the log file. -# (TFMFONTS=$(srcdir)/tests: ./odvicopy <$(srcdir)/tests/pplr.dvi \ -# >tests/xpplr.dvi) 2>&1 -clean:: odvicopy-clean -odvicopy-clean: - $(LIBTOOL) --mode=clean $(RM) odvicopy - rm -f odvicopy.o odvicopy.c odvicopy.h odvicopy.p -# rm -f tests/xstory.dvi tests/xpplr.dvi - -odvitype: odvitype.o - $(kpathsea_link) odvitype.o $(LOADLIBES) -odvitype.c odvitype.h: $(web2c_common) $(web2c_programs) odvitype.p - $(web2c) odvitype -odvitype.p: tangle omegaware/odvitype.web omegaware/odvitype.ch - WEBINPUTS=$(srcdir)/omegaware $(TANGLE) odvitype odvitype -check: odvitype-check -odvitype-check: odvitype -# ./odvitype -show-opcodes $(srcdir)/tests/story >tests/xstory.dvityp -# ./odvitype --p=\*.\*.2 $(srcdir)/tests/pagenum.dvi >tests/xpagenum.typ -clean:: odvitype-clean -odvitype-clean: - $(LIBTOOL) --mode=clean $(RM) odvitype - rm -f odvitype.o odvitype.c odvitype.h odvitype.p -# rm -f tests/xstory.dvityp tests/xpagenum.typ - -otangle: otangle.o - $(kpathsea_link) otangle.o $(LOADLIBES) -otangle.c otangle.h: $(web2c_common) $(web2c_programs) otangle.p - $(web2c) otangle -otangle.p: tangle omegaware/otangle.web omegaware/otangle.ch - WEBINPUTS=$(srcdir)/omegaware $(TANGLE) otangle otangle -check: otangle-check -otangle-check: otangle -# otangling omega is a good check already -clean:: otangle-clean -otangle-clean: - $(LIBTOOL) --mode=clean $(RM) otangle - rm -f otangle.o otangle.c otangle.h otangle.p - -# -# Omega itself. - -# We build omega -omega = @OMEGA@ omega - -# The C sources. -omega_c = omegaini.c omega0.c omega1.c omega2.c omega3.c -omega_o = omegaini.o omega0.o omega1.o omega2.o \ - omegaextra.o omega.o omegabis.o \ - omega3.o omega-pool.o - -# Linking -omega: $(omega_o) - $(kpathsea_link) $(omega_o) $(socketlibs) $(LOADLIBES) - -# The C files -$(omega_c) omegacoerce.h omegad.h: omega.p $(web2c_texmf) - $(web2c) omega -omegaextra.c: lib/texmfmp.c - sed s/TEX-OR-MF-OR-MP/omega/ $(srcdir)/lib/texmfmp.c >$@ -# Additional C files, just copy them. -omega.c: omegadir/omega.c - -rm -f $@ - cp $(srcdir)/omegadir/omega.c $@ -omegabis.c: omegadir/omegabis.c - -rm -f $@ - cp $(srcdir)/omegadir/omegabis.c $@ -omegamem.h: omegadir/omegamem.h - -rm -f $@ - cp $(srcdir)/omegadir/omegamem.h $@ - -# The Pascal file -omega.p omega.pool: otangle omega.web omega.ch - $(OTANGLE) omega.web omega.ch - -# Generation of the web and ch files. -omega.web: tie tex.web omegadir/omega.mk -omega.web: omegadir/omnode.ch -omega.web: omegadir/om16bit.ch -omega.web: omegadir/omstr.ch -omega.web: omegadir/omfont.ch -omega.web: omegadir/omchar.ch -omega.web: omegadir/omfi.ch -omega.web: omegadir/ompar.ch -omega.web: omegadir/omocp.ch -omega.web: omegadir/omfilter.ch -omega.web: omegadir/omtrans.ch -omega.web: omegadir/omdir.ch -omega.web: omegadir/omcprt.ch -omega.web: omegadir/omxml.ch - $(TIE) -m omega.web $(srcdir)/tex.web \ - $(srcdir)/omegadir/omnode.ch \ - $(srcdir)/omegadir/om16bit.ch \ - $(srcdir)/omegadir/omstr.ch \ - $(srcdir)/omegadir/omfont.ch \ - $(srcdir)/omegadir/omchar.ch \ - $(srcdir)/omegadir/omfi.ch \ - $(srcdir)/omegadir/ompar.ch \ - $(srcdir)/omegadir/omocp.ch \ - $(srcdir)/omegadir/omfilter.ch \ - $(srcdir)/omegadir/omtrans.ch \ - $(srcdir)/omegadir/omdir.ch \ - $(srcdir)/omegadir/omcprt.ch \ - $(srcdir)/omegadir/omxml.ch -omega.ch: tie omega.web omegadir/omega.mk -omega.ch: omegadir/comnode.ch -omega.ch: omegadir/com16bit.ch -omega.ch: omegadir/comstr.ch -omega.ch: omegadir/comfont.ch -omega.ch: omegadir/comchar.ch -omega.ch: omegadir/comfi.ch -omega.ch: omegadir/compar.ch -omega.ch: omegadir/comocp.ch -omega.ch: omegadir/comfilter.ch -omega.ch: omegadir/comtrans.ch -omega.ch: omegadir/comdir.ch -omega.ch: omegadir/comxml.ch -omega.ch: omegadir/comsrcspec.ch - $(TIE) -c omega.ch omega.web \ - $(srcdir)/omegadir/comnode.ch \ - $(srcdir)/omegadir/com16bit.ch \ - $(srcdir)/omegadir/comstr.ch \ - $(srcdir)/omegadir/comfont.ch \ - $(srcdir)/omegadir/comchar.ch \ - $(srcdir)/omegadir/comfi.ch \ - $(srcdir)/omegadir/compar.ch \ - $(srcdir)/omegadir/comocp.ch \ - $(srcdir)/omegadir/comfilter.ch \ - $(srcdir)/omegadir/comtrans.ch \ - $(srcdir)/omegadir/comdir.ch \ - $(srcdir)/omegadir/comxml.ch \ - $(srcdir)/omegadir/comsrcspec.ch - -omega-pool.c: omega.pool $(makecpool) - $(makecpool) omega.pool omegadir/omega-pool.h >$@ || rm -f $@ - -# Check: right now all we do is build the format. -check: @OMEGA@ omega-check -omega-check: omega omega.fmt -# Cleaning up from building omega -clean:: omega-clean -omega-clean: - $(LIBTOOL) --mode=clean $(RM) omega - rm -f $(omega_c) omegaextra.c omegacoerce.h omegad.h - rm -f omega.c omegabis.c omegamem.h - rm -f omega.p omega.pool omega.web omega.ch - -# -# Dumps. -all_ofmts = @FMU@ omega.fmt $(ofmts) - -dumps: @OMEGA@ ofmts -ofmts: $(all_ofmts) - -ofmtdir = $(web2cdir)/omega -$(ofmtdir):: - $(SHELL) $(top_srcdir)/../mkinstalldirs $(ofmtdir) - -omega.fmt: omega - $(dumpenv) $(MAKE) progname=omega files="omega.tex" prereq-check - $(dumpenv) ./omega --progname=omega --jobname=omega --ini \\input omega.tex \\dump </dev/null - -lambda.fmt: omega - $(dumpenv) $(MAKE) progname=lambda files="lambda.tex" prereq-check - $(dumpenv) ./omega --progname=lambda --jobname=lambda --ini \\input lambda.tex </dev/null - - -# -# Some additional programs for Omega: the programs themselves are named -# in the variable otps_programs, defined above. -otps/otp2ocp: - cd otps && $(MAKE) $(common_makeargs) otp2ocp -otps/outocp: - cd otps && $(MAKE) $(common_makeargs) outocp -omegafonts/omfonts: - cd omegafonts && $(MAKE) $(common_makeargs) omfonts - -# -# Installation. -install-omega: install-omega-exec -install-programs: @OMEGA@ install-omega-exec -install-omega-exec: $(omega_programs) $(bindir) install-omega-links - for p in omega; do $(INSTALL_LIBTOOL_PROG) $$p $(bindir); done - cd otps && $(MAKE) $(install_makeargs) install-programs - cd omegafonts && $(MAKE) $(install_makeargs) install-programs - -install-omega-links: - cd omegafonts && $(MAKE) $(install_makeargs) install-links - -# end of omega.mk diff --git a/Build/source/texk/web2c/omegadir/omega.version b/Build/source/texk/web2c/omegadir/omega.version deleted file mode 100644 index 3dd98ba5c23..00000000000 --- a/Build/source/texk/web2c/omegadir/omega.version +++ /dev/null @@ -1 +0,0 @@ -1.23.2.3 diff --git a/Build/source/texk/web2c/omegadir/omegabis.c b/Build/source/texk/web2c/omegadir/omegabis.c deleted file mode 100644 index c460f77148c..00000000000 --- a/Build/source/texk/web2c/omegadir/omegabis.c +++ /dev/null @@ -1,339 +0,0 @@ -/* omegabis.c: C routines to support external OCPs - -This file is part of Omega, -which is based on the web2c distribution of TeX, - -Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -Copyright (c) 2002 Behdad Esfahbod -Copyright (c) 2002 Roozbeh Pournader - -Omega is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Omega is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Omega; if not, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -*/ -#define EXTERN extern -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <string.h> -#ifndef WIN32 -#include <unistd.h> -#endif /* not WIN32 */ -#include "omegad.h" - -#if 1 - -void -runexternalocp P1C(string, external_ocp_name) -{ - char *in_file_name; - char *out_file_name; - FILE *in_file; - FILE *out_file; - int in_file_fd; - int out_file_fd; - char command_line[400]; - int i; - unsigned c; - int c_in; -#ifdef WIN32 - char *tempenv; - -#define null_string(s) ((s == NULL) || (*s == '\0')) - - tempenv = getenv("TMPDIR"); - if (null_string(tempenv)) - tempenv = getenv("TEMP"); - if (null_string(tempenv)) - tempenv = getenv("TMP"); - if (null_string(tempenv)) - tempenv = "c:/tmp"; /* "/tmp" is not good if we are on a CD-ROM */ - in_file_name = concat(tempenv, "/__omega__in__XXXXXX"); - mktemp(in_file_name); - in_file = fopen(in_file_name, FOPEN_WBIN_MODE); -#else - -#if HAVE_MKSTEMP - in_file_name = xstrdup("/tmp/__omega__in__XXXXXX"); - in_file_fd = mkstemp(in_file_name); - in_file = fdopen(in_file_fd, FOPEN_WBIN_MODE); -#else -#if HAVE_MKTEMP - in_file_name = xstrdup("/tmp/__omega__in__XXXXXX"); - mktemp(in_file_name); -#else - in_file_name = xstrdup(tmpnam(NULL)); -#endif /* HAVE_MKTEMP */ - in_file = fopen(in_file_name, FOPEN_WBIN_MODE); -#endif /* HAVE_MKSTEMP */ - -#endif /* WIN32 */ - - if (in_file == NULL) - fprintf(stderr, "omega: error opening file: %s\n", strerror(errno)); - - for (i=1; i<=otpinputend; i++) { - c = otpinputbuf[i]; - if (c>0xffff) { - fprintf(stderr, "Omega does not currently support 31-bit chars\n"); - exit(1); - } - if (c<0x80) { - fputc(c & 0x7f, in_file); - } else if (c<0x800) { - fputc(0xc0 | ((c>>6) & 0x1f), in_file); - fputc(0x80 | (c & 0x3f), in_file); - } else if (c<0x10000) { - fputc(0xe0 | ((c>>12) & 0xf), in_file); - fputc(0x80 | ((c>>6) & 0x3f), in_file); - fputc(0x80 | (c & 0x3f), in_file); - } else if (c<0x200000) { - fputc(0xf0 | ((c>>18) & 0x7), in_file); - fputc(0x80 | ((c>>12) & 0x3f), in_file); - fputc(0x80 | ((c>>6) & 0x3f), in_file); - fputc(0x80 | (c & 0x3f), in_file); - } else if (c<0x4000000) { - fputc(0xf8 | ((c>>24) & 0x3), in_file); - fputc(0x80 | ((c>>18) & 0x3f), in_file); - fputc(0x80 | ((c>>12) & 0x3f), in_file); - fputc(0x80 | ((c>>6) & 0x3f), in_file); - fputc(0x80 | (c & 0x3f), in_file); - } else { /* c>=0x4000000 */ - fputc(0xfc | ((c>>30) & 0x1), in_file); - fputc(0x80 | ((c>>24) & 0x3f), in_file); - fputc(0x80 | ((c>>18) & 0x3f), in_file); - fputc(0x80 | ((c>>12) & 0x3f), in_file); - fputc(0x80 | ((c>>6) & 0x3f), in_file); - fputc(0x80 | (c & 0x3f), in_file); - } - } - fclose(in_file); - -#define advance_cin do { if ((c_in = fgetc(out_file)) == -1) { \ - fprintf(stderr, "File contains bad char\n"); \ - goto end_of_while; \ - } } while (0) - -#ifdef WIN32 - out_file_name = concat(tempenv, "/__omega__out__XXXXXX"); - mktemp(out_file_name); - out_file = fopen(out_file_name, FOPEN_RBIN_MODE); -#else - -#if HAVE_MKSTEMP - out_file_name = xstrdup("/tmp/__omega__out__XXXXXX"); - out_file_fd = mkstemp(out_file_name); - out_file = fdopen(out_file_fd, FOPEN_RBIN_MODE); -#else -#if HAVE_MKTEMP - out_file_name = xstrdup("/tmp/__omega__out__XXXXXX"); - mktemp(out_file_name); -#else - out_file_name = xstrdup(tmpnam(NULL)); -#endif /* HAVE_MKTEMP */ - out_file = fopen(out_file_name, FOPEN_RBIN_MODE); -#endif /* HAVE_MKSTEMP */ - -#endif /* WIN32 */ - - if (out_file == NULL) - fprintf(stderr, "omega: error opening file: %s\n", strerror(errno)); - - sprintf(command_line, "%s <%s >%s\n", - external_ocp_name+1, in_file_name, out_file_name); - system(command_line); - otpoutputend = 0; - otpoutputbuf[otpoutputend] = 0; - while ((c_in = fgetc(out_file)) != -1) { - if (c_in<0x80) { - c = c_in & 0x7f; - } else if (c_in<0xe0) { - c = (c_in & 0x1f) << 6; - advance_cin; - c |= c_in & 0x3f; - } else if (c_in<=0xf0) { - c = (c_in & 0xf) << 12; - advance_cin; - c |= (c_in & 0x3f) << 6; - advance_cin; - c |= c_in & 0x3f; - } else if (c_in<0xf8) { - c = (c_in & 0x7) << 18; - advance_cin; - c |= (c_in & 0x3f) << 12; - advance_cin; - c |= (c_in & 0x3f) << 6; - advance_cin; - c |= c_in & 0x3f; - } else if (c_in<0xfc) { - c = (c_in & 0x3) << 24; - advance_cin; - c |= (c_in & 0x3f) << 18; - advance_cin; - c |= (c_in & 0x3f) << 12; - advance_cin; - c |= (c_in & 0x3f) << 6; - advance_cin; - c |= c_in & 0x3f; - } else { /* c>=0xfc */ - c = (c_in & 0x1) << 30; - advance_cin; - c |= (c_in & 0x3f) << 24; - advance_cin; - c |= (c_in & 0x3f) << 18; - advance_cin; - c |= (c_in & 0x3f) << 12; - advance_cin; - c |= (c_in & 0x3f) << 6; - advance_cin; - c |= c_in & 0x3f; - } - otpoutputbuf[++otpoutputend] = c; - } -end_of_while: - fclose(out_file); - - remove(in_file_name); - remove(out_file_name); - free(in_file_name); - free(out_file_name); -} - -#else - -void -runexternalocp P1C(string, external_ocp_name) -{ - int outpipes[2], inpipes[2]; - char *outbuf; - char *inbuf; - int n; - int chars_read_in, chars_to_go_out; - int myerrno; - -#ifdef WIN32 - STARTUPINFO si; - PROCESS_INFORMATION pi; - HANDLE hIn, hOut, hPipeIn, hPipeOut; - SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; - DWORD ret = 0; - - /* Make pipes to send data from the parent to the child. The parent - writes to outpipes[0], and the child reads from outpipes[1]. */ - _pipe (outpipes, 0, _O_BINARY); - /* Make pipes to send data from the child to the parent. The child - writes to inpipes[0], and the parent reads from inpipes[1]. */ - _pipe (inpipes, 0, _O_BINARY); - - ZeroMemory( &si, sizeof(STARTUPINFO) ); - si.cb = sizeof(STARTUPINFO); - si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOW; - si.hStdInput = _get_osfhandle(outpipes[0]); - si.hStdOutput = _get_osfhandle(inpipes[1]); - si.hStdError = _get_osfhandle(_fileno(stderr)); - - /* Close unnecessary pipes. */ - close (outpipes[1]); - close (inpipes[0]); - - if (CreateProcess(external_ocp_name+1, - NULL, /* Use lpApplicationName */ - NULL, - NULL, - TRUE, /* bInheritHandles */ - 0, - NULL, - NULL, - &si, - &pi) == 0) { - fprintf(stderr, "Failed to create process for %s (Error %d).\n", external_ocp_name+1, GetLastError()); - return; - } - -#else /* ! WIN32 */ - - /* Make pipes to send data from the parent to the child. The parent - writes to outpipes[0], and the child reads from outpipes[1]. */ - pipe (outpipes); - /* Make pipes to send data from the child to the parent. The child - writes to inpipes[0], and the parent reads from inpipes[1]. */ - pipe (inpipes); - - /* For a child process. */ - if (fork () == 0) - { - /* This part is executed by the child process. It translates - lower case letters to upper case. */ - - char *prog = external_ocp_name+1; - char *args[] = {external_ocp_name+1, NULL}; - - /* Close unnecessary pipes. They are for the parent. */ - close (outpipes[1]); - close (inpipes[0]); - - /* Connect pipes to stdin and stdout. */ - dup2 (outpipes[0], 0); - dup2 (inpipes[1], 1); - - /* Overlays a new process image on an old process. */ - execv (prog, args); - - /* We should never reach here. */ - } - else - { - /* Close unnecessary pipes. They are for the child. */ - close (outpipes[0]); - close (inpipes[1]); - -#endif /* WIN32 */ - -/* Here is the interesting part */ - outbuf = ((char *) otpinputbuf)+2; - inbuf = ((char *) otpoutputbuf)+2; - chars_to_go_out = 2*otpinputend; - chars_read_in = 0; - while ((n = write (outpipes[1], outbuf, chars_to_go_out))>0) { -fprintf(stderr, "Wrote (1) %d characters\n", n); - outbuf+=n; - chars_to_go_out-=n; - if (chars_to_go_out==0) goto done_writing; -/* - n = read (inpipes[0], inbuf, 1024); -fprintf(stderr, "Read (1) %d characters\n", n); - inbuf+=n; - chars_read_in+=n; -*/ - } -fprintf(stderr, "Wrote (2) %d characters\n", n); - -done_writing: - close (outpipes[1]); - while ((n = read (inpipes[0], inbuf, 1024)) > 0) { -fprintf(stderr, "Read (2) %d characters\n", n); - inbuf+=n; - chars_read_in+=n; - } -fprintf(stderr, "Read (3) %d characters\n", n); - otpoutputend = chars_read_in / 2; - - close (inpipes[0]); -#ifndef WIN32 - } -#endif /* not WIN32 */ -} - -#endif diff --git a/Build/source/texk/web2c/omegadir/omegaextra.h b/Build/source/texk/web2c/omegadir/omegaextra.h deleted file mode 100644 index 87c80f3a74e..00000000000 --- a/Build/source/texk/web2c/omegadir/omegaextra.h +++ /dev/null @@ -1,38 +0,0 @@ -/* omegaextra.h: banner etc. for Omega. - - This is included by Omega, from ../omegaextra.c - (generated from ../lib/texmfmp.c). - -This file is part of Omega, -which is based on the web2c distribution of TeX, - -Copyright (c) 1994--2001 John Plaice and Yannis Haralambous - -Omega is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Omega is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Omega; if not, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#define BANNER "This is Omega, Version 3.1415926-1.23.2.3" -#define COPYRIGHT_HOLDER "J. Plaice and Y. Haralambous" -#define AUTHOR NULL -#define PROGRAM_HELP OMEGAHELP -#define BUG_ADDRESS "tex-k@tug.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 "iniomega" -#define VIR_PROGRAM "viromega" diff --git a/Build/source/texk/web2c/omegadir/omegamem.h b/Build/source/texk/web2c/omegadir/omegamem.h deleted file mode 100644 index 9084d96147b..00000000000 --- a/Build/source/texk/web2c/omegadir/omegamem.h +++ /dev/null @@ -1,145 +0,0 @@ -/* omegamem.h: C declarations for types and accessing routines in omega.c - -This file is part of the Omega project, which -is based on the web2c distribution of TeX. - -Copyright (c) 1994--2000 John Plaice and Yannis Haralambous - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - - -/* argument(s) added to function, by team 18 */ -extern boolean new_input_line (FILE *, halfword); -/* argument(s) added to function, by team 18 */ -extern boolean newinputln (FILE*, halfword, halfword, boolean); -extern int getc_two (); -/* argument(s) added to function, by team 18 */ -extern int getfilemode (FILE*, int); -extern void ungetc_two (); -extern int ocptemp; - -#define newinputline(stream, mode, flag) new_input_line (stream, mode) - -extern memoryword **fonttables; -extern memoryword **fontsorttables; -extern int **ocptables; - -typedef struct hashw -{ - integer p; - struct hashw *ptr; - memoryword mw; -} hashword; - -extern hashword hashtable[]; -/* argument(s) added to function, by team 18 */ -extern hashword *createhashpos(int); -/* argument(s) added to function, by team 18 */ -extern hashword *createeqtbpos(int); -/* argument(s) added to function, by team 18 */ -extern hashword *createxeqlevel(int); -extern void inithhashtable(); -extern void dumphhashtable(); -extern void undumphhashtable(); -/* argument(s) added to function, by team 18 */ -extern void allocatefonttable(int,int); -/* argument(s) added to function, by team 18 */ -extern void dumpfonttable(int,int); -/* argument(s) added to function, by team 18 */ -extern void undumpfonttable(int); -/* argument(s) added to function, by team 18 */ -extern void allocatefontsorttable(int,int); -/* argument(s) added to function, by team 18 */ -extern void dumpfontsorttable(int , int); -/* argument(s) added to function, by team 18 */ -extern void undumpfontsorttable(int); -/* argument(s) added to function, by team 18 */ -extern void allocateocptable(int,int); -/* argument(s) added to function, by team 18 */ -extern void dumpocptable(int); -/* argument(s) added to function, by team 18 */ -extern void undumpocptable(int); -/* argument(s) added to function, by team 18 */ -extern void odateandtime(int, int, int, int ); -extern void btestin(); -extern void runexternalocp(char *); - -#define initeqtbtable() inithhashtable(); -#define dumpeqtbtable() dumphhashtable(); -#define undumpeqtbtable() undumphhashtable(); - -#define HASHTABLESIZE 23123 -#define neweqtb(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw) : \ - (createeqtbpos(a)->mw)) -#define neweqtbint(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint) : \ - (createeqtbpos(a)->mw.cint)) -#define neweqtbsc(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint) : \ - (createeqtbpos(a)->mw.cint)) -#define newequiv(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.rh) : \ - (createeqtbpos(a)->mw.hh.rh)) -#define newequiv1(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint1) : \ - (createeqtbpos(a)->mw.cint1)) -#define neweqlevel(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.b1) : \ - (createeqtbpos(a)->mw.hh.b1)) -#define neweqtype(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.b0) : \ - (createeqtbpos(a)->mw.hh.b0)) -#define setneweqtb(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw=v) : \ - (createeqtbpos(a)->mw=v)) -#define setneweqtbint(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint=v) : \ - (createeqtbpos(a)->mw.cint=v)) -#define setneweqtbsc(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint=v) : \ - (createeqtbpos(a)->mw.cint=v)) -#define setequiv(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.rh=v) : \ - (createeqtbpos(a)->mw.hh.rh=v)) -#define setequiv1(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint1=v) : \ - (createeqtbpos(a)->mw.cint1=v)) -#define seteqlevel(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.b1=v) : \ - (createeqtbpos(a)->mw.hh.b1=v)) -#define seteqtype(a,v) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.b0=v) : \ - (createeqtbpos(a)->mw.hh.b0=v)) - -#define newhashnext(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.v.LH) : \ - (createhashpos(a)->mw.hh.v.LH)) -#define newhashtext(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.v.RH) : \ - (createhashpos(a)->mw.hh.v.RH)) -#define sethashnext(a,d) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.v.LH=d) : \ - (createhashpos(a)->mw.hh.v.LH=d)) -#define sethashtext(a,d) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.hh.v.RH=d) : \ - (createhashpos(a)->mw.hh.v.RH=d)) - -#define newxeqlevel(a) (((a)==hashtable[(a)%HASHTABLESIZE].p) ? \ - (hashtable[(a)%HASHTABLESIZE].mw.cint) : \ - (createxeqlevel(a)->mw.cint)) - -#define setintzero(w,a) ((w).cint=(a)) -#define setintone(w,a) ((w).cint1=(a)) diff --git a/Build/source/texk/web2c/omegadir/omfi.ch b/Build/source/texk/web2c/omegadir/omfi.ch deleted file mode 100644 index d7f4bbe959f..00000000000 --- a/Build/source/texk/web2c/omegadir/omfi.ch +++ /dev/null @@ -1,246 +0,0 @@ -% omfi.ch: Primitives for extra level of infinity. -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [10] m.135 l.2878 - Omega fi order of infinity -specifies the order of infinity to which glue setting applies (|normal|, -|fil|, |fill|, or |filll|). The |subtype| field is not used. -@y -specifies the order of infinity to which glue setting applies (|normal|, -|sfi|, |fil|, |fill|, or |filll|). The |subtype| field is not used. -@z -%--------------------------------------- -@x [10] m.150 l.3136 - Omega fi order of infinity -orders of infinity (|normal|, |fil|, |fill|, or |filll|) -@y -orders of infinity (|normal|, |sfi|, |fil|, |fill|, or |filll|) -@z -%--------------------------------------- -@x [10] m.150 l.3145 - Omega fi order of infinity -@d fil=1 {first-order infinity} -@d fill=2 {second-order infinity} -@d filll=3 {third-order infinity} -@y -@d sfi=1 {first-order infinity} -@d fil=2 {second-order infinity} -@d fill=3 {third-order infinity} -@d filll=4 {fourth-order infinity} -@z -%--------------------------------------- -@x [10] m.150 l.3150 - Omega fi order of infinity -@!glue_ord=normal..filll; {infinity to the 0, 1, 2, or 3 power} -@y -@!glue_ord=normal..filll; {infinity to the 0, 1, 2, 3, or 4 power} -@z -%--------------------------------------- -@x [11] m.162 l.3296 - Omega fi order of infinity -@d fil_glue==zero_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} -@y -@d sfi_glue==zero_glue+glue_spec_size {\.{0pt plus 1fi minus 0pt}} -@d fil_glue==sfi_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} -@z -%--------------------------------------- -@x [11] m.164 l.3296 - Omega fi order of infinity -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -@y -stretch(sfi_glue):=unity; stretch_order(sfi_glue):=sfi;@/ -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -@z -%--------------------------------------- -@x [12] m.177 l.3591 - Omega fi order of infinity - begin print("fil"); - while order>fil do -@y - begin print("fi"); - while order>sfi do -@z -%--------------------------------------- -@x [26] m.454 l.8924 - Omega fi order of infinity -if scan_keyword("fil") then -@.fil@> - begin cur_order:=fil; -@y -if scan_keyword("fi") then -@.fil@> - begin cur_order:=sfi; -@z -%--------------------------------------- -@x [33] m.650 l.12877 - Omega fi order of infinity -total_stretch[fil]:=0; total_shrink[fil]:=0; -@y -total_stretch[sfi]:=0; total_shrink[sfi]:=0; -total_stretch[fil]:=0; total_shrink[fil]:=0; -@z -%--------------------------------------- -@x [33] m.659 l.12996 - Omega fi order of infinity -else if total_stretch[fil]<>0 then o:=fil -@y -else if total_stretch[fil]<>0 then o:=fil -else if total_stretch[sfi]<>0 then o:=sfi -@z -%--------------------------------------- -@x [33] m.665 l.13061 - Omega fi order of infinity -else if total_shrink[fil]<>0 then o:=fil -@y -else if total_shrink[fil]<>0 then o:=fil -else if total_shrink[sfi]<>0 then o:=sfi -@z -%--------------------------------------- -@x [38] m.822 l.16135 - Omega fi order of infinity -contains six scaled numbers, since it must record the net change in glue -stretchability with respect to all orders of infinity. The natural width -difference appears in |mem[q+1].sc|; the stretch differences in units of -pt, fil, fill, and filll appear in |mem[q+2..q+5].sc|; and the shrink difference -appears in |mem[q+6].sc|. The |subtype| field of a delta node is not used. - -@d delta_node_size=7 {number of words in a delta node} -@y -contains seven scaled numbers, since it must record the net change in glue -stretchability with respect to all orders of infinity. The natural width -difference appears in |mem[q+1].sc|; the stretch differences in units of -pt, sfi, fil, fill, and filll appear in |mem[q+2..q+6].sc|; and the shrink -difference appears in |mem[q+7].sc|. The |subtype| field of a delta node -is not used. - -@d delta_node_size=8 {number of words in a delta node} -@z -%--------------------------------------- -@x [38] m.823 l.16144 - Omega fi order of infinity -@ As the algorithm runs, it maintains a set of six delta-like registers -for the length of the line following the first active breakpoint to the -current position in the given hlist. When it makes a pass through the -active list, it also maintains a similar set of six registers for the -@y -@ As the algorithm runs, it maintains a set of seven delta-like registers -for the length of the line following the first active breakpoint to the -current position in the given hlist. When it makes a pass through the -active list, it also maintains a similar set of seven registers for the -@z -%--------------------------------------- -@x [38] m.823 l.16154 - Omega fi order of infinity -k:=1 to 6 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we -want to do this without the overhead of |for| loops. The |do_all_six| -macro makes such six-tuples convenient. - -@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6) - -@<Glob...@>= -@!active_width:array[1..6] of scaled; - {distance from first active node to~|cur_p|} -@!cur_active_width:array[1..6] of scaled; {distance from current active node} -@!background:array[1..6] of scaled; {length of an ``empty'' line} -@!break_width:array[1..6] of scaled; {length being computed after current break} -@y -k:=1 to 7 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we -want to do this without the overhead of |for| loops. The |do_all_six| -macro makes such six-tuples convenient. - -@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6);#(7) - -@<Glo...@>= -@!active_width:array[1..7] of scaled; - {distance from first active node to~|cur_p|} -@!cur_active_width:array[1..7] of scaled; {distance from current active node} -@!background:array[1..7] of scaled; {length of an ``empty'' line} -@!break_width:array[1..7] of scaled; {length being computed after current break} -@z -%--------------------------------------- -@x [38] m.827 l.16242 - Omega fi order of infinity -background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ -@y -background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ -background[6]:=0;@/ -@z -%--------------------------------------- -@x [38] m.827 l.16260 - Omega fi order of infinity -background[6]:=shrink(q)+shrink(r); -@y -background[7]:=shrink(q)+shrink(r); -@z -%--------------------------------------- -@x [38] m.838 l.16470 - Omega fi order of infinity -break_width[6]:=break_width[6]-shrink(v); -@y -break_width[7]:=break_width[7]-shrink(v); -@z -%--------------------------------------- -@x [38] m.852 l.16713 - Omega fi order of infinity -subarray |cur_active_width[2..5]|, in units of points, fil, fill, and filll. -@y -subarray |cur_active_width[2..6]|, in units of points, sfi, fil, fill and filll. -@z -%--------------------------------------- -@x [38] m.852 l.16722 - Omega fi order of infinity -if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| - (cur_active_width[5]<>0) then -@y -if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| - (cur_active_width[5]<>0)or(cur_active_width[6]<>0) then -@z -%--------------------------------------- -@x [38] m.853 l.16738 - Omega fi order of infinity -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[6]|. - -@<Set the value of |b| to the badness for shrinking...@>= -begin if -shortfall>cur_active_width[6] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[6]); -@y -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[7]|. - -@<Set the value of |b| to the badness for shrinking...@>= -begin if -shortfall>cur_active_width[7] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[7]); -@z -%--------------------------------------- -@x [39] m.868 l.17054 - Omega fi order of infinity -active_width[6]:=active_width[6]+shrink(q) -@y -active_width[7]:=active_width[7]+shrink(q) -@z -%--------------------------------------- -@x [44] m.975 l.18932 - Omega fi order of infinity - if (active_height[3]<>0) or (active_height[4]<>0) or - (active_height[5]<>0) then b:=0 - else b:=badness(h-cur_height,active_height[2]) -else if cur_height-h>active_height[6] then b:=awful_bad -else b:=badness(cur_height-h,active_height[6]) -@y - if (active_height[3]<>0) or (active_height[4]<>0) or - (active_height[5]<>0) or (active_height[6]<>0) then b:=0 - else b:=badness(h-cur_height,active_height[2]) -else if cur_height-h>active_height[7] then b:=awful_bad -else b:=badness(cur_height-h,active_height[7]) -@z -%--------------------------------------- -@x [44] m.976 l.18947 - Omega fi order of infinity - active_height[6]:=active_height[6]+shrink(q); -@y - active_height[7]:=active_height[7]+shrink(q); -@z -%--------------------------------------- -@x [48] m.1201 l.22454 - Omega fi order of infinity - (total_shrink[fil]<>0)or(total_shrink[fill]<>0)or - (total_shrink[filll]<>0)) then -@y - (total_shrink[sfi]<>0)or(total_shrink[fil]<>0)or - (total_shrink[fill]<>0)or(total_shrink[filll]<>0)) then -@z - diff --git a/Build/source/texk/web2c/omegadir/omfilter.ch b/Build/source/texk/web2c/omegadir/omfilter.ch deleted file mode 100644 index 7a739d66d51..00000000000 --- a/Build/source/texk/web2c/omegadir/omfilter.ch +++ /dev/null @@ -1,925 +0,0 @@ -% omfilter.ch: Running OCP programs -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [1] m.11 l.412 - Omega Filtering - {string of length |file_name_size|; tells where the string pool appears} -@.TeXformats@> -@y - {string of length |file_name_size|; tells where the string pool appears} -@.TeXformats@> -@!active_mem_size=2000; {number of words of |active_info| for active ocps} -@z -%--------------------------------------- -@x [5] - Omega Translation -procedure overflow(@!s:str_number;@!n:integer); {stop due to finiteness} -begin normalize_selector; -print_err("Omega capacity exceeded, sorry ["); -@.TeX capacity exceeded ...@> -print(s); print_char("="); print_int(n); print_char("]"); -help2("If you really absolutely need more capacity,")@/ - ("you can ask a wizard to enlarge me."); -succumb; -end; -@y -procedure overflow(@!s:str_number;@!n:integer); {stop due to finiteness} -begin normalize_selector; -print_err("Omega capacity exceeded, sorry ["); -@.TeX capacity exceeded ...@> -print(s); print_char("="); print_int(n); print_char("]"); -help2("If you really absolutely need more capacity,")@/ - ("you can ask a wizard to enlarge me."); -succumb; -end; - -procedure overflow_ocp_buf_size; -begin -overflow("ocp_buf_size",ocp_buf_size); -end; - -procedure overflow_ocp_stack_size; -begin -overflow("ocp_stack_size",ocp_stack_size); -end; -@z -%--------------------------------------- -@x [22] m.300 l.6425 - Omega Filtering -@!in_state_record = record - @!state_field, @!index_field: quarterword; - @!start_field,@!loc_field, @!limit_field, @!name_field: halfword; - end; -@y -@!in_state_record = record - @!state_field, @!index_field: quarterword; - @!start_field,@!loc_field, @!limit_field, @!name_field, - @!ocp_lstack_field: halfword; {used for omega translation processes} - @!ocp_no_field: halfword; {used for omega translation processes} - end; -@z -%--------------------------------------- -@x [22] m.300 l.6444 - Omega Filtering -@d limit==cur_input.limit_field {end of current line in |buffer|} -@d name==cur_input.name_field {name of the current file} -@y -@d limit==cur_input.limit_field {end of current line in |buffer|} -@d name==cur_input.name_field {name of the current file} -@d current_ocp_lstack==cur_input.ocp_lstack_field {name of the current ocp} -@d current_ocp_no==cur_input.ocp_no_field {name of the current ocp} -@z -%--------------------------------------- -@x [22] m.312 l.6766 - Omega Filtering - if state<>token_list then - begin @<Print location of current line@>; - @<Pseudoprint the line@>; -@y - if current_ocp_lstack>0 then - begin print_nl("OCP stack "); print_scaled(current_ocp_lstack); - print(" entry "); print_int(current_ocp_no); print(":"); - @<Pseudoprint the line@>; - end - else if state<>token_list then - begin @<Print location of current line@>; - @<Pseudoprint the line@>; -@z -%--------------------------------------- -@x [23] m.331 l.7069 - Omega Filtering -state:=new_line; start:=1; index:=0; line:=0; name:=0; -@y -state:=new_line; start:=1; index:=0; line:=0; name:=0; -current_ocp_lstack:=0; current_ocp_no:=0; -@z -%--------------------------------------- -@x [24] m.343 l.7248 - Omega Filtering -else begin state:=new_line;@/ - @<Move to next line of file, -@y -else begin - if current_ocp_lstack>0 then - begin - pop_input; goto restart; - end; - state:=new_line; - @<Move to next line of file, -@z -%--------------------------------------- -@x [30] m.582 l.11283 - Omega Filtering -char_warning(f,c); -new_character:=null; -exit:end; -@y -char_warning(f,c); -new_character:=null; -exit:end; - -@ -@<Types...@>= -@!active_index=0..active_mem_size; - -@ -@d active_ocp(#)==active_info[#].hh.b0 -@d active_counter(#)==active_info[#].hh.b1 -@d active_lstack_no(#)==active_info[#+1].sc - -@<Glob...@>= -@!active_info:array[active_index] of memory_word; -@!active_min_ptr:active_index; {first unused word of |active_info|} -@!active_max_ptr:active_index; {last unused word of |active_info|} -@!active_real:active_index; -@!holding:array[active_index] of ocp_list_index; - -@ -@<Initialize table...@>= -active_min_ptr:=0; -active_real:=0; - -@ -@p -function is_last_ocp(llstack_no:scaled; counter:integer):integer; -begin -active_min_ptr:=equiv(ocp_active_min_ptr_base); -active_max_ptr:=equiv(ocp_active_max_ptr_base); -active_real:=active_min_ptr; -while (active_real < active_max_ptr) and - (active_lstack_no(active_real) < llstack_no) do begin - active_real:=active_real+2; - end; -while (active_real < active_max_ptr) and - (active_lstack_no(active_real) = llstack_no) and - (active_counter(active_real) <= counter) do begin - active_real:=active_real+2; - end; -is_last_ocp := (active_real=active_max_ptr); -end; - -procedure print_active_ocps; -var i:integer; -begin -print_nl("Active ocps: ["); -i:=active_min_ptr; -while i<active_max_ptr do begin - print("("); - print_scaled(active_lstack_no(i)); - print(","); - print_int(active_counter(i)); - print(","); - print_esc(ocp_id_text(active_ocp(i))); - print(")"); - if i<>(active_max_ptr-2) then print(","); - i:=i+2; - end; -print("]"); -end; - -procedure add_ocp_stack(min_index:integer; min_value:scaled); -var p:ocp_lstack_index; - llstack_no:scaled; - counter:integer; -begin -p:=ocp_list_lstack(holding[min_index]); -llstack_no:=ocp_list_lstack_no(holding[min_index]); -counter:=0; -while not (is_null_ocp_lstack(p)) do begin - active_ocp(active_max_ptr):=ocp_lstack_ocp(p); - active_counter(active_max_ptr):=counter; - active_lstack_no(active_max_ptr):=llstack_no; - p:=ocp_lstack_lnext(p); - active_max_ptr:=active_max_ptr+2; - incr(counter); {no overflow problem} - end; -end; - -procedure active_compile; -var i:integer; - min_index:integer; - min_stack_ocp:scaled; - old_min:scaled; - max_active:integer; - stack_value:scaled; -begin -active_min_ptr:=active_max_ptr; -min_stack_ocp:=ocp_maxint; -max_active:=equiv(ocp_active_number_base)-1; -for i:=max_active downto 0 do begin - holding[i]:=ocp_list_list[equiv(ocp_active_base+i)]; - stack_value:=ocp_list_lstack_no(holding[i]); - if stack_value<min_stack_ocp then begin - min_index:=i; - min_stack_ocp:=stack_value; - end; - end; -while min_stack_ocp<ocp_maxint do begin - add_ocp_stack(min_index, min_stack_ocp); - old_min:=min_stack_ocp; - min_stack_ocp:=ocp_maxint; - for i:=max_active downto 0 do begin - stack_value:=ocp_list_lstack_no(holding[i]); - while old_min=stack_value do begin - holding[i]:=ocp_list_lnext(holding[i]); - stack_value:=ocp_list_lstack_no(holding[i]); - end; - if stack_value<min_stack_ocp then begin - min_index:=i; - min_stack_ocp:=stack_value; - end; - end; - end; -end; - -@z -%--------------------------------------- -@x [46] m.1030 l.19984 - Omega Filtering -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: -if is_last_ocp(current_ocp_lstack,current_ocp_no) then begin - @<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@>; - end -else begin - @<Create a buffer with character |cur_chr| and the following - characters (if~any) and then apply the current active OCP filter - to this buffer@>; - end; -@z -%--------------------------------------- -@x [50] m.1302 l.23862 - Omega Filtering -@<Dump the font information@>; -@y -@<Dump the font information@>; -@<Dump the active ocp information@>; -@z -%--------------------------------------- -@x [50] m.1303 l.23711 - Omega Filtering -@<Undump the font information@>; -@y -@<Undump the font information@>; -@<Undump the active ocp information@>; -@z -%--------------------------------------- -@x [50] m.1323 l.24907 - Omega Filtering -begin undump_font_table(k);@/ -end -@y -begin undump_font_table(k);@/ -end - -@ @<Dump the active ocp information@>= -dump_int(active_min_ptr); -dump_int(active_max_ptr); -for k:=0 to active_max_ptr-1 do dump_wd(active_info[k]); -print_ln; print_int(active_max_ptr); print(" words of active ocps"); - -@ @<Undump the active ocp information@>= -undump_size(0)(active_mem_size)('active start point')(active_min_ptr); -undump_size(0)(active_mem_size)('active mem size')(active_max_ptr); -for k:=0 to active_max_ptr-1 do undump_wd(active_info[k]); - -@z -%--------------------------------------- -@x [54] m.1379 l.24883 - Omega Filtering -@ Here we do the main work required for reading and interpreting - $\Omega$ Compiled Translation Processes. -@y -@ Here we do the main work required for reading and interpreting - $\Omega$ Compiled Translation Processes. - -@ -@<Types...@>= - -@ Here are all the instructions in our mini-assembler. -@d otp_right_output=1 -@d otp_right_num=2 -@d otp_right_char=3 -@d otp_right_lchar=4 -@d otp_right_some=5 - -@d otp_pback_output=6 -@d otp_pback_num=7 -@d otp_pback_char=8 -@d otp_pback_lchar=9 -@d otp_pback_some=10 - -@d otp_add=11 -@d otp_sub=12 -@d otp_mult=13 -@d otp_div=14 -@d otp_mod=15 -@d otp_lookup=16 -@d otp_push_num=17 -@d otp_push_char=18 -@d otp_push_lchar=19 - -@d otp_state_change=20 -@d otp_state_push=21 -@d otp_state_pop=22 - -@d otp_left_start=23 -@d otp_left_return=24 -@d otp_left_backup=25 - -@d otp_goto=26 -@d otp_goto_ne=27 -@d otp_goto_eq=28 -@d otp_goto_lt=29 -@d otp_goto_le=30 -@d otp_goto_gt=31 -@d otp_goto_ge=32 -@d otp_goto_no_advance=33 -@d otp_goto_beg=34 -@d otp_goto_end=35 - -@d otp_stop=36 - -@ -@<Glob...@>= -@!otp_init_input_start:halfword; -@!otp_init_input_last:halfword; -@!otp_init_input_end:halfword; -@!otp_i:halfword; -@!otp_init_input_buf:array[0..20000] of quarterword; - -@!otp_input_start:halfword; -@!otp_input_last:halfword; -@!otp_input_end:halfword; -@!otp_input_buf:array[0..20000] of quarterword; - -@!otp_output_end:halfword; -@!otp_output_buf:array[0..20000] of quarterword; - -@!otp_stack_used:halfword; -@!otp_stack_last:halfword; -@!otp_stack_new:halfword; -@!otp_stack_buf:array[0..1000] of quarterword; - -@!otp_pc:halfword; - -@!otp_calc_ptr:halfword; -@!otp_calcs:array[0..1000] of halfword; -@!otp_state_ptr:halfword; -@!otp_states:array[0..1000] of halfword; - -@!otp_input_char:halfword; -@!otp_calculated_char:halfword; -@!otp_no_input_chars:halfword; - -@!otp_instruction:halfword; -@!otp_instr:halfword; -@!otp_arg:halfword; -@!otp_first_arg:halfword; -@!otp_second_arg:halfword; - -@!otp_input_ocp:halfword; -@!otp_counter:halfword; - -@!otp_finished:boolean; -@!otp_ext_str:integer; -@!otp_ext_str_arg:integer; -@!otp_ext_i:integer; - -@ -@<Initialize table...@>= - -@ -@<Create a buffer with character |cur_chr| and the following - characters (if~any) and then apply the current active OCP filter - to this buffer@>= -begin -@<Read in the buffer for treatment@>; -@<Apply the OCP to the input buffer@>; -@<Place the output buffer back on the stream@>; -goto big_switch; -end; - -@ -@<Read in the buffer for treatment@>= -begin -otp_init_input_end:=0; -while (cur_cmd=letter) or (cur_cmd=other_char) or - (cur_cmd=char_given) or (cur_cmd=spacer) do begin - incr(otp_init_input_end); - if otp_init_input_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_init_input_buf[otp_init_input_end]:=cur_chr; - get_token; - if (cur_cmd<>letter) and (cur_cmd<>other_char) and - (cur_cmd<>char_given) then begin - x_token; - if (cur_cmd=char_num) then begin - scan_char_num; cur_cmd:=other_char; cur_chr:=cur_val; - end; - end; - end; -back_input; -otp_input_end:=otp_init_input_end; -for otp_i:=0 to otp_init_input_end do begin - otp_input_buf[otp_i]:=otp_init_input_buf[otp_i]; - end; -end - -@ -@<Apply the OCP to the input buffer@>= -begin -otp_input_ocp:=active_ocp(active_real); -if otp_input_ocp=0 then begin - print_nl("Null ocp being used: all input lost"); - otp_output_end:=0; - end -else if ocp_external(otp_input_ocp)=0 then begin - otp_input_start:=0; - otp_input_last:=0; - otp_stack_used:=0; - otp_stack_last:=0; - otp_stack_new:=0; - otp_output_end:=0; - otp_pc:=0; - otp_finished:=false; - otp_calc_ptr:=0; - otp_calcs[otp_calc_ptr]:=0; - otp_state_ptr:=0; - otp_states[otp_state_ptr]:=0; - while not otp_finished do - @<Run the OTP program@>; - end -else begin - k:=0; - if name_of_file then libc_free (name_of_file); - otp_ext_str:=ocp_external(otp_input_ocp); - otp_ext_str_arg:=ocp_external_arg(otp_input_ocp); - name_of_file := - xmalloc_array (char, 3 + length(otp_ext_str) + length(otp_ext_str_arg)); - for otp_ext_i:=str_start(otp_ext_str) to - str_start(otp_ext_str)+length(otp_ext_str)-1 do - append_to_name(str_pool[otp_ext_i]); - append_to_name(" "); - for otp_ext_i:=str_start(otp_ext_str_arg) to - str_start(otp_ext_str_arg)+length(otp_ext_str_arg)-1 do - append_to_name(str_pool[otp_ext_i]); - name_of_file[length(otp_ext_str)+length(otp_ext_str_arg)+2]:=0; - run_external_ocp(name_of_file); - end -end - -@ -@<Place the output buffer back on the stream@>= -begin -if (first+otp_output_end)>=ocp_buf_size then - overflow_ocp_buf_size; -push_input; -current_ocp_lstack:=active_lstack_no(active_real); -current_ocp_no:=active_counter(active_real); -state:=mid_line; -start:=first; -last:=start; -loc:=start; -for otp_counter:=1 to otp_output_end do begin - buffer[last]:=otp_output_buf[otp_counter]; - incr(last); {no overflow problem} - end; -limit:=last-1; -first:=last; -end - -@ -@d otp_cur_state==otp_states[otp_state_ptr] -@d otp_set_instruction==begin -if otp_pc>=ocp_state_no(otp_input_ocp)(otp_cur_state) then begin - print_err("bad OCP program -- PC not valid"); - succumb; - end; -otp_instruction:=ocp_state_entry(otp_input_ocp)(otp_cur_state)(otp_pc); -otp_instr:=otp_instruction div @"1000000; -otp_arg:=otp_instruction mod @"1000000; -end - -@<Run the OTP program@>= -begin -otp_set_instruction; -case otp_instr of - @<Run the |otp_right| instructions@>; - @<Run the |otp_pback| instructions@>; - @<Run the arithmetic instructions@>; - @<Run the |otp_state| instructions@>; - @<Run the |otp_left| instructions@>; - @<Run the |otp_goto| instructions@>; - @<Run the |otp_stop| instruction@>; - othercases begin - print_err("bad OCP program -- unknown instruction"); - succumb; - end - endcases; -end - -@ - -@d otp_check_char(#)== -if (1>#) or (#>otp_no_input_chars) then begin - print_err("right hand side of OCP expression is bad"); - succumb; - end - -@d otp_get_char(#)==begin -otp_check_char(#); -if #>otp_stack_last then begin - otp_calculated_char:=otp_input_buf[otp_input_start+#-otp_stack_last]; - end -else begin - otp_calculated_char:=otp_stack_buf[#]; - end; -end - -@d decr(#)==#:=#-1 - -@<Run the |otp_right| instructions@>= - otp_right_output: begin - incr(otp_output_end); - if otp_output_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_output_buf[otp_output_end]:=otp_calcs[otp_calc_ptr]; - decr(otp_calc_ptr); - incr(otp_pc); - end; - otp_right_num: begin - incr(otp_output_end); - if otp_output_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_output_buf[otp_output_end]:=otp_arg; - incr(otp_pc); - end; - otp_right_char: begin - otp_get_char(otp_arg); - incr(otp_output_end); - if otp_output_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_output_buf[otp_output_end]:=otp_calculated_char; - incr(otp_pc); - end; - otp_right_lchar: begin - otp_get_char(otp_no_input_chars-otp_arg); - incr(otp_output_end); - if otp_output_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_output_buf[otp_output_end]:=otp_calculated_char; - incr(otp_pc); - end; - otp_right_some: begin - otp_first_arg:=otp_arg+1; - incr(otp_pc); - otp_set_instruction; - otp_second_arg:=otp_no_input_chars-otp_arg; - for otp_counter:=otp_first_arg to otp_second_arg do begin - otp_get_char(otp_counter); - incr(otp_output_end); - if otp_output_end >ocp_buf_size then - overflow_ocp_buf_size; - otp_output_buf[otp_output_end]:=otp_calculated_char; - end; - incr(otp_pc); - end - -@ -@<Run the |otp_pback| instructions@>= - otp_pback_output: begin - incr(otp_stack_new); - if otp_stack_new >= ocp_stack_size then - overflow_ocp_stack_size; - otp_stack_buf[otp_stack_new]:=otp_calcs[otp_calc_ptr]; - decr(otp_calc_ptr); - incr(otp_pc); - end; - otp_pback_num: begin - incr(otp_stack_new); - if otp_stack_new >= ocp_stack_size then - overflow_ocp_stack_size; - otp_stack_buf[otp_stack_new]:=otp_arg; - incr(otp_pc); - end; - otp_pback_char: begin - otp_get_char(otp_arg); - incr(otp_stack_new); - if otp_stack_new >= ocp_stack_size then - overflow_ocp_stack_size; - otp_stack_buf[otp_stack_new]:=otp_calculated_char; - incr(otp_pc); - end; - otp_pback_lchar: begin - otp_get_char(otp_no_input_chars-otp_arg); - incr(otp_stack_new); - if otp_stack_new >= ocp_stack_size then - overflow_ocp_stack_size; - otp_stack_buf[otp_stack_new]:=otp_calculated_char; - incr(otp_pc); - end; - otp_pback_some: begin - otp_first_arg:=otp_arg+1; - incr(otp_pc); - otp_set_instruction; - otp_second_arg:=otp_no_input_chars-otp_arg; - for otp_counter:=otp_first_arg to otp_second_arg do begin - otp_get_char(otp_counter); - incr(otp_stack_new); - if otp_stack_new >= ocp_stack_size then - overflow_ocp_stack_size; - otp_stack_buf[otp_stack_new]:=otp_calculated_char; - end; - incr(otp_pc); - end - -@ -@<Run the arithmetic instructions@>= - otp_add: begin - otp_calcs[otp_calc_ptr-1] := - otp_calcs[otp_calc_ptr-1] + otp_calcs[otp_calc_ptr]; - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_sub: begin - otp_calcs[otp_calc_ptr-1] := - otp_calcs[otp_calc_ptr-1] - otp_calcs[otp_calc_ptr]; - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_mult: begin - otp_calcs[otp_calc_ptr-1] := - otp_calcs[otp_calc_ptr-1] * otp_calcs[otp_calc_ptr]; - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_div: begin - otp_calcs[otp_calc_ptr-1] := - otp_calcs[otp_calc_ptr-1] div otp_calcs[otp_calc_ptr]; - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_mod: begin - otp_calcs[otp_calc_ptr-1] := - otp_calcs[otp_calc_ptr-1] mod otp_calcs[otp_calc_ptr]; - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_lookup: begin - if otp_calcs[otp_calc_ptr]>= - ocp_table_no(otp_input_ocp)(otp_calcs[otp_calc_ptr-1]) then begin - print_err("bad OCP program -- table index not valid"); - succumb; - end; - otp_calcs[otp_calc_ptr-1]:= - ocp_table_entry(otp_input_ocp)(otp_calcs[otp_calc_ptr-1]) - (otp_calcs[otp_calc_ptr]); - incr(otp_pc); - decr(otp_calc_ptr); - end; - otp_push_num: begin - incr(otp_calc_ptr); - if otp_calc_ptr >= ocp_stack_size then - overflow_ocp_stack_size; - otp_calcs[otp_calc_ptr]:=otp_arg; - incr(otp_pc); - end; - otp_push_char: begin - otp_get_char(otp_arg); - incr(otp_calc_ptr); - if otp_calc_ptr >= ocp_stack_size then - overflow_ocp_stack_size; - otp_calcs[otp_calc_ptr]:=otp_calculated_char; - incr(otp_pc); - end; - otp_push_lchar: begin - otp_get_char(otp_no_input_chars-otp_arg); - incr(otp_calc_ptr); - if otp_calc_ptr >= ocp_stack_size then - overflow_ocp_stack_size; - otp_calcs[otp_calc_ptr]:=otp_calculated_char; - incr(otp_pc); - end - -@ -@<Run the |otp_state| instructions@>= - otp_state_change: begin - otp_input_start:=otp_input_last; - for otp_counter:=1 to (otp_stack_new-otp_stack_used) do begin - otp_stack_buf[otp_counter] := - otp_stack_buf[otp_counter+otp_stack_used]; - end; - otp_stack_new:=otp_stack_new-otp_stack_used; - otp_stack_last:=otp_stack_new; - otp_stack_used:=0; - otp_states[otp_state_ptr]:=otp_arg; - otp_pc:=0; - end; - otp_state_push: begin - otp_input_start:=otp_input_last; - for otp_counter:=1 to (otp_stack_new-otp_stack_used) do begin - otp_stack_buf[otp_counter] := - otp_stack_buf[otp_counter+otp_stack_used]; - end; - otp_stack_new:=otp_stack_new-otp_stack_used; - otp_stack_last:=otp_stack_new; - otp_stack_used:=0; - incr(otp_state_ptr); - if otp_state_ptr >= ocp_stack_size then - overflow_ocp_stack_size; - otp_states[otp_state_ptr]:=otp_arg; - otp_pc:=0; - end; - otp_state_pop: begin - otp_input_start:=otp_input_last; - for otp_counter:=1 to (otp_stack_new-otp_stack_used) do begin - otp_stack_buf[otp_counter] := - otp_stack_buf[otp_counter+otp_stack_used]; - end; - otp_stack_new:=otp_stack_new-otp_stack_used; - otp_stack_last:=otp_stack_new; - otp_stack_used:=0; - if otp_state_ptr>0 then decr(otp_state_ptr); - otp_pc:=0; - end - -@ -@<Run the |otp_left| instructions@>= - otp_left_start: begin - otp_input_start:=otp_input_last; - otp_input_last:=otp_input_start; - otp_stack_used:=0; - if (otp_stack_last=0) and (otp_input_last>=otp_input_end) then - otp_finished:=true - else if (otp_stack_used < otp_stack_last) then begin - incr(otp_stack_used); {no overflow problem} - otp_input_char:=otp_stack_buf[otp_stack_used]; - otp_no_input_chars:=1; - incr(otp_pc); - end - else begin - incr(otp_input_last); {no overflow problem} - otp_input_char:=otp_input_buf[otp_input_last]; - otp_no_input_chars:=1; - incr(otp_pc); - end; - end; - otp_left_return: begin - otp_input_last:=otp_input_start; - otp_stack_used:=0; - if (otp_stack_used < otp_stack_last) then begin - incr(otp_stack_used); {no overflow problem} - otp_input_char:=otp_stack_buf[otp_stack_used]; - otp_no_input_chars:=1; - incr(otp_pc); - end - else begin - incr(otp_input_last); {no overflow problem} - otp_input_char:=otp_input_buf[otp_input_last]; - otp_no_input_chars:=1; - incr(otp_pc); - end; - end; - otp_left_backup: begin - if otp_input_start < otp_input_last then begin - decr(otp_input_last); otp_input_char:=otp_input_buf[otp_input_last]; - end - else begin - decr(otp_stack_used); otp_input_char:=otp_stack_buf[otp_stack_used]; - end; - decr(otp_no_input_chars); - incr(otp_pc); - end - -@ -@<Run the |otp_goto| instructions@>= - otp_goto: begin - otp_pc:=otp_arg; - end; - otp_goto_ne: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char <> otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_eq: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char = otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_lt: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char < otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_le: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char <= otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_gt: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char > otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_ge: begin - otp_first_arg:=otp_arg; - incr(otp_pc); - otp_set_instruction; - if otp_input_char >= otp_first_arg then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_no_advance: begin - if (otp_stack_used < otp_stack_last) then begin - incr(otp_stack_used); {no overflow problem} - otp_input_char:=otp_stack_buf[otp_stack_used]; - incr(otp_no_input_chars); {no overflow problem} - incr(otp_pc); - end - else if otp_input_last>=otp_input_end then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_input_last); {no overflow problem} - otp_input_char:=otp_input_buf[otp_input_last]; - incr(otp_no_input_chars); {no overflow problem} - incr(otp_pc); - end; - end; - otp_goto_beg: begin - if otp_input_last=0 then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end; - otp_goto_end: begin - if otp_input_last>=otp_input_end then begin - otp_pc:=otp_arg; - end - else begin - incr(otp_pc); - end; - end - -@ -@<Run the |otp_stop| instruction@>= - otp_stop: begin - otp_input_start:=otp_input_last; - for otp_counter:=1 to (otp_stack_new-otp_stack_used) do begin - otp_stack_buf[otp_counter] := - otp_stack_buf[otp_counter+otp_stack_used]; - end; - otp_stack_new:=otp_stack_new-otp_stack_used; - otp_stack_last:=otp_stack_new; - otp_stack_used:=0; - otp_pc:=0; - end - -@z diff --git a/Build/source/texk/web2c/omegadir/omfont.ch b/Build/source/texk/web2c/omegadir/omfont.ch deleted file mode 100644 index e70d4c47dcd..00000000000 --- a/Build/source/texk/web2c/omegadir/omfont.ch +++ /dev/null @@ -1,2377 +0,0 @@ -% omfont.ch: Reading and storing font metric information -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%%--------------------------------------- -@x [15] m.208 l. -@d min_internal=end_cs_name+1 {the smallest code that can follow \.{\\the}} -@y -@d char_ghost=end_cs_name+1 - {\.{\\ghostleft}, \.{\\ghostright} character for kerning} -@d min_internal=char_ghost+1 {the smallest code that can follow \.{\\the}} -@z -%--------------------------------------- -@x [17] m.222 l.4530 - Omega - {begins table of 257 permanent font identifiers} -@d undefined_control_sequence=frozen_null_font+257 {dummy location} -@y - {begins table of |number_fonts| permanent font identifiers} -@d undefined_control_sequence=frozen_null_font+number_fonts - {dummy location} -@z -%--------------------------------------- -@x [18] m.265 l.5648 - Omega -primitive("insert",insert,0);@/ -@!@:insert_}{\.{\\insert} primitive@> -@y -primitive("insert",insert,0);@/ -@!@:insert_}{\.{\\insert} primitive@> -primitive("leftghost",char_ghost,0);@/ -@!@:leftghost_}{\.{\\leftghost} primitive@> -@z -%--------------------------------------- -@x [18] m.265 l.5648 - Omega -primitive("setbox",set_box,0);@/ -@!@:set_box_}{\.{\\setbox} primitive@> -@y -primitive("rightghost",char_ghost,1);@/ -@!@:rightghost_}{\.{\\rightghost} primitive@> -primitive("setbox",set_box,0);@/ -@!@:set_box_}{\.{\\setbox} primitive@> -@z -%--------------------------------------- -@x [18] m.266 l.5648 - Omega -char_num: print_esc("char"); -@y -char_num: print_esc("char"); -char_ghost: if cur_chr=0 then print_esc("leftghost") - else print_esc("rightghost"); -@z -%--------------------------------------- -@x [26] m.425 l.8524 - font parameters -begin find_font_dimen(false); font_info[fmem_ptr].sc:=0; -scanned_result(font_info[cur_val].sc)(dimen_val); -@y -begin find_font_dimen(false); -font_info(dimen_font)(font_file_size(dimen_font)).sc:=0; -scanned_result(font_info(dimen_font)(cur_val).sc)(dimen_val); -@z -%--------------------------------------- -@x [26] m.426 l.8530 - font parameters -if m=0 then scanned_result(hyphen_char[cur_val])(int_val) -else scanned_result(skew_char[cur_val])(int_val); -@y -if m=0 then scanned_result(hyphen_char(cur_val))(int_val) -else scanned_result(skew_char(cur_val))(int_val); -@z -%--------------------------------------- -@x [27] m.472 l.9258 - font parameters -font_name_code: begin print(font_name[cur_val]); - if font_size[cur_val]<>font_dsize[cur_val] then - begin print(" at "); print_scaled(font_size[cur_val]); -@y -font_name_code: begin print(font_name(cur_val)); - if font_size(cur_val)<>font_dsize(cur_val) then - begin print(" at "); print_scaled(font_size(cur_val)); -@z -%--------------------------------------- -@x [30] m.539 l.10392 - Omega -@^Ramshaw, Lyle Harold@> -of information in a compact but useful form. - -@y -@^Ramshaw, Lyle Harold@> -of information in a compact but useful form. - -$\Omega$ is capable of reading not only \.{TFM} files, but also -\.{OFM} files, which can describe fonts with up to 65536 characters -and with huge lig/kern tables. These fonts will often be virtual -fonts built up from real fonts with 256 characters, but $\Omega$ -is not aware of this. - -The documentation below describes \.{TFM} files, with slight additions -to show where \.{OFM} files differ. - -@z -%--------------------------------------- -@x [30] m.540 l.10417 - Omega -Note that a font may contain as many as 256 characters (if |bc=0| and |ec=255|), -and as few as 0 characters (if |bc=ec+1|). - -Incidentally, when two or more 8-bit bytes are combined to form an integer of -16 or more bits, the most significant bytes appear first in the file. -This is called BigEndian order. -@!@^BigEndian order@> - -@y -Note that a \.{TFM} font may contain as many as 256 characters -(if |bc=0| and |ec=255|), and as few as 0 characters (if |bc=ec+1|). - -Incidentally, when two or more 8-bit bytes are combined to form an integer of -16 or more bits, the most significant bytes appear first in the file. -This is called BigEndian order. -@!@^BigEndian order@> - -The first 52 bytes (13 words) of an \.{OFM} file contains thirteen -32-bit integers that give the lengths of the various subsequent -portions of the file. The first word is 0 (future versions of -\.{OFM} files could have different values; what is important is that -the first two bytes be 0 to differentiate \.{TFM} and \.{OFM} files). -The next twelve integers are as above, all nonegative and less -than~$2^{31}$. We must have |bc-1<=ec<=65535|, and -$$\hbox{|lf=13+lh+2*(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np|.}$$ -Note that an \.{OFM} font may contain as many as 65536 characters -(if |bc=0| and |ec=65535|), and as few as 0 characters (if |bc=ec+1|). - -@z -%--------------------------------------- -@x [30] m.543 l.10492 - Omega -per character. Each word in this part of the file contains six fields -@y -per character. Each word in this part of a \.{TFM} file contains six fields -@z -%--------------------------------------- -@x [30] m.543 l.10506 - Omega -imposes a limit of 16 different heights, 16 different depths, and -64 different italic corrections. - -@y -imposes a limit of 16 different heights, 16 different depths, and -64 different italic corrections. - -For \.{OFM} files, two words (eight bytes) are used. -The arrangement is as follows. - -\yskip\hang first and second bytes: |@!width_index| (16 bits)\par -\hang third byte: |@!height_index| (8 bits)\par -\hang fourth byte: |@!depth_index| (8~bits)\par -\hang fifth and sixth bytes: -|@!italic_index| (14 bits) times 4, plus |@!tag| (2~bits)\par -\hang seventh and eighth bytes: |@!remainder| (16 bits)\par -\yskip\noindent -Therefore the \.{OFM} format imposes a limit of 256 different heights, -256 different depths, and 16384 different italic corrections. - -@z -%--------------------------------------- -@x [30] m.545 l.10547 - Omega -that explains what to do for special letter pairs. Each word in this array is a -|@!lig_kern_command| of four bytes. -@y -that explains what to do for special letter pairs. Each word in this array, -in a \.{TFM} file, is a |@!lig_kern_command| of four bytes. -@z -%--------------------------------------- -@x [30] m.545 l.10557 - Omega -\hang fourth byte: |remainder|.\par -\yskip\noindent -@y -\hang fourth byte: |remainder|.\par -\yskip\noindent -In an \.{OFM} file, eight bytes are used, two bytes for each field. - -@z -%--------------------------------------- -@x [30] m.545 l.10587 - Omega -appear in a location |<=255|. -@y -appear in a location |<=255| in a \.{TFM} file, |<=65535| in an \.{OFM} file. -@z -%--------------------------------------- -@x [30] m.545 l.10599 - Omega -@d skip_byte(#)==#.b0 -@d next_char(#)==#.b1 -@d op_byte(#)==#.b2 -@d rem_byte(#)==#.b3 -@y -@d top_skip_byte(#)==(#.b0 div 256) -@d skip_byte(#)==(#.b0 mod 256) -@d next_char_end(#)==#.b1 -@d next_char(#)==font_offset(#)+next_char_end -@d op_byte(#)==#.b2 -@d rem_byte(#)==#.b3 -@d rem_char_byte_end(#)==#.b3 -@d rem_char_byte(#)==font_offset(#)+rem_char_byte_end -@d rem_top_byte(#)==(#.b3 div 256) -@d rem_bot_byte(#)==(#.b3 mod 256) -@z -%--------------------------------------- -@x [30] m.546 l.10604 - Omega -consists of four bytes called |@!top|, |@!mid|, |@!bot|, and |@!rep| (in this -order). These bytes are the character codes of individual pieces used to -@y -consists of four bytes in a \.{TFM} file, -called |@!top|, |@!mid|, |@!bot|, and |@!rep| (in this order). -In an \.{OFM} file, each field takes two bytes, for eight in total. -These bytes are the character codes of individual pieces used to -@z -%--------------------------------------- -@x [30] m.546 l.10618 - Omega -@d ext_top(#)==#.b0 {|top| piece in a recipe} -@d ext_mid(#)==#.b1 {|mid| piece in a recipe} -@d ext_bot(#)==#.b2 {|bot| piece in a recipe} -@d ext_rep(#)==#.b3 {|rep| piece in a recipe} -@y -@d ext_top_end(#)==#.b0 {|top| piece in a recipe} -@d ext_top(#)==font_offset(#)+ext_top_end -@d ext_mid_end(#)==#.b1 {|mid| piece in a recipe} -@d ext_mid(#)==font_offset(#)+ext_mid_end -@d ext_bot_end(#)==#.b2 {|bot| piece in a recipe} -@d ext_bot(#)==font_offset(#)+ext_bot_end -@d ext_rep_end(#)==#.b3 {|rep| piece in a recipe} -@d ext_rep(#)==font_offset(#)+ext_rep_end -@z -%--------------------------------------- -@x [30] m.548 l.10674 - Omega -@!font_index=0..font_mem_size; {index into |font_info|} -@y -@!font_index=integer; {index into |font_info|} -@z -%--------------------------------------- -@x [30] m.549 l.10678 - Omega -@d non_char==qi(256) {a |halfword| code that can't match a real character} -@y -@d non_char==qi(too_big_char) {a code that can't match a real character} -@z -%--------------------------------------- -@x [30] m.549 l.10686 - Omega -@!font_info:array[font_index] of memory_word; - {the big collection of font data} -@!fmem_ptr:font_index; {first unused word of |font_info|} -@!font_ptr:internal_font_number; {largest internal font number in use} -@!font_check:array[internal_font_number] of four_quarters; {check sum} -@!font_size:array[internal_font_number] of scaled; {``at'' size} -@!font_dsize:array[internal_font_number] of scaled; {``design'' size} -@!font_params:array[internal_font_number] of font_index; {how many font - parameters are present} -@!font_name:array[internal_font_number] of str_number; {name of the font} -@!font_area:array[internal_font_number] of str_number; {area of the font} -@!font_bc:array[internal_font_number] of eight_bits; - {beginning (smallest) character code} -@!font_ec:array[internal_font_number] of eight_bits; - {ending (largest) character code} -@!font_glue:array[internal_font_number] of pointer; - {glue specification for interword space, |null| if not allocated} -@!font_used:array[internal_font_number] of boolean; - {has a character from this font actually appeared in the output?} -@!hyphen_char:array[internal_font_number] of integer; - {current \.{\\hyphenchar} values} -@!skew_char:array[internal_font_number] of integer; - {current \.{\\skewchar} values} -@!bchar_label:array[internal_font_number] of font_index; - {start of |lig_kern| program for left boundary character, - |non_address| if there is none} -@!font_bchar:array[internal_font_number] of min_quarterword..non_char; - {right boundary character, |non_char| if there is none} -@!font_false_bchar:array[internal_font_number] of min_quarterword..non_char; - {|font_bchar| if it doesn't exist in the font, otherwise |non_char|} -@y -@!font_ptr:internal_font_number; {largest internal font number in use} -@z -%--------------------------------------- -@x [30] m.550 l.10723 - Omega -|font_info[char_base[f]+c].qqqq|; and if |w| is the |width_index| -part of this word (the |b0| field), the width of the character is -|font_info[width_base[f]+w].sc|. (These formulas assume that -|min_quarterword| has already been added to |c| and to |w|, since \TeX\ -stores its quarterwords that way.) - -@<Glob...@>= -@!char_base:array[internal_font_number] of integer; - {base addresses for |char_info|} -@!width_base:array[internal_font_number] of integer; - {base addresses for widths} -@!height_base:array[internal_font_number] of integer; - {base addresses for heights} -@!depth_base:array[internal_font_number] of integer; - {base addresses for depths} -@!italic_base:array[internal_font_number] of integer; - {base addresses for italic corrections} -@!lig_kern_base:array[internal_font_number] of integer; - {base addresses for ligature/kerning programs} -@!kern_base:array[internal_font_number] of integer; - {base addresses for kerns} -@!exten_base:array[internal_font_number] of integer; - {base addresses for extensible recipes} -@!param_base:array[internal_font_number] of integer; - {base addresses for font parameters} -@y -|font_info(f)(char_base(f)+c).qqqq|; and if |w| is the |width_index| -part of this word (the |b0| field), the width of the character is -|font_info(f)(width_base(f)+w).sc|. (These formulas assume that -|min_quarterword| has already been added to |c| and to |w|, since \TeX\ -stores its quarterwords that way.) - -@d font_info_end(#)==#] -@d font_info(#)==font_tables[#,font_info_end -@d offset_file_size=0 -@d offset_check=1 -@d offset_offset=offset_check+4 -@d offset_size=offset_offset+1 -@d offset_dsize=offset_size+1 -@d offset_params=offset_dsize+1 -@d offset_name_sort=offset_params+1 -@d offset_name=offset_name_sort+1 -@d offset_area=offset_name+1 -@d offset_bc=offset_area+1 -@d offset_ec=offset_bc+1 -@d offset_glue=offset_ec+1 -@d offset_used=offset_glue+1 -@d offset_hyphen=offset_used+1 -@d offset_skew=offset_hyphen+1 -@d offset_bchar_label=offset_skew+1 -@d offset_bchar=offset_bchar_label+1 -@d offset_false_bchar=offset_bchar+1 -@d offset_ivalues_start=offset_false_bchar+1 -@d offset_fvalues_start=offset_ivalues_start+1 -@d offset_mvalues_start=offset_fvalues_start+1 -@d offset_rules_start=offset_mvalues_start+1 -@d offset_glues_start=offset_rules_start+1 -@d offset_penalties_start=offset_glues_start+1 -@d offset_ivalues_base=offset_penalties_start+1 -@d offset_fvalues_base=offset_ivalues_base+1 -@d offset_mvalues_base=offset_fvalues_base+1 -@d offset_rules_base=offset_mvalues_base+1 -@d offset_glues_base=offset_rules_base+1 -@d offset_penalties_base=offset_glues_base+1 -@d offset_char_base=offset_penalties_base+1 -@d offset_char_attr_base=offset_char_base+1 -@d offset_width_base=offset_char_attr_base+1 -@d offset_height_base=offset_width_base+1 -@d offset_depth_base=offset_height_base+1 -@d offset_italic_base=offset_depth_base+1 -@d offset_lig_kern_base=offset_italic_base+1 -@d offset_kern_base=offset_lig_kern_base+1 -@d offset_exten_base=offset_kern_base+1 -@d offset_param_base=offset_exten_base+1 -@d offset_charinfo_base=offset_param_base+1 -@d font_file_size(#)==font_info(#)(offset_file_size).int -@d font_check_0(#)==font_info(#)(offset_check).int -@d font_check_1(#)==font_info(#)(offset_check+1).int -@d font_check_2(#)==font_info(#)(offset_check+2).int -@d font_check_3(#)==font_info(#)(offset_check+3).int -@d font_offset(#)==font_info(#)(offset_offset).int -@d font_size(#)==font_info(#)(offset_size).int -@d font_dsize(#)==font_info(#)(offset_dsize).int -@d font_params(#)==font_info(#)(offset_params).int -@d font_name_sort(#)==font_info(#)(offset_name_sort).int -@d font_name(#)==font_info(#)(offset_name).int -@d font_area(#)==font_info(#)(offset_area).int -@d font_bc(#)==font_info(#)(offset_bc).int -@d font_ec(#)==font_info(#)(offset_ec).int -@d font_glue(#)==font_info(#)(offset_glue).int -@d font_used(#)==font_info(#)(offset_used).int -@d hyphen_char(#)==font_info(#)(offset_hyphen).int -@d skew_char(#)==font_info(#)(offset_skew).int -@d bchar_label(#)==font_info(#)(offset_bchar_label).int -@d font_bchar(#)==font_info(#)(offset_bchar).int -@d font_false_bchar(#)==font_info(#)(offset_false_bchar).int -@d ivalues_start(#)==font_info(#)(offset_ivalues_start).int -@d fvalues_start(#)==font_info(#)(offset_fvalues_start).int -@d mvalues_start(#)==font_info(#)(offset_mvalues_start).int -@d rules_start(#)==font_info(#)(offset_rules_start).int -@d glues_start(#)==font_info(#)(offset_glues_start).int -@d penalties_start(#)==font_info(#)(offset_penalties_start).int -@d ivalues_base(#)==font_info(#)(offset_ivalues_base).int -@d fvalues_base(#)==font_info(#)(offset_fvalues_base).int -@d mvalues_base(#)==font_info(#)(offset_mvalues_base).int -@d rules_base(#)==font_info(#)(offset_rules_base).int -@d glues_base(#)==font_info(#)(offset_glues_base).int -@d penalties_base(#)==font_info(#)(offset_penalties_base).int -@d char_attr_base(#)==font_info(#)(offset_char_attr_base).int -@d char_base(#)==font_info(#)(offset_char_base).int -@d width_base(#)==font_info(#)(offset_width_base).int -@d height_base(#)==font_info(#)(offset_height_base).int -@d depth_base(#)==font_info(#)(offset_depth_base).int -@d italic_base(#)==font_info(#)(offset_italic_base).int -@d lig_kern_base(#)==font_info(#)(offset_lig_kern_base).int -@d kern_base(#)==font_info(#)(offset_kern_base).int -@d exten_base(#)==font_info(#)(offset_exten_base).int -@d param_base(#)==font_info(#)(offset_param_base).int - -@<Glob...@>= -@!dimen_font:integer; -@z -%--------------------------------------- -@x [30] m.551 l.10743 - Omega -for k:=font_base to font_max do font_used[k]:=false; -@y -@z -%--------------------------------------- -@x [30] m.552 l.10749 - Omega -font_ptr:=null_font; fmem_ptr:=7; -font_name[null_font]:="nullfont"; font_area[null_font]:=""; -hyphen_char[null_font]:="-"; skew_char[null_font]:=-1; -bchar_label[null_font]:=non_address; -font_bchar[null_font]:=non_char; font_false_bchar[null_font]:=non_char; -font_bc[null_font]:=1; font_ec[null_font]:=0; -font_size[null_font]:=0; font_dsize[null_font]:=0; -char_base[null_font]:=0; width_base[null_font]:=0; -height_base[null_font]:=0; depth_base[null_font]:=0; -italic_base[null_font]:=0; lig_kern_base[null_font]:=0; -kern_base[null_font]:=0; exten_base[null_font]:=0; -font_glue[null_font]:=null; font_params[null_font]:=7; -param_base[null_font]:=-1; -for k:=0 to 6 do font_info[k].sc:=0; -@y -font_ptr:=null_font; -allocate_font_table(null_font,offset_charinfo_base+108); -font_file_size(null_font):=offset_charinfo_base+108; -font_used(null_font):=false; -font_name(null_font):="nullfont"; font_area(null_font):=""; -hyphen_char(null_font):="-"; skew_char(null_font):=-1; -bchar_label(null_font):=non_address; -font_bchar(null_font):=non_char; font_false_bchar(null_font):=non_char; -font_bc(null_font):=1; font_ec(null_font):=0; -font_size(null_font):=0; font_dsize(null_font):=0; -char_base(null_font):=offset_charinfo_base; -char_attr_base(null_font):=offset_charinfo_base; -ivalues_start(null_font):=offset_charinfo_base; -fvalues_start(null_font):=offset_charinfo_base; -mvalues_start(null_font):=offset_charinfo_base; -rules_start(null_font):=offset_charinfo_base; -glues_start(null_font):=offset_charinfo_base; -penalties_start(null_font):=offset_charinfo_base; -ivalues_base(null_font):=offset_charinfo_base; -fvalues_base(null_font):=offset_charinfo_base; -mvalues_base(null_font):=offset_charinfo_base; -rules_base(null_font):=offset_charinfo_base; -glues_base(null_font):=offset_charinfo_base; -penalties_base(null_font):=offset_charinfo_base; -width_base(null_font):=offset_charinfo_base; -height_base(null_font):=offset_charinfo_base; -depth_base(null_font):=offset_charinfo_base; -italic_base(null_font):=offset_charinfo_base; -lig_kern_base(null_font):=offset_charinfo_base; -kern_base(null_font):=offset_charinfo_base; -exten_base(null_font):=offset_charinfo_base; -font_glue(null_font):=null; -font_params(null_font):=7; -param_base(null_font):=offset_charinfo_base-1; -font_offset(null_font):=0; -for k:=1 to 7 do font_info(null_font)(param_base(null_font)+k).sc:=0; -@z -%--------------------------------------- -@x [30] m.553 l.10767 - Omega -text(frozen_null_font):="nullfont"; eqtb[frozen_null_font]:=eqtb[cur_val]; -@y -settext(frozen_null_font,"nullfont"); -set_new_eqtb(frozen_null_font,new_eqtb(cur_val)); -@z -%--------------------------------------- -@x [30] m.554 l.10771 - Omega -$$\hbox{|font_info[width_base[f]+font_info[char_base[f]+c].qqqq.b0].sc|}$$ -@y -$$\hbox{|font_info(f)(width_base(f)+font_info(f)(char_base(f)+c).qqqq.b0).sc|}$$ -@z -%--------------------------------------- -@x [30] m.554 l.10785 - Omega -|height_depth(q)| will be the 8-bit quantity -$$b=|height_index|\times16+|depth_index|,$$ and if |b| is such a byte we -@y -|height_depth(q)| will be the 16-bit quantity -$$b=|height_index|\times256+|depth_index|,$$ and if |b| is such a byte we -@z -%--------------------------------------- -@x [30] m.554 l.10798 - Omega -@d char_info_end(#)==#].qqqq -@d char_info(#)==font_info[char_base[#]+char_info_end -@d char_width_end(#)==#.b0].sc -@d char_width(#)==font_info[width_base[#]+char_width_end -@d char_exists(#)==(#.b0>min_quarterword) -@d char_italic_end(#)==(qo(#.b2)) div 4].sc -@d char_italic(#)==font_info[italic_base[#]+char_italic_end -@d height_depth(#)==qo(#.b1) -@d char_height_end(#)==(#) div 16].sc -@d char_height(#)==font_info[height_base[#]+char_height_end -@d char_depth_end(#)==(#) mod 16].sc -@d char_depth(#)==font_info[depth_base[#]+char_depth_end -@d char_tag(#)==((qo(#.b2)) mod 4) -@y -@d char_info_end(#)==#].qqqq -@d char_info(#)==font_tables[#,char_base(#)-font_offset(#)+char_info_end -@d char_width_end(#)==#.b0].sc -@d char_width(#)==font_tables[#,width_base(#)+char_width_end -@d char_exists(#)==(#.b0>min_quarterword) -@d char_italic_end(#)==(qo(#.b2)) div 256].sc -@d char_italic(#)==font_tables[#,italic_base(#)+char_italic_end -@d height_depth(#)==qo(#.b1) -@d char_height_end(#)==(#) div 256].sc -@d char_height(#)==font_tables[#,height_base(#)+char_height_end -@d char_depth_end(#)==(#) mod 256].sc -@d char_depth(#)==font_tables[#,depth_base(#)+char_depth_end -@d char_tag(#)==((qo(#.b2)) mod 4) -@z -%--------------------------------------- -@x [30] m.557 l.10834 - Omega -|i=font_info[lig_kern_start(f)(j)]| or |font_info[lig_kern_restart(f)(i)]|, -depending on whether or not |skip_byte(i)<=stop_flag|. - -The constant |kern_base_offset| should be simplified, for \PASCAL\ compilers -that do not do local optimization. -@^system dependencies@> - -@d char_kern_end(#)==256*op_byte(#)+rem_byte(#)].sc -@d char_kern(#)==font_info[kern_base[#]+char_kern_end -@d kern_base_offset==256*(128+min_quarterword) -@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 -|i=font_info(f)(lig_kern_start(f)(j))| or -|font_info(f)(lig_kern_restart(f)(i))|, -depending on whether or not |skip_byte(i)<=stop_flag|. - -The constant |kern_base_offset| should be simplified, for \PASCAL\ compilers -that do not do local optimization. -@^system dependencies@> - -@d char_kern_end(#)==256*op_byte(#)+rem_byte(#)].sc -@d char_kern(#)==font_tables[#,kern_base(#)+char_kern_end -@d kern_base_offset==256*(128+min_quarterword) -@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 attr_zero_char_ivalue_end(#)==#].int].int -@d attr_zero_char_ivalue(#)== - font_tables[#,font_tables[#,char_attr_base(#)+attr_zero_char_ivalue_end -@d attr_zero_ivalue_end(#)==#].int -@d attr_zero_ivalue(#)==font_tables[#,ivalues_base(#)+attr_zero_ivalue_end -@d attr_zero_penalty_end(#)==#].int -@d attr_zero_penalty(#)==font_tables[#,penalties_base(#)+attr_zero_penalty_end -@d attr_zero_kern_end(#)==#].int -@d attr_zero_kern(#)==font_tables[#,mvalues_base(#)+attr_zero_kern_end - -@z -%--------------------------------------- -@x [30] m.558 l.10843 - Omega -@d param_end(#)==param_base[#]].sc -@d param(#)==font_info[#+param_end -@d slant==param(slant_code) {slant to the right, per unit distance upward} -@d space==param(space_code) {normal space between words} -@d space_stretch==param(space_stretch_code) {stretch between words} -@d space_shrink==param(space_shrink_code) {shrink between words} -@d x_height==param(x_height_code) {one ex} -@d quad==param(quad_code) {one em} -@d extra_space==param(extra_space_code) {additional space at end of sentence} -@y -@d slant(#)==font_info(#)(param_base(#)+slant_code).sc - {slant to the right, per unit distance upward} -@d space(#)==font_info(#)(param_base(#)+space_code).sc - {normal space between words} -@d space_stretch(#)==font_info(#)(param_base(#)+space_stretch_code).sc - {stretch between words} -@d space_shrink(#)==font_info(#)(param_base(#)+space_shrink_code).sc - {shrink between words} -@d x_height(#)==font_info(#)(param_base(#)+x_height_code).sc - {one ex} -@d quad(#)==font_info(#)(param_base(#)+quad_code).sc - {one em} -@d extra_space(#)==font_info(#)(param_base(#)+extra_space_code).sc - {additional space at end of sentence} -@z -%--------------------------------------- -@x [30] m.560 l.10876 - Omega -@p function read_font_info(@!u:pointer;@!nom,@!aire:str_number; - @!s:scaled):internal_font_number; {input a \.{TFM} file} -@y -@p function read_font_info(@!u:pointer;@!nom,@!aire:str_number; - @!s:scaled;offset:quarterword):internal_font_number; {input a \.{TFM} file} -@z -%--------------------------------------- -@x [30] m.560 l.10882 - Omega - {sizes of subfiles} -@!f:internal_font_number; {the new font's number} -@!g:internal_font_number; {the number to return} -@!a,@!b,@!c,@!d:eight_bits; {byte variables} -@y -@!font_dir:halfword; - {sizes of subfiles} -@!f:internal_font_number; {the new font's number} -@!g:internal_font_number; {the number to return} -@!a,@!b,@!c,@!d:integer; {byte variables} -@!i,@!k_param,@!param,@!font_counter:integer; {counters} -@!font_level,@!header_length:integer; -@!nco,@!ncw,@!npc,@!nlw,@!neew:integer; -@!nki,@!nwi,@!nkf,@!nwf,@!nkm,@!nwm:integer; -@!nkr,@!nwr,@!nkg,@!nwg,@!nkp,@!nwp:integer; -@!table_size:array [0..31] of integer; -@!bytes_per_entry,@!extra_char_bytes:integer; -@!repeat_no,@!table_counter:integer; -@z -%--------------------------------------- -@x [30] m.560 l.10888 - Omega -@!bchar:0..256; {right boundary character, or 256} -@y -@!bchar:0..too_big_char; {right boundary character, or |too_big_char|} -@!first_two:integer; -@z -%--------------------------------------- -@x [30] m.563 l.10943 - Omega -if file_opened then print(" not loadable: Bad metric (TFM) file") -else print(" not loadable: Metric (TFM) file not found"); -@y -if file_opened then print(" not loadable: Bad metric (TFM/OFM) file") -else print(" not loadable: Metric (TFM/OFM) file not found"); -@z -%--------------------------------------- -@x [30] m.563 l.10943 - Omega -if aire="" then pack_file_name(nom,TEX_font_area,".tfm") -else pack_file_name(nom,aire,".tfm"); -if not b_open_in(tfm_file) then abort; -@y -if aire="" then pack_file_name(nom,TEX_font_area,".ofm") -else pack_file_name(nom,aire,".ofm"); -if not b_open_in(tfm_file) then abort; -@z -%--------------------------------------- -@x [30] m.564 l.10962 - Omega -@d store_four_quarters(#)==begin fget; a:=fbyte; qw.b0:=qi(a); - fget; b:=fbyte; qw.b1:=qi(b); - fget; c:=fbyte; qw.b2:=qi(c); - fget; d:=fbyte; qw.b3:=qi(d); - #:=qw; - end -@y -@d read_sixteen_unsigned(#)==begin #:=fbyte; - fget; #:=#*@'400+fbyte; - end -@d read_thirtytwo(#)==begin #:=fbyte; - if #>127 then abort; - fget; #:=#*@'400+fbyte; - fget; #:=#*@'400+fbyte; - fget; #:=#*@'400+fbyte; - end -@d store_four_bytes(#)==begin fget; a:=fbyte; qw.b0:=a; - fget; b:=fbyte; qw.b1:=b; - fget; c:=fbyte; qw.b2:=c; - fget; d:=fbyte; qw.b3:=d; - #:=qw; - end -@d store_char_info(#)==begin if (font_level<>-1) then - begin fget; read_sixteen_unsigned(a); qw.b0:=a; - fget; read_sixteen_unsigned(b); qw.b1:=b; - fget; read_sixteen_unsigned(c); qw.b2:=c; - fget; read_sixteen_unsigned(d); qw.b3:=d; - #:=qw - end -else - begin fget; a:=fbyte; qw.b0:=a; - fget; b:=fbyte; b:=((b div 16)*256)+(b mod 16); qw.b1:=b; - fget; c:=fbyte; c:=((c div 4)*256)+(c mod 4); qw.b2:=c; - fget; d:=fbyte; qw.b3:=d; - #:=qw - end -end -@d store_four_quarters(#)==begin if (font_level<>-1) then - begin fget; read_sixteen_unsigned(a); qw.b0:=a; - fget; read_sixteen_unsigned(b); qw.b1:=b; - fget; read_sixteen_unsigned(c); qw.b2:=c; - fget; read_sixteen_unsigned(d); qw.b3:=d; - #:=qw - end -else - begin fget; a:=fbyte; qw.b0:=a; - fget; b:=fbyte; qw.b1:=b; - fget; c:=fbyte; qw.b2:=c; - fget; d:=fbyte; qw.b3:=d; - #:=qw - end -end -@z -%--------------------------------------- -@x [30] m.565 l.10970 - Omega -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 -nco:=0; ncw:=0; npc:=0; -nki:=0; nwi:=0; nkf:=0; nwf:=0; nkm:=0; nwm:=0; -nkr:=0; nwr:=0; nkg:=0; nwg:=0; nkp:=0; nwp:=0; -read_sixteen(first_two); -if first_two<>0 then begin - font_level:=-1; - lf:=first_two; - 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); - header_length:=6; - ncw:=(ec-bc+1); - nlw:=nl; - neew:=ne; - end -else begin - fget; read_sixteen(font_level); - if (font_level<>0) and (font_level<>1) then abort; - fget; read_thirtytwo(lf); - fget; read_thirtytwo(lh); - fget; read_thirtytwo(bc); - fget; read_thirtytwo(ec); - if (bc>ec+1)or(ec>biggest_char) then abort; - if bc>65535 then {|bc=65536| and |ec=65535|} - begin bc:=1; ec:=0; - end; - fget; read_thirtytwo(nw); - fget; read_thirtytwo(nh); - fget; read_thirtytwo(nd); - fget; read_thirtytwo(ni); - fget; read_thirtytwo(nl); - fget; read_thirtytwo(nk); - fget; read_thirtytwo(ne); - fget; read_thirtytwo(np); - fget; read_thirtytwo(font_dir); - nlw:=2*nl; - neew:=2*ne; - if font_level=0 then begin - header_length:=14; - ncw:=2*(ec-bc+1); - end - else begin - header_length:=29; - fget; read_thirtytwo(nco); - fget; read_thirtytwo(ncw); - fget; read_thirtytwo(npc); - fget; read_thirtytwo(nki); {Kinds of font ivalues} - fget; read_thirtytwo(nwi); {Words of font ivalues} - fget; read_thirtytwo(nkf); {Kinds of font fvalues} - fget; read_thirtytwo(nwf); {Words of font fvalues} - fget; read_thirtytwo(nkm); {Kinds of font mvalues} - fget; read_thirtytwo(nwm); {Words of font mvalues} - fget; read_thirtytwo(nkr); {Kinds of font rules} - fget; read_thirtytwo(nwr); {Words of font rules} - fget; read_thirtytwo(nkg); {Kinds of font glues} - fget; read_thirtytwo(nwg); {Words of font glues} - fget; read_thirtytwo(nkp); {Kinds of font penalties} - fget; read_thirtytwo(nwp); {Words of font penalties} - end - end; -if lf<>(header_length+lh+ncw+nw+nh+nd+ni+nlw+nk+neew+np+ - nki+nwi+nkf+nwf+nkm+nwm+nkr+nwr+nkg+nwg+nkp+nwp) then abort; -@z -%--------------------------------------- -@x [30] m.566 l.10996 - Omega -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 -case font_level of --1: lf:=lf-6-lh; {|lf| words should be loaded into |font_info|} - 0: lf:=lf-14-lh-(ec-bc+1)-nl-ne; - {some of the sections contain pairs of - words that become single |memory_word|s} - 1: lf:=lf-29-lh-ncw+(1+npc)*(ec-bc+1)-nl-ne; - {We explode the characters} -end; -if np<7 then lf:=lf+7-np; {at least seven parameters will appear} -if (font_ptr=font_max) then - @<Apologize for not loading the font, |goto done|@>; -f:=font_ptr+1; -allocate_font_table(f,offset_charinfo_base+lf+100); - {leave room for 100 extra parameters -- potential bug} -font_file_size(f):=offset_charinfo_base+lf+100; -font_used(f):=false; -font_offset(f):=offset; -char_base(f):=offset_charinfo_base-bc; -char_attr_base(f):=char_base(f)+ec+1; -ivalues_start(f):=char_attr_base(f)+npc*(ec-bc+1); -fvalues_start(f):=ivalues_start(f)+nki; -mvalues_start(f):=fvalues_start(f)+nkf; -rules_start(f):=mvalues_start(f)+nkm; -glues_start(f):=rules_start(f)+nkr; -penalties_start(f):=glues_start(f)+nkg; -ivalues_base(f):=penalties_start(f)+nkp; -fvalues_base(f):=ivalues_base(f)+nwi; -mvalues_base(f):=fvalues_base(f)+nwf; -rules_base(f):=mvalues_base(f)+nwm; -glues_base(f):=rules_base(f)+nwr; -penalties_base(f):=glues_base(f)+nwg; -width_base(f):=penalties_base(f)+nwp; -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] m.568 l.11026 - Omega -store_four_quarters(font_check[f]); -@y -fget; font_check_0(f):=fbyte; -fget; font_check_1(f):=fbyte; -fget; font_check_2(f):=fbyte; -fget; font_check_3(f):=fbyte; -@z -%--------------------------------------- -@x [30] m.568 l.11033 - Omega -font_dsize[f]:=z; -if s<>-1000 then - if s>=0 then z:=s - else z:=xn_over_d(z,-s,1000); -font_size[f]:=z; -@y -font_dsize(f):=z; -if s<>-1000 then - if s>=0 then z:=s - else z:=xn_over_d(z,-s,1000); -font_size(f):=z; -@z -%--------------------------------------- -@x [30] m.569 l.11041 - Omega -for k:=fmem_ptr to width_base[f]-1 do - begin store_four_quarters(font_info[k].qqqq); - if (a>=nw)or(b div @'20>=nh)or(b mod @'20>=nd)or - (c div 4>=ni) then abort; - case c mod 4 of - lig_tag: if d>=nl then abort; - ext_tag: if d>=ne then abort; - list_tag: @<Check for charlist cycle@>; - othercases do_nothing {|no_tag|} - endcases; - end -@y -if font_level=1 then begin - i:=0; - k:=ivalues_start(f); - font_counter:=ivalues_base(f); - while k<fvalues_start(f) do {IVALUE starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param; - table_size[i]:=1; - incr(i); incr(k); - end; - while k<mvalues_start(f) do {FVALUE starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param; - table_size[i]:=1; - incr(i); incr(k); - end; - while k<rules_start(f) do {MVALUE starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param; - table_size[i]:=1; - incr(i); incr(k); - end; - while k<glues_start(f) do {RULE starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param*3; - table_size[i]:=3; - incr(i); incr(k); - end; - while k<penalties_start(f) do {GLUE starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param*4; - table_size[i]:=4; - incr(i); incr(k); - end; - while k<ivalues_base(f) do {PENALTY starts} - begin - read_thirtytwo(param); - font_info(f)(k).int := font_counter; - font_counter:=font_counter+param*1; - table_size[i]:=1; - incr(i); incr(k); - end; - while k<fvalues_base(f) do {IVALUE entries} - begin - read_thirtytwo(font_info(f)(k).int); - incr(k); - end; - while k<mvalues_base(f) do {FVALUE entries} - begin - read_thirtytwo(font_info(f)(k).sc); - incr(k); - end; - while k<rules_base(f) do {MVALUE entries} - begin - read_thirtytwo(font_info(f)(k).int); - incr(k); - end; - while k<glues_base(f) do {RULE entries} - begin - store_scaled(font_info(f)(k).sc); - store_scaled(font_info(f)(k+1).sc); - store_scaled(font_info(f)(k+2).sc); - k:=k+3; - end; - while k<penalties_base(f) do {GLUE entries} - begin - fget; read_sixteen(font_info(f)(k).hh.lhfield); - fget; read_sixteen(font_info(f)(k).hh.rh); - store_scaled(font_info(f)(k+1).sc); - store_scaled(font_info(f)(k+2).sc); - store_scaled(font_info(f)(k+3).sc); - k:=k+4; - end; - while k<offset_charinfo_base do {PENALTY entries} - begin - read_thirtytwo(font_info(f)(k).int); - incr(k); - end; - end; -k:=char_base(f)+bc; -k_param:=char_attr_base(f); -bytes_per_entry:=(12 + 2*npc) div 4 * 4; -extra_char_bytes:=bytes_per_entry - (10 + 2*npc); -while k<char_attr_base(f) do begin - store_char_info(font_info(f)(k).qqqq); - if (a>=nw)or((b div @"100)>=nh)or((b mod @"100)>=nd)or - ((c div @"100)>=ni) then abort; - case c mod 4 of - lig_tag: if d>=nl then abort; - ext_tag: if d>=ne then abort; - list_tag: @<Check for charlist cycle@>; - othercases do_nothing {|no_tag|} - endcases; - incr(k); - if font_level=1 then begin - fget; read_sixteen_unsigned(repeat_no); - for i:=0 to npc-1 do begin - fget; read_sixteen(param); - font_info(f)(k_param).int := - font_info(f)(ivalues_start(f)+i).int + param*table_size[i]; - incr(k_param); - end; - for i:=1 to extra_char_bytes do fget; - for i:=1 to repeat_no do begin - font_info(f)(k):=font_info(f)(k-1); - incr(k); - for table_counter:=0 to npc-1 do begin - font_info(f)(k_param).int := font_info(f)(k_param-npc).int; - incr(k_param); - end; - end; - end; - end -@z -%--------------------------------------- -@x [30] m.570 l.11059 - Omega -@d current_character_being_worked_on==k+bc-fmem_ptr -@y -@d current_character_being_worked_on==k-char_base(f) -@z -%--------------------------------------- -@x [30] m.570 l.11065 - Omega - begin qw:=char_info(f)(d); - {N.B.: not |qi(d)|, since |char_base[f]| hasn't been adjusted yet} -@y - begin qw:=char_info(f)(d); - {N.B.: not |qi(d)|, since |char_base(f)| hasn't been adjusted yet} -@z -%--------------------------------------- -@x [30] m.571 l.11098 - Omega -for k:=width_base[f] to lig_kern_base[f]-1 do - store_scaled(font_info[k].sc); -if font_info[width_base[f]].sc<>0 then abort; {\\{width}[0] must be zero} -if font_info[height_base[f]].sc<>0 then abort; {\\{height}[0] must be zero} -if font_info[depth_base[f]].sc<>0 then abort; {\\{depth}[0] must be zero} -if font_info[italic_base[f]].sc<>0 then abort; {\\{italic}[0] must be zero} -@y -for k:=width_base(f) to lig_kern_base(f)-1 do - store_scaled(font_info(f)(k).sc); -if font_info(f)(width_base(f)).sc<>0 then abort; {\\{width}[0] must be zero} -if font_info(f)(height_base(f)).sc<>0 then abort; {\\{height}[0] must be zero} -if font_info(f)(depth_base(f)).sc<>0 then abort; {\\{depth}[0] must be zero} -if font_info(f)(italic_base(f)).sc<>0 then abort; {\\{italic}[0] must be zero} -@z -%--------------------------------------- -@x [30] m.573 l.11114 - Omega -@ @d check_existence(#)==@t@>@;@/ - begin check_byte_range(#); - qw:=char_info(f)(#); {N.B.: not |qi(#)|} - if not char_exists(qw) then abort; - end - -@<Read ligature/kern program@>= -bch_label:=@'77777; bchar:=256; -if nl>0 then - begin for k:=lig_kern_base[f] to kern_base[f]+kern_base_offset-1 do - begin store_four_quarters(font_info[k].qqqq); - 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; - if a=255 then bch_label:=256*c+d; - end; -for k:=kern_base[f]+kern_base_offset to exten_base[f]-1 do - store_scaled(font_info[k].sc); -@y -@ @d check_existence(#)==@t@>@;@/ - begin check_byte_range(#); - qw:=char_info(f)(#+font_offset(f)); {N.B.: not |qi(#)|} - if not char_exists(qw) then abort; - end - -@<Read ligature/kern program@>= -bch_label:=nl {infinity}; bchar:=too_big_char; -if nl>0 then - begin for k:=lig_kern_base(f) to kern_base(f)+kern_base_offset-1 do - begin store_four_quarters(font_info(f)(k).qqqq); - 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; - if a=255 then bch_label:=256*c+d; - end; -for k:=kern_base(f)+kern_base_offset to exten_base(f)-1 do - store_scaled(font_info(f)(k).sc); -@z -%--------------------------------------- -@x [30] m.574 l.11141 - Omega -for k:=exten_base[f] to param_base[f]-1 do - begin store_four_quarters(font_info[k].qqqq); -@y -for k:=exten_base(f) to param_base(f)-1 do - begin store_four_quarters(font_info(f)(k).qqqq); -@z -%--------------------------------------- -@x [30] m.575 l.11157 - Omega - fget; font_info[param_base[f]].sc:= - (sw*@'20)+(fbyte div@'20); - end - else store_scaled(font_info[param_base[f]+k-1].sc); -if eof(tfm_file) then abort; -for k:=np+1 to 7 do font_info[param_base[f]+k-1].sc:=0; -@y - fget; font_info(f)(param_base(f)).sc:= - (sw*@'20)+(fbyte div@'20); - end - else store_scaled(font_info(f)(param_base(f)+k-1).sc); -if eof(tfm_file) then abort; -for k:=np+1 to 7 do font_info(f)(param_base(f)+k-1).sc:=0; -@z -%--------------------------------------- -@x [30] m.576 l.11169 - Omega -@d adjust(#)==#[f]:=qo(#[f]) - {correct for the excess |min_quarterword| that was added} - -@<Make final adjustments...@>= -if np>=7 then font_params[f]:=np@+else font_params[f]:=7; -hyphen_char[f]:=default_hyphen_char; skew_char[f]:=default_skew_char; -if bch_label<nl then bchar_label[f]:=bch_label+lig_kern_base[f] -else bchar_label[f]:=non_address; -font_bchar[f]:=qi(bchar); -font_false_bchar[f]:=qi(bchar); -if bchar<=ec then if bchar>=bc then - begin qw:=char_info(f)(bchar); {N.B.: not |qi(bchar)|} - if char_exists(qw) then font_false_bchar[f]:=non_char; - end; -font_name[f]:=nom; -font_area[f]:=aire; -font_bc[f]:=bc; font_ec[f]:=ec; font_glue[f]:=null; -adjust(char_base); adjust(width_base); adjust(lig_kern_base); -adjust(kern_base); adjust(exten_base); -decr(param_base[f]); -fmem_ptr:=fmem_ptr+lf; font_ptr:=f; g:=f; goto done -@y -@d adjust(#)==#(f):=qo(#(f)) - {correct for the excess |min_quarterword| that was added} - -@<Make final adjustments...@>= -if np>=7 then font_params(f):=np@+else font_params(f):=7; -font_offset(f):=offset; -hyphen_char(f):=default_hyphen_char+offset; -skew_char(f):=default_skew_char+offset; -bchar:=bchar+offset; -if bch_label<nl then bchar_label(f):=bch_label+lig_kern_base(f) -else bchar_label(f):=non_address; -font_bchar(f):=qi(bchar); -font_false_bchar(f):=qi(bchar); -if bchar<=ec then if bchar>=bc then - begin qw:=char_info(f)(bchar); {N.B.: not |qi(bchar)|} - if char_exists(qw) then font_false_bchar(f):=non_char; - end; -font_name(f):=nom; -font_area(f):=aire; -font_bc(f):=bc; font_ec(f):=ec; font_glue(f):=null; -font_bc(f):=bc+offset; font_ec(f):=ec+offset; font_glue(f):=null; -adjust(char_base); adjust(width_base); adjust(lig_kern_base); -adjust(kern_base); adjust(exten_base); -decr(param_base(f)); -font_ptr:=f; g:=f; goto done -@z -%--------------------------------------- -@x [30] m.577 l.11202 - Omega - begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val); -@y - begin m:=cur_chr; scan_big_four_bit_int; f:=equiv(m+cur_val); -@z -%--------------------------------------- -@x [30] m.578 l.11223 - Omega -if n<=0 then cur_val:=fmem_ptr -else begin if writing and(n<=space_shrink_code)and@| - (n>=space_code)and(font_glue[f]<>null) then - begin delete_glue_ref(font_glue[f]); - font_glue[f]:=null; - end; - if n>font_params[f] then - if f<font_ptr then cur_val:=fmem_ptr - else @<Increase the number of parameters in the last font@> - else cur_val:=n+param_base[f]; - end; -@<Issue an error message if |cur_val=fmem_ptr|@>; -end; -@y -dimen_font:=f; -if n<=0 then cur_val:=font_file_size(f) -else begin if writing and(n<=space_shrink_code)and@| - (n>=space_code)and(font_glue(f)<>null) then - begin delete_glue_ref(font_glue(f)); - font_glue(f):=null; - end; - if n>font_params(f) then - if f<font_ptr then cur_val:=font_file_size(f) - else @<Increase the number of parameters in the last font@> - else cur_val:=n+param_base(f); - end; -@<Issue an error message if |cur_val=font_file_size(f)|@>; -end; -@z -%--------------------------------------- -@x [30] m.579 l.11240 - Omega -@ @<Issue an error message if |cur_val=fmem_ptr|@>= -if cur_val=fmem_ptr then - begin print_err("Font "); print_esc(font_id_text(f)); - print(" has only "); print_int(font_params[f]); - print(" fontdimen parameters"); -@.Font x has only...@> - help2("To increase the number of font parameters, you must")@/ - ("use \fontdimen immediately after the \font is loaded."); - error; - end -@y -@ @<Issue an error message if |cur_val=font_file_size(f)|@>= -if cur_val=font_file_size(f) then - begin print_err("Font "); print_esc(font_id_text(f)); - print(" has only "); print_int(font_params(f)); - print(" fontdimen parameters"); -@.Font x has only...@> - help2("To increase the number of font parameters, you must")@/ - ("use \fontdimen immediately after the \font is loaded."); - error; - end -@z -%--------------------------------------- -@x [30] m.580 l.11252 - font parameters -@ @<Increase the number of parameters...@>= -begin repeat if fmem_ptr=font_mem_size then - overflow("font memory",font_mem_size); -@:TeX capacity exceeded font memory}{\quad font memory@> -font_info[fmem_ptr].sc:=0; incr(fmem_ptr); incr(font_params[f]); -until n=font_params[f]; -cur_val:=fmem_ptr-1; {this equals |param_base[f]+font_params[f]|} -@y -@ @<Increase the number of parameters...@>= -begin if n+font_params(f)>font_file_size(f) then - begin print_nl("Out of font parameter space"); succumb; end; -repeat -font_info(f)(param_base(f)+font_params(f)).sc:=0; incr(font_params(f)); -until n=font_params(f); -cur_val:=param_base(f)+font_params(f); -@z -%--------------------------------------- -@x [30] m.581 l.11268 - font parameters - slow_print(font_name[f]); print_char("!"); end_diagnostic(false); -@y - slow_print(font_name(f)); print_char("!"); end_diagnostic(false); -@z -%--------------------------------------- -@x [30] m.582 l.11276 - font parameters -begin if font_bc[f]<=c then if font_ec[f]>=c then -@y -begin if font_bc(f)<=c then if font_ec(f)>=c then -@z -%--------------------------------------- -@x [32] m.592 l.11820 - Omega -@!c,@!f:quarterword; {character and font in current |char_node|} -@y -@!c,@!f:quarterword; {character and font in current |char_node|} -@!oval,@!ocmd:integer; {used by |out_cmd| for generating - |set|, |fnt| and |fnt_def| commands} -@z -%--------------------------------------- -@x [32] m.602 l.11939 - Omega -@ Here's a procedure that outputs a font definition. Since \TeX82 uses at -most 256 different fonts per job, |fnt_def1| is always used as the command code. -@y -@ Here's a procedure that outputs a font definition. $\Omega$ allows -more than 256 different fonts per job, so the right font definition -command must be selected. - -@d Incr_Decr(#) == # -@d Incr(#) == #:=#+Incr_Decr {increase a variable} -@d Decr(#) == #:=#-Incr_Decr {decrease a variable} - -@d dvi_debug_out(#)==begin -dvi_out(#); -end - -@d out_cmd == -begin -if (oval<@"100)and(oval>=0) then begin - if (ocmd<>set1)or(oval>127) then - if (ocmd=fnt1)and(oval<64) then Incr(oval)(fnt_num_0) @+ else dvi_debug_out(ocmd); - end -else - begin if (oval<@"10000)and(oval>=0) then dvi_debug_out(ocmd+1) @+ else @; - begin if (oval<@"1000000)and(oval>=0) then dvi_debug_out(ocmd+2) @+ else @; - begin dvi_debug_out(ocmd+3); - if oval>=0 then dvi_debug_out(oval div @"1000000) - else begin Incr(oval)(@"40000000); Incr(oval)(@"40000000); - dvi_debug_out((oval div @"1000000) + 128); oval:=oval mod @"1000000; - end; - dvi_debug_out(oval div @"10000); oval:=oval mod @"10000; - end; - dvi_debug_out(oval div @"10000); oval:=oval mod @"10000; - end; - dvi_debug_out(oval div @"100); oval:=oval mod @"100; - end; -dvi_debug_out(oval) -end - -@z -%--------------------------------------- -@x [32] m.602 l.11944 - Omega -begin dvi_out(fnt_def1); -dvi_out(f-font_base-1);@/ -dvi_out(qo(font_check[f].b0)); -dvi_out(qo(font_check[f].b1)); -dvi_out(qo(font_check[f].b2)); -dvi_out(qo(font_check[f].b3));@/ -dvi_four(font_size[f]); -dvi_four(font_dsize[f]);@/ -dvi_out(length(font_area[f])); -dvi_out(length(font_name[f])); -@y -begin -oval:=f-font_base-1; ocmd:= fnt_def1; out_cmd;@/ -dvi_out(qo(font_check_0(f))); -dvi_out(qo(font_check_1(f))); -dvi_out(qo(font_check_2(f))); -dvi_out(qo(font_check_3(f)));@/ -dvi_four(font_size(f)); -dvi_four(font_dsize(f));@/ -dvi_out(length(font_area(f))); -dvi_out(length(font_name(f))); -@z -%--------------------------------------- -@x [32] m.603 l.11958 - Omega -for k:=str_start[font_area[f]] to str_start[font_area[f]+1]-1 do - dvi_out(so(str_pool[k])); -for k:=str_start[font_name[f]] to str_start[font_name[f]+1]-1 do - dvi_out(so(str_pool[k])) -@y -for k:=str_start(font_area(f)) to str_start(font_area(f)+1)-1 do - dvi_out(so(str_pool[k])); -for k:=str_start(font_name(f)) to str_start(font_name(f)+1)-1 do - dvi_out(so(str_pool[k])) -@z -%--------------------------------------- -@x [32] m.620 l.12334 - Omega - if c>=qi(128) then dvi_out(set1); - dvi_out(qo(c));@/ -@y - oval:=c-font_offset(f); ocmd:=set1; out_cmd;@/ -@z -%--------------------------------------- -@x [32] m.621 l.12345 - Omega -begin if not font_used[f] then - begin dvi_font_def(f); font_used[f]:=true; - end; -if f<=64+font_base then dvi_out(f-font_base-1+fnt_num_0) -else begin dvi_out(fnt1); dvi_out(f-font_base-1); - end; -@y -begin if not font_used(f) then - begin dvi_font_def(f); font_used(f):=true; - end; -oval:=f-font_base-1; ocmd:=fnt1; out_cmd;@/ -@z -%--------------------------------------- -@x [32] m.643 l.12757 - Omega - begin if font_used[font_ptr] then dvi_font_def(font_ptr); -@y - begin if font_used(font_ptr) then dvi_font_def(font_ptr); -@z -%--------------------------------------- -@x [35] m.699 l.13742 - Omega -@d text_size=0 {size code for the largest size in a family} -@d script_size=16 {size code for the medium size in a family} -@d script_script_size=32 {size code for the smallest size in a family} -@y -@z -%--------------------------------------- -@x [35] m.700 l.13762 - Omega -@d mathsy_end(#)==fam_fnt(2+#)]].sc -@d mathsy(#)==font_info[#+param_base[mathsy_end -@y -@d mathsy_end(#)==sc -@d mathsy(#)==font_info(fam_fnt(2+cur_size))(#+param_base(fam_fnt(2+cur_size))).mathsy_end -@z -%--------------------------------------- -@x [35] m.701 l.13789 - Omega -@d mathex(#)==font_info[#+param_base[fam_fnt(3+cur_size)]].sc -@y -@d mathex(#)==font_info(fam_fnt(3+cur_size))(#+param_base(fam_fnt(3+cur_size))).sc -@z -%--------------------------------------- -@x [35] m.703 l.13813 - Omega -@<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>= -begin if cur_style<script_style then cur_size:=text_size -else cur_size:=16*((cur_style-text_style) div 2); -cur_mu:=x_over_n(math_quad(cur_size),18); -end -@y -@<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>= -begin if cur_style<script_style then cur_size:=text_size -else cur_size:=script_size*((cur_style-text_style) div 2); -cur_mu:=x_over_n(math_quad(cur_size),18); -end -@z -%--------------------------------------- -@x [35] m.706 l.13855 - Omega -function var_delimiter(@!d:pointer;@!s:small_number;@!v:scaled):pointer; -label found,continue; -var b:pointer; {the box that will be constructed} -@!f,@!g: internal_font_number; {best-so-far and tentative font codes} -@!c,@!x,@!y: quarterword; {best-so-far and tentative character codes} -@!m,@!n: integer; {the number of extensible pieces} -@!u: scaled; {height-plus-depth of a tentative character} -@!w: scaled; {largest height-plus-depth so far} -@!q: four_quarters; {character info} -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: small_number; {runs through font family members} -@y -function var_delimiter(@!d:pointer;@!s:integer;@!v:scaled):pointer; -label found,continue; -var b:pointer; {the box that will be constructed} -@!f,@!g: internal_font_number; {best-so-far and tentative font codes} -@!c,@!x,@!y: quarterword; {best-so-far and tentative character codes} -@!m,@!n: integer; {the number of extensible pieces} -@!u: scaled; {height-plus-depth of a tentative character} -@!w: scaled; {largest height-plus-depth so far} -@!q: four_quarters; {character info} -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: integer; {runs through font family members} -@z -%--------------------------------------- -@x [35] m.706 l.13881 - Omega -shift_amount(b):=half(height(b)-depth(b)) - axis_height(s); -@y -z:=cur_size; cur_size:=s; -shift_amount(b):=half(height(b)-depth(b)) - axis_height(cur_size); -cur_size:=z; -@z -%--------------------------------------- -@x [35] m.707 l.13889 - Omega -@<Look at the variants of |(z,x)|; set |f| and |c|...@>= -if (z<>0)or(x<>min_quarterword) then - begin z:=z+s+16; - repeat z:=z-16; g:=fam_fnt(z); - if g<>null_font then - @<Look at the list of characters starting with |x| in - font |g|; set |f| and |c| whenever - a better character is found; |goto found| as soon as a - large enough variant is encountered@>; - until z<16; - end -@y -@<Look at the variants of |(z,x)|; set |f| and |c|...@>= -if (z<>0)or(x<>min_quarterword) then - begin z:=z+s+script_size; - repeat z:=z-script_size; g:=fam_fnt(z); - if g<>null_font then - @<Look at the list of characters starting with |x| in - font |g|; set |f| and |c| whenever - a better character is found; |goto found| as soon as a - large enough variant is encountered@>; - until z<script_size; - end -@z -%--------------------------------------- -@x [35] m.708 l.13903 - Omega -if (qo(y)>=font_bc[g])and(qo(y)<=font_ec[g]) then -@y -if (qo(y)>=font_bc(g))and(qo(y)<=font_ec(g)) then -@z -%--------------------------------------- -@x [35] m.713 l.13974 - Omega -r:=font_info[exten_base[f]+rem_byte(q)].qqqq;@/ -@<Compute the minimum suitable height, |w|, and the corresponding - number of extension steps, |n|; also set |width(b)|@>; -c:=ext_bot(r); -if c<>min_quarterword then stack_into_box(b,f,c); -c:=ext_rep(r); -for m:=1 to n do stack_into_box(b,f,c); -c:=ext_mid(r); -if c<>min_quarterword then - begin stack_into_box(b,f,c); c:=ext_rep(r); - for m:=1 to n do stack_into_box(b,f,c); - end; -c:=ext_top(r); -@y -r:=font_info(f)(exten_base(f)+rem_byte(q)).qqqq;@/ -@<Compute the minimum suitable height, |w|, and the corresponding - number of extension steps, |n|; also set |width(b)|@>; -c:=ext_bot(f)(r); -if c<>min_quarterword then stack_into_box(b,f,c); -c:=ext_rep(f)(r); -for m:=1 to n do stack_into_box(b,f,c); -c:=ext_mid(f)(r); -if c<>min_quarterword then - begin stack_into_box(b,f,c); c:=ext_rep(f)(r); - for m:=1 to n do stack_into_box(b,f,c); - end; -c:=ext_top(f)(r); -@z -%--------------------------------------- -@x [35] m.714 l.13997 - Omega -c:=ext_rep(r); u:=height_plus_depth(f,c); -w:=0; q:=char_info(f)(c); width(b):=char_width(f)(q)+char_italic(f)(q);@/ -c:=ext_bot(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -c:=ext_mid(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -c:=ext_top(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -n:=0; -if u>0 then while w<v do - begin w:=w+u; incr(n); - if ext_mid(r)<>min_quarterword then w:=w+u; - end -@y -c:=ext_rep(f)(r); u:=height_plus_depth(f,c); -w:=0; q:=char_info(f)(c); width(b):=char_width(f)(q)+char_italic(f)(q);@/ -c:=ext_bot(f)(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -c:=ext_mid(f)(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -c:=ext_top(f)(r);@+if c<>min_quarterword then w:=w+height_plus_depth(f,c); -n:=0; -if u>0 then while w<v do - begin w:=w+u; incr(n); - if (ext_mid(f)(r))<>min_quarterword then w:=w+u; - end -@z -%--------------------------------------- -@x [36] m.719 l.14107 - Omega -@!cur_style:small_number; {style code at current place in the list} -@!cur_size:small_number; {size code corresponding to |cur_style|} -@y -@!cur_style:integer; {style code at current place in the list} -@!cur_size:integer; {size code corresponding to |cur_style|} -@z -%--------------------------------------- -@x [36] m.720 l.14122 - Omega -function clean_box(@!p:pointer;@!s:small_number):pointer; -label found; -var q:pointer; {beginning of a list to be boxed} -@!save_style:small_number; {|cur_style| to be restored} -@y -function clean_box(@!p:pointer;@!s:integer):pointer; -label found; -var q:pointer; {beginning of a list to be boxed} -@!save_style:integer; {|cur_style| to be restored} -@z -%--------------------------------------- -@x [36] m.722 l.14172 - Omega -else begin if (qo(cur_c)>=font_bc[cur_f])and(qo(cur_c)<=font_ec[cur_f]) then -@y -else begin if (qo(cur_c)>=font_bc(cur_f))and(qo(cur_c)<=font_ec(cur_f)) then -@z -%--------------------------------------- -@x [36] m.726 l.14228 - Omega -procedure mlist_to_hlist; -label reswitch, check_dimensions, done_with_noad, done_with_node, delete_q, - done; -var mlist:pointer; {beginning of the given list} -@!penalties:boolean; {should penalty nodes be inserted?} -@!style:small_number; {the given style} -@!save_style:small_number; {holds |cur_style| during recursion} -@!q:pointer; {runs through the mlist} -@!r:pointer; {the most recent noad preceding |q|} -@!r_type:small_number; {the |type| of noad |r|, or |op_noad| if |r=null|} -@!t:small_number; {the effective |type| of noad |q| during the second pass} -@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} -@!pen:integer; {a penalty to be inserted} -@!s:small_number; {the size of a noad to be deleted} -@y -procedure mlist_to_hlist; -label reswitch, check_dimensions, done_with_noad, done_with_node, delete_q, - done; -var mlist:pointer; {beginning of the given list} -@!penalties:boolean; {should penalty nodes be inserted?} -@!style:integer; {the given style} -@!save_style:integer; {holds |cur_style| during recursion} -@!q:pointer; {runs through the mlist} -@!r:pointer; {the most recent noad preceding |q|} -@!r_type:integer; {the |type| of noad |r|, or |op_noad| if |r=null|} -@!t:integer; {the effective |type| of noad |q| during the second pass} -@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} -@!pen:integer; {a penalty to be inserted} -@!s:integer; {the size of a noad to be deleted} -@z -%--------------------------------------- -@x [36] m.741 l.14495 - Omega -if math_type(nucleus(q))=math_char then - begin fetch(nucleus(q)); - if char_tag(cur_i)=lig_tag then - begin a:=lig_kern_start(cur_f)(cur_i); - 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 qo(next_char(cur_i))=skew_char[cur_f] then - begin if op_byte(cur_i)>=kern_flag then - if skip_byte(cur_i)<=stop_flag then s:=char_kern(cur_f)(cur_i); - goto done1; - end; - if skip_byte(cur_i)>=stop_flag then goto done1; - a:=a+qo(skip_byte(cur_i))+1; - cur_i:=font_info[a].qqqq; - end; - end; - end; -done1: -@y -if math_type(nucleus(q))=math_char then - begin fetch(nucleus(q)); - if char_tag(cur_i)=lig_tag then - begin a:=lig_kern_start(cur_f)(cur_i); - cur_i:=font_info(cur_f)(a).qqqq; - if skip_byte(cur_i)>stop_flag then - begin a:=lig_kern_restart(cur_f)(cur_i); - cur_i:=font_info(cur_f)(a).qqqq; - end; - loop@+ begin if qo((next_char(cur_f)(cur_i)))=skew_char(cur_f) then - begin if op_byte(cur_i)>=kern_flag then - if skip_byte(cur_i)<=stop_flag then s:=char_kern(cur_f)(cur_i); - goto done1; - end; - if skip_byte(cur_i)>=stop_flag then goto done1; - a:=a+qo(skip_byte(cur_i))+1; - cur_i:=font_info(cur_f)(a).qqqq; - end; - end; - end; -done1: -@z -%--------------------------------------- -@x [36] m.752 l.14722 - Omega - 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; -@y - cur_i:=font_info(cur_f)(a).qqqq; - if skip_byte(cur_i)>stop_flag then - begin a:=lig_kern_restart(cur_f)(cur_i); - cur_i:=font_info(cur_f)(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(cur_f)(a).qqqq; -@z -%--------------------------------------- -@x [36] m.753 l.14751 - Omega -if next_char(cur_i)=cur_c then if skip_byte(cur_i)<=stop_flag then -@y -if (next_char(cur_f)(cur_i))=cur_c then if skip_byte(cur_i)<=stop_flag then -@z -%--------------------------------------- -@x [36] m.756 l.14833 - Omega -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:small_number; {subsidiary size code} -begin p:=new_hlist(q); -if is_char_node(p) then - begin shift_up:=0; shift_down:=0; - end -else begin z:=hpack(p,natural); - if cur_style<script_style then t:=script_size@+else t:=script_script_size; - shift_up:=height(z)-sup_drop(t); - shift_down:=depth(z)+sub_drop(t); -@y -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:integer; {subsidiary size code} -begin p:=new_hlist(q); -if is_char_node(p) then - begin shift_up:=0; shift_down:=0; - end -else begin z:=hpack(p,natural); - t:=cur_size; - if cur_style<script_style - then cur_size:=script_size@+else cur_size:=script_script_size; - shift_up:=height(z)-sup_drop(cur_size); - shift_down:=depth(z)+sub_drop(cur_size); - cur_size:=t; -@z -%--------------------------------------- -@x [36] m.762 l.14967 - Omega -function make_left_right(@!q:pointer;@!style:small_number; - @!max_d,@!max_h:scaled):small_number; -var delta,@!delta1,@!delta2:scaled; {dimensions used in the calculation} -begin if style<script_style then cur_size:=text_size -else cur_size:=16*((style-text_style) div 2); -@y -function make_left_right(@!q:pointer;@!style:integer; - @!max_d,@!max_h:scaled):integer; -var delta,@!delta1,@!delta2:scaled; {dimensions used in the calculation} -begin if style<script_style then cur_size:=text_size -else cur_size:=script_size*((style-text_style) div 2); -@z -%--------------------------------------- -@x [40] m.896 l.17534 - Omega -done2: hyf_char:=hyphen_char[hf]; -@y -done2: hyf_char:=hyphen_char(hf); -@z -%--------------------------------------- -@x [40] m.897 l.17555 - Omega - hyf_bchar:=font_bchar[hf]; -@y - hyf_bchar:=font_bchar(hf); -@z -%--------------------------------------- -@x [40] m.898 l.17578 - Omega -if odd(subtype(s)) then hyf_bchar:=font_bchar[hf]@+else hyf_bchar:=non_char; -@y -if odd(subtype(s)) then hyf_bchar:=font_bchar(hf)@+else hyf_bchar:=non_char; -@z -%--------------------------------------- -@x [41] m.909 l.17800 - Omega - begin k:=bchar_label[hf]; - if k=non_address then goto done@+else q:=font_info[k].qqqq; - end -else begin q:=char_info(hf)(cur_l); - if char_tag(q)<>lig_tag then goto done; - k:=lig_kern_start(hf)(q); q:=font_info[k].qqqq; - if skip_byte(q)>stop_flag then - begin k:=lig_kern_restart(hf)(q); q:=font_info[k].qqqq; -@y - begin k:=bchar_label(hf); - if k=non_address then goto done@+else q:=font_info(hf)(k).qqqq; - end -else begin q:=char_info(hf)(cur_l); - if char_tag(q)<>lig_tag then goto done; - k:=lig_kern_start(hf)(q); q:=font_info(hf)(k).qqqq; - if skip_byte(q)>stop_flag then - begin k:=lig_kern_restart(hf)(q); q:=font_info(hf)(k).qqqq; -@z -%--------------------------------------- -@x [41] m.909 l.17811 - Omega -loop@+begin if next_char(q)=test_char then if skip_byte(q)<=stop_flag then -@y -loop@+begin if (next_char(hf)(q))=test_char then if skip_byte(q)<=stop_flag then -@z -%--------------------------------------- -@x [41] m.909 l.17829 - Omega - k:=k+qo(skip_byte(q))+1; q:=font_info[k].qqqq; -@y - k:=k+qo(skip_byte(q))+1; q:=font_info(hf)(k).qqqq; -@z -%--------------------------------------- -@x [41] m.915 l.17963 - Omega - begin l:=reconstitute(l,i,font_bchar[hf],non_char)+1; -@y - begin l:=reconstitute(l,i,font_bchar(hf),non_char)+1; -@z -%--------------------------------------- -@x [41] m.916 l.17980 - Omega -if bchar_label[hf]<>non_address then {put left boundary at beginning of new line} -@y -if bchar_label(hf)<>non_address then {put left boundary at beginning of new line} -@z -%--------------------------------------- -@x [46] m.1030 l.19987 - Omega -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 -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; -hmode+char_ghost: begin t:=cur_chr; get_x_token; - if (cur_cmd=letter)or(cur_cmd=other_char)or(cur_cmd=char_given)or - (cur_cmd=char_num) then begin - if t=0 then new_left_ghost:=true - else new_right_ghost:=true; - end; - goto reswitch; - end; -@z -%--------------------------------------- -@x [46] m.1032 l.20030 - Omega - |font_bchar[cur_font]|,&otherwise;\cr}$$ -except when |character(lig_stack)=font_false_bchar[cur_font]|. -@y - |font_bchar(cur_font)|,&otherwise;\cr}$$ -except when |character(lig_stack)=font_false_bchar(cur_font)|. -@z -%--------------------------------------- -@x [46] m.1032 -@!cancel_boundary:boolean; {should the left boundary be ignored?} -@!ins_disc:boolean; {should we insert a discretionary node?} -@y -@!cancel_boundary:boolean; {should the left boundary be ignored?} -@!left_ghost:boolean; {character left of cursor is a left ghost} -@!right_ghost:boolean; {character left of cursor is a right ghost} -@!new_left_ghost:boolean; {character right of cursor is a left ghost} -@!new_right_ghost:boolean; {character right of cursor is a right ghost} -@!ins_disc:boolean; {should we insert a discretionary node?} -@!k_glue:integer; -@!font_glue_spec:pointer; -@z -%--------------------------------------- -@x [46] m.1033 -ligature_present:=false; cancel_boundary:=false; lft_hit:=false; rt_hit:=false; -@y -ligature_present:=false; cancel_boundary:=false; lft_hit:=false; rt_hit:=false; -left_ghost:=false; right_ghost:=false; -new_left_ghost:=false; new_right_ghost:=false; -@z -%--------------------------------------- -@x [46] m.1034 l.20075 - Omega -adjust_space_factor;@/ -main_f:=cur_font; -bchar:=font_bchar[main_f]; false_bchar:=font_false_bchar[main_f]; -if mode>0 then if language<>clang then fix_language; -fast_get_avail(lig_stack); font(lig_stack):=main_f; cur_l:=qi(cur_chr); -character(lig_stack):=cur_l;@/ -cur_q:=tail; -if cancel_boundary then - begin cancel_boundary:=false; main_k:=non_address; - end -else main_k:=bchar_label[main_f]; -if main_k=non_address then goto main_loop_move+2; {no left boundary processing} -cur_r:=cur_l; cur_l:=non_char; -goto main_lig_loop+1; {begin with cursor after left boundary} -@y -adjust_space_factor;@/ -main_f:=cur_font; -bchar:=font_bchar(main_f); false_bchar:=font_false_bchar(main_f); -if mode>0 then if language<>clang then fix_language; -fast_get_avail(lig_stack); font(lig_stack):=main_f; cur_l:=qi(cur_chr); -character(lig_stack):=cur_l;@/ -cur_q:=tail; -if cancel_boundary then - begin cancel_boundary:=false; main_k:=non_address; - left_ghost:=new_left_ghost; right_ghost:=new_right_ghost; - new_left_ghost:=false; new_right_ghost:=false; - end -else main_k:=bchar_label(main_f); -if main_k=non_address then goto main_loop_move+2; {no left boundary processing} -cur_r:=cur_l; cur_l:=non_char; -if not new_right_ghost then - goto main_lig_loop+1; {begin with cursor after left boundary} -@z -%--------------------------------------- -@x [46] m.1035 l.20122 - Omega - begin if link(cur_q)>null then - if character(tail)=qi(hyphen_char[main_f]) then ins_disc:=true; -@y - begin if link(cur_q)>null then - if character(tail)=qi(hyphen_char(main_f)) then ins_disc:=true; -@z -%--------------------------------------- -@x [46] m.1036 l.20135 - Omega -if lig_stack=null then goto reswitch; -cur_q:=tail; cur_l:=character(lig_stack); -main_loop_move+1:if not is_char_node(lig_stack) then goto main_loop_move_lig; -main_loop_move+2:if(cur_chr<font_bc[main_f])or(cur_chr>font_ec[main_f]) then - begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; - end; -main_i:=char_info(main_f)(cur_l); -if not char_exists(main_i) then - begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; - end; -link(tail):=lig_stack; tail:=lig_stack {|main_loop_lookahead| is next} -@y -if lig_stack=null then goto reswitch; -cur_q:=tail; cur_l:=character(lig_stack); -main_loop_move+1:if not is_char_node(lig_stack) then goto main_loop_move_lig; -main_loop_move+2: -left_ghost:=new_left_ghost; right_ghost:=new_right_ghost; -new_left_ghost:=false; new_right_ghost:=false; -if(cur_chr<font_bc(main_f))or(cur_chr>font_ec(main_f)) then - begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; - end; -main_i:=char_info(main_f)(cur_l); -if not char_exists(main_i) then - begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; - end; -if not (left_ghost or right_ghost) then - tail_append(lig_stack) {|main_loop_lookahead| is next} -@z -%--------------------------------------- -@x [46] m.1038 l.20177 - Omega -if cur_cmd=no_boundary then bchar:=non_char; -@y -if cur_cmd=char_ghost then begin t:=cur_chr; get_x_token; - if (cur_cmd=letter)or(cur_cmd=other_char)or(cur_cmd=char_given)or - (cur_cmd=char_num) then begin - if t=0 then new_left_ghost:=true - else new_right_ghost:=true; - back_input; - goto main_loop_lookahead; - end; - end; -if cur_cmd=no_boundary then bchar:=non_char; -@z -%--------------------------------------- -@x [46] m.1039 l.20193 - Omega -@<If there's a ligature/kern command...@>= -if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; -if cur_r=non_char then goto main_loop_wrapup; -main_k:=lig_kern_start(main_f)(main_i); main_j:=font_info[main_k].qqqq; -if skip_byte(main_j)<=stop_flag then goto main_lig_loop+2; -main_k:=lig_kern_restart(main_f)(main_j); -main_lig_loop+1:main_j:=font_info[main_k].qqqq; -main_lig_loop+2:if next_char(main_j)=cur_r then - if skip_byte(main_j)<=stop_flag then - @<Do ligature or kern command, returning to |main_lig_loop| - or |main_loop_wrapup| or |main_loop_move|@>; -if skip_byte(main_j)=qi(0) then incr(main_k) -else begin if skip_byte(main_j)>=stop_flag then goto main_loop_wrapup; - main_k:=main_k+qo(skip_byte(main_j))+1; - end; -goto main_lig_loop+1 -@y -@<If there's a ligature/kern command...@>= -if new_right_ghost or left_ghost then goto main_loop_wrapup; -if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; -main_k:=lig_kern_start(main_f)(main_i); -main_j:=font_info(main_f)(main_k).qqqq; -if skip_byte(main_j)<=stop_flag then goto main_lig_loop+2; -main_k:=lig_kern_restart(main_f)(main_j); -main_lig_loop+1: main_j:=font_info(main_f)(main_k).qqqq; -main_lig_loop+2:if top_skip_byte(main_j)=0 then begin - if next_char(main_f)(main_j)=cur_r then - if skip_byte(main_j)<=stop_flag then - @<Do ligature or kern command, returning to |main_lig_loop| - or |main_loop_wrapup| or |main_loop_move|@>; - end - else begin - if (font_bc(main_f)<=cur_r) then - if (font_ec(main_f)>=cur_r) then - if (char_exists(char_info(main_f)(cur_r))) then - if cur_r<>bchar then - if next_char(main_f)(main_j)= - attr_zero_char_ivalue(main_f)(cur_r) then - @<Do glue or penalty command@>; - end; -if skip_byte(main_j)=qi(0) then incr(main_k) -else begin if skip_byte(main_j)>=stop_flag then goto main_loop_wrapup; - main_k:=main_k+qo(skip_byte(main_j))+1; - end; -goto main_lig_loop+1 - -@ There are currently three commands. Command 17 will add a penalty -node between the two characters. Command 18 will add a glue -node between the two characters. Command 19 will add a penalty node, -then a glue node between the two characters. Command 20 -will add a kern nore between the two characters. - -@<Do glue or penalty command@>= -begin -if new_left_ghost or right_ghost then goto main_loop_wrapup; -case op_byte(main_j) of - qi(20): begin wrapup(rt_hit); - tail_append(new_kern(attr_zero_kern(main_f)(rem_byte(main_j)))); - end; - qi(18): begin wrapup(rt_hit); - k_glue:=glues_base(main_f) + (rem_byte(main_j)*4); - font_glue_spec:=new_spec(zero_glue); - width(font_glue_spec):= font_info(main_f)(k_glue+1).sc; - stretch(font_glue_spec):=font_info(main_f)(k_glue+2).sc; - shrink(font_glue_spec):=font_info(main_f)(k_glue+3).sc; - tail_append(new_glue(font_glue_spec)); - end; - qi(19): begin wrapup(rt_hit); - tail_append(new_penalty(attr_zero_penalty(main_f)(rem_top_byte(main_j)))); - k_glue:=glues_base(main_f) + (rem_bot_byte(main_j)*4); - font_glue_spec:=new_spec(zero_glue); - width(font_glue_spec):= font_info(main_f)(k_glue+1).sc; - stretch(font_glue_spec):=font_info(main_f)(k_glue+2).sc; - shrink(font_glue_spec):=font_info(main_f)(k_glue+3).sc; - tail_append(new_glue(font_glue_spec)); - end; - qi(17): begin wrapup(rt_hit); - tail_append(new_penalty(attr_zero_penalty(main_f)(rem_byte(main_j)))); - end; - end; -goto main_loop_move; -end -@z -%--------------------------------------- -@x [46] m.1040 l.20219 - Omega -begin if op_byte(main_j)>=kern_flag then - begin wrapup(rt_hit); - tail_append(new_kern(char_kern(main_f)(main_j))); goto main_loop_move; - end; -if cur_l=non_char then lft_hit:=true -else if lig_stack=null then rt_hit:=true; -check_interrupt; {allow a way out in case there's an infinite ligature loop} -case op_byte(main_j) of -qi(1),qi(5):begin cur_l:=rem_byte(main_j); {\.{=:\?}, \.{=:\?>}} - main_i:=char_info(main_f)(cur_l); ligature_present:=true; - end; -qi(2),qi(6):begin cur_r:=rem_byte(main_j); {\.{\?=:}, \.{\?=:>}} - if lig_stack=null then {right boundary character is being consumed} - begin lig_stack:=new_lig_item(cur_r); bchar:=non_char; - end - else if is_char_node(lig_stack) then {|link(lig_stack)=null|} - begin main_p:=lig_stack; lig_stack:=new_lig_item(cur_r); - lig_ptr(lig_stack):=main_p; - end - else character(lig_stack):=cur_r; - end; -qi(3):begin cur_r:=rem_byte(main_j); {\.{\?=:\?}} - main_p:=lig_stack; lig_stack:=new_lig_item(cur_r); - link(lig_stack):=main_p; - end; -qi(7),qi(11):begin wrapup(false); {\.{\?=:\?>}, \.{\?=:\?>>}} - cur_q:=tail; cur_l:=rem_byte(main_j); - main_i:=char_info(main_f)(cur_l); ligature_present:=true; - end; -othercases begin cur_l:=rem_byte(main_j); ligature_present:=true; {\.{=:}} - if lig_stack=null then goto main_loop_wrapup - else goto main_loop_move+1; - end -endcases; -if op_byte(main_j)>qi(4) then - if op_byte(main_j)<>qi(7) then goto main_loop_wrapup; -if cur_l<non_char then goto main_lig_loop; -main_k:=bchar_label[main_f]; goto main_lig_loop+1; -end -@y -begin if op_byte(main_j)>=kern_flag then - begin wrapup(rt_hit); - tail_append(new_kern(char_kern(main_f)(main_j))); - if new_left_ghost or right_ghost then begin - subtype(tail):=explicit; - end; - goto main_loop_move; - end; -if new_left_ghost or right_ghost then goto main_loop_wrapup; -if cur_l=non_char then lft_hit:=true -else if lig_stack=null then rt_hit:=true; -check_interrupt; {allow a way out in case there's an infinite ligature loop} -case op_byte(main_j) of -qi(1),qi(5):begin cur_l:=rem_char_byte(main_f)(main_j); {\.{=:\?}, \.{=:\?>}} - main_i:=char_info(main_f)(cur_l); ligature_present:=true; - end; -qi(2),qi(6):begin cur_r:=rem_char_byte(main_f)(main_j); {\.{\?=:}, \.{\?=:>}} - if lig_stack=null then {right boundary character is being consumed} - begin lig_stack:=new_lig_item(cur_r); bchar:=non_char; - end - else if is_char_node(lig_stack) then {|link(lig_stack)=null|} - begin main_p:=lig_stack; lig_stack:=new_lig_item(cur_r); - lig_ptr(lig_stack):=main_p; - end - else character(lig_stack):=cur_r; - end; -qi(3):begin cur_r:=rem_char_byte(main_f)(main_j); {\.{\?=:\?}} - main_p:=lig_stack; lig_stack:=new_lig_item(cur_r); - link(lig_stack):=main_p; - end; -qi(7),qi(11):begin wrapup(false); {\.{\?=:\?>}, \.{\?=:\?>>}} - cur_q:=tail; cur_l:=rem_char_byte(main_f)(main_j); - main_i:=char_info(main_f)(cur_l); ligature_present:=true; - end; -othercases begin cur_l:=rem_char_byte(main_f)(main_j); - ligature_present:=true; {\.{=:}} - if lig_stack=null then goto main_loop_wrapup - else goto main_loop_move+1; - end -endcases; -if op_byte(main_j)>qi(4) then - if op_byte(main_j)<>qi(7) then goto main_loop_wrapup; -if cur_l<non_char then goto main_lig_loop; -main_k:=bchar_label(main_f); goto main_lig_loop+1; -end -@z -%--------------------------------------- -@x [46] m.1042 l.20285 - Omega -begin main_p:=font_glue[cur_font]; -if main_p=null then - begin main_p:=new_spec(zero_glue); main_k:=param_base[cur_font]+space_code; - width(main_p):=font_info[main_k].sc; {that's |space(cur_font)|} - stretch(main_p):=font_info[main_k+1].sc; {and |space_stretch(cur_font)|} - shrink(main_p):=font_info[main_k+2].sc; {and |space_shrink(cur_font)|} - font_glue[cur_font]:=main_p; -@y -begin main_p:=font_glue(cur_font); -if main_p=null then - begin main_p:=new_spec(zero_glue); main_k:=param_base(cur_font)+space_code; - width(main_p):=font_info(cur_font)(main_k).sc; {that's |space(cur_font)|} - stretch(main_p):=font_info(cur_font)(main_k+1).sc; - {and |space_stretch(cur_font)|} - shrink(main_p):=font_info(cur_font)(main_k+2).sc; - {and |space_shrink(cur_font)|} - font_glue(cur_font):=main_p; -@z -%--------------------------------------- -@x [47] m.1090 -vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given, -@y -vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given, -vmode+char_ghost, -@z -%--------------------------------------- -@x [48] m.1117 l.21343 - Omega - begin c:=hyphen_char[cur_font]; -@y - begin c:=hyphen_char(cur_font); -@z -%--------------------------------------- -@x [49] m.1195 l.22361 - Omega -if (font_params[fam_fnt(2+text_size)]<total_mathsy_params)or@| - (font_params[fam_fnt(2+script_size)]<total_mathsy_params)or@| - (font_params[fam_fnt(2+script_script_size)]<total_mathsy_params) then - begin print_err("Math formula deleted: Insufficient symbol fonts");@/ -@.Math formula deleted...@> - help3("Sorry, but I can't typeset math unless \textfont 2")@/ - ("and \scriptfont 2 and \scriptscriptfont 2 have all")@/ - ("the \fontdimen values needed in math symbol fonts."); - error; flush_math; danger:=true; - end -else if (font_params[fam_fnt(3+text_size)]<total_mathex_params)or@| - (font_params[fam_fnt(3+script_size)]<total_mathex_params)or@| - (font_params[fam_fnt(3+script_script_size)]<total_mathex_params) then -@y -if (font_params(fam_fnt(2+text_size))<total_mathsy_params)or@| - (font_params(fam_fnt(2+script_size))<total_mathsy_params)or@| - (font_params(fam_fnt(2+script_script_size))<total_mathsy_params) then - begin print_err("Math formula deleted: Insufficient symbol fonts");@/ -@.Math formula deleted...@> - help3("Sorry, but I can't typeset math unless \textfont 2")@/ - ("and \scriptfont 2 and \scriptscriptfont 2 have all")@/ - ("the \fontdimen values needed in math symbol fonts."); - error; flush_math; danger:=true; - end -else if (font_params(fam_fnt(3+text_size))<total_mathex_params)or@| - (font_params(fam_fnt(3+script_size))<total_mathex_params)or@| - (font_params(fam_fnt(3+script_script_size))<total_mathex_params) then -@z -%--------------------------------------- -@x [49] m.1253 l.23250 - Omega -assign_font_dimen: begin find_font_dimen(true); k:=cur_val; - scan_optional_equals; scan_normal_dimen; font_info[k].sc:=cur_val; - end; -assign_font_int: begin n:=cur_chr; scan_font_ident; f:=cur_val; - scan_optional_equals; scan_int; - if n=0 then hyphen_char[f]:=cur_val@+else skew_char[f]:=cur_val; -@y -assign_font_dimen: begin find_font_dimen(true); k:=cur_val; - scan_optional_equals; scan_normal_dimen; - font_info(dimen_font)(k).sc:=cur_val; - end; -assign_font_int: begin n:=cur_chr; scan_font_ident; f:=cur_val; - scan_optional_equals; scan_int; - if n=0 then hyphen_char(f):=cur_val@+else skew_char(f):=cur_val; -@z -%--------------------------------------- -@x [49] m.1257 l.23269 - Omega -@!flushable_string:str_number; {string not yet referenced} -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the font name} -@.texput@> -get_r_token; u:=cur_cs; -if u>=hash_base then t:=text(u) -@y -@!offset:integer; -@!flushable_string:str_number; {string not yet referenced} -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the font name} -@.texput@> -get_r_token; u:=cur_cs; -if u>=hash_base then t:=newtext(u) -@z -%--------------------------------------- -@x [49] m.1257 l.23290 - Omega -@<Scan the font size specification@>; -@<If this font has already been loaded, set |f| to the internal - font number and |goto common_ending|@>; -f:=read_font_info(u,cur_name,cur_area,s); -common_ending: equiv(u):=f; eqtb[font_id_base+f]:=eqtb[u]; font_id_text(f):=t; -@y -@<Scan the font size specification@>; -name_in_progress:=true; -if scan_keyword("offset") then begin - scan_int; - offset:=cur_val; - if (cur_val<0) then begin - print_err("Illegal offset has been changed to 0"); - help1("The offset must be bigger than 0."); int_error(cur_val); - offset:=0; - end - end -else offset:=0; -name_in_progress:=false; -@<If this font has already been loaded, set |f| to the internal - font number and |goto common_ending|@>; -f:=read_font_info(u,cur_name,cur_area,s,offset); -common_ending: set_equiv(u,f); -set_new_eqtb(font_id_base+f,new_eqtb(u)); settext(font_id_base+f,t); -@z -%--------------------------------------- -@x [49] m.1260 l.23333 - Omega -for f:=font_base+1 to font_ptr do - if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then - begin if cur_name=flushable_string then - begin flush_string; cur_name:=font_name[f]; - end; - if s>0 then - begin if s=font_size[f] then goto common_ending; - end - else if font_size[f]=xn_over_d(font_dsize[f],-s,1000) then - goto common_ending; - end -@y -for f:=font_base+1 to font_ptr do begin - if str_eq_str(font_name(f),cur_name) and - str_eq_str(font_area(f),cur_area) then - begin if cur_name=flushable_string then - begin flush_string; cur_name:=font_name(f); - end; - if s>0 then - begin if s=font_size(f) then goto common_ending; - end - else if font_size(f)=xn_over_d(font_dsize(f),-s,1000) then - goto common_ending; - end - end -@z -%--------------------------------------- -@x [49] m.1261 l.23345 - Omega -set_font:begin print("select font "); slow_print(font_name[chr_code]); - if font_size[chr_code]<>font_dsize[chr_code] then - begin print(" at "); print_scaled(font_size[chr_code]); -@y -set_font:begin print("select font "); slow_print(font_name(chr_code)); - if font_size(chr_code)<>font_dsize(chr_code) then - begin print(" at "); print_scaled(font_size(chr_code)); -@z -%--------------------------------------- -@x [50] m.1320 l.23983 - Omega -@ @<Dump the font information@>= -dump_int(fmem_ptr); -for k:=0 to fmem_ptr-1 do dump_wd(font_info[k]); -dump_int(font_ptr); -for k:=null_font to font_ptr do - @<Dump the array info for internal font number |k|@>; -print_ln; print_int(fmem_ptr-7); print(" words of font info for "); -print_int(font_ptr-font_base); print(" preloaded font"); -if font_ptr<>font_base+1 then print_char("s") -@y -@ @<Dump the font information@>= -dump_int(font_ptr); -for k:=null_font to font_ptr do - @<Dump the array info for internal font number |k|@>; -print_ln; print_int(font_ptr-font_base); print(" preloaded font"); -if font_ptr<>font_base+1 then print_char("s") -@z -%--------------------------------------- -@x [50] m.1321 l.23993 - Omega -@ @<Undump the font information@>= -undump_size(7)(font_mem_size)('font mem size')(fmem_ptr); -for k:=0 to fmem_ptr-1 do undump_wd(font_info[k]); -undump_size(font_base)(font_max)('font max')(font_ptr); -for k:=null_font to font_ptr do - @<Undump the array info for internal font number |k|@> -@y -@ @<Undump the font information@>= -undump_size(font_base)(font_max)('font max')(font_ptr); -for k:=null_font to font_ptr do - @<Undump the array info for internal font number |k|@> -@z -%--------------------------------------- -@x [50] m.1322 l.24000 - Omega -@ @<Dump the array info for internal font number |k|@>= -begin dump_qqqq(font_check[k]); -dump_int(font_size[k]); -dump_int(font_dsize[k]); -dump_int(font_params[k]);@/ -dump_int(hyphen_char[k]); -dump_int(skew_char[k]);@/ -dump_int(font_name[k]); -dump_int(font_area[k]);@/ -dump_int(font_bc[k]); -dump_int(font_ec[k]);@/ -dump_int(char_base[k]); -dump_int(width_base[k]); -dump_int(height_base[k]);@/ -dump_int(depth_base[k]); -dump_int(italic_base[k]); -dump_int(lig_kern_base[k]);@/ -dump_int(kern_base[k]); -dump_int(exten_base[k]); -dump_int(param_base[k]);@/ -dump_int(font_glue[k]);@/ -dump_int(bchar_label[k]); -dump_int(font_bchar[k]); -dump_int(font_false_bchar[k]);@/ -print_nl("\font"); print_esc(font_id_text(k)); print_char("="); -print_file_name(font_name[k],font_area[k],""); -if font_size[k]<>font_dsize[k] then - begin print(" at "); print_scaled(font_size[k]); print("pt"); - end; -end -@y -@ @<Dump the array info for internal font number |k|@>= -begin dump_font_table(k,param_base(k)+font_params(k)+1); -print_nl("\font"); print_esc(font_id_text(k)); print_char("="); -print_file_name(font_name(k),font_area(k),""); -if font_size(k)<>font_dsize(k) then - begin print(" at "); print_scaled(font_size(k)); print("pt"); - end; -end -@z -%--------------------------------------- -@x [50] m.1323 l.24031 - Omega -@ @<Undump the array info for internal font number |k|@>= -begin undump_qqqq(font_check[k]);@/ -undump_int(font_size[k]); -undump_int(font_dsize[k]); -undump(min_halfword)(max_halfword)(font_params[k]);@/ -undump_int(hyphen_char[k]); -undump_int(skew_char[k]);@/ -undump(0)(str_ptr)(font_name[k]); -undump(0)(str_ptr)(font_area[k]);@/ -undump(0)(255)(font_bc[k]); -undump(0)(255)(font_ec[k]);@/ -undump_int(char_base[k]); -undump_int(width_base[k]); -undump_int(height_base[k]);@/ -undump_int(depth_base[k]); -undump_int(italic_base[k]); -undump_int(lig_kern_base[k]);@/ -undump_int(kern_base[k]); -undump_int(exten_base[k]); -undump_int(param_base[k]);@/ -undump(min_halfword)(lo_mem_max)(font_glue[k]);@/ -undump(0)(fmem_ptr-1)(bchar_label[k]); -undump(min_quarterword)(non_char)(font_bchar[k]); -undump(min_quarterword)(non_char)(font_false_bchar[k]); -end -@y -@ @<Undump the array info for internal font number |k|@>= -begin undump_font_table(k);@/ -end -@z -%--------------------------------------- -@x [51] m.1334 l.24277 - Omega - wlog(' ',fmem_ptr:1,' words of font info for ', - font_ptr-font_base:1,' font'); - if font_ptr<>font_base+1 then wlog('s'); -@y - wlog(font_ptr-font_base:1,' font'); - if font_ptr<>font_base+1 then wlog('s'); -@z -%--------------------------------------- -@x [52] m.1339 l.24429 - Omega -4: print_word(eqtb[n]); -5: print_word(font_info[n]); -@y -4: print_word(new_eqtb(n)); -5: ; -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/omnode.ch b/Build/source/texk/web2c/omegadir/omnode.ch deleted file mode 100644 index bcbdbf1b9c3..00000000000 --- a/Build/source/texk/web2c/omegadir/omnode.ch +++ /dev/null @@ -1,20 +0,0 @@ -% omnode.ch: C++ - friendly Node access functions, -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. diff --git a/Build/source/texk/web2c/omegadir/omocp.ch b/Build/source/texk/web2c/omegadir/omocp.ch deleted file mode 100644 index a99cab4c100..00000000000 --- a/Build/source/texk/web2c/omegadir/omocp.ch +++ /dev/null @@ -1,1068 +0,0 @@ -% omocp.ch: Reading an OCP file -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [1] m.11 l.412 - Omega OCP - {string of length |file_name_size|; tells where the string pool appears} -@.TeXformats@> -@y - {string of length |file_name_size|; tells where the string pool appears} -@.TeXformats@> -@!ocp_maxint=@"10000000; -@z -%--------------------------------------- -@x [1] m.12 l.436 - Omega OCP -@d hyph_size=307 {another prime; the number of \.{\\hyphenation} exceptions} -@y -@d hyph_size=307 {another prime; the number of \.{\\hyphenation} exceptions} -@d ocp_base=0 {smallest internal ocp number; must not be less - than |min_quarterword|} -@d ocp_biggest=65535 {the real biggest ocp} -@d number_ocps=ocp_biggest-ocp_base+1 -@d ocp_list_base=0 {smallest internal ocp list number; must not be less - than |min_quarterword|} -@d ocp_list_biggest=65535 {the real biggest ocp list} -@d number_ocp_lists=ocp_list_biggest-ocp_list_base+1 -@d max_active_ocp_lists=65536 -@z -%--------------------------------------- -@x [15] m.209 l.4170 - Omega OCP -@d max_command=set_interaction - {the largest command code seen at |big_switch|} -@y -@d set_ocp=set_interaction+1 - {Place a translation process in the stream} -@d def_ocp=set_ocp+1 - {Define and load a translation process} -@d set_ocp_list=def_ocp+1 - {Place a list of OCPs in the stream} -@d def_ocp_list=set_ocp_list+1 - {Define a list of OCPs} -@d clear_ocp_lists=def_ocp_list+1 - {Remove all active OCP lists} -@d push_ocp_list=clear_ocp_lists+1 - {Add to the sequence of active OCP lists} -@d pop_ocp_list=push_ocp_list+1 - {Remove from the sequence of active OCP lists} -@d ocp_list_op=pop_ocp_list+1 - {Operations for building a list of OCPs} -@d ocp_trace_level=ocp_list_op+1 - {Tracing of active OCPs, either 0 or 1} -@d max_command=ocp_trace_level - {the largest command code seen at |big_switch|} -@z -%--------------------------------------- -@x [17] m.222 l.4523 - Omega OCP -@d font_id_base=frozen_null_font-font_base - {begins table of |number_fonts| permanent font identifiers} -@d undefined_control_sequence=frozen_null_font+number_fonts -@y -@d font_id_base=frozen_null_font-font_base - {begins table of |number_fonts| permanent font identifiers} -@d frozen_null_ocp=frozen_null_font+number_fonts - {permanent `\.{\\nullocp}'} -@d ocp_id_base=frozen_null_ocp-ocp_base - {begins table of |number_ocps| permanent ocp identifiers} -@d frozen_null_ocp_list=frozen_null_ocp+number_ocps - {permanent `\.{\\nullocplist}'} -@d ocp_list_id_base=frozen_null_ocp_list-ocp_list_base - {begins table of |number_ocp_lists| permanent ocp list identifiers} -@d undefined_control_sequence=frozen_null_ocp_list+number_ocp_lists -@z -%--------------------------------------- -@x -@d toks_base=local_base+10 {table of |number_regs| token list registers} -@y -@d ocp_trace_level_base=local_base+10 -@d ocp_active_number_base=ocp_trace_level_base+1 -@d ocp_active_min_ptr_base = ocp_active_number_base+1 -@d ocp_active_max_ptr_base = ocp_active_min_ptr_base+1 -@d ocp_active_base = ocp_active_max_ptr_base+1 -@d toks_base=ocp_active_base+max_active_ocp_lists - {table of |number_regs| token list registers} -@z -%--------------------------------------- -@x [17] m.232 l.4799 - Omega OCP -@d null_font==font_base -@y -@d null_font==font_base -@d null_ocp==ocp_base -@d null_ocp_list==ocp_list_base -@z -%--------------------------------------- -@x [18] m.256 l.5479 - Omega OCP -@d font_id_text(#) == newtext(font_id_base+#) {a frozen font identifier's name} -@y -@d font_id_text(#) == newtext(font_id_base+#) {a frozen font identifier's name} -@d ocp_id_text(#) == newtext(ocp_id_base+#) {a frozen ocp identifier's name} -@d ocp_list_id_text(#) == newtext(ocp_list_id_base+#) - {a frozen ocp list identifier's name} -@z -%--------------------------------------- -@x [26] m.409 l.8254 - Omega OCP -@t\4\4@>@<Declare procedures that scan font-related stuff@> -@y -@t\4\4@>@<Declare procedures that scan font-related stuff@> -@t\4\4@>@<Declare procedures that scan ocp-related stuff@> -@z -%--------------------------------------- -@x [29] m.514 l.9968 - Omega OCP -|TEX_font_area|. These system area names will, of course, vary from place -to place. -@y -|TEX_font_area|. $\Omega$'s compiled translation process files whose areas -are not given explicitly are assumed to appear in a standard system area -called |OMEGA_ocp_area|. These system area names will, of course, vary -from place to place. -@z -%--------------------------------------- -@x [29] m.514 l.9974 - Omega OCP -@d TEX_font_area=="TeXfonts:" -@.TeXfonts@> -@y -@d TEX_font_area=="TeXfonts:" -@.TeXfonts@> -@d OMEGA_ocp_area=="OmegaOCPs:" -@.OmegaOCPs@> -@z -%--------------------------------------- -@x [30] m.582 l.10379 - Omega OCP -@* \[30] Font metric data. -@y -@* \[30] Font metric data and OCPs. -@z -%--------------------------------------- -@x [30] m.??? l.10928 - Omega OCP -@ @<Read and check...@>= -@y -@ @<Read and check the font data...@>= -@z -%--------------------------------------- -@x [30] m.??? l.11010 - Omega OCP -@ @<Apologize for not loading...@>= -@y -@ @<Apologize for not loading the font...@>= -@z -%--------------------------------------- -@x [30] m.582 l.11283 - Omega OCP -char_warning(f,c); -new_character:=null; -exit:end; -@y -char_warning(f,c); -new_character:=null; -exit:end; - -@ Here we begin the \.{OCP} file handling. - -@<Glob...@>= -@!ocp_file:byte_file; - -@ So that is what \.{OCP} files hold. - -When the user defines \.{\\ocp\\f}, say, \TeX\ assigns an internal number -to the user's ocp~\.{\\f}. Adding this number to |ocp_id_base| gives the -|eqtb| location of a ``frozen'' control sequence that will always select -the ocp. - -@<Types...@>= -@!internal_ocp_number=ocp_base..ocp_biggest; -@!ocp_index=integer; - -@ Here now is the array of ocp arrays. - -@<Glob...@>= -@!ocp_ptr:internal_ocp_number; {largest internal ocp number in use} - -@ Besides the arrays just enumerated, we have two directory arrays that -make it easy to get at the individual entries in |ocp_info|. -The beginning of the info for the |j|-th state in the |i|-th ocp is at -location |ocp_info[ocp_state_base[i]+j]| and the |k|-th entry is in -location |ocp_info[ocp_info[ocp_state_base[i]+j]+k]|. -(These formulas assume that |min_quarterword| has already been -added to |i|, |j| and |k|, since $\Omega$ stores its quarterwords that way.) - -@d ocp_info_end(#)==#] -@d ocp_info(#)==ocp_tables[#,ocp_info_end -@d offset_ocp_file_size=0 -@d offset_ocp_name=1 -@d offset_ocp_area=offset_ocp_name+1 -@d offset_ocp_external=offset_ocp_area+1 -@d offset_ocp_external_arg=offset_ocp_external+1 -@d offset_ocp_input=offset_ocp_external_arg+1 -@d offset_ocp_output=offset_ocp_input+1 -@d offset_ocp_no_tables=offset_ocp_output+1 -@d offset_ocp_no_states=offset_ocp_no_tables+1 -@d offset_ocp_table_base=offset_ocp_no_states+1 -@d offset_ocp_state_base=offset_ocp_table_base+1 -@d offset_ocp_info=offset_ocp_state_base+1 -@d ocp_file_size(#)==ocp_info(#)(offset_ocp_file_size) -@d ocp_name(#)==ocp_info(#)(offset_ocp_name) -@d ocp_area(#)==ocp_info(#)(offset_ocp_area) -@d ocp_external(#)==ocp_info(#)(offset_ocp_external) -@d ocp_external_arg(#)==ocp_info(#)(offset_ocp_external_arg) -@d ocp_input(#)==ocp_info(#)(offset_ocp_input) -@d ocp_output(#)==ocp_info(#)(offset_ocp_output) -@d ocp_no_tables(#)==ocp_info(#)(offset_ocp_no_tables) -@d ocp_no_states(#)==ocp_info(#)(offset_ocp_no_states) -@d ocp_table_base(#)==ocp_info(#)(offset_ocp_table_base) -@d ocp_state_base(#)==ocp_info(#)(offset_ocp_state_base) - -@ $\Omega$ always knows at least one ocp, namely the null ocp. -It does nothing. - -@<Initialize table...@>= -ocp_ptr:=null_ocp; -allocate_ocp_table(null_ocp,17); -ocp_file_size(null_ocp):=17; -ocp_name(null_ocp):="nullocp"; ocp_area(null_ocp):=""; -ocp_external(null_ocp):=0; ocp_external_arg(null_ocp):=0; -ocp_input(null_ocp):=1; ocp_output(null_ocp):=1; -ocp_no_tables(null_ocp):=0; -ocp_no_states(null_ocp):=1; -ocp_table_base(f):=offset_ocp_info; -ocp_state_base(f):=offset_ocp_info; -ocp_info(null_ocp)(offset_ocp_info) := offset_ocp_info+2; {number of entries} -ocp_info(null_ocp)(offset_ocp_info+1) := offset_ocp_info+5; {number of entries} -ocp_info(null_ocp)(offset_ocp_info+2) := 23; {|OTP_LEFT_START|} -ocp_info(null_ocp)(offset_ocp_info+3) := 3; {|OTP_RIGHT_CHAR|} -ocp_info(null_ocp)(offset_ocp_info+4) := 36; {|OTP_STOP|} - - -@ @<Put each...@>= -primitive("nullocp", set_ocp, null_ocp); -settext(frozen_null_ocp,"nullocp"); -set_new_eqtb(frozen_null_ocp,new_eqtb(cur_val)); -geq_define(ocp_active_number_base, data, 0); -geq_define(ocp_active_min_ptr_base, data, 0); -geq_define(ocp_active_max_ptr_base, data, 0); - -@ Of course we want to define macros that suppress the detail of how ocp -information is actually packed, so that we don't have to write things like -$$\hbox{|ocp_info[k+ocp_info[j+ocp_state_base[i]]]|}$$ -too often. The \.{WEB} definitions here make |ocp_state_entry(i)(j)(k)| -(|ocp_table_entry(i)(j)(k)|) the |k|-th word in the |j|-th state (table) -of the |i|-th ocp. -@^inner loop@> - -@d ocp_state_end(#)==#] -@d ocp_state_one(#)==#*2]+ocp_state_end -@d ocp_state_entry(#)==ocp_tables[#,ocp_tables[#,ocp_state_base(#)+ocp_state_one - -@d ocp_state_no_end(#)==#*2+1] -@d ocp_state_no(#)==ocp_tables[#,ocp_state_base(#)+ocp_state_no_end - -@d ocp_table_end(#)==#] -@d ocp_table_one(#)==#*2]+ocp_table_end -@d ocp_table_entry(#)==ocp_tables[#,ocp_tables[#,ocp_table_base(#)+ocp_table_one - -@d ocp_table_no_end(#)==#*2+1] -@d ocp_table_no(#)==ocp_tables[#,ocp_table_base(#)+ocp_table_no_end - -@ $\Omega$ checks the information of a \.{OCP} file for validity as the -file is being read in, so that no further checks will be needed when -typesetting is going on. The somewhat tedious subroutine that does this -is called |read_ocp_info|. It has three parameters: the user ocp -identifier~|u|, and the file name and area strings |nom| and |aire|. - -The subroutine opens and closes a global file variable called |ocp_file|. -It returns the value of the internal ocp number that was just loaded. -If an error is detected, an error message is issued and no ocp -information is stored; |null_ocp| is returned in this case. - -@d bad_ocp=11 {label for |read_ocp_info|} -@d ocp_abort(#)==begin print("OCP file error ("); - print(#); print(")"); print_ln; goto bad_ocp end - {do this when the \.{OCP} data is wrong} - -@p function read_ocp_info(@!u:pointer;@!nom,@!aire,@!ext:str_number; - @!external_ocp:boolean) - :internal_ocp_number; {input a \.{OCP} file} -label done,bad_ocp,not_found; -var -@!file_opened:boolean; {was |ocp_file| successfully opened?} -@!f:internal_ocp_number; {the new ocp's number} -@!g:internal_ocp_number; {the number to return} -@!ocpword:integer; -@!ocpmem_run_ptr:ocp_index; -@!ocp_length,real_ocp_length:integer; {length of ocp file} -@!previous_address:ocp_index; -@!temp_ocp_input:integer; -@!temp_ocp_output:integer; -@!temp_ocp_no_tables:integer; -@!temp_ocp_no_states:integer; -@!i,new_offset,room_for_tables,room_for_states:integer; -begin g:=null_ocp;@/ -@<Read and check the ocp data; |ocp_abort| if the \.{OCP} file is - malformed; if there's no room for this ocp, say so and |goto - done|; otherwise |incr(ocp_ptr)| and |goto done|@>; -bad_ocp: @<Report that the ocp won't be loaded@>; -done: if file_opened then b_close(ocp_file); -ocp_name(f):=nom; ocp_area(f):=aire; -read_ocp_info:=g; -end; - -@ $\Omega$ does not give precise details about why it -rejects a particular \.{OCP} file. - -@d start_ocp_error_message==print_err("Translation process "); - sprint_cs(u); print_char("="); print_file_name(nom,aire,""); - -@<Report that the ocp won't be loaded@>= -start_ocp_error_message; -@.Translation process x=xx not loadable...@> -if file_opened then print(" not loadable: Bad ocp file") -else print(" not loadable: ocp file not found"); -help2("I wasn't able to read the data for this ocp,")@/ -("so I will ignore the ocp specification."); -error - -@ @<Read and check the ocp data...@>= -if external_ocp then - @<Check |ocp_file| exists@> -else begin - @<Open |ocp_file| for input@>; - @<Read the {\.{OCP}} file@>; - end; - -@ @<Check |ocp_file| exists@>= -begin -file_opened:=false; -pack_file_name(nom,aire,ext); -b_test_in; -if name_length=0 then ocp_abort("opening file"); -f :=ocp_ptr+1; -allocate_ocp_table(f,13); -ocp_file_size(f):=13; -for i:=1 to name_length do begin - append_char(name_of_file[i]); - end; -ocp_external(f):=make_string; -scan_string_argument; -ocp_external_arg(f):=cur_val; -ocp_name(f):=""; ocp_area(f):=""; -ocp_state_base(f):=0; ocp_table_base(f):=0; -ocp_input(f):=1; ocp_output(f):=1; -ocp_info(f)(offset_ocp_info):=0; -ocp_ptr:=f; g:=f; -goto done; -end - -@ @<Open |ocp_file| for input@>= -file_opened:=false; -pack_file_name(nom,aire,".ocp"); -if not b_open_in(ocp_file) then ocp_abort("opening file"); -file_opened:=true - -@ Note: A malformed \.{OCP} file might be shorter than it claims to be; -thus |eof(ocp_file)| might be true when |read_ocp_info| refers to -|ocp_file^| or when it says |get(ocp_file)|. If such circumstances -cause system error messages, you will have to defeat them somehow, -for example by defining |ocpget| to be `\ignorespaces|begin get(ocp_file);| -|if eof(ocp_file) then ocp_abort; end|\unskip'. -@^system dependencies@> - -@d add_to_ocp_info(#)==begin ocp_tables[f,ocpmem_run_ptr]:=#; - incr(ocpmem_run_ptr); - end -@d ocpget==get(ocp_file) -@d ocpbyte==ocp_file^ -@d ocp_read(#)==begin ocpword:=ocpbyte; - if ocpword>127 then ocp_abort("checking first octet"); - ocpget; ocpword:=ocpword*@'400+ocpbyte; - ocpget; ocpword:=ocpword*@'400+ocpbyte; - ocpget; ocpword:=ocpword*@'400+ocpbyte; - #:=ocpword; - end -@d ocp_read_all(#)==begin ocpget; ocp_read(#); end -@d ocp_read_info==begin ocp_read_all(ocpword); - add_to_ocp_info(ocpword); - end - -@ @<Read the {\.{OCP}} file@>= -begin -f :=ocp_ptr+1; -ocpmem_run_ptr:=offset_ocp_info; -ocp_read(ocp_length); -real_ocp_length:=ocp_length-7; -ocp_read_all(temp_ocp_input); -ocp_read_all(temp_ocp_output); -ocp_read_all(temp_ocp_no_tables); -ocp_read_all(room_for_tables); -ocp_read_all(temp_ocp_no_states); -ocp_read_all(room_for_states); -if real_ocp_length <> - (temp_ocp_no_tables + room_for_tables + - temp_ocp_no_states + room_for_states) then - ocp_abort("checking size"); -real_ocp_length:=real_ocp_length+12+ - temp_ocp_no_states+temp_ocp_no_tables; -allocate_ocp_table(f,real_ocp_length); -ocp_external(f):=0; -ocp_external_arg(f):=0; -ocp_file_size(f):=real_ocp_length; -ocp_input(f):=temp_ocp_input; -ocp_output(f):=temp_ocp_output; -ocp_no_tables(f):=temp_ocp_no_tables; -ocp_no_states(f):=temp_ocp_no_states; -ocp_table_base(f):=ocpmem_run_ptr; -if ocp_no_tables(f) <> 0 then begin - previous_address:=ocpmem_run_ptr+2*(ocp_no_tables(f)); - for i:=1 to ocp_no_tables(f) do begin - add_to_ocp_info(previous_address); - ocp_read_all(new_offset); - add_to_ocp_info(new_offset); - previous_address:=previous_address+new_offset; - end - end; -if room_for_tables <> 0 then begin - for i:=1 to room_for_tables do begin - ocp_read_info; - end - end; -ocp_state_base(f):=ocpmem_run_ptr; -if ocp_no_states(f) <> 0 then begin - previous_address:=ocpmem_run_ptr+2*(ocp_no_states(f)); - for i:=1 to ocp_no_states(f) do begin - add_to_ocp_info(previous_address); - ocp_read_all(new_offset); - add_to_ocp_info(new_offset); - previous_address:=previous_address+new_offset; - end; - end; -if room_for_states <> 0 then begin - for i:=1 to room_for_states do begin - ocp_read_info; - end - end; -ocp_ptr:=f; g:=f; -goto done; -end - -@ Before we forget about the format of these tables, let's deal with -$\Omega$'s basic scanning routine related to ocp information. - -@<Declare procedures that scan ocp-related stuff@>= -procedure scan_ocp_ident; -var f:internal_ocp_number; -begin @<Get the next non-blank non-call...@>; -if cur_cmd=set_ocp then f:=cur_chr -else begin print_err("Missing ocp identifier"); -@.Missing ocp identifier@> - help2("I was looking for a control sequence whose")@/ - ("current meaning has been defined by \ocp."); - back_error; f:=null_ocp; - end; -cur_val:=f; -end; - - -@ Here we begin the \.{OCP} list handling. - - -@<Types...@>= -@!internal_ocp_list_number=ocp_list_base..ocp_list_biggest; -@!ocp_list_index=integer; {index into |ocp_list_info|} -@!ocp_lstack_index=integer; {index into |ocp_lstack_info|} - -@ Here now is the array of ocp arrays. -@d ocp_list_lnext(#)==ocp_list_info[#].hh.b0 -@d ocp_list_lstack(#)==ocp_list_info[#].hh.b1 -@d ocp_list_lstack_no(#)==ocp_list_info[#+1].sc -@d ocp_lstack_lnext(#)==ocp_lstack_info[#].hh.b0 -@d ocp_lstack_ocp(#)==ocp_lstack_info[#].hh.b1 -@d make_null_ocp_list==make_ocp_list_node(0,ocp_maxint,0) -@d is_null_ocp_list(#)==ocp_list_lstack_no(#)=ocp_maxint -@d make_null_ocp_lstack==0 -@d is_null_ocp_lstack(#)==#=0 -@d add_before_op=1 -@d add_after_op=2 -@d remove_before_op=3 -@d remove_after_op=4 - -@<Glob...@>= -@!ocp_list_info:array[ocp_list_index] of memory_word; - {the big collection of ocp list data} -@!ocp_listmem_ptr:ocp_list_index; {first unused word of |ocp_list_info|} -@!ocp_listmem_run_ptr:ocp_list_index; {temp unused word of |ocp_list_info|} -@!ocp_lstack_info:array[ocp_lstack_index] of memory_word; - {the big collection of ocp lstack data} -@!ocp_lstackmem_ptr:ocp_lstack_index; {first unused word of |ocp_lstack_info|} -@!ocp_lstackmem_run_ptr:ocp_lstack_index; {temp unused word of |ocp_lstack_info|} -@!ocp_list_ptr:internal_ocp_list_number; {largest internal ocp list number in use} -@!ocp_list_list:array[internal_ocp_list_number] of ocp_list_index; - -@ -@<Initialize table...@>= -ocp_listmem_ptr:=2; -ocp_list_lstack(0):=0; -ocp_list_lstack_no(0):=ocp_maxint; -ocp_list_lnext(0):=0; -ocp_list_ptr:=null_ocp_list; -ocp_list_list[null_ocp_list]:=0; -ocp_lstackmem_ptr:=1; - -@ $\Omega$ always knows at least one ocp list, namely the null ocp list. - -@ @<Put each...@>= -primitive("nullocplist", set_ocp_list, null_ocp_list); -settext(frozen_null_ocp_list,"nullocplist"); -set_new_eqtb(frozen_null_ocp_list,new_eqtb(cur_val)); - -@ @p function make_ocp_list_node(llstack:ocp_lstack_index; - llstack_no:scaled; - llnext:ocp_list_index):ocp_list_index; -var p:ocp_list_index; -begin -p:=ocp_listmem_run_ptr; -ocp_list_lstack(p):=llstack; -ocp_list_lstack_no(p):=llstack_no; -ocp_list_lnext(p):=llnext; -ocp_listmem_run_ptr:=ocp_listmem_run_ptr+2; -make_ocp_list_node:=p; -end; - -function make_ocp_lstack_node(locp:internal_ocp_number; - llnext:ocp_lstack_index) : ocp_lstack_index; -var p:ocp_lstack_index; -begin -p:=ocp_lstackmem_run_ptr; -ocp_lstack_ocp(p):=locp; -ocp_lstack_lnext(p):=llnext; -incr(ocp_lstackmem_run_ptr); -make_ocp_lstack_node:=p; -end; - -function copy_ocp_lstack(llstack:ocp_lstack_index):ocp_lstack_index; -var result:ocp_lstack_index; -begin -if is_null_ocp_lstack(llstack) then - result:=make_null_ocp_lstack -else - result:=make_ocp_lstack_node(ocp_lstack_ocp(llstack), - copy_ocp_lstack(ocp_lstack_lnext(llstack))); -copy_ocp_lstack:=result; -end; - -function copy_ocp_list(list:ocp_list_index):ocp_list_index; -var result:ocp_list_index; -begin -if is_null_ocp_list(list) then - result:=make_null_ocp_list -else - result:=make_ocp_list_node(copy_ocp_lstack(ocp_list_lstack(list)), - ocp_list_lstack_no(list), - copy_ocp_list(ocp_list_lnext(list))); -copy_ocp_list:=result; -end; - -function ocp_ensure_lstack(list:ocp_list_index; llstack_no:scaled): - ocp_list_index; -var p:ocp_list_index; - q:ocp_list_index; -begin -p:=list; -if is_null_ocp_list(p) then begin - ocp_list_lstack_no(p) := llstack_no; - ocp_list_lnext(p) := make_null_ocp_list; - end -else if ocp_list_lstack_no(p) > llstack_no then begin - ocp_list_lnext(p):= - make_ocp_list_node(ocp_list_lstack(p), - ocp_list_lstack_no(p), - ocp_list_lnext(p)); - ocp_list_lstack(p):=0; - ocp_list_lstack_no(p):=llstack_no; - end -else begin - q:=ocp_list_lnext(p); - while (not (is_null_ocp_list(q))) and - ocp_list_lstack_no(q) <= llstack_no do begin - p:=q; q:=ocp_list_lnext(q); - end; - if ocp_list_lstack_no(p) < llstack_no then begin - ocp_list_lnext(p) := make_ocp_list_node(0, llstack_no, q); - p := ocp_list_lnext(p); - end; - end; -ocp_ensure_lstack := p; -end; - -procedure ocp_apply_add(list_entry:ocp_list_index; - lbefore:boolean; - locp:internal_ocp_number); -var p:ocp_lstack_index; - q:ocp_lstack_index; -begin -p := ocp_list_lstack(list_entry); -if lbefore or (p=0) then begin - ocp_list_lstack(list_entry) := make_ocp_lstack_node(locp, p); - end -else begin - q:=ocp_lstack_lnext(p); - while q<>0 do begin - p:=q; q:=ocp_lstack_lnext(q); - end; - ocp_lstack_lnext(p):=make_ocp_lstack_node(locp, null); - end; -end; - -procedure ocp_apply_remove(list_entry:ocp_list_index; - lbefore:boolean); -var p:ocp_lstack_index; - q:ocp_lstack_index; - r:ocp_lstack_index; -begin -p := ocp_list_lstack(list_entry); -if p=0 then begin - print_err("warning: stack entry already empty"); print_ln - end -else begin - q := ocp_lstack_lnext(p); - if lbefore or (q=0) then - ocp_list_lstack(list_entry) := q - else begin - r:=ocp_lstack_lnext(q); - while r <> 0 do begin - p:=q; q:=r; r:=ocp_lstack_lnext(r); - end; - ocp_lstack_lnext(p) := null; - end - end; -end; - -procedure scan_scaled; {sets |cur_val| to a scaled value} -label done, done1, done2, found, not_found, attach_fraction; -var negative:boolean; {should the answer be negated?} -@!f:integer; {numerator of a fraction whose denominator is $2^{16}$} -@!k,@!kk:small_number; {number of digits in a decimal fraction} -@!p,@!q:pointer; {top of decimal digit stack} -begin f:=0; arith_error:=false; negative:=false; -@<Get the next non-blank non-sign...@>; -back_input; -if cur_tok=continental_point_token then cur_tok:=point_token; -if cur_tok<>point_token then scan_int -else begin radix:=10; cur_val:=0; - end; -if cur_tok=continental_point_token then cur_tok:=point_token; -if (radix=10)and(cur_tok=point_token) then @<Scan decimal fraction@>; -if cur_val<0 then {in this case |f=0|} - begin negative := not negative; negate(cur_val); - end; -if cur_val>@'40000 then arith_error:=true -else cur_val := cur_val*unity +f; -if arith_error or(abs(cur_val)>=@'10000000000) then -begin print_err("Stack number too large"); -end; -if negative then negate(cur_val); -end; - -procedure print_ocp_lstack(lstack_entry:ocp_lstack_index); -var p:ocp_lstack_index; -begin -p:=lstack_entry; -while (p<>0) do begin - print_esc(ocp_id_text(ocp_lstack_ocp(p))); - p:=ocp_lstack_lnext(p); - if (p<>0) then print(","); - end; -end; - -procedure print_ocp_list(list_entry:ocp_list_index); -var p:ocp_list_index; -begin -print("["); p:=list_entry; -while not (is_null_ocp_list(p)) do begin - print("("); - print_scaled(ocp_list_lstack_no(p)); - print(" : "); - print_ocp_lstack(ocp_list_lstack(p)); - print(")"); - p:=ocp_list_lnext(p); - if not (is_null_ocp_list(p)) then print(", "); - end; -print("]"); -end; - -function scan_ocp_list: ocp_list_index; -var llstack_no:scaled; - lop:quarterword; - lstack_entry:ocp_list_index; - other_list:ocp_list_index; - ocp_ident:internal_ocp_number; - result:ocp_list_index; -begin -get_r_token; -if cur_cmd = set_ocp_list then - result := copy_ocp_list(ocp_list_list[cur_chr]) -else if cur_cmd <> ocp_list_op then begin - print_err("Bad ocp list specification"); -@.Bad ocp list specification@> - help1("I was looking for a ocp list specification."); - result := make_null_ocp_list; - end -else begin - lop:=cur_chr; - scan_scaled; llstack_no:=cur_val; - if (llstack_no<=0) or (llstack_no>=ocp_maxint) then begin - print_err("Stack numbers must be between 0 and 4096 (exclusive)"); - result := make_null_ocp_list; - end - else begin - if lop <= add_after_op then begin - scan_ocp_ident; ocp_ident:=cur_val; - end; - other_list:=scan_ocp_list; - lstack_entry:=ocp_ensure_lstack(other_list, llstack_no); - if lop <= add_after_op then - ocp_apply_add(lstack_entry, (lop=add_before_op), ocp_ident) - else - ocp_apply_remove(lstack_entry, (lop=remove_before_op)); - result:=other_list; - end; - end; -scan_ocp_list:=result; -end; - -function read_ocp_list: internal_ocp_list_number; -var f:internal_ocp_list_number; - g:internal_ocp_list_number; -begin -g:=null_ocp_list; -f:=ocp_list_ptr+1; -ocp_listmem_run_ptr:=ocp_listmem_ptr; -ocp_lstackmem_run_ptr:=ocp_lstackmem_ptr; -ocp_list_list[f]:=scan_ocp_list; -ocp_list_ptr:=f; -ocp_listmem_ptr:=ocp_listmem_run_ptr; -ocp_lstackmem_ptr:=ocp_lstackmem_run_ptr; -g:=f; -read_ocp_list:=g; -end; - -procedure scan_ocp_list_ident; -var f:internal_ocp_list_number; -begin @<Get the next non-blank non-call...@>; -if cur_cmd=set_ocp_list then f:=cur_chr -else begin print_err("Missing ocp list identifier"); -@.Missing ocp list identifier@> - help2("I was looking for a control sequence whose")@/ - ("current meaning has been defined by \ocplist."); - back_error; f:=null_ocp_list; - end; -cur_val:=f; -end; - - -@z -%--------------------------------------- -@x [49] m.1210 l.22629 - Omega OCP -any_mode(set_interaction):prefixed_command; -@y -any_mode(set_interaction), -any_mode(set_ocp), -any_mode(def_ocp), -any_mode(set_ocp_list), -any_mode(def_ocp_list), -any_mode(clear_ocp_lists), -any_mode(push_ocp_list), -any_mode(pop_ocp_list), -any_mode(ocp_list_op), -any_mode(ocp_trace_level) : prefixed_command; -@z -%--------------------------------------- -@x [50] m.1302 l.23682 - Omega OCP -@<Dump the font information@>; -@y -@<Dump the font information@>; -@<Dump the ocp information@>; -@<Dump the ocp list information@>; -@z -%--------------------------------------- -@x [50] m.1303 l.23711 - Omega OCP -@<Undump the font information@>; -@y -@<Undump the font information@>; -@<Undump the ocp information@>; -@<Undump the ocp list information@>; -@z -%--------------------------------------- -@x [50] m.1323 l.24907 - Omega OCP -begin undump_font_table(k);@/ -end -@y -begin undump_font_table(k);@/ -end - -@ @<Dump the ocp information@>= -dump_int(ocp_ptr); -for k:=null_ocp to ocp_ptr do - @<Dump the array info for internal ocp number |k|@>; -print_ln; print_int(ocp_ptr-ocp_base); print(" preloaded ocp"); -if ocp_ptr<>ocp_base+1 then print_char("s") - -@ @<Undump the ocp information@>= -undump_size(ocp_base)(ocp_biggest)('ocp max')(ocp_ptr); -for k:=null_ocp to ocp_ptr do - @<Undump the array info for internal ocp number |k|@> - -@ @<Dump the array info for internal ocp number |k|@>= -begin dump_ocp_table(k); -print_nl("\ocp"); print_esc(ocp_id_text(k)); print_char("="); -print_file_name(ocp_name(k),ocp_area(k),""); -end - -@ @<Undump the array info for internal ocp number |k|@>= -begin undump_ocp_table(k); -end - -@ @<Dump the ocp list information@>= -dump_int(ocp_listmem_ptr); -for k:=0 to ocp_listmem_ptr-1 do dump_wd(ocp_list_info[k]); -dump_int(ocp_list_ptr); -for k:=null_ocp_list to ocp_list_ptr do begin - dump_int(ocp_list_list[k]); - print_nl("\ocplist"); - print_esc(ocp_list_id_text(k)); - print_char("="); - print_ocp_list(ocp_list_list[k]); - end; -dump_int(ocp_lstackmem_ptr); -for k:=0 to ocp_lstackmem_ptr-1 do dump_wd(ocp_lstack_info[k]) - -@ @<Undump the ocp list information@>= -undump_size(1)(1000000)('ocp list mem size')(ocp_listmem_ptr); -for k:=0 to ocp_listmem_ptr-1 do undump_wd(ocp_list_info[k]); -undump_size(ocp_list_base)(ocp_list_biggest)('ocp list max')(ocp_list_ptr); -for k:=null_ocp_list to ocp_list_ptr do - undump_int(ocp_list_list[k]); -undump_size(1)(1000000)('ocp lstack mem size')(ocp_lstackmem_ptr); -for k:=0 to ocp_lstackmem_ptr-1 do undump_wd(ocp_lstack_info[k]) - -@z -%--------------------------------------- -@x -@* \[54] $\Omega$ changes. - -@y -@* \[54] $\Omega$ changes. - -@ Here we do the main work required for reading and interpreting - $\Omega$ Compiled Translation Processes. - -@ @<Put each...@>= -primitive("ocp", def_ocp, 0); -primitive("externalocp", def_ocp, 1); -primitive("ocplist", def_ocp_list, 0); -primitive("pushocplist", push_ocp_list, 0); -primitive("popocplist", pop_ocp_list, 0); -primitive("clearocplists", clear_ocp_lists, 0); -primitive("addbeforeocplist", ocp_list_op, add_before_op); -primitive("addafterocplist", ocp_list_op, add_after_op); -primitive("removebeforeocplist", ocp_list_op, remove_before_op); -primitive("removeafterocplist", ocp_list_op, remove_after_op); -primitive("ocptracelevel", ocp_trace_level, 0); -set_equiv(ocp_trace_level_base,0); - -@ @<Cases of |print_cmd_chr|...@>= -set_ocp: begin - print("select ocp "); - slow_print(ocp_name(chr_code)); - end; -def_ocp: if cur_chr=0 then print_esc("ocp") - else print_esc("externalocp"); -set_ocp_list: print("select ocp list "); -def_ocp_list: print_esc("ocplist"); -push_ocp_list: print_esc("pushocplist"); -pop_ocp_list: print_esc("popocplist"); -clear_ocp_lists: print_esc("clearocplists"); -ocp_list_op: - if chr_code=add_before_op then print_esc("addbeforeocplist") - else if chr_code=add_after_op then print_esc("addafterocplist") - else if chr_code=remove_before_op then print_esc("removebeforeocplist") - else {|chr_code|=|remove_after_op|} print_esc("removeafterocplist"); -ocp_trace_level: print_esc("ocptracelevel"); - -@ @<Assignments@>= -set_ocp: begin - print_err("To use ocps, use the "); print_esc("pushocplist"); - print(" primitive");print_ln - end; -def_ocp: new_ocp(a); -set_ocp_list: begin - print_err("To use ocp lists, use the "); - print_esc("pushocplist"); print(" primitive");print_ln - end; -def_ocp_list: new_ocp_list(a); -push_ocp_list: do_push_ocp_list(a); -pop_ocp_list: do_pop_ocp_list(a); -clear_ocp_lists: do_clear_ocp_lists(a); -ocp_list_op: begin - print_err("To build ocp lists, use the "); - print_esc("ocplist"); print(" primitive"); print_ln - end; -ocp_trace_level: begin scan_optional_equals; scan_int; - if cur_val<>0 then cur_val:=1; - define(ocp_trace_level_base, data, cur_val); - end; - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure new_ocp(@!a:small_number); -label common_ending; -var u:pointer; {user's ocp identifier} -@!f:internal_ocp_number; {runs through existing ocps} -@!t:str_number; {name for the frozen ocp identifier} -@!old_setting:0..max_selector; {holds |selector| setting} -@!flushable_string:str_number; {string not yet referenced} -@!external_ocp:boolean; {external binary file} -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the ocp name} -@.texput@> -if cur_chr=1 then external_ocp:=true -else external_ocp:=false; -get_r_token; u:=cur_cs; -if u>=hash_base then t:=newtext(u) -else if u>=single_base then - if u=null_cs then t:="OCP"@+else t:=u-single_base -else begin old_setting:=selector; selector:=new_string; - print("OCP"); print(u-active_base); selector:=old_setting; -@.OCPx@> - str_room(1); t:=make_string; - end; -define(u,set_ocp,null_ocp); scan_optional_equals; scan_file_name; -@<If this ocp has already been loaded, set |f| to the internal - ocp number and |goto common_ending|@>; -f:=read_ocp_info(u,cur_name,cur_area,cur_ext,external_ocp); -common_ending: -set_equiv(u,f); set_new_eqtb(ocp_id_base+f,new_eqtb(u)); -settext(ocp_id_base+f,t); -if equiv(ocp_trace_level_base)=1 then begin - print_nl(""); print_esc("ocp"); print_esc(t); print("="); print(cur_name); - end; -end; - -@ When the user gives a new identifier to a ocp that was previously loaded, -the new name becomes the ocp identifier of record. OCP names `\.{xyz}' and -`\.{XYZ}' are considered to be different. - -@<If this ocp has already been loaded...@>= -flushable_string:=str_ptr-1; -for f:=ocp_base+1 to ocp_ptr do - if str_eq_str(ocp_name(f),cur_name)and str_eq_str(ocp_area(f),cur_area) then - begin - if cur_name=flushable_string then begin - flush_string; cur_name:=ocp_name(f); - end; - goto common_ending - end - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure new_ocp_list(@!a:small_number); -var u:pointer; {user's ocp list identifier} -@!f:internal_ocp_list_number; {runs through existing ocp lists} -@!t:str_number; {name for the frozen ocp list identifier} -@!old_setting:0..max_selector; {holds |selector| setting} -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the ocp list name} -@.texput@> -get_r_token; u:=cur_cs; -if u>=hash_base then t:=newtext(u) -else if u>=single_base then - if u=null_cs then t:="OCPLIST"@+else t:=u-single_base -else begin old_setting:=selector; selector:=new_string; - print("OCPLIST"); print(u-active_base); selector:=old_setting; -@.OCPx@> - str_room(1); t:=make_string; - end; -define(u,set_ocp_list,null_ocp_list); scan_optional_equals; -f:=read_ocp_list; - set_equiv(u,f); set_new_eqtb(ocp_list_id_base+f,new_eqtb(u)); - settext(ocp_list_id_base+f,t); -if equiv(ocp_trace_level_base)=1 then begin - print_nl(""); print_esc("ocplist"); print_esc(t); print("="); - print_ocp_list(ocp_list_list[f]); - end; -end; - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure do_push_ocp_list(@!a:small_number); -var ocp_list_no:halfword; - old_number:halfword; - i:integer; -begin -scan_ocp_list_ident; ocp_list_no:=cur_val; -old_number:=equiv(ocp_active_number_base); -define(ocp_active_base+old_number, data, ocp_list_no); -define(ocp_active_number_base, data, (old_number+1)); - -if equiv(ocp_trace_level_base)=1 then begin - print_nl("New active ocp list: {"); - for i:=old_number downto 0 do begin - print_esc(ocp_list_id_text(equiv(ocp_active_base+i))); - print("="); print_ocp_list(ocp_list_list[equiv(ocp_active_base+i)]); - if i<>0 then print(","); - end; - print("}"); - end; - -active_compile; -define(ocp_active_min_ptr_base, data, active_min_ptr); -define(ocp_active_max_ptr_base, data, active_max_ptr); -end; - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure do_pop_ocp_list(@!a:small_number); -var old_number:halfword; - i:integer; -begin -old_number:=equiv(ocp_active_number_base); -if old_number=0 then begin - print_err("No active ocp lists to be popped"); - end -else - define(ocp_active_number_base, data, (old_number-1)); - -if equiv(ocp_trace_level_base)=1 then begin - print_nl("New active ocp list: {"); - for i:=(old_number-2) downto 0 do begin - print_esc(ocp_list_id_text(equiv(ocp_active_base+i))); - print("="); print_ocp_list(ocp_list_list[equiv(ocp_active_base+i)]); - if i<>0 then print(","); - end; - print("}"); - end; - -active_compile; -define(ocp_active_min_ptr_base, data, active_min_ptr); -define(ocp_active_max_ptr_base, data, active_max_ptr); -end; - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure do_clear_ocp_lists(@!a:small_number); -begin -define(ocp_active_number_base, data, 0); -active_compile; -define(ocp_active_min_ptr_base, data, active_min_ptr); -define(ocp_active_max_ptr_base, data, active_max_ptr); -end; - -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/ompar.ch b/Build/source/texk/web2c/omegadir/ompar.ch deleted file mode 100644 index 26b421ac2be..00000000000 --- a/Build/source/texk/web2c/omegadir/ompar.ch +++ /dev/null @@ -1,1629 +0,0 @@ -% ompar.ch: Local paragraph information -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%------------------------- -@x [10] m.134 -@d is_char_node(#) == (#>=hi_mem_min) - {does the argument point to a |char_node|?} -@d font == type {the font code in a |char_node|} -@d character == subtype {the character code in a |char_node|} -@y -@d is_char_node(#) == (#>=hi_mem_min) - {does the argument point to a |char_node|?} -@d font==type {the font code in a |char_node|} -@d character==subtype {the character code in a |char_node|} -@d file_col(#)==mem[#-1].hh.b1 {the column in which this character appeared} -@z -%------------------------- -@x [10] m.136 -@p function new_null_box:pointer; {creates a new box node} -var p:pointer; {the new node} -begin p:=get_node(box_node_size); type(p):=hlist_node; -subtype(p):=min_quarterword; -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)); -new_null_box:=p; -end; -@y -@p function new_null_box:pointer; {creates a new box node} -var p:pointer; {the new node} -begin p:=get_node(box_node_size); type(p):=hlist_node; -subtype(p):=min_quarterword; -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)); -@<LOCAL: Add info node pointer@>; -new_null_box:=p; -end; -@z -%------------------------- -@x [10] m.139 -@p function new_rule:pointer; -var p:pointer; {the new node} -begin p:=get_node(rule_node_size); type(p):=rule_node; -subtype(p):=0; {the |subtype| is not used} -width(p):=null_flag; depth(p):=null_flag; height(p):=null_flag; -new_rule:=p; -end; -@y -@p function new_rule:pointer; -var p:pointer; {the new node} -begin p:=get_node(rule_node_size); type(p):=rule_node; -subtype(p):=0; {the |subtype| is not used} -width(p):=null_flag; depth(p):=null_flag; height(p):=null_flag; -@<LOCAL: Add info node pointer@>; -new_rule:=p; -end; -@z -%------------------------- -@x [10] m.144 -@p function new_ligature(@!f,@!c:quarterword; @!q:pointer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=ligature_node; -font(lig_char(p)):=f; character(lig_char(p)):=c; lig_ptr(p):=q; -subtype(p):=0; new_ligature:=p; -end; -@# -function new_lig_item(@!c:quarterword):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); character(p):=c; lig_ptr(p):=null; -new_lig_item:=p; -end; -@y -@d add_file_col(#)==if state>0 then file_col(#):=loc-start - else file_col(#):=stack_col - -@p -function stack_col:integer; -label done; -var i:integer; - col:integer; -begin -col:=0; -i:=input_ptr; -while (i>=0) do begin - if input_stack[i].state_field>0 then begin - col:=input_stack[i].loc_field-input_stack[i].start_field; - goto done; - end; - decr(i); - end; -done: stack_col:=col; -end; - -function new_ligature(@!f,@!c:quarterword; @!q:pointer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=ligature_node; -font(lig_char(p)):=f; character(lig_char(p)):=c; lig_ptr(p):=q; -@<LOCAL: Add info node pointer@>; -add_file_col(p); -subtype(p):=0; new_ligature:=p; -end; -@# -function new_lig_item(@!c:quarterword):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); character(p):=c; lig_ptr(p):=null; -@<LOCAL: Add info node pointer@>; -new_lig_item:=p; -end; -@z -%------------------------- -@x [10] m.145 -@p function new_disc:pointer; {creates an empty |disc_node|} -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=disc_node; -replace_count(p):=0; pre_break(p):=null; post_break(p):=null; -new_disc:=p; -end; -@y -@p function new_disc:pointer; {creates an empty |disc_node|} -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=disc_node; -replace_count(p):=0; pre_break(p):=null; post_break(p):=null; -@<LOCAL: Add info node pointer@>; -new_disc:=p; -end; -@z -%------------------------- -@x [10] m.147 -@p function new_math(@!w:scaled;@!s:small_number):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=math_node; -subtype(p):=s; width(p):=w; new_math:=p; -end; -@y -@p function new_math(@!w:scaled;@!s:small_number):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=math_node; -@<LOCAL: Add info node pointer@>; -subtype(p):=s; width(p):=w; new_math:=p; -end; -@z -%------------------------- -@x [10] m.151 -@p function new_spec(@!p:pointer):pointer; {duplicates a glue specification} -var q:pointer; {the new spec} -begin q:=get_node(glue_spec_size);@/ -mem[q]:=mem[p]; glue_ref_count(q):=null;@/ -width(q):=width(p); stretch(q):=stretch(p); shrink(q):=shrink(p); -new_spec:=q; -end; -@y -@p function new_spec(@!p:pointer):pointer; {duplicates a glue specification} -var q:pointer; {the new spec} -begin q:=get_node(glue_spec_size);@/ -mem[q]:=mem[p]; glue_ref_count(q):=null;@/ -width(q):=width(p); stretch(q):=stretch(p); shrink(q):=shrink(p); -new_spec:=q; -end; -@z -%------------------------- -@x [10] m.152 -@p function new_param_glue(@!n:small_number):pointer; -var p:pointer; {the new node} -@!q:pointer; {the glue specification} -begin p:=get_node(small_node_size); type(p):=glue_node; subtype(p):=n+1; -leader_ptr(p):=null;@/ -q:=@<Current |mem| equivalent of glue parameter number |n|@>@t@>; -glue_ptr(p):=q; incr(glue_ref_count(q)); -new_param_glue:=p; -end; -@y -@p function new_param_glue(@!n:small_number):pointer; -var p:pointer; {the new node} -@!q:pointer; {the glue specification} -begin p:=get_node(small_node_size); type(p):=glue_node; subtype(p):=n+1; -leader_ptr(p):=null;@/ -q:=@<Current |mem| equivalent of glue parameter number |n|@>@t@>; -glue_ptr(p):=q; incr(glue_ref_count(q)); -@<LOCAL: Add info node pointer@>; -new_param_glue:=p; -end; -@z -%------------------------- -@x [10] m.153 -@p function new_glue(@!q:pointer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=glue_node; subtype(p):=normal; -leader_ptr(p):=null; glue_ptr(p):=q; incr(glue_ref_count(q)); -new_glue:=p; -end; -@y -@p function new_glue(@!q:pointer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=glue_node; subtype(p):=normal; -leader_ptr(p):=null; glue_ptr(p):=q; incr(glue_ref_count(q)); -@<LOCAL: Add info node pointer@>; -new_glue:=p; -end; -@z -%------------------------- -@x [10] m.154 -@p function new_skip_param(@!n:small_number):pointer; -var p:pointer; {the new node} -begin temp_ptr:=new_spec(@<Current |mem| equivalent of glue parameter...@>); -p:=new_glue(temp_ptr); glue_ref_count(temp_ptr):=null; subtype(p):=n+1; -new_skip_param:=p; -end; -@y -@p function new_skip_param(@!n:small_number):pointer; -var p:pointer; {the new node} -begin temp_ptr:=new_spec(@<Current |mem| equivalent of glue parameter...@>); -p:=new_glue(temp_ptr); glue_ref_count(temp_ptr):=null; subtype(p):=n+1; -@<LOCAL: Add info node pointer@>; -new_skip_param:=p; -end; -@z -%------------------------- -@x [10] m.156 -@p function new_kern(@!w:scaled):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=kern_node; -subtype(p):=normal; -width(p):=w; -new_kern:=p; -end; -@y -@p function new_kern(@!w:scaled):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=kern_node; -subtype(p):=normal; -width(p):=w; -@<LOCAL: Add info node pointer@>; -new_kern:=p; -end; -@z -%------------------------- -@x [10] m.158 -@p function new_penalty(@!m:integer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=penalty_node; -subtype(p):=0; {the |subtype| is not used} -penalty(p):=m; new_penalty:=p; -end; -@y -@p function new_penalty(@!m:integer):pointer; -var p:pointer; {the new node} -begin p:=get_node(small_node_size); type(p):=penalty_node; -subtype(p):=0; {the |subtype| is not used} -@<LOCAL: Add info node pointer@>; -penalty(p):=m; new_penalty:=p; -end; -@z -%------------------------- -@x [10] m.160 l.3270 -@ 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=14|; and a number -of larger type codes will also be defined, for use in math mode only. - -@d file_node=unset_node+1 {|type| to hold file names and line numbers} - -@d file_size=3 -@d file_no(#) == info(#+1) {number of open files} -@d file_ref_count(#) == link(#+1) {reference count to this node} - -@d file_incr_ref_count(#)==begin - if (#)<>null then incr(file_ref_count(#)); - end -@d file_decr_ref_count(#)==begin - if (#)<>null then begin - decr(file_ref_count(#)); - if file_ref_count(#) = 0 then begin - free_node(#,file_size+2*file_no(#)); - end; - end; - end - -@d info_node=unset_node+2 {|type| to hold local information} - -@d ptr_info(#) == link(#-1) {pointer to the local info node} - -@d info_size=5 -@d info_ref_count(#) == link(#+1) {reference count to this node} -@d info_pen_inter(#) == info(#+2) {\.{\\localinterlinepenalty}} -@d info_pen_broken(#) == link(#+2) {\.{\\localbrokenpenalty}} -@d info_left_box(#) == info(#+3) {\.{\\localleftbox}} -@d info_right_box(#) == link(#+3) {\.{\\localrightbox}} -@d info_file(#) == info(#+4) {file names and line numbers} - -@d info_incr_ref_count(#)==begin - if (#)<>null then incr(info_ref_count(#)); - end -@d info_decr_ref_count(#)==begin - if (#)<>null then begin - decr(info_ref_count(#)); - if info_ref_count(#) = 0 then begin - if info_left_box(#)<>null then - flush_node_list(info_left_box(#)); - if info_right_box(#)<>null then - flush_node_list(info_right_box(#)); - if info_file(#)<>null then - file_decr_ref_count(info_file(#)); - free_node(#,info_size); - #:=null; - end; - end; - end - -@d biggest_ordinary_node=info_node - -@z -%------------------------- -@x [10] m.162 -@d zero_glue==mem_bot {specification for \.{0pt plus 0pt minus 0pt}} -@d sfi_glue==zero_glue+glue_spec_size {\.{0pt plus 1fi minus 0pt}} -@d fil_glue==sfi_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} -@d fill_glue==fil_glue+glue_spec_size {\.{0pt plus 1fill minus 0pt}} -@d ss_glue==fill_glue+glue_spec_size {\.{0pt plus 1fil minus 1fil}} -@d fil_neg_glue==ss_glue+glue_spec_size {\.{0pt plus -1fil minus 0pt}} -@d lo_mem_stat_max==fil_neg_glue+glue_spec_size-1 {largest statically - allocated word in the variable-size |mem|} -@# -@d page_ins_head==mem_top {list of insertion data for current page} -@d contrib_head==mem_top-1 {vlist of items not yet on current page} -@d page_head==mem_top-2 {vlist for current page} -@d temp_head==mem_top-3 {head of a temporary list of some kind} -@d hold_head==mem_top-4 {head of a temporary list of another kind} -@d adjust_head==mem_top-5 {head of adjustment list returned by |hpack|} -@d active==mem_top-7 {head of active list in |line_break|, needs two words} -@d align_head==mem_top-8 {head of preamble list for alignments} -@d end_span==mem_top-9 {tail of spanned-width lists} -@d omit_template==mem_top-10 {a constant token list} -@d null_list==mem_top-11 {permanently empty list} -@d lig_trick==mem_top-12 {a ligature masquerading as a |char_node|} -@d garbage==mem_top-12 {used for scrap information} -@d backup_head==mem_top-13 {head of token list built by |scan_keyword|} -@d hi_mem_stat_min==mem_top-13 {smallest statically allocated word in - the one-word |mem|} -@d hi_mem_stat_usage=14 {the number of one-word nodes always present} -@y -@d zero_glue==mem_bot+1 {specification for \.{0pt plus 0pt minus 0pt}} -@d sfi_glue==zero_glue+glue_spec_size+1 {\.{0pt plus 1fi minus 0pt}} -@d fil_glue==sfi_glue+glue_spec_size+1 {\.{0pt plus 1fil minus 0pt}} -@d fill_glue==fil_glue+glue_spec_size+1 {\.{0pt plus 1fill minus 0pt}} -@d ss_glue==fill_glue+glue_spec_size+1 {\.{0pt plus 1fil minus 1fil}} -@d fil_neg_glue==ss_glue+glue_spec_size+1 {\.{0pt plus -1fil minus 0pt}} -@d lo_mem_stat_max==fil_neg_glue+glue_spec_size+1 {largest statically - allocated word in the variable-size |mem|} -@# -@d page_ins_head==mem_top {list of insertion data for current page} -@d contrib_head==mem_top-2 {vlist of items not yet on current page} -@d page_head==mem_top-4 {vlist for current page} -@d temp_head==mem_top-6 {head of a temporary list of some kind} -@d hold_head==mem_top-8 {head of a temporary list of another kind} -@d adjust_head==mem_top-10 {head of adjustment list returned by |hpack|} -@d active==mem_top-14 {head of active list in |line_break|, needs two words} -@d align_head==mem_top-16 {head of preamble list for alignments} -@d end_span==mem_top-18 {tail of spanned-width lists} -@d omit_template==mem_top-20 {a constant token list} -@d null_list==mem_top-22 {permanently empty list} -@d lig_trick==mem_top-24 {a ligature masquerading as a |char_node|} -@d garbage==mem_top-24 {used for scrap information} -@d backup_head==mem_top-26 {head of token list built by |scan_keyword|} -@d hi_mem_stat_min==mem_top-28 {smallest statically allocated word in - the one-word |mem|} -@d hi_mem_stat_usage=14 {the number of one-word nodes always present} -@z -%------------------------- -@x [13] m.202 -@p procedure flush_node_list(@!p:pointer); {erase list of nodes starting at |p|} -label done; {go here when node |p| has been freed} -var q:pointer; {successor to node |p|} -begin while p<>null do -@^inner loop@> - begin q:=link(p); -@y -@p procedure flush_node_list(@!p:pointer); {erase list of nodes starting at |p|} -label done; {go here when node |p| has been freed} -var q:pointer; {successor to node |p|} -begin while p<>null do -@^inner loop@> - begin q:=link(p); @<LOCAL: Remove info node pointer@>; -@z -%------------------------- -@x [13] m.202 - othercases confusion("flushing") -@:this can't happen flushing}{\quad flushing@> - endcases;@/ -@y - info_node: begin - @<LOCAL: Delete info node@>; - goto done; end; {do not delete node at this time} - othercases confusion("flushing") -@:this can't happen flushing}{\quad flushing@> - endcases;@/ -@z -%------------------------- -@x [15] m.205 -@ @<Make a copy of node |p|...@>= -words:=1; {this setting occurs in more branches than any other} -if is_char_node(p) then r:=get_avail -else @<Case statement to copy different types and set |words| to the number - of initial words not yet copied@>; -while words>0 do - begin decr(words); mem[r+words]:=mem[p+words]; - end -@y -@ @<Make a copy of node |p|...@>= -words:=1; {this setting occurs in more branches than any other} -if is_char_node(p) then r:=get_avail -else @<Case statement to copy different types and set |words| to the number - of initial words not yet copied@>; -@<LOCAL: Copy info node pointer@>; -file_col(r):=file_col(p); -while words>0 do - begin decr(words); mem[r+words]:=mem[p+words]; - end -@z -%------------------------- -@x [15] m.208 l.4170 -@d min_internal=char_ghost+1 {the smallest code that can follow \.{\\the}} -@y -@d assign_local_box=char_ghost+1 - {box for guillemets \.{\\localleftbox} or \.{\\localrightbox}} -@d min_internal=assign_local_box+1 {the smallest code that can follow \.{\\the}} -@z -%------------------------- -@x [17] m.230 l.4860 -@d box_base=toks_base+number_regs {table of |number_regs| box registers} -@y -@d local_left_box_base=toks_base+number_regs -@d local_right_box_base=local_left_box_base+1 -@d local_par_info_base=local_right_box_base+1 -@d box_base=local_par_info_base+1 {table of |number_regs| box registers} -@z -%------------------------- -@x [17] m.230 l.4888 -@d box(#)==equiv(box_base+#) -@y -@d local_left_box==equiv(local_left_box_base) -@d local_right_box==equiv(local_right_box_base) -@d local_par_info==equiv(local_par_info_base) -@d box(#)==equiv(box_base+#) -@z -%------------------------- -@x [17] m.236 l.4954 -@d int_pars=55 {total number of integer parameters} -@y -@d local_inter_line_penalty_code=55 {local \.{\\interlinepenalty}} -@d local_broken_penalty_code=56 {local \.{\\brokenpenalty}} -@d char_specials_code=57 - {number of characters between column marker specials in dvi file} -@d int_pars=58 {total number of integer parameters} -@z -%------------------------- -@x [17] m.236 l.5011 -@d new_line_char==int_par(new_line_char_code) -@y -@d new_line_char==int_par(new_line_char_code) -@d local_inter_line_penalty==int_par(local_inter_line_penalty_code) -@d local_broken_penalty==int_par(local_broken_penalty_code) -@d char_specials==int_par(char_specials_code) -@z -%------------------------- -@x [19] m.269 l.5860 -@d max_group_code=16 -@y -@d local_box_group=17 {code for `\.{\\localleftbox...\\localrightbox}'} -@d max_group_code=17 -@z -%------------------------- -@x [22] m.304 -@!line : integer; {current line number in the current source file} -@!line_stack : array[1..max_in_open] of integer; -@y -@!line : integer; {current line number in the current source file} -@!line_stack : array[1..max_in_open] of integer; -@!line_numbers : array[1..max_in_open] of integer; -@!file_names : array[1..max_in_open] of integer; -@!no_of_files : integer; {number of currently open files} - -@ @<Set init...@>= -no_of_files:=0; -@z -%------------------------- -@x [23] m.327 -@p procedure begin_file_reading; -begin if in_open=max_in_open then overflow("text input levels",max_in_open); -@:TeX capacity exceeded text input levels}{\quad text input levels@> -if first=buf_size then overflow("buffer size",buf_size); -@:TeX capacity exceeded buffer size}{\quad buffer size@> -incr(in_open); push_input; index:=in_open; -line_stack[index]:=line; start:=first; state:=mid_line; -name:=0; {|terminal_input| is now |true|} -end; -@y -@p procedure begin_file_reading; -begin if in_open=max_in_open then overflow("text input levels",max_in_open); -@:TeX capacity exceeded text input levels}{\quad text input levels@> -if first=buf_size then overflow("buffer size",buf_size); -@:TeX capacity exceeded buffer size}{\quad buffer size@> -incr(in_open); push_input; index:=in_open; -line_stack[index]:=line; start:=first; state:=mid_line; -name:=0; {|terminal_input| is now |true|} -@<LOCAL: Change file node@>; -end; -@z -%------------------------- -@x [24] m.362 -@ @<Read next line of file into |buffer|, or - |goto restart| if the file has ended@>= -begin incr(line); first:=start; -if not force_eof then - begin if input_ln(cur_file,true) then {not end of file} - firm_up_the_line {this sets |limit|} - else force_eof:=true; - end; -if force_eof then - begin print_char(")"); decr(open_parens); - update_terminal; {show user that file has been read} - force_eof:=false; - end_file_reading; {resume previous level} - check_outer_validity; goto restart; - end; -if end_line_char_inactive then decr(limit) -else buffer[limit]:=end_line_char; -first:=limit+1; loc:=start; {ready to read} -end -@y -@ @<Read next line of file into |buffer|, or - |goto restart| if the file has ended@>= -begin incr(line); first:=start; -if not force_eof then - begin if input_ln(cur_file,true) then {not end of file} - firm_up_the_line {this sets |limit|} - else force_eof:=true; - end; -if force_eof then - begin print_char(")"); decr(open_parens); - update_terminal; {show user that file has been read} - force_eof:=false; - end_file_reading; {resume previous level} - check_outer_validity; - if no_of_files>0 then decr(no_of_files); - @<LOCAL: Change file node@>; - goto restart; - end; -if end_line_char_inactive then decr(limit) -else buffer[limit]:=end_line_char; -first:=limit+1; loc:=start; {ready to read} -line_numbers[no_of_files]:=line; -@<LOCAL: Change file node@>; -end -@z -%------------------------- -@x [29] m.537 -done: name:=a_make_name_string(cur_file); -if job_name=0 then - begin job_name:=cur_name; open_log_file; - end; {|open_log_file| doesn't |show_context|, so |limit| - and |loc| needn't be set to meaningful values yet} -if term_offset+length(name)>max_print_line-2 then print_ln -else if (term_offset>0)or(file_offset>0) then print_char(" "); -print_char("("); incr(open_parens); slow_print(name); update_terminal; -state:=new_line; -if name=str_ptr-1 then {we can conserve string pool space now} - begin flush_string; name:=cur_name; - end; -@<Read the first line of the new file@>; -@y -done: name:=a_make_name_string(cur_file); -if job_name=0 then - begin job_name:=cur_name; open_log_file; - end; {|open_log_file| doesn't |show_context|, so |limit| - and |loc| needn't be set to meaningful values yet} -if term_offset+length(name)>max_print_line-2 then print_ln -else if (term_offset>0)or(file_offset>0) then print_char(" "); -print_char("("); incr(open_parens); slow_print(name); update_terminal; -state:=new_line; -if name=str_ptr-1 then {we can conserve string pool space now} - begin flush_string; name:=cur_name; - end; -incr(no_of_files); -file_names[no_of_files]:=name; {keep track of file names for output specials} -line_numbers[no_of_files]:=0; {keep track of file names for output specials} -@<Read the first line of the new file@>; -@z -%------------------------- -@x [29] m.538 -@<Read the first line...@>= -begin line:=1; -if input_ln(cur_file,false) then do_nothing; -firm_up_the_line; -if end_line_char_inactive then decr(limit) -else buffer[limit]:=end_line_char; -first:=limit+1; loc:=start; -end -@y -@<Read the first line...@>= -begin line:=1; -if input_ln(cur_file,false) then do_nothing; -firm_up_the_line; -if end_line_char_inactive then decr(limit) -else buffer[limit]:=end_line_char; -first:=limit+1; loc:=start; -line_numbers[no_of_files]:=1; {keep track of file names for output specials} -@<LOCAL: Change file node@>; -end -@z -%------------------------- -@x [30] m.582 -@p function new_character(@!f:internal_font_number;@!c:eight_bits):pointer; -label exit; -var p:pointer; {newly allocated node} -begin if font_bc(f)<=c then if font_ec(f)>=c then - if char_exists(char_info(f)(qi(c))) then - begin p:=get_avail; font(p):=f; character(p):=qi(c); - new_character:=p; return; - end; -char_warning(f,c); -new_character:=null; -exit:end; -@y -@p function new_character(@!f:internal_font_number;@!c:eight_bits):pointer; -label exit; -var p:pointer; {newly allocated node} -begin if font_bc(f)<=c then if font_ec(f)>=c then - if char_exists(char_info(f)(qi(c))) then - begin p:=get_avail; font(p):=f; character(p):=qi(c); - ptr_info(p):=local_par_info; info_incr_ref_count(local_par_info); - new_character:=p; return; - end; -char_warning(f,c); -new_character:=null; -exit:end; -@z -%------------------------- -@x [32] m.617 -@ @<Initialize variables as |ship_out| begins@>= -dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font; -ensure_dvi_open; -if total_pages=0 then - begin dvi_out(pre); dvi_out(id_byte); {output the preamble} -@^preamble of \.{DVI} file@> -@y -@ @<Initialize variables as |ship_out| begins@>= -dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font; -ensure_dvi_open; -if total_pages=0 then - begin dvi_out(pre); dvi_out(id_byte); {output the preamble} -@^preamble of \.{DVI} file@> - ptr_info(lig_trick):=null; -@z -%------------------------- -@x [32] m.619 -@!p:pointer; {current position in the hlist} -@y -@!p:pointer; {current position in the hlist} -@!fff:pointer; {current file position} -@!ffi:integer; {for iterations} -@!g:integer; {new string} -@!newk:integer; -@!should_create_special:boolean; -@!chars_since_last_special:integer; -@z -%------------------------- -@x [32] m.619 -while p<>null do @<Output node |p| for |hlist_out| and move to the next node, - maintaining the condition |cur_v=base_line|@>; -@y -if char_specials>0 then begin - should_create_special:=true; - chars_since_last_special:=char_specials; - end -else begin - should_create_special:=false; - chars_since_last_special:=-1000000; - end; -while p<>null do @<Output node |p| for |hlist_out| and move to the next node, - maintaining the condition |cur_v=base_line|@>; -@z -%------------------------- -@x [32] m.620 -@<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); -@y -@<Output node |p| for |hlist_out|...@>= -reswitch: if is_char_node(p) then - begin synch_h; synch_v; - if should_create_special then begin - should_create_special:=false; - if chars_since_last_special>=char_specials then - if ptr_info(p)<>null then - if info_file(ptr_info(p))<>null then begin - @<LOCAL: Create special node@>; - chars_since_last_special:=0; - end; - end; - repeat f:=font(p); c:=character(p); - incr(chars_since_last_special); -@z -%------------------------- -@x [32] m.622 -move_past: cur_h:=cur_h+rule_wd; -next_p:p:=link(p); -end -@y -move_past: cur_h:=cur_h+rule_wd; -next_p: -if type(p)<>kern_node then should_create_special:=true; -p:=link(p); -end -@z -%------------------------- -@x [33] m.645 -@p procedure scan_spec(@!c:group_code;@!three_codes:boolean); -@y -@p -@<LOCAL: Declare |make_info_node|@>; -procedure scan_spec(@!c:group_code;@!three_codes:boolean); -@z -%------------------------- -@x [34] m.652 -@ @<Make node |p| look like a |char_node| and |goto reswitch|@>= -begin mem[lig_trick]:=mem[lig_char(p)]; link(lig_trick):=link(p); -p:=lig_trick; goto reswitch; -end -@y -@ @<Make node |p| look like a |char_node| and |goto reswitch|@>= -begin -info_decr_ref_count(ptr_info(lig_trick)); -mem[lig_trick]:=mem[lig_char(p)]; -ptr_info(lig_trick):=ptr_info(p); -info_incr_ref_count(ptr_info(p)); -file_col(lig_trick):=file_col(p); -link(lig_trick):=link(p); -p:=lig_trick; goto reswitch; -end -@z -%------------------------- -@x [34] m.682 l.13395 - Omega -@d ord_noad=unset_node+3 {|type| of a noad classified Ord} -@y -@d ord_noad=biggest_ordinary_node+3 {|type| of a noad classified Ord} -@z -%------------------------- -@x [34] m.686 -@p function new_noad:pointer; -var p:pointer; -begin p:=get_node(noad_size); -type(p):=ord_noad; subtype(p):=normal; -mem[nucleus(p)].hh:=empty_field; -mem[subscr(p)].hh:=empty_field; -mem[supscr(p)].hh:=empty_field; -new_noad:=p; -end; -@y -@p function new_noad:pointer; -var p:pointer; -begin p:=get_node(noad_size); -type(p):=ord_noad; subtype(p):=normal; -mem[nucleus(p)].hh:=empty_field; -mem[subscr(p)].hh:=empty_field; -mem[supscr(p)].hh:=empty_field; -@<LOCAL: Add info node pointer@>; -add_file_col(p); -new_noad:=p; -end; -@z -%--------------------------------------- -@x [34] m.688 -@d style_node=unset_node+1 {|type| of a style node} -@y -@d style_node=biggest_ordinary_node+1 {|type| of a style node} -@z -%--------------------------------------- -@x [34] m.688 -@p function new_style(@!s:small_number):pointer; {create a style node} -var p:pointer; {the new node} -begin p:=get_node(style_node_size); type(p):=style_node; -subtype(p):=s; width(p):=0; depth(p):=0; {the |width| and |depth| are not used} -new_style:=p; -end; -@y -@p function new_style(@!s:small_number):pointer; {create a style node} -var p:pointer; {the new node} -begin p:=get_node(style_node_size); type(p):=style_node; -subtype(p):=s; width(p):=0; depth(p):=0; {the |width| and |depth| are not used} -@<LOCAL: Add info node pointer@>; -add_file_col(p); -new_style:=p; -end; -@z -%--------------------------------------- -@x [34] m.689 -@d choice_node=unset_node+2 {|type| of a choice node} -@y -@d choice_node=biggest_ordinary_node+2 {|type| of a choice node} -@z -%--------------------------------------- -@x [34] m.689 -@p function new_choice:pointer; {create a choice node} -var p:pointer; {the new node} -begin p:=get_node(style_node_size); type(p):=choice_node; -subtype(p):=0; {the |subtype| is not used} -display_mlist(p):=null; text_mlist(p):=null; script_mlist(p):=null; -script_script_mlist(p):=null; -new_choice:=p; -end; -@y -@p function new_choice:pointer; {create a choice node} -var p:pointer; {the new node} -begin p:=get_node(style_node_size); type(p):=choice_node; -subtype(p):=0; {the |subtype| is not used} -display_mlist(p):=null; text_mlist(p):=null; script_mlist(p):=null; -script_script_mlist(p):=null; -@<LOCAL: Add info node pointer@>; -add_file_col(p); -new_choice:=p; -end; -@z -%--------------------------------------- -@x [36] m.755 -@ @<Create a character node |p| for |nucleus(q)|...@>= -begin fetch(nucleus(q)); -if char_exists(cur_i) then - 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; - end; - end -else p:=null; -end -@y -@ @<Create a character node |p| for |nucleus(q)|...@>= -begin fetch(nucleus(q)); -if char_exists(cur_i) then - begin delta:=char_italic(cur_f)(cur_i); p:=new_character(cur_f,qo(cur_c)); - info_decr_ref_count(ptr_info(p)); - ptr_info(p):=ptr_info(q); - info_incr_ref_count(ptr_info(q)); - file_col(p):=file_col(q); - 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; - end; - end -else p:=null; -end -@z -%--------------------------------------- -@x [38] m.814 l.15994 -@!just_box:pointer; {the |hlist_node| for the last line of the new paragraph} -@y -@!just_box:pointer; {the |hlist_node| for the last line of the new paragraph} -@!init_local_par_info:pointer; -@!last_local_par_info:pointer; -@!current_file_node:pointer; - -@ @<Set initial...@>= -init_local_par_info:=null; -last_local_par_info:=null; -current_file_node:=null; - -@z -%------------------------- -@x [38] m.821 l.16110 -@ The passive node for a given breakpoint contains only four fields: - -\yskip\hang|link| points to the passive node created just before this one, -if any, otherwise it is |null|. - -\yskip\hang|cur_break| points to the position of this breakpoint in the -horizontal list for the paragraph being broken. - -\yskip\hang|prev_break| points to the passive node that should precede this -one in an optimal path to this breakpoint. - -\yskip\hang|serial| is equal to |n| if this passive node is the |n|th -one created during the current pass. (This field is used only when -printing out detailed statistics about the line-breaking calculations.) - -\yskip\noindent -There is a global variable called |passive| that points to the most -recently created passive node. Another global variable, |printed_node|, -is used to help print out the paragraph when detailed information about -the line-breaking computation is being displayed. - -@d passive_node_size=2 {number of words in passive nodes} -@d cur_break==rlink {in passive node, points to position of this breakpoint} -@d prev_break==llink {points to passive node that should precede this one} -@d serial==info {serial number for symbolic identification} -@y -@ The passive node for a given breakpoint contains EIGHT fields: - -\yskip\hang|link| points to the passive node created just before this one, -if any, otherwise it is |null|. - -\yskip\hang|cur_break| points to the position of this breakpoint in the -horizontal list for the paragraph being broken. - -\yskip\hang|prev_break| points to the passive node that should precede this -one in an optimal path to this breakpoint. - -\yskip\hang|serial| is equal to |n| if this passive node is the |n|th -one created during the current pass. (This field is used only when -printing out detailed statistics about the line-breaking calculations.) - -\yskip\hang|passive_pen_inter| holds the current \.{\\localinterlinepenalty} - -\yskip\hang|passive_pen_broken| holds the current \.{\\localbrokenpenalty} - -\yskip\noindent -There is a global variable called |passive| that points to the most -recently created passive node. Another global variable, |printed_node|, -is used to help print out the paragraph when detailed information about -the line-breaking computation is being displayed. - -@d passive_node_size=4 {number of words in passive nodes} -@d cur_break==rlink {in passive node, points to position of this breakpoint} -@d prev_break==llink {points to passive node that should precede this one} -@d serial==info {serial number for symbolic identification} -@d passive_local(#)==mem[#+2].int -@d passive_prev_local(#)==mem[#+3].int -@z -%------------------------- -@x [38] m.844 l.16595 -@<Insert a new active node from |best_place[fit_class]| to |cur_p|@>= -begin q:=get_node(passive_node_size); -link(q):=passive; passive:=q; cur_break(q):=cur_p; -@!stat incr(pass_number); serial(q):=pass_number;@+tats@;@/ -prev_break(q):=best_place[fit_class];@/ -@y -@<Insert a new active node from |best_place[fit_class]| to |cur_p|@>= -begin q:=get_node(passive_node_size); -link(q):=passive; passive:=q; cur_break(q):=cur_p; -@!stat incr(pass_number); serial(q):=pass_number;@+tats@;@/ -prev_break(q):=best_place[fit_class];@/ -{Here we keep track of the subparagraph penalties in the break nodes} -passive_local(q):=last_local_par_info; -info_incr_ref_count(last_local_par_info); -if prev_break(q)=null then - passive_prev_local(q):=init_local_par_info -else - passive_prev_local(q):=passive_local(prev_break(q)); -info_incr_ref_count(passive_prev_local(q)); -@z -%------------------------- -@x [38] m.851 l.16706 -@<Consider the demerits for a line from |r| to |cur_p|...@>= -begin artificial_demerits:=false;@/ -@^inner loop@> -shortfall:=line_width-cur_active_width[1]; {we're this much too short} -@y -@<Consider the demerits for a line from |r| to |cur_p|...@>= -begin artificial_demerits:=false;@/ -@^inner loop@> -shortfall:=line_width-cur_active_width[1]; {we're this much too short} -if break_node(r)=null then begin - if init_local_par_info<>null then - if info_left_box(init_local_par_info)<>null then - shortfall:=shortfall-width(info_left_box(init_local_par_info)); - end -else if passive_local(break_node(r))<>null then - if info_left_box(passive_local(break_node(r)))<>null then - shortfall:=shortfall-width(info_left_box(passive_local(break_node(r)))); -if last_local_par_info<>null then - if info_right_box(last_local_par_info)<>null then - shortfall:=shortfall-width(info_right_box(last_local_par_info)); -@z -%------------------------- -@x [39] m.863 l.16932 -loop@+ begin if threshold>inf_bad then threshold:=inf_bad; - if second_pass then @<Initialize for hyphenating a paragraph@>; - @<Create an active breakpoint representing the beginning of the paragraph@>; - cur_p:=link(temp_head); auto_breaking:=true;@/ - prev_p:=cur_p; {glue at beginning is not a legal breakpoint} -@y -loop@+ begin if threshold>inf_bad then threshold:=inf_bad; - if second_pass then @<Initialize for hyphenating a paragraph@>; - @<Create an active breakpoint representing the beginning of the paragraph@>; - cur_p:=link(temp_head); auto_breaking:=true;@/ - prev_p:=cur_p; {glue at beginning is not a legal breakpoint} - @<LOCAL: Initialize local paragraph information@>; -@z -%------------------------- -@x [39] m.865 -@ @<Clean...@>= -q:=link(active); -while q<>last_active do - begin cur_p:=link(q); - if type(q)=delta_node then free_node(q,delta_node_size) - else free_node(q,active_node_size); - q:=cur_p; - end; -q:=passive; -while q<>null do - begin cur_p:=link(q); - free_node(q,passive_node_size); - q:=cur_p; - end -@y -@ @<Clean...@>= -q:=link(active); -while q<>last_active do - begin cur_p:=link(q); - if type(q)=delta_node then free_node(q,delta_node_size) - else free_node(q,active_node_size); - q:=cur_p; - end; -q:=passive; -while q<>null do - begin cur_p:=link(q); - info_decr_ref_count(passive_local(q)); - info_decr_ref_count(passive_prev_local(q)); - free_node(q,passive_node_size); - q:=cur_p; - end -@z -%------------------------- -@x [39] m.866 -@<Call |try_break| if |cur_p| is a legal breakpoint...@>= -begin if is_char_node(cur_p) then - @<Advance \(c)|cur_p| to the node following the present - string of characters@>; -@y -@<Call |try_break| if |cur_p| is a legal breakpoint...@>= -begin -@<LOCAL: Update local paragraph information@>; -if is_char_node(cur_p) then - @<Advance \(c)|cur_p| to the node following the present - string of characters@>; -@<LOCAL: Update local paragraph information@>; -@z -%------------------------- -@x [39] m.881 l.17289 -q:=cur_break(cur_p); disc_break:=false; post_disc_break:=false; -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|@> - else if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0; - end -else begin q:=temp_head; - while link(q)<>null do q:=link(q); - end; -@<Put the \(r)\.{\\rightskip} glue after node |q|@>; -@y -q:=cur_break(cur_p); disc_break:=false; post_disc_break:=false; -if q<>null then {|q| cannot be a |char_node|} - if type(q)=glue_node then begin - if passive_local(cur_p)<>null then - if info_right_box(passive_local(cur_p))<>null then begin - r:=temp_head; - while link(r)<>q do r:=link(r); - s:=copy_node_list(info_right_box(passive_local(cur_p))); - link(r):=s; - link(s):=q; - end; - 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|@> - else if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0; - end -else begin q:=temp_head; - while link(q)<>null do q:=link(q); - end; -if passive_local(cur_p)<>null then - if info_right_box(passive_local(cur_p))<>null then begin - r:=copy_node_list(info_right_box(passive_local(cur_p))); - link(r):=link(q); - link(q):=r; - q:=r; - end; -@<Put the \(r)\.{\\rightskip} glue after node |q|@>; -@z -%------------------------- -@x [39] m.887 l.17352 -@<Put the \(l)\.{\\leftskip} glue at the left...@>= -r:=link(q); link(q):=null; q:=link(temp_head); link(temp_head):=r; -if left_skip<>zero_glue then - begin r:=new_param_glue(left_skip_code); - link(r):=q; q:=r; - end -@y -@<Put the \(l)\.{\\leftskip} glue at the left...@>= -r:=link(q); link(q):=null; q:=link(temp_head); link(temp_head):=r; -if passive_prev_local(cur_p)<>null then - if info_left_box(passive_prev_local(cur_p))<>null then begin - r:=copy_node_list(info_left_box(passive_prev_local(cur_p))); - s:=link(q); - link(r):=q; - q:=r; - {adjustment for the indent node} - if (cur_line=prev_graf+1) and (s<>null) then - if type(s)=hlist_node then - if list_ptr(s)=null then begin - q:=link(q); - link(r):=link(s); - link(s):=r; - end; - end; -if left_skip<>zero_glue then - begin r:=new_param_glue(left_skip_code); - link(r):=q; q:=r; - end -@z -%------------------------- -@x [39] m.890 l.17391 -@<Append a penalty node, if a nonzero penalty is appropriate@>= -if cur_line+1<>best_line then - begin pen:=inter_line_penalty; - if cur_line=prev_graf+1 then pen:=pen+club_penalty; - if cur_line+2=best_line then pen:=pen+final_widow_penalty; - if disc_break then pen:=pen+broken_penalty; -@y -@<Append a penalty node, if a nonzero penalty is appropriate@>= -if cur_line+1<>best_line then begin - if passive_local(cur_p)<>null then begin - if info_pen_inter(passive_local(cur_p))<>0 then - pen:=info_pen_inter(passive_local(cur_p)) - else pen:=inter_line_penalty; - end - else pen:=inter_line_penalty; - if cur_line=prev_graf+1 then pen:=pen+club_penalty; - if cur_line+2=best_line then pen:=pen+final_widow_penalty; - if disc_break then - if passive_local(cur_p)<>null then begin - if info_pen_broken(passive_local(cur_p))<>0 then - pen:=pen+info_pen_broken(passive_local(cur_p)) - else pen:=pen+broken_penalty; - end - else pen:=pen+broken_penalty; -@z -%------------------------- -@x [46] m.1034 -fast_get_avail(lig_stack); font(lig_stack):=main_f; cur_l:=qi(cur_chr); -character(lig_stack):=cur_l;@/ -@y -fast_get_avail(lig_stack); font(lig_stack):=main_f; cur_l:=qi(cur_chr); -ptr_info(lig_stack):=local_par_info; info_incr_ref_count(local_par_info); -add_file_col(lig_stack); -character(lig_stack):=cur_l;@/ -@z -%------------------------- -@x [46] m.1038 -fast_get_avail(lig_stack); font(lig_stack):=main_f; -cur_r:=qi(cur_chr); character(lig_stack):=cur_r; -@y -fast_get_avail(lig_stack); font(lig_stack):=main_f; -ptr_info(lig_stack):=local_par_info; info_incr_ref_count(local_par_info); -add_file_col(lig_stack); -cur_r:=qi(cur_chr); character(lig_stack):=cur_r; -@z -%------------------------- -@x [47] m.1114 l.21322 -primitive("-",discretionary,1); -@!@:Single-character primitives -}{\quad\.{\\-}@> -primitive("discretionary",discretionary,0); -@!@:discretionary_}{\.{\\discretionary} primitive@> - -@ @<Cases of |print_cmd_chr|...@>= -discretionary: if chr_code=1 then - print_esc("-")@+else print_esc("discretionary"); - -@ @<Cases of |main_control| that build...@>= -hmode+discretionary,mmode+discretionary: append_discretionary; -@y -primitive("-",discretionary,1); -@!@:Single-character primitives -}{\quad\.{\\-}@> -primitive("discretionary",discretionary,0); -@!@:discretionary_}{\.{\\discretionary} primitive@> -primitive("localleftbox",assign_local_box,0); -@!@:assign_local_box}{\.{\\localleftbox} primitive@> -primitive("localrightbox",assign_local_box,1); -@!@:assign_local_box}{\.{\\localrightbox} primitive@> - -@ @<Cases of |print_cmd_chr|...@>= -discretionary: if chr_code=1 then - print_esc("-")@+else print_esc("discretionary"); -assign_local_box: if chr_code=0 then print_esc("localleftbox") - else print_esc("localrightbox"); - -@ @<Cases of |main_control| that build...@>= -hmode+discretionary,mmode+discretionary: append_discretionary; -any_mode(assign_local_box): append_local_box(cur_chr); -@z -%------------------------- -@x [47] m.1117 l.21338 -procedure append_discretionary; -var c:integer; {hyphen character} -begin tail_append(new_disc); -if cur_chr=1 then - begin c:=hyphen_char(cur_font); - if c>=0 then if c<=biggest_char then - pre_break(tail):=new_character(cur_font,c); - end -else begin incr(save_ptr); saved(-1):=0; new_save_level(disc_group); - scan_left_brace; push_nest; mode:=-hmode; space_factor:=1000; - end; -end; -@y -procedure append_local_box(kind:integer); -begin -incr(save_ptr); saved(-1):=kind; new_save_level(local_box_group); -scan_left_brace; push_nest; mode:=-hmode; space_factor:=1000; -end; - -procedure append_discretionary; -var c:integer; {hyphen character} -begin tail_append(new_disc); -if cur_chr=1 then - begin c:=hyphen_char(cur_font); - if c>=0 then if c<=biggest_char then begin - pre_break(tail):=new_character(cur_font,c); - info_decr_ref_count(ptr_info(pre_break(tail))); - ptr_info(pre_break(tail)):=local_par_info; - info_incr_ref_count(local_par_info); - add_file_col(pre_break(tail)); - end - end -else begin incr(save_ptr); saved(-1):=0; new_save_level(disc_group); - scan_left_brace; push_nest; mode:=-hmode; space_factor:=1000; - end; -end; -@z -%------------------------- -@x [47] m.1118 l.21355 -disc_group: build_discretionary; -@y -disc_group: build_discretionary; -local_box_group: build_local_box; -@z -%------------------------- -@x [47] m.1119 l.21358 -procedure build_discretionary; -@y -procedure build_local_box; -var p:pointer; - kind:integer; -begin -unsave; -kind:=saved(-1); -decr(save_ptr); -p:=link(head); pop_nest; -p:=hpack(p,natural); -if kind=0 then - eq_define(local_left_box_base,box_ref,p) -else - eq_define(local_right_box_base,box_ref,p); -@<LOCAL: Change info node@>; -end; - -procedure build_discretionary; -@z -%------------------------- -@x [47] m.1123 -procedure make_accent; -var s,@!t: real; {amount of slant} -@!p,@!q,@!r:pointer; {character, box, and kern nodes} -@!f:internal_font_number; {relevant font} -@!a,@!h,@!x,@!w,@!delta:scaled; {heights and widths, as explained above} -@!i:four_quarters; {character information} -begin scan_char_num; f:=cur_font; p:=new_character(f,cur_val); -if p<>null then - begin x:=x_height(f); s:=slant(f)/float_constant(65536); -@^real division@> - a:=char_width(f)(char_info(f)(character(p)));@/ - do_assignments;@/ - @<Create a character node |q| for the next character, - but set |q:=null| if problems arise@>; - if q<>null then @<Append the accent with appropriate kerns, - then set |p:=q|@>; - link(tail):=p; tail:=p; space_factor:=1000; - end; -end; -@y -procedure make_accent; -var s,@!t: real; {amount of slant} -@!p,@!q,@!r:pointer; {character, box, and kern nodes} -@!f:internal_font_number; {relevant font} -@!a,@!h,@!x,@!w,@!delta:scaled; {heights and widths, as explained above} -@!i:four_quarters; {character information} -begin scan_char_num; f:=cur_font; p:=new_character(f,cur_val); -@<LOCAL: Add info node pointer@>; -add_file_col(p); -if p<>null then - begin x:=x_height(f); s:=slant(f)/float_constant(65536); -@^real division@> - a:=char_width(f)(char_info(f)(character(p)));@/ - do_assignments;@/ - @<Create a character node |q| for the next character, - but set |q:=null| if problems arise@>; - if q<>null then @<Append the accent with appropriate kerns, - then set |p:=q|@>; - link(tail):=p; tail:=p; space_factor:=1000; - end; -end; -@z -%------------------------- -@x [47] m.1124 -@ @<Create a character node |q| for the next...@>= -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 -@ @<Create a character node |q| for the next...@>= -q:=null; f:=cur_font; -if (cur_cmd=letter)or(cur_cmd=other_char)or(cur_cmd=char_given) then begin - q:=new_character(f,cur_chr); - info_decr_ref_count(ptr_info(q)); - ptr_info(q):=local_par_info; - info_incr_ref_count(local_par_info); - add_file_col(q); - end -else if cur_cmd=char_num then - begin scan_char_num; q:=new_character(f,cur_val); - info_decr_ref_count(ptr_info(q)); - ptr_info(q):=local_par_info; - info_incr_ref_count(local_par_info); - add_file_col(q); - end -else back_input -@z -%------------------------- -@x [49] m.1228 l.22908 -assign_int: begin p:=cur_chr; scan_optional_equals; scan_int; - word_define(p,cur_val); -@y -assign_int: begin p:=cur_chr; scan_optional_equals; scan_int; - word_define(p,cur_val); -{If we are defining subparagraph penalty levels, then we - must change the local paragraph node.} - if ((p=(int_base+local_inter_line_penalty_code)) or - (p=(int_base+local_broken_penalty_code))) then - @<LOCAL: Change info node@>; -@z -%------------------------- -@x [53] m.1344 l.24546 -primitive("setlanguage",extension,set_language_code);@/ -@!@:set_language_}{\.{\\setlanguage} primitive@> -@y -primitive("setlanguage",extension,set_language_code);@/ -@!@:set_language_}{\.{\\setlanguage} primitive@> -primitive("localinterlinepenalty",assign_int, - int_base+local_inter_line_penalty_code);@/ -primitive("localbrokenpenalty",assign_int, - int_base+local_broken_penalty_code);@/ -primitive("charspecials",assign_int, - int_base+char_specials_code);@/ -@z -%------------------------- -@x [53] m.1354 -@<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; -ptr_info(tail):=local_par_info; -info_incr_ref_count(local_par_info); -add_file_col(tail); -p:=scan_toks(false,true); write_tokens(tail):=def_ref; -end -@z -%------------------------- -@x [53] m.1368 -@<Declare procedures needed in |hlist_out|, |vlist_out|@>= -procedure special_out(@!p:pointer); -var old_setting:0..max_selector; {holds print |selector|} -@!k:pool_pointer; {index into |str_pool|} -begin synch_h; synch_v;@/ -@y -@<Declare procedures needed in |hlist_out|, |vlist_out|@>= -procedure append_string(s:integer); -var p:pointer; - i:integer; -begin -if (s<@"10000) then append_char(s) -else begin - i:=str_start(s); - while i<str_start(s+1) do begin - append_char(str_pool[i]); - incr(i); - end; - end; -end; - -procedure append_int(n:integer); -var p:pointer; - k:integer; -begin -k:=0; -repeat - dig[k] := n mod 10; - n := n div 10; - incr(k); -until n=0; -while k>0 do begin - decr(k); - append_char("0"+dig[k]); - end; -end; - -procedure special_out(@!p:pointer); -var old_setting:0..max_selector; {holds print |selector|} -@!k:pool_pointer; {index into |str_pool|} -@!fff:pointer; {current file position} -@!ffi:integer; {for iterations} -@!g:integer; {new string} -@!newk:integer; -begin synch_h; synch_v;@/ -if ptr_info(p)<>null then - if info_file(ptr_info(p))<>null then - @<LOCAL: Create special node@>; -@z -%------------------------- -@x [53] m.1378 l.24900 -@ @<Finish the extensions@>= -for k:=0 to 15 do if write_open[k] then a_close(write_file[k]) -@y -@ @<Finish the extensions@>= -for k:=0 to 15 do if write_open[k] then a_close(write_file[k]) - -@ @<LOCAL: Declare |make_info_node|@>= -procedure make_info_node; -{This function creates an |info_node|} -var p:pointer; -begin -p:=get_node(info_size); type(p):=info_node; -link(p):=null; -info_ref_count(p):=1; -info_pen_inter(p):=local_inter_line_penalty; -info_pen_broken(p):=local_broken_penalty; -if local_left_box=null then - info_left_box(p):=null -else - info_left_box(p):=copy_node_list(local_left_box); -if local_right_box=null then - info_right_box(p):=null -else - info_right_box(p):=copy_node_list(local_right_box); -if current_file_node=null then begin - info_file(p):=null; - end -else begin - info_file(p):=current_file_node; - file_incr_ref_count(current_file_node); - end; -eq_define(local_par_info_base,data,p); -end; - -procedure make_file_node; -var p:pointer; - i:integer; -begin -p:=get_node(file_size+2*no_of_files); type(p):=file_node; -file_no(p):=no_of_files; -file_ref_count(p):=1; -for i := 1 to no_of_files do begin - mem[p+(i*2)].int := file_names[i]; - mem[p+(i*2)+1].int := line_numbers[i]; - end; -file_decr_ref_count(current_file_node); -current_file_node:=p; -make_info_node; -end - -@ @<LOCAL: Initialize local paragraph information@>= -begin -info_decr_ref_count(init_local_par_info); -init_local_par_info:=ptr_info(cur_p); -info_incr_ref_count(init_local_par_info); -info_decr_ref_count(last_local_par_info); -last_local_par_info:=ptr_info(cur_p); -info_incr_ref_count(last_local_par_info); -end - -@ @<LOCAL: Update local paragraph information@>= -begin -if last_local_par_info<>ptr_info(cur_p) then begin - info_decr_ref_count(last_local_par_info); - last_local_par_info:=ptr_info(cur_p); - info_incr_ref_count(last_local_par_info); - end; -end - -@ @<LOCAL: print out |local_paragraph| node@>= -info_node: begin - print_esc("info"); - append_char("."); - print_ln; print_current_string; - print_esc("localinterlinepenalty"); print("="); - print_int(info_pen_inter(p)); - print_ln; print_current_string; - print_esc("localbrokenpenalty"); print("="); - print_int(info_pen_broken(p)); - print_ln; print_current_string; - print_esc("localleftbox"); - if info_left_box(p)=null then print("=null") - else begin - append_char("."); - show_node_list(info_left_box(p)); - decr(pool_ptr); - end; - print_ln; print_current_string; - print_esc("localrightbox"); - if info_right_box(p)=null then print("=null") - else begin - append_char("."); - show_node_list(info_right_box(p)); - decr(pool_ptr); - end; - decr(pool_ptr); - end - -@ @<LOCAL: Change file node@>= -begin -make_file_node; -end - -@ @<LOCAL: Change info node@>= -begin -make_info_node; -end - -@ @<LOCAL: Delete info node@>= -begin -info_decr_ref_count(p); -end - -@ @<LOCAL: Add info node pointer@>= -begin -ptr_info(p):=local_par_info; -info_incr_ref_count(local_par_info); -end - -@ @<LOCAL: Copy info node pointer@>= -begin -ptr_info(r):=ptr_info(p); -info_incr_ref_count(ptr_info(p)); -end - -@ @<LOCAL: Remove info node pointer@>= -begin -info_decr_ref_count(ptr_info(p)); -ptr_info(p):=null; -end - -@ @<LOCAL: Create special node@>= -begin -fff:=info_file(ptr_info(p)); -append_string("om:"); -append_string("lines="); -for ffi:=1 to file_no(fff) do begin - if mem[fff+ffi*2].int <> 0 then begin - append_char(""""); - append_string(mem[fff+ffi*2].int); - append_char(""""); - append_char(","); - append_int(mem[fff+ffi*2+1].int); - append_char(";"); - end; - end; -g:=make_string; -if length(g)<256 then - begin dvi_out(xxx1); dvi_out(length(g)); - end -else begin dvi_out(xxx4); dvi_four(length(g)); - end; -for newk:=str_start(g) to pool_ptr-1 do dvi_out(so(str_pool[newk])); -flush_string; {erase the string} -append_string("om:"); -append_string("col="); -append_int(file_col(p)); -append_char(";"); -g:=make_string; -if length(g)<256 then - begin dvi_out(xxx1); dvi_out(length(g)); - end -else begin dvi_out(xxx4); dvi_four(length(g)); - end; -for newk:=str_start(g) to pool_ptr-1 do dvi_out(so(str_pool[newk])); -flush_string; {erase the string} -end - -@z -%------------------------- diff --git a/Build/source/texk/web2c/omegadir/omstr.ch b/Build/source/texk/web2c/omegadir/omstr.ch deleted file mode 100644 index f100266b90f..00000000000 --- a/Build/source/texk/web2c/omegadir/omstr.ch +++ /dev/null @@ -1,875 +0,0 @@ -% omstr.ch: String manipulation -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [2] m.17 l.510 - Omega -In order to make \TeX\ readily portable to a wide variety of -computers, all of its input text is converted to an internal eight-bit -@y -In order to make $\Omega$ readily portable to a wide variety of -computers, all of its input text is converted to an internal 31-bit -@z -%--------------------------------------- -@x [2] m.18 l.537 - Omega -@!ASCII_code=0..255; {eight-bit numbers} -@y -@!ASCII_code=0..biggest_char; -@z -%--------------------------------------- -@x [2] m.19 l.567 - Omega -@d last_text_char=255 {ordinal number of the largest element of |text_char|} -@y -@d last_text_char=biggest_char - {ordinal number of the largest element of |text_char|} -@z -%--------------------------------------- -@x [2] m.20 l.577 - Omega -@!xord: array [text_char] of ASCII_code; - {specifies conversion of input characters} -@!xchr: array [ASCII_code] of text_char; - {specifies conversion of output characters} -@y -@!xchr: array [0..255] of text_char; - {specifies conversion of output characters} -@z -%--------------------------------------- -@x [2] m.23 l.724 - Omega -for i:=0 to @'37 do xchr[i]:=' '; -for i:=@'177 to @'377 do xchr[i]:=' '; -@y -for i:=0 to @'37 do xchr[i]:=chr(i); -for i:=@'177 to @'377 do xchr[i]:=chr(i); -init_eqtb_table; -@z -%--------------------------------------- -@x [2] m.24 l.734 - Omega -for i:=first_text_char to last_text_char do xord[chr(i)]:=invalid_code; -for i:=@'200 to @'377 do xord[xchr[i]]:=i; -for i:=0 to @'176 do xord[xchr[i]]:=i; -@y -@z -%--------------------------------------- -@x [3] m.25 l.772 - Omega -@!eight_bits=0..255; {unsigned one-byte quantity} -@!alpha_file=packed file of text_char; {files that contain textual data} -@!byte_file=packed file of eight_bits; {files that contain binary data} -@y -@!eight_bits=0..biggest_char; {unsigned two-byte quantity} -@!real_eight_bits=0..255; {dvi output uses exactly 8 bits} -@!alpha_file=packed file of text_char; {files that contain textual data} -@!byte_file=packed file of real_eight_bits; {files that contain binary data} -@z -%--------------------------------------- -@x [3] m.31 l.947 - Omega - buffer[last]:=xord[f^]; get(f); incr(last); -@y - buffer[last]:=f^; get(f); incr(last); -@z -%--------------------------------------- -@x [4] m.38 l.1099 - Omega -String numbers 0 to 255 are reserved for strings that correspond to single -ASCII characters. This is in accordance with the conventions of \.{WEB}, -@y -String numbers 0 to |biggest_char| are reserved for strings that correspond to -single ASCII characters. This is in accordance with the conventions of \.{WEB}, -@z -%--------------------------------------- -@x [4] m.38 l.1109 - Omega -ASCII character, so the first 256 strings are used to specify exactly what -should be printed for each of the 256 possibilities. -@y -ASCII character, so the first |biggest_char+1| strings are used to specify -exactly what should be printed for each of the |biggest_char+1| possibilities. -@z -%--------------------------------------- -@x [4] m.38-9 l.1122 - Omega -@d si(#) == # {convert from |ASCII_code| to |packed_ASCII_code|} -@d so(#) == # {convert from |packed_ASCII_code| to |ASCII_code|} - -@<Types...@>= -@!pool_pointer = 0..pool_size; {for variables that point into |str_pool|} -@!str_number = 0..max_strings; {for variables that point into |str_start|} -@!packed_ASCII_code = 0..255; {elements of |str_pool| array} - -@ @<Glob...@>= -@!str_pool:packed array[pool_pointer] of packed_ASCII_code; {the characters} -@!str_start : array[str_number] of pool_pointer; {the starting pointers} -@y -@d si(#) == # {convert from |ASCII_code| to |packed_ASCII_code|} -@d so(#) == # {convert from |packed_ASCII_code| to |ASCII_code|} -@d str_start(#) == str_start_ar[#-too_big_char] - -@<Types...@>= -@!pool_pointer = 0..pool_size; {for variables that point into |str_pool|} -@!str_number = 0..max_strings; {for variables that point into |str_start|} -@!packed_ASCII_code = 0..65535; {elements of |str_pool| array} - -@ @<Glob...@>= -@!str_pool:packed array[pool_pointer] of packed_ASCII_code; {the characters} -@!str_start_ar : array[str_number] of pool_pointer; {the starting pointers} -@z -%--------------------------------------- -@x [4] m.40 l.1145 - Omega -@d length(#)==(str_start[#+1]-str_start[#]) {the number of characters - in string number \#} -@y -@p function length(s:str_number):integer; - {the number of characters in string number |s|} -begin if (s>=@"10000) then length:=str_start(s+1)-str_start(s) -else if (s>=@"20) and (s<@"7F) then length:=1 -else if (s<=@"7F) then length:=3 -else if (s<@"100) then length:=4 -else length:=8 -end; -@z -%--------------------------------------- -@x [4] m.41 l.1150 - Omega -@d cur_length == (pool_ptr - str_start[str_ptr]) -@y -@d cur_length == (pool_ptr - str_start(str_ptr)) -@z -%--------------------------------------- -@x [4] m.43 l.1181 - Omega -incr(str_ptr); str_start[str_ptr]:=pool_ptr; -@y -incr(str_ptr); str_start(str_ptr):=pool_ptr; -@z -%--------------------------------------- -@x [4] m.44 l.1187 - Omega -@d flush_string==begin decr(str_ptr); pool_ptr:=str_start[str_ptr]; -@y -@d flush_string==begin decr(str_ptr); pool_ptr:=str_start(str_ptr); -@z -%--------------------------------------- -@x [4] m.45 l.1201 - Omega -begin j:=str_start[s]; -while j<str_start[s+1] do -@y -begin j:=str_start(s); -while j<str_start(s+1) do -@z -%--------------------------------------- -@x [4] m.46 l.1222 - Omega -@p function str_eq_str(@!s,@!t:str_number):boolean; - {test equality of strings} -label not_found; {loop exit} -var j,@!k: pool_pointer; {running indices} -@!result: boolean; {result of comparison} -begin result:=false; -if length(s)<>length(t) then goto not_found; -j:=str_start[s]; k:=str_start[t]; -while j<str_start[s+1] do - begin if str_pool[j]<>str_pool[k] then goto not_found; - incr(j); incr(k); - end; -result:=true; -not_found: str_eq_str:=result; -end; -@y -@p function str_eq_str(@!s,@!t:str_number):boolean; - {test equality of strings} -label not_found; {loop exit} -var j,@!k: pool_pointer; {running indices} -@!result: boolean; {result of comparison} -begin result:=false; -if length(s)<>length(t) then goto not_found; -if (length(s)=1) then begin - if s<65536 then begin - if t<65536 then begin - if s<>t then goto not_found; - end - else begin - if s<>str_pool[str_start(t)] then goto not_found; - end; - end - else begin - if t<65536 then begin - if str_pool[str_start(s)]<>t then goto not_found; - end - else begin - if str_pool[str_start(s)]<>str_pool[str_start(t)] then - goto not_found; - end; - end; - end -else begin - j:=str_start(s); k:=str_start(t); - while j<str_start(s+1) do - begin if str_pool[j]<>str_pool[k] then goto not_found; - incr(j); incr(k); - end; - end; -result:=true; -not_found: str_eq_str:=result; -end; -@z -%--------------------------------------- -@x [4] m.47 l.1240 - Omega -var k,@!l:0..255; {small indices or counters} -@y -var k,@!l:0..biggest_char; {small indices or counters} -@z -%--------------------------------------- -@x [4] m.47 l.1245 - Omega -begin pool_ptr:=0; str_ptr:=0; str_start[0]:=0; -@<Make the first 256 strings@>; -@<Read the other strings from the \.{TEX.POOL} file and return |true|, -@y -begin pool_ptr:=0; str_ptr:=0; str_start_ar[0]:=0; str_start_ar[1]:=0; -@<Make the first strings@>; -@<Read the other strings from the \.{OMEGA.POOL} file and return |true|, -@z -%--------------------------------------- -% A hack is made for strings 256 through to 65535. -% String 256 becomes "^^^^????". All the strings -% from 256 to 65535 are made to point at this string, -% which will never be printed: it's just a placeholder. - -@x [4] m.48 l.1255 - Omega -@<Make the first 256...@>= -for k:=0 to 255 do - begin if (@<Character |k| cannot be printed@>) then - begin append_char("^"); append_char("^"); - if k<@'100 then append_char(k+@'100) - else if k<@'200 then append_char(k-@'100) - else begin app_lc_hex(k div 16); app_lc_hex(k mod 16); - end; - end - else append_char(k); - g:=make_string; - end -@y -@<Make the first ...@>= -begin -str_ptr:=too_big_char; -end -@z -%--------------------------------------- -@x [4] m.49 l.1279 - Omega -Unprintable characters of codes 128--255 are, similarly, rendered -\.{\^\^80}--\.{\^\^ff}. -@y -Unprintable characters of codes 128--255 are, similarly, rendered -\.{\^\^80}--\.{\^\^ff}. - -Unprintable characters of codes 256--|biggest_char| are, similarly, rendered -\.{\^\^\^\^0100}--\.{\^\^\^\^ffff}. - -@z -%--------------------------------------- -@x [4] m.49 l.1295 - Omega -@<Character |k| cannot be printed@>= - (k<" ")or(k>"~") -@y -@z -%--------------------------------------- -@x [4] m.50 l.1298 - Omega -@ When the \.{WEB} system program called \.{TANGLE} processes the \.{TEX.WEB} -description that you are now reading, it outputs the \PASCAL\ program -\.{TEX.PAS} and also a string pool file called \.{TEX.POOL}. The \.{INITEX} -@y -@ When the \.{WEB} system program called \.{OTANGLE} processes the \.{OMEGA.WEB} -description that you are now reading, it outputs the \PASCAL\ program -\.{OMEGA.PAS} and also a string pool file called \.{OMEGA.POOL}. The \.{INITEX} -@z -%--------------------------------------- -@x [4] m.51 l.1322 - Omega -else bad_pool('! I can''t read TEX.POOL.') -@.I can't read TEX.POOL@> -@y -else bad_pool('! I can''t read OMEGA.POOL.') -@.I can't read OMEGA.POOL@> -@z -%--------------------------------------- -@x [4] m.52 l.1326 - Omega -begin if eof(pool_file) then bad_pool('! TEX.POOL has no check sum.'); -@.TEX.POOL has no check sum@> -@y -begin if eof(pool_file) then bad_pool('! OMEGA.POOL has no check sum.'); -@.OMEGA.POOL has no check sum@> -@z -%--------------------------------------- -@x [4] m.52 l.1332 - Omega -else begin if (xord[m]<"0")or(xord[m]>"9")or@| - (xord[n]<"0")or(xord[n]>"9") then - bad_pool('! TEX.POOL line doesn''t begin with two digits.'); -@.TEX.POOL line doesn't...@> - l:=xord[m]*10+xord[n]-"0"*11; {compute the length} - if pool_ptr+l+string_vacancies>pool_size then - bad_pool('! You have to increase POOLSIZE.'); -@.You have to increase POOLSIZE@> - for k:=1 to l do - begin if eoln(pool_file) then m:=' '@+else read(pool_file,m); - append_char(xord[m]); -@y -else begin if (m<"0")or(m>"9")or@| - (n<"0")or(n>"9") then - bad_pool('! OMEGA.POOL line doesn''t begin with two digits.'); -@.OMEGA.POOL line doesn't...@> - l:=m*10+n-"0"*11; {compute the length} - if pool_ptr+l+string_vacancies>pool_size then - bad_pool('! You have to increase POOLSIZE.'); -@.You have to increase POOLSIZE@> - for k:=1 to l do - begin if eoln(pool_file) then m:=' '@+else read(pool_file,m); - append_char(m); -@z -%--------------------------------------- -@x [4] m.53 l.1347 - Omega -end of this \.{TEX.POOL} file; any other value means that the wrong pool -@y -end of this \.{OMEGA.POOL} file; any other value means that the wrong pool -@z -%--------------------------------------- -@x [4] m.53 l.1354 - Omega -loop@+ begin if (xord[n]<"0")or(xord[n]>"9") then - bad_pool('! TEX.POOL check sum doesn''t have nine digits.'); -@.TEX.POOL check sum...@> - a:=10*a+xord[n]-"0"; -@y -loop@+ begin if (n<"0")or(n>"9") then - bad_pool('! OMEGA.POOL check sum doesn''t have nine digits.'); -@.OMEGA.POOL check sum...@> - a:=10*a+n-"0"; -@z -%--------------------------------------- -@x [4] m.53 l.1360 - Omega -done: if a<>@$ then bad_pool('! TEX.POOL doesn''t match; TANGLE me again.'); -@.TEX.POOL doesn't match@> -@y -done: if a<>@$ then bad_pool('! OMEGA.POOL doesn''t match; OTANGLE me again.'); -@.OMEGA.POOL doesn't match@> -@z -%--------------------------------------- -% When we print a string, we must make sure we do the appropriate -% thing for strings 256 through to 65535. We must generate the -% strings on the fly. - -@x [5] m.59 l.1496 - Omega -@ An entire string is output by calling |print|. Note that if we are outputting -the single standard ASCII character \.c, we could call |print("c")|, since -|"c"=99| is the number of a single-character string, as explained above. But -|print_char("c")| is quicker, so \TeX\ goes directly to the |print_char| -routine when it knows that this is safe. (The present implementation -assumes that it is always safe to print a visible ASCII character.) -@^system dependencies@> - -@<Basic print...@>= -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 -@y -@ An entire string is output by calling |print|. Note that if we are outputting -the single standard ASCII character \.c, we could call |print("c")|, since -|"c"=99| is the number of a single-character string, as explained above. But -|print_char("c")| is quicker, so \TeX\ goes directly to the |print_char| -routine when it knows that this is safe. (The present implementation -assumes that it is always safe to print a visible ASCII character.) -@^system dependencies@> - -@d print_lc_hex(#)==l:=#; - if l<10 then print_char(l+"0") else print_char(l-10+"a"); - -@<Basic print...@>= -procedure print(@!s:integer); {prints string |s|} -label exit; -var j:pool_pointer; {current character code position} -@!nl:integer; {new-line character to restore} -@!l:integer; {for printing 16-bit characters} -begin if s>=str_ptr then s:="???" {this can't happen} -@.???@> -else if s<biggest_char 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; - @<Set newline character to -1@>; - if s<@"20 then begin - print_char(@"5E); print_char(@"5E); print_char(s+@'100); - end - else if s<@"7F then - print_char(s) - else if s=@"7F then begin - print_char(@"5E); print_char(@"5E); print_char(s-@'100); - end - else if s<@"100 then begin - print_char(@"5E); print_char(@"5E); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end - else begin {Here is where we generate the strings on the fly.} - print_char(@"5E); print_char(@"5E); - print_char(@"5E); print_char(@"5E); - print_lc_hex(s div @"1000); print_lc_hex((s mod @"1000) div @"100); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end; - @<Set newline character to nl@>; - return; - end; -j:=str_start(s); -while j<str_start(s+1) do -@z -%--------------------------------------- -@x [5] m.60 l.1539 - Omega -procedure slow_print(@!s:integer); {prints string |s|} -var j:pool_pointer; {current character code position} -begin if (s>=str_ptr) or (s<256) then print(s) -else begin j:=str_start[s]; - while j<str_start[s+1] do -@y -procedure slow_print(@!s:integer); {prints string |s|} -var j:pool_pointer; {current character code position} -begin if (s>=str_ptr) or (s<=biggest_char) then print(s) -else begin j:=str_start(s); - while j<str_start(s+1) do -@z -%--------------------------------------- -@x [5] m.61 l.1556 - Omega -wterm(banner); -if format_ident=0 then wterm_ln(' (no format preloaded)') -else begin slow_print(format_ident); print_ln; - end; -update_terminal; -@y -wterm(banner); -if format_ident=0 then wterm_ln(' (no format preloaded)') -else begin slow_print(format_ident); print_ln; - end; -wterm_ln('Copyright (c) 1994--2000 John Plaice and Yannis Haralambous'); -update_terminal; -@z -%--------------------------------------- -@x [5] m.63 l.1576 - Omega -procedure print_esc(@!s:str_number); {prints escape character, then |s|} -var c:integer; {the escape character code} -begin @<Set variable |c| to the current escape character@>; -if c>=0 then if c<256 then print(c); -@y -procedure print_esc(@!s:str_number); {prints escape character, then |s|} -var c:integer; {the escape character code} -begin @<Set variable |c| to the current escape character@>; -if c>=0 then if c<=biggest_char then print(c); -@z -%--------------------------------------- -@x [5] m.69 l.1654 - Omega -@p procedure print_roman_int(@!n:integer); -label exit; -var j,@!k: pool_pointer; {mysterious indices into |str_pool|} -@!u,@!v: nonnegative_integer; {mysterious numbers} -begin j:=str_start["m2d5c2l5x2v5i"]; v:=1000; -@y -@p procedure print_roman_int(@!n:integer); -label exit; -var j,@!k: pool_pointer; {mysterious indices into |str_pool|} -@!u,@!v: nonnegative_integer; {mysterious numbers} -begin j:=str_start("m2d5c2l5x2v5i"); v:=1000; -@z -%--------------------------------------- -@x [5] m.70 l.1674 - Omega -@p procedure print_current_string; {prints a yet-unmade string} -var j:pool_pointer; {points to current character code} -begin j:=str_start[str_ptr]; -@y -@p procedure print_current_string; {prints a yet-unmade string} -var j:pool_pointer; {points to current character code} -begin j:=str_start(str_ptr); -@z -%--------------------------------------- -@x [6] m.94 l.2052 - Omega -print_err("TeX capacity exceeded, sorry ["); -@y -print_err("Omega capacity exceeded, sorry ["); -@z -%--------------------------------------- -@x [18] m.260 l.5532 - Omega -while pool_ptr>str_start[str_ptr] do -@y -while pool_ptr>str_start(str_ptr) do -@z -%--------------------------------------- -@x [18] m.264 l.5610 - Omega -else begin k:=str_start[s]; l:=str_start[s+1]-k; -@y -else begin k:=str_start(s); l:=str_start(s+1)-k; -@z -%--------------------------------------- -@x [24] m.341 l.7219 - Omega -@!c,@!cc:ASCII_code; {constituents of a possible expanded code} -@!d:2..3; {number of excess characters in an expanded code} -@y -@!c,@!cc,@!ccc,@!cccc:ASCII_code; {constituents of a possible expanded code} -@!d:2..7; {number of excess characters in an expanded code} -@z -%--------------------------------------- -@x [24] m.352 l.7349 - Omega - else cur_chr:=16*cur_chr+cc-"a"+10 -@y - else cur_chr:=16*cur_chr+cc-"a"+10 -@d long_hex_to_cur_chr== - if c<="9" then cur_chr:=c-"0" @+else cur_chr:=c-"a"+10; - if cc<="9" then cur_chr:=16*cur_chr+cc-"0" - else cur_chr:=16*cur_chr+cc-"a"+10; - if ccc<="9" then cur_chr:=16*cur_chr+ccc-"0" - else cur_chr:=16*cur_chr+ccc-"a"+10; - if cccc<="9" then cur_chr:=16*cur_chr+cccc-"0" - else cur_chr:=16*cur_chr+cccc-"a"+10 - -@z -%--------------------------------------- -@x [24] m.352 l.7353 - Omega - begin c:=buffer[loc+1]; @+if c<@'200 then {yes we have an expanded char} -@y - begin if (cur_chr=buffer[loc+1]) and (cur_chr=buffer[loc+2]) and - ((loc+6)<=limit) then - begin c:=buffer[loc+3]; cc:=buffer[loc+4]; - ccc:=buffer[loc+5]; cccc:=buffer[loc+6]; - if is_hex(c) and is_hex(cc) and is_hex(ccc) and is_hex(cccc) then - begin loc:=loc+7; long_hex_to_cur_chr; goto reswitch; - end; - end; - c:=buffer[loc+1]; @+if c<@'200 then {yes we have an expanded char} -@z -%--------------------------------------- -@x [24] m.355 l.7416 - Omega -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 -begin if buffer[k]=cur_chr then @+if cat=sup_mark then @+if k<limit then - begin if (cur_chr=buffer[k+1]) and (cur_chr=buffer[k+2]) and - ((k+6)<=limit) then - begin c:=buffer[k+3]; cc:=buffer[k+4]; - ccc:=buffer[k+5]; cccc:=buffer[k+6]; - if is_hex(c) and is_hex(cc) and is_hex(ccc) and is_hex(cccc) then - begin d:=7; long_hex_to_cur_chr; buffer[k-1]:=cur_chr; - while k<=limit do - begin buffer[k]:=buffer[k+d]; incr(k); - end; - goto start_cs; - end - end - else 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 -end -@z -%--------------------------------------- -@x [26] m.407 l.8216 - Omega -begin p:=backup_head; link(p):=null; k:=str_start[s]; -while k<str_start[s+1] do - begin get_x_token; {recursion is possible here} -@^recursion@> - if (cur_cs=0)and@| - ((cur_chr=so(str_pool[k]))or(cur_chr=so(str_pool[k])-"a"+"A")) then - begin store_new_token(cur_tok); incr(k); - end - else if (cur_cmd<>spacer)or(p<>backup_head) then - begin back_input; - if p<>backup_head then back_list(link(backup_head)); - scan_keyword:=false; return; - end; - end; -@y -begin p:=backup_head; link(p):=null; -if s<too_big_char then begin - while true do - begin get_x_token; {recursion is possible here} -@^recursion@> - if (cur_cs=0)and@| - ((cur_chr=s)or(cur_chr=s-"a"+"A")) then - begin store_new_token(cur_tok); - flush_list(link(backup_head)); scan_keyword:=true; return; - end - else if (cur_cmd<>spacer)or(p<>backup_head) then - begin back_input; - if p<>backup_head then back_list(link(backup_head)); - scan_keyword:=false; return; - end; - end; - end; -k:=str_start(s); -while k<str_start(s+1) do - begin get_x_token; {recursion is possible here} -@^recursion@> - if (cur_cs=0)and@| - ((cur_chr=so(str_pool[k]))or(cur_chr=so(str_pool[k])-"a"+"A")) then - begin store_new_token(cur_tok); incr(k); - end - else if (cur_cmd<>spacer)or(p<>backup_head) then - begin back_input; - if p<>backup_head then back_list(link(backup_head)); - scan_keyword:=false; return; - end; - end; -@z -%--------------------------------------- -@x [29] m.517 l.10005 - Omega -@p procedure end_name; -begin if str_ptr+3>max_strings then - overflow("number of strings",max_strings-init_str_ptr); -@:TeX capacity exceeded number of strings}{\quad number of strings@> -if area_delimiter=0 then cur_area:="" -else begin cur_area:=str_ptr; - str_start[str_ptr+1]:=str_start[str_ptr]+area_delimiter; incr(str_ptr); - end; -if ext_delimiter=0 then - begin cur_ext:=""; cur_name:=make_string; - end -else begin cur_name:=str_ptr; - str_start[str_ptr+1]:=str_start[str_ptr]+ext_delimiter-area_delimiter-1; -@y -@p procedure end_name; -begin if str_ptr+3>max_strings then - overflow("number of strings",max_strings-init_str_ptr); -@:TeX capacity exceeded number of strings}{\quad number of strings@> -if area_delimiter=0 then cur_area:="" -else begin cur_area:=str_ptr; - str_start(str_ptr+1):=str_start(str_ptr)+area_delimiter; incr(str_ptr); - end; -if ext_delimiter=0 then - begin cur_ext:=""; cur_name:=make_string; - end -else begin cur_name:=str_ptr; - str_start(str_ptr+1):=str_start(str_ptr)+ext_delimiter-area_delimiter-1; -@z -%--------------------------------------- -@x [29] m.519 l.10039 - Omega - if k<=file_name_size then name_of_file[k]:=xchr[c]; - end - -@p procedure pack_file_name(@!n,@!a,@!e:str_number); -var k:integer; {number of positions filled in |name_of_file|} -@!c: ASCII_code; {character being packed} -@!j:pool_pointer; {index into |str_pool|} -begin k:=0; -for j:=str_start[a] to str_start[a+1]-1 do append_to_name(so(str_pool[j])); -for j:=str_start[n] to str_start[n+1]-1 do append_to_name(so(str_pool[j])); -for j:=str_start[e] to str_start[e+1]-1 do append_to_name(so(str_pool[j])); -@y - if k<=file_name_size then name_of_file[k]:=xchr[c]; - end - -@p procedure pack_file_name(@!n,@!a,@!e:str_number); -var k:integer; {number of positions filled in |name_of_file|} -@!c: ASCII_code; {character being packed} -@!j:pool_pointer; {index into |str_pool|} -begin k:=0; -for j:=str_start(a) to str_start(a+1)-1 do append_to_name(so(str_pool[j])); -for j:=str_start(n) to str_start(n+1)-1 do append_to_name(so(str_pool[j])); -for j:=str_start(e) to str_start(e+1)-1 do append_to_name(so(str_pool[j])); -@z -%--------------------------------------- -@x [29] m.523 l.10095 - Omega -for j:=1 to n do append_to_name(xord[TEX_format_default[j]]); -for j:=a to b do append_to_name(buffer[j]); -for j:=format_default_length-format_ext_length+1 to format_default_length do - append_to_name(xord[TEX_format_default[j]]); -@y -for j:=1 to n do append_to_name(TEX_format_default[j]); -for j:=a to b do append_to_name(buffer[j]); -for j:=format_default_length-format_ext_length+1 to format_default_length do - append_to_name(TEX_format_default[j]); -@z -%--------------------------------------- -@x [29] m.524 l.10155 - Omega -else begin for k:=1 to name_length do append_char(xord[name_of_file[k]]); -@y -else begin for k:=1 to name_length do append_char(name_of_file[k]); -@z -%--------------------------------------- -@x [29] m.536 l.10324 - Omega -begin wlog(banner); -slow_print(format_ident); print(" "); -print_int(day); print_char(" "); -months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; -for k:=3*month-2 to 3*month do wlog(months[k]); -print_char(" "); print_int(year); print_char(" "); -print_two(time div 60); print_char(":"); print_two(time mod 60); -end -@y -begin wlog(banner); -slow_print(format_ident); print_nl(""); -print_int(day); print_char(" "); -months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; -for k:=3*month-2 to 3*month do wlog(months[k]); -print_char(" "); print_int(year); print_char(" "); -print_two(time div 60); print_char(":"); print_two(time mod 60); -print_nl("Copyright (c) 1994--2000 John Plaice and Yannis Haralambous"); -end -@z -%--------------------------------------- -@x [32] m.595 l.11860 - Omega -@!dvi_buf:array[dvi_index] of eight_bits; {buffer for \.{DVI} output} -@y -@!dvi_buf:array[dvi_index] of real_eight_bits; {buffer for \.{DVI} output} -@z -%--------------------------------------- -@x [32] m.617 l.12262 - Omega - print(" TeX output "); print_int(year); print_char("."); -@y - print("Omega output, Version 3.1415926-1.23.2.3, "); - print_int(year); print_char("."); -@z -%--------------------------------------- -@x [32] m.617 l.12267 - Omega - for s:=str_start[str_ptr] to pool_ptr-1 do dvi_out(so(str_pool[s])); - pool_ptr:=str_start[str_ptr]; {flush the current string} -@y - for s:=str_start(str_ptr) to pool_ptr-1 do dvi_out(so(str_pool[s])); - pool_ptr:=str_start(str_ptr); {flush the current string} -@z -%--------------------------------------- -@x [36] m.765 l.15021 - Omega -magic_offset:=str_start[math_spacing]-9*ord_noad -@y -magic_offset:=str_start(math_spacing)-9*ord_noad -@z -%--------------------------------------- -@x [42] m.931 l.18172 - Omega - begin j:=1; u:=str_start[k]; -@y - begin j:=1; u:=str_start(k); -@z -%--------------------------------------- -@x [42] m.940 l.18296 - Omega -u:=str_start[k]; v:=str_start[s]; -repeat if str_pool[u]<str_pool[v] then goto found; -if str_pool[u]>str_pool[v] then goto not_found; -incr(u); incr(v); -until u=str_start[k+1]; -@y -u:=str_start(k); v:=str_start(s); -repeat if str_pool[u]<str_pool[v] then goto found; -if str_pool[u]>str_pool[v] then goto not_found; -incr(u); incr(v); -until u=str_start(k+1); -@z -%--------------------------------------- -@x [49] m.1252 l.23232 - Omega - print_err("Patterns can be loaded only by INITEX"); -@y - print_err("Patterns can be loaded only by INIOMEGA"); -@z -%--------------------------------------- -@x [50] m.1301 l.23682 - Omega -format_ident:=" (INITEX)"; -@y -format_ident:=" (INIOMEGA)"; -@z -%--------------------------------------- -% We do not store any information for strings between 257 and 65535. - -@x [50] m.1309 l.23814 - Omega -for k:=0 to str_ptr do dump_int(str_start[k]); -@y -for k:=too_big_char to str_ptr do dump_int(str_start(k)); -@z -%--------------------------------------- -% We recreate the information for strings between 257 and 65535. - -@x [50] m.1310 l.23831 - Omega -for k:=0 to str_ptr do undump(0)(pool_ptr)(str_start[k]); -@y -for k:=too_big_char to str_ptr do undump(0)(pool_ptr)(str_start(k)); -@z -%--------------------------------------- -@x [51] m.1334 l.24266 - Omega - wlog_ln('Here is how much of TeX''s memory',' you used:'); -@y - wlog_ln('Here is how much of Omega''s memory',' you used:'); -@z -%--------------------------------------- -@x [51] m.1335 l.24338 - Omega - print_nl("(\dump is performed only by INITEX)"); return; -@:dump_}{\.{\\dump...only by INITEX}@> -@y - print_nl("(\dump is performed only by INIOMEGA)"); return; -@:dump_}{\.{\\dump...only by INIOMEGA}@> -@z -%--------------------------------------- -@x [53] m.1368 l.24747 - Omega -for k:=str_start[str_ptr] to pool_ptr-1 do dvi_out(so(str_pool[k])); -pool_ptr:=str_start[str_ptr]; {erase the string} -@y -for k:=str_start(str_ptr) to pool_ptr-1 do dvi_out(so(str_pool[k])); -pool_ptr:=str_start(str_ptr); {erase the string} -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/omtrans.ch b/Build/source/texk/web2c/omegadir/omtrans.ch deleted file mode 100644 index 7d62b23d6b2..00000000000 --- a/Build/source/texk/web2c/omegadir/omtrans.ch +++ /dev/null @@ -1,822 +0,0 @@ -% omtrans.ch: Characters sets for input and output -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [3] m.25 l.767 - Omega Translation -initialization. We shall define a word file later; but it will be possible -for us to specify simple operations on word files before they are defined. -@y -initialization. We shall define a word file later; but it will be possible -for us to specify simple operations on word files before they are defined. - -@d no_mode=0 -@d onebyte_mode=1 -@d ebcdic_mode=2 -@d twobyte_mode=3 -@d twobyteLE_mode=4 -@d UTF8_mode=5 -@d UTF16_mode=6 -@d UTF16LE_mode=7 - -@d trans_input=0 -@d trans_output=1 -@d trans_default_input=2 -@d trans_default_output=3 -@d trans_no_input=4 -@d trans_no_output=5 -@d trans_no_default_input=6 -@d trans_no_default_output=7 - -@d mode_input=0 -@d mode_output=1 -@d mode_default_input=2 -@d mode_default_output=3 -@d mode_no_input=4 -@d mode_no_output=5 -@d mode_no_default_input=6 -@d mode_no_default_output=7 -@z -%--------------------------------------- -@x [3] m.30 l.890 - Omega Translation -@!max_buf_stack:0..buf_size; {largest index used in |buffer|} -@y -@!max_buf_stack:0..buf_size; {largest index used in |buffer|} -@!term_in_mode:halfword; -@!term_in_translation:halfword; -@z -%--------------------------------------- -@x [3] m.37 l.1065 - Omega Translation - if not input_ln(term_in,true) then {this shouldn't happen} -@y - if not new_input_ln(term_in,term_in_mode,term_in_translation,true) -then {this shouldn't happen} -@z -%--------------------------------------- -@x [5] m.54 l. - Omega Translation -@!log_file : alpha_file; {transcript of \TeX\ session} -@y -@!log_file : alpha_file; {transcript of \TeX\ session} -@!term_out_mode:halfword; -@!term_out_translation:halfword; -@z -%--------------------------------------- -@x [5] m.59 l. - Omega Translation -@<Basic printing...@>= -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; -new_string: begin if pool_ptr<pool_size then append_char(s); - end; {we drop characters if the string space is full} -othercases write(write_file[selector],xchr[s]) -endcases;@/ -incr(tally); -exit:end; -@y -@d omega_write(#)==case term_out_mode of - no_mode: write(#,xchr[s]); - onebyte_mode,ebcdic_mode: write(#,xchr[s]); - twobyte_mode: begin write(#,xchr[s div @"100]); - write(#,xchr[s mod @"100]); - end; - twobyteLE_mode: begin write(#,xchr[s mod @"100]); - write(#,xchr[s div @"100]); - end; - UTF8_mode: begin - if s<@"80 then write(#, xchr[s]) - else if s<@"800 then begin - write(#, xchr[@"C0 + s div @"40]); - write(#, xchr[@"80 + s mod @"40]); - end - else begin - write(#, xchr[@"E0 + s div @"1000]); - write(#, xchr[@"80 + (s mod @"1000) div @"40]); - write(#, xchr[@"80 + (s mod @"1000) mod @"40]); - end - end; - UTF16_mode: begin - end; - UTF16LE_mode: begin - end; - end - -@d omega_file_write(#)==case write_file_mode[#] of - no_mode: write(write_file[#],xchr[s]); - onebyte_mode,ebcdic_mode: write(write_file[#],xchr[s]); - twobyte_mode: begin write(write_file[#],xchr[s div @"100]); - write(write_file[#],xchr[s mod @"100]); - end; - twobyteLE_mode: begin write(write_file[#],xchr[s mod @"100]); - write(write_file[#],xchr[s div @"100]); - end; - UTF8_mode: begin - end; - UTF16_mode: begin - end; - UTF16LE_mode: begin - end; - end - -@<Basic printing...@>= -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 omega_write(term_out); omega_write(log_file); - 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 omega_write(log_file); incr(file_offset); - if file_offset=max_print_line then print_ln; - end; -term_only: begin omega_write(term_out); 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; -new_string: begin if pool_ptr<pool_size then append_char(s); - end; {we drop characters if the string space is full} -othercases omega_file_write(selector) -endcases;@/ -incr(tally); -exit:end; -@z -%--------------------------------------- -@x [5] m.59 l. - Omega Translation -procedure print(@!s:integer); {prints string |s|} -label exit; -var j:pool_pointer; {current character code position} -@!nl:integer; {new-line character to restore} -@!l:integer; {for printing 16-bit characters} -begin if s>=str_ptr then s:="???" {this can't happen} -@.???@> -else if s<biggest_char 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; - @<Set newline character to -1@>; - if s<@"20 then begin - print_char(@"5E); print_char(@"5E); print_char(s+@'100); - end - else if s<@"7F then - print_char(s) - else if s=@"7F then begin - print_char(@"5E); print_char(@"5E); print_char(s-@'100); - end - else if s<@"100 then begin - print_char(@"5E); print_char(@"5E); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end - else begin {Here is where we generate the strings on the fly.} - print_char(@"5E); print_char(@"5E); - print_char(@"5E); print_char(@"5E); - print_lc_hex(s div @"1000); print_lc_hex((s mod @"1000) div @"100); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end; - @<Set newline character to 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; - -@ Control sequence names, file names, and strings constructed with -\.{\\string} might contain |ASCII_code| values that can't -be printed using |print_char|. Therefore we use |slow_print| for them: - -@<Basic print...@>= -procedure slow_print(@!s:integer); {prints string |s|} -var j:pool_pointer; {current character code position} -begin if (s>=str_ptr) or (s<=biggest_char) then print(s) -else begin j:=str_start(s); - while j<str_start(s+1) do - begin print(so(str_pool[j])); incr(j); - end; - end; -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} -@!l:integer; {for printing 16-bit characters} -begin if s>=str_ptr then s:="???" {this can't happen} -@.???@> -else if s<biggest_char 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; - @<Set newline character to -1@>; - if s<@"20 then begin - print_char(@"5E); print_char(@"5E); print_char(s+@'100); - end - else if s<@"7F then - print_char(s) - else if s=@"7F then begin - print_char(@"5E); print_char(@"5E); print_char(s-@'100); - end - else if s<@"100 then begin - print_char(@"5E); print_char(@"5E); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end - else begin {Here is where we generate the strings on the fly.} - print_char(@"5E); print_char(@"5E); - print_char(@"5E); print_char(@"5E); - print_lc_hex(s div @"1000); print_lc_hex((s mod @"1000) div @"100); - print_lc_hex((s mod @"100) div @"10); print_lc_hex(s mod @"10); - end; - @<Set newline character to 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; - -procedure print_nl(@!s:str_number); {prints string |s| at beginning of line} -begin if ((term_offset>0)and(odd(selector)))or@| - ((file_offset>0)and(selector>=log_only)) then print_ln; -print(s); -end; - -procedure overflow_ocp_buf_size; forward; -procedure overflow_ocp_stack_size; forward; - -procedure omega_print(s:str_number); -var new_s:str_number; - om_mode,om_translation:integer; - j:integer; -begin -om_mode:=no_mode; -om_translation:=0; -case selector of -term_and_log,log_only,term_only: begin - om_mode:=term_out_mode; - if om_mode<>no_mode then om_translation:=term_out_translation; - end; -no_print,pseudo,new_string: do_nothing; -othercases begin - om_mode:=write_file_mode[selector]; - if om_mode<>no_mode then om_translation:=write_file_translation[selector]; - end -endcases; - -if (om_mode=no_mode) or - ((om_mode=onebyte_mode) and (om_translation=0)) then - begin - j:=str_start(s); - while j<str_start(s+1) do begin - new_s:=so(str_pool[j]); - if new_s<@"20 then begin - print_char(@"5E); print_char(@"5E); print_char(new_s+@'100); - end - else if new_s<@"7F then - print_char(new_s) - else if new_s=@"7F then begin - print_char(@"5E); print_char(@"5E); print_char(new_s-@'100); - end - else if new_s<@"100 then begin - print_char(@"5E); print_char(@"5E); - print_lc_hex((new_s mod @"100) div @"10); print_lc_hex(new_s mod @"10); - end - else begin {Here is where we generate the strings on the fly.} - print_char(@"5E); print_char(@"5E); - print_char(@"5E); print_char(@"5E); - print_lc_hex(new_s div @"1000); - print_lc_hex((new_s mod @"1000) div @"100); - print_lc_hex((new_s mod @"100) div @"10); - print_lc_hex(new_s mod @"10); - end; - incr(j); - end; - end -else begin - if om_translation=0 then begin - j:=str_start(s); - otp_counter:=1; - while j<str_start(s+1) do begin - otp_output_buf[otp_counter]:=so(str_pool[j]); - incr(otp_counter); - incr(j); - end; - otp_output_end:=otp_counter; - end - else begin - otp_input_start:=0; - otp_input_last:=0; - otp_stack_used:=0; - otp_stack_last:=0; - otp_stack_new:=0; - otp_output_end:=0; - otp_pc:=0; - otp_finished:=false; - otp_calc_ptr:=0; - otp_calcs[otp_calc_ptr]:=0; - otp_state_ptr:=0; - otp_states[otp_state_ptr]:=0; - otp_input_ocp:=om_translation; - j:=str_start(s); - otp_counter:=1; - while j<str_start(s+1) do begin - otp_input_buf[otp_counter]:=so(str_pool[j]); - incr(otp_counter); - incr(j); - end; - otp_input_end:=otp_counter; - while not otp_finished do - @<Run the OTP program@>; - end; - for otp_counter:=1 to (otp_output_end-1) do begin - new_s:=otp_output_buf[otp_counter]; - if (om_mode<twobyte_mode) and (new_s>255) then - begin - print_char(@"5E); print_char(@"5E); - print_char(@"5E); print_char(@"5E); - print_lc_hex(new_s div @"1000); - print_lc_hex((new_s mod @"1000) div @"100); - print_lc_hex((new_s mod @"100) div @"10); - print_lc_hex(new_s mod @"10); - end - else - print_char(new_s); - end; - end; -end; - -@ Control sequence names, file names, and strings constructed with -\.{\\string} might contain |ASCII_code| values that can't -be printed using |print_char|. Therefore we use |slow_print| for them: - -@<Basic print...@>= -procedure slow_print(@!s:integer); {prints string |s|} -begin if (s>=str_ptr) or (s<=biggest_char) then print(s) -else omega_print(s); -end; -@z -%--------------------------------------- -@x [5] - Omega Translation -procedure print_nl(@!s:str_number); {prints string |s| at beginning of line} -begin if ((term_offset>0)and(odd(selector)))or@| - ((file_offset>0)and(selector>=log_only)) then print_ln; -print(s); -end; -@y -@z -%--------------------------------------- -@x [5] m.71 l.1694 - Omega Translation -if not input_ln(term_in,true) then fatal_error("End of file on the terminal!"); -@y -if not new_input_ln(term_in,term_in_mode,term_in_translation,true) -then fatal_error("End of file on the terminal!"); -@z -%--------------------------------------- -@x [15] m.209 l.4170 - Omega Translation -@d max_command=ocp_trace_level - {the largest command code seen at |big_switch|} -@y -@d char_trans=ocp_trace_level+1 -@d char_mode=char_trans+1 -@d max_command=char_mode - {the largest command code seen at |big_switch|} -@z -%--------------------------------------- -@x [17] m.230 l.4722 - Omega Translation -@d toks_base=ocp_active_base+max_active_ocp_lists - {table of |number_regs| token list registers} -@y -@d ocp_input_mode_base=ocp_active_base+max_active_ocp_lists -@d ocp_input_onebyte_translation_base =ocp_input_mode_base+ 1 -@d ocp_input_ebcdic_translation_base =ocp_input_mode_base+ 2 -@d ocp_input_twobyte_translation_base =ocp_input_mode_base+ 3 -@d ocp_input_twobyteLE_translation_base =ocp_input_mode_base+ 4 -@d ocp_input_UTF8_translation_base =ocp_input_mode_base+ 5 -@d ocp_input_UTF16_translation_base =ocp_input_mode_base+ 6 -@d ocp_input_UTF16LE_translation_base =ocp_input_mode_base+ 7 - -@d ocp_output_mode_base =ocp_input_mode_base+ 8 -@d ocp_output_onebyte_translation_base =ocp_input_mode_base+ 9 -@d ocp_output_ebcdic_translation_base =ocp_input_mode_base+ 10 -@d ocp_output_twobyte_translation_base =ocp_input_mode_base+ 11 -@d ocp_output_twobyteLE_translation_base =ocp_input_mode_base+ 12 -@d ocp_output_UTF8_translation_base =ocp_input_mode_base+ 13 -@d ocp_output_UTF16_translation_base =ocp_input_mode_base+ 14 -@d ocp_output_UTF16LE_translation_base =ocp_input_mode_base+ 15 - -@d toks_base =ocp_input_mode_base+16 -@z -%--------------------------------------- -@x [22] m.304 l.6535 - Omega Translation -@!input_file : array[1..max_in_open] of alpha_file; -@y -@!input_file : array[1..max_in_open] of alpha_file; -@!input_file_mode : array[1..max_in_open] of halfword; -@!input_file_translation : array[1..max_in_open] of halfword; -@z -%--------------------------------------- -@x [23] m.331 l.7066 - Omega Translation -param_ptr:=0; max_param_stack:=0; -@y -param_ptr:=0; max_param_stack:=0; -geq_define(ocp_input_mode_base,data,1); -term_in_mode:=equiv(ocp_input_mode_base); -term_out_mode:=equiv(ocp_input_mode_base); -if term_in_mode>0 -then term_in_translation:= - equiv(ocp_input_onebyte_translation_base+term_in_mode-1); -if term_out_mode>0 -then term_out_translation:= - equiv(ocp_output_onebyte_translation_base+term_in_mode-1); -@z -%--------------------------------------- -@x [24] m.362 l.7066 - Omega Translation - begin if input_ln(cur_file,true) then {not end of file} -@y - begin if new_input_ln(cur_file,input_file_mode[index], - input_file_translation[index],true) then {not end of file} -@z -%--------------------------------------- -@x [27] m.480 l.9411 - Omega Translation -@!read_file:array[0..15] of alpha_file; {used for \.{\\read}} -@y -@!read_file:array[0..15] of alpha_file; {used for \.{\\read}} -@!read_file_mode:array[0..15] of halfword; -@!read_file_translation:array[0..15] of halfword; -@z -%--------------------------------------- -@x [27] m.485 l.9475 - Omega Translation -@<Input the first line of |read_file[m]|@>= -if input_ln(read_file[m],false) then read_open[m]:=normal -else begin a_close(read_file[m]); read_open[m]:=closed; - end -@y -@<Input the first line of |read_file[m]|@>= -begin read_file_mode[m]:= - get_file_mode(read_file[m], equiv(ocp_input_mode_base)); -if read_file_mode[m]>0 -then read_file_translation[m]:= - equiv(ocp_input_onebyte_translation_base+read_file_mode[m]-1); -if new_input_ln(read_file[m],read_file_mode[m], - read_file_translation[m],false) then read_open[m]:=normal -else begin a_close(read_file[m]); read_open[m]:=closed; - end -end -@z -%--------------------------------------- -@x [27] m.486 l.9484 - Omega Translation -begin if not input_ln(read_file[m],true) then - begin a_close(read_file[m]); read_open[m]:=closed; -@y -begin if not new_input_ln(read_file[m], -read_file_mode[m],read_file_translation[m],true) then - begin a_close(read_file[m]); read_open[m]:=closed; -@z -%--------------------------------------- -@x [29] m.538 l.10371 - Omega Translation -begin line:=1; -if input_ln(cur_file,false) then do_nothing; -@y -begin line:=1; -input_file_mode[index]:= - get_file_mode(cur_file, equiv(ocp_input_mode_base)); -if input_file_mode[index]>0 -then input_file_translation[index]:= - equiv(ocp_input_onebyte_translation_base+input_file_mode[index]-1); -if new_input_ln(cur_file,input_file_mode[index], - input_file_translation[index],false) then do_nothing; -@z -%--------------------------------------- -@x [49] m.1210 l.22629 - Omega Translation -any_mode(ocp_trace_level) : prefixed_command; -@y -any_mode(ocp_trace_level) : prefixed_command; -any_mode(char_mode) : do_char_mode; -any_mode(char_trans) : do_char_translation; -@z -%--------------------------------------- -@x [49] m.1343 l.24928 - Omega Translation -@!write_file:array[0..15] of alpha_file; -@y -@!write_file:array[0..15] of alpha_file; -@!write_file_mode:array[0..15] of halfword; -@!write_file_translation:array[0..15] of halfword; -@z -%--------------------------------------- -@x -@* \[54] $\Omega$ changes. - -@y -@* \[54] $\Omega$ changes. - -@ Here we do the main work required for reading and interpreting - $\Omega$ Input Translation Processes. - -@ @<Put each...@>= -primitive("InputTranslation", char_trans, trans_input); -primitive("OutputTranslation", char_trans, trans_output); -primitive("DefaultInputTranslation", char_trans, trans_default_input); -primitive("DefaultOutputTranslation", char_trans, trans_default_output); -primitive("noInputTranslation", char_trans, trans_no_input); -primitive("noOutputTranslation", char_trans, trans_no_output); -primitive("noDefaultInputTranslation", char_trans, trans_no_default_input); -primitive("noDefaultOutputTranslation", char_trans, trans_no_default_output); -primitive("InputMode", char_mode, mode_input); -primitive("OutputMode", char_mode, mode_output); -primitive("DefaultInputMode", char_mode, mode_default_input); -primitive("DefaultOutputMode", char_mode, mode_default_output); -primitive("noInputMode", char_mode, mode_no_input); -primitive("noOutputMode", char_mode, mode_no_output); -primitive("noDefaultInputMode", char_mode, mode_no_default_input); -primitive("noDefaultOutputMode", char_mode, mode_no_default_output); - -geq_define(ocp_input_onebyte_translation_base, data, 0); -geq_define(ocp_input_ebcdic_translation_base, data, 0); -geq_define(ocp_input_twobyte_translation_base, data, 0); -geq_define(ocp_input_twobyteLE_translation_base, data, 0); -geq_define(ocp_input_UTF8_translation_base, data, 0); -geq_define(ocp_input_UTF16_translation_base, data, 0); -geq_define(ocp_input_UTF16LE_translation_base, data, 0); -geq_define(ocp_input_mode_base, data, 0); - -geq_define(ocp_output_onebyte_translation_base, data, 0); -geq_define(ocp_output_ebcdic_translation_base, data, 0); -geq_define(ocp_output_twobyte_translation_base, data, 0); -geq_define(ocp_output_twobyteLE_translation_base, data, 0); -geq_define(ocp_output_UTF8_translation_base, data, 0); -geq_define(ocp_output_UTF16_translation_base, data, 0); -geq_define(ocp_output_UTF16LE_translation_base, data, 0); -geq_define(ocp_output_mode_base, data, 0); - -@ @<Cases of |print_cmd_chr|...@>= -char_trans: - case chr_code of - trans_input: print_esc("InputTranslation"); - trans_output: print_esc("OutputTranslation"); - trans_default_input: print_esc("DefaultInputTranslation"); - trans_default_output: print_esc("DefaultOutputTranslation"); - trans_no_input: print_esc("noInputTranslation"); - trans_no_output: print_esc("noOutputTranslation"); - trans_no_default_input: print_esc("noDefaultInputTranslation"); - trans_no_default_output: print_esc("noDefaultOutputTranslation"); - end; -char_mode: - case chr_code of - mode_input: print_esc("InputMode"); - mode_output: print_esc("OutputMode"); - mode_default_input: print_esc("DefaultInputMode"); - mode_default_output: print_esc("DefaultOutputMode"); - mode_no_input: print_esc("noInputMode"); - mode_no_output: print_esc("noOutputMode"); - mode_no_default_input: print_esc("noDefaultInputMode"); - mode_no_default_output: print_esc("noDefaultOutputMode"); - end; - -@ @<Declare subprocedures for |prefixed_command|@>= -procedure scan_file_referrent; -begin -if scan_keyword("currentfile") then cur_val:=max_halfword -else scan_int; -end; - -procedure scan_mode; -begin -if scan_keyword("onebyte") then cur_val:=onebyte_mode -else if scan_keyword("ebcdic") then cur_val:=ebcdic_mode -else if scan_keyword("twobyteLE") then cur_val:=twobyteLE_mode -else if scan_keyword("twobyte") then cur_val:=twobyte_mode -else if scan_keyword("UTF8") then cur_val:=UTF8_mode -else if scan_keyword("UTF16LE") then cur_val:=UTF16LE_mode -else if scan_keyword("UTF16") then cur_val:=UTF16_mode -else begin print_err("Invalid input mode"); cur_val:=0; end; -end; - -procedure do_char_translation; -var kind:halfword; - fileref:halfword; - moderef:halfword; - ocpref:halfword; -begin -fileref:=0; -moderef:=0; -ocpref:=0; -kind:=cur_chr; -if (kind mod 4) <= 1 then begin - scan_file_referrent; - fileref:=cur_val; - end -else begin - scan_mode; - moderef:=cur_val; - end; -if kind < 4 then begin - scan_ocp_ident; - ocpref:=cur_val; - end; -case (kind mod 4) of - trans_input: begin - if (fileref>=0) and (fileref<=15) then begin - read_file_translation[fileref]:=ocpref; - end - else if fileref<>max_halfword then begin - term_in_translation:=ocpref; - end - else begin - base_ptr:=input_ptr; input_stack[base_ptr]:=cur_input; - while state = token_list do - begin - decr(base_ptr); - cur_input:=input_stack[base_ptr]; - end; - if name>17 then input_file_translation[index]:=ocpref; - cur_input:=input_stack[input_ptr]; - end; - end; - trans_output: begin - if (fileref>=0) and (fileref<=15) then begin - write_file_translation[fileref]:=ocpref; - end - else begin - term_out_translation:=ocpref; - end; - end; - trans_default_input: begin - geq_define(ocp_input_mode_base+moderef,data,ocpref); - end; - trans_default_output: begin - geq_define(ocp_output_mode_base+moderef,data,ocpref); - end; - end; -end; - -procedure do_char_mode; -var kind:halfword; - fileref:halfword; - moderef:halfword; -begin -fileref:=0; -moderef:=0; -kind:=cur_chr; -if (kind mod 4) <= 1 then begin - scan_file_referrent; - fileref:=cur_val; - end; -if kind < 4 then begin - scan_mode; - moderef:=cur_val; - end; -case (kind mod 4) of - trans_input: begin - if (fileref>=0) and (fileref<=15) then begin - read_file_mode[fileref]:=moderef; - end - else if fileref<>max_halfword then begin - term_in_mode:=moderef; - end - else begin - base_ptr:=input_ptr; input_stack[base_ptr]:=cur_input; - while state = token_list do - begin - decr(base_ptr); - cur_input:=input_stack[base_ptr]; - end; - if name>17 then input_file_mode[index]:=moderef; - cur_input:=input_stack[input_ptr]; - end; - end; - trans_output: begin - if (fileref>=0) and (fileref<=15) then begin - write_file_mode[fileref]:=moderef; - end - else begin - term_out_mode:=moderef; - end; - end; - trans_default_input: begin - geq_define(ocp_input_mode_base,data,moderef); - end; - trans_default_output: begin - geq_define(ocp_output_mode_base,data,moderef); - end; - end; -end; - -function p_new_input_ln(f:alpha_file; -the_mode,translation:halfword; -bypass_eoln:boolean):boolean; -begin -if (the_mode=no_mode) or ((the_mode=onebyte_mode) and (translation=0)) -then p_new_input_ln:=input_ln(f,bypass_eoln) -else if not newinputline(f,the_mode,bypass_eoln) -then p_new_input_ln:=false -else if translation=0 then -begin - if (first+otp_input_end)>=buf_size then overflow("buffer size", buf_size); - state:=new_line; - start:=first; - last:=start; - loc:=start; - for otp_counter:=1 to otp_input_end do - begin - buffer[last]:=otp_input_buf[otp_counter]; - incr(last); - end; - while buffer[last-1]=' ' do decr(last); - limit:=last-1; - p_new_input_ln:=true -end -else -begin - otp_input_start:=0; - otp_input_last:=0; - otp_stack_used:=0; - otp_stack_last:=0; - otp_stack_new:=0; - otp_output_end:=0; - otp_pc:=0; - otp_finished:=false; - otp_calc_ptr:=0; - otp_calcs[otp_calc_ptr]:=0; - otp_state_ptr:=0; - otp_states[otp_state_ptr]:=0; - otp_input_ocp:=translation; - while not otp_finished do - @<Run the OTP program@>; - if (first+otp_output_end)>=buf_size then overflow("buffer size", buf_size); - state:=new_line; - start:=first; - last:=start; - loc:=start; - for otp_counter:=1 to otp_output_end do - begin - buffer[last]:=otp_output_buf[otp_counter]; - incr(last); - end; - while buffer[last-1]=' ' do decr(last); - limit:=last-1; - p_new_input_ln:=true -end -end; - - -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/omegadir/omxml.ch b/Build/source/texk/web2c/omegadir/omxml.ch deleted file mode 100644 index db743bc06ad..00000000000 --- a/Build/source/texk/web2c/omegadir/omxml.ch +++ /dev/null @@ -1,2099 +0,0 @@ -% omxml.ch: Generate XML, MathML, HTML, etc. -% -% This file is part of Omega, -% which is based on the web2c distribution of TeX, -% -% Copyright (c) 1994--2001 John Plaice and Yannis Haralambous -% -% Omega is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% Omega is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Omega; if not, write to the Free Software Foundation, Inc., -% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -% -%--------------------------------------- -@x [1] m.11 l.392 - Omega -@!font_max=65535; {maximum internal font number; must be at most |font_biggest|} -@y -@!font_sort_max=65535; {maximum internal font sort number} -@!font_max=65535; {maximum internal font number; must be at most |font_biggest|} -@z -%--------------------------------------- -@x [1] m.12 l.437 - Omega -@d number_fonts=font_biggest-font_base+2 -@y -@d number_fonts=font_biggest-font_base+2 -@d font_sort_base=0 -@d font_sort_biggest=65535 {the biggest font sort} -@d number_font_sorts=font_sort_biggest-font_sort_base+2 -@z -%--------------------------------------- -@x [5] m.57 l.1446 - Omega -othercases write_ln(write_file[selector]) -@y -othercases if selector>max_selector then - write_ln(output_files[selector-max_selector]) - else - write_ln(write_file[selector]) -@z -%--------------------------------------- -@x [5] m.58 l.1465 - Omega -othercases omega_file_write(selector) -@y -othercases if selector>max_selector then - write(output_files[selector-max_selector],xchr[s]) - else - omega_file_write(selector) -@z -%--------------------------------------- -@x [10] m.160 l.3270 - Omega -@d biggest_ordinary_node=info_node -@y - -@d sgml_text_node=0 -@d sgml_math_node=1 -@d sgml_vert_node=2 - -@d sgml_node=info_node+1 {|type| for an SGML node} -@d sgml_node_size=5 -@d sgml_tag(#)==mem[#+1].int -@d sgml_attrs(#)==mem[#+2].int -@d sgml_singleton(#)==info(#+3) -@d sgml_info(#)==link(#+3) -@d sgml_kind(#)==mem[#+4].int - -@d sgml_attr_node=info_node+2 {|type| for an SGML attribute node} -@d sgml_attr_node_size=4 - -@d sgml_entity_node=info_node+3 {|type| for an SGML entity node} -@d sgml_entity_node_size=2 -@d sgml_entity_string(#)==mem[#+1].int - -@d biggest_ordinary_node=sgml_entity_node - -@p -function new_sgml_node:pointer; -var p:pointer; -begin p:=get_node(sgml_node_size); -type(p):=sgml_node; -sgml_tag(p):=0; -sgml_attrs(p):=0; -sgml_info(p):=0; -sgml_singleton(p):=0; -sgml_kind(p):=0; -new_sgml_node:=p; -end; - -function new_sgml_attr_node:pointer; -var p:pointer; -begin p:=get_node(sgml_attr_node_size); -type(p):=sgml_attr_node; -sgml_tag(p):=0; -sgml_attrs(p):=0; -sgml_info(p):=0; -sgml_singleton(p):=0; -new_sgml_attr_node:=p; -end; - -function new_sgml_entity_node:pointer; -var p:pointer; -begin p:=get_node(sgml_entity_node_size); -type(p):=sgml_entity_node; -sgml_entity_string(p):=0; -new_sgml_entity_node:=p; -end; -@z -%--------------------------------------- -@x [12] m.174 l.3520 - Omega -@p procedure short_display(@!p:integer); {prints highlights of list |p|} -var n:integer; {for replacement counts} -begin while p>mem_min do - begin if is_char_node(p) then - begin if p<=mem_end then - begin if font(p)<>font_in_short_display then - begin if (font(p)<font_base)or(font(p)>font_max) then - print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); font_in_short_display:=font(p); - end; - print_ASCII(qo(character(p))); -@y -@p procedure short_display(@!p:integer); {prints highlights of list |p|} -var n:integer; {for replacement counts} - fsort:integer; -begin while p>mem_min do - begin if is_char_node(p) then - begin if p<=mem_end then - begin if font(p)<>font_in_short_display then - begin if (font(p)<font_base)or(font(p)>font_max) then - print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); font_in_short_display:=font(p); - end; - if not SGML_show_entities then - print_ASCII(qo(character(p))) - else begin - fsort:=font_name_sort(font(p)); - if fsort<>0 then begin - if (font_sort_char_entity(fsort)(character(p))<>0) then - slow_print(font_sort_char_entity(fsort)(character(p))) - else - print_ASCII(qo(character(p))); - end - else - print_ASCII(qo(character(p))); - end; -@z -%--------------------------------------- -@x [12] m.176 l.3563 - Omega -procedure print_font_and_char(@!p:integer); {prints |char_node| data} -begin if p>mem_end then print_esc("CLOBBERED.") -else begin if (font(p)<font_base)or(font(p)>font_max) then print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); print_ASCII(qo(character(p))); - end; -end; -@y -procedure print_font_and_char(@!p:integer); {prints |char_node| data} -var fsort:integer; -begin if p>mem_end then print_esc("CLOBBERED.") -else begin if (font(p)<font_base)or(font(p)>font_max) then print_char("*") -@.*\relax@> - else @<Print the font identifier for |font(p)|@>; - print_char(" "); - if not SGML_show_entities then - print_ASCII(qo(character(p))) - else begin - fsort:=font_name_sort(font(p)); - if fsort<>0 then begin - if (font_sort_char_entity(fsort)(character(p))<>0) then - print(font_sort_char_entity(fsort)(character(p))) - else - print_ASCII(qo(character(p))); - end - else - print_ASCII(qo(character(p))); - end; - end; -end; -@z -%--------------------------------------- -@x [13] m.202 l.3928 - Omega - adjust_node: flush_node_list(adjust_ptr(p)); -@y - adjust_node: flush_node_list(adjust_ptr(p)); - sgml_node: begin - if sgml_tag(p)<>0 then flush_node_list(sgml_attrs(p)); - free_node(p,sgml_node_size); goto done; - end; - sgml_attr_node: begin - free_node(p,sgml_attr_node_size); goto done; - end; - sgml_entity_node: begin - free_node(p,sgml_entity_node_size); goto done; - end; -@z -%--------------------------------------- -@x [15] m.209 l.4138 - Omega -@d max_command=char_mode - {the largest command code seen at |big_switch|} -@y -@d set_show_sgml_entities=char_mode+1 - {printing hex code or SGML-like entity during \.{\\showbox}} -@d set_mml_mode=set_show_sgml_entities+1 - {for entering or leaving MML mode ( \.{\\mmlmode}~)} -@d sgml_command=set_mml_mode+1 - {for various SGML tags} -@d max_command=sgml_command - {the largest command code seen at |big_switch|} -@z -%--------------------------------------- -@x [16] m.212--217 l.4303 - Omega - @!pg_field,@!ml_field: integer;@+ -@y - @!pg_field,@!ml_field: integer;@+ - @!sgml_field: integer; - @!sgml_attr_field: pointer; -@z -%--------------------------------------- -@x [16] m.212--217 l.4303 - Omega -@d mode_line==cur_list.ml_field {source file line number at beginning of list} -@y -@d mode_line==cur_list.ml_field {source file line number at beginning of list} -@d current_sgml_tag==cur_list.sgml_field {current SGML tag} -@d current_sgml_attrs==cur_list.sgml_attr_field {current SGML tag} -@z -%--------------------------------------- -@x [16] m.212--217 l.4303 - Omega -prev_graf:=0; shown_mode:=0; -@y -prev_graf:=0; shown_mode:=0; -current_sgml_tag:=0; current_sgml_attrs:=null; -@z -%--------------------------------------- -@x [16] m.212--217 l.4303 - Omega -incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line; -@y -incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line; -current_sgml_tag:=0; current_sgml_attrs:=null; -@z -%--------------------------------------- -@x [16] m.212--217 l.4303 - Omega -@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} -var attrs:pointer; - {p:pointer;} -begin attrs:=null; -{ -if current_sgml_attrs<>null then - if current_sgml_tag=null then - attrs:=current_sgml_attrs - else - free_avail(current_sgml_attrs); -} -free_avail(head); decr(nest_ptr); cur_list:=nest[nest_ptr]; -{ -if attrs<>null then begin - p:=attrs; - while link(p)<>null do - begin - p:=link(p); - end; - link(p):=current_sgml_attrs; - current_sgml_attrs:=attrs; - end; -} -end; -@z -%--------------------------------------- -@x [17] m.222 l.4525 - Omega -@d frozen_null_ocp=frozen_null_font+number_fonts -@y -@d frozen_null_font_sort=frozen_null_font+number_font_sorts {permanent null sort} -@d frozen_null_ocp=frozen_null_font_sort+number_font_sorts -@z -%--------------------------------------- -@x [17] m.232 l.4802 - Omega -@d var_code==@"7000000 {math code meaning ``use the current family''} -@y -@d null_font_sort==font_sort_base -@d var_code==@"7000000 {math code meaning ``use the current family''} -@z -%--------------------------------------- -@x [19] m.269 l.5859 - Omega -@d math_left_group=16 {code for `\.{\\left...\\right}'} -@d local_box_group=17 {code for `\.{\\localleftbox...\\localrightbox}'} -@d max_group_code=17 -@y -@d math_left_group=16 {code for `\.{\\left...\\right}'} -@d math_mml_group=17 {code for automatic `\.{\\left...\\right}'} -@d text_mml_group=18 {code for `\.{\\text...}'} -@d text_sgml_group=19 {code for horizontal SGML tags} -@d vert_sgml_group=20 {code for vertical SGML tags} -@d par_sgml_group=21 {code for paragraph SGML tags} -@d font_entity_group=22 -@d empty_tag_group=23 -@d local_box_group=24 {code for `\.{\\localleftbox...\\localrightbox}'} -@d max_group_code=24 -@z -%--------------------------------------- -@x [29] m.532 l.10260 - Omega -@ Here's an example of how these conventions are used. Whenever it is time to -ship out a box of stuff, we shall use the macro |ensure_dvi_open|. - -@d ensure_dvi_open==if output_file_name=0 then - begin if job_name=0 then open_log_file; - pack_job_name(".dvi"); - while not b_open_out(dvi_file) do - prompt_file_name("file name for output",".dvi"); - output_file_name:=b_make_name_string(dvi_file); - end - -@<Glob...@>= -@!dvi_file: byte_file; {the device-independent output goes here} -@!output_file_name: str_number; {full name of the output file} -@!log_name:str_number; {full name of the log file} -@y -@ Here's an example of how these conventions are used. Whenever it is time to -ship out a box of stuff, we shall use the macro |ensure_dvi_open|. - -@d ensure_output_open_end(#)==while not b_open_out(#) do - prompt_file_name("file name for output",output_m_suffix); - output_m_name:=b_make_name_string(#); - end end - -@d ensure_output_open_middle(#)==output_m_name:=#; if #=0 then - begin if job_name=0 then open_log_file; - pack_job_name(output_m_suffix); - ensure_output_open_end - -@d ensure_output_open(#)==begin output_m_suffix:=#; ensure_output_open_middle - -@d ensure_dvi_open==begin - ensure_output_open(".dvi")(output_file_name)(dvi_file); - output_file_name:=output_m_name end - -@<Glob...@>= -@!dvi_file: byte_file; {the device-independent output goes here} -@!output_file_name: str_number; {full name of the dvi output file} -@!output_m_suffix: str_number; {suffix for the current output file} -@!output_m_name: str_number; {suffix for the current output file} -@!output_file_names:array[1..10] of str_number; -@!output_files:array[1..10] of byte_file; -@!output_file_no:integer; {number of open output files} -@!log_name:str_number; {full name of the log file} -@!sgml_file_suffix:str_number; {suffix for the output file} -@!sgml_attribute_quote:str_number; {string for quoting attribute values} -@!sgml_empty_tag_marker:str_number; {string for marking empty tags} -@!sgml_paragraph_tag:str_number; {tag to designate paragraphs} -@z -%--------------------------------------- -@x [29] m.533 l.10260 - Omega -@ @<Initialize the output...@>=output_file_name:=0; -@y -@ @<Initialize the output...@>=output_file_name:=0; -for output_file_no:=1 to 10 do output_file_names[output_file_no]:=0; -sgml_file_suffix:=".xml"; -sgml_attribute_quote:=""""; -sgml_empty_tag_marker:="/"; -output_file_no:=0; -@z -%--------------------------------------- -@x [30] m.549 l.10686 - Omega -@!font_ptr:internal_font_number; {largest internal font number in use} -@y -@!font_ptr:internal_font_number; {largest internal font number in use} -@!font_sort_ptr:integer; {largest internal font sort number in use} -@z -%--------------------------------------- -@x [30] m.550 l.10723 - Omega -@d param_base(#)==font_info(#)(offset_param_base).int -@y -@d param_base(#)==font_info(#)(offset_param_base).int - -@d font_sort_info_end(#)==#] -@d font_sort_info(#)==font_sort_tables[#,font_sort_info_end -@d font_sort_offset_file_size=0 -@d font_sort_offset_name=font_sort_offset_file_size+1 -@d font_sort_offset_bc=font_sort_offset_name+1 -@d font_sort_offset_ec=font_sort_offset_bc+1 -@d font_sort_offset_char_base=font_sort_offset_bc+1 -@d font_sort_file_size(#)==font_sort_info(#)(font_sort_offset_file_size).int -@d font_sort_name(#)==font_sort_info(#)(font_sort_offset_name).int -@d font_sort_bc(#)==font_sort_info(#)(font_sort_offset_bc).int -@d font_sort_ec(#)==font_sort_info(#)(font_sort_offset_ec).int -@d font_sort_char_base(#)==font_sort_info(#)(font_sort_offset_char_base).int -@d font_sort_char_entity_end(#)==#*3].int -@d font_sort_char_entity(#)== - font_sort_tables[#,font_sort_offset_char_base+font_sort_char_entity_end -@d font_sort_char_tag_end(#)==#*3+1].int -@d font_sort_char_tag(#)== - font_sort_tables[#,font_sort_offset_char_base+font_sort_char_tag_end -@d font_sort_char_attr_end(#)==#*3+2].int -@d font_sort_char_attr(#)== - font_sort_tables[#,font_sort_offset_char_base+font_sort_char_attr_end -@z -%--------------------------------------- -@x [30] m.550 l.10723 - Omega -@!dimen_font:integer; -@y -@!dimen_font:integer; -@!font_sorts:integer; {to run through font sorts} -@!font_sort_c:integer; {character used to define font entities} -@!font_sort_number:integer; {this particular font sort number} -@z -%--------------------------------------- -@x [30] m.552 l.10749 - Omega -for k:=1 to 7 do font_info(null_font)(param_base(null_font)+k).sc:=0; -@y -for k:=1 to 7 do font_info(null_font)(param_base(null_font)+k).sc:=0; -font_sort_ptr:=null_font_sort; -allocate_font_sort_table(null_font_sort,font_sort_offset_char_base); -font_sort_file_size(null_font_sort):=font_sort_offset_char_base; -font_sort_name(null_font_sort):="nullfontsort"; -@z -%--------------------------------------- -@x [32] m.638 l.12656 - Omega -@<Ship box |p| out@>; -@y -if not SGML_mode then begin @<Ship box |p| out@>; end; -@z -%--------------------------------------- -@x [46] m.1030 -hmode+spacer: if space_factor=1000 then goto append_normal_space - else app_space; -hmode+ex_space,mmode+ex_space: goto append_normal_space; -@y -hmode+spacer: - if SGML_mode then begin - make_sgml_entity(" "); - goto big_switch; - end - else if space_factor=1000 then goto append_normal_space - else app_space; -hmode+ex_space,mmode+ex_space: goto append_normal_space; -@z -%--------------------------------------- -@x [47] m.1060 l.20533 - Omega -procedure append_glue; -var s:small_number; {modifier of skip command} -begin s:=cur_chr; -case s of -fil_code: cur_val:=fil_glue; -fill_code: cur_val:=fill_glue; -ss_code: cur_val:=ss_glue; -fil_neg_code: cur_val:=fil_neg_glue; -skip_code: scan_glue(glue_val); -mskip_code: scan_glue(mu_val); -end; {now |cur_val| points to the glue specification} -tail_append(new_glue(cur_val)); -if s>=skip_code then - begin decr(glue_ref_count(cur_val)); - if s>skip_code then subtype(tail):=mu_glue; - end; -end; -@y -procedure append_glue; -var s:small_number; {modifier of skip command} -begin s:=cur_chr; -case s of -fil_code: cur_val:=fil_glue; -fill_code: cur_val:=fill_glue; -ss_code: cur_val:=ss_glue; -fil_neg_code: cur_val:=fil_neg_glue; -skip_code: scan_glue(glue_val); -mskip_code: scan_glue(mu_val); -end; {now |cur_val| points to the glue specification} -if (abs(mode)=mmode) and SGML_mode then begin - end -else begin - tail_append(new_glue(cur_val)); - if s>=skip_code then - begin decr(glue_ref_count(cur_val)); - if s>skip_code then subtype(tail):=mu_glue; - end; - end; -end; -@z -%--------------------------------------- -@x [47] m.1061 l.20339 - Omega -procedure append_kern; -var s:quarterword; {|subtype| of the kern node} -begin s:=cur_chr; scan_dimen(s=mu_glue,false,false); -tail_append(new_kern(cur_val)); subtype(tail):=s; -end; -@y -procedure append_kern; -var s:quarterword; {|subtype| of the kern node} -begin s:=cur_chr; scan_dimen(s=mu_glue,false,false); -if (abs(mode)=mmode) and SGML_mode then begin - end -else begin - tail_append(new_kern(cur_val)); subtype(tail):=s; - end; -end; -@z -%--------------------------------------- -@x [47] m.1073 l.20795 - Omega -vmode+hmove,hmode+vmove,mmode+vmove: begin t:=cur_chr; - scan_normal_dimen; - if t=0 then scan_box(cur_val)@+else scan_box(-cur_val); - end; -any_mode(leader_ship): scan_box(leader_flag-a_leaders+cur_chr); -any_mode(make_box): begin_box(0); -@y -vmode+hmove,hmode+vmove,mmode+vmove: begin - if abs(mode)=mmode and SGML_mode then begin - print_err("Unauthorized entry in math expression: "); - print_cmd_chr(cur_cmd,cur_chr); print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end - else begin - t:=cur_chr; scan_normal_dimen; - if t=0 then scan_box(cur_val)@+else scan_box(-cur_val); - end; - end; -any_mode(leader_ship): begin - if abs(mode)=mmode and SGML_mode then begin - print_err("Unauthorized entry in math expression: "); - print_cmd_chr(cur_cmd,cur_chr); print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end - else - scan_box(leader_flag-a_leaders+cur_chr); - end; -any_mode(make_box): begin - if abs(mode)=mmode and SGML_mode then begin - print_err("Unauthorized entry in math expression: "); - print_cmd_chr(cur_cmd,cur_chr); print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end - else - begin_box(0); - end; -@z -%--------------------------------------- -@x [47] m. l.21055 - Omega -procedure new_graf(@!indented:boolean); -begin prev_graf:=0; -if (mode=vmode)or(head<>tail) then - tail_append(new_param_glue(par_skip_code)); -push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang; -prev_graf:=(norm_min(left_hyphen_min)*@'100+norm_min(right_hyphen_min)) - *@'200000+cur_lang; -tmp_dir_stack:=get_avail; info(tmp_dir_stack):=par_direction; -link(tmp_dir_stack):=par_dir_stack; -par_dir_stack:=tmp_dir_stack; -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - box_dir(tail):=info(par_dir_stack); - change_dir(tail,info(par_dir_stack)); - end; -if every_par<>null then begin_token_list(every_par,every_par_text); -if nest_ptr=1 then build_page; {put |par_skip| glue on current page} -end; -@y -procedure sgml_start_graf; forward; - -procedure new_graf(@!indented:boolean); -begin prev_graf:=0; -if SGML_mode then begin - sgml_start_graf - end -else begin -if (mode=vmode)or(head<>tail) then - tail_append(new_param_glue(par_skip_code)); -push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang; -prev_graf:=(norm_min(left_hyphen_min)*@'100+norm_min(right_hyphen_min)) - *@'200000+cur_lang; -tmp_dir_stack:=get_avail; info(tmp_dir_stack):=par_direction; -link(tmp_dir_stack):=par_dir_stack; -par_dir_stack:=tmp_dir_stack; -if indented then - begin tail:=new_null_box; link(head):=tail; width(tail):=par_indent;@+ - box_dir(tail):=info(par_dir_stack); - change_dir(tail,info(par_dir_stack)); - end; -if every_par<>null then begin_token_list(every_par,every_par_text); -if nest_ptr=1 then build_page; {put |par_skip| glue on current page} -end; -end; -@z -%--------------------------------------- -@x [47] m.1100 l.21156 - Omega -procedure end_graf; -begin if mode=hmode then - begin if head=tail then pop_nest {null paragraphs are ignored} - else line_break(widow_penalty,info(par_dir_stack)); - tmp_dir_stack:=par_dir_stack; - par_dir_stack:=link(par_dir_stack); - free_avail(tmp_dir_stack); - normal_paragraph; - error_count:=0; - end; -end; -@y -procedure sgml_end_graf; forward; - -procedure end_graf; -begin if mode=hmode then - begin if head=tail then pop_nest {null paragraphs are ignored} - else if SGML_mode then begin sgml_end_graf end - else line_break(widow_penalty,info(par_dir_stack)); - tmp_dir_stack:=par_dir_stack; - par_dir_stack:=link(par_dir_stack); - free_avail(tmp_dir_stack); - normal_paragraph; - error_count:=0; - end; -end; -@z -%--------------------------------------- -@x [47] m.1130 l.21562 - Omega -vmode+halign,hmode+valign:init_align; -mmode+halign: if privileged then - if cur_group=math_shift_group then init_align - else off_save; -vmode+endv,hmode+endv: do_endv; -@y -vmode+halign,hmode+valign:init_align; -mmode+halign: if SGML_mode then begin - print_err("Unauthorized entry in math expression: "); - print_esc("halign"); print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end - else begin - if privileged then - if cur_group=math_shift_group then init_align - else off_save; - end; -vmode+endv,hmode+endv: do_endv; -@z -%--------------------------------------- -@x [48] m.1136 l.21605 - Omega -@* \[48] Building math lists. -The routines that \TeX\ uses to create mlists are similar to those we have -just seen for the generation of hlists and vlists. But it is necessary to -make ``noads'' as well as nodes, so the reader should review the -discussion of math mode data structures before trying to make sense out of -the following program. - -Here is a little routine that needs to be done whenever a subformula -is about to be processed. The parameter is a code like |math_group|. - -@<Declare act...@>= -procedure push_math(@!c:group_code); -begin -push_nest; mode:=-mmode; incompleat_noad:=null; new_save_level(c); -make_local_direction(info(math_dir_stack),true); -end; -@y -@* \[48] Building math lists. -The routines that \TeX\ uses to create mlists are similar to those we have -just seen for the generation of hlists and vlists. But it is necessary to -make ``noads'' as well as nodes, so the reader should review the -discussion of math mode data structures before trying to make sense out of -the following program. - -Here is a little routine that needs to be done whenever a subformula -is about to be processed. The parameter is a code like |math_group|. - -@<Glob...@>= -@!SGML_mode:boolean; -@!SGML_show_entities:boolean; -@!MML_level:integer; -@!mml_file_no:integer; {the \.{MML} output file} -@!mml_indent:integer; -@!mml_depth_level:integer; -@!tmp_back_at_bol:boolean; - -@ @<Set init...@>= -SGML_mode:=false; -SGML_show_entities:=true; -MML_level:=0; -mml_indent:=0; -mml_file_no:=0; -mml_depth_level:=0; - -@ - -@d sgml_out_pointer(#)== - case math_type(#(p)) of - math_char: begin - fetch(#(p)); - fsort:=font_name_sort(cur_f); - if char_exists(cur_i) then begin - if (font_sort_char_tag(fsort)(cur_c)<>0) then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("<"); print(font_sort_char_tag(fsort)(cur_c)); - if (font_sort_char_attr(fsort)(cur_c)<>null) then begin - sgml_attrs_out(font_sort_char_attr(fsort)(cur_c)); - end; - print(">"); - if (font_sort_char_entity(fsort)(cur_c)<>0) then begin - print(font_sort_char_entity(fsort)(cur_c)); - end; - print("</"); print(font_sort_char_tag(fsort)(cur_c)); - print(">"); - print(new_line_char); - back_at_bol:=true; - end; - end; - end; - sub_mlist: begin - case type(p) of - op_noad,bin_noad,rel_noad, - open_noad,close_noad,punct_noad,inner_noad: begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("<mo"); - if (type(p)=op_noad) and (subtype(p)=limits) then begin - print(" limits=""true"""); - end - else if (type(p)=op_noad) and (subtype(p)=no_limits) then begin - print(" limits=""false"""); - end; - print(">"); - mml_indent:=mml_indent+1; - print(new_line_char); - back_at_bol:=true; - q:=p; cur_mlist:=info(#(p)); - if link(cur_mlist)=null then - if type(cur_mlist)=sgml_node then - if str_eq_str(sgml_tag(cur_mlist),"mrow") then - cur_mlist:=sgml_info(cur_mlist); - back_at_bol:=sgml_out_mlist(false,back_at_bol,false); p:=q; - mml_indent:=mml_indent-1; - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("</mo>"); - print(new_line_char); - back_at_bol:=true; - end; - othercases begin - q:=p; cur_mlist:=info(#(p)); - back_at_bol:=sgml_out_mlist(false,back_at_bol,false); p:=q; - end - endcases; - end; - othercases begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("<merror> Unrecognized math stuff </merror>"); - print(new_line_char); - back_at_bol:=true; - end - endcases; - -@<Declare act...@>= -procedure push_math(@!c:group_code); -begin -push_nest; mode:=-mmode; incompleat_noad:=null; new_save_level(c); -make_local_direction(info(math_dir_stack),true); -end; - -function sgml_out_on_one_line(p:pointer):boolean; -begin -if (sgml_tag(p)="mi") or (sgml_tag(p)="mo") or (sgml_tag(p)="mn") then - sgml_out_on_one_line:=true -else sgml_out_on_one_line:=false; -end; - -procedure sgml_attrs_out(p:pointer); -var q:pointer; -begin -q:=p; -while q<>null do begin - print(" "); - print(sgml_tag(q)); print("="); - print(sgml_attribute_quote); - print(sgml_attrs(q)); - print(sgml_attribute_quote); - q:=link(q); - end; -end; - -function sgml_out_mlist(break_line,back_at_bol,inside_vert:boolean):boolean; -var p,q:pointer; - old_selector:integer; - i,fsort:integer; - beg_of_vert:boolean; - doing_vert_node:boolean; - save_mml_indent:integer; -begin -if inside_vert then begin - if is_char_node(cur_mlist) then beg_of_vert:=false - else if type(cur_mlist)=sgml_entity_node then beg_of_vert:=true - else beg_of_vert:=false; - end -else beg_of_vert:=false; -old_selector:=selector; -selector:=max_selector+mml_file_no; -p:=cur_mlist; -while p<>null do begin - if is_char_node(p) then begin - doing_vert_node:=false; - fsort:=font_name_sort(font(p)); - if (font_sort_char_entity(fsort)(character(p))<>0) then begin - if back_at_bol then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - print(font_sort_char_entity(fsort)(character(p))); - end; - end - else begin - case type(p) of - hlist_node,vlist_node,rule_node, - ins_node,mark_node,adjust_node: do_nothing; - ligature_node: begin - doing_vert_node:=false; - fsort:=font_name_sort(font(lig_char(p))); - if (font_sort_char_entity(fsort)(character(lig_char(p)))<>0) then begin - if back_at_bol then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - print(font_sort_char_entity(fsort)(character(lig_char(p)))); - end; - end; - disc_node,whatsit_node,math_node,glue_node, - kern_node,penalty_node,unset_node: do_nothing; - sgml_node: begin - doing_vert_node:=false; - if sgml_tag(p)=0 then begin - print(sgml_attrs(p)); - end - else if sgml_singleton(p)>=1 then begin - if sgml_kind(p)<>sgml_text_node then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - print("<"); print(sgml_tag(p)); - sgml_attrs_out(sgml_attrs(p)); - if sgml_singleton(p)=1 then print(sgml_empty_tag_marker); - print(">"); - if sgml_kind(p)<>sgml_text_node then begin - print(new_line_char); back_at_bol:=true; - end; - end - else begin - if sgml_kind(p)=sgml_vert_node then - doing_vert_node:=true; - if str_eq_str(sgml_tag(p),"math") then begin - print(new_line_char); - back_at_bol:=true; - end; - if back_at_bol then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - print("<"); print(sgml_tag(p)); - sgml_attrs_out(sgml_attrs(p)); print(">"); - if (sgml_kind(p)<>sgml_text_node) and - (sgml_tag(p)<>"mtext") then begin - if not(sgml_out_on_one_line(p)) then begin - mml_indent:=mml_indent+1; - print(new_line_char); - back_at_bol:=true; - end; - end; - cur_mlist:=sgml_info(p); - if cur_mlist<>null then begin - if (sgml_kind(p)=sgml_vert_node) then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - back_at_bol:= - sgml_out_mlist(false,back_at_bol,sgml_kind(p)=sgml_vert_node); - if (sgml_kind(p)=sgml_vert_node) then - if not back_at_bol then begin - print(new_line_char); - back_at_bol:=true; - end; - end; - if (sgml_kind(p)<>sgml_text_node) and - (sgml_tag(p)<>"mtext") then begin - if not(sgml_out_on_one_line(p)) then begin - mml_indent:=mml_indent-1; - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - end; - print("</"); print(sgml_tag(p)); print(">"); - if sgml_kind(p)<>sgml_text_node then begin - print(new_line_char); - back_at_bol:=true; - end; - if sgml_kind(p)=sgml_vert_node then - beg_of_vert:=true; - if str_eq_str(sgml_tag(p),"math") then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - end; - end; - end; - sgml_entity_node: begin - if not(doing_vert_node and (sgml_entity_string(p)=" ")) then begin - print(sgml_entity_string(p)); - doing_vert_node:=false; - beg_of_vert:=false; - back_at_bol:=false; - end; - end; - fraction_noad: begin - doing_vert_node:=false; - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("<mfrac>Arguments</mfrac>"); - print(new_line_char); back_at_bol:=true; - end; - othercases begin - doing_vert_node:=false; - if (info(subscr(p))<>null) or - (info(supscr(p))<>null) then begin - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("<m"); - if info(subscr(p))<>empty then print("sub"); - if info(supscr(p))<>empty then print("sup"); - print(">"); - mml_indent:=mml_indent+1; - print(new_line_char); - back_at_bol:=true; - end; - sgml_out_pointer(nucleus); - if (info(subscr(p))<>null) or - (info(supscr(p))<>null) then begin - if info(subscr(p))<>null then begin - sgml_out_pointer(subscr); - end; - if info(supscr(p))<>null then begin - sgml_out_pointer(supscr); - end; - mml_indent:=mml_indent-1; - for i:=1 to mml_indent do print(" "); - back_at_bol:=false; - print("</m"); - if info(subscr(p))<>null then print("sub"); - if info(supscr(p))<>null then print("sup"); - print(">"); - print(new_line_char); - back_at_bol:=true; - end; - end; - endcases; - end; - p:=link(p); - if not(doing_vert_node) then - if p<>null then - if not(is_char_node(p)) then - if type(p)=sgml_node then - if sgml_kind(p)=sgml_vert_node then begin - print(new_line_char); - back_at_bol:=true; - end; - end; -selector:=old_selector; -sgml_out_mlist:=back_at_bol; -end; - -procedure make_sgml_entity(s:str_number); -begin -link(tail):=new_sgml_entity_node; -tail:=link(tail); -sgml_entity_string(tail):=s; -end; - -procedure scan_font_entity; -var cv1,cv2,cv3,cv4:integer; -begin -scan_string_argument; cv1:=cur_val; -scan_left_brace; scan_int; cv2:=cur_val; scan_right_brace; -scan_string_argument; cv3:=cur_val; -scan_string_argument; cv4:=cur_val; -save_ptr:=save_ptr+4; -saved(-1):=cv1; saved(-2):=cv2; saved(-3):=cv3; saved(-4):=cv4; -new_save_level(font_entity_group); scan_left_brace; push_nest; -end; - -procedure scan_empty_tag; -begin -scan_string_argument; -link(tail):=new_sgml_node; -tail:=link(tail); -sgml_tag(tail):=cur_val; -sgml_kind(tail):=sgml_text_node; -sgml_singleton(tail):=1; -incr(save_ptr); saved(-1):=tail; -new_save_level(empty_tag_group); scan_left_brace; push_nest; -end; - -procedure scan_math_empty_tag; -begin -scan_string_argument; -link(tail):=new_sgml_node; -tail:=link(tail); -sgml_tag(tail):=cur_val; -sgml_kind(tail):=sgml_math_node; -sgml_singleton(tail):=1; -incr(save_ptr); saved(-1):=tail; -new_save_level(empty_tag_group); scan_left_brace; push_nest; -end; - -procedure sgml_startmathtag(s:str_number); -begin -push_math(math_group); current_sgml_tag:=s; -end; - - -procedure sgml_startverttag(s:str_number); -begin -push_nest; new_save_level(vert_sgml_group); -current_sgml_tag:=s; -mode:=-hmode; -end; - -procedure sgml_startpartag(s:str_number); -begin -push_nest; new_save_level(par_sgml_group); -current_sgml_tag:=s; -mode:=-hmode; -end; - -procedure sgml_starttexttag(s:str_number); -begin -push_nest; new_save_level(text_sgml_group); -current_sgml_tag:=s; -mode:=-hmode; -end; - - -procedure sgml_tag_attribute(tag,s,s1:str_number); -var p:pointer; - nest_level:integer; - found_tag:boolean; -begin -p:=new_sgml_attr_node; -sgml_tag(p):=s; -sgml_attrs(p):=s1; -sgml_singleton(p):=0; -if str_eq_str(tag,current_sgml_tag) then begin - link(p):=current_sgml_attrs; - current_sgml_attrs:=p; - end -else begin - nest_level:= nest_ptr - 1; - found_tag:=false; - while (nest_level>0) and - (not str_eq_str(nest[nest_level].sgml_field,tag)) do - decr(nest_level); - if nest_level<>0 then begin - link(p):=nest[nest_level].sgml_attr_field; - nest[nest_level].sgml_attr_field:=p; - end - else begin - print("Tag not found in call to SGMLtagattribute"); print_ln; - end; - end; -end; - -procedure sgml_attribute(s,s1:str_number); -var p,q:pointer; -begin -p:=new_sgml_attr_node; -sgml_tag(p):=s; -sgml_attrs(p):=s1; -sgml_singleton(p):=0; -link(p):=null; -if current_sgml_attrs=null then - current_sgml_attrs:=p -else begin - q:=current_sgml_attrs; - while link(q)<>null do q:=link(q); - link(q):=p; - end; -end; - -procedure sgml_endtexttag(s:str_number); -var q:pointer; -begin -if not str_eq_str(s,current_sgml_tag) then begin - print_err("Tags do not match: "); - print(current_sgml_tag); print(","); print(s); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -q:=new_sgml_node; -sgml_tag(q):=s; -sgml_kind(q):=sgml_text_node; -sgml_info(q):=link(head); -sgml_attrs(q):=current_sgml_attrs; -pop_nest; -unsave; -if mode=vmode then begin - ensure_sgml_open; - cur_mlist:=q; - tmp_back_at_bol:=sgml_out_mlist(false,true,false); - end -else begin - link(tail):=q; - tail:=q; - end; -end; - -procedure sgml_endverttag(s:str_number); -var q:pointer; -begin -if not str_eq_str(s,current_sgml_tag) then begin - print_err("Tags do not match: "); - print(current_sgml_tag); print(","); print(s); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -q:=new_sgml_node; -sgml_tag(q):=s; -sgml_kind(q):=sgml_vert_node; -sgml_info(q):=link(head); -sgml_attrs(q):=current_sgml_attrs; -pop_nest; -unsave; -if mode=vmode then begin - ensure_sgml_open; - cur_mlist:=q; - tmp_back_at_bol:=sgml_out_mlist(false,true,false); - end -else begin - link(tail):=q; - tail:=q; - end; -end; - -procedure sgml_endpartag(s:str_number); -var q:pointer; -begin -if not str_eq_str(s,current_sgml_tag) then begin - print_err("Tags do not match: "); - print(current_sgml_tag); print(","); print(s); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -q:=new_sgml_node; -sgml_tag(q):=s; -sgml_kind(q):=sgml_vert_node; -sgml_info(q):=link(head); -sgml_attrs(q):=current_sgml_attrs; -pop_nest; -unsave; -if sgml_info(q)=null then begin - flush_node_list(q); - end -else if mode=vmode then begin - ensure_sgml_open; - cur_mlist:=q; - tmp_back_at_bol:=sgml_out_mlist(false,true,false); - end -else begin - link(tail):=q; - tail:=q; - end; -end; - -procedure sgml_write(s:str_number); -var old_selector:integer; -begin -ensure_sgml_open; -old_selector:=selector; -selector:=max_selector+mml_file_no; -print(s); -selector:=old_selector; -end; - -procedure sgml_endmathtag(s:str_number); -var q:pointer; -begin -if not str_eq_str(s,current_sgml_tag) then begin - print_err("Tags do not match: "); - print(current_sgml_tag); print(","); print(s); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -q:=new_sgml_node; -sgml_tag(q):=s; -sgml_kind(q):=sgml_math_node; -if s<>"mtext" then sgml_attrs(q):=current_sgml_attrs; -sgml_info(q):=link(head); -if current_sgml_attrs=null then - if (link(head)<>null) then - if (str_eq_str(s,"mtr") or str_eq_str(s,"mtd")) and - (link(link(head))=null) then begin - q:=sgml_info(q); - end; -pop_nest; -unsave; -link(tail):=q; -tail:=q; -end; - -procedure sgml_start_graf; -begin -print("Executing sgml_start_graf"); print_ln; -sgml_starttexttag(sgml_paragraph_tag); -end; - -procedure sgml_end_graf; -begin -sgml_endtexttag(sgml_paragraph_tag); -print("Executing sgml_end_graf"); print_ln; -end; - -@ Entering or leaving MML mode -by using the routine called |primitive|, defined below. Let us enter them -now, so that we don't have to list all those parameter names anywhere else. - -@<Put each of \TeX's primitives into the hash table@>= -primitive("showSGMLentities",set_show_sgml_entities,1); -primitive("noshowSGMLentities",set_show_sgml_entities,0); -primitive("SGMLmode",set_mml_mode,1); -@!@:SGML_mode_}{\.{\\SGMLmode} primitive@> -primitive("noSGMLmode",set_mml_mode,0); -@!@:noSGML_mode_}{\.{\\noSGMLmode} primitive@> -primitive("SGMLstartmathtag",sgml_command,0); -primitive("SGMLendmathtag",sgml_command,1); -primitive("SGMLstarttexttag",sgml_command,2); -primitive("SGMLendtexttag",sgml_command,3); -primitive("SGMLattribute",sgml_command,4); -primitive("MMLstarttext",sgml_command,5); -primitive("MMLendtext",sgml_command,6); - -primitive("SGMLampersand",other_char,"&"); -primitive("SGMLbackslash",other_char,"\"); -primitive("SGMLcarret",other_char,"^"); -primitive("SGMLdollar",other_char,"$"); -primitive("SGMLhash",other_char,"#"); -primitive("SGMLleftbrace",other_char,"{"); -primitive("SGMLpercent",other_char,"%"); -primitive("SGMLrightbrace",other_char,"}"); -primitive("SGMLunderscore",other_char,"_"); -primitive("SGMLquote",other_char,"'"); -primitive("SGMLbackquote",other_char,""); -primitive("SGMLdoublequote",other_char,""""); -primitive("SGMLtilde",other_char,"~"); -primitive("SGMLexclamationmark",other_char,"!"); -primitive("SGMLquestionmark",other_char,"?"); -primitive("SGMLequals",other_char,"="); -primitive("SGMLcolon",other_char,":"); -primitive("SGMLsemicolon",other_char,";"); - -primitive("SGMLentity",sgml_command,7); -primitive("SGMLemptytag",sgml_command,8); -primitive("SGMLFontEntity",sgml_command,9); -primitive("SGMLwrite",sgml_command,10); -primitive("SGMLwriteln",sgml_command,11); -primitive("SGMLfilesuffix",sgml_command,12); -primitive("SGMLattributequote",sgml_command,13); -primitive("SGMLemptytagmarker",sgml_command,14); -primitive("SGMLtagattribute",sgml_command,15); -primitive("SGMLstartverttag",sgml_command,16); -primitive("SGMLendverttag",sgml_command,17); -primitive("SGMLmathemptytag",sgml_command,18); -primitive("SGMLstartpartag",sgml_command,19); -primitive("SGMLendpartag",sgml_command,20); - -@ @<Cases of |main_control| that build boxes and lists@>= -mmode+set_mml_mode: report_illegal_case; -non_math(set_mml_mode): - if cur_chr=0 then SGML_mode:=false else SGML_mode:=true; -any_mode(set_show_sgml_entities): - if cur_chr=0 then SGML_show_entities:=false - else SGML_show_entities:=true; -any_mode(sgml_command): begin - case cur_chr of - 0: begin scan_string_argument; sgml_startmathtag(cur_val); end; - 1: begin scan_string_argument; sgml_endmathtag(cur_val); end; - 2: begin scan_string_argument; sgml_starttexttag(cur_val); end; - 3: begin scan_string_argument; sgml_endtexttag(cur_val); end; - 4: begin scan_string_argument; cur_val1:=cur_val; - scan_string_argument; sgml_attribute(cur_val1,cur_val); end; - 5: begin - push_nest; new_save_level(text_mml_group); - current_sgml_tag:="mtext"; mode:=-hmode; - end; - 6: begin sgml_endmathtag("mtext"); end; - 7: begin scan_string_argument; make_sgml_entity(cur_val); end; - 8: begin scan_empty_tag; end; - 9: begin scan_font_entity; end; - 10: begin scan_string_argument; sgml_write(cur_val); end; - 11: begin sgml_write(new_line_char); end; - 12: begin scan_string_argument; sgml_file_suffix:=cur_val; end; - 13: begin scan_string_argument; sgml_attribute_quote:=cur_val; end; - 14: begin scan_string_argument; sgml_empty_tag_marker:=cur_val; end; - 15: begin scan_string_argument; cur_val2:=cur_val; - scan_string_argument; cur_val1:=cur_val; - scan_string_argument; - sgml_tag_attribute(cur_val2,cur_val1,cur_val); - end; - 16: begin scan_string_argument; sgml_startverttag(cur_val); end; - 17: begin scan_string_argument; sgml_endverttag(cur_val); end; - 18: begin scan_math_empty_tag; end; - 19: begin scan_string_argument; sgml_startpartag(cur_val); end; - 20: begin scan_string_argument; sgml_endpartag(cur_val); end; - end; - end; - -@ The following code opens \.{MML} output file if neccesary. -@p procedure ensure_sgml_open; -begin - if mml_file_no=0 then begin - incr(output_file_no); - mml_file_no:=output_file_no; - ensure_output_open(sgml_file_suffix) - (output_file_names[mml_file_no]) - (output_files[mml_file_no]); - output_file_names[mml_file_no]:=output_m_name; - end; -end; - -@ @<Declare act...@>= - -@z -%--------------------------------------- -@x [48] m.1137 l.21620 - Omega -@ We get into math mode from horizontal mode when a `\.\$' (i.e., a -|math_shift| character) is scanned. We must check to see whether this -`\.\$' is immediately followed by another, in case display math mode is -called for. - -@<Cases of |main_control| that build...@>= -hmode+math_shift:init_math; -@y -@ We get into math mode from horizontal mode when a `\.\$' (i.e., a -|math_shift| character) is scanned. We must check to see whether this -`\.\$' is immediately followed by another, in case display math mode is -called for. - -@<Cases of |main_control| that build...@>= -hmode+math_shift: begin - if SGML_mode then begin - ensure_sgml_open; - incr(MML_level); - end; - init_math; - end; - -@z -%--------------------------------------- -@x [48] m.1139 l.21648 - Omega -if every_math<>null then begin_token_list(every_math,every_math_text); -@y -current_sgml_tag:="mrow"; -sgml_attribute("displaystyle","false"); -if every_math<>null then begin_token_list(every_math,every_math_text); -@z -%--------------------------------------- -@x [48] m.1145 l.21703 - Omega -if every_display<>null then begin_token_list(every_display,every_display_text); -@y -current_sgml_tag:="mrow"; -sgml_attribute("displaystyle","true"); -if every_display<>null then begin_token_list(every_display,every_display_text); -@z -%--------------------------------------- -@x [48] m.1155 l.21878 - Omega - else type(p):=ord_noad+(c div @"1000000); - link(tail):=p; tail:=p; -@y - else type(p):=ord_noad+(c div @"1000000); - if not SGML_mode then - tail_append(p) - else if (c div @"1000000)=4 then begin - saved(0):=p; - incr(save_ptr); - push_math(math_mml_group); - end - else if (cur_group=math_mml_group) and - ((c div @"1000000)=5) then begin - unsave; - decr(save_ptr); - q:=saved(0); - r:=fin_mlist(null); - push_math(math_group); - tail_append(q); tail_append(r); tail_append(p); - unsave; - p:=fin_mlist(null); - tail_append(p); - end - else tail_append(p); -@z -%--------------------------------------- -@x [48] m.1176--1177 l.22109 - Omega -procedure sub_sup; -var t:small_number; {type of previous sub/superscript} -@!p:pointer; {field to be filled by |scan_math|} -begin t:=empty; p:=null; -if tail<>head then if scripts_allowed(tail) then - begin p:=supscr(tail)+cur_cmd-sup_mark; {|supscr| or |subscr|} - t:=math_type(p); - end; -if (p=null)or(t<>empty) then @<Insert a dummy noad to be sub/superscripted@>; -scan_math(p); -end; -@y -procedure sub_sup; -var t:small_number; {type of previous sub/superscript} -@!p,q,r:pointer; {field to be filled by |scan_math|} -begin t:=empty; p:=null; -if tail<>head then begin - if SGML_mode then - if type(tail)=sgml_node then begin - q:=head; - while link(q)<>tail do q:=link(q); - r:=new_noad; - info(nucleus(r)):=tail; - math_type(nucleus(r)):=sub_mlist; - link(q):=r; - tail:=r; - end; - if scripts_allowed(tail) then - begin p:=supscr(tail)+cur_cmd-sup_mark; {|supscr| or |subscr|} - t:=math_type(p); - end; - end; -if (p=null)or(t<>empty) then @<Insert a dummy noad to be sub/superscripted@>; -scan_math(p); -end; -@z -%--------------------------------------- -@x [48] m.1181 l.22199 - Omega -procedure math_fraction; -var c:small_number; {the type of generalized fraction we are scanning} -begin c:=cur_chr; -if incompleat_noad<>null then - @<Ignore the fraction operation and complain about this ambiguous case@> -else begin incompleat_noad:=get_node(fraction_noad_size); - type(incompleat_noad):=fraction_noad; - subtype(incompleat_noad):=normal; - math_type(numerator(incompleat_noad)):=sub_mlist; - info(numerator(incompleat_noad)):=link(head); - mem[denominator(incompleat_noad)].hh:=empty_field; - mem[left_delimiter(incompleat_noad)].qqqq:=null_delimiter; - mem[right_delimiter(incompleat_noad)].qqqq:=null_delimiter;@/ - link(head):=null; tail:=head; - @<Use code |c| to distinguish between generalized fractions@>; - end; -end; -@y -procedure math_fraction; -var c:small_number; {the type of generalized fraction we are scanning} -begin c:=cur_chr; -if incompleat_noad<>null then - @<Ignore the fraction operation and complain about this ambiguous case@> -else begin incompleat_noad:=get_node(fraction_noad_size); - type(incompleat_noad):=fraction_noad; - subtype(incompleat_noad):=normal; - math_type(numerator(incompleat_noad)):=sub_mlist; - info(numerator(incompleat_noad)):=link(head); - mem[denominator(incompleat_noad)].hh:=empty_field; - if SGML_mode then begin - mem[left_delimiter(incompleat_noad)].int:=0; - mem[right_delimiter(incompleat_noad)].int:=0;@/ - end - else begin - mem[left_delimiter(incompleat_noad)].qqqq:=null_delimiter; - mem[right_delimiter(incompleat_noad)].qqqq:=null_delimiter;@/ - end; - link(head):=null; tail:=head; - @<Use code |c| to distinguish between generalized fractions@>; - end; -end; -@z -%--------------------------------------- -@x [48] m.1182 l.22199 - Omega - begin scan_delimiter(left_delimiter(incompleat_noad),false); - scan_delimiter(right_delimiter(incompleat_noad),false); -@y - begin if SGML_mode then begin - mem[left_delimiter(incompleat_noad)].int:=new_noad; - scan_math(nucleus(mem[left_delimiter(incompleat_noad)].int)); - mem[right_delimiter(incompleat_noad)].int:=new_noad; - scan_math(nucleus(mem[right_delimiter(incompleat_noad)].int)); - end - else begin - scan_delimiter(left_delimiter(incompleat_noad),0); - scan_delimiter(right_delimiter(incompleat_noad),0); - end; -@z -%--------------------------------------- -@x [48] m.1183 l.22212 - Omega - begin scan_delimiter(garbage,false); scan_delimiter(garbage,false); -@y - begin if SGML_mode then begin - scan_math(garbage); scan_math(garbage); - end - else begin - scan_delimiter(garbage,0); scan_delimiter(garbage,0); - end; -@z -%--------------------------------------- -@x [48] m.1184 l.22230 - Omega -function fin_mlist(@!p:pointer):pointer; -var q:pointer; {the mlist to return} -begin if incompleat_noad<>null then @<Compleat the incompleat noad@> -else begin link(tail):=p; q:=link(head); - end; -pop_nest; fin_mlist:=q; -end; -@y -function fin_mlist(@!p:pointer):pointer; -var q,q1,q2:pointer; {the mlist to return} - tag:integer; -begin if incompleat_noad<>null then @<Compleat the incompleat noad@> -else begin link(tail):=p; q:=link(head); - end; -if current_sgml_tag=0 then - tag:="mrow" -else tag:=current_sgml_tag; -pop_nest; -if SGML_mode then - if q<>null then - if link(q)<>null then begin - q1:=new_sgml_node; - sgml_tag(q1):=tag; - sgml_info(q1):=q; - sgml_kind(q1):=sgml_math_node; - fin_mlist:=q1 - end - else fin_mlist:=q - else fin_mlist:=q -else - fin_mlist:=q; -end; -@z -%--------------------------------------- -@x [48] m.1185 l.22256 - Omega -@ @<Compleat...@>= -begin math_type(denominator(incompleat_noad)):=sub_mlist; -info(denominator(incompleat_noad)):=link(head); -if p=null then q:=incompleat_noad -else begin q:=info(numerator(incompleat_noad)); - if type(q)<>left_noad then confusion("right"); -@:this can't happen right}{\quad right@> - info(numerator(incompleat_noad)):=link(q); - link(q):=incompleat_noad; link(incompleat_noad):=p; - end; -end -@y -@ @<Compleat...@>= -begin math_type(denominator(incompleat_noad)):=sub_mlist; -info(denominator(incompleat_noad)):=link(head); -if p=null then - if not SGML_mode then - q:=incompleat_noad - else begin - if link(info(numerator(incompleat_noad)))<>null then begin - q1:=new_sgml_node; - sgml_tag(q1):="mrow"; - sgml_kind(q1):=sgml_math_node; - sgml_info(q1):=info(numerator(incompleat_noad)); - end - else q1:=info(numerator(incompleat_noad)); - if link(info(denominator(incompleat_noad)))<>null then begin - q2:=new_sgml_node; - sgml_tag(q2):="mrow"; - sgml_kind(q2):=sgml_math_node; - sgml_info(q2):=info(denominator(incompleat_noad)); - end - else q2:=info(denominator(incompleat_noad)); - q:=new_sgml_node; - sgml_tag(q):="mfrac"; - sgml_kind(q):=sgml_math_node; - sgml_info(q):=q1; - link(q1):=q2; - current_sgml_attrs:=null; - if thickness(incompleat_noad)<>default_code then - if thickness(incompleat_noad)=0 then - sgml_attribute("linethickness","0ex") - else if thickness(incompleat_noad)<default_rule_thickness then - sgml_attribute("linethickness","thin") - else if thickness(incompleat_noad)>default_rule_thickness then - sgml_attribute("linethickness","thick"); - sgml_attrs(q):=current_sgml_attrs; - if (mem[left_delimiter(incompleat_noad)].int<>0) or - (mem[right_delimiter(incompleat_noad)].int<>0) then begin - q1:=q; - q:=new_sgml_node; - sgml_tag(q):="mrow"; - sgml_kind(q):=sgml_math_node; - sgml_info(q):=mem[left_delimiter(incompleat_noad)].int; - link(mem[left_delimiter(incompleat_noad)].int):=q1; - link(q1):=mem[right_delimiter(incompleat_noad)].int; - end - end -else begin q:=info(numerator(incompleat_noad)); - if type(q)<>left_noad then confusion("right"); -@:this can't happen right}{\quad right@> - info(numerator(incompleat_noad)):=link(q); - link(q):=incompleat_noad; link(incompleat_noad):=p; - end; -end -@z -%--------------------------------------- -@x [48] m.1186 l.22256 - Omega -math_group: begin unsave; decr(save_ptr);@/ - math_type(saved(0)):=sub_mlist; p:=fin_mlist(null); info(saved(0)):=p; - if p<>null then if link(p)=null then - if type(p)=ord_noad then - begin if math_type(subscr(p))=empty then - if math_type(supscr(p))=empty then - begin mem[saved(0)].hh:=mem[nucleus(p)].hh; - free_node(p,noad_size); - end; - end - else if type(p)=accent_noad then if saved(0)=nucleus(tail) then - if type(tail)=ord_noad then @<Replace the tail of the list by |p|@>; - end; -@y -text_mml_group: begin - unsave; decr(save_ptr); - p:=saved(0); - sgml_info(p):=link(head); - pop_nest; - tail_append(p); - end; -text_sgml_group: begin - print_err("Expecting closing tag </"); - print(current_sgml_tag); print(">."); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -vert_sgml_group: begin - print_err("Expecting closing tag </"); - print(current_sgml_tag); print(">."); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -par_sgml_group: begin - print_err("Expecting closing tag </"); - print(current_sgml_tag); print(">."); - print_ln; - print_nl("The SGML translator cannot continue"); - succumb; - end; -math_mml_group: begin - unsave; - decr(save_ptr); - link(saved(0)):=link(head); - p:=saved(0); - pop_nest; - if type(p)=sgml_node then - if str_eq_str(sgml_tag(p),"mrow") then - if sgml_attrs(p)=null then begin - if link(sgml_info(p))=null then - p:=sgml_info(p); - end; - tail_append(p); - back_input; - end; -math_group: begin unsave; decr(save_ptr);@/ - if SGML_mode then - math_type(saved(0)):=sub_mlist - else - math_type(saved(0)):=sub_mlist; - p:=fin_mlist(null); info(saved(0)):=p; - if p<>null then if link(p)=null then - if type(p)=ord_noad then - begin if math_type(subscr(p))=empty then - if math_type(supscr(p))=empty then - begin mem[saved(0)].hh:=mem[nucleus(p)].hh; - free_node(p,noad_size); - end; - end - else if type(p)=accent_noad then if saved(0)=nucleus(tail) then - if type(tail)=ord_noad then @<Replace the tail of the list by |p|@>; - end; -font_entity_group: begin - unsave; - font_sort_number:=font_sort_ptr+1; - for font_sorts:=font_sort_base+1 to font_sort_ptr do - if str_eq_str(font_sort_name(font_sorts),saved(-1)) then begin - font_sort_number:=font_sorts; - break; - end; - font_sort_c:=saved(-2); - font_sort_char_entity(font_sort_number)(font_sort_c):=saved(-3); - font_sort_char_tag(font_sort_number)(font_sort_c):=saved(-4); - font_sort_char_attr(font_sort_number)(font_sort_c):=current_sgml_attrs; - current_sgml_attrs:=null; - save_ptr:=save_ptr-4; pop_nest; - end; -empty_tag_group: begin - unsave; sgml_attrs(saved(-1)):=current_sgml_attrs; - decr(save_ptr); pop_nest; - end; -@z -%--------------------------------------- -@x [48] m.1191 l.22301 - Omega -procedure math_left_right; -var t:small_number; {|left_noad| or |right_noad|} -@!p:pointer; {new noad} -begin t:=cur_chr; -if (t=right_noad)and(cur_group<>math_left_group) then - @<Try to recover from mismatched \.{\\right}@> -else begin p:=new_noad; type(p):=t; - scan_delimiter(delimiter(p),false); - if t=left_noad then - begin push_math(math_left_group); link(head):=p; tail:=p; - end - else begin p:=fin_mlist(p); unsave; {end of |math_left_group|} - tail_append(new_noad); type(tail):=inner_noad; - math_type(nucleus(tail)):=sub_mlist; - info(nucleus(tail)):=p; - end; - end; -end; -@y -procedure math_left_right; -var t:small_number; {|left_noad| or |right_noad|} -@!p,q,r:pointer; {new noad} -begin t:=cur_chr; -if (t=right_noad)and(cur_group<>math_left_group) then - @<Try to recover from mismatched \.{\\right}@> -else begin p:=new_noad; - if SGML_mode then begin - scan_math(nucleus(p)); - if t=left_noad then begin - saved(0):=p; incr(save_ptr); - push_math(math_left_group); - end - else begin - unsave; - decr(save_ptr); - q:=saved(0); r:=fin_mlist(null); - push_math(math_group); - tail_append(q); tail_append(r); - tail_append(p); - unsave; - p:=fin_mlist(null); - tail_append(p); - end - end - else begin - type(p):=t; - scan_delimiter(delimiter(p),false); - if t=left_noad then - begin push_math(math_left_group); link(head):=p; tail:=p; - end - else begin p:=fin_mlist(p); unsave; {end of |math_left_group|} - tail_append(new_noad); type(tail):=inner_noad; - math_type(nucleus(tail)):=sub_mlist; - info(nucleus(tail)):=p; - end; - end; - end; -end; -@z -%--------------------------------------- -@x [48] m.1192 l.22284 - Omega -begin if cur_group=math_shift_group then - begin scan_delimiter(garbage,false); - print_err("Extra "); print_esc("right"); -@.Extra \\right.@> - help1("I'm ignoring a \right that had no matching \left."); - error; - end -else off_save; -end -@y -begin if cur_group=math_shift_group then - begin if SGML_mode then scan_math(garbage) - else scan_delimiter(garbage,0); - print_err("Extra "); print_esc("right"); -@.Extra \\right.@> - help1("I'm ignoring a \right that had no matching \left."); - error; - end -else off_save; -end -@z -%--------------------------------------- -@x [48] m.1193 l.22327 - Omega -mmode+math_shift: if cur_group=math_shift_group then after_math - else off_save; -@y -mmode+math_shift: if cur_group=math_mml_group then after_mml - else if cur_group=math_shift_group then after_math - else off_save; -@z -%--------------------------------------- -@x [48] m.1194 l.22284 - Omega -procedure after_math; -var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'} -@!danger:boolean; {not enough symbol fonts are present} -@!m:integer; {|mmode| or |-mmode|} -@!p:pointer; {the formula} -@!a:pointer; {box containing equation number} -@<Local variables for finishing a displayed formula@>@; -begin danger:=false; -@<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; -m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest} -if mode=-m then {end of equation number} - begin @<Check that another \.\$ follows@>; - cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; - mlist_to_hlist; a:=hpack(link(temp_head),natural,info(math_dir_stack)); - unsave; decr(save_ptr); {now |cur_group=math_shift_group|} - if saved(0)=1 then l:=true; - danger:=false; - @<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; - m:=mode; p:=fin_mlist(null); - end -else a:=null; -if m<0 then @<Finish math in text@> -else begin if a=null then @<Check that another \.\$ follows@>; - @<Finish displayed math@>; - end; -end; -@y -procedure after_mml; -var p:pointer; -begin -unsave; -decr(save_ptr); -link(saved(0)):=link(head); -p:=saved(0); -pop_nest; -tail_append(p); -back_input; -end; - -procedure after_math; -var l:boolean; {`\.{\\leqno}' instead of `\.{\\eqno}'} -@!danger:boolean; {not enough symbol fonts are present} -@!m:integer; {|mmode| or |-mmode|} -@!p:pointer; {the formula} -@!a:pointer; {box containing equation number} -@<Local variables for finishing a displayed formula@>@; -begin danger:=false; -@<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; -m:=mode; l:=false; p:=fin_mlist(null); {this pops the nest} -if SGML_mode then decr(MML_level); -if mode=-m then {end of equation number} - begin @<Check that another \.\$ follows@>; - cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; - if SGML_mode then begin - tmp_back_at_bol:=sgml_out_mlist(true,true,false) - end - else begin - mlist_to_hlist; a:=hpack(link(temp_head),natural,info(math_dir_stack)); - end; - unsave; decr(save_ptr); {now |cur_group=math_shift_group|} - if saved(0)=1 then l:=true; - danger:=false; - @<Check that the necessary fonts for math symbols are present; - if not, flush the current math lists and set |danger:=true|@>; - m:=mode; p:=fin_mlist(null); - end -else a:=null; -if m<0 then @<Finish math in text@> -else begin if a=null then @<Check that another \.\$ follows@>; - @<Finish displayed math@>; - end; -end; -@z -%--------------------------------------- -@x [49] m.1196 l.22388 - Omega -@<Finish math in text@> = -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; -tmp_dir_stack:=math_dir_stack; -math_dir_stack:=link(math_dir_stack); -free_avail(tmp_dir_stack); -end -@y -@<Finish math in text@>= -begin -if not SGML_mode then begin - tail_append(new_math(math_surround,before)); - end; -cur_mlist:=p; cur_style:=text_style; mlist_penalties:=(mode>0); -if SGML_mode then begin -{ - if MML_level=0 then tmp_back_at_bol:=sgml_out_mlist(true,true,false) - else tail_append(cur_mlist); -} - sgml_starttexttag("inlinemath"); - sgml_startmathtag("math"); - tail_append(cur_mlist); - sgml_endmathtag("math"); - sgml_endtexttag("inlinemath"); - end -else begin - mlist_to_hlist; - link(tail):=link(temp_head); - while link(tail)<>null do tail:=link(tail); - tail_append(new_math(math_surround,after)); - end; -space_factor:=1000; unsave; -tmp_dir_stack:=math_dir_stack; -math_dir_stack:=link(math_dir_stack); -free_avail(tmp_dir_stack); -end -@z -%--------------------------------------- -@x [49] m.1197 l.22430 - Omega -@<Finish displayed math@>= -cur_mlist:=p; cur_style:=display_style; mlist_penalties:=false; -mlist_to_hlist; p:=link(temp_head);@/ -adjust_tail:=adjust_head; b:=hpack(p,natural,info(math_dir_stack)); -p:=list_ptr(b); -t:=adjust_tail; adjust_tail:=null;@/ -w:=width(b); z:=display_width; s:=display_indent; -if (a=null)or danger then - begin e:=0; q:=0; - end -else begin e:=width(a); q:=e+math_quad(text_size); - end; -if w+q>z then - @<Squeeze the equation as much as possible; if there is an equation - number that should go on a separate line by itself, - set~|e:=0|@>; -@<Determine the displacement, |d|, of the left edge of the equation, with - respect to the line size |z|, assuming that |l=false|@>; -@<Append the glue or equation number preceding the display@>; -@<Append the display and perhaps also the equation number@>; -@<Append the glue or equation number following the display@>; -resume_after_display -@y -@<Finish displayed math@>= -cur_mlist:=p; cur_style:=display_style; mlist_penalties:=false; -if SGML_mode then begin -{ - if MML_level=0 then tmp_back_at_bol:=sgml_out_mlist(true,true,false) - else tail_append(cur_mlist); -} - sgml_starttexttag("displaymath"); - sgml_startmathtag("math"); - tail_append(cur_mlist); - sgml_endmathtag("math"); - sgml_endtexttag("displaymath"); - end -else begin - mlist_to_hlist; p:=link(temp_head);@/ - adjust_tail:=adjust_head; b:=hpack(p,natural,info(math_dir_stack)); - p:=list_ptr(b); - t:=adjust_tail; adjust_tail:=null;@/ - w:=width(b); z:=display_width; s:=display_indent; - if (a=null)or danger then - begin e:=0; q:=0; - end - else begin e:=width(a); q:=e+math_quad(text_size); - end; - if w+q>z then - @<Squeeze the equation as much as possible; if there is an equation - number that should go on a separate line by itself, - set~|e:=0|@>; - @<Determine the displacement, |d|, of the left edge of the equation, with - respect to the line size |z|, assuming that |l=false|@>; - @<Append the glue or equation number preceding the display@>; - @<Append the display and perhaps also the equation number@>; - @<Append the glue or equation number following the display@>; - end; -resume_after_display -@z -%--------------------------------------- -@x [49] m.1257 l.23269 - Omega -@!flushable_string:str_number; {string not yet referenced} -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the font name} -@.texput@> -get_r_token; u:=cur_cs; -@y -@!flushable_string:str_number; {string not yet referenced} -@!cur_font_sort_name:str_number; {the name without the digits at the end} -@!new_length:integer; {length of font name, to become font sort name} -@!last_character:integer; {last character in font name} -@!i:integer; {to run through characters of name} -@!this_is_a_new_font:boolean; -begin if job_name=0 then open_log_file; - {avoid confusing \.{texput} with the font name} -@.texput@> -get_r_token; u:=cur_cs; -this_is_a_new_font:=false; -@z -%--------------------------------------- -@x [49] m.1257 l.23290 - Omega -common_ending: set_equiv(u,f); -set_new_eqtb(font_id_base+f,new_eqtb(u)); settext(font_id_base+f,t); -@y -this_is_a_new_font:=true; -common_ending: set_equiv(u,f); -set_new_eqtb(font_id_base+f,new_eqtb(u)); settext(font_id_base+f,t); -if this_is_a_new_font then - begin - if cur_name>=@"10000 then begin - new_length:=length(cur_name); - last_character:=str_pool[str_start(cur_name)+new_length-1]; - while (last_character>="0") and (last_character<="9") do begin - decr(new_length); - last_character:=str_pool[str_start(cur_name)+new_length-1]; - end; - for i:=1 to new_length do begin - append_char(str_pool[str_start(cur_name)+i-1]); - end; - cur_font_sort_name:=make_string; - font_sort_number:=font_sort_ptr+1; - for font_sorts:=font_sort_base+1 to font_sort_ptr do - if str_eq_str(font_sort_name(font_sorts),cur_font_sort_name) then begin - font_sort_number:=font_sorts; - break; - end; - font_name_sort(f):=font_sort_number; - if font_sort_number=(font_sort_ptr+1) then begin - incr(font_sort_ptr); - allocate_font_sort_table - (font_sort_ptr, - font_sort_offset_char_base+3*(font_ec(f)-font_bc(f)+1)); - font_sort_file_size(font_sort_ptr):= - font_sort_offset_char_base+3*(font_ec(f)-font_bc(f)+1); - font_sort_name(font_sort_ptr):=cur_font_sort_name; - font_sort_ec(font_sort_ptr):=font_ec(f); - font_sort_bc(font_sort_ptr):=font_bc(f); - cur_name:=cur_font_sort_name; - cur_ext:=".onm"; - pack_cur_name; - begin_file_reading; - if a_open_in(cur_file,kpse_tex_format) then begin - name:=a_make_name_string(cur_file); - print_ln; print("("); print(name); - @<Read the first line of the new file@>; - end - else end_file_reading; - end; - end; - end; -@z -%--------------------------------------- -@x [50] m.1320 l.23983 - Omega -@ @<Dump the font information@>= -@y -@ @<Dump the font information@>= -dump_int(font_sort_ptr); -for k:=null_font_sort to font_sort_ptr do - dump_font_sort_table(k,font_sort_file_size(k)); -@z -%--------------------------------------- -@x [50] m.1321 l.23993 - Omega -@ @<Undump the font information@>= -@y -@ @<Undump the font information@>= -undump_size(font_base)(font_max)('font sort max')(font_sort_ptr); -for k:=null_font_sort to font_sort_ptr do - undump_font_sort_table(k); -@z -%--------------------------------------- -@x [51] m.1333 l.24244 - Omega -procedure close_files_and_terminate; -var k:integer; {all-purpose index} -begin @<Finish the extensions@>; -@!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/ -wake_up_terminal; @<Finish the \.{DVI} file@>; -@y -procedure close_files_and_terminate; -var k:integer; {all-purpose index} -begin @<Finish the extensions@>; -@!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/ -wake_up_terminal; -if not SGML_mode then begin @<Finish the \.{DVI} file@>; end; -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/synctexdir/am/synctex.am b/Build/source/texk/web2c/synctexdir/am/synctex.am index 03d793eac69..4e26a01fe5d 100644 --- a/Build/source/texk/web2c/synctexdir/am/synctex.am +++ b/Build/source/texk/web2c/synctexdir/am/synctex.am @@ -168,5 +168,5 @@ EXTRA_DIST += \ ## Eventually delete these files ## -EXTRA_DIST += synctexdir/am/synctex.mk synctexdir/synctex.mk +EXTRA_DIST += synctexdir/synctex.mk diff --git a/Build/source/texk/web2c/synctexdir/am/synctex.mk b/Build/source/texk/web2c/synctexdir/am/synctex.mk deleted file mode 100644 index 3f3c4a0293a..00000000000 --- a/Build/source/texk/web2c/synctexdir/am/synctex.mk +++ /dev/null @@ -1,42 +0,0 @@ - -### SyncTeX support in xetex -# Actually, xetex cannot build without SyncTeX because the tex.web -# code does not provide proper entry points -# list of change files -xetex_ch_srcs-with_synctex-mem_only = \ - $(synctex_dir)/synctex-mem.ch0 \ - $(synctex_dir)/synctex-e-mem.ch0 \ - $(synctex_dir)/synctex-e-mem.ch1 \ - $(synctex_dir)/synctex-xe-mem.ch2 -xetex_ch_srcs-with_synctex = \ - $(xetex_ch_srcs-with_synctex-mem_only) \ - $(synctex_dir)/synctex-rec.ch0 \ - $(synctex_dir)/synctex-e-rec.ch0 \ - $(synctex_dir)/synctex-xe-rec.ch2 -xetex_ch_srcs-without_synctex = -xetex_post_ch_srcs-with_synctex = \ - $(synctex_dir)/synctex-xe-rec.ch3 -xetex_post_ch_srcs-without_synctex = -# The C sources and headers -xetex_o-with_synctex = synctex-xe.o -xetex_o-without_synctex = -synctex-xe.h: $(synctex_dir)/synctex.h - cat $(synctex_dir)/synctex.h >$@ -synctex-xetex.h: $(synctex_dir)/$@ - cat $(synctex_dir)/$@ >$@ -synctex-xe.c: xetexd.h $(synctex_dir)/synctex.c synctex-xetex.h - sed s/TEX-OR-MF-OR-MP/xetex/ $(synctex_dir)/synctex.c >$@ -xetexd.h-with_synctex = if test -z "`grep __SyncTeX__ xetexd.h`";\ - then\ - $(synctex_common_texd);\ - sed -f synctex_sed_command.txt xetexd.h > synctex_xetexd.h;\ - mv synctex_xetexd.h xetexd.h;\ - if test -z "`grep __SyncTeX__ xetexd.h`";\ - then\ - echo "warning: SyncTeX activation FAILED";\ - exit 1;\ - fi;\ - echo "warning: SyncTeX is enabled";\ - fi -xetexd.h-without_synctex = echo "warning: SyncTeX is NOT enabled" - diff --git a/Build/source/texk/web2c/tex.ch b/Build/source/texk/web2c/tex.ch index 765bab70e96..2343f1e3c63 100644 --- a/Build/source/texk/web2c/tex.ch +++ b/Build/source/texk/web2c/tex.ch @@ -2,8 +2,8 @@ % By Tim Morgan, UC Irvine ICS Department, and many others. % % Be very careful when making changes to this file, as it is used to -% generate TeX, e-TeX, and pdf[ex]TeX, and most changes require similar -% changes to be made to the Omega sources. +% generate TeX, e-TeX, and pdfTeX, and most changes require similar +% changes to be made to the Aleph sources. % % (05/28/86) ETM Started with TeX 2.0 % (06/03/87) ETM Brought up to TeX 2.2 diff --git a/Build/source/texk/web2c/texmfmem.h b/Build/source/texk/web2c/texmfmem.h index 0596376013e..30497f417ab 100644 --- a/Build/source/texk/web2c/texmfmem.h +++ b/Build/source/texk/web2c/texmfmem.h @@ -43,7 +43,7 @@ twohalves.u: B1 B0 JNK1 JNK2 fourquarters: B3 B2 B1 B0 - In Omega, quarterwords are two octets, so the picture becomes simpler: + In Aleph, quarterwords are two octets, so the picture becomes simpler: BigEndian: twohalves.v: RH_MM RH_ML RH_LM RH_LL LH_MM LH_ML LH_LM LH_LL @@ -62,8 +62,8 @@ include it from the change file instead. */ -/* Omega is sufficiently different to separate the definition. */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) && !defined(luaTeX) +/* Aleph is sufficiently different to separate the definition. */ +#if !defined(Aleph) && !defined(luaTeX) typedef union { @@ -181,7 +181,7 @@ typedef union #define qqqq v.QQQQ #endif -#else /* Omega || eOmega || Aleph */ +#else /* Aleph || luaTeX */ typedef union { @@ -257,7 +257,7 @@ typedef union #define gr gg.GLUE -#endif /* Omega || eOmega || Aleph || luaTeX */ +#endif /* Aleph || luaTeX */ #if defined(luaTeX) #define memory_word memoryword diff --git a/Build/source/texk/web2c/texmfmp-help.h b/Build/source/texk/web2c/texmfmp-help.h index 207c51c01ac..de6b6b1296f 100644 --- a/Build/source/texk/web2c/texmfmp-help.h +++ b/Build/source/texk/web2c/texmfmp-help.h @@ -75,19 +75,19 @@ const_string ALEPHHELP[] = { }; #endif /* Aleph */ -#ifdef luaTeX -const_string LUATEXHELP[] = { - "Usage: luatex [OPTION]... [TEXNAME[.tex]] [COMMANDS]", - " or: luatex [OPTION]... \\FIRST-LINE", - " or: luatex [OPTION]... &FMT ARGS", - " Run luaTeX on TEXNAME, usually creating TEXNAME.pdf.", - " Any remaining COMMANDS are processed as luaTeX input, after TEXNAME is read.", +#ifdef eTeX +const_string ETEXHELP[] = { + "Usage: etex [OPTION]... [TEXNAME[.tex]] [COMMANDS]", + " or: etex [OPTION]... \\FIRST-LINE", + " or: etex [OPTION]... &FMT ARGS", + " Run e-TeX on TEXNAME, usually creating TEXNAME.dvi.", + " Any remaining COMMANDS are processed as e-TeX input, after TEXNAME is read.", " If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,", " use it. Else use `NAME.fmt', where NAME is the program invocation name,", - " most commonly `luatex'.", + " most commonly `etex'.", "", " Alternatively, if the first non-option argument begins with a backslash,", - " interpret all non-option arguments as a line of luaTeX input.", + " interpret all non-option arguments as a line of e-TeX input.", "", " Alternatively, if the first non-option argument begins with a &, the", " next word is taken as the FMT to read, overriding all else. Any", @@ -100,8 +100,8 @@ const_string LUATEXHELP[] = { "[-no]-file-line-error disable/enable file:line:error style messages", "-fmt=FMTNAME use FMTNAME instead of program name or a %& line", "-halt-on-error stop processing at the first error", - "-ini be luainitex, for dumping formats; this is implicitly", - " true if the program name is `luainitex'", + "-ini be einitex, for dumping formats; this is implicitly", + " true if the program name is `einitex'", "-interaction=STRING set interaction mode (STRING=batchmode/nonstopmode/", " scrollmode/errorstopmode)", #ifdef IPC @@ -115,9 +115,7 @@ const_string LUATEXHELP[] = { "[-no]-mktex=FMT disable/enable mktexFMT generation (FMT=tex/tfm)", "-mltex enable MLTeX extensions such as \\charsubdef", "-output-comment=STRING use STRING for DVI file comment instead of date", - " (no effect for PDF)", "-output-directory=DIR use DIR as the directory to write files to", - "-output-format=FORMAT use FORMAT for job output; FORMAT is `dvi' or `pdf'", "[-no]-parse-first-line disable/enable parsing of the first line of the", " input file", "-progname=STRING set program (and fmt) name to STRING", @@ -128,27 +126,30 @@ const_string LUATEXHELP[] = { "-src-specials=WHERE insert source specials in certain places of", " the DVI file. WHERE is a comma-separated value", " list: cr display hbox math par parend vbox", +#if defined(__SyncTeX__) + "-synctex=NUMBER generate SyncTeX data for previewers if nonzero", +#endif "-translate-file=TCXNAME use the TCX file TCXNAME", "-8bit make all characters printable by default", "-help display this help and exit", "-version output version information and exit", NULL }; -#endif /* luaTeX */ - -#ifdef eTeX -const_string ETEXHELP[] = { - "Usage: etex [OPTION]... [TEXNAME[.tex]] [COMMANDS]", - " or: etex [OPTION]... \\FIRST-LINE", - " or: etex [OPTION]... &FMT ARGS", - " Run e-TeX on TEXNAME, usually creating TEXNAME.dvi.", - " Any remaining COMMANDS are processed as e-TeX input, after TEXNAME is read.", +#endif /* eTeX */ + +#ifdef luaTeX +const_string LUATEXHELP[] = { + "Usage: luatex [OPTION]... [TEXNAME[.tex]] [COMMANDS]", + " or: luatex [OPTION]... \\FIRST-LINE", + " or: luatex [OPTION]... &FMT ARGS", + " Run luaTeX on TEXNAME, usually creating TEXNAME.pdf.", + " Any remaining COMMANDS are processed as luaTeX input, after TEXNAME is read.", " If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,", " use it. Else use `NAME.fmt', where NAME is the program invocation name,", - " most commonly `etex'.", + " most commonly `luatex'.", "", " Alternatively, if the first non-option argument begins with a backslash,", - " interpret all non-option arguments as a line of e-TeX input.", + " interpret all non-option arguments as a line of luaTeX input.", "", " Alternatively, if the first non-option argument begins with a &, the", " next word is taken as the FMT to read, overriding all else. Any", @@ -161,8 +162,8 @@ const_string ETEXHELP[] = { "[-no]-file-line-error disable/enable file:line:error style messages", "-fmt=FMTNAME use FMTNAME instead of program name or a %& line", "-halt-on-error stop processing at the first error", - "-ini be einitex, for dumping formats; this is implicitly", - " true if the program name is `einitex'", + "-ini be luainitex, for dumping formats; this is implicitly", + " true if the program name is `luainitex'", "-interaction=STRING set interaction mode (STRING=batchmode/nonstopmode/", " scrollmode/errorstopmode)", #ifdef IPC @@ -176,7 +177,9 @@ const_string ETEXHELP[] = { "[-no]-mktex=FMT disable/enable mktexFMT generation (FMT=tex/tfm)", "-mltex enable MLTeX extensions such as \\charsubdef", "-output-comment=STRING use STRING for DVI file comment instead of date", + " (no effect for PDF)", "-output-directory=DIR use DIR as the directory to write files to", + "-output-format=FORMAT use FORMAT for job output; FORMAT is `dvi' or `pdf'", "[-no]-parse-first-line disable/enable parsing of the first line of the", " input file", "-progname=STRING set program (and fmt) name to STRING", @@ -187,17 +190,14 @@ const_string ETEXHELP[] = { "-src-specials=WHERE insert source specials in certain places of", " the DVI file. WHERE is a comma-separated value", " list: cr display hbox math par parend vbox", -#if defined(__SyncTeX__) - "-synctex=NUMBER generate SyncTeX data for previewers if nonzero", -#endif "-translate-file=TCXNAME use the TCX file TCXNAME", "-8bit make all characters printable by default", "-help display this help and exit", "-version output version information and exit", NULL }; -#endif /* eTeX */ - +#endif /* luaTeX */ + #ifdef MF const_string MFHELP[] = { "Usage: mf [OPTION]... [MFNAME[.mf]] [COMMANDS]", @@ -291,114 +291,6 @@ const_string MPHELP[] = { }; #endif /* MP */ -#ifdef Omega -const_string OMEGAHELP[] = { - "Usage: omega [OPTION]... [TEXNAME[.tex]] [COMMANDS]", - " or: omega [OPTION]... \\FIRST-LINE", - " or: omega [OPTION]... &FMT ARGS", - " Run Omega on TEXNAME, usually creating TEXNAME.dvi.", - " Any remaining COMMANDS are processed as Omega input, after TEXNAME is read.", - " If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,", - " use it. Else use `NAME.fmt', where NAME is the program invocation name,", - " most commonly `omega'.", - "", - " Alternatively, if the first non-option argument begins with a backslash,", - " interpret all non-option arguments as a line of Omega input.", - "", - " Alternatively, if the first non-option argument begins with a &, the", - " next word is taken as the FMT to read, overriding all else. Any", - " remaining arguments are processed as above.", - "", - " If no arguments or options are specified, prompt for input.", - "", - "[-no]-file-line-error disable/enable file:line:error style messages", - "-fmt=FMTNAME use FMTNAME instead of program name or a %& line", - "-halt-on-error stop processing at the first error", - "-ini be iniomega, for dumping formats; this is implicitly", - " true if the program name is `iniomega'", - "-interaction=STRING set interaction mode (STRING=batchmode/nonstopmode/", - " scrollmode/errorstopmode)", -#ifdef IPC - "-ipc send DVI output to a socket as well as the usual", - " output file", - "-ipc-start as -ipc, and also start the server at the other end", -#endif /* IPC */ - "-jobname=STRING set the job name to STRING", - "-kpathsea-debug=NUMBER set path searching debugging flags according to", - " the bits of NUMBER", - "[-no]-mktex=FMT disable/enable mktexFMT generation (FMT=tex/tfm)", - "-output-comment=STRING use STRING for DVI file comment instead of date", - "-output-directory=DIR use DIR as the directory to write files to", - "[-no]-parse-first-line disable/enable parsing of the first line of the", - " input file", - "-progname=STRING set program (and fmt) name to STRING", - "-recorder enable filename recorder (always on)", - "[-no]-shell-escape disable/enable \\write18{SHELL COMMAND}", - "-shell-restricted enable restricted \\write18", - "-src-specials insert source specials into the DVI file", - "-src-specials=WHERE insert source specials in certain places of", - " the DVI file. WHERE is a comma-separated value", - " list: cr display hbox math par parend vbox", - "-help display this help and exit", - "-version output version information and exit", - NULL -}; -#endif /* Omega */ - -#ifdef eOmega -const_string EOMEGAHELP[] = { - "Usage: eomega [OPTION]... [TEXNAME[.tex]] [COMMANDS]", - " or: eomega [OPTION]... \\FIRST-LINE", - " or: eomega [OPTION]... &FMT ARGS", - " Run e-Omega on TEXNAME, usually creating TEXNAME.dvi.", - " Any remaining COMMANDS are processed as e-Omega input, after TEXNAME is read.", - " If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,", - " use it. Else use `NAME.fmt', where NAME is the program invocation name,", - " most commonly `eomega'.", - "", - " Alternatively, if the first non-option argument begins with a backslash,", - " interpret all non-option arguments as a line of e-Omega input.", - "", - " Alternatively, if the first non-option argument begins with a &, the", - " next word is taken as the FMT to read, overriding all else. Any", - " remaining arguments are processed as above.", - "", - " If no arguments or options are specified, prompt for input.", - "", - "[-no]-file-line-error disable/enable file:line:error style messages", - "-fmt=FMTNAME use FMTNAME instead of program name or a %& line", - "-halt-on-error stop processing at the first error", - "-ini be inieomega, for dumping formats; this is implicitly", - " true if the program name is `inieomega'", - "-interaction=STRING set interaction mode (STRING=batchmode/nonstopmode/", - " scrollmode/errorstopmode)", -#ifdef IPC - "-ipc send DVI output to a socket as well as the usual", - " output file", - "-ipc-start as -ipc, and also start the server at the other end", -#endif /* IPC */ - "-jobname=STRING set the job name to STRING", - "-kpathsea-debug=NUMBER set path searching debugging flags according to", - " the bits of NUMBER", - "[-no]-mktex=FMT disable/enable mktexFMT generation (FMT=tex/tfm)", - "-output-comment=STRING use STRING for DVI file comment instead of date", - "-output-directory=DIR use DIR as the directory to write files to", - "[-no]-parse-first-line disable/enable parsing of the first line of the", - " input file", - "-progname=STRING set program (and fmt) name to STRING", - "-recorder enable filename recorder (always on)", - "[-no]-shell-escape disable/enable \\write18{SHELL COMMAND}", - "-shell-restricted enable restricted \\write18", - "-src-specials insert source specials into the DVI file", - "-src-specials=WHERE insert source specials in certain places of", - " the DVI file. WHERE is a comma-separated value", - " list: cr display hbox math par parend vbox", - "-help display this help and exit", - "-version output version information and exit", - NULL -}; -#endif /* eOmega */ - #ifdef pdfTeX const_string PDFTEXHELP[] = { "Usage: pdftex [OPTION]... [TEXNAME[.tex]] [COMMANDS]", diff --git a/Build/source/texk/web2c/texmfmp.h b/Build/source/texk/web2c/texmfmp.h index f7aa303ef55..e4a091bd1da 100644 --- a/Build/source/texk/web2c/texmfmp.h +++ b/Build/source/texk/web2c/texmfmp.h @@ -58,12 +58,6 @@ typedef void* voidpointer; #elif defined (XeTeX) #define TEXMFPOOLNAME "xetex.pool" #define TEXMFENGINENAME "xetex" -#elif defined (Omega) -#define TEXMFPOOLNAME "omega.pool" -#define TEXMFENGINENAME "omega" -#elif defined (eOmega) -#define TEXMFPOOLNAME "eomega.pool" -#define TEXMFENGINENAME "eomega" #elif defined (Aleph) #define TEXMFPOOLNAME "aleph.pool" #define TEXMFENGINENAME "aleph" @@ -123,7 +117,7 @@ void init_shell_escape (void); int shell_cmd_is_allowed (char **cmd, char **safecmd, char **cmdname); /* All but the Omega family use this. */ -#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +#if !defined(Aleph) extern void readtcxfile P1H(void); extern string translate_filename; #define translatefilename translate_filename diff --git a/Build/source/texk/web2c/web2c/ChangeLog b/Build/source/texk/web2c/web2c/ChangeLog index 567ea750bce..f7d72f90706 100644 --- a/Build/source/texk/web2c/web2c/ChangeLog +++ b/Build/source/texk/web2c/web2c/ChangeLog @@ -1,3 +1,8 @@ +2009-03-29 Peter Breitenlohner <peb@mppmu.mpg.de> + + * common.defines, convert, fixwrites.c, splitup.c: remove all + references to Omega, eOmega, and pdfeTeX. + 2009-03-27 Peter Breitenlohner <peb@mppmu.mpg.de> * convert (splitup_options for luatex)): avoid to split the C diff --git a/Build/source/texk/web2c/web2c/README b/Build/source/texk/web2c/web2c/README index 3471cac9798..8ad3b0eff39 100644 --- a/Build/source/texk/web2c/web2c/README +++ b/Build/source/texk/web2c/web2c/README @@ -11,7 +11,7 @@ compilers. To define a new symbol (e.g., a function) to be used in the change files, it's necessary to add it to texmf.defines (if it's only used in TeX/MF/MP) or common.defines (otherwise) here, as well as making the -actual definition. New functions in the libraryshould be declared +actual definition. New functions in the library should be declared somewhere, probably cpascal.h. Of course no underscores are allowed, since tangle removes them. diff --git a/Build/source/texk/web2c/web2c/common.defines b/Build/source/texk/web2c/web2c/common.defines index 59389314e5f..32a8ab6016a 100644 --- a/Build/source/texk/web2c/web2c/common.defines +++ b/Build/source/texk/web2c/web2c/common.defines @@ -64,7 +64,6 @@ @define const DVICOPYHELP; @define const DVITOMPHELP; @define const DVITYPEHELP; -@define const EOMEGAHELP; @define const ETEXHELP; @define const GFTODVIHELP; @define const GFTOPKHELP; @@ -75,14 +74,12 @@ @define const ODVICOPYHELP; @define const ODVITYPEHELP; @define const OFM2OPLHELP; -@define const OMEGAHELP; @define const OPL2OFMHELP; @define const OTANGLEHELP; @define const OVP2OVFHELP; @define const OVF2OVPHELP; @define const PATGENHELP; @define const PDFTEXHELP; -@define const PDFETEXHELP; @define const PKTOGFHELP; @define const PKTYPEHELP; @define const PLTOTFHELP; diff --git a/Build/source/texk/web2c/web2c/convert b/Build/source/texk/web2c/web2c/convert index 2f722d233fd..82f2cd3fe83 100755 --- a/Build/source/texk/web2c/web2c/convert +++ b/Build/source/texk/web2c/web2c/convert @@ -83,7 +83,7 @@ ${basefile}coerce.h" ${basefile}coerce.h" ;; - tex|eomega|etex|pdftex|pdfetex|omega|aleph|xetex) + tex|etex|pdftex|aleph|xetex) more_defines="$srcdir/web2c/texmf.defines $srcdir/synctexdir/synctex.defines" prog_defines="$srcdir/${basefile}dir/$basefile.defines" if test -f $prog_defines; then @@ -146,7 +146,7 @@ case $basefile in sed -e 's/(buftype)//g' -e 's/(pdstype)//g' <bibtex.h >xbibtex.h mv xbibtex.h bibtex.h ;; - tex|eomega|etex|luatex|pdftex|pdfetex|omega|aleph|mf|mp|xetex) + tex|etex|luatex|pdftex|aleph|mf|mp|xetex) sleep 2 # so timestamps are definitely later, to avoid make weirdness cat ${basefile}coerce.h $srcdir/web2c/coerce.h >x${basefile}coerce.h mv x${basefile}coerce.h ${basefile}coerce.h diff --git a/Build/source/texk/web2c/web2c/fixwrites.c b/Build/source/texk/web2c/web2c/fixwrites.c index 7a7e6a2aa1e..11b111258ad 100644 --- a/Build/source/texk/web2c/web2c/fixwrites.c +++ b/Build/source/texk/web2c/web2c/fixwrites.c @@ -163,7 +163,7 @@ bare P2C(string, cp, char, c) /* xchr[...] is supposed to be replaced by Xchr(...) when characters - take more than a single octet each, as is the case in Omega. Now + take more than a single octet each, as is the case in Aleph. Now there are several occurrences of xchr[...[...]...], which are translated into Xchr(...[...)...], and the compiler dies on syntax errors. Ensures that it is the matching bracket that is replaced, diff --git a/Build/source/texk/web2c/web2c/splitup.c b/Build/source/texk/web2c/web2c/splitup.c index 3d0dbee6929..1f9670f002d 100644 --- a/Build/source/texk/web2c/web2c/splitup.c +++ b/Build/source/texk/web2c/web2c/splitup.c @@ -117,24 +117,15 @@ main P2C(int, argc, string *, argv) } else if (STREQ (output_name, "aleph")) { fputs ("#define INITEX\n#define TeX\n#define Aleph\n", out); coerce = "alephcoerce.h"; - } else if (STREQ (output_name, "eomega")) { - fputs ("#define INITEX\n#define TeX\n#define eOmega\n", out); - coerce = "eomegacoerce.h"; } else if (STREQ (output_name, "etex")) { fputs ("#define INITEX\n#define TeX\n#define eTeX\n", out); coerce = "etexcoerce.h"; - } else if (STREQ (output_name, "omega")) { - fputs ("#define INITEX\n#define TeX\n#define Omega\n", out); - coerce = "omegacoerce.h"; } else if (STREQ (output_name, "pdftex")) { fputs ("#define INITEX\n#define TeX\n#define pdfTeX\n", out); coerce = "pdftexcoerce.h"; } else if (STREQ (output_name, "luatex")) { fputs ("#define INITEX\n#define TeX\n#define luaTeX\n", out); coerce = "luatexcoerce.h"; - } else if (STREQ (output_name, "pdfetex")) { - fputs ("#define INITEX\n#define TeX\n#define pdfeTeX\n", out); - coerce = "pdfetexcoerce.h"; } else if (STREQ (output_name, "xetex")) { fputs ("#define INITEX\n#define TeX\n#define XeTeX\n", out); coerce = "xetexcoerce.h"; @@ -142,7 +133,7 @@ main P2C(int, argc, string *, argv) fputs ("#define INIMP\n#define MP\n", out); coerce = "mpcoerce.h"; } else - FATAL1 ("Can only split mf, mp, tex, etex, omega, eomega, aleph, luatex, pdf[e]tex, or xetex,\n not %s", output_name); + FATAL1 ("Can only split mf, mp, tex, etex, aleph, luatex, pdftex, or xetex,\n not %s", output_name); coerce_len = strlen (coerce); diff --git a/Build/source/utils/configure b/Build/source/utils/configure index ba156f46dfb..55444a6b1e1 100755 --- a/Build/source/utils/configure +++ b/Build/source/utils/configure @@ -699,7 +699,6 @@ enable_fmtutil enable_ipc enable_tex enable_etex -enable_omega enable_aleph enable_pdftex enable_luatex @@ -1455,7 +1454,6 @@ Optional Features: --enable-ipc enable TeX's --ipc option, i.e., pipe to a program --disable-tex do not compile and install TeX --enable-etex compile and install e-TeX - --enable-omega compile and install Omega --disable-aleph do not compile and install Aleph --disable-pdftex do not compile and install pdfTeX --disable-luatex do not compile and install luaTeX @@ -2339,14 +2337,6 @@ case $enable_etex in yes|no) : ;; *) enable_etex=no ;; esac -# Check whether --enable-omega was given. -if test "${enable_omega+set}" = set; then - enableval=$enable_omega; -fi -case $enable_omega in - yes|no) : ;; - *) enable_omega=no ;; -esac # Check whether --enable-aleph was given. if test "${enable_aleph+set}" = set; then enableval=$enable_aleph; |