diff options
author | Karl Berry <karl@freefriends.org> | 2008-03-23 22:49:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-03-23 22:49:18 +0000 |
commit | 4ccbae5687ca633f7d544b40f038b7b0e63a1281 (patch) | |
tree | 31d1e8673baa9a5f03bf92f5655698f531103068 | |
parent | 6abf81abe48c7404b5d1d172c62886ea9fb212e8 (diff) |
update omega and aleph to 3.1415926, and compile pool files into binaries; from Akira
git-svn-id: svn://tug.org/texlive/trunk@7106 c570f23f-e606-0410-a88d-b1316a301751
25 files changed, 404 insertions, 124 deletions
diff --git a/Build/source/texk/web2c/alephdir/ChangeLog b/Build/source/texk/web2c/alephdir/ChangeLog index 0c110cfd50f..f6ba3e512f3 100644 --- a/Build/source/texk/web2c/alephdir/ChangeLog +++ b/Build/source/texk/web2c/alephdir/ChangeLog @@ -1,4 +1,10 @@ +2008-03-23 Karl Berry <karl@freefriends.org> + + * Update to TeX 3.1415926; compile in pool files. + From Akira. + 2006-05-25 Roozbeh Pournader <roozbeh@farsiweb.info> + * omfilter.ch: fixed a bug in OCP processing, increased active_mem_size from 2000 to 50000. diff --git a/Build/source/texk/web2c/alephdir/aleph-pool.h b/Build/source/texk/web2c/alephdir/aleph-pool.h new file mode 100644 index 00000000000..950a14d7b89 --- /dev/null +++ b/Build/source/texk/web2c/alephdir/aleph-pool.h @@ -0,0 +1,9 @@ +#ifndef ALEPH_POOL_H +#define ALEPH_POOL_H +typedef int integer; +typedef integer strnumber; +typedef unsigned short packedASCIIcode; +typedef integer poolpointer; +extern packedASCIIcode * strpool; +extern poolpointer poolptr; +#endif diff --git a/Build/source/texk/web2c/alephdir/aleph.defines b/Build/source/texk/web2c/alephdir/aleph.defines index 4da5858021c..dc9628e7ab9 100644 --- a/Build/source/texk/web2c/alephdir/aleph.defines +++ b/Build/source/texk/web2c/alephdir/aleph.defines @@ -4,7 +4,7 @@ This file is part of Aleph, which is based on the web2c distribution of TeX, Copyright (C) 1994--2000 John Plaice and Yannis Haralambous -Copyright (C) 2002--2004 the Aleph task force +Copyright (C) 2002--2004, 2008 the Aleph task force Aleph is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ along with Aleph; if not, write to the Free Software Foundation, Inc., } +@define function loadpoolstrings(); @define function newinputln (); @define function getfilemode (); @define function newinputline (); diff --git a/Build/source/texk/web2c/alephdir/aleph.mk b/Build/source/texk/web2c/alephdir/aleph.mk index b519e4b000b..386bb478e9e 100644 --- a/Build/source/texk/web2c/alephdir/aleph.mk +++ b/Build/source/texk/web2c/alephdir/aleph.mk @@ -17,7 +17,7 @@ alephbuild=rc2 aleph_c = alephini.c aleph0.c aleph1.c aleph2.c aleph3.c aleph_o = alephini.o aleph0.o aleph1.o aleph2.o \ alephextra.o aleph.o alephbis.o \ - aleph3.o + aleph3.o aleph-pool.o # Linking aleph: $(aleph_o) @@ -121,6 +121,14 @@ aleph.ch: $(calephdir)/ceostuff.ch $(srcdir)/$(calephdir)/comdir.ch \ $(srcdir)/$(calephdir)/comsrcspec.ch \ $(srcdir)/$(calephdir)/ceostuff.ch + +aleph-pool.c: aleph.pool alephdir/makecpool + alephdir/makecpool aleph.pool alephdir/aleph-pool.h >aleph-pool.c +alephdir/makecpool: alephdir/makecpool.o + $(CC) $(CFLAGS) -o $@ alephdir/makecpool.o +alephdir/makecpool.o: $(srcdir)/alephdir/makecpool.c + $(CC) $(CFLAGS) -c -o $@ $(srcdir)/alephdir/makecpool.c + # Check: right now all we do is build the format. check: @ALEPH@ aleph-check aleph-check: aleph aleph.fmt diff --git a/Build/source/texk/web2c/alephdir/alephextra-rc2.h b/Build/source/texk/web2c/alephdir/alephextra-rc2.h index ad0139ac263..9303d5d3a73 100644 --- a/Build/source/texk/web2c/alephdir/alephextra-rc2.h +++ b/Build/source/texk/web2c/alephdir/alephextra-rc2.h @@ -23,7 +23,7 @@ along with Aleph; if not, write to the Free Software Foundation, Inc., */ -#define BANNER "This is Aleph, Version 3.141592-1.15-2.1-rc4" +#define BANNER "This is Aleph, Version 3.1415926-1.15-2.1-rc4" #define COPYRIGHT_HOLDER "the Aleph task force" #define AUTHOR NULL #define PROGRAM_HELP ALEPHHELP diff --git a/Build/source/texk/web2c/alephdir/com16bit-rc2.ch b/Build/source/texk/web2c/alephdir/com16bit-rc2.ch index 223f72ffc7c..2b5c63d0923 100644 --- a/Build/source/texk/web2c/alephdir/com16bit-rc2.ch +++ b/Build/source/texk/web2c/alephdir/com16bit-rc2.ch @@ -40,16 +40,17 @@ @z @x -@d banner=='This is Aleph, Version 3.141592-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} +@d banner=='This is Aleph, Version 3.1415926-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} @y -@d banner=='This is Aleph, Version 3.141592-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} -@d banner_k=='This is Alephk, Version 3.141592-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} +@d banner=='This is Aleph, Version 3.1415926-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} +@d banner_k=='This is Alephk, Version 3.1415926-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} @z @x [1.4] l.233 - program header Actually the heading shown here is not quite normal: The |program| line does not mention any |output| file, because \ph\ would ask the \TeX\ user to specify a file name if |output| were specified here. +@:PASCAL H}{\ph@> @^system dependencies@> @y @z @@ -138,7 +139,7 @@ if ini_version then @y @d file_name_size == maxint @d ssup_error_line = 255 -@d ssup_max_strings ==200000 +@d ssup_max_strings == 2097151 {Larger values may be used, but then the arrays consume much more memory.} @d ssup_trie_opcode == 65535 @d ssup_trie_size == @"3FFFFF @@ -188,7 +189,7 @@ if ini_version then @!engine_name=TEXMF_ENGINE_NAME; {the name of this engine} @# @!inf_main_memory = 2000000; -@!sup_main_memory = 32000000; +@!sup_main_memory = 256000000; @!inf_trie_size = 80000; @!sup_trie_size = ssup_trie_size; @@ -345,6 +346,7 @@ end; @x [3.28] l.850 - Do file closing in C. @ Files can be closed with the \ph\ routine `|close(f)|', which +@:PASCAL H}{\ph@> @^system dependencies@> should be used when all input or output with respect to |f| has been completed. This makes |f| available to be opened again, if desired; and if |f| was used for @@ -468,6 +470,7 @@ tini@/ @x [3.33] l.964 - We don't need to open terminal files. @ Here is how to open the terminal files in \ph. The `\.{/I}' switch suppresses the first |get|. +@:PASCAL H}{\ph@> @^system dependencies@> @d t_open_in==reset(term_in,'TTY:','/O/I') {open the terminal for text input} @@ -482,6 +485,7 @@ any command line arguments the user has provided. It's defined in C. @x [3.34] l.982 - Flushing output to terminal files. these operations can be specified in \ph: +@:PASCAL H}{\ph@> @^system dependencies@> @d update_terminal == break(term_out) {empty the terminal output buffer} @@ -574,49 +578,74 @@ if last > first then @!init function get_strings_started:boolean; {initializes the string pool, @z -% [4.51] Open the pool file using a path, and can't do string -% assignments directly. (`strcpy' and `strlen' work here because -% `pool_name' is a constant string, and thus ends in a null and doesn't -% start with a space.) -@x [4.51] l.1314 - Open the pool file. +@x +@ @d bad_pool(#)==begin wake_up_terminal; write_ln(term_out,#); + a_close(pool_file); get_strings_started:=false; return; + end +@<Read the other strings...@>= name_of_file:=pool_name; {we needn't set |name_length|} if a_open_in(pool_file) then -@y -name_length := strlen (pool_name); -name_of_file := xmalloc_array (char, name_length + 1); -strcpy (name_of_file+1, pool_name); {copy the string} -if a_open_in (pool_file, kpse_texpool_format) then -@z - -@x [4.51] l.1322 - Make `OMEGA.POOL' lowercase, and change how it's read. + begin c:=false; + repeat @<Read one string, but return |false| if the + string memory space is getting too tight for comfort@>; + until c; + a_close(pool_file); get_strings_started:=true; + end else bad_pool('! I can''t read ALEPH.POOL.') -@y -else bad_pool('! I can''t read ', pool_name, '; bad path?') -@z -@x [4.52] l.1326 - Make `OMEGA.POOL' lowercase, and change how it's read. +@.I can't read ALEPH.POOL@> + +@ @<Read one string...@>= begin if eof(pool_file) then bad_pool('! ALEPH.POOL has no check sum.'); @.ALEPH.POOL has no check sum@> read(pool_file,m,n); {read two digits of string length} -@y -begin if eof(pool_file) then bad_pool('! ', pool_name, ' has no check sum.'); -@.ALEPH.POOL has no check sum@> -read(pool_file,m); read(pool_file,n); {read two digits of string length} -@z -@x [4.52] l.1332 - Make `ALEPH.POOL' lowercase, and change how it's read. +if m='*' then @<Check the pool check sum@> +else begin if (m<"0")or(m>"9")or@| + (n<"0")or(n>"9") then bad_pool('! ALEPH.POOL line doesn''t begin with two digits.'); -@y - bad_pool('! ', pool_name, ' line doesn''t begin with two digits.'); -@z -@x [4.53] l.1354 - Make `ALEPH.POOL' lowercase, and change how it's read. +@.ALEPH.POOL line doesn't...@> + l:=m*10+n-"0"*11; {compute the length} + if pool_ptr+l+string_vacancies>pool_size then + bad_pool('! You have to increase POOLSIZE.'); +@.You have to increase POOLSIZE@> + for k:=1 to l do + begin if eoln(pool_file) then m:=' '@+else read(pool_file,m); + append_char(m); + end; + read_ln(pool_file); g:=make_string; + end; +end + +@ The \.{WEB} operation \.{@@\$} denotes the value that should be at the +end of this \.{OMEGA.POOL} file; any other value means that the wrong pool +file has been loaded. +@^check sum@> + +@<Check the pool check sum@>= +begin a:=0; k:=1; +loop@+ begin if (n<"0")or(n>"9") then bad_pool('! ALEPH.POOL check sum doesn''t have nine digits.'); -@y - bad_pool('! ', pool_name, ' check sum doesn''t have nine digits.'); -@z -@x [4.53] l.1360 - Make `OMEGA.POOL' lowercase, and change how it's read. +@.ALEPH.POOL check sum...@> + a:=10*a+n-"0"; + if k=9 then goto done; + incr(k); read(pool_file,n); + end; done: if a<>@$ then bad_pool('! ALEPH.POOL doesn''t match; OTANGLE me again.'); -@y -done: if a<>@$ then - bad_pool('! ', pool_name, ' doesn''t match; otangle me again (or fix the path).'); +@.ALEPH.POOL doesn't match@> +c:=true; +end +@y +@ @<Read the other strings...@>= + g := loadpoolstrings((pool_size-string_vacancies)); + if g=0 then begin + wake_up_terminal; write_ln(term_out,'! You have to increase POOLSIZE.'); + get_strings_started:=false; + return; + end; + get_strings_started:=true; + +@ Empty module + +@ Empty module @z @x [5.54] l.1422 - error_line @@ -1316,22 +1345,39 @@ name_of_file[name_length+1]:=0; @z @x [29.525] l.10163 - make_name_string +@p function make_name_string:str_number; +var k:1..file_name_size; {index into |name_of_file|} +begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or + (cur_length>0) then + make_name_string:="?" +else begin for k:=1 to name_length do append_char(name_of_file[k]); make_name_string:=make_string; end; @y +@p function make_name_string:str_number; +var k:1..file_name_size; {index into |name_of_file|} +save_area_delimiter, save_ext_delimiter: pool_pointer; +save_name_in_progress, save_stop_at_space: boolean; +begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or + (cur_length>0) then + make_name_string:="?" +else begin for k:=1 to name_length do append_char(name_of_file[k]); make_name_string:=make_string; - end; {At this point we also set |cur_name|, |cur_ext|, and |cur_area| to match the contents of |name_of_file|.} - k:=1; + save_area_delimiter:=area_delimiter; save_ext_delimiter:=ext_delimiter; + save_name_in_progress:=name_in_progress; save_stop_at_space:=stop_at_space; name_in_progress:=true; begin_name; stop_at_space:=false; + k:=1; while (k<=name_length)and(more_name(name_of_file[k])) do incr(k); - stop_at_space:=true; + stop_at_space:=save_stop_at_space; end_name; - name_in_progress:=false; + name_in_progress:=save_name_in_progress; + area_delimiter:=save_area_delimiter; ext_delimiter:=save_ext_delimiter; + end; @z @x [29.526] l.10194 - stop scanning file name if we're at end-of-line. @@ -1646,7 +1692,7 @@ arrays start at |0|. %%%%%%%% dynamic hyph_size @x 18137 m.926 @!hyph_word:array[hyph_pointer] of str_number; {exception words} -@!hyph_list:array[hyph_pointer] of pointer; {list of hyphen positions} +@!hyph_list:array[hyph_pointer] of pointer; {lists of hyphen positions} @!hyph_count:hyph_pointer; {the number of words in the exception dictionary} @y 18139 @!hyph_word: ^str_number; {exception words} @@ -2455,6 +2501,7 @@ if (edit_name_start<>0) and (interaction>batch_mode) then if sa_mark<>null then if do_marks(destroy_marks,0,sa_mark) then sa_mark:=null; for c:=last_box_code to vsplit_code do flush_node_list(disc_ptr[c]); + if last_glue<>max_halfword then delete_glue_ref(last_glue); store_fmt_file; return;@+tini@/ @y begin @!init if ini_version then diff --git a/Build/source/texk/web2c/alephdir/eobase.ch b/Build/source/texk/web2c/alephdir/eobase.ch index 4f39aeca005..fcab72363dc 100644 --- a/Build/source/texk/web2c/alephdir/eobase.ch +++ b/Build/source/texk/web2c/alephdir/eobase.ch @@ -182,11 +182,11 @@ to be known as `\Aleph'. @z %--------------------------------------- @x [1] m.2 l.187 - e-TeX basic -@d banner=='This is Omega, Version 3.141592--1.15' {printed when \TeX\ starts} +@d banner=='This is Omega, Version 3.1415926--1.15' {printed when \TeX\ starts} @y -@d banner=='This is Aleph, Version 3.141592--1.15--2.1' {printed when \TeX\ starts} +@d banner=='This is Aleph, Version 3.1415926--1.15--2.1' {printed when \TeX\ starts} @# -@d eTeX_version_string=='3.141592--1.15--2.1' {current \eTeX\ version} +@d eTeX_version_string=='3.1415926--1.15--2.1' {current \eTeX\ version} @d eTeX_version=2 { \.{\\eTeXversion} } @d eTeX_revision==".1" { \.{\\eTeXrevision} } @# @@ -1759,7 +1759,7 @@ The |nucleus| of such noads is @z %--------------------------------------- @x [34] m.696 l.13670 - e-TeX middle -right_noad: begin print_esc("right"); print_delimiter(nucleus(p)); +right_noad: begin print_esc("right"); print_delimiter(delimiter(p)); end; end; if subtype(p)<>normal then diff --git a/Build/source/texk/web2c/alephdir/eover-rc2.ch b/Build/source/texk/web2c/alephdir/eover-rc2.ch index 71209c78e83..ff70c7e3158 100644 --- a/Build/source/texk/web2c/alephdir/eover-rc2.ch +++ b/Build/source/texk/web2c/alephdir/eover-rc2.ch @@ -5,9 +5,9 @@ % * we add both \eTeX-like and \OMEGA-like % commands to display the version @x -@d banner=='This is Aleph, Version 3.141592--1.15--2.1' {printed when \TeX\ starts} +@d banner=='This is Aleph, Version 3.1415926--1.15--2.1' {printed when \TeX\ starts} @# -@d eTeX_version_string=='3.141592--1.15--2.1' {current \eTeX\ version} +@d eTeX_version_string=='3.1415926--1.15--2.1' {current \eTeX\ version} @d eTeX_version=2 { \.{\\eTeXversion} } @d eTeX_revision==".1" { \.{\\eTeXrevision} } @# @@ -30,7 +30,7 @@ @d Omega_revision==".15" { \.{\\Omegarevision} } @d Aleph_revision==".0" { \.{\\Alephrevision} } @# -@d banner=='This is Aleph, Version 3.141592-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} +@d banner=='This is Aleph, Version 3.1415926-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts} @d eTeX_banner==banner {printed when \eTeX\ starts} @z diff --git a/Build/source/texk/web2c/alephdir/makecpool.c b/Build/source/texk/web2c/alephdir/makecpool.c new file mode 100644 index 00000000000..4a928068208 --- /dev/null +++ b/Build/source/texk/web2c/alephdir/makecpool.c @@ -0,0 +1,67 @@ +/* Copyright 2007, 2008 Taco Hoekwater. + You may freely use, modify and/or distribute this file. */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) { + char *filename; + char *headername; + FILE *fh; + char data[1024]; + if (argc!=3) { + puts("Need exactly two arguments: pool_name and header_name"); + exit(1); + } + filename = argv[1]; + headername = argv[2]; + fh = fopen(filename,"r"); + printf( + "/* This file is auto-generated by makecpool */\n" + "\n" + "#include <stdio.h>\n" + "#include <string.h>\n" + "#include \"%s\"\n" + "\n" + "static char *poolfilearr[] = {\n",headername); + while (fgets(data,1024,fh)) { + int len = strlen(data); + int o = 0; /* skip first o characters*/ + int i; + if (data[len-1]=='\n') { /* chomp;*/ + data[len-1] = 0; + len--; + } + if (data[0]=='*') break; /* last if !^\*!; */ + if (data[0]>='0' && data[0]<='9' && data[1]>='0' && data[1]<='9') { + o=2; /* $data =~ s/^\d\d//; */ + } + printf(" \""); + for (i=o; i<len; i++) { + if (data[i]=='"' || data[i]=='\\') putchar('\\'); + if (data[i]=='?') printf("\" \""); /* suppress trigraphs */ + putchar(data[i]); + } /* $data =~ s/(["\\])/\\$1/g; */ + printf("\",\n"); + } + fclose(fh); + printf(" NULL };\n" + "int loadpoolstrings (integer spare_size) {\n" + " strnumber g=0;\n" + " int i=0,j=0;\n" + " char *s;\n" + " while ((s = poolfilearr[j++])) {\n" + " int l = strlen (s);\n" + " i += l;\n" + " if (i>=spare_size) return 0;\n" + " while (l-- > 0) strpool[poolptr++] = *s++;\n" + /* " while (l-- > 0) str_pool[pool_ptr++] = *s++;\n" */ + " g = makestring();\n" + /* " g = make_string();\n" */ + /* " strref[g]= 127;\n"*/ + " }\n" + " return g;\n" + "}\n"); + return 0; +} diff --git a/Build/source/texk/web2c/alephdir/om16bit.ch b/Build/source/texk/web2c/alephdir/om16bit.ch index 12d8b49d023..dad270fdb0a 100644 --- a/Build/source/texk/web2c/alephdir/om16bit.ch +++ b/Build/source/texk/web2c/alephdir/om16bit.ch @@ -74,9 +74,9 @@ author' in the documentation are to D. E. Knuth. @z %--------------------------------------- @x [1] m.2 l.187 - Omega -@d banner=='This is TeX, Version 3.141592' {printed when \TeX\ starts} +@d banner=='This is TeX, Version 3.1415926' {printed when \TeX\ starts} @y -@d banner=='This is Omega, Version 3.141592--1.15' {printed when \TeX\ starts} +@d banner=='This is Omega, Version 3.1415926--1.15' {printed when \TeX\ starts} @z %--------------------------------------- @x [1] m.4 l.243 @@ -1078,7 +1078,7 @@ procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); @z %--------------------------------------- @x [24] m.334 l.7110 - Omega -primitive("par",par_end,256); {cf. |scan_file_name|} +primitive("par",par_end,256); {cf.\ |scan_file_name|} @y primitive("par",par_end,too_big_char); {cf. |scan_file_name|} @z @@ -1195,7 +1195,6 @@ end; @!cur_val:integer; {value returned by numeric scanners} @y @!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; {delcodes are now 51 digits} @z %--------------------------------------- @x [26] m.413 l.8335 - Omega diff --git a/Build/source/texk/web2c/alephdir/omdir.ch b/Build/source/texk/web2c/alephdir/omdir.ch index b4afb7f68f6..d1977e420b4 100644 --- a/Build/source/texk/web2c/alephdir/omdir.ch +++ b/Build/source/texk/web2c/alephdir/omdir.ch @@ -300,7 +300,6 @@ set_new_eqtb_int(int_base+level_local_dir_code,level_one); @<Glob...@>= @!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; {delcodes are now 51 digits} @!cur_val_level:int_val..tok_val; {the ``level'' of this value} @y @d int_val=0 {integer values} diff --git a/Build/source/texk/web2c/alephdir/omfi.ch b/Build/source/texk/web2c/alephdir/omfi.ch index 3c61add97b7..9417b2a8dfd 100644 --- a/Build/source/texk/web2c/alephdir/omfi.ch +++ b/Build/source/texk/web2c/alephdir/omfi.ch @@ -142,7 +142,7 @@ macro makes such six-tuples convenient. @d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6) -@<Glo...@>= +@<Glob...@>= @!active_width:array[1..6] of scaled; {distance from first active node to~|cur_p|} @!cur_active_width:array[1..6] of scaled; {distance from current active node} diff --git a/Build/source/texk/web2c/alephdir/omfont.ch b/Build/source/texk/web2c/alephdir/omfont.ch index a176f346ccd..eb718688508 100644 --- a/Build/source/texk/web2c/alephdir/omfont.ch +++ b/Build/source/texk/web2c/alephdir/omfont.ch @@ -716,6 +716,7 @@ fget; read_sixteen(nk); fget; read_sixteen(ne); fget; read_sixteen(np); if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort; +if (nw=0)or(nh=0)or(nd=0)or(ni=0) then abort; end @y nco:=0; ncw:=0; npc:=0; @@ -1863,9 +1864,11 @@ if not new_right_ghost then @z %--------------------------------------- @x [46] m.1035 l.20122 - Omega - begin if character(tail)=qi(hyphen_char[main_f]) then if link(cur_q)>null then + begin if link(cur_q)>null then + if character(tail)=qi(hyphen_char[main_f]) then ins_disc:=true; @y - begin if character(tail)=qi(hyphen_char(main_f)) then if link(cur_q)>null then + begin if link(cur_q)>null then + if character(tail)=qi(hyphen_char(main_f)) then ins_disc:=true; @z %--------------------------------------- @x [46] m.1036 l.20135 - Omega @@ -1879,7 +1882,7 @@ main_i:=char_info(main_f)(cur_l); if not char_exists(main_i) then begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; end; -tail_append(lig_stack) {|main_loop_lookahead| is next} +link(tail):=lig_stack; tail:=lig_stack {|main_loop_lookahead| is next} @y if lig_stack=null then goto reswitch; cur_q:=tail; cur_l:=character(lig_stack); @@ -1916,6 +1919,7 @@ if cur_cmd=no_boundary then bchar:=non_char; @x [46] m.1039 l.20193 - Omega @<If there's a ligature/kern command...@>= if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; +if cur_r=non_char then goto main_loop_wrapup; main_k:=lig_kern_start(main_f)(main_i); main_j:=font_info[main_k].qqqq; if skip_byte(main_j)<=stop_flag then goto main_lig_loop+2; main_k:=lig_kern_restart(main_f)(main_j); diff --git a/Build/source/texk/web2c/mpdir/makecpool.c b/Build/source/texk/web2c/mpdir/makecpool.c index 9130f3cb924..7d37035b9fd 100644 --- a/Build/source/texk/web2c/mpdir/makecpool.c +++ b/Build/source/texk/web2c/mpdir/makecpool.c @@ -1,3 +1,6 @@ +/* Copyright 2007, 2008 Taco Hoekwater. + You may freely use, modify and/or distribute this file. */ + #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -16,6 +19,7 @@ int main(int argc, char *argv[]) { "/* This file is auto-generated by makecpool */\n" "\n" "#include <stdio.h>\n" + "#include <strings.h>\n" "#include \"%s\"\n" "\n" "static char *poolfilearr[] = {\n",headername); diff --git a/Build/source/texk/web2c/omegadir/ChangeLog b/Build/source/texk/web2c/omegadir/ChangeLog new file mode 100644 index 00000000000..af13187d847 --- /dev/null +++ b/Build/source/texk/web2c/omegadir/ChangeLog @@ -0,0 +1,4 @@ +2008-03-23 Karl Berry <karl@freefriends.org> + + * Update to TeX 3.1415926; compile in pool files. + From Akira. diff --git a/Build/source/texk/web2c/omegadir/com16bit.ch b/Build/source/texk/web2c/omegadir/com16bit.ch index a498312f766..94ce8220d62 100644 --- a/Build/source/texk/web2c/omegadir/com16bit.ch +++ b/Build/source/texk/web2c/omegadir/com16bit.ch @@ -40,16 +40,17 @@ @z @x -@d banner=='This is Omega, Version 3.141592-1.23.2.3' {printed when \TeX\ starts} +@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} @y -@d banner=='This is Omega, Version 3.141592-1.23.2.3' {printed when \TeX\ starts} -@d banner_k=='This is Omegak, Version 3.141592-1.23.2.3' {printed when \TeX\ starts} +@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} +@d banner_k=='This is Omegak, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} @z @x [1.4] l.233 - program header Actually the heading shown here is not quite normal: The |program| line does not mention any |output| file, because \ph\ would ask the \TeX\ user to specify a file name if |output| were specified here. +@:PASCAL H}{\ph@> @^system dependencies@> @y @z @@ -138,7 +139,7 @@ if ini_version then @y @d file_name_size == maxint @d ssup_error_line = 255 -@d ssup_max_strings ==200000 +@d ssup_max_strings == 2097151 {Larger values may be used, but then the arrays consume much more memory.} @d ssup_trie_opcode == 65535 @d ssup_trie_size == @"3FFFFF @@ -188,7 +189,7 @@ if ini_version then @!engine_name=TEXMF_ENGINE_NAME; {the name of this engine} @# @!inf_main_memory = 2000000; -@!sup_main_memory = 32000000; +@!sup_main_memory = 256000000; @!inf_trie_size = 80000; @!sup_trie_size = ssup_trie_size; @@ -345,6 +346,7 @@ end; @x [3.28] l.850 - Do file closing in C. @ Files can be closed with the \ph\ routine `|close(f)|', which +@:PASCAL H}{\ph@> @^system dependencies@> should be used when all input or output with respect to |f| has been completed. This makes |f| available to be opened again, if desired; and if |f| was used for @@ -468,6 +470,7 @@ tini@/ @x [3.33] l.964 - We don't need to open terminal files. @ Here is how to open the terminal files in \ph. The `\.{/I}' switch suppresses the first |get|. +@:PASCAL H}{\ph@> @^system dependencies@> @d t_open_in==reset(term_in,'TTY:','/O/I') {open the terminal for text input} @@ -482,6 +485,7 @@ any command line arguments the user has provided. It's defined in C. @x [3.34] l.982 - Flushing output to terminal files. these operations can be specified in \ph: +@:PASCAL H}{\ph@> @^system dependencies@> @d update_terminal == break(term_out) {empty the terminal output buffer} @@ -568,50 +572,74 @@ if last > first then @!init function get_strings_started:boolean; {initializes the string pool, @z -% [4.51] Open the pool file using a path, and can't do string -% assignments directly. (`strcpy' and `strlen' work here because -% `pool_name' is a constant string, and thus ends in a null and doesn't -% start with a space.) -@x [4.51] l.1314 - Open the pool file. +@x +@ @d bad_pool(#)==begin wake_up_terminal; write_ln(term_out,#); + a_close(pool_file); get_strings_started:=false; return; + end +@<Read the other strings...@>= name_of_file:=pool_name; {we needn't set |name_length|} if a_open_in(pool_file) then -@y -name_length := strlen (pool_name); - -name_of_file := xmalloc_array (char, 1 + name_length); -strcpy (name_of_file+1, pool_name); {copy the string} -if a_open_in (pool_file, kpse_texpool_format) then -@z - -@x [4.51] l.1322 - Make `OMEGA.POOL' lowercase, and change how it's read. + begin c:=false; + repeat @<Read one string, but return |false| if the + string memory space is getting too tight for comfort@>; + until c; + a_close(pool_file); get_strings_started:=true; + end else bad_pool('! I can''t read OMEGA.POOL.') -@y -else bad_pool('! I can''t read omega.pool; bad path?') -@z -@x [4.52] l.1326 - Make `OMEGA.POOL' lowercase, and change how it's read. +@.I can't read OMEGA.POOL@> + +@ @<Read one string...@>= begin if eof(pool_file) then bad_pool('! OMEGA.POOL has no check sum.'); @.OMEGA.POOL has no check sum@> read(pool_file,m,n); {read two digits of string length} -@y -begin if eof(pool_file) then bad_pool('! omega.pool has no check sum.'); -@.OMEGA.POOL has no check sum@> -read(pool_file,m); read(pool_file,n); {read two digits of string length} -@z -@x [4.52] l.1332 - Make `OMEGA.POOL' lowercase, and change how it's read. +if m='*' then @<Check the pool check sum@> +else begin if (m<"0")or(m>"9")or@| + (n<"0")or(n>"9") then bad_pool('! OMEGA.POOL line doesn''t begin with two digits.'); -@y - bad_pool('! omega.pool line doesn''t begin with two digits.'); -@z -@x [4.53] l.1354 - Make `OMEGA.POOL' lowercase, and change how it's read. +@.OMEGA.POOL line doesn't...@> + l:=m*10+n-"0"*11; {compute the length} + if pool_ptr+l+string_vacancies>pool_size then + bad_pool('! You have to increase POOLSIZE.'); +@.You have to increase POOLSIZE@> + for k:=1 to l do + begin if eoln(pool_file) then m:=' '@+else read(pool_file,m); + append_char(m); + end; + read_ln(pool_file); g:=make_string; + end; +end + +@ The \.{WEB} operation \.{@@\$} denotes the value that should be at the +end of this \.{OMEGA.POOL} file; any other value means that the wrong pool +file has been loaded. +@^check sum@> + +@<Check the pool check sum@>= +begin a:=0; k:=1; +loop@+ begin if (n<"0")or(n>"9") then bad_pool('! OMEGA.POOL check sum doesn''t have nine digits.'); -@y - bad_pool('! omega.pool check sum doesn''t have nine digits.'); -@z -@x [4.53] l.1360 - Make `OMEGA.POOL' lowercase, and change how it's read. +@.OMEGA.POOL check sum...@> + a:=10*a+n-"0"; + if k=9 then goto done; + incr(k); read(pool_file,n); + end; done: if a<>@$ then bad_pool('! OMEGA.POOL doesn''t match; OTANGLE me again.'); -@y -done: if a<>@$ then - bad_pool('! omega.pool doesn''t match; otangle me again (or fix the path).'); +@.OMEGA.POOL doesn't match@> +c:=true; +end +@y +@ @<Read the other strings...@>= + g := loadpoolstrings((pool_size-string_vacancies)); + if g=0 then begin + wake_up_terminal; write_ln(term_out,'! You have to increase POOLSIZE.'); + get_strings_started:=false; + return; + end; + get_strings_started:=true; + +@ Empty module + +@ Empty module @z @x [5.54] l.1422 - error_line @@ -1315,22 +1343,39 @@ name_of_file[name_length+1]:=0; @z @x [29.525] l.10163 - make_name_string +@p function make_name_string:str_number; +var k:1..file_name_size; {index into |name_of_file|} +begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or + (cur_length>0) then + make_name_string:="?" +else begin for k:=1 to name_length do append_char(name_of_file[k]); make_name_string:=make_string; end; @y +@p function make_name_string:str_number; +var k:1..file_name_size; {index into |name_of_file|} +save_area_delimiter, save_ext_delimiter: pool_pointer; +save_name_in_progress, save_stop_at_space: boolean; +begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or + (cur_length>0) then + make_name_string:="?" +else begin for k:=1 to name_length do append_char(name_of_file[k]); make_name_string:=make_string; - end; {At this point we also set |cur_name|, |cur_ext|, and |cur_area| to match the contents of |name_of_file|.} - k:=1; + save_area_delimiter:=area_delimiter; save_ext_delimiter:=ext_delimiter; + save_name_in_progress:=name_in_progress; save_stop_at_space:=stop_at_space; name_in_progress:=true; begin_name; stop_at_space:=false; + k:=1; while (k<=name_length)and(more_name(name_of_file[k])) do incr(k); - stop_at_space:=true; + stop_at_space:=save_stop_at_space; end_name; - name_in_progress:=false; + name_in_progress:=save_name_in_progress; + area_delimiter:=save_area_delimiter; ext_delimiter:=save_ext_delimiter; + end; @z @x [29.526] l.10194 - stop scanning file name if we're at end-of-line. @@ -1646,7 +1691,7 @@ arrays start at |0|. %%%%%%%% dynamic hyph_size @x 18137 m.926 @!hyph_word:array[hyph_pointer] of str_number; {exception words} -@!hyph_list:array[hyph_pointer] of pointer; {list of hyphen positions} +@!hyph_list:array[hyph_pointer] of pointer; {lists of hyphen positions} @!hyph_count:hyph_pointer; {the number of words in the exception dictionary} @y 18139 @!hyph_word: ^str_number; {exception words} @@ -2451,6 +2496,7 @@ if (edit_name_start<>0) and (interaction>batch_mode) then @x [51.1335] l.24335 - Only do dump if ini. begin @!init for c:=top_mark_code to split_bot_mark_code do if cur_mark[c]<>null then delete_token_ref(cur_mark[c]); + if last_glue<>max_halfword then delete_glue_ref(last_glue); store_fmt_file; return;@+tini@/ @y begin @!init if ini_version then diff --git a/Build/source/texk/web2c/omegadir/makecpool.c b/Build/source/texk/web2c/omegadir/makecpool.c new file mode 100644 index 00000000000..4a928068208 --- /dev/null +++ b/Build/source/texk/web2c/omegadir/makecpool.c @@ -0,0 +1,67 @@ +/* Copyright 2007, 2008 Taco Hoekwater. + You may freely use, modify and/or distribute this file. */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) { + char *filename; + char *headername; + FILE *fh; + char data[1024]; + if (argc!=3) { + puts("Need exactly two arguments: pool_name and header_name"); + exit(1); + } + filename = argv[1]; + headername = argv[2]; + fh = fopen(filename,"r"); + printf( + "/* This file is auto-generated by makecpool */\n" + "\n" + "#include <stdio.h>\n" + "#include <string.h>\n" + "#include \"%s\"\n" + "\n" + "static char *poolfilearr[] = {\n",headername); + while (fgets(data,1024,fh)) { + int len = strlen(data); + int o = 0; /* skip first o characters*/ + int i; + if (data[len-1]=='\n') { /* chomp;*/ + data[len-1] = 0; + len--; + } + if (data[0]=='*') break; /* last if !^\*!; */ + if (data[0]>='0' && data[0]<='9' && data[1]>='0' && data[1]<='9') { + o=2; /* $data =~ s/^\d\d//; */ + } + printf(" \""); + for (i=o; i<len; i++) { + if (data[i]=='"' || data[i]=='\\') putchar('\\'); + if (data[i]=='?') printf("\" \""); /* suppress trigraphs */ + putchar(data[i]); + } /* $data =~ s/(["\\])/\\$1/g; */ + printf("\",\n"); + } + fclose(fh); + printf(" NULL };\n" + "int loadpoolstrings (integer spare_size) {\n" + " strnumber g=0;\n" + " int i=0,j=0;\n" + " char *s;\n" + " while ((s = poolfilearr[j++])) {\n" + " int l = strlen (s);\n" + " i += l;\n" + " if (i>=spare_size) return 0;\n" + " while (l-- > 0) strpool[poolptr++] = *s++;\n" + /* " while (l-- > 0) str_pool[pool_ptr++] = *s++;\n" */ + " g = makestring();\n" + /* " g = make_string();\n" */ + /* " strref[g]= 127;\n"*/ + " }\n" + " return g;\n" + "}\n"); + return 0; +} diff --git a/Build/source/texk/web2c/omegadir/om16bit.ch b/Build/source/texk/web2c/omegadir/om16bit.ch index 7a1035185f7..570619fd317 100644 --- a/Build/source/texk/web2c/omegadir/om16bit.ch +++ b/Build/source/texk/web2c/omegadir/om16bit.ch @@ -74,9 +74,9 @@ author' in the documentation are to D. E. Knuth. @z %--------------------------------------- @x [1] m.2 l.187 - Omega -@d banner=='This is TeX, Version 3.141592' {printed when \TeX\ starts} +@d banner=='This is TeX, Version 3.1415926' {printed when \TeX\ starts} @y -@d banner=='This is Omega, Version 3.141592-1.23.2.3' {printed when \TeX\ starts} +@d banner=='This is Omega, Version 3.1415926-1.23.2.3' {printed when \TeX\ starts} @z %--------------------------------------- @x [1] m.4 l.243 @@ -1270,7 +1270,7 @@ procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); @z %--------------------------------------- @x [24] m.334 l.7110 - Omega -primitive("par",par_end,256); {cf. |scan_file_name|} +primitive("par",par_end,256); {cf.\ |scan_file_name|} @y primitive("par",par_end,too_big_char); {cf. |scan_file_name|} @z @@ -1387,8 +1387,6 @@ end; @!cur_val:integer; {value returned by numeric scanners} @y @!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; {delcodes are now 51 digits} -@!cur_val2:integer; {will be used in omxml.ch; this is cheating} @z %--------------------------------------- @x [26] m.413 l.8335 - Omega diff --git a/Build/source/texk/web2c/omegadir/omdir.ch b/Build/source/texk/web2c/omegadir/omdir.ch index 4e94b79e68b..23e2c8f4602 100644 --- a/Build/source/texk/web2c/omegadir/omdir.ch +++ b/Build/source/texk/web2c/omegadir/omdir.ch @@ -375,8 +375,6 @@ hlist_node,vlist_node,unset_node: begin r:=get_node(box_node_size); @<Glob...@>= @!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; {delcodes are now 51 digits} -@!cur_val2:integer; {will be used in omxml.ch; this is cheating} @!cur_val_level:int_val..tok_val; {the ``level'' of this value} @y @d int_val=0 {integer values} diff --git a/Build/source/texk/web2c/omegadir/omega-pool.h b/Build/source/texk/web2c/omegadir/omega-pool.h new file mode 100644 index 00000000000..22824eb2682 --- /dev/null +++ b/Build/source/texk/web2c/omegadir/omega-pool.h @@ -0,0 +1,9 @@ +#ifndef OMEGA_POOL_H +#define OMEGA_POOL_H +typedef int integer; +typedef integer strnumber; +typedef unsigned short packedASCIIcode; +typedef integer poolpointer; +extern packedASCIIcode * strpool; +extern poolpointer poolptr; +#endif diff --git a/Build/source/texk/web2c/omegadir/omega.defines b/Build/source/texk/web2c/omegadir/omega.defines index e8cf7f8fdc2..13987fa124e 100644 --- a/Build/source/texk/web2c/omegadir/omega.defines +++ b/Build/source/texk/web2c/omegadir/omega.defines @@ -3,7 +3,7 @@ This file is part of Omega, which is based on the web2c distribution of TeX, -Copyright (c) 1994--2001 John Plaice and Yannis Haralambous +Copyright (c) 1994--2001, 2008 John Plaice and Yannis Haralambous Omega is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ along with Omega; if not, write to the Free Software Foundation, Inc., } +@define function loadpoolstrings(); @define function newinputln (); @define function getfilemode (); @define function newinputline (); diff --git a/Build/source/texk/web2c/omegadir/omega.mk b/Build/source/texk/web2c/omegadir/omega.mk index 781564337c3..72775719c93 100644 --- a/Build/source/texk/web2c/omegadir/omega.mk +++ b/Build/source/texk/web2c/omegadir/omega.mk @@ -4,9 +4,9 @@ Makefile: omegadir/omega.mk -omegafonts_programs = omegafonts/omfonts +omegafonts_programs = @OMEGA@ omegafonts/omfonts otps_programs = otps/otp2ocp otps/outocp -omegafonts = omegafonts +omegafonts = @OMEGA@ omegafonts otps = otps odvicopy = odvicopy @@ -82,7 +82,7 @@ omega = @OMEGA@ omega omega_c = omegaini.c omega0.c omega1.c omega2.c omega3.c omega_o = omegaini.o omega0.o omega1.o omega2.o \ omegaextra.o omega.o omegabis.o \ - omega3.o + omega3.o omega-pool.o # Linking omega: $(omega_o) @@ -163,6 +163,15 @@ omega.ch: omegadir/comsrcspec.ch $(srcdir)/omegadir/comdir.ch \ $(srcdir)/omegadir/comxml.ch \ $(srcdir)/omegadir/comsrcspec.ch + +omega-pool.c: omega.pool omegadir/makecpool + omegadir/makecpool omega.pool omegadir/omega-pool.h >omega-pool.c +omegadir/makecpool: omegadir/makecpool.o + $(CC) $(CFLAGS) -o $@ omegadir/makecpool.o +omegadir/makecpool.o: $(srcdir)/omegadir/makecpool.c + test -d omegadir || mkdir omegadir + $(CC) $(CFLAGS) -c -o $@ $(srcdir)/omegadir/makecpool.c + # Check: right now all we do is build the format. check: @OMEGA@ omega-check omega-check: omega omega.fmt diff --git a/Build/source/texk/web2c/omegadir/omegaextra.h b/Build/source/texk/web2c/omegadir/omegaextra.h index 5ed66b83978..9d6c693e5a1 100644 --- a/Build/source/texk/web2c/omegadir/omegaextra.h +++ b/Build/source/texk/web2c/omegadir/omegaextra.h @@ -24,7 +24,7 @@ along with Omega; if not, write to the Free Software Foundation, Inc., */ -#define BANNER "This is Omega, Version 3.141592-1.23.2.3" +#define BANNER "This is Omega, Version 3.1415926-1.23.2.3" #define COPYRIGHT_HOLDER "J. Plaice and Y. Haralambous" #define AUTHOR NULL #define PROGRAM_HELP OMEGAHELP diff --git a/Build/source/texk/web2c/omegadir/omfi.ch b/Build/source/texk/web2c/omegadir/omfi.ch index 9efd518937c..d7f4bbe959f 100644 --- a/Build/source/texk/web2c/omegadir/omfi.ch +++ b/Build/source/texk/web2c/omegadir/omfi.ch @@ -142,7 +142,7 @@ macro makes such six-tuples convenient. @d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6) -@<Glo...@>= +@<Glob...@>= @!active_width:array[1..6] of scaled; {distance from first active node to~|cur_p|} @!cur_active_width:array[1..6] of scaled; {distance from current active node} diff --git a/Build/source/texk/web2c/omegadir/omfont.ch b/Build/source/texk/web2c/omegadir/omfont.ch index 997bc21e5da..e70d4c47dcd 100644 --- a/Build/source/texk/web2c/omegadir/omfont.ch +++ b/Build/source/texk/web2c/omegadir/omfont.ch @@ -716,6 +716,7 @@ fget; read_sixteen(nk); fget; read_sixteen(ne); fget; read_sixteen(np); if lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np then abort; +if (nw=0)or(nh=0)or(nd=0)or(ni=0) then abort; end @y nco:=0; ncw:=0; npc:=0; @@ -1863,9 +1864,11 @@ if not new_right_ghost then @z %--------------------------------------- @x [46] m.1035 l.20122 - Omega - begin if character(tail)=qi(hyphen_char[main_f]) then if link(cur_q)>null then + begin if link(cur_q)>null then + if character(tail)=qi(hyphen_char[main_f]) then ins_disc:=true; @y - begin if character(tail)=qi(hyphen_char(main_f)) then if link(cur_q)>null then + begin if link(cur_q)>null then + if character(tail)=qi(hyphen_char(main_f)) then ins_disc:=true; @z %--------------------------------------- @x [46] m.1036 l.20135 - Omega @@ -1879,7 +1882,7 @@ main_i:=char_info(main_f)(cur_l); if not char_exists(main_i) then begin char_warning(main_f,cur_chr); free_avail(lig_stack); goto big_switch; end; -tail_append(lig_stack) {|main_loop_lookahead| is next} +link(tail):=lig_stack; tail:=lig_stack {|main_loop_lookahead| is next} @y if lig_stack=null then goto reswitch; cur_q:=tail; cur_l:=character(lig_stack); @@ -1916,6 +1919,7 @@ if cur_cmd=no_boundary then bchar:=non_char; @x [46] m.1039 l.20193 - Omega @<If there's a ligature/kern command...@>= if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; +if cur_r=non_char then goto main_loop_wrapup; main_k:=lig_kern_start(main_f)(main_i); main_j:=font_info[main_k].qqqq; if skip_byte(main_j)<=stop_flag then goto main_lig_loop+2; main_k:=lig_kern_restart(main_f)(main_j); |