6 #pragma warning(disable:4115) // kill rpcasync.h complaint
8 #define MYLIBAPI __declspec(dllexport)
13 #pragma warning(disable:4131) // old style declarator
14 #pragma warning(disable:4135) // conversion between different integral types
15 #pragma warning(disable:4127) // conditional expression is constant
23 #pragma warning(disable:4244) /* 96/Jan/10 */
25 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
26 void align_peek (void)
29 align_state = 1000000L;
32 } while (!(cur_cmd != 10));
38 } else if (cur_cmd == 2) {
40 } else if ((cur_cmd == 5) && (cur_chr == 258))
47 /* used in itex.c only */
48 halfword finite_shrink_(halfword p)
50 register halfword Result;
52 if (noshrinkerroryet) {
53 noshrinkerroryet = false;
54 print_err("Infinite glue shrinkage found in a paragraph");
55 help5("The paragraph just ended includes some glue that has",
56 "infinite shrinkability, e.g., `\\hskip 0pt minus 1fil'.",
57 "Such glue doesn't belong there---it allows a paragraph",
58 "of any length to fit on one line. But it's safe to proceed,",
59 "since the offensive shrinkability has been made finite.");
68 void try_break_ (integer pi, small_number breaktype)
79 internal_font_number f;
81 bool noderstaysactive;
84 halfword b; /* current badness */
86 bool artificialdemerits;
97 cur_active_width[1] = active_width[1];
98 cur_active_width[2] = active_width[2];
99 cur_active_width[3] = active_width[3];
100 cur_active_width[4] = active_width[4];
101 cur_active_width[5] = active_width[5];
102 cur_active_width[6] = active_width[6];
105 r = mem[prevr].hh.v.RH;
106 if (mem[r].hh.b0 == 2) {
107 cur_active_width[1] = cur_active_width[1] + mem[r + 1].cint;
108 cur_active_width[2] = cur_active_width[2] + mem[r + 2].cint;
109 cur_active_width[3] = cur_active_width[3] + mem[r + 3].cint;
110 cur_active_width[4] = cur_active_width[4] + mem[r + 4].cint;
111 cur_active_width[5] = cur_active_width[5] + mem[r + 5].cint;
112 cur_active_width[6] = cur_active_width[6] + mem[r + 6].cint;
118 l = mem[r + 1].hh.v.LH;
120 if ((minimum_demerits < 1073741823L) && /* 2^30 - 1 */
121 ((oldl != easyline)||(r == active))) {
124 break_width[1] = background[1];
125 break_width[2] = background[2];
126 break_width[3] = background[3];
127 break_width[4] = background[4];
128 break_width[5] = background[5];
129 break_width[6] = background[6];
131 /* if break_type>unhyphenated then if cur_p<>null then l.16451 */
135 t = mem[cur_p].hh.b1;
137 s = mem[cur_p + 1].hh.v.RH;
141 if ((v >= hi_mem_min)) {
143 break_width[1]= break_width[1]- font_info[width_base[f]+ font_info[char_base[f]+ mem[v].hh.b1].qqqq.b0].cint;
144 } else switch (mem[v].hh.b0)
148 f = mem[v + 1].hh.b0;
149 break_width[1]= break_width[1]- font_info[width_base[f]+ font_info[char_base[f]+ mem[v + 1].hh.b1].qqqq.b0].cint;
156 break_width[1]= break_width[1]- mem[v + 1].cint;
161 return; // abort_flag set
166 while (s != 0) { /* while s<>null do l.16453 */
167 if ((s >= hi_mem_min)) {
169 break_width[1]= break_width[1]+ font_info[width_base[f]+ font_info[char_base[f]+ mem[s].hh.b1].qqqq.b0].cint;
170 } else switch(mem[s].hh.b0)
174 f = mem[s + 1].hh.b0;
175 break_width[1]= break_width[1]+ font_info[width_base[f]+ font_info[char_base[f]+ mem[s + 1].hh.b1].qqqq.b0].cint;
181 /* didn't used to drop through to case 11 from case 2 in 3.141 */
183 /* used to be some extra code here in case 11 in 3.141 */
184 break_width[1]= break_width[1]+ mem[s + 1].cint;
189 return; // abort_flag set
193 /* used to be an increment t here in 3.141 */
196 break_width[1] = break_width[1] + disc_width;
197 /* used to be a test on t here instead in 3.141 */
198 if (mem[cur_p + 1].hh.v.RH == 0)
202 if ((s >= hi_mem_min))
208 v = mem[s + 1].hh.v.LH;
209 break_width[1]= break_width[1]- mem[v + 1].cint;
210 break_width[2 + mem[v].hh.b0]= break_width[2 + mem[v].hh.b0]- mem[v + 2].cint;
211 break_width[6]= break_width[6]- mem[v + 3].cint;
218 /* case 9 used to drop through to case 11 in 3.141 */
219 break_width[1]= break_width[1]- mem[s + 1].cint;
222 /* changes here in nature of test since 3.141 */
223 if (mem[s].hh.b1 != 1)
226 break_width[1]= break_width[1]- mem[s + 1].cint;
237 if (mem[prevr].hh.b0 == 2) {
238 mem[prevr + 1].cint = mem[prevr + 1].cint - cur_active_width[1] + break_width[1];
239 mem[prevr + 2].cint = mem[prevr + 2].cint - cur_active_width[2] + break_width[2];
240 mem[prevr + 3].cint = mem[prevr + 3].cint - cur_active_width[3] + break_width[3];
241 mem[prevr + 4].cint = mem[prevr + 4].cint - cur_active_width[4] + break_width[4];
242 mem[prevr + 5].cint = mem[prevr + 5].cint - cur_active_width[5] + break_width[5];
243 mem[prevr + 6].cint = mem[prevr + 6].cint - cur_active_width[6] + break_width[6];
244 } else if (prevr == active) {
245 active_width[1] = break_width[1];
246 active_width[2] = break_width[2];
247 active_width[3] = break_width[3];
248 active_width[4] = break_width[4];
249 active_width[5] = break_width[5];
250 active_width[6] = break_width[6];
256 mem[q + 1].cint = break_width[1]- cur_active_width[1];
257 mem[q + 2].cint = break_width[2]- cur_active_width[2];
258 mem[q + 3].cint = break_width[3]- cur_active_width[3];
259 mem[q + 4].cint = break_width[4]- cur_active_width[4];
260 mem[q + 5].cint = break_width[5]- cur_active_width[5];
261 mem[q + 6].cint = break_width[6]- cur_active_width[6];
262 mem[prevr].hh.v.RH = q;
266 if (abs(adj_demerits) >= 1073741823L - minimum_demerits)
267 minimum_demerits = 1073741822L; /* 2^30 - 2 */
269 minimum_demerits = minimum_demerits + abs(adj_demerits);
271 register integer for_end;
274 if (fitclass <= for_end) do {
275 if (minimal_demerits[fitclass] <= minimum_demerits) {
277 mem[q].hh.v.RH = passive;
279 mem[q + 1].hh.v.RH = cur_p;
283 mem[q].hh.v.LH = pass_number;
285 mem[q + 1].hh.v.LH = best_place[fitclass];
287 mem[q + 1].hh.v.RH = passive;
288 mem[q + 1].hh.v.LH = best_pl_line[fitclass] + 1;
289 mem[q].hh.b1 = fitclass;
290 mem[q].hh.b0 = breaktype;
291 mem[q + 2].cint = minimal_demerits[fitclass];
293 mem[prevr].hh.v.RH = q;
297 if (tracing_paragraphs > 0) {
299 print_int(mem[passive].hh.v.LH);
300 print_string(": line ");
301 print_int(mem[q + 1].hh.v.LH - 1);
307 print_int(mem[q + 2].cint);
308 print_string(" -> @@");
309 if (mem[passive + 1].hh.v.LH == 0)
312 print_int(mem[mem[passive + 1].hh.v.LH].hh.v.LH);
316 minimal_demerits[fitclass]= 1073741823L; /* 2^30 - 1 */
317 } while(fitclass++ < for_end);
319 minimum_demerits = 1073741823L; /* 2^30 - 1 */
325 mem[q + 1].cint = cur_active_width[1] - break_width[1];
326 mem[q + 2].cint = cur_active_width[2] - break_width[2];
327 mem[q + 3].cint = cur_active_width[3] - break_width[3];
328 mem[q + 4].cint = cur_active_width[4] - break_width[4];
329 mem[q + 5].cint = cur_active_width[5] - break_width[5];
330 mem[q + 6].cint = cur_active_width[6] - break_width[6];
331 mem[prevr].hh.v.RH = q;
339 linewidth = second_width;
340 oldl = 262142L; /* 2^18 - 2 ? */
343 if (l > last_special_line)
344 linewidth = second_width;
345 else if (par_shape_ptr == 0)
346 linewidth = first_width;
348 linewidth = mem[par_shape_ptr + 2 * l].cint;
353 artificialdemerits = false;
354 shortfall = linewidth - cur_active_width[1]; /* linewidth may be ... */
356 if ((cur_active_width[3]!= 0) || (cur_active_width[4]!= 0) || (cur_active_width[5]!= 0)) {
360 if (shortfall > 7230584L)
361 if (cur_active_width[2]< 1663497L) {
366 b = badness(shortfall, cur_active_width[2]);
376 if (- (integer) shortfall > cur_active_width[6])
379 b = badness(- (integer) shortfall, cur_active_width[6]);
385 if ((b > 10000)||(pi == -10000)) {
386 if (final_pass && (minimum_demerits == 1073741823L) && /* 2^30 - 1 */
387 (mem[r].hh.v.RH == active) && (prevr == active))
388 artificialdemerits = true;
389 else if (b > threshold)
391 noderstaysactive = false;
396 noderstaysactive = true;
398 if (artificialdemerits)
401 d = line_penalty + b;
409 else if (pi > -10000)
411 if ((breaktype == 1) && (mem[r].hh.b0 == 1))
413 d = d + double_hyphen_demerits;
415 d = d + final_hyphen_demerits;
416 if (abs(toint(fitclass)- toint(mem[r].hh.b1)) > 1)
417 d = d + adj_demerits;
421 if (tracing_paragraphs > 0) {
422 if (printed_node != cur_p) {
425 short_display(mem[printed_node].hh.v.RH);
427 savelink = mem[cur_p].hh.v.RH;
428 mem[cur_p].hh.v.RH = 0;
430 short_display(mem[printed_node].hh.v.RH);
431 mem[cur_p].hh.v.RH = savelink;
433 printed_node = cur_p;
438 else if (mem[cur_p].hh.b0 != 10) {
439 if (mem[cur_p].hh.b0 == 12)
440 print_esc("penalty");
441 else if (mem[cur_p].hh.b0 == 7)
442 print_esc("discretionary");
443 else if (mem[cur_p].hh.b0 == 11)
448 print_string(" via @@");
449 if (mem[r + 1].hh.v.RH == 0)
452 print_int(mem[mem[r + 1].hh.v.RH].hh.v.LH);
460 if (artificialdemerits)
465 d = d + mem[r + 2].cint;
466 if (d <= minimal_demerits[fitclass]) {
467 minimal_demerits[fitclass]= d;
468 best_place[fitclass]= mem[r + 1].hh.v.RH;
469 best_pl_line[fitclass]= l;
470 if (d < minimum_demerits)
471 minimum_demerits = d;
473 if (noderstaysactive)
476 mem[prevr].hh.v.RH = mem[r].hh.v.RH;
478 if (prevr == active) {
479 r = mem[active].hh.v.RH;
480 if (mem[r].hh.b0 == 2) {
481 active_width[1] = active_width[1] + mem[r + 1].cint;
482 active_width[2] = active_width[2] + mem[r + 2].cint;
483 active_width[3] = active_width[3] + mem[r + 3].cint;
484 active_width[4] = active_width[4] + mem[r + 4].cint;
485 active_width[5] = active_width[5] + mem[r + 5].cint;
486 active_width[6] = active_width[6] + mem[r + 6].cint;
487 cur_active_width[1] = active_width[1];
488 cur_active_width[2] = active_width[2];
489 cur_active_width[3] = active_width[3];
490 cur_active_width[4] = active_width[4];
491 cur_active_width[5] = active_width[5];
492 cur_active_width[6] = active_width[6];
493 mem[active].hh.v.RH = mem[r].hh.v.RH;
496 } else if (mem[prevr].hh.b0 == 2) {
497 r = mem[prevr].hh.v.RH;
499 cur_active_width[1] = cur_active_width[1] - mem[prevr + 1].cint;
500 cur_active_width[2] = cur_active_width[2] - mem[prevr + 2].cint;
501 cur_active_width[3] = cur_active_width[3] - mem[prevr + 3].cint;
502 cur_active_width[4] = cur_active_width[4] - mem[prevr + 4].cint;
503 cur_active_width[5] = cur_active_width[5] - mem[prevr + 5].cint;
504 cur_active_width[6] = cur_active_width[6] - mem[prevr + 6].cint;
505 mem[prevprevr].hh.v.RH = active; /* prevprevr may be used ... */
508 } else if (mem[r].hh.b0 == 2) {
509 cur_active_width[1] = cur_active_width[1] + mem[r + 1].cint;
510 cur_active_width[2] = cur_active_width[2] + mem[r + 2].cint;
511 cur_active_width[3] = cur_active_width[3] + mem[r + 3].cint;
512 cur_active_width[4] = cur_active_width[4] + mem[r + 4].cint;
513 cur_active_width[5] = cur_active_width[5] + mem[r + 5].cint;
514 cur_active_width[6] = cur_active_width[6] + mem[r + 6].cint;
515 mem[prevr + 1].cint = mem[prevr + 1].cint + mem[r + 1].cint;
516 mem[prevr + 2].cint = mem[prevr + 2].cint + mem[r + 2].cint;
517 mem[prevr + 3].cint = mem[prevr + 3].cint + mem[r + 3].cint;
518 mem[prevr + 4].cint = mem[prevr + 4].cint + mem[r + 4].cint;
519 mem[prevr + 5].cint = mem[prevr + 5].cint + mem[r + 5].cint;
520 mem[prevr + 6].cint = mem[prevr + 6].cint + mem[r + 6].cint;
521 mem[prevr].hh.v.RH = mem[r].hh.v.RH;
530 if (cur_p == printed_node)
532 if (mem[cur_p].hh.b0 == 7) {
533 t = mem[cur_p].hh.b1;
536 printed_node = mem[printed_node].hh.v.RH;
540 /* must exit here, there are no internal return - except for confusion */
541 /* savedbadness = b; */ /* 96/Feb/9 - for test in itex.c */
543 /* end of the old tex5.c here */
544 void post_line_break_(integer finalwidowpenalty)
554 q = mem[best_bet + 1].hh.v.RH;
558 q = mem[q + 1].hh.v.LH;
559 mem[r + 1].hh.v.LH = cur_p;
562 curline = prev_graf + 1;
564 q = mem[cur_p + 1].hh.v.RH;
566 postdiscbreak = false;
568 if (mem[q].hh.b0 == 10) {
569 delete_glue_ref(mem[q + 1].hh.v.LH);
570 mem[q + 1].hh.v.LH = eqtb[(hash_size + 790)].hh.v.RH;
572 incr(mem[eqtb[(hash_size + 790)].hh.v.RH].hh.v.RH);
575 if (mem[q].hh.b0 == 7) {
588 flush_node_list(mem[q].hh.v.RH);
591 if (mem[q + 1].hh.v.RH != 0) {
592 s = mem[q + 1].hh.v.RH;
593 while (mem[s].hh.v.RH != 0)
596 r = mem[q + 1].hh.v.RH;
597 mem[q + 1].hh.v.RH = 0;
598 postdiscbreak = true;
600 if (mem[q + 1].hh.v.LH != 0) {
601 s = mem[q + 1].hh.v.LH;
603 while (mem[s].hh.v.RH != 0)
605 mem[q + 1].hh.v.LH = 0;
610 } else if ((mem[q].hh.b0 == 9)||(mem[q].hh.b0 == 11))
614 while (mem[q].hh.v.RH != 0)
617 r = new_param_glue(8);
618 mem[r].hh.v.RH = mem[q].hh.v.RH;
625 q = mem[temp_head].hh.v.RH;
626 mem[temp_head].hh.v.RH = r;
627 if (eqtb[(hash_size + 789)].hh.v.RH != 0) {
628 r = new_param_glue(7);
632 if (curline > last_special_line) {
633 curwidth = second_width;
634 curindent = second_indent;
635 } else if (par_shape_ptr == 0) {
636 curwidth = first_width;
637 curindent = first_indent;
639 curwidth = mem[par_shape_ptr + 2 * curline].cint;
640 curindent = mem[par_shape_ptr + 2 * curline - 1].cint;
642 adjust_tail = adjust_head;
643 just_box = hpack(q, curwidth, 0);
644 mem[just_box + 4].cint = curindent;
645 append_to_vlist(just_box);
646 /* if adjust_head<>adjust_tail then l.17346 */
647 if (adjust_head != adjust_tail) {
648 mem[tail].hh.v.RH = mem[adjust_head].hh.v.RH;
651 adjust_tail = 0; /* adjust_tail:=null */
652 if (curline + 1 != best_line) {
653 pen = inter_line_penalty;
654 if (curline == prev_graf + 1)
655 pen = pen + club_penalty;
656 if (curline + 2 == best_line)
657 pen = pen + finalwidowpenalty;
659 pen = pen + broken_penalty;
661 r = new_penalty(pen);
662 mem[tail].hh.v.RH = r;
667 cur_p = mem[cur_p + 1].hh.v.LH;
669 if (!postdiscbreak) {
673 if (q == mem[cur_p + 1].hh.v.RH)
675 if ((q >= hi_mem_min))
677 if ((mem[q].hh.b0 < 9))
679 /* change in tests here from 3.141 != 1 instead of == 2 */
680 if (mem[q].hh.b0 == 11)
681 if (mem[q].hh.b1 != 1)
686 if (r != temp_head) {
688 flush_node_list(mem[temp_head].hh.v.RH);
689 mem[temp_head].hh.v.RH = q;
692 } while(!(cur_p == 0));
693 if ((curline != best_line)||(mem[temp_head].hh.v.RH != 0)) {
695 return; // abort_flag set
697 prev_graf = best_line - 1;
699 /* Reconstitute ligatures during hyphenation pass */
700 small_number reconstitute_(small_number j, small_number n, halfword bchar, halfword hchar)
701 {/* 22 30 */ register small_number Result;
709 hyphen_passed = 0; /* paragraph 907 ? */
712 mem[hold_head].hh.v.RH = 0;
717 ligature_present = init_lig;
719 if (ligature_present)
721 /* while p>null do l.17772 */
722 /* while(p > 0){ */ /* NO! */
723 while(p != 0){ /* 94/Mar/22 BUG FIX */
725 /* append_charnode_to_t(character(p)); */
726 mem[t].hh.v.RH = get_avail();
729 mem[t].hh.b1 = mem[p].hh.b1;
731 p = mem[p].hh.v.RH; /* p:=link(p); */
734 else if (cur_l < 256)
736 mem[t].hh.v.RH = get_avail();
739 mem[t].hh.b1 = cur_l;
741 lig_stack = 0; /* lig_stack:=null; */
750 lab22: if (cur_l == 256) /* if cur_l = non_char then */
752 k = bchar_label[hf]; /* begin k:=bchar_label[hf]; */
753 /* if k=non_address then goto done@+else q:=font_info[k].qqqq; l.17812 */
754 /* if (k == font_mem_size) */
755 if (k == non_address) /* i.e. 0 --- 96/Jan/15 */
757 else q = font_info[k].qqqq;
760 q = font_info[char_base[hf]+ cur_l].qqqq;
763 k = lig_kern_base[hf]+ q.b3;
764 q = font_info[k].qqqq;
767 k = lig_kern_base[hf]+ 256 * q.b2 + q.b3 + 32768L - 256 *(128);
768 q = font_info[k].qqqq;
771 if (currh < 256) /* if cur_rh < non_char then test_char:=cur_rh */
773 else testchar = cur_r; /* else test_char:=cur_r; l.17817 */
774 /* loop@+begin if next_char(q)=test_char then if skip_byte(q)<=stop_flag then */
776 if (q.b1 == testchar)
778 if (currh < 256) /* if cur_rh<non_char then */
783 goto lab22; /* goto continue; */
785 else { /* else begin if hchar<non_char then if odd(hyf[j]) then */
792 if (q.b2 < 128) /* if op_byte(q)<kern_flag then */
794 // @<Carry out a ligature replacement, updating the cursor structure
795 // and possibly advancing~|j|; |goto continue| if the cursor doesn't
796 // advance, otherwise |goto done|@>; => l.17869
797 if (cur_l == 256) /* begin if cur_l=non_char then lft_hit:=true; */
800 if (lig_stack == 0)/* if lig_stack=null ? */
804 pause_for_instructions();
807 switch(q.b2) /* case op_byte(q) of */
812 ligature_present = true;
819 /* if lig_stack>null then character(lig_stack):=cur_r */
820 /* if (lig_stack > 0) */ /* 94/Mar/22 */
821 if (lig_stack != 0) /* line breaking?? */
822 mem[lig_stack].hh.b1 = cur_r; /* l.17877 ? */
824 lig_stack = new_lig_item(cur_r);
829 mem[lig_stack + 1].hh.v.RH = p;
830 mem[p].hh.b1 = hu[j + 1];
840 lig_stack = new_lig_item(cur_r);
841 mem[lig_stack].hh.v.RH = p;
847 if (ligature_present)
849 p = new_ligature(hf, cur_l, mem[cur_q].hh.v.RH);
859 } */ /* removed 99/Jan/6 */
860 mem[cur_q].hh.v.RH = p;
862 ligature_present = false;
866 ligature_present = true;
871 /* othercases begin cur_l:=rem_byte(q);
872 ligature_present:=true; {\.{=:}} l.17869 */
874 ligature_present = true;
875 /* if lig_stack>null then pop_lig_stack l.17870 => l.17828 */
876 /* if (lig_stack > 0)*/ /* 94/Mar/22 ??? */
877 if (lig_stack != 0) /* BUG FIX */
879 /* if (mem[lig_stack + 1].hh.v.RH > 0) */ /* 94/Mar/22 */
880 if (mem[lig_stack + 1].hh.v.RH != 0) /* l.17828 ? */
882 mem[t].hh.v.RH = mem[lig_stack + 1].hh.v.RH;
887 lig_stack = mem[p].hh.v.RH;
889 if (lig_stack == 0) /* if lig_stack=null ? */
898 else cur_r = mem[lig_stack].hh.b1;
905 mem[t].hh.v.RH = get_avail();
908 mem[t].hh.b1 = cur_r;
928 w = font_info[kern_base[hf]+ 256 * q.b2 + q.b3].cint;
940 q = font_info[k].qqqq;
943 if (ligature_present)
945 p = new_ligature(hf, cur_l, mem[cur_q].hh.v.RH);
952 if (lig_stack == 0) /* if lig_stack=null ? */
957 mem[cur_q].hh.v.RH = p;
959 ligature_present = false;
963 mem[t].hh.v.RH = new_kern(w);
967 /* if (lig_stack > 0)*/ /* 94/Mar/22 ??? l.17870 */
968 if (lig_stack != 0) /* l.17841 */
970 /* begin cur_q:=t; cur_l:=character(lig_stack);
971 ligature_present:=true; l.17842 */
973 cur_l = mem[lig_stack].hh.b1;
974 ligature_present = true;
976 /* pop_lig_stack; goto continue; l.17843 => l.17828 */
977 /* if (mem[lig_stack + 1].hh.v.RH > 0) *//* 94/Mar/22 */
978 if (mem[lig_stack + 1].hh.v.RH != 0) /* BUG FIX */
980 mem[t].hh.v.RH = mem[lig_stack + 1].hh.v.RH;
985 lig_stack = mem[p].hh.v.RH;
996 else cur_r = mem[lig_stack].hh.b1;
1003 /* #pragma optimize ("g", off) */ /* not needed for MSVC it seems ... */
1004 void hyphenate (void)
1005 {/* 50 30 40 41 42 45 10 */
1008 int l; /* 95/Jan/7 */
1011 halfword majortail, minortail;
1013 int c; /* 95/Jan/7 */
1015 /* integer rcount; */
1016 int rcount; /* 95/Jan/7 */
1024 register integer for_end;
1027 if (j <= for_end) do
1029 while(j++ < for_end);
1035 register integer for_end;
1038 if (j <= for_end) do
1039 /* h =(h + h + hc[j])% 607; */
1040 h =(h + h + hc[j])% hyphen_prime;
1041 while(j++ < for_end);
1049 if (length(k) == hn)
1054 if (str_pool[u]< hc[j])
1056 if (str_pool[u]> hc[j])
1062 while(s != 0){ /* while s<>null do l.18173 */
1064 hyf[mem[s].hh.v.LH]= 1;
1074 else h = hyphen_prime;
1077 if (trie_trc[cur_lang + 1]!= cur_lang)
1083 register integer for_end;
1085 for_end = hn - rhyf + 1;
1086 if (j <= for_end) do
1088 z = trie_trl[cur_lang + 1]+ hc[j];
1090 while(hc[l]== trie_trc[z]){
1091 if (trie_tro[z]!= min_trie_op)
1095 v = v + op_start[cur_lang];
1096 i = l - hyf_distance[v];
1097 if (hyf_num[v]> hyf[i])
1100 } while(!(v == min_trie_op));
1103 z = trie_trl[z]+ hc[l];
1106 while(j++ < for_end); }
1108 register integer for_end;
1111 if (j <= for_end) do
1113 while(j++ < for_end);
1116 register integer for_end;
1119 if (j <= for_end) do
1121 while(j++ < for_end);
1123 /* was j = 0; for_end = rhyf - 1; in 3.141 */
1125 register integer for_end;
1127 for_end = hn - rhyf;
1128 if (j <= for_end) do
1129 /* lost if (j <= for_end) do since 3.141 */
1132 while(j++ < for_end);
1136 q = mem[hb].hh.v.RH;
1137 mem[hb].hh.v.RH = 0;
1138 r = mem[ha].hh.v.RH;
1139 mem[ha].hh.v.RH = 0;
1141 if ((ha >= hi_mem_min))
1142 if (mem[ha].hh.b0 != hf)
1148 hu[0]= mem[ha].hh.b1;
1150 else if (mem[ha].hh.b0 == 6)
1151 if (mem[ha + 1].hh.b0 != hf)
1155 init_list = mem[ha + 1].hh.v.RH;
1157 init_lft =(mem[ha].hh.b1 > 1);
1158 hu[0]= mem[ha + 1].hh.b1;
1169 if (!(r >= hi_mem_min))
1170 if (mem[r].hh.b0 == 6)
1171 if (mem[r].hh.b1 > 1)
1179 while(mem[s].hh.v.RH != ha)s = mem[s].hh.v.RH;
1187 lab50: flush_node_list(r);
1190 j = reconstitute(j, hn, bchar, hyf_char)+ 1;
1191 if (hyphen_passed == 0)
1193 mem[s].hh.v.RH = mem[hold_head].hh.v.RH;
1194 /* while(mem[s].hh.v.RH > 0)*/ /* 94/Mar/22 */
1195 while(mem[s].hh.v.RH != 0) /* l.17903 */
1197 if (odd(hyf[j - 1]))
1200 hyphen_passed = j - 1;
1201 mem[hold_head].hh.v.RH = 0; /* link(hold_head):=null; */
1204 if (hyphen_passed > 0)
1207 mem[r].hh.v.RH = mem[hold_head].hh.v.RH;
1211 /* while link(major_tail)>null do advance_major_tail; l.17929 */
1212 /* while(mem[majortail].hh.v.RH > 0){ */ /* 94/Mar/22 */
1213 while(mem[majortail].hh.v.RH != 0){ /* ??? */
1215 majortail = mem[majortail].hh.v.RH;
1220 /* minor_tail:=null; pre_break(r):=null; l.17943 */
1222 mem[r + 1].hh.v.LH = 0;
1223 /* hyf_node:=new_character(hf,hyf_char); */
1224 hyfnode = new_character(hf, hyf_char);
1225 if (hyfnode != 0) /* if hyf_node<>null then */
1231 mem[hyfnode].hh.v.RH = avail;
1240 /* begin l:=reconstitute(l,i,font_bchar[hf],non_char)+1; l.17948 */
1241 l = reconstitute(l, i, font_bchar[hf], 256)+ 1;
1242 /* if link(hold_head)>null then l.17949 */
1243 /* if (mem[hold_head].hh.v.RH > 0)*/ /* 94/Mar/22 */
1244 if (mem[hold_head].hh.v.RH != 0) /* BUG FIX ??? */
1246 if (minortail == 0)/* if minor_tail=null then */
1247 mem[r + 1].hh.v.LH = mem[hold_head].hh.v.RH;
1248 else mem[minortail].hh.v.RH = mem[hold_head].hh.v.RH;
1249 minortail = mem[hold_head].hh.v.RH;
1250 /* while link(minor_tail)>null do minor_tail:=link(minor_tail); l.17953 */
1251 /* while(mem[minortail].hh.v.RH > 0)*/ /* 94/Mar/22 */
1252 while(mem[minortail].hh.v.RH != 0) /* BUG FIX */
1253 minortail = mem[minortail].hh.v.RH;
1256 if (hyfnode != 0) /* if hyf_node<>null then l.17956 */
1262 /* minor_tail:=null; post_break(r):=null; c_loc:=0; l.17964 */
1264 mem[r + 1].hh.v.RH = 0;
1266 /* if bchar_label[hf]<non_address then l.17991 3.1415 */
1267 /* if (bchar_label[hf]< font_mem_size) */
1268 /* if bchar_label[hf]<>non_address then l.17991 3.14159 */
1269 if (bchar_label[hf]!= non_address) /* i.e. 0 --- 96/Jan/15 */
1279 l = reconstitute(l, hn, bchar, 256)+ 1;
1282 hu[cloc]= c; /* c may be used ... */
1285 /* if link(hold_head)>null then l. l.17973 */
1286 /* if (mem[hold_head].hh.v.RH > 0) */ /* 94/Mar/22 ??? */
1287 if (mem[hold_head].hh.v.RH != 0) /* BUG FIX */
1289 if (minortail == 0)/* begin if minor_tail=null then */
1290 mem[r + 1].hh.v.RH = mem[hold_head].hh.v.RH;
1291 else mem[minortail].hh.v.RH = mem[hold_head].hh.v.RH;
1292 minortail = mem[hold_head].hh.v.RH;
1293 /* while link(minor_tail)>null do minor_tail:=link(minor_tail); l.17977 */
1294 /* while(mem[minortail].hh.v.RH > 0)*/ /* 94/Mar/22 */
1295 while(mem[minortail].hh.v.RH != 0) /* ??? */
1296 minortail = mem[minortail].hh.v.RH;
1301 j = reconstitute(j, hn, bchar, 256)+ 1;
1302 mem[majortail].hh.v.RH = mem[hold_head].hh.v.RH;
1303 /* while link(major_tail)>null do advance_major_tail; l.17987 */
1304 /* while(mem[majortail].hh.v.RH > 0){ */ /* 94/Mar/22 */
1305 while(mem[majortail].hh.v.RH != 0){ /* ??? */
1306 majortail = mem[majortail].hh.v.RH;
1313 mem[s].hh.v.RH = mem[r].hh.v.RH;
1314 mem[r].hh.v.RH = 0; /* link(r):=null */
1320 mem[r].hh.b1 = rcount;
1323 hyphen_passed = j - 1;
1324 mem[hold_head].hh.v.RH = 0; /* link(hold_head):=null; */
1325 } while(!(! odd(hyf[j - 1])));
1328 flush_list(init_list);
1330 /* #pragma optimize ("g", off) */ /* not needed for MSVC it seems ... */
1331 /* used only in itex.c */
1332 void new_hyph_exceptions (void)
1334 /* small_number n; */ /* in 3.141 */
1336 /* small_number j; */ /* in 3.141 */
1347 else if (language > 255)
1349 else cur_lang = language;
1356 lab21: switch(cur_cmd){
1372 if (eqtb[(hash_size + 2139) + cur_chr].hh.v.RH == 0)
1374 print_err("Not a letter");
1375 help2("Letters in \\hyphenation words must have \\lccode>0.",
1376 "Proceed; I'll ignore the character I just read.");
1382 hc[n]= eqtb[(hash_size + 2139) + cur_chr].hh.v.RH;
1402 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
1403 #ifdef ALLOCATESTRING
1404 if (pool_ptr + n > current_pool_size)
1405 /* str_pool = realloc_str_pool (increment_pool_size); */
1406 str_pool = realloc_str_pool (increment_pool_size + n);
1407 if (pool_ptr + n > current_pool_size){ /* in case it failed 94/Jan/24 */
1408 overflow("pool size", current_pool_size - init_pool_ptr); /* 97/Mar/7 */
1409 return; // abort_flag set
1412 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
1413 if (pool_ptr + n > pool_size){
1414 overflow("pool size", pool_size - init_pool_ptr); /* pool size */
1415 return; // abort_flag set
1421 register integer for_end;
1424 if (j <= for_end) do
1426 /* h =(h + h + hc[j])% 607; */
1427 h =(h + h + hc[j])% hyphen_prime;
1429 str_pool[pool_ptr]= hc[j];
1433 while(j++ < for_end);
1436 /* if (hyph_count == 607)*/
1437 if (hyph_count == hyphen_prime){
1438 /* overflow(942, 607); */
1439 overflow("exception dictionary", hyphen_prime); /* exception dictionary - NOT DYNAMIC */
1440 /* not dynamic ---- but can be set -e=... from command line in ini-TeX */
1441 return; // abort_flag set
1444 while (hyph_word[h]!= 0) {
1446 if (length(k) < length(s))
1448 if (length(k) > length(s))
1453 if (str_pool[u]< str_pool[v])
1455 if (str_pool[u]> str_pool[v])
1459 } while(!(u == str_start[k + 1]));
1460 lab40: q = hyph_list[h];
1470 else h = hyphen_prime;
1483 print_err("Improper ");
1484 print_esc("hyphenation");
1485 print_string("will be flushed");
1486 help2("Hyphenation exceptions must contain only letters",
1487 "and hyphens. But continue; I'll forgive and forget.");
1491 } /* end of switch */
1494 halfword prune_page_top_(halfword p)
1495 {register halfword Result;
1499 mem[temp_head].hh.v.RH = p;
1500 /* while p<>null do l.18803 */
1501 while(p != 0)switch(mem[p].hh.b0)
1506 q = new_skip_param(10);
1507 mem[prevp].hh.v.RH = q;
1509 if (mem[temp_ptr + 1].cint > mem[p + 3].cint)
1510 mem[temp_ptr + 1].cint = mem[temp_ptr + 1].cint - mem[p + 3]
1512 else mem[temp_ptr + 1].cint = 0;
1513 p = 0; /* p:=null */
1521 p = mem[prevp].hh.v.RH;
1531 mem[prevp].hh.v.RH = p;
1537 confusion("pruning");
1538 return 0; // abort_flag set
1542 Result = mem[temp_head].hh.v.RH;
1545 halfword vert_break_(halfword p, scaled h, scaled d)
1546 {/* 30 45 90 */ register halfword Result;
1552 halfword best_place;
1554 /* small_number t; */
1555 int t; /* 95/Jan/7 */
1557 leastcost = 1073741823L; /* 2^30 - 1 */
1566 if (p == 0) /* if p=null l.18879 */
1568 else switch(mem[p].hh.b0)
1573 active_width[1]= active_width[1]+ prevdp + mem[p + 3].cint;
1574 prevdp = mem[p + 2].cint;
1582 if ((mem[prevp].hh.b0 < 9))
1588 if (mem[p].hh.v.RH == 0)/* if link(p)=null l.18903 */
1590 else t = mem[mem[p].hh.v.RH].hh.b0;
1597 pi = mem[p + 1].cint;
1605 confusion("vertbreak");
1606 return 0; // abort_flag set
1610 if (pi < 10000) /* pi may be used ... */
1612 if (active_width[1]< h)
1613 if ((active_width[3]!= 0)||(active_width[4]!= 0)||(
1614 active_width[5]!= 0))
1616 else b = badness(h - active_width[1], active_width[2]);
1617 else if (active_width[1]- h > active_width[6])
1618 b = 1073741823L; /* 2^30 - 1 */
1619 else b = badness(active_width[1]- h, active_width[6]);
1620 if (b < 1073741823L) /* 2^30 - 1 */
1630 best_height_plus_depth = active_width[1]+ prevdp;
1632 if ((b == 1073741823L)||(pi <= -10000)) /* 2^30 - 1 */
1635 if ((mem[p].hh.b0 < 10)||(mem[p].hh.b0 > 11))
1637 lab90: if (mem[p].hh.b0 == 11)
1641 q = mem[p + 1].hh.v.LH;
1642 active_width[2 + mem[q].hh.b0]= active_width[2 + mem[q]
1643 .hh.b0]+ mem[q + 2].cint;
1644 active_width[6]= active_width[6]+ mem[q + 3].cint;
1645 if ((mem[q].hh.b1 != 0)&&(mem[q + 3].cint != 0))
1647 print_err("Infinite glue shrinkage found in box being split");
1648 help4("The box you are \\vsplitting contains some infinitely",
1649 "shrinkable glue, e.g., `\\vss' or `\\vskip 0pt minus 1fil'.",
1650 "Such glue doesn't belong there; but you can safely proceed,",
1651 "since the offensive shrinkability has been made finite.");
1656 mem[p + 1].hh.v.LH = r;
1660 active_width[1]= active_width[1]+ prevdp + mem[q + 1].cint;
1662 lab45: if (prevdp > d)
1664 active_width[1]= active_width[1]+ prevdp - d;
1668 p = mem[prevp].hh.v.RH;
1670 lab30: Result = best_place; /* best_place may be used ... */
1673 /* called only from tex7.c */
1674 halfword vsplit_(eight_bits n, scaled h)
1675 {/* 10 30 */ register halfword Result;
1679 v = eqtb[(hash_size + 1578) + n].hh.v.RH;
1680 if (cur_mark[3]!= 0)
1682 delete_token_ref(cur_mark[3]);
1684 delete_token_ref(cur_mark[4]);
1687 if (v == 0) /* if v=null then l.18999 */
1689 Result = 0; /* begin vsplit:=null; return; */
1692 if (mem[v].hh.b0 != 1)
1695 print_esc("vsplit");
1696 print_string("needs a ");
1698 help2("The box you are trying to split is an \\hbox.",
1699 "I can't split such a box, so I'll leave it alone.");
1704 q = vert_break(mem[v + 5].hh.v.RH, h, split_max_depth);
1705 p = mem[v + 5].hh.v.RH;
1707 mem[v + 5].hh.v.RH = 0;
1709 if (mem[p].hh.b0 == 4)
1710 if (cur_mark[3]== 0)
1712 cur_mark[3]= mem[p + 1].cint;
1713 cur_mark[4]= cur_mark[3];
1714 mem[cur_mark[3]].hh.v.LH = mem[cur_mark[3]].hh.v.LH + 2;
1717 delete_token_ref(cur_mark[4]);
1718 cur_mark[4]= mem[p + 1].cint;
1719 incr(mem[cur_mark[4]].hh.v.LH);
1721 if (mem[p].hh.v.RH == q)
1729 q = prune_page_top(q);
1730 p = mem[v + 5].hh.v.RH;
1732 if (q == 0) /* if q=null l.18993 */
1733 eqtb[(hash_size + 1578) + n].hh.v.RH = 0; /* then box(n):=null */
1734 else eqtb[(hash_size + 1578) + n].hh.v.RH =
1735 vpackage(q, 0, 1, 1073741823L); /* 2^30 - 1 */
1736 Result = vpackage(p, h, 0, split_max_depth);
1739 void print_totals (void)
1741 print_scaled(page_so_far[1]);
1742 if (page_so_far[2]!= 0)
1744 print_string(" plus ");
1745 print_scaled(page_so_far[2]);
1748 if (page_so_far[3]!= 0)
1750 print_string(" plus ");
1751 print_scaled(page_so_far[3]);
1752 print_string("fil");
1754 if (page_so_far[4]!= 0)
1756 print_string(" plus ");
1757 print_scaled(page_so_far[4]);
1758 print_string("fill");
1760 if (page_so_far[5]!= 0)
1762 print_string(" plus ");
1763 print_scaled(page_so_far[5]);
1764 print_string("filll");
1766 if (page_so_far[6]!= 0)
1768 print_string(" minus ");
1769 print_scaled(page_so_far[6]);
1772 void freeze_page_specs_(small_number s)
1775 page_so_far[0]= vsize;
1776 page_max_depth = max_depth;
1784 least_page_cost = 1073741823L; /* 2^30 - 1 */
1787 if (tracing_pages > 0)
1790 print_nl("might split"); /* */
1791 print_scaled(page_so_far[0]);
1792 print_string(", max depth=");
1793 print_scaled(page_max_depth);
1794 end_diagnostic(false);
1798 void box_error_(eight_bits n)
1802 print_nl("The following box has been deleted:"); /* */
1803 show_box(eqtb[(hash_size + 1578) + n].hh.v.RH);
1804 end_diagnostic(true);
1805 flush_node_list(eqtb[(hash_size + 1578) + n].hh.v.RH);
1806 eqtb[(hash_size + 1578) + n].hh.v.RH = 0;
1808 void ensure_vbox_(eight_bits n)
1811 p = eqtb[(hash_size + 1578) + n].hh.v.RH;
1812 if (p != 0) /* if p<>null then if type(p)=hlist_node then l.19324 */
1813 if (mem[p].hh.b0 == 0)
1815 print_err("Insertions can only be added to a vbox");
1816 help3("Tut tut: You're trying to \\insert into a",
1817 "\\box register that now contains an \\hbox.",
1818 "Proceed, and I'll discard its present contents.");
1822 /* called only from tex7.c */
1823 void fire_up_(halfword c)
1825 halfword p, q, r, s;
1827 /* unsigned char n; */
1828 unsigned int n; /* 95/Jan/7 */
1830 integer savevbadness;
1832 halfword savesplittopskip;
1833 if (mem[best_page_break].hh.b0 == 12)
1835 geq_word_define((hash_size + 3202), mem[best_page_break + 1].cint);
1836 mem[best_page_break + 1].cint = 10000;
1838 else geq_word_define((hash_size + 3202), 10000);
1839 if (cur_mark[2]!= 0)
1841 if (cur_mark[0]!= 0)
1842 delete_token_ref(cur_mark[0]);
1843 cur_mark[0]= cur_mark[2];
1844 incr(mem[cur_mark[0]].hh.v.LH);
1845 delete_token_ref(cur_mark[1]);
1848 if (c == best_page_break)
1849 best_page_break = 0;
1850 if (eqtb[(hash_size + 1833)].hh.v.RH != 0)
1854 print_string("255 is not void");
1855 help2("You shouldn't use \\box255 except in \\output routines.",
1856 "Proceed, and I'll discard its present contents.");
1859 insert_penalties = 0;
1860 savesplittopskip = eqtb[(hash_size + 792)].hh.v.RH;
1861 if (holding_inserts <= 0)
1863 r = mem[mem_top].hh.v.RH;
1864 while(r != mem_top){
1866 if (mem[r + 2].hh.v.LH != 0)
1870 /* if box(n)=null then box(n):=new_null_box; l.19759 */
1871 if (eqtb[(hash_size + 1578) + n].hh.v.RH == 0)
1872 eqtb[(hash_size + 1578) + n].hh.v.RH = new_null_box();
1873 p = eqtb[(hash_size + 1578) + n].hh.v.RH + 5;
1874 while(mem[p].hh.v.RH != 0)p = mem[p].hh.v.RH;
1875 mem[r + 2].hh.v.RH = p;
1883 p = mem[prevp].hh.v.RH;
1884 while(p != best_page_break){
1886 if (mem[p].hh.b0 == 3)
1888 if (holding_inserts <= 0)
1890 r = mem[mem_top].hh.v.RH;
1891 while(mem[r].hh.b1 != mem[p].hh.b1)r = mem[r].hh.v.RH
1893 /* if best_ins_ptr(r)=null then wait:=true l.19783 */
1894 if (mem[r + 2].hh.v.LH == 0)
1899 s = mem[r + 2].hh.v.RH;
1900 mem[s].hh.v.RH = mem[p + 4].hh.v.LH;
1901 if (mem[r + 2].hh.v.LH == p)
1903 if (mem[r].hh.b0 == 1)
1904 if ((mem[r + 1].hh.v.LH == p)&&(mem[r + 1].hh.v.RH
1907 while(mem[s].hh.v.RH != mem[r + 1].hh.v.RH)s = mem
1910 eqtb[(hash_size + 792)].hh.v.RH = mem[p + 4].hh.v.RH;
1911 mem[p + 4].hh.v.LH = prune_page_top(mem[r + 1].hh.v.RH
1913 if (mem[p + 4].hh.v.LH != 0)
1915 temp_ptr = vpackage(mem[p + 4].hh.v.LH, 0, 1,
1916 1073741823L); /* 2^30 - 1 */
1917 mem[p + 3].cint = mem[temp_ptr + 3].cint + mem[
1919 free_node(temp_ptr, 7);
1923 mem[r + 2].hh.v.LH = 0;
1925 temp_ptr = mem[eqtb[(hash_size + 1578) + n].hh.v.RH + 5].hh.v.RH;
1926 free_node(eqtb[(hash_size + 1578) + n].hh.v.RH, 7);
1927 eqtb[(hash_size + 1578) + n].hh.v.RH = vpackage(temp_ptr, 0, 1,
1928 1073741823L); /* 2^30 - 1 */
1932 while(mem[s].hh.v.RH != 0)s = mem[s].hh.v.RH;
1933 mem[r + 2].hh.v.RH = s;
1936 mem[prevp].hh.v.RH = mem[p].hh.v.RH;
1942 incr(insert_penalties);
1946 delete_glue_ref(mem[p + 4].hh.v.RH);
1952 else if (mem[p].hh.b0 == 4)
1954 if (cur_mark[1]== 0)
1956 cur_mark[1]= mem[p + 1].cint;
1957 incr(mem[cur_mark[1]].hh.v.LH);
1959 if (cur_mark[2]!= 0)
1960 delete_token_ref(cur_mark[2]);
1961 cur_mark[2]= mem[p + 1].cint;
1962 incr(mem[cur_mark[2]].hh.v.LH);
1965 p = mem[prevp].hh.v.RH;
1967 eqtb[(hash_size + 792)].hh.v.RH = savesplittopskip;
1968 if (p != 0) /* if p<>null then l.19730 */
1970 if (mem[contrib_head].hh.v.RH == 0)/* if link(contrib_head)=null then */
1973 else nest[0].tail_field = page_tail;
1974 mem[page_tail].hh.v.RH = mem[contrib_head].hh.v.RH;
1975 mem[contrib_head].hh.v.RH = p;
1976 mem[prevp].hh.v.RH = 0; /* link(prev_p):=null; */
1978 savevbadness = vbadness;
1980 savevfuzz = eqtb[(hash_size + 3739)].cint;
1981 eqtb[(hash_size + 3739)].cint = 1073741823L; /* 2^30 - 1 */
1982 eqtb[(hash_size + 1833)].hh.v.RH = vpackage(mem[page_head].hh.v.RH,
1983 best_size, 0, page_max_depth);
1984 vbadness = savevbadness;
1985 eqtb[(hash_size + 3739)].cint = savevfuzz;
1986 /* if (last_glue != 262143L) */
1987 if (last_glue != empty_flag)
1988 delete_glue_ref(last_glue);
1990 page_tail = page_head;
1991 mem[page_head].hh.v.RH = 0;
1992 /* last_glue = 262143L; */
1993 last_glue = empty_flag;
2000 mem[page_head].hh.v.RH = mem[hold_head].hh.v.RH;
2003 r = mem[mem_top].hh.v.RH;
2004 while(r != mem_top){
2010 mem[mem_top].hh.v.RH = mem_top;
2011 /* if (top_mark<>null)and(first_mark=null) then l.19654 */
2012 if ((cur_mark[0]!= 0)&&(cur_mark[1]== 0))
2014 cur_mark[1]= cur_mark[0];
2015 incr(mem[cur_mark[0]].hh.v.LH);
2017 /* if output_routine<>null then */
2018 if (output_routine != 0)
2019 if (dead_cycles >= max_dead_cycles)
2021 print_err("Output loop---");
2022 print_int(dead_cycles);
2023 print_string(" consecutive dead cycles");
2024 help3("I've concluded that your \\output is awry; it never does",
2025 "\\ship_out, so I'm shipping \box255 out myself. Next ",
2026 "increase \\maxdeadcycles if you want me to be more patient!");
2030 output_active = true;
2034 cur_list.aux_field.cint = ignore_depth;
2035 mode_line = - (integer) line;
2036 begin_token_list(output_routine, 6); /* output */
2043 if (mem[page_head].hh.v.RH != 0)
2045 if (mem[contrib_head].hh.v.RH == 0)
2048 else nest[0].tail_field = page_tail;
2049 else mem[page_tail].hh.v.RH = mem[contrib_head].hh.v.RH;
2050 mem[contrib_head].hh.v.RH = mem[page_head].hh.v.RH;
2051 mem[page_head].hh.v.RH = 0;
2052 page_tail = page_head;
2054 ship_out(eqtb[(hash_size + 1833)].hh.v.RH);
2055 eqtb[(hash_size + 1833)].hh.v.RH = 0;
2058 /* used to continue here with build_page etc in tex6.c */