************
File DRB0:[BELL.WEB]TEX.WEB;2
    8   % TeX is a trademark of the American Mathematical Society.
    9   % METAFONT is a tradement of Addison-Wesley Publishing Company.
   11   % Version 0 was released in September 1982 after it passed a variety of tests.
******
File DRB0:[BELL.WEB]TEX.WEB;1
    8   % Version 0 was released in September 1982 after it passed a variety of tests.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
   19   % Version 2.1 corrects anomalies in discretionary breaks (January 1987).
   20   % Version 2.2 corrects "(Please type...)" with null \endlinechar (April 1987).
   21   % Version 2.3 avoids incomplete page in premature termination (August 1987).
   22   % Version 2.4 fixes \noaligned rules in indented displays (August 1987).
   23   % Version 2.5 saves cur_order when expanding tokens (September 1987).
   24   % Version 2.6 adds 10sp slop when shipping leaders (November 1987).
   25   % Version 2.7 improves rounding of negative-width characters (November 1987).
   27   % A reward of $40.96 will be paid to the first finder of any remaining bug.
   28   % (This amount will double again in 1988.)
   30   % Although considerable effort has been expended to make the TeX program
******
File DRB0:[BELL.WEB]TEX.WEB;1
   17   % A reward of $10.24 will be paid to the first finder of any remaining bug.
   18   % (This amount will double again in 1986.)
   20   % Although considerable effort has been expended to make the TeX program
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
   48   \chardef\%=`\%
   50   \def\(#1){} % this is used to make section names sort themselves better
******
File DRB0:[BELL.WEB]TEX.WEB;1
   39   \def\(#1){} % this is used to make section names sort themselves better
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
  166   @d banner=='This is TeX, Version 2.7' {printed when \TeX\ starts}
  168   @ Different \PASCAL s have slightly different conventions, and the present
******
File DRB0:[BELL.WEB]TEX.WEB;1
  155   @d banner=='This is TeX, Version 2.0' {printed when \TeX\ starts}
  157   @ Different \PASCAL s have slightly different conventions, and the present
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
  437   if max_in_open>=128 then bad:=6;
  439   @ Labels are given symbolic names by the following definitions, so that
******
File DRB0:[BELL.WEB]TEX.WEB;1
  427   @ Labels are given symbolic names by the following definitions, so that
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
  779   The `\\{name}' parameter, which is of type `{\bf packed array
  780   $[\langle\\{any}\rangle]$ of \\{char}}', stands for the name of
  781   the external file that is being opened for input or output.
******
File DRB0:[BELL.WEB]TEX.WEB;1
  767   The `\\{name}' parameter, which is of type `\ignorespaces|packed
  768   array[@t\<\\{any}>@>] of text_char|', stands for the name of
  769   the external file that is being opened for input or output.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
  873   file into available positions of the buffer array and returns the value
  874   |true|, unless the file has already been entirely read, in which case it
******
File DRB0:[BELL.WEB]TEX.WEB;1
  861   field into available positions of the buffer array and returns the value
  862   |true|, unless the file has already been entirely read, in which case it
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 1734   when |get_token| is being used to delete a token, and/or if some fatal error
 1735   occurs while \TeX\ is trying to fix a non-fatal one. But such recursion
 1736   @^recursion@>
 1737   is never more than two levels deep.
 1739   @<Error handling...@>=
******
File DRB0:[BELL.WEB]TEX.WEB;1
 1722   when |get_token| is being used to delete a token, or if some fatal error
 1723   occurs while \TeX\ is trying to fix a non-fatal one. But such recursion
 1724   @^recursion@>
 1725   is never more than one level deep.
 1727   @<Error handling...@>=
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 2524   done, i.e., if |hi_mem_min=lo_mem_max+1|, we have to quit.
 2526   @p function get_avail : pointer; {single-word node allocation}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 2512   done, i.e., if |hi_mem_min=low_mem_max+1|, we have to quit.
 2514   @p function get_avail : pointer; {single-word node allocation}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 2674   if r=p then if rlink(p)<>p then
 2675    @<Allocate entire node |p| and |goto found|@>;
******
File DRB0:[BELL.WEB]TEX.WEB;1
 2662   if r=p then if ((rlink(p)<>rover) or (llink(p)<>rover)) then
 2663    @<Allocate entire node |p| and |goto found|@>;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 2777   entries: The first of these has |font=font_base|, and its |link| points
 2778   to the second;
 2779   the second identifies the font and the character dimensions.
 2780   The saving feature about oriental characters is that most of them have
 2781   the same box dimensions. The |character| field of the first |char_node|
 2782   is a ``\\{charext}'' that distinguishes between graphic symbols whose
 2783   dimensions are identical for typesetting purposes. (See the \MF\ manual.)
 2784   Such an extension of \TeX\ would not be difficult; further details are
 2785   left to the reader.
 2787   In order to make sure that the |character| code fits in a quarterword,
******
File DRB0:[BELL.WEB]TEX.WEB;1
 2765   entries: The first of these would identify the font and the character
 2766   dimensions, and it would also link to the second, where the full halfword
 2767   |info| field would address the desired character. Such an extension of
 2768   \TeX\ would not be difficult; further details are left to the reader.
 2769   The saving feature about oriental characters is that most of them have
 2770   the same box dimensions.
 2772   In order to make sure that the |character| code fits in a quarterword,
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 2837   The |subtype| field is set to |min_quarterword|, since that's the desired
 2838   |span_count| value if this |hlist_node| is changed to an |unset_node|.
******
File DRB0:[BELL.WEB]TEX.WEB;1
 2822   The |subtype| field is set to |min_quarterword|, since that' the desired
 2823   |span_count| value if this |hlist_node| is changed to an |unset_node|.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3213   harmless to let |lig_trick| and |garbage| share the same location of |mem|.
 3215   @d zero_glue==mem_bot {specification for \.{0pt plus 0pt minus 0pt}}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3198   harmless to let |lig_trick|, |garbage|, and |backup_head| share the same
 3199   location of |mem|.
 3201   @d zero_glue==mem_bot {specification for \.{0pt plus 0pt minus 0pt}}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3290    {previous |mem_end|, |lo_mem_max|, and |hi_mem_min|}
 3291   @t\hskip1em@>@!panicking:boolean; {do we want to check memory constantly?}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3276    {previous |mem_end|, |lo_mem_max|,and |hi_mem_min|}
 3277   @t\hskip1em@>@!panicking:boolean; {do we want to check memory constantly?}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3441   begin while p>mem_min do
 3442    begin if is_char_node(p) then
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3427   begin while p>null do
 3428    begin if is_char_node(p) then
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3577   @p procedure show_node_list(@!p:integer); {prints a node list symbolically}
 3578   label exit;
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3563   @p procedure show_node_list(@!p:pointer); {prints a node list symbolically}
 3564   label exit;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3587   while p>mem_min do
 3588    begin print_ln; print_current_string; {display the nesting history}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3573   while p>null do
 3574    begin print_ln; print_current_string; {display the nesting history}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 3961   @d relax=0 {do nothing ( \.{\\relax} )}
 3962   @d left_brace=1 {beginning of a group ( \.\{ )}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 3947   @d relax=0 { do nothing ( \.{\\relax} )}
 3948   @d left_brace=1 {beginning of a group ( \.\{ )}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 4091   than |max_command| so that their special nature is easily discernible.
 4092   The ``expandable'' commands come first.
******
File DRB0:[BELL.WEB]TEX.WEB;1
 4077   than |max_command| so that their special nature is easily discernable.
 4078   The ``expandable'' commands come first.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 4396   In the first region we have 128 equivalents for ``active characters'' that
 4397   act as control sequences, followed by 128 equivalents for single-character
 4398   control sequences.
 4400   Then comes region~2, which corresponds to the hash table that we will
******
File DRB0:[BELL.WEB]TEX.WEB;1
 4382   In the first region we have 128 equivalents for single-character control
 4383   sequences, followed by 128 equivalents for ``active characters'' that
 4384   act as control sequences.
 4386   Then comes region~2, which corresponds to the hash table that we will
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 6404   when a subfile ends. This variable has six possible values:
 6406   \yskip\hang|normal|, means that a subfile can safely end here without incident.
******
File DRB0:[BELL.WEB]TEX.WEB;1
 6390   when a subfile ends. This variable has five possible values:
 6392   \yskip\hang|normal|, means that a subfile can safely end here without incident.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 7326    begin if (end_line_char<0)or(end_line_char>127) then incr(limit);
 7327    if limit=start then {previous line was empty}
 7328    print_nl("(Please type a command or say `\end')");
******
File DRB0:[BELL.WEB]TEX.WEB;1
 7312    begin if limit=start then {previous line was empty}
 7313    print_nl("(Please type a command or say `\end')");
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 7457   @!cvl_backup,@!radix_backup,@!co_backup:small_number;
 7458    {to save |cur_val_level|, etc.}
 7459   @!backup_backup:pointer; {to save |link(backup_head)|}
******
File DRB0:[BELL.WEB]TEX.WEB;1
 7442   @!cvl_backup,@!radix_backup:small_number; {to save |cur_val_level| and |radix|}
 7443   @!backup_backup:pointer; {to save |link(backup_head)|}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 7462   co_backup:=cur_order; backup_backup:=link(backup_head);
 7463   if cur_cmd<call then @<Expand a nonmacro@>
******
File DRB0:[BELL.WEB]TEX.WEB;1
 7446   backup_backup:=link(backup_head);
 7447   if cur_cmd<call then @<Expand a nonmacro@>
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 7467   cur_order:=co_backup; link(backup_head):=backup_backup;
 7468   end;
******
File DRB0:[BELL.WEB]TEX.WEB;1
 7451   link(backup_head):=backup_backup;
 7452   end;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 7730   top of\/ \TeX's input stack, so that |get_next| will proceed to read it
 7731   next.
******
File DRB0:[BELL.WEB]TEX.WEB;1
 7714   top of the \TeX's input stack, so that |get_next| will proceed to read it
 7715   next.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
 9432   if\/ \.{\\or} or \.{\\else} or \.{\\fi} occurs before the current \.{\\if}
 9433   condition has been evaluated, \.{\\relax} will be inserted.
******
File DRB0:[BELL.WEB]TEX.WEB;1
 9416   if \.{\\or} or \.{\\else} or \.{\\fi} occurs before the current \.{\\if}
 9417   condition has been evaluated, \.{\\relax} will be inserted.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10225   is not explicitly repeated in \.{DVI} format.
10227   \yskip\hang|header[0]| is a 32-bit check sum that \TeX\ will copy into
******
File DRB0:[BELL.WEB]TEX.WEB;1
10209   is not explicitly repeated in \.{DVI} format. Extensions of \TeX\ for
10210   oriental languages should be able to identify oriental fonts by means
10211   of this additional header information.
10212   @^oriental characters@>@^Chinese characters@>@^Japanese characters@>
10214   \yskip\hang|header[0]| is a 32-bit check sum that \TeX\ will copy into
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10575   ``at'' size~|s|. If |s|~is negative, it's the negative of a scale factor
10576   to be applied to the design size; |s=-1000| is the normal case.
******
File DRB0:[BELL.WEB]TEX.WEB;1
10562   ``at'' size~|s|. If |s|~is negative, its the negative of a scale factor
10563   to be applied to the design size; |s=-1000| is the normal case.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10608   done: if file_opened then b_close(tfm_file);
10609   read_font_info:=g;
10610   end;
******
File DRB0:[BELL.WEB]TEX.WEB;1
10595   done: b_close(tfm_file); read_font_info:=g;
10596   end;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10787   quantity by the integer~|z|, which is known to be less than $2^{27}$.
10788   If $|z|<2^{23}$, the individual multiplications $b\cdot z$,
10789   $c\cdot z$, $d\cdot z$ cannot overflow; otherwise we will divide |z| by 2,
******
File DRB0:[BELL.WEB]TEX.WEB;1
10773   quantity by the integer~|z|, which is known to be less than $2^{27}$. Let
10774   $\alpha=16z$. If $|z|<2^{23}$, the individual multiplications $b\cdot z$,
10775   $c\cdot z$, $d\cdot z$ cannot overflow; otherwise we will divide |z| by 2,
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10794   if $a=0$, or the same quantity minus $\alpha=2^{4+e}z^\prime$ if $a=255$.
10795   This calculation must be done exactly, in order to guarantee portability
******
File DRB0:[BELL.WEB]TEX.WEB;1
10780   if $a=0$, or the same quantity minus $\alpha$ if $a=255$.
10781   This calculation must be done exactly, in order to guarantee portability
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10815   begin alpha:=16;
10816   while z>=@'40000000 do
10817    begin z:=z div 2; alpha:=alpha+alpha;
10818    end;
10819   beta:=256 div alpha; alpha:=alpha*z;
10820   end
******
File DRB0:[BELL.WEB]TEX.WEB;1
10801   begin alpha:=16*z; beta:=16;
10802   while z>=@'40000000 do
10803    begin z:=z div 2; beta:=beta div 2;
10804    end;
10805   end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
10891   @.Missing font identifier@>
10892    help2("I was looking for a control sequence whose")@/
******
File DRB0:[BELL.WEB]TEX.WEB;1
10876   @.Undefined font code@>
10877    help2("I was looking for a control sequence whose")@/
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
11513   doing_leaders:=false; dead_cycles:=0; cur_s:=-1;
11515   @ The \.{DVI} bytes are output to a buffer instead of being written directly
******
File DRB0:[BELL.WEB]TEX.WEB;1
11498   doing_leaders:=false; dead_cycles:=0;
11500   @ The \.{DVI} bytes are output to a buffer instead of being written directly
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
11937   @!cur_s:integer; {current depth of output box nesting, initially $-1$}
11939   @ @<Initialize variables as |ship_out| begins@>=
11940   dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
11941   ensure_dvi_open;
11942   if total_pages=0 then
******
File DRB0:[BELL.WEB]TEX.WEB;1
11922   @!cur_s:integer; {current depth of output box nesting}
11924   @ @<Initialize variables as |ship_out| begins@>=
11925   dvi_h:=0; dvi_v:=0; cur_h:=h_offset; dvi_f:=null_font;
11926   cur_s:=-1; ensure_dvi_open;
11927   if total_pages=0 then
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12019    if c>=qi(128) then dvi_out(set1);
12020    dvi_out(qo(c));@/
12021    cur_h:=cur_h+char_width(f)(char_info(f)(c));
******
File DRB0:[BELL.WEB]TEX.WEB;1
12004    if c<qi(128) then dvi_out(qo(c))
12005    else begin dvi_out(set1); dvi_out(qo(c));
12006    end;
12007    cur_h:=cur_h+char_width(f)(char_info(f)(c));
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12103    begin rule_wd:=rule_wd+10; {compensate for floating-point rounding}
12104    edge:=cur_h+rule_wd; lx:=0;
12105    @<Let |cur_h| be the position of the first box, and set |leader_wd+lx|
******
File DRB0:[BELL.WEB]TEX.WEB;1
12089    begin edge:=cur_h+rule_wd; lx:=0;
12090    @<Let |cur_h| be the position of the first box, and set |leader_wd+lx|
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12110    cur_h:=edge-10; goto next_p;
12111    end;
******
File DRB0:[BELL.WEB]TEX.WEB;1
12095    cur_h:=edge; goto next_p;
12096    end;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12124   by half of the excess space not occupied by the leaders; and in the
12125   case of |x_leaders| (expanded leaders) we increase |cur_h|
******
File DRB0:[BELL.WEB]TEX.WEB;1
12109   by half of the excess space not occupied by the leaders; and in the case of
12110   case of |x_leaders| (expanded leaders) we increase |cur_h|
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12262    begin rule_ht:=rule_ht+10; {compensate for floating-point rounding}
12263    edge:=cur_v+rule_ht; lx:=0;
12264    @<Let |cur_v| be the position of the first box, and set |leader_ht+lx|
******
File DRB0:[BELL.WEB]TEX.WEB;1
12247    begin edge:=cur_v+rule_ht; lx:=0;
12248    @<Let |cur_v| be the position of the first box, and set |leader_ht+lx|
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12269    cur_v:=edge-10; goto next_p;
12270    end;
******
File DRB0:[BELL.WEB]TEX.WEB;1
12253    cur_v:=edge; goto next_p;
12254    end;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12362   dvi_out(eop); incr(total_pages); cur_s:=-1;
12363   done:
******
File DRB0:[BELL.WEB]TEX.WEB;1
12346   dvi_out(eop); incr(total_pages);
12347   done:
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12374   @.Huge page...@>
12375    help2("The page just created is more than 18 feet tall or")@/
******
File DRB0:[BELL.WEB]TEX.WEB;1
12358    help2("The page just created is more than 18 feet tall or")@/
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12381   @.The following...deleted@>
12382    show_box(p);
******
File DRB0:[BELL.WEB]TEX.WEB;1
12364    show_box(p);
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12396   while cur_s>-1 do
12397    begin if cur_s>0 then dvi_out(pop)
12398    else begin dvi_out(eop); incr(total_pages);
12399    end;
12400    decr(cur_s);
12401    end;
12402   if total_pages=0 then print_nl("No pages of output.")
******
File DRB0:[BELL.WEB]TEX.WEB;1
12378   if total_pages=0 then print_nl("No pages of output.")
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
12586   because it is a highly negative number.
12588   @<Incorporate box dimensions into the dimensions of the hbox...@>=
******
File DRB0:[BELL.WEB]TEX.WEB;1
12562   becase it is a highly negative number.
12564   @<Incorporate box dimensions into the dimensions of the hbox...@>=
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
13218   the current string would be `\.{.\^.\_/}' if |p| points to the |ord_noad| for
13219   |x| in the (ridiculous) formula
13220   `\.{\$\\sqrt\{a\^\{\\mathinner\{b\_\{c\\over x+y\}\}\}\}\$}'.
13222   @<Cases of |show_node_list| that arise...@>=
******
File DRB0:[BELL.WEB]TEX.WEB;1
13194   the current string would be `\.{.(.[/}' if |p| points to the |ord_noad| for
13195   |x| in the (ridiculous) formula `\.{\$\\sqrt\{a\^\{\{b\_\{c\\over x+y\}
13196   \}\}\}\$}'.
13198   @<Cases of |show_node_list| that arise...@>=
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
13668   their limits above and below. It takes a given box~|b| and
13669   changes it so that the new box is centered in a box of width~|w|.
13670   The centering is done by putting \.{\\hss} glue at the left and right
******
File DRB0:[BELL.WEB]TEX.WEB;1
13644   their limits above and below. It takes a given hlist box |b| and
13645   changes it so that the new box is centered in a box of width |w|.
13646   The centering is done by putting \.{\\hss} glue at the left and right
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
15406   q:=link(head); s:=head;
15407   while q<>null do
******
File DRB0:[BELL.WEB]TEX.WEB;1
15382   q:=link(head);
15383   while q<>null do
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
15413    s:=q; q:=link(q);
15414    end
******
File DRB0:[BELL.WEB]TEX.WEB;1
15389    q:=link(q);
15390    end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
15420   if o<>0 then
15421    begin r:=link(q); link(q):=null; q:=hpack(q,natural);
15422    shift_amount(q):=o; link(q):=r; link(s):=q;
15423    end;
15424   end
******
File DRB0:[BELL.WEB]TEX.WEB;1
15396   end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
15729   @!pass_number:halfword; {the number of passive nodes allocated on this pass}
15731   @ The active list also contains ``delta'' nodes that help the algorithm
******
File DRB0:[BELL.WEB]TEX.WEB;1
15701   @!pass_number:pointer; {the number of passive nodes allocated on this pass}
15703   @ The active list also contains ``delta'' nodes that help the algorithm
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
15924   @!v:pointer; {points to a glue specification or a node ahead of |cur_p|}
15925   @!t:integer; {node count, if |cur_p| is a discretionary node}
15926   @!f:internal_font_number; {used in character width calculation}
******
File DRB0:[BELL.WEB]TEX.WEB;1
15896   @!v:pointer; {points to a glue specification}
15897   @!t:quarterword; {replacement count, if |cur_p| is a discretionary node}
15898   @!f:internal_font_number; {used in character width calculation}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16048   s:=cur_p;
16049   if break_type>unhyphenated then if cur_p<>null then
16050    @<Compute the discretionary |break_width| values@>;
16051   while s<>null do
16052    begin if is_char_node(s) then goto done;
******
File DRB0:[BELL.WEB]TEX.WEB;1
16020   if (break_type=unhyphenated)or(cur_p=null) then
16021    begin s:=cur_p;
16022    while s<>null do
16023    begin if is_char_node(s) then goto done;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16062   done: end
******
File DRB0:[BELL.WEB]TEX.WEB;1
16033    end
16034   else @<Compute the discretionary |break_width| values@>;
16035   done: end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16077   plus $l_1$, so the length from |cur_p| to |cur_p| should be $\gamma+l_0+l_1-l$,
16078   minus the length of nodes that will be discarded after the discretionary break.
16080   The value of $l_0$ need not be computed, since |line_break| will put
******
File DRB0:[BELL.WEB]TEX.WEB;1
16050   plus $l_1$, so the length from |cur_p| to |cur_p| should be $\gamma+l_0+l_1-l$.
16052   The value of $l_0$ need not be computed, since |line_break| will put
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16087   begin t:=replace_count(cur_p); v:=cur_p; s:=post_break(cur_p);
16088   while t>0 do
16089    begin decr(t); v:=link(v);
16090    @<Subtract the width of node |v| from |break_width|@>;
16091    end;
16092   while s<>null do
16093    begin @<Add the width of node |s| to |break_width| and increase |t|,
16094    unless it's discardable@>;
16095    s:=link(s);
******
File DRB0:[BELL.WEB]TEX.WEB;1
16059   begin t:=replace_count(cur_p); s:=cur_p;
16060   while t>0 do
16061    begin decr(t); s:=link(s);
16062    @<Subtract the width of node |s| from |break_width|@>;
16063    end;
16064   s:=post_break(cur_p);
16065   while s<>null do
16066    begin @<Add the width of node |s| to |break_width|@>;
16067    s:=link(s);
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16098   if t=0 then s:=link(v); {more nodes may also be discardable after the break}
16099   end
******
File DRB0:[BELL.WEB]TEX.WEB;1
16070   end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16104   @<Subtract the width of node |v|...@>=
16105   if is_char_node(v) then
16106    begin f:=font(v);
16107    break_width[1]:=break_width[1]-char_width(f)(char_info(f)(character(v)));
16108    end
16109   else case type(v) of
16110    ligature_node: begin f:=font(lig_char(v));@/
16111    break_width[1]:=@|break_width[1]-
16112    char_width(f)(char_info(f)(character(lig_char(v))));
16113    end;
16114    hlist_node,vlist_node,rule_node,kern_node:
16115    break_width[1]:=break_width[1]-width(v);
16116    othercases confusion("disc1")
******
File DRB0:[BELL.WEB]TEX.WEB;1
16075   @<Subtract the width of node |s|...@>=
16076   if is_char_node(s) then
16077    begin f:=font(s);
16078    break_width[1]:=break_width[1]-char_width(f)(char_info(f)(character(s)));
16079    end
16080   else case type(s) of
16081    ligature_node: begin f:=font(lig_char(s));@/
16082    break_width[1]:=@|break_width[1]-
16083    char_width(f)(char_info(f)(character(lig_char(s))));
16084    end;
16085    hlist_node,vlist_node,rule_node,kern_node:
16086    break_width[1]:=break_width[1]-width(s);
16087    othercases confusion("disc1")
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16130    hlist_node,vlist_node,rule_node:break_width[1]:=break_width[1]+width(s);
16131    kern_node: if (t=0)and(subtype(s)<>acc_kern) then t:=-1 {discardable}
16132    else break_width[1]:=break_width[1]+width(s);
16133    othercases confusion("disc2")
16134   @:this can't happen disc2}{\quad disc2@>
16135    endcases;
16136   incr(t)
16138   @ We use the fact that |type(active)<>delta_node|.
******
File DRB0:[BELL.WEB]TEX.WEB;1
16101    hlist_node,vlist_node,rule_node,kern_node:
16102    break_width[1]:=break_width[1]+width(s);
16103    othercases confusion("disc2")
16104   @:this can't happen disc2}{\quad disc2@>
16105    endcases
16107   @ We use the fact that |type(active)<>delta_node|.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16154   else begin q:=get_node(delta_node_size); link(q):=r; type(q):=delta_node;@/
16155    subtype(q):=0; {the |subtype| is not used}
******
File DRB0:[BELL.WEB]TEX.WEB;1
16123   else begin q:=get_node(delta_node_size); link(q):=r; type(q):=delta_node;
16124    subtype(q):=0; {the |subtype| is not used}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16168    begin q:=get_node(delta_node_size); link(q):=r; type(q):=delta_node;@/
16169    subtype(q):=0; {the |subtype| is not used}
******
File DRB0:[BELL.WEB]TEX.WEB;1
16137    begin q:=get_node(delta_node_size); link(q):=r; type(q):=delta_node;
16138    subtype(q):=0; {the |subtype| is not used}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
16846    |disc_break:=true|@>
16847    else if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0;
16848    end
******
File DRB0:[BELL.WEB]TEX.WEB;1
16815    |disc_break:=true|@>;
16816    if not is_char_node(q) then
16817    if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0;
16818    end
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
17175   $\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$ and $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$.
17176   Thus the insertion of a hyphen might cause effects to ripple arbitrarily
******
File DRB0:[BELL.WEB]TEX.WEB;1
17145   $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$ and $\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$.
17146   Thus the insertion of a hyphen might cause effects to ripple arbitrarily
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
17378   using an algorithm due to Frank~M. Liang.
17379   @^Liang, Franklin Mark@>
******
File DRB0:[BELL.WEB]TEX.WEB;1
17348   using an algorithm due to Frank M. Liang.
17349   @^Liang, Franklin Mark@>
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
17901   |trie_max>z|, since |h=z-c|. It follows that location |trie_max| will
17902   never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|.
******
File DRB0:[BELL.WEB]TEX.WEB;1
17871   |trie_max>z|, since |h=z+c|. It follows that location |trie_max| will
17872   never be occupied in |trie|, and we will have |trie_max>=trie_link(z)|.
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
18667   @!b,@!c:integer; {badness and cost of current page}
18668   @!pi:integer; {penalty to be added to the badness}
******
File DRB0:[BELL.WEB]TEX.WEB;1
18637   @!b,c:integer; {badness and cost of current page}
18638   @!pi:integer; {penalty to be added to the badness}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
18959   @!prev_p:pointer; {predecessor of |p|}
18960   @!n:min_quarterword..255; {insertion box number}
******
File DRB0:[BELL.WEB]TEX.WEB;1
18929   @!prev_p:pointer; {precedessor of |p|}
18930   @!n:min_quarterword..255; {insertion box number}
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
19465    width(p):=font_info[k].sc; {that's |space(f)|}
19466    stretch(p):=font_info[k+1].sc; {and |space_stretch(f)|}
19467    shrink(p):=font_info[k+2].sc; {and |space_shrink(f)|}
19468    font_glue[f]:=p;
******
File DRB0:[BELL.WEB]TEX.WEB;1
19435    width(p):=font_info[k].sc;
19436    stretch(p):=font_info[k+1].sc;
19437    shrink(p):=font_info[k+2].sc;
19438    font_glue[f]:=p;
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
22014    count_def_code: define(p,assign_int,count_base+cur_val);
******
File DRB0:[BELL.WEB]TEX.WEB;1
21984    char_def_code: define(p,char_given,cur_val);
21985    math_char_def_code: define(p,math_given,cur_val);
21986    count_def_code: define(p,assign_int,count_base+cur_val);
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
22659    ("Pretend that you're Hercule Poirot: Examine all clues,")@/
22660   @^Poirot, Hercule@>
******
File DRB0:[BELL.WEB]TEX.WEB;1
22631    ("Pretend that you're Hercule Poirot, examine all clues,")@/
22632   @^Poirot, Hercule@>
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
23377   This program doesn't bother to close the input files that may still be open.
23379   @<Last-minute...@>=
******
File DRB0:[BELL.WEB]TEX.WEB;1
23349   @<Last-minute...@>=
************
************
File DRB0:[BELL.WEB]TEX.WEB;2
23633   @d write_stream(#) == info(#+1) {stream number (0 to 17)}
23634   @d open_name(#) == link(#+1) {string number of file name to open}
******
File DRB0:[BELL.WEB]TEX.WEB;1
23603   @d write_stream(#) == info(#+1) {stream number (0 to 16)}
23604   @d open_name(#) == link(#+1) {string number of file name to open}
************

Number of difference sections found: 74
Number of difference records found: 162

DIFFERENCES /IGNORE=(SPACING,TRAILING_SPACES,BLANK_LINES)/WIDTH=132/MERGED=1/OUTPUT=DRB0:[BELL.WEB]TEX.DIF;1-
    DRB0:[BELL.WEB]TEX.WEB;2-
    DRB0:[BELL.WEB]TEX.WEB;1