diff --git a/source/texk/web2c/eptexdir/COPYRIGHT b/source/texk/web2c/eptexdir/COPYRIGHT deleted file mode 100644 index 0ebd3f3a08..0000000000 --- a/source/texk/web2c/eptexdir/COPYRIGHT +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (C) 2009 ASCII MEDIA WORKS. -Copyright (C) 2010-2023 Japanese TeX Development Community -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the author may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/source/texk/web2c/eptexdir/am/eptex.am b/source/texk/web2c/eptexdir/am/eptex.am deleted file mode 100644 index 8ff94d6106..0000000000 --- a/source/texk/web2c/eptexdir/am/eptex.am +++ /dev/null @@ -1,135 +0,0 @@ -## $Id$ -## texk/web2c/eptexdir/am/eptex.am: Makefile fragment for e-pTeX. -## -## Copyright 2015-2024 Karl Berry -## Copyright 2011-2015 Peter Breitenlohner -## You may freely use, modify and/or distribute this file. - -## e-pTeX -## -if EPTEX -bin_PROGRAMS += eptex -if !PTEX -bin_links += eptex$(EXEEXT):ptex -endif !PTEX -endif EPTEX -EXTRA_PROGRAMS += eptex - -eptex_CPPFLAGS = $(PTEXENC_INCLUDES) $(AM_CPPFLAGS) -I$(srcdir)/libmd5 $(ZLIB_INCLUDES) - -# With --enable-ipc, e-pTeX may need to link with -lsocket. -eptex_LDADD = libkanji.a $(pproglib) $(PTEXENC_LIBS) $(LDADD) $(ipc_socketlibs) libmd5.a $(ZLIB_LIBS) -eptex_DEPENDENCIES = libkanji.a $(pproglib) $(PTEXENC_DEPEND) $(default_dependencies) libmd5.a $(ZLIB_DEPEND) - -# e-pTeX C sources -eptex_c_h = eptexini.c eptex0.c eptexcoerce.h eptexd.h -nodist_eptex_SOURCES = $(eptex_c_h) eptex-pool.c -dist_eptex_SOURCES = eptexdir/eptexextra.c eptexdir/eptexextra.h eptexdir/eptex_version.h - -# We must create eptexd.h and eptexdir/eptex_version.h before building the eptex_OBJECTS. -eptex_prereq = eptexd.h etexdir/etex_version.h ptexdir/ptex_version.h eptexdir/eptex_version.h -$(eptex_OBJECTS): $(eptex_prereq) - -$(eptex_c_h): eptex-web2c - @$(web2c) eptex -eptex-web2c: eptex.p $(web2c_texmf) eptexdir/eptex.defines - @$(web2c) eptex - -eptex-pool.c: eptex.pool eptexd.h $(makecpool_stamp) - $(makecpool) eptex >$@ || rm -f $@ - -# Tangling e-pTeX -eptex.p eptex.pool: eptex-tangle - $(texmf_tangle) eptex eptex -eptex-tangle: tangle$(EXEEXT) eptex.web eptex.ch tangle-sh - $(texmf_tangle) eptex eptex - -# Extract eptex version -$(srcdir)/eptexdir/eptex_version.h: @MAINTAINER_MODE_TRUE@ eptexdir/eptex.ech - $(AM_V_GEN)grep '^@d epTeX_version_string==' $(srcdir)/eptexdir/eptex.ech \ - | sed "s/^.*'-/#define EPTEX_VERSION \"/;s/'.*$$/\"/" >$@ - -# Generate eptex.web -eptex.web: tie$(EXEEXT) $(eptex_web_srcs) - $(tie_m) $(eptex_web_srcs) -eptex_web_srcs = \ - tex.web \ - etexdir/etex.ch \ - etexdir/tex.ch0 \ - tex.ch \ - tracingstacklevels.ch \ - partoken.ch \ - locnull-optimize.ch \ - showstream.ch \ - zlib-fmt.ch \ - etexdir/tex.ech - -# Generate eptex.ch -eptex.ch: tie$(EXEEXT) eptex.web $(eptex_ch_srcs) - $(tie_c) eptex.web $(eptex_ch_srcs) -eptex_ch_srcs = \ - eptexdir/eptex-base.ch \ - eptexdir/etex.ch0 \ - ptexdir/ptex-base.ch \ - eptexdir/eptex.ech \ - eptexdir/etex.ch1 \ - $(eptex_ch_synctex) \ - eptexdir/fam256.ch \ - eptexdir/pdfutils.ch \ - eptexdir/suppresserrors.ch \ - eptexdir/unbalanced-braces-eptex.ch \ - eptexdir/char-warning-eptex.ch \ - tex-binpool.ch - -EXTRA_DIST += $(eptex_web_srcs) $(eptex_ch_srcs) eptexdir/eptex.defines - -DISTCLEANFILES += $(nodist_eptex_SOURCES) eptex.web eptex.ch eptex-web2c \ - eptex.p eptex.pool eptex-tangle - -## -EXTRA_DIST += \ - eptexdir/ChangeLog \ - eptexdir/Changes.txt \ - eptexdir/README.txt - -# e-pTeX Tests -# -eptex_tests = \ - eptexdir/eptriptest.test \ - eptexdir/pdfprimitive.test \ - eptexdir/epver.test \ - eptexdir/wcfname.test -eptexdir/eptriptest.log: eptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT) -eptexdir/pdfprimitive.log: eptex$(EXEEXT) -eptexdir/epver.log eptexdir/wcfname.log: eptex$(EXEEXT) - -EXTRA_DIST += $(eptex_tests) - -if EPTEX -TESTS += $(eptex_tests) -TRIPTRAP += eptrip.diffs -TRIPTRAP_CLEAN += eptrip-clean -endif EPTEX - -## Test data and results -## -## eptexdir/eptriptest.test -EXTRA_DIST += \ - eptexdir/eptrip/eptrip.diffs \ - eptexdir/eptrip/eptrip.log \ - eptexdir/eptrip/eptrip.tex \ - eptexdir/eptrip/texmf.cnf -eptrip.diffs: eptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT) - $(triptrap_diffs) $@ -.PHONY: eptrip-clean -eptrip-clean: - rm -rf eptripdir -DISTCLEANFILES += eptrip.diffs -## eptexdir/pdfprimitive.test -EXTRA_DIST += \ - eptexdir/pdfprimitive.test \ - eptexdir/tests/pdfprimitive-test.tex \ - eptexdir/tests/pdfprimitive-eptex.log -DISTCLEANFILES += pdfprimitive-eptex.* - -# (end of eptex.am) diff --git a/source/texk/web2c/eptexdir/char-warning-eptex.ch b/source/texk/web2c/eptexdir/char-warning-eptex.ch deleted file mode 100644 index fcd528d45b..0000000000 --- a/source/texk/web2c/eptexdir/char-warning-eptex.ch +++ /dev/null @@ -1,101 +0,0 @@ -% $Id$ -% Public domain. See ../pdftexdir/char-warning-pdftex.ch for info. - -@x [30] If \tracinglostchars > 2, then promote full errors. -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -var @!l:0..255; {small indices or counters} -old_setting: integer; {saved value of |tracing_online|} -begin if tracing_lost_chars>0 then - begin old_setting:=tracing_online; - if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; - begin begin_diagnostic; - print_nl("Missing character: There is no "); -@.Missing character@> - if (c<" ")or(c>"~") then - begin print_char("^"); print_char("^"); - if c<64 then print_char(c+64) - else if c<128 then print_char(c-64) - else begin print_lc_hex(c div 16); print_lc_hex(c mod 16); end - end - else print_ASCII(c); - print(" in font "); - slow_print(font_name[f]); print_char("!"); end_diagnostic(false); - end; - tracing_online:=old_setting; - end; -end; -@y -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -var @!l:0..255; {small indices or counters} -old_setting: integer; {saved value of |tracing_online|} -begin if tracing_lost_chars>0 then - begin old_setting:=tracing_online; - if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; - if tracing_lost_chars > 2 then - print_err("Missing character: There is no ") - else begin - begin_diagnostic; - print_nl("Missing character: There is no ") - end; -@.Missing character@> - if (c<" ")or(c>"~") then begin - print_char("^"); print_char("^"); - if c<64 then print_char(c+64) - else if c<128 then print_char(c-64) - else begin print_lc_hex(c div 16); print_lc_hex(c mod 16); end - end - else print_ASCII(c); - if tracing_lost_chars > 2 then begin - print(" ("); - print_hex(c); - print(")"); - end; - print(" in font "); - slow_print(font_name[f]); - if tracing_lost_chars < 3 then print_char("!"); - tracing_online:=old_setting; - if tracing_lost_chars > 2 then begin - help0; - error; - end else end_diagnostic(false); - end; {of |tracing_lost_chars>0|} -end; {of procedure} -@z - -@x [30] Another warning for (u)pTeX. -@p procedure char_warning_jis(@!f:internal_font_number;@!jc:KANJI_code); -begin if tracing_lost_chars>0 then - begin begin_diagnostic; - print_nl("Character "); print_kanji(jc); print(" ("); - print_hex(jc); print(") cannot be typeset in JIS-encoded JFM "); - slow_print(font_name[f]); - print_char(","); print_nl("so I use .notdef glyph instead."); - end_diagnostic(false); - end; -end; -@y -@p procedure char_warning_jis(@!f:internal_font_number;@!jc:KANJI_code); -var old_setting: integer; {saved value of |tracing_online|} -begin if tracing_lost_chars>0 then - begin old_setting:=tracing_online; - if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; - if tracing_lost_chars > 2 then - print_err("Character ") - else begin - begin_diagnostic; - print_nl("Character ") - end; - print_kanji(jc); print(" ("); - print_hex(jc); print(") cannot be typeset in JIS-encoded JFM "); - slow_print(font_name[f]); - print_char(","); - if tracing_lost_chars > 2 then - begin print_nl(" so I use .notdef glyph instead"); - help0; error; end - else - begin print_nl("so I use .notdef glyph instead."); - end_diagnostic(false); end; - tracing_online:=old_setting; - end; {of |tracing_lost_chars>0|} -end; {of procedure} -@z diff --git a/source/texk/web2c/eptexdir/eptex.defines b/source/texk/web2c/eptexdir/eptex.defines deleted file mode 100644 index 88035e9c75..0000000000 --- a/source/texk/web2c/eptexdir/eptex.defines +++ /dev/null @@ -1,60 +0,0 @@ -{ defined at kanji.c, kanji.h, ptexenc/ptexenc.h } -@define function BYTE1 (); -@define function BYTE2 (); -@define function BYTE3 (); -@define function BYTE4 (); -@define function Hi (); -@define function Lo (); - -@define function getencstring; -@define function setencstring (); -@define function isinternalUPTEX; -@define function isterminalUTF8; - -@define function iskanji1 (); -@define function multistrlen (); -@define function multistrlenshort (); -@define function multistrlenfilename (); -@define function fromBUFF (); -@define function fromBUFFshort (); -@define function toBUFF (); - -@define function fromDVI (); -@define function toDVI (); -@define function putc2 (); -@define function fputs2 (); -@define function inputline2 (); -@define function ptencconvfirstline (); - -@define function setinfileenc (); -@define function setstdinenc (); - -@define function fromJIS (); -@define function fromEUC (); -@define function fromSJIS (); -@define function fromKUTEN (); -@define function UCStoUTF8 (); -@define function fromUCS (); -@define function toJIS (); -@define function toUCS (); - -@define function notkanjicharseq (); -@define function checkkanji (); -@define function ischarascii (); -@define function ischarkanji (); -@define function ismultiprn (); -@define function calcpos (); -@define function kcatcodekey (); - -@define function getintone (); -@define procedure setintone (); - -@define procedure dumpkanji (); -@define procedure undumpkanji (); - -@define procedure initstarttime; -@define procedure getcreationdate; -@define procedure getfilemoddate(); -@define procedure getfilesize(); -@define procedure getfiledump(); -@define procedure getmd5sum(); diff --git a/source/texk/web2c/eptexdir/eptex.ech b/source/texk/web2c/eptexdir/eptex.ech deleted file mode 100644 index bb4d31519f..0000000000 --- a/source/texk/web2c/eptexdir/eptex.ech +++ /dev/null @@ -1,804 +0,0 @@ -% eptexdir/eptex.ech: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. -% Public domain. Originally written by Peter Breitenlohner . - -%% new primitives by e-pTeX -%% -%% \epTeXversion -%% \epTeXinputencoding -%% -%% \currentspacingmode: 1 iff auto_spacing -%% \currentxspacingmode: 1 iff auto_xspacing -%% \lastnodechar: the (internal) character code of the last node -%% -1: non-character or null -%% \lastnodesubtype: the (internal) subtype of the last node -%% note: returns a value from the type if the node is s math noad. -%% -1: null -%% fallback to 0 if not explicitly set -%% \readpapersizespecial -%% 1: papersize special automatically sets \pdfpage{width,height} (quick hack). -%% 0: off -%% The default value is 1. -%% - -@x e-pTeX: logo -\def\eTeX{$\varepsilon$-\TeX} -@y -\def\eTeX{$\varepsilon$-\TeX} -\def\epTeX{$\varepsilon$-\pTeX} -@z - -@x [1.2] l.190 - epTeX: -@d eTeX_version_string=='-2.6' {current \eTeX\ version} -@y -@d eTeX_version_string=='-2.6' {current \eTeX\ version} -@# -@d epTeX_version_string=='-230214' -@d epTeX_version_number==230214 -@z - -@x e-pTeX: banner - {printed when \pTeX\ starts} -@y - {printed when \pTeX\ starts} -@# -@d epTeX_version==pTeX_version_string,epTeX_version_string,eTeX_version_string -@d epTeX_banner=='This is e-pTeX, Version 3.141592653',epTeX_version -@d epTeX_banner_k==epTeX_banner - {printed when \epTeX\ starts} -@z - -@x [1.2] -@d banner==pTeX_banner -@d banner_k==pTeX_banner_k -@y -@d banner==epTeX_banner -@d banner_k==epTeX_banner_k -@z - -@x [10.135] l.2895 - e-pTeX: box_lr and box_dir -In \eTeX\ the |subtype| field records the box direction mode |box_lr|. -@y -In \eTeX\ the |subtype| field records the box direction mode |box_lr|. -In \epTeX\ the |subtype| field is |qi(16*box_lr+box_dir)|. -@z - -@x -@d box_dir(#) == (qo(subtype(#))-dir_max) {direction of a box} -@d set_box_dir(#) == subtype(#):=set_box_dir_end -@y -@d box_dir(#) == ((qo(subtype(#)))mod 16 - dir_max) {direction of a box} -@d set_box_dir(#) == subtype(#):=box_lr(#)*16+set_box_dir_end -@z - -@x [17] -@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages} -@d eTeX_state_code=etex_int_base+9 {\eTeX\ state variables} -@y -@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages} -@d read_papersize_special_code=etex_int_base+9 -@d eTeX_state_code=etex_int_base+10 {\eTeX\ state variables} -@z - -@x [17] -@d saving_hyph_codes==int_par(saving_hyph_codes_code) -@y -@d saving_hyph_codes==int_par(saving_hyph_codes_code) -@d read_papersize_special==int_par(read_papersize_special_code) -@z - -@x [26.???] prepare for |scan_font_ident| to recognize \lastnodefont -@p procedure@?scan_int; forward; {scans an integer value} -@y -@p procedure@?scan_int; forward; {scans an integer value} -procedure@?scan_something_internal_ident; forward; -@z - -@x [26.413] l.8343 - e-pTeX: scan_something_internal -var m:halfword; {|chr_code| part of the operand token} -@y -label exit; -var m:halfword; {|chr_code| part of the operand token} -@z - -@x [26.???] add |scan_something_internal_ident| (used in |scan_font_ident|) -@; -end; -@y -@; -end; - -@ @p procedure scan_something_internal_ident; - begin scan_something_internal(ident_val,false); end; -@z - -@x -@d input_line_no_code=glue_val+2 {code for \.{\\inputlineno}} -@d badness_code=glue_val+2 {code for \.{\\badness}} -@y -@d last_node_subtype_code=glue_val+2 {code for \.{\\lastnodesubtype}} -@d last_node_char_code=glue_val+3 {code for \.{\\lastnodechar}} -@d last_node_font_code=glue_val+4 {code for \.{\\lastnodefont}} -@d input_line_no_code=glue_val+5 {code for \.{\\inputlineno}} -@d badness_code=glue_val+6 {code for \.{\\badness}} -@z - -@x -@d ptex_minor_version_code=ptex_version_code+1 {code for \.{\\ptexminorversion}} -@y -@d eptex_version_code=ptex_version_code+1 {code for \.{\\epTeXversion}} -@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} -@z - -@x e-pTeX: \current(x)spacingmode -@d eTeX_dim=eTeX_int+8 {first of \eTeX\ codes for dimensions} -@y -@d eTeX_dim=eTeX_int+10 {first of \eTeX\ codes for dimensions} -@z - -@x -primitive("ptexminorversion",last_item,ptex_minor_version_code); -@!@:ptexminorversion_}{\.{\\ptexminorversion} primitive@> -@y -primitive("epTeXversion",last_item,eptex_version_code); -@!@:epTeXversion_}{\.{\\epTeXversion} primitive@> -primitive("ptexminorversion",last_item,ptex_minor_version_code); -@!@:ptexminorversion_}{\.{\\ptexminorversion} primitive@> -@z - -@x - ptex_minor_version_code: print_esc("ptexminorversion"); -@y - eptex_version_code: print_esc("epTeXversion"); - ptex_minor_version_code: print_esc("ptexminorversion"); -@z - -@x [26.420] l.8474 - pTeX: Fetch a box dimension: dir_node -begin scan_eight_bit_int; q:=box(cur_val); -@y -begin scan_register_num; fetch_box(q); -@z - -@x [26.424] l.8508 - e-pTeX: TeXXeT and disp_node -node of the current list. -@y -node of the current list. -The macro |find_effective_tail_epTeX| sets |tx| to the last non-\.{\\endM} -non-|disp_node| of the current list. -@z - -@x [26.424] l.8510 - e-pTeX: last node -@d find_effective_tail==find_effective_tail_pTeX -@y -@d find_effective_tail_epTeX== -tx:=tail; -if not is_char_node(tx) then if type(tx)=disp_node then tx:=prev_node; -if not is_char_node(tx) then - if (type(tx)=disp_node) {|disp_node| from a discretionary} - or((type(tx)=math_node)and(subtype(tx)=end_M_code)) then - begin r:=head; q:=link(head); - while q<>tx do - begin if is_char_node(q) then r:=q - else if (type(q)<>disp_node)and - ((type(q)<>math_node)or(subtype(q)<>end_M_code)) then r:=q; - q:=link(q); - end; - tx:=r; - end -@# -@d find_effective_tail==find_effective_tail_epTeX -@# -@d find_last_char== -if font_dir[font(tx)]<>dir_default then cur_val:=KANJI(info(link(tx))) -else cur_val:=qo(character(tx)) - -@d ignore_font_kerning== -begin if ((type(tx)=glue_node) and (subtype(tx)=jfm_skip+1)) - or ((type(tx)=penalty_node) and (subtype(tx)=kinsoku_pena)) then - tx:=last_jchr -else if (type(tx)=kern_node) and (subtype(tx)=normal) then - begin r:=head; q:=link(head); - while q<>tx do - begin r:=q; - if is_char_node(q) then if font_dir[font(q)]<>dir_default then q:=link(q); - q:=link(q); - end; - if ((type(r)=penalty_node) and (subtype(r)=kinsoku_pena)) then tx:=last_jchr else tx:=r; - end; -end -@z - -@x - ptex_minor_version_code: cur_val:=pTeX_minor_version; -@y - eptex_version_code: cur_val:=epTeX_version_number; - ptex_minor_version_code: cur_val:=pTeX_minor_version; -@z - -@x [26.424] e-pTeX: node char - if cur_chr=last_node_type_code then - begin cur_val_level:=int_val; - if (tx=head)or(mode=0) then cur_val:=-1; - end - else cur_val_level:=cur_chr; -@y - if (cur_chr=last_node_type_code)or(cur_chr=last_node_subtype_code) then - begin cur_val_level:=int_val; - if (tx=head)or(mode=0) then cur_val:=-1; - end - else if cur_chr=last_node_char_code then - begin cur_val_level:=int_val; cur_val:=-1; - end - else if cur_chr=last_node_font_code then - begin cur_val_level:=ident_val; cur_val:=null_font+font_id_base; - end - else cur_val_level:=cur_chr; - if (cur_chr=last_node_char_code)or(cur_chr=last_node_font_code) then - if is_char_node(tx)and(tx<>head) then begin - { |tx| might be ``second node'' of a KANJI character; so we need to look the node before |tx| } - r:=head; q:=head; - while q<>tx do begin r:=q; q:=link(q); end; { |r| is the node just before |tx| } - if (r<>head)and is_char_node(r) then if font_dir[font(r)]<>dir_default then tx:=r; - if cur_chr=last_node_char_code then find_last_char - else cur_val:=font(tx)+font_id_base; - end; -@z - -@x [26.424] e-pTeX: node types - last_node_type_code: if type(tx)<=unset_node then cur_val:=type(tx)+1 - else cur_val:=unset_node+2; -@y - last_node_type_code: if type(tx)<=unset_node then - begin if type(tx)=dir_node then tx:=list_ptr(tx); - cur_val:=type(tx); - if cur_valdisp_node then cur_val:=cur_val-1; - end - else cur_val:=unset_node; {\epTeX's |unset_node| is \eTeX's |unset_node+2|} - last_node_subtype_code: if type(tx)<=unset_node then cur_val:=subtype(tx) - { non-math nodes } - else begin - cur_val:=type(tx); - if cur_valnull do r:=link(r); - cur_val:=qo(character(r)); - end - {else: already -1} - end; - last_node_font_code: begin - ignore_font_kerning; - if is_char_node(tx) then - cur_val:=font(tx)+font_id_base - else if type(tx)=ligature_node then - cur_val:=font(lig_char(tx))+font_id_base - {else: already nullfont} - end; -@z - -@x - last_node_type_code: cur_val:=last_node_type; -@y - last_node_type_code: cur_val:=last_node_type; - last_node_subtype_code: cur_val:=last_node_subtype; -@z - -@x e-pTeX: if primitives - leave room for three e-TeX codes -@d if_tdir_code=if_case_code+1 { `\.{\\iftdir}' } -@y -@d if_tdir_code=if_case_code+4 { `\.{\\iftdir}' } -@z - -@x [30.???] |scan_font_ident|: recognize \lastnodefont -else begin print_err("Missing font identifier"); -@y -else if (cur_cmd=last_item)and(cur_chr=last_node_font_code) then - begin scan_something_internal_ident; f:=cur_val-font_id_base; - end -else begin print_err("Missing font identifier"); -@z - -@x -@d box_lr(#) == (qo(subtype(#))) {direction mode of a box} -@d set_box_lr(#) == subtype(#):=set_box_lr_end -@d set_box_lr_end(#) == qi(#) -@y -@d box_lr(#) == ((qo(subtype(#)))div 16) {direction mode of a box} -@d set_box_lr(#) == subtype(#):=box_dir(#)+dir_max+set_box_lr_end -@d set_box_lr_end(#) == qi(16*(#)) -@z - -@x [35] -@= -text_baseline_shift_factor:=1000; -@y -@= -text_baseline_shift_factor:=1000; -read_papersize_special:=1; -@z - -@x -@!last_node_type:integer; {used to implement \.{\\lastnodetype}} -@y -@!last_node_type:integer; {used to implement \.{\\lastnodetype}} -@!last_node_subtype:integer; {used to implement \.{\\lastnodesubtype}} -@z - -@x -last_node_type:=-1; -@y -last_node_type:=-1; last_node_subtype:=-1; -@z - -@x [45.996] l.19420 -last_node_type:=type(p)+1; -@y -if type(p) - end - else if type(q)=disp_node then - begin prev_node:=p; gd:=2; - if link(q)=null then gm:=0 - else if type(link(q))=math_node then gm:=1 - else confusion("tail4"); -@:this can't happen tail4}{\quad tail4@> - end - else confusion("tail5"); -@:this can't happen tail5}{\quad tail5@> - end; -if gm=0 then if fm=2 then confusion("tail1") -@:this can't happen tail1}{\quad tail1@> - else if fm=1 then confusion("tail2"); -@:this can't happen tail2}{\quad tail2@> -if (fm+fd)=1 then begin fm:=0; fd:=0;@+end; -if gm=0 then fm:=0; -if gd=0 then fd:=0; -@# -if fd>0 then {merge a |disp_node| pair} - begin if gm=0 then {|p|$\to$|q=disp_node|$to$|null|} - begin t:=q; q:=null; link(p):=q; tail:=p;@+end - else if gm=1 then {|p|$\to$|q=disp_node|$to$|end_M|$to$|null|} - begin t:=q; q:=link(q); link(p):=q; gm:=2;@+end - else {|p|$\to$|q=end_M|$\to$|disp_node|$to$|null|} - begin t:=link(q); link(q):=null; tail:=q;@+end; -@# - if fd=1 then {|s|$\to$|r=disp_node|} - begin prev_node:=s; disp_dimen(r):=disp_dimen(t);@+end - else {|r|$\to$|p=disp_node|} - begin prev_node:=r; disp_dimen(p):=disp_dimen(t);@+end; - prev_disp:=pdisp; free_node(t,small_node_size); gd:=0; - end; -@# -if fm>0 then {drop \.{\\beginM} \.{\\endM} pair} - begin if gd=0 then {|p|$\to$|q=end_M|$to$|null|} - begin t:=q; q:=null; link(p):=q; tail:=p;@+end - else if gd=1 then {|p|$\to$|q=end_M|$to$|disp_node|$to$|null|} - begin t:=q; q:=link(q); link(p):=q; prev_node:=p; link(t):=null - end - else {|p|$\to$|q=disp_node|$\to$|end_M|$to$|null|} - begin t:=link(q); link(q):=null; tail:=q;@+end; -@# - if fm=1 then {|s|$\to$|r=begin_M|$\to$|p=disp_node|} - begin link(s):=p; link(r):=t; t:=r; prev_node:=s;@+end - else {|r|$\to$|p=begin_M|$\to$|q|} - begin link(r):=q; link(p):=t; t:=p; - if q=null then tail:=r@+else prev_node:=r; - end; - flush_node_list(t); - end -@# -@d check_effective_tail(#)==find_effective_tail_epTeX -@d fetch_effective_tail==fetch_effective_tail_epTeX -@z - -@x [47.1105] l.21246 -@!fd:boolean; {a final |disp_node| pair?} -@y -@!s:pointer; {running behind |r|} -@!t:pointer; -@!fm:integer; {1: if |r|, 2: if |p| is a \.{\\beginM} node} -@!gm:integer; {1: if |link(q)|, 2: if |q| is an \.{\\endM} node} -@!fd,@!gd:integer; {same for |disp_node|} -@z - -@x -@d set_language_code=5 {command modifier for \.{\\setlanguage}} -@y -@d set_language_code=5 {command modifier for \.{\\setlanguage}} -@d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}} -@z - -@x -primitive("setlanguage",extension,set_language_code);@/ -@!@:set_language_}{\.{\\setlanguage} primitive@> -@y -primitive("setlanguage",extension,set_language_code);@/ -@!@:set_language_}{\.{\\setlanguage} primitive@> -primitive("epTeXinputencoding",extension,epTeX_input_encoding_code);@/ -@!@:epTeX_input_encoding_}{\.{\\epTeXinputencoding} primitive@> -@z - -@x - set_language_code:print_esc("setlanguage"); -@y - set_language_code:print_esc("setlanguage"); - epTeX_input_encoding_code:print_esc("epTeXinputencoding"); -@z - -@x -set_language_code:@; -@y -set_language_code:@; -epTeX_input_encoding_code:@; -@z - -@x -@ @= -@y -@ @= -procedure eptex_set_input_encoding; -var j,k:integer; -begin - scan_file_name; - pack_cur_name; - if state=token_list then - begin k:=input_ptr-1; j:=-1; - while k>=0 do - begin if input_stack[k].state_field=token_list then decr(k) - else if input_stack[k].name_field>19 then - begin j:=input_stack[k].index_field; k:=-1; end - else begin j:=-(input_stack[k].name_field+1); k:=-1; end - end - end - else if name>19 then j:=index else j:=-(name+1); - if (j>=0) or (j=-1) or (j=-18) then begin - k:=true; - if j>=0 then k:=setinfileenc(input_file[j],stringcast(name_of_file+1)) - else k:=setstdinenc(stringcast(name_of_file+1)); - if k = false then - begin begin_diagnostic; - print_nl("Unknown encoding `"); - slow_print(cur_area); slow_print(cur_name); slow_print(cur_ext); - print("'"); end_diagnostic(false); - end - end - else - begin begin_diagnostic; j:=-j-1; - print_ln; - print_nl("Warning: \epTeXinputencoding is ignored, since I am current reading"); - print_nl("from "); - if j>=18 then print("a pseudo file created by \scantokens.") - else begin print("input stream "); print_int(j); print("."); end; - end_diagnostic(false); - end -end; - -@ @= -eptex_set_input_encoding - -@ @= -@z - -@x -primitive("lastnodetype",last_item,last_node_type_code); -@!@:last_node_type_}{\.{\\lastnodetype} primitive@> -@y -primitive("lastnodetype",last_item,last_node_type_code); -@!@:last_node_type_}{\.{\\lastnodetype} primitive@> -primitive("lastnodesubtype",last_item,last_node_subtype_code); -@!@:last_node_subtype_}{\.{\\lastnodesubtype} primitive@> -primitive("lastnodechar",last_item,last_node_char_code); -@!@:last_node_char_}{\.{\\lastnodechar} primitive@> -primitive("lastnodefont",last_item,last_node_font_code); -@!@:last_node_font_}{\.{\\lastnodefont} primitive@> -@z - -@x -last_node_type_code: print_esc("lastnodetype"); -@y -last_node_type_code: print_esc("lastnodetype"); -last_node_subtype_code: print_esc("lastnodesubtype"); -last_node_char_code: print_esc("lastnodechar"); -last_node_font_code: print_esc("lastnodefont"); -@z - -@x -primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/ -@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@> -@y -primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/ -@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@> -primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ -@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> -@z - -@x -saving_hyph_codes_code:print_esc("savinghyphcodes"); -@y -saving_hyph_codes_code:print_esc("savinghyphcodes"); -read_papersize_special_code:print_esc("readpapersizespecial"); -@z - -@x e-pTeX: font_char_{wd,ht,dp,ic}_code l.27306 -font_char_ic_code: begin scan_font_ident; q:=cur_val; scan_char_num; - if (font_bc[q]<=cur_val)and(font_ec[q]>=cur_val) then - begin i:=char_info(q)(qi(cur_val)); - case m of - font_char_wd_code: cur_val:=char_width(q)(i); - font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); - font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); - font_char_ic_code: cur_val:=char_italic(q)(i); - end; {there are no other cases} - end - else cur_val:=0; - end; -@y -font_char_ic_code: begin scan_font_ident; q:=cur_val; - if font_dir[q]<>dir_default then {Japanese font} - begin scan_int; - if cur_val>=0 then - begin if is_char_kanji(cur_val) then {Japanese Character} - cur_val:=get_jfm_pos(KANJI(cur_val),q) - else cur_val:=-1 - end - else begin - cur_val:=-(cur_val+1); - if (font_bc[q]>cur_val)or(font_ec[q]-1 then - begin - i:=orig_char_info(q)(qi(cur_val)); - case m of - font_char_wd_code: cur_val:=char_width(q)(i); - font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); - font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); - font_char_ic_code: cur_val:=char_italic(q)(i); - end; {there are no other cases} - end - else cur_val:=0; - end - else begin scan_ascii_num; - if (font_bc[q]<=cur_val)and(font_ec[q]>=cur_val) then - begin i:=orig_char_info(q)(qi(cur_val)); - case m of - font_char_wd_code: cur_val:=char_width(q)(i); - font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); - font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); - font_char_ic_code: cur_val:=char_italic(q)(i); - end; {there are no other cases} - end - else cur_val:=0; - end - end; -@z - -@x e-pTeX: displacement value when typesetting right-to-left l.27798 -@!LR_ptr:pointer; {stack of LR codes for |hpack|, |ship_out|, and |init_math|} -@y -@!revdisp:scaled; {temporary value of displacement} -@!LR_ptr:pointer; {stack of LR codes for |hpack|, |ship_out|, and |init_math|} -@z - -@x e-pTeX: reverse nodes of an hlist l.28010 -var l:pointer; {the new list} -@y -var l,la:pointer; {the new list} -disp,disp2: scaled; { displacement } disped: boolean; -@z -@x e-pTeX: reverse nodes of an hlist l.28010 -begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); -@y -begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); -disp:=revdisp; disped:=false; -@z -@x e-pTeX: reverse nodes of an hlist l.28010 -done:reverse:=l; -@y -done: {if the beginning node of the new list isn't |disp_node|, - we insert |disp_node| to fix.} -if (l<>null)and(type(l)<>disp_node) then begin - p:=get_node(small_node_size); type(p):=disp_node; - disp_dimen(p):=disp; link(p):=l; reverse:=p; - end -else reverse:=l; -@z -@x e-pTeX: reverse nodes of an hlist l.28010 - q:=link(p); link(p):=l; l:=p; p:=q; -@y - if font_dir[f]<>dir_default then begin - q:=link(p); la:=l; l:=p; p:=link(q); link(q):=la; - end - else begin q:=link(p); link(p):=l; l:=p; p:=q; end; -@z -@x e-pTeX: reverse nodes of an hlist l.28010 -othercases goto next_p -@y -disp_node: begin - disp2:=disp_dimen(p); disp_dimen(p):=disp; disp:=disp2; - if not disped then disped:=true; end; -othercases goto next_p -@z - -@x e-pTeX: just_copy - hlist_node,vlist_node: begin r:=get_node(box_node_size); -@y - dir_node, - hlist_node,vlist_node: begin r:=get_node(box_node_size); -@z -@x e-pTeX: just_copy - mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last two words} -@y - mem[r+7]:=mem[p+7]; - mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last three words} - add_glue_ref(space_ptr(r)); add_glue_ref(xspace_ptr(r)); -@z - -@x e-pTeX: pseudo file - buffer[last]:=w.b0; buffer[last+1]:=w.b1; - buffer[last+2]:=w.b2; buffer[last+3]:=w.b3; -@y - buffer[last]:=w.b0 mod @"100; buffer[last+1]:=w.b1 mod @"100; - buffer[last+2]:=w.b2 mod @"100; buffer[last+3]:=w.b3 mod @"100;@/ - buffer2[last]:=0; buffer2[last+1]:=0; - buffer2[last+2]:=0; buffer2[last+3]:=0; -@z - -@x e-pTeX: \readline -@ @= -if j=1 then - begin while loc<=limit do {current line not yet finished} - begin cur_chr:=buffer[loc]; incr(loc); - if cur_chr=" " then cur_tok:=space_token - @+else cur_tok:=cur_chr+other_token; -@y -@ @= -if j=1 then - begin while loc<=limit do {current line not yet finished} - begin cur_chr:=buffer[loc]; incr(loc); - if multistrlen(ustringcast(buffer), limit+1, loc-1)=2 then - begin cur_tok:=fromBUFF(ustringcast(buffer), limit+1, loc-1); incr(loc); - end - else if cur_chr=" " then cur_tok:=space_token - @+else cur_tok:=cur_chr+other_token; -@z - -@x e-pTeX: ifcsname l.28620 - buffer[m]:=info(p) mod @'400; incr(m); p:=link(p); -@y - if check_kanji(info(p)) then {|wchar_token|} - begin buffer[m]:=Hi(info(p)); buffer2[m]:=1; incr(m); buffer2[m]:=1; - end - else buffer2[m]:=0; - buffer[m]:=Lo(info(p)); incr(m); p:=link(p); -@z - -@x e-pTeX: if_font_char_code l.28633 -if_font_char_code:begin scan_font_ident; n:=cur_val; scan_char_num; - if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then - b:=char_exists(char_info(n)(qi(cur_val))) - else b:=false; - end; -@y -if_font_char_code:begin scan_font_ident; n:=cur_val; - if font_dir[n]<>dir_default then {Japanese font} - begin scan_int; - if cur_val>=0 then b:=is_char_kanji(cur_val) - { In u\pTeX, $\hbox{|is_char_kanji|} = \lambda x\mathpunct{.} x\ge 0$ } - else begin - cur_val:=-(cur_val+1); - b:=(font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) - end - end - else begin scan_ascii_num; - if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then @/ - b:=char_exists(orig_char_info(n)(qi(cur_val))) - else b:=false; - end; - end; -@z - -@x e-pTeX: pTeX has \showmode, follow showstream.ch r61589 -@= -begin print_nl("> "); -@y -@= -begin - @ - print_nl("> "); -@z - -@x -procedure print_direction(@!d:integer); {print the direction represented by d} -@y -procedure print_direction_alt(@!d:integer); -var x: boolean; -begin x:=false; -case abs(d) of -dir_yoko: begin print(", yoko"); x:=true; end; -dir_tate: begin print(", tate"); x:=true; end; -dir_dtou: begin print(", dtou"); x:=true; end; -end; -if x then begin if d<0 then print("(math)"); -print(" direction"); end; -end; -@# -procedure print_direction(@!d:integer); {print the direction represented by d} -@z - -@x e-pTeX: fetch \(no)auto(x)spacing status -@* \[54] System-dependent changes. -@y -@ The \.{\\currentspacingmode} and \.{\\currentxspacingmode} commands -return the current \pTeX's status of \.{\\(no)autospacing} and -\.{\\(no)autoxspacing} respectively. - -@d current_spacing_mode_code=eTeX_int+8 {code for \.{\\currentspacingmode}} -@d current_xspacing_mode_code=eTeX_int+9 {code for \.{\\currentxspacingmode}} - -@= -primitive("currentspacingmode",last_item,current_spacing_mode_code); -@!@:current_spacing_mode_}{\.{\\currentspacingmode} primitive@> -primitive("currentxspacingmode",last_item,current_xspacing_mode_code); -@!@:current_xspacing_mode_}{\.{\\currentxspacingmode} primitive@> - -@ @= -current_spacing_mode_code: print_esc("currentspacingmode"); -current_xspacing_mode_code: print_esc("currentxspacingmode"); - -@ @= -current_spacing_mode_code: cur_val:=auto_spacing; -current_xspacing_mode_code: cur_val:=auto_xspacing; - -@* \[54] System-dependent changes. -@z diff --git a/source/texk/web2c/eptexdir/eptex_version.h b/source/texk/web2c/eptexdir/eptex_version.h deleted file mode 100644 index 297bd81e7f..0000000000 --- a/source/texk/web2c/eptexdir/eptex_version.h +++ /dev/null @@ -1 +0,0 @@ -#define EPTEX_VERSION "230214" diff --git a/source/texk/web2c/eptexdir/eptexextra.c b/source/texk/web2c/eptexdir/eptexextra.c deleted file mode 100644 index c60bb42922..0000000000 --- a/source/texk/web2c/eptexdir/eptexextra.c +++ /dev/null @@ -1,12 +0,0 @@ -/* eptexextra.c: Hand-coded routines for e-pTeX. - - This file is public domain. */ - -#define EXTERN /* Instantiate data from eptexd.h here. */ -#define DLLPROC dlleptexmain - -/* This file defines TeX and epTeX. */ -#include - -/* Hand-coded routines for TeX or Metafont in C. */ -#include diff --git a/source/texk/web2c/eptexdir/eptexextra.h b/source/texk/web2c/eptexdir/eptexextra.h deleted file mode 100644 index 6dba1f031a..0000000000 --- a/source/texk/web2c/eptexdir/eptexextra.h +++ /dev/null @@ -1,26 +0,0 @@ -/* eptexextra.h: banner etc. for e-pTeX. - - This is included by e-pTeX, from eptexextra.c -*/ - -#include /* for ETEX_VERSION */ -#include /* for EPTEX_VERSION */ -#include /* for PTEX_VERSION */ - -#define BANNER "This is e-pTeX, Version 3.141592653-" PTEX_VERSION "-" EPTEX_VERSION "-" ETEX_VERSION -#define COPYRIGHT_HOLDER "D.E. Knuth" -#define AUTHOR "Japanese TeX Development Community" -#define PROGRAM_HELP EPTEXHELP -#define BUG_ADDRESS "issue@texjp.org" -#define DUMP_VAR TEXformatdefault -#define DUMP_LENGTH_VAR formatdefaultlength -#define DUMP_OPTION "fmt" -#define DUMP_EXT ".fmt" -#define INPUT_FORMAT kpse_tex_format -#define INI_PROGRAM "inieptex" -#define VIR_PROGRAM "vireptex" - -#ifdef Xchr -#undef Xchr -#define Xchr(x) (x) -#endif /* Xchr */ diff --git a/source/texk/web2c/eptexdir/eptriptest.test b/source/texk/web2c/eptexdir/eptriptest.test deleted file mode 100755 index c295d74555..0000000000 --- a/source/texk/web2c/eptexdir/eptriptest.test +++ /dev/null @@ -1,220 +0,0 @@ -#! /bin/sh -vx -# $Id$ -# Copyright 2023 Japanese TeX Development Community -# Copyright 2017-2018 Karl Berry -# Copyright 2011-2014 Peter Breitenlohner -# Copyright 2010 Hironori Kitagawa -# You may freely use, modify and/or distribute this file. - -W2CDir=${W2CDir:-..} -ExeExt=${ExeExt:-} -_eptex=$W2CDir/eptex$ExeExt -_pltotf=$W2CDir/pltotf$ExeExt -_tftopl=$W2CDir/tftopl$ExeExt -_dvitype=$W2CDir/dvitype$ExeExt - -LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE - -testdir=$abs_srcdir/triptrap -etestdir=$abs_srcdir/etexdir/etrip -eptestdir=$abs_srcdir/eptexdir/eptrip - -TEXMFCNF=$eptestdir; export TEXMFCNF - -rm -rf eptripdir -mkdir eptripdir -cd eptripdir -mkdir -p a b - -# TeX Live generic -cat >filter <<-\_EOF - /^\*\* \&trip trip/d - /^\*\*entering extended mode/d - s,^(trip\.tex ##,**(./trip.tex ##, - s,^## (\./trip\.tex,**(./trip.tex ##, - s/ (TeX Live 20[^)]*)// - s/ (Web2C 202[3-9])// - s/(preloaded format=.*tex)/(INITEX)/ - s/format=trip [^)][^)]*)/format=trip)/ - s/) [0-9A-Z: ]*$/)/ - s,^(\./,(, - s/[1-9][0-9]* strings out of [1-9].*/XX strings out of YYY/ - s/[1-9][0-9]* string characters out of [1-9].*/XXX string characters out of YYYY/ - s/sequences out of [1-9].*/sequences out of YYYY/ - s/[1-9] hyphenation exceptions* out of [1-9].*/X hyphenation exceptions out of YYY/ - s/[1-9][0-9]* strings of total length [1-9].*/XXXX strings of total length YYYYY/ - s/9 ops out of [1-9][0-9]*/9 ops out of YYY/ - s/TeX output ....\...\...:..../TeX output YYYY.MM.DD:hhmm/ - _EOF - -# x86 glue rounding -cat >>filter <<-\_EOF - s/ 16341\.999.*fil/ 16342.0fil/ - s/ 16238\.999.*fil/ 16239.0fil/ - s/ 16317\.999.*fil/ 16318.0fil/ - s/ 16330\.999.*fil/ 16331.0fil/ - s/ 16331\.999.*fil/ 16332.0fil/ - s/ 16343\.999.*fil/ 16344.0fil/ - s/ 9737\.587..fil/ 9737.58789fil/ - s/down4 639342.../down4 639342208/ - s/y4 2039217../y4 203921760/ - s/y0 2039217../y0 203921760/ - _EOF - -# epTeX -cat >>filter <<-\_EOF - s/This is .*TeX,/This is *TeX,/ - s/(utf8[^)]*) // - s/ Version 3\.141592653[^(]*(/ Version 3.141592653* (/ - s/ before: [1-9][0-9][0-9][0-9]*&[1-9][0-9][0-9][0-9]*; / before: XXX\&YYY; / - s/ after: [1-9][0-9][0-9][0-9]*&[1-9][0-9][0-9][0-9]*; / after: XXX\&YYY; / - s/ still untouched: [1-9][0-9][0-9][0-9]*/ still untouched: XXX/ - _EOF -cat >filter1 <<-\_EOF - :l - N - $!b l - s/ inside a group at level 1).*bottom level/ inside a group at level 1)/ - _EOF - -dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'" - -echo ">>> Running e-TRIP test for e-pTeX." >&2 -echo ">>> See $eptestdir/eptrip.diffs for example of acceptable diffs." >&2 - -# pTeX outputs direction of boxes. -P_SED1='s/, yoko direction//;s/yoko direction, //' -P_SED2='s/yoko(math) direction, //' - -is_OK=: - -set -x - -echo "*** TRIP test for e-pTeX in compatibility mode ***." - -$_pltotf $testdir/trip.pl trip.tfm || exit 1 - -$_tftopl ./trip.tfm trip.pl || exit 1 - -diff $testdir/trip.pl trip.pl || is_OK=false - -# get same filename in log -$LN_S $testdir/trip.tex . - -rm -f trip.log -$_eptex --progname=epinitex --ini <$testdir/trip1.in >cptripin.fot -if test ! -s trip.fmt; then - echo "*** trip.fmt not created by trip1.in, investigate!" >&2 - exit 1 -fi -sed "$P_SED1" trip.log > cptripin.log || exit 1 -diff $testdir/tripin.log cptripin.log - -# May as well test non-ini second time through. -rm -f trip.log -$_eptex --progname=eptex <$testdir/trip2.in >cptrip.fot -sed "$P_SED1;$P_SED2" trip.log > cptrip.log -#diff $testdir/trip.fot cptrip.fot - -# We use $DIFF instead of `diff' only for those files where there -# might actually be legitimate numerical differences. -$DIFF $DIFFFLAGS $testdir/trip.log cptrip.log - -mv tripos.tex cptripos.tex -diff $testdir/tripos.tex cptripos.tex - -eval $_dvitype $dvitype_args trip.dvi >cptrip.typ || exit 1 -#$DIFF $DIFFFLAGS $testdir/trip.typ cptrip.typ - -for f in trip.fot trip.typ; do - sed -f filter $testdir/$f >a/$f - sed -f filter cp$f >b/$f - diff a/$f b/$f || is_OK=false -done - -mv trip.fmt ctrip.fmt - -# ================================= - -echo "*** TRIP test for e-pTeX in extended mode ***." - -rm -f trip.log -$_eptex --progname=epinitex --ini <$etestdir/etrip1.in >xptripin.fot -if test ! -s trip.fmt; then - echo "*** trip.fmt not created by etrip1.in, investigate!" >&2 - exit 1 -fi -sed "$P_SED1" trip.log > xptripin.log || exit 1 -diff $testdir/tripin.log xptripin.log - -# May as well test non-ini second time through. -rm -f trip.log -$_eptex --progname=eptex <$etestdir/trip2.in >xptrip.fot -sed "$P_SED1;$P_SED2" trip.log > xptrip.log -#diff $testdir/trip.fot xptrip.fot - -# We use $DIFF instead of `diff' only for those files where there -# might actually be legitimate numerical differences. -$DIFF $DIFFFLAGS $testdir/trip.log xptrip.log - -mv tripos.tex xptripos.tex -diff $testdir/tripos.tex xptripos.tex - -eval $_dvitype $dvitype_args trip.dvi >xptrip.typ || exit 1 -#$DIFF $DIFFFLAGS $testdir/trip.typ xptrip.typ - -for f in trip.fot trip.typ; do - sed -f filter $testdir/$f >a/x$f - sed -f filter xp$f | sed -f filter1 >b/x$f - diff a/x$f b/x$f || is_OK=false -done - -mv trip.fmt xtrip.fmt - -# ================================= - -echo "*** e-TeX specific part of e-TRIP test for e-pTeX ***." - -$_pltotf $etestdir/etrip.pl etrip.tfm || exit 1 - -$_tftopl ./etrip.tfm etrip.pl || exit 1 - -diff $etestdir/etrip.pl etrip.pl || is_OK=false - -# get same filename in log -$LN_S $eptestdir/eptrip.tex etrip.tex - -$_eptex --progname=epinitex --ini <$etestdir/etrip2.in >eptripin.fot -if test ! -s etrip.fmt; then - echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2 - exit 1 -fi -sed "$P_SED1" etrip.log > eptripin.log || exit 1 -diff $etestdir/etripin.log eptripin.log - -# May as well test non-ini second time through. -$_eptex --progname=eptex <$etestdir/etrip3.in >eptrip.fot -sed "$P_SED1;$P_SED2" etrip.log > eptrip.log -#diff $etestdir/etrip.fot eptrip.fot - -# We use $DIFF instead of `diff' only for those files where there -# might actually be legitimate numerical differences. -$DIFF $DIFFFLAGS $eptestdir/eptrip.log eptrip.log - -mv etrip.out eptrip.out -diff $etestdir/etrip.out eptrip.out - -eval $_dvitype $dvitype_args etrip.dvi >eptrip.typ || exit 1 -#$DIFF $DIFFFLAGS $etestdir/etrip.typ eptrip.typ - -for f in trip.fot trip.typ; do - sed -f filter $etestdir/e$f >a/e$f - sed -f filter ep$f >b/e$f - diff a/e$f b/e$f || is_OK=false -done - -$is_OK || { - echo ">>> There were some errors." >&2 - exit 1 -} - diff --git a/source/texk/web2c/eptexdir/epver.test b/source/texk/web2c/eptexdir/epver.test deleted file mode 100755 index 9f14d05543..0000000000 --- a/source/texk/web2c/eptexdir/epver.test +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -vx -# $Id$ -# Copyright 2019 Hironobu Yamashita -# You may freely use, modify and/or distribute this file. - -BinDir=${BinDir:-.} -ExeExt=${ExeExt:-} -_eptex=$BinDir/eptex$ExeExt - -LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE - -TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF -TEXINPUTS="$srcdir/ptexdir/tests;."; export TEXINPUTS - -# check consistency between runtime terminal and log -$_eptex -ini -etex -interaction batchmode -jobname epver1-log pver1.tex >epver1-term.log || exit 1 -sed -n 's/^This is \([-A-Za-z]*\), Version [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \ - epver1-term.log >epver1-term_ed.log || exit 2 -sed -n 's/^This is \([-A-Za-z]*\), Version [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \ - epver1-log.log >epver1-log_ed.log || exit 3 -diff epver1-term_ed.log epver1-log_ed.log || exit 4 - -# check consistency between runtime and version output -$_eptex -version >epver2-self.log || exit 5 -sed -n '1 s/^\([-A-Za-z]*\) [^-]*-\([^ ]*\) \(.*\)/\1 \2/p' \ - epver2-self.log >epver2-self_ed.log || exit 6 -diff epver1-term_ed.log epver2-self_ed.log || exit 7 - -# check consistency between version output and version primitives -$_eptex -ini -etex -interaction batchmode -jobname epver2-prim pver2.tex || exit 8 -sed -n 's/^Engine \([-A-Za-z]*\) \([^ ]*\) \(.*\)/\1 \2/p' \ - epver2-prim.log >epver2-prim_ed.log || exit 9 -diff epver2-self_ed.log epver2-prim_ed.log || exit 10 - -exit 0 - diff --git a/source/texk/web2c/eptexdir/etex.ch0 b/source/texk/web2c/eptexdir/etex.ch0 deleted file mode 100644 index d5893fa9fd..0000000000 --- a/source/texk/web2c/eptexdir/etex.ch0 +++ /dev/null @@ -1,261 +0,0 @@ -% eptexdir/etex.ch0: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. -% Public domain. Originally written by Peter Breitenlohner . - -@x [10] m.135 l.2895 - e-TeX TeXXeT -|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -@y -|fil|, |fill|, or |filll|). The |subtype| field is not used. -@z - -@x [17.236] l.4960 - first web2c, then e-TeX additional integer parameters -@d int_pars=web2c_int_pars {total number of integer parameters} -@# -@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} -@y -@d int_pars=web2c_int_pars {total number of integer parameters} -@z - -@x [18.???] pTeX: ensure buffer2[]=0 in primitive - for j:=0 to l-1 do buffer[first+j]:=so(str_pool[k+j]); -@y - for j:=0 to l-1 do buffer[j]:=so(str_pool[k+j]); -@z - -@x [26.413] - {fetch an internal parameter} -label exit; -var m:halfword; {|chr_code| part of the operand token} -@!q,@!r:pointer; {general purpose indices} -@!tx:pointer; {effective tail node} -@y - {fetch an internal parameter} -var m:halfword; {|chr_code| part of the operand token} -@z - -@x [26.413] -exit:end; -@y -end; -@z - -@x -@d badness_code=input_line_no_code+1 {code for \.{\\badness}} -@y -@d badness_code=glue_val+2 {code for \.{\\badness}} -@z - -@x [26.420] -begin scan_register_num; fetch_box(q); -if q=null then cur_val:=0 @+else cur_val:=mem[q+m].sc; -@y -begin scan_eight_bit_int; -if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc; -@z - -@x [26.424] -legal in similar contexts. - -@y -legal in similar contexts. -@z - -@x [26.424] -@d find_effective_tail==find_effective_tail_eTeX - -@y -@z - -@x - if m>=eTeX_glue then @@; - else if m>=eTeX_dim then - begin case m of - @/@@/ - end; {there are no other cases} - cur_val_level:=dimen_val; - end - else begin case m of - input_line_no_code: cur_val:=line; - badness_code: cur_val:=last_badness; - @/@@/ - end; {there are no other cases} -@y - begin if cur_chr=input_line_no_code then cur_val:=line - else cur_val:=last_badness; {|cur_chr=badness_code|} -@z - -@x [26.424] - find_effective_tail; -@y -@z - -@x [26.424] - if not is_char_node(tx)and(mode<>0) then - case cur_chr of - int_val: if type(tx)=penalty_node then cur_val:=penalty(tx); - dimen_val: if type(tx)=kern_node then cur_val:=width(tx); - glue_val: if type(tx)=glue_node then - begin cur_val:=glue_ptr(tx); - if subtype(tx)=mu_glue then cur_val_level:=mu_val; -@y - if not is_char_node(tail)and(mode<>0) then - case cur_chr of - int_val: if type(tail)=penalty_node then cur_val:=penalty(tail); - dimen_val: if type(tail)=kern_node then cur_val:=width(tail); - glue_val: if type(tail)=glue_node then - begin cur_val:=glue_ptr(tail); - if subtype(tail)=mu_glue then cur_val_level:=mu_val; -@z - -@x [26.424] - else if (mode=vmode)and(tx=head) then -@y - else if (mode=vmode)and(tail=head) then -@z - -@x [27.468] -@d etex_convert_base=5 {base for \eTeX's command codes} -@d eTeX_revision_code=etex_convert_base {command code for \.{\\eTeXrevision}} -@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} -@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} -@y -@d job_name_code=5 {command code for \.{\\jobname}} -@z - -@x [30.581] -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -var old_setting: integer; {saved value of |tracing_online|} -@y -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -@z - -@x [32.619] -save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; -prev_p:=this_box+list_offset; -@; -left_edge:=cur_h; -@y -save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; left_edge:=cur_h; -@z - -@x [32.620] - prev_p:=link(prev_p); {N.B.: not |prev_p:=p|, |p| might be |lig_trick|} -@y -@z - -@x [32.624] l.13005 - pTeX: output a box(and dir_node) with disp - cur_h:=edge; cur_v:=base_line; -@y - cur_h:=edge+width(p); cur_v:=base_line; -@z - -@x [33.649] -exit: if TeXXeT_en then @; -hpack:=r; -@y -exit: hpack:=r; -@z - -@x [44.977] -q:=prune_page_top(q,saving_vdiscards>0); -p:=list_ptr(v); free_node(v,box_node_size); -if q<>null then q:=vpack(q,natural); -change_box(q); {the |eq_level| of the box stays the same} -@y -q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size); -if q=null then box(n):=null {the |eq_level| of the box stays the same} -else box(n):=vpack(q,natural); -@z - -@x [47.1079] -@!r:pointer; {running behind |p|} -@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} -@!tx:pointer; {effective tail node} -@y -@z - -@x [47.1080] -@d check_effective_tail(#)==find_effective_tail_eTeX -@d fetch_effective_tail==fetch_effective_tail_eTeX - -@y -@z -@x [47.1080] -else begin check_effective_tail(goto done); - if not is_char_node(tx) then - if (type(tx)=hlist_node)or(type(tx)=vlist_node) then - @; - done:end; -@y -else begin if not is_char_node(tail) then - if (type(tail)=hlist_node)or(type(tail)=vlist_node) then - @; - end; -@z - -@x [47.1081] -begin fetch_effective_tail(goto done); -cur_box:=tx; shift_amount(cur_box):=0; -end -@y -begin q:=head; -repeat p:=q; -if not is_char_node(q) then if type(q)=disc_node then - begin for m:=1 to replace_count(q) do p:=link(p); - if p=tail then goto done; - end; -q:=link(p); -until q=tail; -cur_box:=tail; shift_amount(cur_box):=0; -tail:=p; link(p):=null; -done:end -@z - -@x [47.1096] - else line_break(false); -@y - else line_break(widow_penalty); -@z - -@x [47.1105] -@!r:pointer; {running behind |p|} -@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} -@!tx:pointer; {effective tail node} -@y -@z - -@x [47.1105] -else begin check_effective_tail(return); - if not is_char_node(tx) then if type(tx)=cur_chr then - begin fetch_effective_tail(return); - flush_node_list(tx); -@y -else begin if not is_char_node(tail) then if type(tail)=cur_chr then - begin q:=head; - repeat p:=q; - if not is_char_node(q) then if type(q)=disc_node then - begin for m:=1 to replace_count(q) do p:=link(p); - if p=tail then return; - end; - q:=link(p); - until q=tail; - link(p):=null; flush_node_list(tail); tail:=p; -@z - -@x [47.1110] -else begin link(tail):=list_ptr(p); change_box(null); -@y -else begin link(tail):=list_ptr(p); box(cur_val):=null; -@z - -@x [48.1145] -else begin line_break(true);@/ -@y -else begin line_break(display_widow_penalty);@/ -@z - -@x [49.1247] -if b<>null then mem[b+c].sc:=cur_val; -@y -if box(b)<>null then mem[box(b)+c].sc:=cur_val; -@z - diff --git a/source/texk/web2c/eptexdir/etex.ch1 b/source/texk/web2c/eptexdir/etex.ch1 deleted file mode 100644 index 5826dbcb4f..0000000000 --- a/source/texk/web2c/eptexdir/etex.ch1 +++ /dev/null @@ -1,214 +0,0 @@ -% eptexdir/etex.ch1: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. -% Public domain. Originally written by Peter Breitenlohner . - -@x [12.184] - begin print(", "); print_direction(box_dir(p)); -@y - begin print_direction_alt(box_dir(p)); -@z - -@x [16.215] - e-pTeX last_node_subtype -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -last_node_type:=-1; -@y -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -last_node_type:=-1; last_node_subtype:=-1; -@z - -@x [17.236] -@d int_pars=web2c_int_pars {total number of integer parameters} -@y -@d etex_int_base=web2c_int_pars {base for \eTeX's integer parameters} -@z - -@x [18] - for j:=0 to l-1 do begin - buffer[j]:=Lo(so(str_pool[k+j])); buffer2[j]:=Hi(so(str_pool[k+j])); end; -@y - for j:=0 to l-1 do begin - buffer[first+j]:=Lo(so(str_pool[k+j])); buffer2[first+j]:=Hi(so(str_pool[k+j])); end; -@z - -@x [26.413] -@; -end; -@y -@; -exit:end; -@z - -@x -@d eTeX_int=badness_code+1 {first of \eTeX\ codes for integers} -@y -@d eTeX_int=ptex_minor_version_code+1 {first of \eTeX\ codes for integers} -@z - -@x - begin case m of - input_line_no_code: cur_val:=line; - badness_code: cur_val:=last_badness; - ptex_version_code: cur_val:=pTeX_version; - eptex_version_code: cur_val:=epTeX_version_number; - ptex_minor_version_code: cur_val:=pTeX_minor_version; - end; {there and no other cases} -@y - if m>=eTeX_glue then @@; - else if m>=eTeX_dim then - begin case m of - @/@@/ - end; {there are no other cases} - cur_val_level:=dimen_val; - end - else begin case m of - input_line_no_code: cur_val:=line; - badness_code: cur_val:=last_badness; - ptex_version_code: cur_val:=pTeX_version; - eptex_version_code: cur_val:=epTeX_version_number; - ptex_minor_version_code: cur_val:=pTeX_minor_version; - @/@@/ - end; {there are no other cases} -@z - -@x [27.468] -@d job_name_code=ptex_convert_codes {command code for \.{\\jobname}} -@y -@d etex_convert_base=ptex_convert_codes {base for \eTeX's command codes} -@d eTeX_revision_code=etex_convert_base {command code for \.{\\eTeXrevision}} -@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} -@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} -@z - -@x [30.581] -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -var @!l:0..255; {small indices or counters} -@y -@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); -var @!l:0..255; {small indices or counters} -old_setting: integer; {saved value of |tracing_online|} -@z - -@x [32.619] -base_line:=cur_v; left_edge:=cur_h; disp:=0; -@y -base_line:=cur_v; disp:=0; revdisp:=0; -prev_p:=this_box+list_offset; -@; -left_edge:=cur_h; -@z - -@x [32.622] -@= -@y -@= -@z -@x [32.622] - p:=link(p); -@y - prev_p:=link(prev_p); {N.B.: not |prev_p:=p|, |p| might be |lig_trick|} - p:=link(p); -@z - -@x [32.623] -disp_node: begin disp:=disp_dimen(p); cur_v:=base_line+disp; end; -@y -disp_node: begin disp:=disp_dimen(p); revdisp:=disp; cur_v:=base_line+disp; end; -@z - -@x [32.624] - cur_h:=edge+width(p); cur_v:=base_line+disp; cur_dir_hv:=save_dir; -@y - cur_h:=edge; cur_v:=base_line+disp; cur_dir_hv:=save_dir; -@z - -@x [33.649] -exit: last_disp:=disp; hpack:=r; -@y -exit: last_disp:=disp; -if TeXXeT_en then @; -hpack:=r; -@z - -@x [33.651] - disp_node:disp:=disp_dimen(p); -@y - disp_node:begin disp:=disp_dimen(p); revdisp:=disp; end; -@z - -@x [44.977] -q:=prune_page_top(q); p:=list_ptr(v); -if q=null then box(n):=null {the |eq_level| of the box stays the same} -else begin - box(n):=vpack(q,natural); set_box_dir(box(n))(box_dir(v)); - end; -@y -q:=prune_page_top(q,saving_vdiscards>0); -p:=list_ptr(v); -if q<>null then begin - q:=vpack(q,natural); set_box_dir(q)(box_dir(v)); - end; -change_box(q); -@z - -@x [47.1096] - else begin adjust_hlist(head,true); line_break(widow_penalty) -@y - else begin adjust_hlist(head,true); line_break(false) -@z - -@x [47.1110] - begin if type(box(cur_val))=dir_node then - begin delete_glue_ref(space_ptr(box(cur_val))); - delete_glue_ref(xspace_ptr(box(cur_val))); - free_node(box(cur_val),box_node_size); -@y - begin if type(p)=dir_node then - begin delete_glue_ref(space_ptr(p)); - delete_glue_ref(xspace_ptr(p)); - free_node(p,box_node_size); -@z -@x [47.1110] - link(tail):=list_ptr(p); box(cur_val):=null; -@y - link(tail):=list_ptr(p); change_box(null); -@z - -@x [48.1145] - pop_nest; w:=-max_dimen; - end - { |disp_node|-only paragraphs are ignored } -@y - @ - end - { |disp_node|-only paragraphs are ignored } -@z - -@x [48.1145] -else begin adjust_hlist(head,true); line_break(display_widow_penalty);@/ -@y -else begin adjust_hlist(head,true); line_break(true);@/ -@z - -@x [49.1247] -if box(b)<>null then - begin q:=box(b); p:=link(q); -@y -if b<>null then - begin q:=b; p:=link(q); -@z -@x [49.1247] - begin p:=link(box(b)); link(box(b)):=null; -@y - begin p:=link(b); link(b):=null; -@z -@x [49.1247] - link(q):=p; link(box(b)):=q; -@y - link(q):=p; link(b):=q; -@z - -@x [49.1291] -@d show_mode=4 { \.{\\showmode} } -@y -@d show_mode=7 { \.{\\showmode} } -@z - diff --git a/source/texk/web2c/eptexdir/fam256.ch b/source/texk/web2c/eptexdir/fam256.ch deleted file mode 100644 index 583c5b8d21..0000000000 --- a/source/texk/web2c/eptexdir/fam256.ch +++ /dev/null @@ -1,1537 +0,0 @@ -% fam256.ch -% (C) 2009--2017 by Hironori Kitagawa. -% -% This patch is derived from om16bit.ch and omfi.ch (both in Omega). -% (Omega is copyright by John Plaice and Yannis Haralambous.) -% -%----------------------------------------------- -@x -@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; - if you change this, you should also change |iinf_hyphen_size|.} -@y -@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; - if you change this, you should also change |iinf_hyphen_size|.} -@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} -@z -%----------------------------------------------- -@x -@d not_found4=49 {like |not_found|, when there's more than four} -@y -@d not_found4=49 {like |not_found|, when there's more than four} -@d not_found5=50 {like |not_found|, when there's more than five} -@z -%----------------------------------------------- -@x -specifies the order of infinity to which glue setting applies (|normal|, -|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -@y -specifies the order of infinity to which glue setting applies (|normal|, -|sfi|, |fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -@z -%----------------------------------------------- -@x -orders of infinity (|normal|, |fil|, |fill|, or |filll|) -@y -orders of infinity (|normal|, |sfi|, |fil|, |fill|, or |filll|) -@z -%----------------------------------------------- -@x -@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 -@!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 -@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 -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ -@y -stretch(sfi_glue):=unity; stretch_order(sfi_glue):=sfi;@/ -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ -@z -%----------------------------------------------- -@x - begin print("fil"); - while order>fil do -@y - begin print("fi"); - while order>sfi do -@z -%----------------------------------------------- -@x -@d last_item=math_given+1 {most recent item ( \.{\\lastpenalty}, -@y -@d omath_given=math_given+1 {math code defined by \.{\\omathchardef}} -@d last_item=omath_given+1 {most recent item ( \.{\\lastpenalty}, -@z -%----------------------------------------------- -@x -@d math_font_base=cur_font_loc+1 {table of 48 math font numbers} -@d cur_jfont_loc=math_font_base+48 -@y -@d math_font_base=cur_font_loc+1 {table of 768 math font numbers} -@d cur_jfont_loc=math_font_base+768 -@z -%----------------------------------------------- -@x -@d var_code==@'70000 {math code meaning ``use the current family''} -@y -@d var_code==@"70000 {math code meaning ``use the current family''} -@z -%----------------------------------------------- -@x -for k:=math_font_base to math_font_base+47 do eqtb[k]:=eqtb[cur_font_loc]; -@y -for k:=math_font_base to math_font_base+767 do eqtb[k]:=eqtb[cur_font_loc]; -@z -%----------------------------------------------- -@x -begin if n=cur_font_loc then print("current font") -else if n -@y -primitive("delimiter",delim_num,0);@/ -@!@:delimiter_}{\.{\\delimiter} primitive@> -primitive("odelimiter",delim_num,1);@/ -@!@:delimiter_}{\.{\\odelimiter} primitive@> -@z -%----------------------------------------------- -@x -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 -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -@y -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -primitive("oradical",radical,1);@/ -@!@:radical_}{\.{\\oradical} primitive@> -@z -%----------------------------------------------- -@x -delim_num: print_esc("delimiter"); -@y -delim_num: if chr_code=0 then print_esc("delimiter") - else print_esc("odelimiter"); -@z -@x -math_accent: print_esc("mathaccent"); -math_char_num: print_esc("mathchar"); -@y -math_accent: if chr_code=0 then print_esc("mathaccent") - else print_esc("omathaccent"); -math_char_num: if chr_code=0 then print_esc("mathchar") - else print_esc("omathchar"); -@z -@x -radical: print_esc("radical"); -@y -radical: if chr_code=0 then print_esc("radical") - else print_esc("oradical"); -@z -%----------------------------------------------- -@x -@p procedure eq_word_define(@!p:pointer;@!w:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; -assign_trace(p,"into")@;@/ -exit:end; -@y -@p procedure eq_word_define(@!p:pointer;@!w:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; -assign_trace(p,"into")@;@/ -exit:end; -@# -procedure del_eq_word_define(@!p:pointer;@!w,wone:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w)and(getintone(eqtb[p])=wone) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; setintone(eqtb[p],wone); -assign_trace(p,"into")@;@/ -exit:end; -@z -%----------------------------------------------- -@x -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@y -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@# -procedure del_geq_word_define(@!p:pointer;@!w,wone:integer); - {global |del_eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; setintone(eqtb[p],wone); xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@z -%----------------------------------------------- -@x -@d tok_val=5 {token lists} - -@= -@!cur_val:integer; {value returned by numeric scanners} -@y -@d tok_val=5 {token lists} - -@= -@!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; -@z -%----------------------------------------------- -@x -char_given,math_given: scanned_result(cur_chr)(int_val); -@y -omath_given, -char_given,math_given: scanned_result(cur_chr)(int_val); -@z -%----------------------------------------------- -@x -@ @= -begin -if m=math_code_base then - begin scan_ascii_num; - scanned_result(ho(math_code(cur_val)))(int_val); end -@y -@ @= -begin -if m=math_code_base then begin - scan_ascii_num; cur_val1:=ho(math_code(cur_val)); - if ((cur_val1 div @"10000)>8) or - (((cur_val1 mod @"10000) div @"100)>15) 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); - scanned_result(0)(int_val) - end; - cur_val1:=(cur_val1 div @"10000)*@"1000+cur_val1 mod @"1000; - scanned_result(cur_val1)(int_val); - end -else if m=(math_code_base+128) then begin - scan_ascii_num; cur_val1:=ho(math_code(cur_val)); - cur_val:=(cur_val1 div @"10000) * @"1000000 - +((cur_val1 div @"100) mod @"100) * @"10000 - +(cur_val1 mod @"100); - scanned_result(cur_val)(int_val); - end -else if m=del_code_base then begin - scan_ascii_num; cur_val1:=del_code(cur_val); cur_val:=del_code1(cur_val); - if ((cur_val1 div @"100) mod @"100 >= 16) or (cur_val>=@"1000) then - begin print_err("Extended delimiter code used as delcode"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); error; - scanned_result(0)(int_val); - end - else if cur_val1<0 then - scanned_result(cur_val)(int_val) - else - scanned_result(cur_val1*@"1000+cur_val)(int_val); - end -else if m=(del_code_base+128) then begin - { Aleph seems \.{\\odelcode} always returns $-1$.} - scan_ascii_num; scanned_result(-1)(int_val); - end -@z -%----------------------------------------------- -@x -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 register code@> - 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 -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_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) * @"10000)+(cur_val mod @"1000); -end; -@# -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_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; -{ e-pTeX doesn't support 65536 characters for math font. } -cur_val:=((cur_val div @"10000) * @"100)+(cur_val mod @"100); -end; -@# -procedure scan_omega_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 -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; cur_val := cur_val div @"1000; -cur_val := ((cur_val div @"1000) * @"10000) + (cur_val mod @"1000); -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 div @"10000) * @"100) + (cur_val mod @"100); -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; -{ e-pTeX doesn't support 65536 characters for math font. } -cur_val1:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); -cur_val:=iiii; -end; -@z -%----------------------------------------------- -@x -@= -if scan_keyword("fil") then -@.fil@> - begin cur_order:=fil; -@y -@= -if scan_keyword("fi") then -@.fil@> - begin cur_order:=sfi; -@z -%----------------------------------------------- -@x -else if cur_cmd=def_family then - begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val); -@y -else if cur_cmd=def_family then - begin m:=cur_chr; scan_big_four_bit_int; f:=equiv(m+cur_val); -@z -%----------------------------------------------- -@x -total_stretch[normal]:=0; total_shrink[normal]:=0; -@y -total_stretch[normal]:=0; total_shrink[normal]:=0; -total_stretch[sfi]:=0; total_shrink[sfi]:=0; -@z -%----------------------------------------------- -@x -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 -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 -\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of -the sixteen font families, and |character(q)| is the number of a character -@y -\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of -the 256 font families, and |character(q)| is the number of a character -@z -%----------------------------------------------- -@x -procedure print_fam_and_char(@!p:pointer;@!t:small_number); -@y -procedure print_fam_and_char(@!p:pointer;@!t:integer); -@z -%----------------------------------------------- -@x -other font information. A size code, which is a multiple of 16, is added to a -family number to get an index into the table of internal font numbers -for each combination of family and size. (Be alert: Size codes get -larger as the type gets smaller.) - -@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 -other font information. A size code, which is a multiple of 256, is added to a -family number to get an index into the table of internal font numbers -for each combination of family and size. (Be alert: Size codes get -larger as the type gets smaller.) -@z -%----------------------------------------------- -@x -else cur_size:=16*((cur_style-text_style) div 2); -@y -else cur_size:=script_size*((cur_style-text_style) div 2); -@z -%----------------------------------------------- -@x -function var_delimiter(@!d:pointer;@!s:small_number;@!v:scaled):pointer; -@y -function var_delimiter(@!d:pointer;@!s:integer;@!v:scaled):pointer; -@z -%----------------------------------------------- -@x -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: small_number; {runs through font family members} -@y -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: integer; {runs through font family members} -@z -%----------------------------------------------- -@x - begin z:=z+s+16; - repeat z:=z-16; g:=fam_fnt(z); -@y - begin z:=z+s+script_size; - repeat z:=z-script_size; g:=fam_fnt(z); -@z -%----------------------------------------------- -@x - until z<16; -@y - until z0)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 -@ Shrinkability is never infinite in a paragraph; -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[6]|. - -@= -begin if -shortfall>cur_active_width[6] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[6]); -@y -@ Shrinkability is never infinite in a paragraph; -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[7]|. - -@= -begin if -shortfall>cur_active_width[7] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[7]); -@z -%----------------------------------------------- -@x - active_width[6]:=active_width[6]+shrink(cur_kanji_skip); -@y - active_width[7]:=active_width[7]+shrink(cur_kanji_skip); -@z -%----------------------------------------------- -@x -active_width[6]:=active_width[6]+shrink(q) -@y -active_width[7]:=active_width[7]+shrink(q) -@z -%----------------------------------------------- -@x - 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 - active_height[6]:=active_height[6]+shrink(q); -@y - active_height[7]:=active_height[7]+shrink(q); -@z -%----------------------------------------------- -@x -on the current page. This array contains six |scaled| numbers, like the -@y -on the current page. This array contains seven |scaled| numbers, like the -@z -%----------------------------------------------- -@x -@d page_shrink==page_so_far[6] {shrinkability of the current page} -@d page_depth==page_so_far[7] {depth of the current page} -@y -@d page_shrink==page_so_far[7] {shrinkability of the current page} -@d page_depth==page_so_far[8] {depth of the current page} -@z -%----------------------------------------------- -@x -@= -@!page_so_far:array [0..7] of scaled; {height and glue of the current page} -@y -@= -@!page_so_far:array [0..8] of scaled; {height and glue of the current page} -@z -%----------------------------------------------- -@x -primitive("pagefilstretch",set_page_dimen,3); -@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> -primitive("pagefillstretch",set_page_dimen,4); -@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> -primitive("pagefilllstretch",set_page_dimen,5); -@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> -primitive("pageshrink",set_page_dimen,6); -@!@:page_shrink_}{\.{\\pageshrink} primitive@> -primitive("pagedepth",set_page_dimen,7); -@!@:page_depth_}{\.{\\pagedepth} primitive@> -@y -primitive("pagefistretch",set_page_dimen,3); -@!@:page_fi_stretch_}{\.{\\pagefistretch} primitive@> -primitive("pagefilstretch",set_page_dimen,4); -@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> -primitive("pagefillstretch",set_page_dimen,5); -@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> -primitive("pagefilllstretch",set_page_dimen,6); -@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> -primitive("pageshrink",set_page_dimen,7); -@!@:page_shrink_}{\.{\\pageshrink} primitive@> -primitive("pagedepth",set_page_dimen,8); -@!@:page_depth_}{\.{\\pagedepth} primitive@> -@z -%----------------------------------------------- -@x -3: print_esc("pagefilstretch"); -4: print_esc("pagefillstretch"); -5: print_esc("pagefilllstretch"); -6: print_esc("pageshrink"); -@y -3: print_esc("pagefistretch"); -4: print_esc("pagefilstretch"); -5: print_esc("pagefillstretch"); -6: print_esc("pagefilllstretch"); -7: print_esc("pageshrink"); -@z -%----------------------------------------------- -@x -print_plus(3)("fil"); -print_plus(4)("fill"); -print_plus(5)("filll"); -@y -print_plus(3)("fi"); -print_plus(4)("fil"); -print_plus(5)("fill"); -print_plus(6)("filll"); -@z -%----------------------------------------------- -@x - if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| - (page_so_far[5]<>0) then b:=0 -@y - if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| - (page_so_far[5]<>0) or (page_so_far[6]<>0) then b:=0 -@z -%----------------------------------------------- -@x -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 -@d fil_code=0 {identifies \.{\\hfil} and \.{\\vfil}} -@d fill_code=1 {identifies \.{\\hfill} and \.{\\vfill}} -@d ss_code=2 {identifies \.{\\hss} and \.{\\vss}} -@d fil_neg_code=3 {identifies \.{\\hfilneg} and \.{\\vfilneg}} -@d skip_code=4 {identifies \.{\\hskip} and \.{\\vskip}} -@d mskip_code=5 {identifies \.{\\mskip}} -@y -@d sfi_code=0 {identifies \.{\\hfi} and \.{\\vfi}} -@d fil_code=1 {identifies \.{\\hfil} and \.{\\vfil}} -@d fill_code=2 {identifies \.{\\hfill} and \.{\\vfill}} -@d ss_code=3 {identifies \.{\\hss} and \.{\\vss}} -@d fil_neg_code=4 {identifies \.{\\hfilneg} and \.{\\vfilneg}} -@d skip_code=5 {identifies \.{\\hskip} and \.{\\vskip}} -@d mskip_code=6 {identifies \.{\\mskip}} -@z -%----------------------------------------------- -@x -primitive("hfil",hskip,fil_code); -@!@:hfil_}{\.{\\hfil} primitive@> -@y -primitive("hfi",hskip,sfi_code); -@!@:hfi_}{\.{\\hfi} primitive@> -primitive("hfil",hskip,fil_code); -@!@:hfil_}{\.{\\hfil} primitive@> -@z -%----------------------------------------------- -@x -primitive("vfil",vskip,fil_code); -@!@:vfil_}{\.{\\vfil} primitive@> -@y -primitive("vfi",vskip,sfi_code); -@!@:vfi_}{\.{\\vfi} primitive@> -primitive("vfil",vskip,fil_code); -@!@:vfil_}{\.{\\vfil} primitive@> -@z -%----------------------------------------------- -@x -hskip: case chr_code of - skip_code:print_esc("hskip"); -@y -hskip: case chr_code of - skip_code:print_esc("hskip"); - sfi_code:print_esc("hfi"); -@z -%----------------------------------------------- -@x -vskip: case chr_code of - skip_code:print_esc("vskip"); -@y -vskip: case chr_code of - skip_code:print_esc("vskip"); - sfi_code:print_esc("vfi"); -@z -%----------------------------------------------- -@x -begin s:=cur_chr; -case s of -fil_code: cur_val:=fil_glue; -@y -begin s:=cur_chr; -case s of -sfi_code: cur_val:=sfi_glue; -fil_code: cur_val:=fil_glue; -@z -%----------------------------------------------- -@x -|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox32767}'; -codes |global_box_flag| through |ship_out_flag-1| represent -`\.{\\global\\setbox0}' through `\.{\\global\\setbox32767}'; -@y -|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox65535}'; -codes |global_box_flag| through |ship_out_flag-1| represent -`\.{\\global\\setbox0}' through `\.{\\global\\setbox65535}'; -@z -%----------------------------------------------- -@x -@d box_flag==@'10000000000 {context code for `\.{\\setbox0}'} -@d global_box_flag==@'10000100000 {context code for `\.{\\global\\setbox0}'} -@d ship_out_flag==@'10000200000 {context code for `\.{\\shipout}'} -@d leader_flag==@'10000200001 {context code for `\.{\\leaders}'} -@y -@d box_flag==@"40000000 {context code for `\.{\\setbox0}'} -@d global_box_flag==@"40010000 {context code for `\.{\\global\\setbox0}'} -@d ship_out_flag==@"40020000 {context code for `\.{\\shipout}'} -@d leader_flag==@"40020001 {context code for `\.{\\leaders}'} -@z -%----------------------------------------------- -@x -@d fam_in_range==((cur_fam>=0)and(cur_fam<16)) -@y -@d fam_in_range==((cur_fam>=0)and(cur_fam=var_code)and(fam_in_range) then fam(p):=cur_fam - else fam(p):=(c div 256) mod 16; -@y - if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam - else fam(p):=(c div 256) mod 256; -@z -%----------------------------------------------- -@x -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+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) * @"10000)+(cur_chr mod @"1000)); - end; -mmode+omath_given: begin - set_math_char(((cur_chr div @"10000) * @"100)+(cur_chr mod @"100)); - 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); {character code of left delimiter} -@z -%----------------------------------------------- -@x -procedure set_math_char(@!c:integer); -var p:pointer; {the new noad} -begin if c>=@'100000 then - @ -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; - if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin -@y -procedure set_math_char(@!c:integer); -var p:pointer; {the new noad} -begin if c>=@"80000 then - @ -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 256; - 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; - if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin -@z -%----------------------------------------------- -@x -@= -procedure scan_delimiter(@!p:pointer;@!r:boolean); -begin if r then scan_twenty_seven_bit_int -else begin @; - 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 @; -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); -end; -@y -@= -procedure scan_delimiter(@!p:pointer;@!r:boolean); -begin if r=1 then scan_twenty_seven_bit_int -else if r=2 then scan_fifty_one_bit_int -else begin @; - case cur_cmd of - letter,other_char: begin - cur_val:=del_code(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 @; - cur_val1:=0; - end; -small_fam(p):=(cur_val div @"100) mod @"100; -small_char(p):=qi(cur_val mod @"100); -large_fam(p):=(cur_val1 div @"100) mod @"100; -large_char(p):=qi(cur_val1 mod @"100); -end; -@z -%----------------------------------------------- -@x -scan_delimiter(left_delimiter(tail),true); -@y -scan_delimiter(left_delimiter(tail),cur_chr+1); -@z -%----------------------------------------------- -@x -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; -@y -if cur_chr=0 then scan_fifteen_bit_int -else scan_big_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 256; -@z -%----------------------------------------------- -@x -begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| - (total_shrink[fil]<>0)or(total_shrink[fill]<>0)or - (total_shrink[filll]<>0)) then -@y -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 -@z -%----------------------------------------------- -@x -@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 -@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}} -@d char_sub_def_code=7 {|shorthand_def| for \.{\\charsubdef}} -@y -@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}} -@d char_sub_def_code=8 {|shorthand_def| for \.{\\charsubdef}} -@z -%----------------------------------------------- -@x -primitive("mathchardef",shorthand_def,math_char_def_code);@/ -@!@:math_char_def_}{\.{\\mathchardef} primitive@> -@y -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 - math_char_def_code: print_esc("mathchardef"); -@y - math_char_def_code: print_esc("mathchardef"); - omath_char_def_code: print_esc("omathchardef"); -@z -%----------------------------------------------- -@x -math_given: begin print_esc("mathchar"); print_hex(chr_code); - end; -@y -math_given: begin print_esc("mathchar"); print_hex(chr_code); - end; -omath_given: begin print_esc("omathchar"); print_hex(chr_code); - end; -@z -%----------------------------------------------- -@x - math_char_def_code: begin scan_fifteen_bit_int; define(p,math_given,cur_val); -@y - math_char_def_code: begin scan_real_fifteen_bit_int; - define(p,math_given,cur_val); - end; - omath_char_def_code: begin scan_omega_fifteen_bit_int; - define(p,omath_given,cur_val); -@z -%----------------------------------------------- -@x -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -@y -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -primitive("omathcode",def_code,math_code_base+128); -@!@:math_code_}{\.{\\omathcode} primitive@> -@z -%----------------------------------------------- -@x -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -@y -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -primitive("odelcode",def_code,del_code_base+128); -@!@:del_code_}{\.{\\odelcode} primitive@> -@z -%----------------------------------------------- -@x - else if chr_code=lc_code_base then print_esc("lccode") - else if chr_code=uc_code_base then print_esc("uccode") - else if chr_code=sf_code_base then print_esc("sfcode") - else print_esc("delcode"); -@y - else if chr_code=math_code_base+128 then print_esc("omathcode") - else if chr_code=lc_code_base then print_esc("lccode") - else if chr_code=uc_code_base then print_esc("uccode") - else if chr_code=sf_code_base then print_esc("sfcode") - else if chr_code=del_code_base then print_esc("delcode") - else print_esc("odelcode"); -@z -%----------------------------------------------- -@x -@= -def_code: begin - @; - @; - p:=cur_chr; - if p=kcat_code_base then - begin scan_char_num; p:=p+kcatcodekey(cur_val) end - else begin scan_ascii_num; p:=p+cur_val; end; - scan_optional_equals; scan_int; - if ((cur_valn) then - begin print_err("Invalid code ("); print_int(cur_val); -@.Invalid code@> - if p= -def_code: begin - if cur_chr=(del_code_base+128) then begin - p:=cur_chr-128; scan_ascii_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; - cur_val1:=(cur_val1 div @"10000)*@"100+(cur_val1 mod @"100); - cur_val:=(cur_val div @"10000)*@"100+(cur_val mod @"100); - del_word_define(p,cur_val1,cur_val); - end - else begin - @; - @; - p:=cur_chr; cur_val1:=p; - if p=kcat_code_base then begin scan_char_num; p:=p+kcatcodekey(cur_val) end - else begin scan_ascii_num; p:=p+cur_val; end; - scan_optional_equals; scan_int; - if ((cur_valn) then - begin print_err("Invalid code ("); print_int(cur_val); -@.Invalid code@> - if p=0 then begin - cur_val1:=cur_val div @"1000; - cur_val1:=(cur_val1 div @"1000)*@"10000 + cur_val1 mod @"1000; - cur_val:=cur_val mod @"1000; - del_word_define(p,cur_val1,cur_val); end - else - del_word_define(p, -1, cur_val); - end - else define(p,data,cur_val); - end; - end; -@z -%----------------------------------------------- -@x -else if cur_chr=kcat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@'100000 -@y -else if cur_chr=kcat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@"8000 -else if cur_chr=(math_code_base+128) then n:=@"8000000 -@z -%----------------------------------------------- -@x -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 -@ @= -repeat j:=k; -while jeqtb[j+1].int then goto done2; -@y -@ @= -repeat j:=k; -while jeqtb[j+1].int)or@| - (getintone(eqtb[j])<>getintone(eqtb[j+1])) then goto done2; -@z -%----------------------------------------------- -@x - else cur_val:=shrink_order(q); -@y - else cur_val:=shrink_order(q); - if cur_val>normal then cur_val:=cur_val-1; {compatible to \eTeX} -@z -%----------------------------------------------- -@x FAM256 65536 Registers -@ \eTeX\ (in extended mode) supports 32768 (i.e., $2^{15}$) count, -@y -@ \epTeX\ (in extended mode) supports 65536 (i.e., $2^{16}$) count, -@z -%----------------------------------------------- -@x -Similarly there are 32768 mark classes; the command \.{\\marks}|n| -creates a mark node for a given mark class |0<=n<=32767| (where -@y -Similarly there are 65536 mark classes; the command \.{\\marks}|n| -creates a mark node for a given mark class |0<=n<=65535| (where -@z -%----------------------------------------------- -@x -not exceed 255 in compatibility mode resp.\ 32767 in extended mode. -@y -not exceed 255 in compatibility mode resp.\ 65535 in extended mode. -@z -%----------------------------------------------- -@x -max_reg_num:=32767; -max_reg_help_line:="A register number must be between 0 and 32767."; -@y -max_reg_num:=65535; -max_reg_help_line:="A register number must be between 0 and 65535."; -@z -%----------------------------------------------- -@x -sparse array of the up to 32512 additional registers of each kind and -one for the sparse array of the up to 32767 additional mark classes. -The root of each such tree, if it exists, is an index node containing 16 -pointers to subtrees for 4096 consecutive array elements. Similar index -nodes are the starting points for all nonempty subtrees for 4096, 256, -and 16 consecutive array elements. These four levels of index nodes are -followed by a fifth level with nodes for the individual array elements. -@y -sparse array of the up to 65280 additional registers of each kind and -one for the sparse array of the up to 65535 additional mark classes. -The root of each such tree, if it exists, is an index node containing 16 -pointers to subtrees for 65536 consecutive array elements. Similar index -nodes are the starting points for all nonempty subtrees for 65536, 4096, -256, and 16 consecutive array elements. These five levels of index nodes -are followed by a sixth level with nodes for the individual array elements. -@z -%----------------------------------------------- -@x -@d hex_dig1(#)==# div 4096 {the fourth lowest hexadecimal digit} -@d hex_dig2(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} -@d hex_dig3(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} -@d hex_dig4(#)==# mod 16 {the lowest hexadecimal digit} -@y -@d hex_dig1(#)==# div 65536 {the fifth lowest hexadecimal digit} -@d hex_dig2(#)==(# div 4096) mod 16 {the fourth lowest hexadecimal digit} -@d hex_dig3(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} -@d hex_dig4(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} -@d hex_dig5(#)==# mod 16 {the lowest hexadecimal digit} -@z -%----------------------------------------------- -@x -procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); - {sets |cur_val| to sparse array element location or |null|} -label not_found,not_found1,not_found2,not_found3,not_found4,exit; -var q:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -begin cur_ptr:=sa_root[t]; -if_cur_ptr_is_null_then_return_or_goto(not_found);@/ -q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ -q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ -q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ -q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; -if (cur_ptr=null)and w then goto not_found4; -return; -not_found: new_index(t,null); {create first level index node} -sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); -not_found1: new_index(i,q); {create second level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); -not_found2: new_index(i,q); {create third level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); -not_found3: new_index(i,q); {create fourth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); -not_found4: @; -link(cur_ptr):=q; add_sa_ptr; -exit:end; -@y -procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); - {sets |cur_val| to sparse array element location or |null|} -label not_found,not_found1,not_found2,not_found3,not_found4,not_found5,exit; -var q:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -begin cur_ptr:=sa_root[t]; -if_cur_ptr_is_null_then_return_or_goto(not_found);@/ -q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ -q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ -q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ -q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found4);@/ -q:=cur_ptr; i:=hex_dig5(n); get_sa_ptr; -if (cur_ptr=null)and w then goto not_found5; -return; -not_found: new_index(t,null); {create first level index node} -sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); -not_found1: new_index(i,q); {create second level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); -not_found2: new_index(i,q); {create third level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); -not_found3: new_index(i,q); {create fourth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); -not_found4: new_index(i,q); {create fifth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig5(n); -not_found5: @; -link(cur_ptr):=q; add_sa_ptr; -exit:end; -@z -%----------------------------------------------- -@x -repeat i:=hex_dig4(sa_index(q)); p:=q; q:=link(p); free_node(p,s); -@y -repeat i:=hex_dig5(sa_index(q)); p:=q; q:=link(p); free_node(p,s); -@z -%----------------------------------------------- -@x -else begin n:=hex_dig4(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); - q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); -@y -else begin n:=hex_dig5(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); - q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); - q:=link(link(q)); n:=n+65536*sa_index(q); -@z -%----------------------------------------------- -@x -begin if l<4 then {|q| is an index node} -@y -begin if l<5 then {|q| is an index node} -@z -%----------------------------------------------- -@x -@!fill_width:array[0..2] of scaled; {infinite stretch components of -@y -@!fill_width:array[0..3] of scaled; {infinite stretch components of -@z -%----------------------------------------------- -@x - if (background[3]=0)and(background[4]=0)and(background[5]=0) then - begin do_last_line_fit:=true; - active_node_size:=active_node_size_extended; - fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; -@y - if (background[3]=0)and(background[4]=0)and@| - (background[5]=0)and(background[6]=0) then - begin do_last_line_fit:=true; - active_node_size:=active_node_size_extended; - fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; fill_width[3]:=0; -@z -%----------------------------------------------- -@x -if (cur_active_width[3]<>fill_width[0])or@| - (cur_active_width[4]<>fill_width[1])or@| - (cur_active_width[5]<>fill_width[2]) then goto not_found; - {infinite stretch of this line not entirely due to |par_fill_skip|} -if active_short(r)>0 then g:=cur_active_width[2] -else g:=cur_active_width[6]; -@y -if (cur_active_width[3]<>fill_width[0])or@| - (cur_active_width[4]<>fill_width[1])or@| - (cur_active_width[5]<>fill_width[2])or@| - (cur_active_width[6]<>fill_width[3]) then goto not_found; - {infinite stretch of this line not entirely due to |par_fill_skip|} -if active_short(r)>0 then g:=cur_active_width[2] -else g:=cur_active_width[7]; -@z -%--------------------------------------- -@x -begin if -g>cur_active_width[6] then g:=-cur_active_width[6]; -b:=badness(-g,cur_active_width[6]); -@y -begin if -g>cur_active_width[7] then g:=-cur_active_width[7]; -b:=badness(-g,cur_active_width[7]); -@z -%----------------------------------------------- -@x -if shortfall>0 then g:=cur_active_width[2] -else if shortfall<0 then g:=cur_active_width[6] -@y -if shortfall>0 then g:=cur_active_width[2] -else if shortfall<0 then g:=cur_active_width[7] -@z diff --git a/source/texk/web2c/eptexdir/pdfprimitive.test b/source/texk/web2c/eptexdir/pdfprimitive.test deleted file mode 100755 index 2d23793fae..0000000000 --- a/source/texk/web2c/eptexdir/pdfprimitive.test +++ /dev/null @@ -1,27 +0,0 @@ -#! /bin/sh -vx -# $Id$ -# Copyright 2017-2018 Karl Berry # -# Copyright 2015 Peter Breitenlohner -# You may freely use, modify and/or distribute this file. - -BinDir=${BinDir:-.} -ExeExt=${ExeExt:-} -_eptex=$BinDir/eptex$ExeExt - -LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE - -TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF -TEXINPUTS=.; export TEXINPUTS - -FILE=pdfprimitive-eptex - -# get same filename in log -rm -f $FILE.* -$LN_S $srcdir/eptexdir/tests/pdfprimitive-test.tex $FILE.tex - -$_eptex -ini -etex $FILE && exit 1 - -sed 1d $FILE.log >$FILE.out - -diff $srcdir/eptexdir/tests/$FILE.log $FILE.out || exit 1 - diff --git a/source/texk/web2c/eptexdir/pdfutils.ch b/source/texk/web2c/eptexdir/pdfutils.ch deleted file mode 100644 index 73dfb8e3fe..0000000000 --- a/source/texk/web2c/eptexdir/pdfutils.ch +++ /dev/null @@ -1,2150 +0,0 @@ -%% Support for some primitives defined in pdfTeX -%% -%% \pdfstrcmp: need for LaTeX3 -%% In comparison, Japanese characters will be always encoded in UTF-8. -%% -%% \pdffilemoddate and co.: for standalone package -%% (\pdfcreationdate, \pdffilemoddate, \pdffilesize) -%% -%% \pdfsavepos and co. -%% (\pdfsavepos, \pdfpage{width,height}, \pdflast{x,y}pos) -%% -%% \pdffiledump: for bmpsize package by Heiko Oberdiek -%% -%% \pdfshellescape: by doraTeX's request -%% -%% \pdfmdfivesum: by Akira's request -%% As \pdfstrcmp, Japanese characters will be always encoded in UTF-8 in -%% \pdfmdfivesum {...}. (no conversion for \pdfmdfivesum file ) -%% -%% \pdfprimitive and \ifpdfprimitive: for LaTeX3 (2015/07/15) -%% -%% \pdfuniformdeviate and co.: -%% (\pdfnormaldeviate, \pdfrandomseed, \pdfsetrandomseed) -%% -%% \pdfelapsedtime and \pdfresettimer -%% -%% \expanded -%% -%% \ifincsname -%% -%% \Uchar, \Ucharcat -%% -%% \vadjust pre (2021-07-01) - -@x -@* \[8] Packed data. -@y -@* \[7b] Random numbers. - -\font\tenlogo=logo10 % font used for the METAFONT logo -\def\MP{{\tenlogo META}\-{\tenlogo POST}} -\def\pdfTeX{pdf\TeX} - -This section is (almost) straight from MetaPost. I had to change -the types (use |integer| instead of |fraction|), but that should -not have any influence on the actual calculations (the original -comments refer to quantities like |fraction_four| ($2^{30}$), and -that is the same as the numeric representation of |maxdimen|). - -I've copied the low-level variables and routines that are needed, but -only those (e.g. |m_log|), not the accompanying ones like |m_exp|. Most -of the following low-level numeric routines are only needed within the -calculation of |norm_rand|. I've been forced to rename |make_fraction| -to |make_frac| because TeX already has a routine by that name with -a wholly different function (it creates a |fraction_noad| for math -typesetting) -- Taco - -And now let's complete our collection of numeric utility routines -by considering random number generation. -\MP\ generates pseudo-random numbers with the additive scheme recommended -in Section 3.6 of {\sl The Art of Computer Programming}; however, the -results are random fractions between 0 and |fraction_one-1|, inclusive. - -There's an auxiliary array |randoms| that contains 55 pseudo-random -fractions. Using the recurrence $x_n=(x_{n-55}-x_{n-31})\bmod 2^{28}$, -we generate batches of 55 new $x_n$'s at a time by calling |new_randoms|. -The global variable |j_random| tells which element has most recently -been consumed. - -@= -@!randoms:array[0..54] of integer; {the last 55 random values generated} -@!j_random:0..54; {the number of unused |randoms|} -@!random_seed:scaled; {the default random seed} - -@ A small bit of metafont is needed. - -@d fraction_half==@'1000000000 {$2^{27}$, represents 0.50000000} -@d fraction_one==@'2000000000 {$2^{28}$, represents 1.00000000} -@d fraction_four==@'10000000000 {$2^{30}$, represents 4.00000000} -@d el_gordo == @'17777777777 {$2^{31}-1$, the largest value that \MP\ likes} -@d halfp(#)==(#) div 2 -@d double(#) == #:=#+# {multiply a variable by two} - -@ The |make_frac| routine produces the |fraction| equivalent of -|p/q|, given integers |p| and~|q|; it computes the integer -$f=\lfloor2^{28}p/q+{1\over2}\rfloor$, when $p$ and $q$ are -positive. If |p| and |q| are both of the same scaled type |t|, -the ``type relation'' |make_frac(t,t)=fraction| is valid; -and it's also possible to use the subroutine ``backwards,'' using -the relation |make_frac(t,fraction)=t| between scaled types. - -If the result would have magnitude $2^{31}$ or more, |make_frac| -sets |arith_error:=true|. Most of \MP's internal computations have -been designed to avoid this sort of error. - -If this subroutine were programmed in assembly language on a typical -machine, we could simply compute |(@t$2^{28}$@>*p)div q|, since a -double-precision product can often be input to a fixed-point division -instruction. But when we are restricted to \PASCAL\ arithmetic it -is necessary either to resort to multiple-precision maneuvering -or to use a simple but slow iteration. The multiple-precision technique -would be about three times faster than the code adopted here, but it -would be comparatively long and tricky, involving about sixteen -additional multiplications and divisions. - -This operation is part of \MP's ``inner loop''; indeed, it will -consume nearly 10\pct! of the running time (exclusive of input and output) -if the code below is left unchanged. A machine-dependent recoding -will therefore make \MP\ run faster. The present implementation -is highly portable, but slow; it avoids multiplication and division -except in the initial stage. System wizards should be careful to -replace it with a routine that is guaranteed to produce identical -results in all cases. -@^system dependencies@> - -As noted below, a few more routines should also be replaced by machine-dependent -code, for efficiency. But when a procedure is not part of the ``inner loop,'' -such changes aren't advisable; simplicity and robustness are -preferable to trickery, unless the cost is too high. -@^inner loop@> - -@p function make_frac(@!p,@!q:integer):integer; -var @!f:integer; {the fraction bits, with a leading 1 bit} -@!n:integer; {the integer part of $\vert p/q\vert$} -@!negative:boolean; {should the result be negated?} -@!be_careful:integer; {disables certain compiler optimizations} -begin if p>=0 then negative:=false -else begin negate(p); negative:=true; - end; -if q<=0 then - begin debug if q=0 then confusion("/");@;@+gubed@;@/ -@:this can't happen /}{\quad \./@> - negate(q); negative:=not negative; - end; -n:=p div q; p:=p mod q; -if n>=8 then - begin arith_error:=true; - if negative then make_frac:=-el_gordo@+else make_frac:=el_gordo; - end -else begin n:=(n-1)*fraction_one; - @; - if negative then make_frac:=-(f+n)@+else make_frac:=f+n; - end; -end; - -@ The |repeat| loop here preserves the following invariant relations -between |f|, |p|, and~|q|: -(i)~|0<=p - -@= -f:=1; -repeat be_careful:=p-q; p:=be_careful+p; -if p>=0 then f:=f+f+1 -else begin double(f); p:=p+q; - end; -until f>=fraction_one; -be_careful:=p-q; -if be_careful+p>=0 then incr(f) - -@ - -@p function take_frac(@!q:integer;@!f:integer):integer; -var @!p:integer; {the fraction so far} -@!negative:boolean; {should the result be negated?} -@!n:integer; {additional multiple of $q$} -@!be_careful:integer; {disables certain compiler optimizations} -begin @=0| and |q>0|@>; -if f; -be_careful:=n-el_gordo; -if be_careful+p>0 then - begin arith_error:=true; n:=el_gordo-p; - end; -if negative then take_frac:=-(n+p) -else take_frac:=n+p; -end; - -@ @=0| and |q>0|@>= -if f>=0 then negative:=false -else begin negate(f); negative:=true; - end; -if q<0 then - begin negate(q); negative:=not negative; - end; - -@ The invariant relations in this case are (i)~$\lfloor(qf+p)/2^k\rfloor -=\lfloor qf_0/2^{28}+{1\over2}\rfloor$, where $k$ is an integer and -$f_0$ is the original value of~$f$; (ii)~$2^k\L f<2^{k+1}$. -@^inner loop@> - -@= -p:=fraction_half; {that's $2^{27}$; the invariants hold now with $k=28$} -if q= -@!two_to_the:array[0..30] of integer; {powers of two} -@!spec_log:array[1..28] of integer; {special logarithms} - - -@ @= -two_to_the[0]:=1; -for k:=1 to 30 do two_to_the[k]:=2*two_to_the[k-1]; -spec_log[1]:=93032640; -spec_log[2]:=38612034; -spec_log[3]:=17922280; -spec_log[4]:=8662214; -spec_log[5]:=4261238; -spec_log[6]:=2113709; -spec_log[7]:=1052693; -spec_log[8]:=525315; -spec_log[9]:=262400; -spec_log[10]:=131136; -spec_log[11]:=65552; -spec_log[12]:=32772; -spec_log[13]:=16385; -for k:=14 to 27 do spec_log[k]:=two_to_the[27-k]; -spec_log[28]:=1; - -@ - -@p function m_log(@!x:integer):integer; -var @!y,@!z:integer; {auxiliary registers} -@!k:integer; {iteration counter} -begin if x<=0 then @ -else begin y:=1302456956+4-100; {$14\times2^{27}\ln2\approx1302456956.421063$} - z:=27595+6553600; {and $2^{16}\times .421063\approx 27595$} - while xfraction_four+4 do - @; - m_log:=y div 8; - end; -end; - -@ @= -begin z:=((x-1) div two_to_the[k])+1; {$z=\lceil x/2^k\rceil$} -while x= -begin print_err("Logarithm of "); -@.Logarithm...replaced by 0@> -print_scaled(x); print(" has been replaced by 0"); -help2("Since I don't take logs of non-positive numbers,")@/ - ("I'm zeroing this one. Proceed, with fingers crossed."); -error; m_log:=0; -end - -@ The following somewhat different subroutine tests rigorously if $ab$ is -greater than, equal to, or less than~$cd$, -given integers $(a,b,c,d)$. In most cases a quick decision is reached. -The result is $+1$, 0, or~$-1$ in the three respective cases. - -@d return_sign(#)==begin ab_vs_cd:=#; return; - end - -@p function ab_vs_cd(@!a,b,c,d:integer):integer; -label exit; -var @!q,@!r:integer; {temporary registers} -begin @=0|, |b,d>0|@>; -loop@+ begin q := a div d; r := c div b; - if q<>r then - if q>r then return_sign(1)@+else return_sign(-1); - q := a mod d; r := c mod b; - if r=0 then - if q=0 then return_sign(0)@+else return_sign(1); - if q=0 then return_sign(-1); - a:=b; b:=q; c:=d; d:=r; - end; {now |a>d>0| and |c>b>0|} -exit:end; - -@ @= -if a<0 then - begin negate(a); negate(b); - end; -if c<0 then - begin negate(c); negate(d); - end; -if d<=0 then - begin if b>=0 then - if ((a=0)or(b=0))and((c=0)or(d=0)) then return_sign(0) - else return_sign(1); - if d=0 then - if a=0 then return_sign(0)@+else return_sign(-1); - q:=a; a:=c; c:=q; q:=-b; b:=-d; d:=q; - end -else if b<=0 then - begin if b<0 then if a>0 then return_sign(-1); - if c=0 then return_sign(0) else return_sign(-1); - end - -@ To consume a random integer, the program below will say `|next_random|' -and then it will fetch |randoms[j_random]|. - -@d next_random==if j_random=0 then new_randoms - else decr(j_random) - -@p procedure new_randoms; -var @!k:0..54; {index into |randoms|} -@!x:integer; {accumulator} -begin for k:=0 to 23 do - begin x:=randoms[k]-randoms[k+31]; - if x<0 then x:=x+fraction_one; - randoms[k]:=x; - end; -for k:=24 to 54 do - begin x:=randoms[k]-randoms[k-24]; - if x<0 then x:=x+fraction_one; - randoms[k]:=x; - end; -j_random:=54; -end; - -@ To initialize the |randoms| table, we call the following routine. - -@p procedure init_randoms(@!seed:integer); -var @!j,@!jj,@!k:integer; {more or less random integers} -@!i:0..54; {index into |randoms|} -begin j:=abs(seed); -while j>=fraction_one do j:=halfp(j); -k:=1; -for i:=0 to 54 do - begin jj:=k; k:=j-k; j:=jj; - if k<0 then k:=k+fraction_one; - randoms[(i*21)mod 55]:=j; - end; -new_randoms; new_randoms; new_randoms; {``warm up'' the array} -end; - -@ To produce a uniform random number in the range |0<=u=u>x| -or |0=u=x|, given a |scaled| value~|x|, we proceed as shown here. - -Note that the call of |take_frac| will produce the values 0 and~|x| -with about half the probability that it will produce any other particular -values between 0 and~|x|, because it rounds its answers. - -@p function unif_rand(@!x:integer):integer; -var @!y:integer; {trial value} -begin next_random; y:=take_frac(abs(x),randoms[j_random]); -if y=abs(x) then unif_rand:=0 -else if x>0 then unif_rand:=y -else unif_rand:=-y; -end; - -@ Finally, a normal deviate with mean zero and unit standard deviation -can readily be obtained with the ratio method (Algorithm 3.4.1R in -{\sl The Art of Computer Programming\/}). - -@p function norm_rand:integer; -var @!x,@!u,@!l:integer; {what the book would call $2^{16}X$, $2^{28}U$, - and $-2^{24}\ln U$} -begin repeat - repeat next_random; - x:=take_frac(112429,randoms[j_random]-fraction_half); - {$2^{16}\sqrt{8/e}\approx 112428.82793$} - next_random; u:=randoms[j_random]; - until abs(x)=0; -norm_rand:=x; -end; -@* \[8] Packed data. -@z - -% [10] \vadjust pre -@x -@d adjust_ptr(#)==mem[#+1].int - {vertical list to be moved out of horizontal list} -@y -@d adjust_pre == subtype {<>0 => pre-adjustment} -@#{|append_list| is used to append a list to |tail|} -@d append_list(#) == begin link(tail) := link(#); append_list_end -@d append_list_end(#) == tail := #; end - -@d adjust_ptr(#)==mem[#+1].int - {vertical list to be moved out of horizontal list} -@z - -% [11] \vadjust pre -@x -@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 pre_adjust_head==mem_top-14 {head of pre-adjustment list returned by |hpack|} -@d hi_mem_stat_min==mem_top-14 {smallest statically allocated word in - the one-word |mem|} -@d hi_mem_stat_usage=15 {the number of one-word nodes always present} -@z - -@x -@* \[12] Displaying boxes. -@y -@@; - -@* \[12] Displaying boxes. -@z - -% [12] \vadjust pre -@x -@ @= -begin print_esc("vadjust"); node_list_display(adjust_ptr(p)); {recursive call} -end -@y -@ @= -begin print_esc("vadjust"); if adjust_pre(p) <> 0 then print(" pre "); -node_list_display(adjust_ptr(p)); {recursive call} -end -@z - -@x \[if]pdfprimitive -@d frozen_special=frozen_control_sequence+10 - {permanent `\.{\\special}'} -@d frozen_null_font=frozen_control_sequence+11 - {permanent `\.{\\nullfont}'} -@y -@d frozen_special=frozen_control_sequence+10 - {permanent `\.{\\special}'} -@d frozen_primitive=frozen_control_sequence+11 - {permanent `\.{\\pdfprimitive}'} -@d prim_eqtb_base=frozen_primitive+1 -@d prim_size=2100 {maximum number of primitives } -@d frozen_null_font=prim_eqtb_base+prim_size+1 - {permanent `\.{\\nullfont}'} -@z - -@x -@d dimen_pars=23 {total number of dimension parameters} -@y -@d pdf_page_width_code=23 {page width} -@d pdf_page_height_code=24 {page height} -@d dimen_pars=25 {total number of dimension parameters} -@z - -@x \pdfpage{width,height} -@d emergency_stretch==dimen_par(emergency_stretch_code) -@y -@d emergency_stretch==dimen_par(emergency_stretch_code) -@d pdf_page_width==dimen_par(pdf_page_width_code) -@d pdf_page_height==dimen_par(pdf_page_height_code) -@z - -@x \pdfpage{width,height} -emergency_stretch_code:print_esc("emergencystretch"); -@y -emergency_stretch_code:print_esc("emergencystretch"); -pdf_page_width_code: print_esc("pdfpagewidth"); -pdf_page_height_code: print_esc("pdfpageheight"); -@z - -@x \[if]pdfprimitive -@!cs_count:integer; {total number of known identifiers} -@y -@!cs_count:integer; {total number of known identifiers} - -@ Primitive support needs a few extra variables and definitions - -@d prim_prime=1777 {about 85\pct! of |primitive_size|} -@d prim_base=1 -@d prim_next(#) == prim[#].lh {link for coalesced lists} -@d prim_text(#) == prim[#].rh {string number for control sequence name, plus one} -@d prim_is_full == (prim_used=prim_base) {test if all positions are occupied} -@d prim_eq_level_field(#)==#.hh.b1 -@d prim_eq_type_field(#)==#.hh.b0 -@d prim_equiv_field(#)==#.hh.rh -@d prim_eq_level(#)==prim_eq_level_field(eqtb[prim_eqtb_base+#]) {level of definition} -@d prim_eq_type(#)==prim_eq_type_field(eqtb[prim_eqtb_base+#]) {command code for equivalent} -@d prim_equiv(#)==prim_equiv_field(eqtb[prim_eqtb_base+#]) {equivalent value} -@d undefined_primitive=0 -@d biggest_char=255 { 65535 in XeTeX } - -@= -@!prim: array [0..prim_size] of two_halves; {the primitives table} -@!prim_used:pointer; {allocation pointer for |prim|} -@z - -@x \[if]pdfprimitive -@ @= -no_new_control_sequence:=true; {new identifiers are usually forbidden} -@y -@ @= -no_new_control_sequence:=true; {new identifiers are usually forbidden} -prim_next(0):=0; prim_text(0):=0; -for k:=1 to prim_size do prim[k]:=prim[0]; -@z - -@x \[if]pdfprimitive -text(frozen_dont_expand):="notexpanded:"; -@.notexpanded:@> -@y -prim_used:=prim_size; {nothing is used} -text(frozen_dont_expand):="notexpanded:"; -@.notexpanded:@> -eq_type(frozen_primitive):=ignore_spaces; -equiv(frozen_primitive):=1; -eq_level(frozen_primitive):=level_one; -text(frozen_primitive):="pdfprimitive"; -@z - -@x \[if]pdfprimitive -@ Single-character control sequences do not need to be looked up in a hash -table, since we can use the character code itself as a direct address. -@y -@ Here is the subroutine that searches the primitive table for an identifier - -@p function prim_lookup(@!s:str_number):pointer; {search the primitives table} -label found; {go here if you found it} -var h:integer; {hash code} -@!p:pointer; {index in |hash| array} -@!k:pointer; {index in string pool} -@!j,@!l:integer; -begin -if s<=biggest_char then begin - if s<0 then begin p:=undefined_primitive; goto found; end - else p:=(s mod prim_prime)+prim_base; {we start searching here} - l:=1 - end -else begin - j:=str_start[s]; - if s = str_ptr then l := cur_length else l := length(s); - @; - p:=h+prim_base; {we start searching here; note that |0<=h1+biggest_char then { |p| points a multi-letter primitive } - begin if length(prim_text(p)-1)=l then - if str_eq_str(prim_text(p)-1,s) then goto found; - end - else if prim_text(p)=1+s then goto found; { |p| points a single-letter primitive } - if prim_next(p)=0 then - begin if no_new_control_sequence then - p:=undefined_primitive - else @; - goto found; - end; - p:=prim_next(p); - end; -found: prim_lookup:=p; -end; - -@ @= -begin if prim_text(p)>0 then - begin repeat if prim_is_full then overflow("primitive size",prim_size); -@:TeX capacity exceeded primitive size}{\quad primitive size@> - decr(prim_used); - until prim_text(prim_used)=0; {search for an empty location in |prim|} - prim_next(p):=prim_used; p:=prim_used; - end; -prim_text(p):=s+1; -end - -@ The value of |prim_prime| should be roughly 85\pct! of -|prim_size|, and it should be a prime number. - -@= -h:=str_pool[j]; -for k:=j+1 to j+l-1 do - begin h:=h+h+str_pool[k]; - while h>=prim_prime do h:=h-prim_prime; - end - -@ Single-character control sequences do not need to be looked up in a hash -table, since we can use the character code itself as a direct address. -@z - -@x print_cs: \pdfprimitive -else begin l:=text(p); -@y -else begin - if (p>=prim_eqtb_base)and(p=prim_eqtb_base)and(p= -@y -@ @= -@!is_in_csname: boolean; - -@ @= -is_in_csname := false; - -@ @= -@z - -@x -no_expand:@; -@y -no_expand: if cur_chr=0 then @ - else @; -@z - -@x -@= -begin save_scanner_status:=scanner_status; scanner_status:=normal; -get_token; scanner_status:=save_scanner_status; t:=cur_tok; -back_input; {now |start| and |loc| point to the backed-up token |t|} -if (t>=cs_token_flag)and(t<>end_write_token) then - begin p:=get_avail; info(p):=cs_token_flag+frozen_dont_expand; - link(p):=loc; start:=p; loc:=p; - end; -end -@y -@= -begin save_scanner_status:=scanner_status; scanner_status:=normal; -get_token; scanner_status:=save_scanner_status; t:=cur_tok; -back_input; {now |start| and |loc| point to the backed-up token |t|} -if (t>=cs_token_flag)and(t<>end_write_token) then - begin p:=get_avail; info(p):=cs_token_flag+frozen_dont_expand; - link(p):=loc; start:=p; loc:=p; - end; -end - -@ The \.{\\pdfprimitive} handling. If the primitive meaning of the next -token is an expandable command, it suffices to replace the current -token with the primitive one and restart |expand|/ - -Otherwise, the token we just read has to be pushed back, as well -as a token matching the internal form of \.{\\pdfprimitive}, that is -sneaked in as an alternate form of |ignore_spaces|. -@!@:pdfprimitive_}{\.{\\pdfprimitive} primitive (internalized)@> - -Simply pushing back a token that matches the correct internal command -does not work, because approach would not survive roundtripping to a -temporary file. - -@= -begin save_scanner_status := scanner_status; scanner_status:=normal; -get_token; scanner_status:=save_scanner_status; -if cur_cs < hash_base then - cur_cs := prim_lookup(cur_cs-single_base) -else - cur_cs := prim_lookup(text(cur_cs)); -if cur_cs<>undefined_primitive then begin - t := prim_eq_type(cur_cs); - if t>max_command then begin - cur_cmd := t; - cur_chr := prim_equiv(cur_cs); - cur_tok := (cur_cmd*@'400)+cur_chr; - cur_cs := 0; - goto reswitch; - end - else begin - back_input; { now |loc| and |start| point to a one-item list } - p:=get_avail; info(p):=cs_token_flag+frozen_primitive; - link(p):=loc; loc:=p; start:=p; - end; - end; -end - -@ This block deals with unexpandable \.{\\primitive} appearing at a spot where -an integer or an internal values should have been found. It fetches the -next token then resets |cur_cmd|, |cur_cs|, and |cur_tok|, based on the -primitive value of that token. No expansion takes place, because the -next token may be all sorts of things. This could trigger further -expansion creating new errors. - -@= -begin -get_token; -if cur_cs < hash_base then - cur_cs := prim_lookup(cur_cs-single_base) -else - cur_cs := prim_lookup(text(cur_cs)); -if cur_cs<>undefined_primitive then begin - cur_cmd := prim_eq_type(cur_cs); - cur_chr := prim_equiv(cur_cs); - cur_cs := prim_eqtb_base+cur_cs; - cur_tok := cs_token_flag+cur_cs; - end -else begin - cur_cmd := relax; - cur_chr := 0; - cur_tok := cs_token_flag+frozen_relax; - cur_cs := frozen_relax; - end; -goto restart; -end -@z - -@x -begin r:=get_avail; p:=r; {head of the list of characters} -repeat get_x_token; -@y -begin r:=get_avail; p:=r; {head of the list of characters} -b := is_in_csname; is_in_csname := true; -repeat get_x_token; -@z - -@x -@; -@y -is_in_csname := b; -@; -@z - -@x scan_keyword -@!k:pool_pointer; {index into |str_pool|} -begin p:=backup_head; link(p):=null; k:=str_start[s]; -@y -@!k:pool_pointer; {index into |str_pool|} -@!save_cur_cs:pointer; {to save |cur_cs|} -begin p:=backup_head; link(p):=null; k:=str_start[s]; -save_cur_cs:=cur_cs; -@z - -@x scan_keyword - scan_keyword:=false; return; -@y - cur_cs:=save_cur_cs; - scan_keyword:=false; return; -@z - -@x \[if]pdfprimitive : scan_something_internal -procedure scan_something_internal(@!level:small_number;@!negative:boolean); - {fetch an internal parameter} -label exit; -@y -procedure scan_something_internal(@!level:small_number;@!negative:boolean); - {fetch an internal parameter} -label exit, restart; -@z - -@x \[if]pdfprimitive : scan_something_internal -begin m:=cur_chr; -@y -begin restart: m:=cur_chr; -@z - -@x \[if]pdfprimitive : scan_something_internal -last_item: @; -@y -last_item: @; -ignore_spaces: {trap unexpandable primitives} - if cur_chr=1 then @; -@z - -@x -@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} -@y -@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} -@d pdf_last_x_pos_code=ptex_minor_version_code+1 {code for \.{\\pdflastxpos}} -@d pdf_last_y_pos_code=pdf_last_x_pos_code+1 {code for \.{\\pdflastypos}} -@d pdf_shell_escape_code=pdf_last_y_pos_code+1 {code for \.{\\pdflastypos}} -@d elapsed_time_code=pdf_shell_escape_code+1 {code for \.{\\pdfelapsedtime}} -@d random_seed_code=elapsed_time_code+1 {code for \.{\\pdfrandomseed}} -@z - -@x -@d eTeX_int=ptex_minor_version_code+1 {first of \eTeX\ codes for integers} -@y -@d eTeX_int=random_seed_code+1 {first of \eTeX\ codes for integers} -@z - -@x \[if]pdfprimitive: scan_int -@p procedure scan_int; {sets |cur_val| to an integer} -label done; -@y -@p procedure scan_int; {sets |cur_val| to an integer} -label done, restart; -@z - -@x \[if]pdfprimitive: scan_int -if cur_tok=alpha_token then @ -@y -restart: -if cur_tok=alpha_token then @ -else if cur_tok=cs_token_flag+frozen_primitive then - @ -@z - -@x \Ucharcat: str_toks_cat -function str_toks(@!b:pool_pointer):pointer; -@y -function str_toks_cat(@!b:pool_pointer;@!cat:small_number):pointer; -@z - -@x \Ucharcat: str_toks_cat - else if t=" " then t:=space_token - else t:=other_token+t; -@y - else if (t=" ")and(cat=0) then t:=space_token - else if (cat=0)or(cat>=kanji) then t:=other_token+t - else if cat=active_char then t:= cs_token_flag + active_base + t - else t:=left_brace_token*cat+t; -@z - -@x \Ucharcat: str_toks_cat -pool_ptr:=b; str_toks:=p; -end; -@y -pool_ptr:=b; str_toks_cat:=p; -end; - -function str_toks(@!b:pool_pointer):pointer; -begin str_toks:=str_toks_cat(b,0); end; -@z - -@x -@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} -@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} -@y -@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} -@d expanded_code = etex_convert_codes {command code for \.{\\expanded}} -@d pdf_first_expand_code = expanded_code + 1 {base for \pdfTeX-like command codes} -@d pdf_strcmp_code = pdf_first_expand_code+0 {command code for \.{\\pdfstrcmp}} -@d pdf_creation_date_code = pdf_first_expand_code+1 {command code for \.{\\pdfcreationdate}} -@d pdf_file_mod_date_code = pdf_first_expand_code+2 {command code for \.{\\pdffilemoddate}} -@d pdf_file_size_code = pdf_first_expand_code+3 {command code for \.{\\pdffilesize}} -@d pdf_mdfive_sum_code = pdf_first_expand_code+4 {command code for \.{\\pdfmdfivesum}} -@d pdf_file_dump_code = pdf_first_expand_code+5 {command code for \.{\\pdffiledump}} -@d uniform_deviate_code = pdf_first_expand_code+6 {command code for \.{\\pdfuniformdeviate}} -@d normal_deviate_code = pdf_first_expand_code+7 {command code for \.{\\pdfnormaldeviate}} -@d pdf_convert_codes = pdf_first_expand_code+8 {end of \pdfTeX-like command codes} -@d Uchar_convert_code = pdf_convert_codes {command code for \.{\\Uchar}} -@d Ucharcat_convert_code = pdf_convert_codes+1 {command code for \.{\\Ucharcat}} -@d eptex_convert_codes = pdf_convert_codes+2 {end of \epTeX's command codes} -@d job_name_code=eptex_convert_codes {command code for \.{\\jobname}} -@z - -@x -primitive("jobname",convert,job_name_code);@/ -@y -@# -primitive("expanded",convert,expanded_code);@/ -@!@:expanded_}{\.{\\expanded} primitive@> -@# -primitive("jobname",convert,job_name_code);@/ -@z - -@x - eTeX_revision_code: print_esc("eTeXrevision"); -@y - eTeX_revision_code: print_esc("eTeXrevision"); - expanded_code: print_esc("expanded"); - pdf_strcmp_code: print_esc("pdfstrcmp"); - pdf_creation_date_code: print_esc("pdfcreationdate"); - pdf_file_mod_date_code: print_esc("pdffilemoddate"); - pdf_file_size_code: print_esc("pdffilesize"); - pdf_mdfive_sum_code: print_esc("pdfmdfivesum"); - pdf_file_dump_code: print_esc("pdffiledump"); - uniform_deviate_code: print_esc("pdfuniformdeviate"); - normal_deviate_code: print_esc("pdfnormaldeviate"); - Uchar_convert_code: print_esc("Uchar"); - Ucharcat_convert_code: print_esc("Ucharcat"); -@z - -@x -@p procedure conv_toks; -@y - -The extra temp string |u| is needed because |pdf_scan_ext_toks| incorporates -any pending string in its output. In order to save such a pending string, -we have to create a temporary string that is destroyed immediately after. - -@d save_cur_string==if str_start[str_ptr]0 then decr(str_ptr) - -@ Not all catcode values are allowed by \.{\\Ucharcat}: -@d illegal_Ucharcat_ascii_catcode(#)==(#active_char)or(#=out_param)or(#=ignore) -@d illegal_Ucharcat_wchar_catcode(#)==(#other_kchar) - -@p procedure conv_toks; -@z - -@x -@!save_scanner_status:small_number; {|scanner_status| upon entry} -@y -@!save_scanner_status:small_number; {|scanner_status| upon entry} -@!save_def_ref: pointer; {|def_ref| upon entry, important if inside `\.{\\message}'} -@!save_warning_index: pointer; -@!bool: boolean; {temp boolean} -@!u: str_number; {saved current string string} -@!s: str_number; {first temp string} -@!i: integer; -@!j: integer; -@!cat:small_number; {desired catcode, or 0 for automatic |spacer|/|other_char| selection} -@z - -@x -begin c:=cur_chr; @; -@y -begin cat:=0; c:=cur_chr; @; -u:=0; { will become non-nil if a string is already being built} -@z - -@x -selector:=old_setting; link(garbage):=str_toks(b); ins_list(link(temp_head)); -@y -selector:=old_setting; link(garbage):=str_toks_cat(b,cat); ins_list(link(temp_head)); -@z - -@x -eTeX_revision_code: do_nothing; -@y -eTeX_revision_code: do_nothing; -expanded_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - scan_pdf_ext_toks; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - ins_list(link(def_ref)); - free_avail(def_ref); - def_ref := save_def_ref; - restore_cur_string; - return; - end; -pdf_strcmp_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - compare_strings; - def_ref := save_def_ref; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - restore_cur_string; - end; -pdf_creation_date_code: - begin - b := pool_ptr; - getcreationdate; - link(garbage) := str_toks(b); - ins_list(link(temp_head)); - return; - end; -pdf_file_mod_date_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - scan_pdf_ext_toks; - s := tokens_to_string(def_ref); - delete_token_ref(def_ref); - def_ref := save_def_ref; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - b := pool_ptr; - getfilemoddate(s); - link(garbage) := str_toks(b); - flush_str(s); - ins_list(link(temp_head)); - restore_cur_string; - return; - end; -pdf_file_size_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - scan_pdf_ext_toks; - s := tokens_to_string(def_ref); - delete_token_ref(def_ref); - def_ref := save_def_ref; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - b := pool_ptr; - getfilesize(s); - link(garbage) := str_toks(b); - flush_str(s); - ins_list(link(temp_head)); - restore_cur_string; - return; - end; -pdf_mdfive_sum_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - bool := scan_keyword("file"); - scan_pdf_ext_toks; - if bool then s := tokens_to_string(def_ref) - else begin - isprint_utf8:=true; s := tokens_to_string(def_ref); isprint_utf8:=false; - end; - delete_token_ref(def_ref); - def_ref := save_def_ref; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - b := pool_ptr; - getmd5sum(s, bool); - link(garbage) := str_toks(b); - flush_str(s); - ins_list(link(temp_head)); - restore_cur_string; - return; - end; -pdf_file_dump_code: - begin - save_scanner_status := scanner_status; - save_warning_index := warning_index; - save_def_ref := def_ref; - save_cur_string; - {scan offset} - cur_val := 0; - if (scan_keyword("offset")) then begin - scan_int; - if (cur_val < 0) then begin - print_err("Bad file offset"); -@.Bad file offset@> - help2("A file offset must be between 0 and 2^{31}-1,")@/ - ("I changed this one to zero."); - int_error(cur_val); - cur_val := 0; - end; - end; - i := cur_val; - {scan length} - cur_val := 0; - if (scan_keyword("length")) then begin - scan_int; - if (cur_val < 0) then begin - print_err("Bad dump length"); -@.Bad dump length@> - help2("A dump length must be between 0 and 2^{31}-1,")@/ - ("I changed this one to zero."); - int_error(cur_val); - cur_val := 0; - end; - end; - j := cur_val; - {scan file name} - scan_pdf_ext_toks; - s := tokens_to_string(def_ref); - delete_token_ref(def_ref); - def_ref := save_def_ref; - warning_index := save_warning_index; - scanner_status := save_scanner_status; - b := pool_ptr; - getfiledump(s, i, j); - link(garbage) := str_toks(b); - flush_str(s); - ins_list(link(temp_head)); - restore_cur_string; - return; - end; -uniform_deviate_code: scan_int; -normal_deviate_code: do_nothing; -Uchar_convert_code: scan_char_num; -Ucharcat_convert_code: - begin - scan_ascii_num; - i:=cur_val; - scan_int; - if illegal_Ucharcat_ascii_catcode(cur_val) then - begin print_err("Invalid code ("); print_int(cur_val); -@.Invalid code@> - print("), should be in the ranges 1..4, 6..8, 10..13"); - help1("I'm going to use 12 instead of that illegal code value.");@/ - error; cat:=12; - end else cat:=cur_val; - cur_val:=i; - end; -@z - -@x -eTeX_revision_code: print(eTeX_revision); -@y -eTeX_revision_code: print(eTeX_revision); -pdf_strcmp_code: print_int(cur_val); -uniform_deviate_code: print_int(unif_rand(cur_val)); -normal_deviate_code: print_int(norm_rand); -Uchar_convert_code: -if is_char_ascii(cur_val) then print_char(cur_val) else print_kanji(cur_val); -Ucharcat_convert_code: -if cat"; {relation to be evaluated} -@y -var b:boolean; {is the condition true?} -@!e:boolean; {keep track of nested csnames} -@!r:"<"..">"; {relation to be evaluated} -@z - -@x \[if]pdfprimitive -if_void_code, if_hbox_code, if_vbox_code: @; -@y -if_void_code, if_hbox_code, if_vbox_code: @; -if_pdfprimitive_code: begin - save_scanner_status:=scanner_status; - scanner_status:=normal; - get_next; - scanner_status:=save_scanner_status; - if cur_cs < hash_base then - m := prim_lookup(cur_cs-single_base) - else - m := prim_lookup(text(cur_cs)); - b :=((cur_cmd<>undefined_cs) and - (m<>undefined_primitive) and - (cur_cmd=prim_eq_type(m)) and - (cur_chr=prim_equiv(m))); - end; -@z - -@x -@ @= -@y -@ @= -@; -@z - -% [33] \vadjust pre -@x -if adjust_tail<>null then link(adjust_tail):=null; -@y -if adjust_tail<>null then link(adjust_tail):=null; -if pre_adjust_tail<>null then link(pre_adjust_tail):=null; -@z - -% [33] \vadjust pre -@x - ins_node,mark_node,adjust_node: if adjust_tail<>null then -@y - ins_node,mark_node,adjust_node: if (adjust_tail<>null) or (pre_adjust_tail<> null) then -@z - -% [33] \vadjust pre -@x -to make a deletion. -@^inner loop@> -@y -to make a deletion. -@^inner loop@> - -@= -@!pre_adjust_tail: pointer; - -@ @= -pre_adjust_tail := null; - -@ Materials in \.{\\vadjust} used with \.{pre} keyword will be appended to -|pre_adjust_tail| instead of |adjust_tail|. - -@d update_adjust_list(#) == begin - if # = null then - confusion("pre vadjust"); - link(#) := adjust_ptr(p); - while link(#) <> null do - # := link(#); -end -@z - -% [33] \vadjust pre -@x -@= -begin while link(q)<>p do q:=link(q); -if type(p)=adjust_node then - begin link(adjust_tail):=adjust_ptr(p); - while link(adjust_tail)<>null do adjust_tail:=link(adjust_tail); - p:=link(p); free_node(link(q),small_node_size); - end -else begin link(adjust_tail):=p; adjust_tail:=p; p:=link(p); - end; -link(q):=p; p:=q; -@y -@= -begin while link(q)<>p do q:=link(q); - if type(p) = adjust_node then begin - if adjust_pre(p) <> 0 then - update_adjust_list(pre_adjust_tail) - else - update_adjust_list(adjust_tail); - p := link(p); free_node(link(q), small_node_size); - end -else begin link(adjust_tail):=p; adjust_tail:=p; p:=link(p); - end; -link(q):=p; p:=q; -@z - -% [37] \vadjust pre -@x -@d align_stack_node_size=5 {number of |mem| words to save alignment states} -@y -@d align_stack_node_size=6 {number of |mem| words to save alignment states} -@z - -% [37] \vadjust pre -@x -@!cur_head,@!cur_tail:pointer; {adjustment list pointers} -@y -@!cur_head,@!cur_tail:pointer; {adjustment list pointers} -@!cur_pre_head,@!cur_pre_tail:pointer; {pre-adjustment list pointers} -@z - -% [37] \vadjust pre -@x -cur_head:=null; cur_tail:=null; -@y -cur_head:=null; cur_tail:=null; -cur_pre_head:=null; cur_pre_tail:=null; -@z - -% [37] procedure |push_alignment|: \vadjust pre -@x -info(p+4):=cur_head; link(p+4):=cur_tail; -align_ptr:=p; -cur_head:=get_avail; -@y -info(p+4):=cur_head; link(p+4):=cur_tail; -info(p+5):=cur_pre_head; link(p+5):=cur_pre_tail; -align_ptr:=p; -cur_head:=get_avail; -cur_pre_head:=get_avail; -@z - -% [37] procedure |pop_alignment|: \vadjust pre -@x -begin free_avail(cur_head); -p:=align_ptr; -cur_tail:=link(p+4); cur_head:=info(p+4); -@y -begin free_avail(cur_head); -free_avail(cur_pre_head); -p:=align_ptr; -cur_tail:=link(p+4); cur_head:=info(p+4); -cur_pre_tail:=link(p+5); cur_pre_head:=info(p+5); -@z - -% [37] \vadjust pre -@x -cur_align:=link(preamble); cur_tail:=cur_head; init_span(cur_align); -@y -cur_align:=link(preamble); cur_tail:=cur_head; cur_pre_tail:=cur_pre_head; -init_span(cur_align); -@z - -% [37] \vadjust pre + pTeX -@x - begin adjust_tail:=cur_tail; adjust_hlist(head,false); -@y - begin adjust_tail:=cur_tail; pre_adjust_tail:=cur_pre_tail; - adjust_hlist(head,false); -@z - -% [37] \vadjust pre -@x - cur_tail:=adjust_tail; adjust_tail:=null; -@y - cur_tail:=adjust_tail; adjust_tail:=null; - cur_pre_tail:=pre_adjust_tail; pre_adjust_tail:=null; -@z - -% [37] \vadjust pre -@x - pop_nest; append_to_vlist(p); - if cur_head<>cur_tail then - begin link(tail):=link(cur_head); tail:=cur_tail; - end; -@y - pop_nest; - if cur_pre_head <> cur_pre_tail then - append_list(cur_pre_head)(cur_pre_tail); - append_to_vlist(p); - if cur_head <> cur_tail then - append_list(cur_head)(cur_tail); -@z - -% [39] \vadjust pre -@x -@ @= -append_to_vlist(just_box); -if adjust_head<>adjust_tail then - begin link(tail):=link(adjust_head); tail:=adjust_tail; - end; -adjust_tail:=null -@y -@ @= -if pre_adjust_head <> pre_adjust_tail then - append_list(pre_adjust_head)(pre_adjust_tail); -pre_adjust_tail := null; -append_to_vlist(just_box); -if adjust_head <> adjust_tail then - append_list(adjust_head)(adjust_tail); -adjust_tail := null -@z - -% [39] \vadjust pre -@x -adjust_tail:=adjust_head; just_box:=hpack(q,cur_width,exactly); -@y -adjust_tail:=adjust_head; -pre_adjust_tail := pre_adjust_head; -just_box:=hpack(q,cur_width,exactly); -@z - -@x \[if]pdfprimitive: main_loop -any_mode(ignore_spaces): begin @; - goto reswitch; - end; -@y -any_mode(ignore_spaces): begin - if cur_chr = 0 then begin - @; - goto reswitch; - end - else begin - t:=scanner_status; - scanner_status:=normal; - get_next; - scanner_status:=t; - if cur_cs < hash_base then - cur_cs := prim_lookup(cur_cs-single_base) - else - cur_cs := prim_lookup(text(cur_cs)); - if cur_cs<>undefined_primitive then begin - cur_cmd := prim_eq_type(cur_cs); - cur_chr := prim_equiv(cur_cs); - cur_tok := cs_token_flag+prim_eqtb_base+cur_cs; - goto reswitch; - end; - end; - end; -@z - -% [47] \vadjust pre -@x - 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 -@y - if abs(mode)=vmode then - begin - if pre_adjust_tail <> null then begin - if pre_adjust_head <> pre_adjust_tail then - append_list(pre_adjust_head)(pre_adjust_tail); - pre_adjust_tail := null; - end; - append_to_vlist(cur_box); - if adjust_tail <> null then begin - if adjust_head <> adjust_tail then - append_list(adjust_head)(adjust_tail); - adjust_tail := null; - end; - if mode>0 then build_page; - end -@z - -% [47] \vadjust pre + pTeX -@x -adjusted_hbox_group: begin adjust_hlist(head,false); - adjust_tail:=adjust_head; package(0); -@y -adjusted_hbox_group: begin adjust_hlist(head,false); - adjust_tail:=adjust_head; - pre_adjust_tail:=pre_adjust_head; package(0); -@z - -% [47] \vadjust pre -@x -saved(0):=cur_val; incr(save_ptr); -@y -saved(0) := cur_val; -if (cur_cmd = vadjust) and scan_keyword("pre") then - saved(1) := 1 -else - saved(1) := 0; -save_ptr := save_ptr + 2; -@z - -% [47] \vadjust pre -@x - d:=split_max_depth; f:=floating_penalty; unsave; decr(save_ptr); -@y - d:=split_max_depth; f:=floating_penalty; unsave; save_ptr := save_ptr - 2; -@z - -% [47] \vadjust pre + pTeX -@x - r:=get_node(small_node_size); type(r):=adjust_node;@/ - subtype(r):=0; {the |subtype| is not used} - adjust_ptr(r):=list_ptr(p); delete_glue_ref(q); -@y - r:=get_node(small_node_size); type(r):=adjust_node;@/ - adjust_pre(r) := saved(1); {the |subtype| is used for |adjust_pre|} - adjust_ptr(r):=list_ptr(p); delete_glue_ref(q); -@z - -% [48] \vadjust pre -@x -@!t:pointer; {tail of adjustment list} -@y -@!t:pointer; {tail of adjustment list} -@!pre_t:pointer; {tail of pre-adjustment list} -@z - -% [48] \vadjust pre -@x -adjust_tail:=adjust_head; b:=hpack(p,natural); p:=list_ptr(b); -t:=adjust_tail; adjust_tail:=null;@/ -@y -adjust_tail:=adjust_head; pre_adjust_tail:=pre_adjust_head; -b:=hpack(p,natural); p:=list_ptr(b); -t:=adjust_tail; adjust_tail:=null;@/ -pre_t:=pre_adjust_tail; pre_adjust_tail:=null;@/ -@z - -% [48] \vadjust pre -@x -if t<>adjust_head then {migrating material comes after equation number} - begin link(tail):=link(adjust_head); tail:=t; - end; -@y -if t<>adjust_head then {migrating material comes after equation number} - begin link(tail):=link(adjust_head); tail:=t; - end; -if pre_t<>pre_adjust_head then - begin link(tail):=link(pre_adjust_head); tail:=pre_t; - end; -@z - -@x \[if]pdfprimitive: dump prim table -@= -@y -@= -for p:=0 to prim_size do dump_hh(prim[p]); -@z - -@x \[if]pdfprimitive: undump prim table -@ @= -@y -@ @= -for p:=0 to prim_size do undump_hh(prim[p]); -@z - -@x -fix_date_and_time;@/ -@y -fix_date_and_time;@/ -isprint_utf8:=false; -random_seed:=(microseconds*1000)+(epochseconds mod 1000000);@/ -init_randoms(random_seed);@/ -@z - -@x -@d language_node=4 {|subtype| in whatsits that change the current language} -@y -@d latespecial_node=4 {|subtype| in whatsits that represent \.{\\special} things} -@d language_node=5 {|subtype| in whatsits that change the current language} -@z - -@x -@d immediate_code=4 {command modifier for \.{\\immediate}} -@d set_language_code=5 {command modifier for \.{\\setlanguage}} -@d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}} -@y -@d immediate_code=5 {command modifier for \.{\\immediate}} -@d set_language_code=6 {command modifier for \.{\\setlanguage}} -@d epTeX_input_encoding_code=7 {command modifier for \.{\\epTeXinputencoding}} -@d pdf_save_pos_node=epTeX_input_encoding_code+1 -@d set_random_seed_code=pdf_save_pos_node+1 -@d reset_timer_code=set_random_seed_code+1 -@z - -@x - set_language_code:print_esc("setlanguage"); -@y - set_language_code:print_esc("setlanguage"); - pdf_save_pos_node: print_esc("pdfsavepos"); - set_random_seed_code: print_esc("pdfsetrandomseed"); - reset_timer_code: print_esc("pdfresettimer"); -@z - -@x -set_language_code:@; -@y -set_language_code:@; -pdf_save_pos_node: @; -set_random_seed_code: @; -reset_timer_code: @; -@z - -@x -@= -begin new_whatsit(special_node,write_node_size); write_stream(tail):=null; -p:=scan_toks(false,true); write_tokens(tail):=def_ref; -inhibit_glue_flag:=false; -end -@y -@= -begin if scan_keyword("shipout") then -begin new_whatsit(latespecial_node,write_node_size); write_stream(tail):=null; -p:=scan_toks(false,false); write_tokens(tail):=def_ref; -end else -begin new_whatsit(special_node,write_node_size); write_stream(tail):=null; -p:=scan_toks(false,true); write_tokens(tail):=def_ref; -end; -inhibit_glue_flag:=false; -end -@z - -@x -special_node:begin print_esc("special"); - print_mark(write_tokens(p)); - end; -@y -special_node:begin print_esc("special"); - print_mark(write_tokens(p)); - end; -latespecial_node:begin print_esc("special"); print(" shipout"); - print_mark(write_tokens(p)); - end; -@z - -@x \pdfsavepos - print_int(what_lhm(p)); print_char(","); - print_int(what_rhm(p)); print_char(")"); - end; -@y - print_int(what_lhm(p)); print_char(","); - print_int(what_rhm(p)); print_char(")"); - end; -pdf_save_pos_node: print_esc("pdfsavepos"); -set_random_seed_code: print_esc("pdfsetrandomseed"); -reset_timer_code: print_esc("pdfresettimer"); -@z - -@x -write_node,special_node: begin r:=get_node(write_node_size); -@y -write_node,special_node,latespecial_node: begin r:=get_node(write_node_size); -@z - -@x \pdfsavepos -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; -pdf_save_pos_node: - r := get_node(small_node_size); -@z - -@x -write_node,special_node: begin delete_token_ref(write_tokens(p)); -@y -write_node,special_node,latespecial_node: begin delete_token_ref(write_tokens(p)); -@z - -@x \pdfsavepos -close_node,language_node: free_node(p,small_node_size); -@y -close_node,language_node: free_node(p,small_node_size); -pdf_save_pos_node: free_node(p, small_node_size); -@z - -@x -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;@/ -old_setting:=selector; selector:=new_string; -show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); -@y -procedure special_out(@!p:pointer); -label done; -var old_setting:0..max_selector; {holds print |selector|} -@!h:halfword; -@!k:pool_pointer; {index into |str_pool|} -@!q,@!r:pointer; {temporary variables for list manipulation} -@!old_mode:integer; {saved |mode|} -@!s,@!t,@!cw, @!num, @!denom: scaled; -@!bl: boolean; -@!i: small_number; -begin synch_h; synch_v;@/ -old_setting:=selector; -if subtype(p)=latespecial_node then - begin @; - h:=def_ref; - end -else h:=write_tokens(p); -selector:=new_string; -show_token_list(link(h),null,pool_size-pool_ptr); -@z - -@x -pool_ptr:=str_start[str_ptr]; {erase the string} -@y -if read_papersize_special>0 then - @; -done: pool_ptr:=str_start[str_ptr]; {erase the string} -if subtype(p)=latespecial_node then - flush_list(def_ref); -@z - -@x -special_node:special_out(p); -language_node:do_nothing; -@y -special_node,latespecial_node:special_out(p); -language_node:do_nothing; -pdf_save_pos_node: - @; -@z - -@x -primitive("eTeXrevision",convert,eTeX_revision_code);@/ -@!@:eTeX_revision_}{\.{\\eTeXrevision} primitive@> -@y -primitive("eTeXrevision",convert,eTeX_revision_code);@/ -@!@:eTeX_revision_}{\.{\\eTeXrevision} primitive@> -primitive("pdfprimitive",no_expand,1);@/ -@!@:pdfprimitive_}{\.{\\pdfprimitive} primitive@> -primitive("pdfstrcmp",convert,pdf_strcmp_code);@/ -@!@:pdf_strcmp_}{\.{\\pdfstrcmp} primitive@> -primitive("pdfcreationdate",convert,pdf_creation_date_code);@/ -@!@:pdf_creation_date_}{\.{\\pdfcreationdate} primitive@> -primitive("pdffilemoddate",convert,pdf_file_mod_date_code);@/ -@!@:pdf_file_mod_date_}{\.{\\pdffilemoddate} primitive@> -primitive("pdffilesize",convert,pdf_file_size_code);@/ -@!@:pdf_file_size_}{\.{\\pdffilesize} primitive@> -primitive("pdfmdfivesum",convert,pdf_mdfive_sum_code);@/ -@!@:pdf_mdfive_sum_}{\.{\\pdfmdfivesum} primitive@> -primitive("pdffiledump",convert,pdf_file_dump_code);@/ -@!@:pdf_file_dump_}{\.{\\pdffiledump} primitive@> -primitive("pdfsavepos",extension,pdf_save_pos_node);@/ -@!@:pdf_save_pos_}{\.{\\pdfsavepos} primitive@> -primitive("pdfpagewidth",assign_dimen,dimen_base+pdf_page_width_code);@/ -@!@:pdf_page_width_}{\.{\\pdfpagewidth} primitive@> -primitive("pdfpageheight",assign_dimen,dimen_base+pdf_page_height_code);@/ -@!@:pdf_page_height_}{\.{\\pdfpageheight} primitive@> -primitive("pdflastxpos",last_item,pdf_last_x_pos_code);@/ -@!@:pdf_last_x_pos_}{\.{\\pdflastxpos} primitive@> -primitive("pdflastypos",last_item,pdf_last_y_pos_code);@/ -@!@:pdf_last_y_pos_}{\.{\\pdflastypos} primitive@> -primitive("pdfshellescape",last_item,pdf_shell_escape_code); -@!@:pdf_shell_escape_}{\.{\\pdfshellescape} primitive@> -primitive("ifpdfprimitive",if_test,if_pdfprimitive_code); -@!@:if_pdfprimitive_}{\.{\\ifpdfprimitive} primitive@> -primitive("pdfuniformdeviate",convert,uniform_deviate_code);@/ -@!@:uniform_deviate_}{\.{\\pdfuniformdeviate} primitive@> -primitive("pdfnormaldeviate",convert,normal_deviate_code);@/ -@!@:normal_deviate_}{\.{\\pdfnormaldeviate} primitive@> -primitive("pdfrandomseed",last_item,random_seed_code); -@!@:random_seed_}{\.{\\pdfrandomseed} primitive@> -primitive("pdfsetrandomseed",extension,set_random_seed_code);@/ -@!@:set_random_seed_code}{\.{\\pdfsetrandomseed} primitive@> -primitive("pdfelapsedtime",last_item,elapsed_time_code); -@!@:elapsed_time_}{\.{\\pdfelapsedtime} primitive@> -primitive("pdfresettimer",extension,reset_timer_code);@/ -@!@:reset_timer_}{\.{\\pdfresettimer} primitive@> -primitive("Uchar",convert,Uchar_convert_code);@/ -@!@:Uchar_}{\.{\\Uchar} primitive@> -primitive("Ucharcat",convert,Ucharcat_convert_code);@/ -@!@:Ucharcat_}{\.{\\Ucharcat} primitive@> -@z - -@x -eTeX_version_code: print_esc("eTeXversion"); -@y -eTeX_version_code: print_esc("eTeXversion"); -pdf_last_x_pos_code: print_esc("pdflastxpos"); -pdf_last_y_pos_code: print_esc("pdflastypos"); -elapsed_time_code: print_esc("pdfelapsedtime"); -pdf_shell_escape_code: print_esc("pdfshellescape"); -random_seed_code: print_esc("pdfrandomseed"); -@z - -@x -eTeX_version_code: cur_val:=eTeX_version; -@y -eTeX_version_code: cur_val:=eTeX_version; -pdf_last_x_pos_code: cur_val := pdf_last_x_pos; -pdf_last_y_pos_code: cur_val := pdf_last_y_pos; -pdf_shell_escape_code: - begin - if shellenabledp then begin - if restrictedshell then cur_val :=2 - else cur_val := 1; - end - else cur_val := 0; - end; -elapsed_time_code: cur_val := get_microinterval; -random_seed_code: cur_val := random_seed; -@z - -@x -primitive("iffontchar",if_test,if_font_char_code); -@!@:if_font_char_}{\.{\\iffontchar} primitive@> -@y -primitive("iffontchar",if_test,if_font_char_code); -@!@:if_font_char_}{\.{\\iffontchar} primitive@> -primitive("ifincsname",if_test,if_in_csname_code); -@!@:if_in_csname_}{\.{\\ifincsname} primitive@> -@z - -@x -if_font_char_code:print_esc("iffontchar"); -@y -if_font_char_code:print_esc("iffontchar"); -if_in_csname_code:print_esc("ifincsname"); -@z - -@x -if_cs_code:begin n:=get_avail; p:=n; {head of the list of characters} - repeat get_x_token; -@y -if_cs_code:begin n:=get_avail; p:=n; {head of the list of characters} - e := is_in_csname; is_in_csname := true; - repeat get_x_token; -@z - -@x - b:=(eq_type(cur_cs)<>undefined_cs); -@y - b:=(eq_type(cur_cs)<>undefined_cs); - is_in_csname := e; -@z - -@x -if_font_char_code:begin scan_font_ident; n:=cur_val; -@y -if_in_csname_code: b := is_in_csname; -if_font_char_code:begin scan_font_ident; n:=cur_val; -@z - -@x -procedure print_kanji(@!s:KANJI_code); {prints a single character} -begin -if s>@"FF then - begin print_char(@"100+Hi(s)); print_char(@"100+Lo(s)); - end else print_char(s); -end; -@y -procedure print_kanji(@!s:integer); {prints a single character} -begin -if s>@"FF then begin - if isprint_utf8 then begin - s:=UCStoUTF8(toUCS(s)); - if BYTE1(s)<>0 then print_char(@"100+BYTE1(s)); - if BYTE2(s)<>0 then print_char(@"100+BYTE2(s)); - if BYTE3(s)<>0 then print_char(@"100+BYTE3(s)); - print_char(@"100+BYTE4(s)); - end - else begin print_char(@"100+Hi(s)); print_char(@"100+Lo(s)); end; -end -else print_char(s); -end; - - -@z - -@x -@* \[54] System-dependent changes. -@y -@* \[54/pdf\TeX] System-dependent changes for {\tt\char"5Cpdfstrcmp}. -@d call_func(#) == begin if # <> 0 then do_nothing end -@d flushable(#) == (# = str_ptr - 1) - -@= -@!isprint_utf8: boolean; -@!epochseconds: integer; -@!microseconds: integer; - -@ -@d max_integer == @"7FFFFFFF {$2^{31}-1$} - -@= -procedure pdf_error(t, p: str_number); -begin - normalize_selector; - print_err("pdfTeX error"); - if t <> 0 then begin - print(" ("); - print(t); - print(")"); - end; - print(": "); print(p); - succumb; -end; - -function get_microinterval:integer; -var s,@!m:integer; {seconds and microseconds} -begin - seconds_and_micros(s,m); - if (s-epochseconds)>32767 then - get_microinterval := max_integer - else if (microseconds>m) then - get_microinterval := ((s-1-epochseconds)*65536)+ (((m+1000000-microseconds)/100)*65536)/10000 - else - get_microinterval := ((s-epochseconds)*65536) + (((m-microseconds)/100)*65536)/10000; -end; - -@ @= - -procedure compare_strings; {to implement \.{\\pdfstrcmp}} -label done; -var s1, s2: str_number; - i1, i2, j1, j2: pool_pointer; - c1, c2: integer; - save_cur_cs: pointer; -begin - save_cur_cs:=cur_cs; call_func(scan_toks(false, true)); - isprint_utf8:=true; s1 := tokens_to_string(def_ref); isprint_utf8:=false; - delete_token_ref(def_ref); - cur_cs:=save_cur_cs; call_func(scan_toks(false, true)); - isprint_utf8:=true; s2 := tokens_to_string(def_ref); isprint_utf8:=false; - delete_token_ref(def_ref); - i1 := str_start[s1]; - j1 := str_start[s1 + 1]; - i2 := str_start[s2]; - j2 := str_start[s2 + 1]; - while (i1 < j1) and (i2 < j2) do begin - if str_pool[i1]>=@"100 then c1:=str_pool[i1]-@"100 else c1:=str_pool[i1]; - if str_pool[i2]>=@"100 then c2:=str_pool[i2]-@"100 else c2:=str_pool[i2]; - if c1c2 then begin cur_val := 1; goto done; end; - incr(i1); - incr(i2); - end; - if (i1 = j1) and (i2 = j2) then - cur_val := 0 - else if i1 < j1 then - cur_val := 1 - else - cur_val := -1; -done: - flush_str(s2); - flush_str(s1); - cur_val_level := int_val; -end; - -@ Next, we implement \.{\\pdfsavepos} and related primitives. - -@= -@!cur_page_width: scaled; {"physical" width of page being shipped} -@!cur_page_height: scaled; {"physical" height of page being shipped} -@!pdf_last_x_pos: integer; -@!pdf_last_y_pos: integer; - -@ @= -begin - new_whatsit(pdf_save_pos_node, small_node_size); - inhibit_glue_flag:=false; -end - -@ @= -begin - case dvi_dir of - dir_yoko: begin pdf_last_x_pos := cur_h; pdf_last_y_pos := cur_v; end; - dir_tate: begin pdf_last_x_pos := -cur_v; pdf_last_y_pos := cur_h; end; - dir_dtou: begin pdf_last_x_pos := cur_v; pdf_last_y_pos := -cur_h; end; - endcases; - pdf_last_x_pos := pdf_last_x_pos + 4736286; - pdf_last_y_pos := cur_page_height - pdf_last_y_pos - 4736286; - {4736286 = 1in, the funny DVI origin offset} -end - -@ @= - if pdf_page_height <> 0 then - cur_page_height := pdf_page_height - else if (box_dir(p)=dir_tate)or(box_dir(p)=dir_dtou) then - cur_page_height := width(p) + 2*v_offset + 2*4736286 - else - cur_page_height := height(p) + depth(p) + 2*v_offset + 2*4736286; - {4736286 = 1in, the funny DVI origin offset} - if pdf_page_width <> 0 then - cur_page_width := pdf_page_width - else if (box_dir(p)=dir_tate)or(box_dir(p)=dir_dtou) then - cur_page_width := height(p) + depth(p) + 2*h_offset + 2*4736286 - else - cur_page_width := width(p) + 2*h_offset + 2*4736286 - {4736286 = 1in, the funny DVI origin offset} - - -@ Of course \epTeX\ can produce a \.{DVI} file only, not a PDF file. -A \.{DVI} file does not have the information of the page height, -which is needed to implement \.{\\pdflastypos} correctly. -To keep the information of the page height, I (H.~Kitagawa) -adopted \.{\\pdfpageheight} primitive from pdf\TeX. - -In \pTeX (and \hbox{\epTeX}), the papersize special -\.{\\special\{papersize=\,\\}} is commonly used -for specifying page width/height. -If \.{\\readpapersizespecial} is greater than~0, the papersize special also -changes the value of \.{\\pdfpagewidth} and \.{\\pdfpageheight}. -This process is done in the following routine. - -{\def\<#1>{\langle\hbox{#1\/}\rangle} -In present implementation, the papersize special $\$, -which can be interpreted by this routine, is defined as follows. -$$\eqalign{% - \ &\longrightarrow \.{papersize=}\\.{,}\\cr - \ &\longrightarrow \ - \\\cr - \ &\longrightarrow \.{.} \mid \\ \mid - \\\cr -}$$} -Note that any space, ``\.{,}'' as a decimal separator, minus~symbol -are neither permitted. - -@d ifps(#)==@+if k+(#)>pool_ptr then goto done @+ else @+ if -@d sop(#)==so(str_pool[#]) -@f ifps==if - -@= -begin k:=str_start[str_ptr];@/ -ifps(10) @, - (sop(k+0)<>'p')or(sop(k+1)<>'a')or(sop(k+2)<>'p')or - (sop(k+3)<>'e')@|or(sop(k+4)<>'r')or(sop(k+5)<>'s')or - (sop(k+6)<>'i')or(sop(k+7)<>'z')@|or(sop(k+8)<>'e')or - (sop(k+9)<>'=') then goto done; -k:=k+10; -@; -ifps(1) @, sop(k)=',' then begin - incr(k); cw:=s; - @; - if pool_ptr>k then goto done; - geq_word_define(dimen_base+pdf_page_width_code,cw); - geq_word_define(dimen_base+pdf_page_height_code,s);@| - cur_page_height := s; cur_page_width := cw; -end; -end; - -@ - -@d if_ps_unit(#)==if bl then @+ begin @+ ifps(2) sop(k)=(#) @, if_ps_unit_two -@d if_ps_unit_two(#)==and (sop(k+1)=(#)) then begin bl:=false; k:=k+2; if_ps_unit_end -@d if_ps_unit_end(#)==# @+ end @+ end; - -@d do_ps_conversion(#)==num:=#; do_ps_conversion_end -@d do_ps_conversion_end(#)== - s:=xn_over_d(s,num,#); s:=s*unity+((num*t+@'200000*remainder) div #) - -@= -s:=0; t:=0; bl:=true; -while (k='0')and (sop(k)<='9') then begin s:=10*s+sop(k)-'0'; incr(k); @+end - else bl:=false; -ifps(1) sop(k)='.' then - begin incr(k); bl:=true; i:=0; dig[0]:=0; - while (k='0')and (sop(k)<='9') then - begin if i<17 then begin dig[i]:=sop(k)-'0'; incr(i); @+end; - incr(k); end - else bl:=false; - end; - t:=round_decimals(i); - end; -if k+4>pool_ptr then - if (sop(k)='t')and(sop(k+1)='r')and(sop(k+2)='u')and(sop(k+3)='e') then - k:=k+4; -if mag<>1000 then - begin s:=xn_over_d(s,1000,mag); - t:=(1000*t+@'200000*remainder) div mag; - s:=s+(t div @'200000); t:=t mod @'200000; -end; -bl:=true;@/ -if_ps_unit('p')('t')(s:=s*unity+t)@/ -if_ps_unit('i')('n')(do_ps_conversion(7227)(100))@/ -if_ps_unit('p')('c')(do_ps_conversion(12)(1))@/ -if_ps_unit('c')('m')(do_ps_conversion(7227)(254))@/ -if_ps_unit('m')('m')(do_ps_conversion(7227)(2540))@/ -if_ps_unit('b')('p')(do_ps_conversion(7227)(7200))@/ -if_ps_unit('d')('d')(do_ps_conversion(1238)(1157))@/ -if_ps_unit('c')('c')(do_ps_conversion(14856)(1157))@/ -if_ps_unit('s')('p')(do_nothing) - -@ Finally, we declare some routine needed for \.{\\pdffilemoddate}. - -@= -@!isprint_utf8: boolean; -@!last_tokens_string: str_number; {the number of the most recently string -created by |tokens_to_string|} - -@ @= -procedure scan_pdf_ext_toks; -begin - call_func(scan_toks(false, true)); {like \.{\\special}} -end; - -@ @= -function tokens_to_string(p: pointer): str_number; {return a string from tokens -list} -begin - if selector = new_string then - pdf_error("tokens", "tokens_to_string() called while selector = new_string"); - old_setting:=selector; selector:=new_string; - show_token_list(link(p),null,pool_size-pool_ptr); - selector:=old_setting; - last_tokens_string := make_string; - tokens_to_string := last_tokens_string; -end; -procedure flush_str(s: str_number); {flush a string if possible} -begin - if flushable(s) then - flush_string; -end; - -@ @= - seconds_and_micros(epochseconds,microseconds); - init_start_time; - -@ Negative random seed values are silently converted to positive ones - -@= -begin - scan_int; - if cur_val<0 then negate(cur_val); - random_seed := cur_val; - init_randoms(random_seed); -end - -@ @= -begin - seconds_and_micros(epochseconds,microseconds); -end - -@* \[54] System-dependent changes. -@z diff --git a/source/texk/web2c/eptexdir/suppresserrors.ch b/source/texk/web2c/eptexdir/suppresserrors.ch deleted file mode 100644 index 07049dd353..0000000000 --- a/source/texk/web2c/eptexdir/suppresserrors.ch +++ /dev/null @@ -1,138 +0,0 @@ -%% suppresserrors.ch: support ``suppressing errors'' primitives in LuaTeX -%% -%% \suppresslongerror done -%% \suppressoutererror done -%% \suppressmathparerror done -%% The followings are not implemented to e-(u)pTeX: -%% % \suppressifcsnameerror -%% % \suppressfontnotfounderror -> we have an error from mktextfm etc. anyway -%% % \suppressprimitiveerror -> e-(u)pTeX does not produce errors in \pdfprimitive - -@x -@d eTeX_state_code=etex_int_base+10 {\eTeX\ state variables} -@y -@d suppress_long_error_code=etex_int_base+10 -@d suppress_outer_error_code=etex_int_base+11 -@d suppress_mathpar_error_code=etex_int_base+12 -@d eTeX_state_code=etex_int_base+13 {\eTeX\ state variables} -@z - -@x -@d read_papersize_special==int_par(read_papersize_special_code) -@y -@d read_papersize_special==int_par(read_papersize_special_code) -@d suppress_long_error==int_par(suppress_long_error_code) -@d suppress_outer_error==int_par(suppress_outer_error_code) -@d suppress_mathpar_error==int_par(suppress_mathpar_error_code) -@z - -@x {Perhaps this change hunk is not needed} -@p procedure check_outer_validity; -var p:pointer; {points to inserted token list} -@!q:pointer; {auxiliary pointer} -begin if scanner_status<>normal then -@y -@p procedure check_outer_validity; -var p:pointer; {points to inserted token list} -@!q:pointer; {auxiliary pointer} -begin if suppress_outer_error=0 then if scanner_status<>normal then -@z - -@x @ -if cur_cmd>=outer_call then check_outer_validity; -@y -if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; -@z - -@x @ -if cur_cmd>=outer_call then check_outer_validity; -@y -if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; -@z - -@x @ -if cur_cmd>=outer_call then check_outer_validity; -@y -if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; -@z - -@x @ - if cur_cmd=dont_expand then - @ - else check_outer_validity; -@y - if cur_cmd=dont_expand then - @ - else if suppress_outer_error=0 then check_outer_validity; -@z - -@x @ - end_file_reading; {resume previous level} - check_outer_validity; goto restart; -@y - end_file_reading; {resume previous level} - if suppress_outer_error=0 then check_outer_validity; goto restart; -@z - -@x -if cur_tok=par_token then if long_state<>long_call then - @; -@y -if cur_tok=par_token then if long_state<>long_call then - if suppress_long_error=0 then @; -@z - -@x - if cur_tok=par_token then if long_state<>long_call then - @; -@y - if cur_tok=par_token then if long_state<>long_call then - if suppress_long_error=0 then @; -@z - -@x -@: insert_dollar_sign; -@y -@: insert_dollar_sign; -mmode+par_end: if suppress_mathpar_error=0 then insert_dollar_sign; -@z - -@x -mmode+endv, mmode+par_end, mmode+stop, mmode+vskip, mmode+un_vbox, -mmode+valign, mmode+hrule -@y -mmode+endv, mmode+stop, mmode+vskip, mmode+un_vbox, -mmode+valign, mmode+hrule -@z - -@x after_math -@= -begin get_x_token; -@y -@= -begin repeat get_x_token; -until (suppress_mathpar_error=0)or(cur_cmd<>par_end); -@z - -@x -primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ -@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> -@y -primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ -@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> -primitive("suppresslongerror",assign_int,int_base+suppress_long_error_code);@/ -@!@:suppress_long_error_}{\.{\\suppresslongerror} primitive@> -primitive("suppressoutererror",assign_int,int_base+suppress_outer_error_code);@/ -@!@:suppress_outer_error_}{\.{\\suppressoutererror} primitive@> -primitive("suppressmathparerror",assign_int,int_base+suppress_mathpar_error_code);@/ -@!@:suppress_mathpar_error_}{\.{\\suppressmathparerror} primitive@> -@z - -@x -read_papersize_special_code:print_esc("readpapersizespecial"); -@y -read_papersize_special_code:print_esc("readpapersizespecial"); -suppress_long_error_code: print_esc("suppresslongerror"); -suppress_outer_error_code: print_esc("suppressoutererror"); -suppress_mathpar_error_code: print_esc("suppressmathparerror"); -@z diff --git a/source/texk/web2c/eptexdir/tests/pdfprimitive-eptex.log b/source/texk/web2c/eptexdir/tests/pdfprimitive-eptex.log deleted file mode 100644 index 81688a1f80..0000000000 --- a/source/texk/web2c/eptexdir/tests/pdfprimitive-eptex.log +++ /dev/null @@ -1,57 +0,0 @@ -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**pdfprimitive-eptex -(./pdfprimitive-eptex.tex -RELAX macro:->\message {RELAX} FUGA F T F F F -> \pdfstrcmp=\pdfstrcmp. -l.28 \show\pdfstrcmp - % ==> \pdfstrcmp - -T T -! Undefined control sequence. -l.35 \setbox0=\vbox{\pdfprimitive\ \undefined - } -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.37 \setbox0=\vbox{\pdfprimitive\vrule\undefined - } -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - - -Overfull \hbox (0.4pt too wide) in paragraph at lines 37--37 -[]| - -\hbox(0.0+0.0)x0.0 [] - -<1> -! Missing number, treated as zero. - - \- -l.43 \count42=\pdfprimitive\- - 2\A -A number should have been here; I inserted `0'. -(If you can't figure out why I needed to see a number, -look up `weird error' in the index to The TeXbook.) - -<0> -! Missing number, treated as zero. - - \vrule -l.44 \count42=\pdfprimitive\vrule - 3\A -A number should have been here; I inserted `0'. -(If you can't figure out why I needed to see a number, -look up `weird error' in the index to The TeXbook.) - -<0> ) -No pages of output. diff --git a/source/texk/web2c/eptexdir/tests/pdfprimitive-test.tex b/source/texk/web2c/eptexdir/tests/pdfprimitive-test.tex deleted file mode 100644 index 2f7211d26c..0000000000 --- a/source/texk/web2c/eptexdir/tests/pdfprimitive-test.tex +++ /dev/null @@ -1,47 +0,0 @@ -%#!euptex pdfprimitive-test.tex -\catcode`\{=1\catcode`\}=2 -\scrollmode -\catcode`\Q=14 -\ifdefined\pdfprimitive\else\catcode`\Q=11 \fi - -Q\let\pdfprimitive\primitive\let\ifpdfprimitive\ifprimitive -\catcode`\Q=11 - -\def\relax{\message{RELAX}} -\def\fuga{\message{FUGA}} -\let\input=\halign - -\relax % ==> RELAX -\pdfprimitive\relax % ==> (no output) -\message{\meaning\relax} % ==> macro:->\message {RELAX} - -\fuga % ==> FUGA -\pdfprimitive\fuga % ==> ``! Missing primitive name.'' error - -\ifpdfprimitive\relax\message{T}\else\message{F}\fi % ==> F (macro) -\ifpdfprimitive\par\message{T}\else\message{F}\fi % ==> T -\ifpdfprimitive\input\message{T}\else\message{F}\fi % ==> F - % (This \input is not ``primitive \input''.) -\ifpdfprimitive\hoge\message{T}\else\message{F}\fi % ==> F (undefined) -\ifpdfprimitive\fuga\message{T}\else\message{F}\fi % ==> F (macro) - -\show\pdfstrcmp % ==> \pdfstrcmp - -% fix for overwriting entries (170924) -\ifpdfprimitive\ \message{T}\else\message{F}\fi % ==> T -\ifpdfprimitive\vrule\message{T}\else\message{F}\fi % ==> T - -% fix for back_input in vertical mode (170924) -\setbox0=\vbox{\pdfprimitive\ \undefined} -% ==> ``! Undefined control sequence.'' error -\setbox0=\vbox{\pdfprimitive\vrule\undefined} -% ==> ``! Undefined control sequence.'' error - -\setbox0=\hbox{% - \def\A{\message{<\the\count42>}\ignorespaces} - \count42=\pdfprimitive\X 1\A - \count42=\pdfprimitive\- 2\A - \count42=\pdfprimitive\vrule 3\A -} - -\end diff --git a/source/texk/web2c/eptexdir/wcfname.test b/source/texk/web2c/eptexdir/wcfname.test deleted file mode 100755 index 628ec54cd9..0000000000 --- a/source/texk/web2c/eptexdir/wcfname.test +++ /dev/null @@ -1,131 +0,0 @@ -#! /bin/sh -vx -# -# Copyright 2022-2023 Japanese TeX Development Community -# You may freely use, modify and/or distribute this file. - -engine=eptex -testdir=eptests - -KpsDir=${KpsDir:-../kpathsea} -BinDir=${BinDir:-.} -ExeExt=${ExeExt:-} -_kpsewhich=$KpsDir/kpsewhich$ExeExt -_tex=$BinDir/$engine$ExeExt - -test -d $testdir || mkdir -p $testdir -rm -f $testdir/fn*.log $testdir/fn*.txt $testdir/fn*-tmp*.tex - -rc=0; err1=; err2=; err3=; err4= - -TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF -TEXINPUTS="$testdir;."; export TEXINPUTS - -$_kpsewhich -var-value=TEXMFCNF -$_kpsewhich -progname=$engine -var-value=TEXINPUTS -$_kpsewhich -progname=$engine -var-value=command_line_encoding -$_kpsewhich -progname=$engine -var-value=guess_input_kanji_encoding - -for loc in C.UTF-8 C.utf8 en_US.UTF-8 en_US.utf8 ja_JP.UTF-8 ja_JP.utf8; do - locale -a | grep "^$loc\$" - ret=$? - # For Slackware linux, we need to replace from utf8 to UTF-8 - if [ -f /etc/slackware-version ]; then - loc=`echo $loc | sed -e "s/utf8/UTF-8/"` - fi - if [ $ret = 0 ]; then - LC_ALL=$loc; LANGUAGE=$loc; export LC_ALL LANGUAGE - break - fi -done -if [ $ret != 0 ]; then - # linux musl fails to run `locale -a` but seems to have C.UTF-8 - loc=C.UTF-8 - LC_ALL=$loc; LANGUAGE=$loc; export LC_ALL LANGUAGE -fi - -if [ "$COMSPEC" != "" ] || [ "$ExeExt" = ".exe" ]; then - echo "*** We guess OS is Windows." - MyOS=Windows - try_ienc="sjis" -else - echo "*** We guess OS is not Windows." - MyOS=nonWindows - try_ienc="euc sjis" -fi -if [ "$ExeExt" = ".exe" ]; then - opt_win=-windows -else - opt_win= -fi - -perl -s $srcdir/tests/fn-generate.perl $opt_win -randgen=pdfuniformdeviate $testdir -pret=$? -if [ $pret != 0 ] && [ $pret != 239 ]; then - exit 77 -fi - -# pTeX internal encoding -fenc="utf8" -for ienc in $try_ienc; do -for doc in fn-$fenc fnさざ波-$fenc; do - - echo '>>> Document:'$doc ' File Encoding:'$fenc ' Internal Encoding:'$ienc - job=$doc-$ienc-ep - $_kpsewhich -progname=$engine $doc.tex || rc=10 - $_kpsewhich -progname=$engine fn±×÷§¶-utf8.tex || rc=11 - rm -f $testdir/$doc-tmp.tex $testdir/$doc-$ienc.txt $testdir/$doc-$ienc.log - $_tex -ini -interaction nonstopmode -jobname=$job -kanji=$fenc --kanji-internal=$ienc --shell-escape -etex --recorder $doc.tex >$testdir/$doc-$fenc-$ienc-term.log || \ - { rc=1 ; err1=$err1" $fenc:$ienc:$doc" ; } - $_kpsewhich -progname=$engine $doc-tmp.tex || rc=12 - mv $job.txt $job.log $testdir/ || rc=14 - mv $job.fls $testdir/ || : echo "FIXME" # check *.fls - diff $testdir/$job.txt $srcdir/tests/fn-$fenc.txt || \ - { rc=2 ; err2=$err2" $fenc:$ienc:$doc" ; } - rm -f $testdir/fn±×÷§¶-utf8-tmp.tex - -done -done - -if [ $pret = 239 ]; then - echo "*** skip tests for Shift_JIS & EUC-JP." - exit 0 -fi - - -# pTeX, regacy encoding -for fenc in sjis euc; do -for doc in fnさざ波-$fenc; do - - ienc=$fenc - if [ $MyOS = Windows ]; then - ienc="sjis" - else - if [ $fenc != sjis ]; then ienc="euc"; fi - fi - - echo '>>> Document:'$doc ' File Encoding:'$fenc ' Internal Encoding:'$ienc - job=$doc-$ienc-ep - $_kpsewhich -progname=$engine $doc.tex || rc=20 - $_kpsewhich -progname=$engine fn±×÷§¶-utf8.tex || rc=21 - rm -f $testdir/$doc-tmp.tex $testdir/$job.txt $testdir/$job.log - $_tex -ini -interaction nonstopmode -jobname=$job -kanji=$fenc --kanji-internal=$ienc --shell-escape -etex --recorder $doc.tex >$testdir/$doc-$fenc-$ienc-term.log || \ - { rc=3 ; err3=$err3" $fenc:$ienc:$doc" ; } - $_kpsewhich -progname=$engine $doc-tmp.tex || rc=22 - mv $job.txt $job.log $testdir/ || rc=24 - mv $job.fls $testdir/ || : echo "FIXME" # check *.fls - diff $testdir/$job.txt $srcdir/tests/fn-$fenc.txt || \ - { rc=4 ; err4=$err4" $fenc:$ienc:$doc" ; } - -done -done - - -if [ $rc -gt 0 ]; then - if [ -n "$err1" ]; then echo ERROR1 $err1; fi - if [ -n "$err2" ]; then echo ERROR2 $err2; fi - if [ -n "$err3" ]; then echo ERROR3 $err3; fi - if [ -n "$err4" ]; then echo ERROR4 $err4; fi -else - echo PASS -fi -exit $rc diff --git a/source/texk/web2c/euptexdir/euptexextra.h b/source/texk/web2c/euptexdir/euptexextra.h index b448b3d827..99a42d28a9 100644 --- a/source/texk/web2c/euptexdir/euptexextra.h +++ b/source/texk/web2c/euptexdir/euptexextra.h @@ -3,7 +3,7 @@ This is included by e-upTeX, from euptexextra.c */ -#include /* for EPTEX_VERSION */ +#include /* for EPTEX_VERSION */ #include /* for ETEX_VERSION */ #include /* for PTEX_VERSION */ #include /* for UPTEX_VERSION */