1%
2% pool in binary
3%
4@x
5@!m,@!n:text_char; {characters input from |pool_file|}
6@!g:str_number; {garbage}
7@!a:integer; {accumulator for check sum}
8@!c:boolean; {check sum has been checked}
9@y
10@!g:str_number; {garbage}
11@z
12@x
13@ @d bad_pool(#)==begin wake_up_terminal; write_ln(term_out,#);
14  a_close(pool_file); get_strings_started:=false; return;
15  end
16@<Read the other strings...@>=
17name_length := strlen (pool_name);
18name_of_file := xmalloc_array (ASCII_code, name_length + 1);
19strcpy (stringcast(name_of_file+1), pool_name); {copy the string}
20if a_open_in (pool_file, kpse_texpool_format) then
21  begin c:=false;
22  repeat @<Read one string, but return |false| if the
23    string memory space is getting too tight for comfort@>;
24  until c;
25  a_close(pool_file); get_strings_started:=true;
26  end
27else  bad_pool('! I can''t read ', pool_name, '; bad path?')
28@.I can't read TEX.POOL@>
29
30@ @<Read one string...@>=
31begin if eof(pool_file) then bad_pool('! ', pool_name, ' has no check sum.');
32@.TEX.POOL has no check sum@>
33read(pool_file,m); read(pool_file,n); {read two digits of string length}
34if m='*' then @<Check the pool check sum@>
35else  begin if (xord[m]<"0")or(xord[m]>"9")or@|
36      (xord[n]<"0")or(xord[n]>"9") then
37    bad_pool('! ', pool_name, ' line doesn''t begin with two digits.');
38@.TEX.POOL line doesn't...@>
39  l:=xord[m]*10+xord[n]-"0"*11; {compute the length}
40  if pool_ptr+l+string_vacancies>pool_size then
41    bad_pool('! You have to increase POOLSIZE.');
42@.You have to increase POOLSIZE@>
43  for k:=1 to l do
44    begin if eoln(pool_file) then m:=' '@+else read(pool_file,m);
45    append_char(xord[m]);
46    end;
47  read_ln(pool_file); g:=make_string;
48  end;
49end
50
51@ The \.{WEB} operation \.{@@\$} denotes the value that should be at the
52end of this \.{TEX.POOL} file; any other value means that the wrong pool
53file has been loaded.
54@^check sum@>
55
56@<Check the pool check sum@>=
57begin a:=0; k:=1;
58loop@+  begin if (xord[n]<"0")or(xord[n]>"9") then
59  bad_pool('! ', pool_name, ' check sum doesn''t have nine digits.');
60@.TEX.POOL check sum...@>
61  a:=10*a+xord[n]-"0";
62  if k=9 then goto done;
63  incr(k); read(pool_file,n);
64  end;
65done: if a<>@$ then
66  bad_pool('! ', pool_name, ' doesn''t match; tangle me again (or fix the path).');
67@.TEX.POOL doesn't match@>
68c:=true;
69end
70@y
71@ @<Read the other strings...@>=
72  g := loadpoolstrings((pool_size-string_vacancies));
73  if g=0 then begin
74     wake_up_terminal; write_ln(term_out,'! You have to increase POOLSIZE.');
75     get_strings_started:=false;
76     return;
77  end;
78  get_strings_started:=true;
79
80@ Empty module
81
82@ Empty module
83@z
84