diff options
Diffstat (limited to 'Build/source/texk/web2c/eptexdir/etex.ch0')
-rw-r--r-- | Build/source/texk/web2c/eptexdir/etex.ch0 | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/eptexdir/etex.ch0 b/Build/source/texk/web2c/eptexdir/etex.ch0 new file mode 100644 index 00000000000..43981fb0c17 --- /dev/null +++ b/Build/source/texk/web2c/eptexdir/etex.ch0 @@ -0,0 +1,253 @@ +% eptexdir/etex.ch0: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. +% Public domain. Originally written by Peter Breitenlohner <tex-live@tug.org>. + +@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 [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 @<Process an expression and |return|@>@; + else if m>=eTeX_dim then + begin case m of + @/@<Cases for fetching a dimension value@>@/ + 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; + @/@<Cases for fetching an integer value@>@/ + 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] +var old_setting: integer; {saved value of |tracing_online|} +@y +@z + +@x [32.619] +save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; +prev_p:=this_box+list_offset; +@<Initialize |hlist_out| for mixed direction typesetting@>; +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 @<Check for LR anomalies at the end of |hpack|@>; +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 + @<Remove the last box, unless it's part of a discretionary@>; + done:end; +@y +else begin if not is_char_node(tail) then + if (type(tail)=hlist_node)or(type(tail)=vlist_node) then + @<Remove the last box, unless it's part of a discretionary@>; + end; +@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 + |