summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luatex.ch
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luatex.ch')
-rw-r--r--Build/source/texk/web2c/luatexdir/luatex.ch516
1 files changed, 41 insertions, 475 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luatex.ch b/Build/source/texk/web2c/luatexdir/luatex.ch
index 0ae368beb80..5361f6550ca 100644
--- a/Build/source/texk/web2c/luatexdir/luatex.ch
+++ b/Build/source/texk/web2c/luatexdir/luatex.ch
@@ -1,3 +1,24 @@
+% luatex.ch
+%
+% Copyright 2006-2008 Taco Hoekwater <taco@luatex.org>
+%
+% This file is part of LuaTeX.
+%
+% LuaTeX is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free
+% Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% LuaTeX is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+% FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+% License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
+%
+% $Id$
+%
@x
\def\?##1]{\hbox to 1in{\hfil##1.\ }}
}
@@ -8,11 +29,11 @@
@z
@x
-@d banner==luaTeX_banner
+@d banner==LuaTeX_banner
@y
-@d luaTeXk_banner=='This is luaTeXk, Version ',luatex_version_string
+@d luaTeXk_banner=='This is LuaTeXk, Version ',luatex_version_string
@#
-@d banner==luaTeX_banner
+@d banner==LuaTeX_banner
@d banner_k==luaTeXk_banner
@z
@@ -20,6 +41,7 @@
Actually the heading shown here is not quite normal: The |program| line
does not mention any |output| file, because \ph\ would ask the \TeX\ user
to specify a file name if |output| were specified here.
+@:PASCAL H}{\ph@>
@^system dependencies@>
@y
@z
@@ -129,7 +151,7 @@ versions of the program.
{Larger values than 65536 cause the arrays consume much more memory.}
@<Constants...@>=
-@!hash_offset=514; {smallest index in hash array, i.e., |hash_base| }
+@!hash_offset=0; {smallest index in hash array, i.e., |hash_base| }
{Use |hash_offset=0| for compilers which cannot decrement pointers.}
@!engine_name='luatex'; {the name of this engine}
@#
@@ -185,20 +207,6 @@ versions of the program.
@z
@x
-@d font_base=0 {smallest internal font number; must not be less
- than |min_quarterword|}
-@d hash_size=2100 {maximum number of control sequences; it should be at most
- about |(fix_mem_max-fix_mem_min)/10|}
-@d hash_prime=1777 {a prime number equal to about 85\pct! of |hash_size|}
-@y
-@d font_base=0 {smallest internal font number; must not be less
- than |min_quarterword|}
-@d hash_size=65536 {maximum number of control sequences; it should be at most
- about |(mem_max-mem_min)/10|}
-@d hash_prime=55711 {a prime number equal to about 85\pct! of |hash_size|}
-@z
-
-@x
@d incr(#) == #:=#+1 {increase a variable by unity}
@d decr(#) == #:=#-1 {decrease a variable by unity}
@y
@@ -279,6 +287,7 @@ end;
@x
@ Files can be closed with the \ph\ routine `|close(f)|', which
+@:PASCAL H}{\ph@>
@^system dependencies@>
should be used when all input or output with respect to |f| has been completed.
This makes |f| available to be opened again, if desired; and if |f| was used for
@@ -391,21 +400,12 @@ tini@/
@!filelineerrorstylep:cinttype; {format messages as file:line:error}
@!haltonerrorp:cinttype; {stop at first error}
@!quoted_filename:boolean; {current filename is quoted}
-{Variables for source specials}
-@!srcspecialsp : boolean;{Whether |src_specials| are enabled at all}
-@!insertsrcspecialauto : boolean;
-@!insertsrcspecialeverypar : boolean;
-@!insertsrcspecialeveryparend : boolean;
-@!insertsrcspecialeverycr : boolean;
-@!insertsrcspecialeverymath : boolean;
-@!insertsrcspecialeveryhbox : boolean;
-@!insertsrcspecialeveryvbox : boolean;
-@!insertsrcspecialeverydisplay : boolean;
@z
@x
@ Here is how to open the terminal files
in \ph. The `\.{/I}' switch suppresses the first |get|.
+@:PASCAL H}{\ph@>
@^system dependencies@>
@d t_open_in==reset(term_in,'TTY:','/O/I') {open the terminal for text input}
@@ -420,6 +420,7 @@ any command line arguments the user has provided. It's defined in C.
@x
these operations can be specified in \ph:
+@:PASCAL H}{\ph@>
@^system dependencies@>
@d update_terminal == break(term_out) {empty the terminal output buffer}
@@ -574,47 +575,6 @@ end;
@z
@x
-line ready to be edited. But such an extension requires some system
-wizardry, so the present implementation simply types out the name of the
-file that should be
-edited and the relevant line number.
-@^system dependencies@>
-
-There is a secret `\.D' option available when the debugging routines haven't
-been commented~out.
-@^debugging@>
-@y
-line ready to be edited.
-We do this by calling the external procedure |calledit| with a pointer to
-the filename, its length, and the line number.
-However, here we just set up the variables that will be used as arguments,
-since we don't want to do the switch-to-editor until after TeX has closed
-its files.
-@^system dependencies@>
-
-There is a secret `\.D' option available when the debugging routines haven't
-been commented~out.
-@^debugging@>
-@d edit_file==input_stack[base_ptr]
-@z
-
-@x
-"E": if base_ptr>0 then
- begin print_nl("You want to edit file ");
-@.You want to edit file x@>
- slow_print(input_stack[base_ptr].name_field);
- print(" at line "); print_int(line);
- interaction:=scroll_mode; jump_out;
-@y
-"E": if base_ptr>0 then
- begin edit_name_start:=str_start_macro(edit_file.name_field);
- edit_name_length:=str_start_macro(edit_file.name_field+1) -
- str_start_macro(edit_file.name_field);
- edit_line:=line;
- jump_out;
-@z
-
-@x
|remainder|, holds the remainder after a division.
@<Glob...@>=
@@ -687,18 +647,6 @@ So they have been simplified here in the obvious way.
@z
@x
- if abs(vmem(p+glue_offset).int)<@'4000000 then print("?.?")
- else if abs(g)>float_constant(20000) then
-@y
- { The Unix |pc| folks removed this restriction with a remark that
- invalid bit patterns were vanishingly improbable, so we follow
- their example without really understanding it.
- |if abs(vmem(p+glue_offset).int)<@'4000000 then print('?.?')|
- |else| }
- if fabs(g)>float_constant(20000) then
-@z
-
-@x
begin if m>0 then
case m div (max_command+1) of
0:print("vertical");
@@ -751,10 +699,8 @@ end;
@z
@x
-local_par:=null; local_par_bool:=false;
@<Start a new current page@>;
@y
-local_par:=null; local_par_bool:=false;
@/{The following piece of code is a copy of module 991:}
page_contents:=empty; page_tail:=page_head; {|link(page_head):=null;|}@/
last_glue:=max_halfword; last_penalty:=0; last_kern:=0;
@@ -771,20 +717,10 @@ page_depth:=0; page_max_depth:=0;
@z
@x
-@d frozen_null_font=frozen_control_sequence+12
- {permanent `\.{\\nullfont}'}
-@y
-@d frozen_special=frozen_control_sequence+12
- {permanent `\.{\\special}'}
-@d frozen_null_font=frozen_control_sequence+13
- {permanent `\.{\\nullfont}'}
-@z
-
-@x
-for k:=active_base to undefined_control_sequence-1 do
+for k:=null_cs to undefined_control_sequence-1 do
eqtb[k]:=eqtb[undefined_control_sequence];
@y
-for k:=active_base to eqtb_top do
+for k:=null_cs to eqtb_top do
eqtb[k]:=eqtb[undefined_control_sequence];
@z
@@ -823,7 +759,7 @@ else if (n<glue_base) or ((n>eqtb_size)and(n<=eqtb_top)) then
@z
@x
-@!eqtb:array[active_base..eqtb_size] of memory_word;
+@!eqtb:array[null_cs..eqtb_size] of memory_word;
@y
@!zeqtb:^memory_word;
@z
@@ -856,32 +792,6 @@ hash_high:=0;
@z
@x
-@ @<Insert a new control...@>=
-begin if text(p)>0 then
- begin repeat if hash_is_full then overflow("hash size",hash_size);
-@:TeX capacity exceeded hash size}{\quad hash size@>
- decr(hash_used);
- until text(hash_used)=0; {search for an empty location in |hash|}
- next(p):=hash_used; p:=hash_used;
- end;
-@y
-@ @<Insert a new control...@>=
-begin if text(p)>0 then
- begin if hash_high<hash_extra then
- begin incr(hash_high);
- next(p):=hash_high+eqtb_size; p:=hash_high+eqtb_size;
- end
- else begin
- repeat if hash_is_full then overflow("hash size",hash_size+hash_extra);
-@:TeX capacity exceeded hash size}{\quad hash size@>
- decr(hash_used);
- until text(hash_used)=0; {search for an empty location in |hash|}
- next(p):=hash_used; p:=hash_used;
- end;
- end;
-@z
-
-@x
else if p>=undefined_control_sequence then print_esc("IMPOSSIBLE.")
@y
else if ((p>=undefined_control_sequence)and(p<=eqtb_size))or(p>eqtb_top) then
@@ -1026,203 +936,6 @@ In C, the default paths are specified separately.
@z
@x
-begin area_delimiter:=0; ext_delimiter:=0;
-@y
-begin area_delimiter:=0; ext_delimiter:=0; quoted_filename:=false;
-@z
-
-@x
-begin if c=" " then more_name:=false
-@y
-begin if (c=" ") and stop_at_space and (not quoted_filename) then
- more_name:=false
-else if c="""" then begin
- quoted_filename:=not quoted_filename;
- more_name:=true;
- end
-@z
-
-@x
- if (c=">")or(c=":") then
-@y
- if ISDIRSEP(c) then
-@z
-
-@x
- else if (c=".")and(ext_delimiter=0) then ext_delimiter:=cur_length;
-@y
- else if c="." then ext_delimiter:=cur_length;
-@z
-
-@x
-@ The third.
-@^system dependencies@>
-
-@p procedure end_name;
-@y
-@ The third.
-@^system dependencies@>
-If a string is already in the string pool, the function
-|slow_make_string| does not create a new string but returns this string
-number, thus saving string space. Because of this new property of the
-returned string number it is not possible to apply |flush_string| to
-these strings.
-
-@p procedure end_name;
-var temp_str: str_number; {result of file name cache lookups}
-@!j,@!s,@!t: pool_pointer; {running indices}
-@!must_quote:boolean; {whether we need to quote a string}
-@z
-
-@x
-@:TeX capacity exceeded number of strings}{\quad number of strings@>
-@y
-@:TeX capacity exceeded number of strings}{\quad number of strings@>
-str_room(6); {Room for quotes, if needed.}
-{add quotes if needed}
-if area_delimiter<>0 then begin
- {maybe quote |cur_area|}
- must_quote:=false;
- s:=str_start_macro(str_ptr);
- t:=str_start_macro(str_ptr)+area_delimiter;
- j:=s;
- while (not must_quote) and (j<t) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
- if must_quote then begin
- for j:=pool_ptr-1 downto t do str_pool[j+2]:=str_pool[j];
- str_pool[t+1]:="""";
- for j:=t-1 downto s do str_pool[j+1]:=str_pool[j];
- str_pool[s]:="""";
- if ext_delimiter<>0 then ext_delimiter:=ext_delimiter+2;
- area_delimiter:=area_delimiter+2;
- pool_ptr:=pool_ptr+2;
- end;
- end;
-{maybe quote |cur_name|}
-s:=str_start_macro(str_ptr)+area_delimiter;
-if ext_delimiter=0 then t:=pool_ptr else t:=str_start_macro(str_ptr)+ext_delimiter-1;
-must_quote:=false;
-j:=s;
-while (not must_quote) and (j<t) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
-if must_quote then begin
- for j:=pool_ptr-1 downto t do str_pool[j+2]:=str_pool[j];
- str_pool[t+1]:="""";
- for j:=t-1 downto s do str_pool[j+1]:=str_pool[j];
- str_pool[s]:="""";
- if ext_delimiter<>0 then ext_delimiter:=ext_delimiter+2;
- pool_ptr:=pool_ptr+2;
- end;
-if ext_delimiter<>0 then begin
- {maybe quote |cur_ext|}
- s:=str_start_macro(str_ptr)+ext_delimiter-1;
- t:=pool_ptr;
- must_quote:=false;
- j:=s;
- while (not must_quote) and (j<t) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
- if must_quote then begin
- str_pool[t+1]:="""";
- for j:=t-1 downto s do str_pool[j+1]:=str_pool[j];
- str_pool[s]:="""";
- pool_ptr:=pool_ptr+2;
- end;
- end;
-@z
-
-@x
- str_start_macro(str_ptr+1):=str_start_macro(str_ptr)+area_delimiter; incr(str_ptr);
- end;
-if ext_delimiter=0 then
- begin cur_ext:=""; cur_name:=make_string;
-@y
- str_start_macro(str_ptr+1):=str_start_macro(str_ptr)+area_delimiter; incr(str_ptr);
- temp_str:=search_string(cur_area);
- if temp_str>0 then
- begin cur_area:=temp_str;
- decr(str_ptr); {no |flush_string|, |pool_ptr| will be wrong!}
- for j:=str_start_macro(str_ptr+1) to pool_ptr-1 do
- begin str_pool[j-area_delimiter]:=str_pool[j];
- end;
- pool_ptr:=pool_ptr-area_delimiter; {update |pool_ptr|}
- end;
- end;
-if ext_delimiter=0 then
- begin cur_ext:=""; cur_name:=slow_make_string;
-@z
-
-@x
-else begin cur_name:=str_ptr;
- str_start_macro(str_ptr+1):=str_start_macro(str_ptr)+ext_delimiter-area_delimiter-1;
- incr(str_ptr); cur_ext:=make_string;
-@y
-else begin cur_name:=str_ptr;
- str_start_macro(str_ptr+1):=str_start_macro(str_ptr)+ext_delimiter-area_delimiter-1;
- incr(str_ptr); cur_ext:=make_string;
- decr(str_ptr); {undo extension string to look at name part}
- temp_str:=search_string(cur_name);
- if temp_str>0 then
- begin cur_name:=temp_str;
- decr(str_ptr); {no |flush_string|, |pool_ptr| will be wrong!}
- for j:=str_start_macro(str_ptr+1) to pool_ptr-1 do
- begin str_pool[j-ext_delimiter+area_delimiter+1]:=str_pool[j];
- end;
- pool_ptr:=pool_ptr-ext_delimiter+area_delimiter+1; {update |pool_ptr|}
- end;
- cur_ext:=slow_make_string; {remake extension string}
-@z
-
-@x
-begin slow_print(a); slow_print(n); slow_print(e);
-@y
-var must_quote: boolean; {whether to quote the filename}
-@!j:pool_pointer; {index into |str_pool|}
-begin
-must_quote:=false;
-if a<>0 then begin
- j:=str_start_macro(a);
- while (not must_quote) and (j<str_start_macro(a+1)) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
-end;
-if n<>0 then begin
- j:=str_start_macro(n);
- while (not must_quote) and (j<str_start_macro(n+1)) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
-end;
-if e<>0 then begin
- j:=str_start_macro(e);
- while (not must_quote) and (j<str_start_macro(e+1)) do begin
- must_quote:=str_pool[j]=" "; incr(j);
- end;
-end;
-{FIXME: Alternative is to assume that any filename that has to be quoted has
- at least one quoted component...if we pick this, a number of insertions
- of |print_file_name| should go away.
-|must_quote|:=((|a|<>0)and(|str_pool|[|str_start|[|a|]]=""""))or
- ((|n|<>0)and(|str_pool|[|str_start|[|n|]]=""""))or
- ((|e|<>0)and(|str_pool|[|str_start|[|e|]]=""""));}
-if must_quote then print_char("""");
-if a<>0 then
- for j:=str_start_macro(a) to str_start_macro(a+1)-1 do
- if so(str_pool[j])<>"""" then
- print(so(str_pool[j]));
-if n<>0 then
- for j:=str_start_macro(n) to str_start_macro(n+1)-1 do
- if so(str_pool[j])<>"""" then
- print(so(str_pool[j]));
-if e<>0 then
- for j:=str_start_macro(e) to str_start_macro(e+1)-1 do
- if so(str_pool[j])<>"""" then
- print(so(str_pool[j]));
-if must_quote then print_char("""");
-@z
-
-@x
@d append_to_name(#)==begin c:=#; incr(k);
if k<=file_name_size then nameoffile[k]:=xchr[c];
end
@@ -1319,78 +1032,6 @@ nameoffile[namelength+1]:=0;
@z
@x
-@p function make_name_string:str_number;
-var k:1..file_name_size; {index into |nameoffile|}
-begin if (pool_ptr+namelength>pool_size)or(str_ptr=max_strings)or
- (cur_length>0) then
- make_name_string:="?"
-else begin for k:=1 to namelength do append_char(nameoffile[k]);
- make_name_string:=make_string;
- end;
-@y
-@p function make_name_string:str_number;
-var k:1..file_name_size; {index into |nameoffile|}
-save_area_delimiter, save_ext_delimiter: pool_pointer;
-save_name_in_progress, save_stop_at_space: boolean;
-begin if (pool_ptr+namelength>pool_size)or(str_ptr=max_strings)or
- (cur_length>0) then
- make_name_string:="?"
-else begin for k:=1 to namelength do append_char(nameoffile[k]);
- make_name_string:=make_string;
- {At this point we also set |cur_name|, |cur_ext|, and |cur_area| to
- match the contents of |nameoffile|.}
- save_area_delimiter:=area_delimiter;
- save_ext_delimiter:=ext_delimiter;
- save_name_in_progress:=name_in_progress;
- save_stop_at_space:=stop_at_space;
- name_in_progress:=true;
- begin_name;
- stop_at_space:=false;
- k:=1;
- while (k<=namelength)and(more_name(nameoffile[k])) do
- incr(k);
- stop_at_space:=save_stop_at_space;
- end_name;
- name_in_progress:=save_name_in_progress;
- area_delimiter:=save_area_delimiter;
- ext_delimiter:=save_ext_delimiter;
- end;
-@z
-
-@x
- if not more_name(cur_chr) then goto done;
-@y
- {If |cur_chr| is a space and we're not scanning a token list, check
- whether we're at the end of the buffer. Otherwise we end up adding
- spurious spaces to file names in some cases.}
- if (cur_chr=" ") and (state<>token_list) and (loc>limit) then goto done;
- if not more_name(cur_chr) then goto done;
-@z
-
-@x
-var k:0..buf_size; {index into |buffer|}
-@y
-var k:0..buf_size; {index into |buffer|}
-@!saved_cur_name:str_number; {to catch empty terminal input}
-@z
-
-@x
-if e=".tex" then show_context;
-@y
-if (e=".tex") or (e="") then show_context;
-@z
-
-@x
-clear_terminal; prompt_input(": "); @<Scan file name in the buffer@>;
-if cur_ext="" then cur_ext:=e;
-@y
-saved_cur_name:=cur_name;
-clear_terminal; prompt_input(": "); @<Scan file name in the buffer@>;
-if cur_ext="" then cur_ext:=e;
-if length(cur_name)=0 then cur_name:=saved_cur_name;
-@z
-
-@x
@d ensure_dvi_open==if output_file_name=0 then
@y
@d log_name == texmf_log_name
@@ -1409,14 +1050,14 @@ if job_name=0 then job_name:="texput";
@y
if job_name=0 then job_name:=getjobname("texput");
@.texput@>
-pack_job_name(".fls");
+pack_job_name('.fls');
recorder_change_filename(stringcast(nameoffile+1));
@z
@x
begin wlog(banner);
@y
-begin if srcspecialsp or filelineerrorstylep or parsefirstlinep
+begin if filelineerrorstylep or parsefirstlinep
then
wlog(banner_k)
else
@@ -1447,10 +1088,6 @@ if shellenabledp then begin
end;
wlog('\write18 enabled.')
end;
-if srcspecialsp then begin
- wlog_cr;
- wlog(' Source specials enabled.')
- end;
if filelineerrorstylep then begin
wlog_cr;
wlog(' file:line:error style messages enabled.')
@@ -1463,9 +1100,9 @@ end
@z
@x
- prompt_file_name("input file name",".tex");
+ prompt_file_name('input file name','.tex');
@y
- prompt_file_name("input file name","");
+ prompt_file_name('input file name','');
@z
@x
@@ -1613,9 +1250,6 @@ endifn ('IPC')
continue: adjust_space_factor;@/
@y
@<Append character |cur_chr|...@>=
-if ((head=tail) and (mode>0)) then begin
- if (insertsrcspecialauto) then append_src_special;
-end;
continue: adjust_space_factor;@/
@z
@@ -1635,7 +1269,6 @@ if indented then begin
p:=new_null_box; box_dir(p):=par_direction;
width(p):=par_indent;@+
tail_append(p);
- if (insertsrcspecialeverypar) then insert_src_special;@+
@z
@x
@@ -1657,20 +1290,6 @@ end;
@z
@x
-if every_math<>null then begin_token_list(every_math,every_math_text);
-@y
-if (insertsrcspecialeverymath) then insert_src_special;
-if every_math<>null then begin_token_list(every_math,every_math_text);
-@z
-
-@x
- if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text);
-@y
- if (insertsrcspecialeveryvbox) then insert_src_special;
- if every_vbox<>null then begin_token_list(every_vbox,every_vbox_text);
-@z
-
-@x
if (cur_cs=0)or(cur_cs>frozen_control_sequence) then
@y
if (cur_cs=0)or(cur_cs>eqtb_top)or
@@ -1678,11 +1297,6 @@ if (cur_cs=0)or(cur_cs>eqtb_top)or
@z
@x
-@!flushable_string:str_number; {string not yet referenced}
-@y
-@z
-
-@x
interaction:=cur_chr;
@y
interaction:=cur_chr;
@@ -1774,7 +1388,7 @@ if x<>@$ then goto bad_fmt; {check that strings are the same}
@y
@+Init
libcfree(str_pool); libcfree(str_start);
-libcfree(yhash); libcfree(zeqtb); libcfree(fixmem); libcfree(varmem);
+libcfree(yhash); libcfree(zeqtb); libcfree(fixmem); libcfree(varmemcast(varmem));
@+Tini
undump_int(x);
format_debug('format magic number')(x);
@@ -2065,8 +1679,8 @@ print(" (format="); print(job_name); print_char(" ");
@d setup_bound_var(#)==bound_default:=#; setup_bound_var_end
@d setup_bound_var_end(#)==bound_name:=#; setup_bound_var_end_end
@d setup_bound_var_end_end(#)==if luainit>0 then begin
- get_lua_number('texconfig',bound_name,addressof(#));
- if #=0 then #:=bound_default;
+ get_lua_number('texconfig',bound_name,addressof(#));
+ if #=0 then #:=bound_default;
end
else
setupboundvariable(addressof(#), bound_name, bound_default);
@@ -2201,7 +1815,7 @@ end {|main_body|};
@x
wterm(banner);
@y
- if srcspecialsp or filelineerrorstylep or parsefirstlinep then
+ if filelineerrorstylep or parsefirstlinep then
wterm(banner_k)
else
wterm(banner);
@@ -2222,9 +1836,6 @@ end {|main_body|};
end;
wterm_ln('\write18 enabled.');
end;
- if srcspecialsp then begin
- wterm_ln(' Source specials enabled.')
- end;
if filelineerrorstylep then begin
wterm_ln(' file:line:error style messages enabled.')
end;
@@ -2301,13 +1912,6 @@ tini@/
@z
@x
-primitive("special",extension,special_node);@/
-@y
-primitive("special",extension,special_node);@/
-text(frozen_special):="special"; eqtb[frozen_special]:=eqtb[cur_val];@/
-@z
-
-@x
else if cur_val>15 then cur_val:=16;
@y
else if (cur_val>15) and (cur_val <> 18) then cur_val:=16;
@@ -2350,7 +1954,7 @@ if j=18 then
str_room(1); append_char(0); {Append a null byte to the expansion.}
clobbered:=false;
for d:=0 to cur_length-1 do {Convert to external character set.}
- begin
+ begin
str_pool[str_start_macro(str_ptr)+d]:=xchr[str_pool[str_start_macro(str_ptr)+d]];
if (str_pool[str_start_macro(str_ptr)+d]=null_code)
and (d<cur_length-1) then clobbered:=true;
@@ -2589,44 +2193,6 @@ exit:end;
@* \[55] Index.
@y
-@ @<Declare action procedures for use by |main_control|@>=
-
-procedure insert_src_special;
-var toklist, p, q,r : pointer;
-begin
- if (source_filename_stack[in_open] > 0 and isnewsource (source_filename_stack[in_open]
-, line)) then begin
- toklist := get_avail;
- p := toklist;
- info(p) := cs_token_flag+frozen_special;
- r := get_avail; link(p):=r; p := link(p);
- info(p) := left_brace_token+"{";
- q := str_toks (makesrcspecial (source_filename_stack[in_open], line));
- link(p) := link(temp_token_head);
- p := q;
- r := get_avail; link(p):=r; p := link(p);
- info(p) := right_brace_token+"}";
- ins_list (toklist);
- remembersourceinfo (source_filename_stack[in_open], line);
- end;
-end;
-
-procedure append_src_special;
-var q : pointer;
-begin
- if (source_filename_stack[in_open] > 0 and isnewsource (source_filename_stack[in_open]
-, line)) then begin
- new_whatsit (special_node);
- write_stream(tail) := 0;
- q:=get_avail; def_ref := q;
- token_ref_count(def_ref) := null;
- q := str_toks (makesrcspecial (source_filename_stack[in_open], line));
- link(def_ref) := link(temp_head);
- write_tokens(tail) := def_ref;
- remembersourceinfo (source_filename_stack[in_open], line);
- end;
-end;
-
@ This function used to be in pdftex, but is useful in tex too.
@p function get_nullstr: str_number;