6 #pragma warning(disable:4115) // kill rpcasync.h complaint
8 #define MYLIBAPI __declspec(dllexport)
13 #pragma warning(disable:4996)
14 #pragma warning(disable:4131) // old style declarator
15 #pragma warning(disable:4135) // conversion between different integral types
16 #pragma warning(disable:4127) // conditional expression is constant
24 #pragma warning(disable:4244) /* 96/Jan/10 */
26 /* #pragma optimize("a", off) */ /* 98/Dec/10 experiment */
28 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
30 void char_warning_(internal_font_number f, eight_bits c)
32 if(eqtb[(hash_size + 3198)].cint > 0)
34 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
35 if (show_missing == 0) /* show on screen 94/June/10 */
36 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
38 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
39 if (show_missing) { /* add ! before 94/June/10 */
40 print_nl(262); /* ! */
41 print(819); /* Missing character: there is no */
44 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
45 print_nl(819); /* Missing character: there is no */
47 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
48 if (show_numeric) { /* bkph 93/Dec/21 */
52 print_char(48 + c / 100);
54 c = c - (c / 100) * 100; /* ? */
55 print_char(48 + c / 10);
59 c = c - (c / 100) * 100; /* ? */
60 if (c / 10 > 0) print_char(48 + c / 10);
62 print_char(48 + c % 10);
66 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
67 print(820); /* in font */
68 slow_print(font_name[f]);
69 print_char(33); /* ! */
70 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
71 /* if (show_missing) show_context(); */ /* in tex2.c 94/June/10 */
73 if (f != 0) show_context(); /* not if its the nullfont */
75 if (show_missing == 0) /* show on screen 94/June/10 */
76 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
77 end_diagnostic(false);
78 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
79 missing_characters++; /* bkph 93/Dec/16 */
80 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
83 halfword new_character_(internal_font_number f, eight_bits c)
84 {/* 10 */ register halfword Result;
88 if((font_info[char_base[f]+ c].qqqq.b0 > 0))
91 /* long to unsigned short ... */
97 char_warning(f, c); /* char_warning(f,c); l.11283 */
98 Result = 0; /* new_character:=null */
101 /* following needs access to dvi_buf=zdvibuf see coerce.h */
104 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
107 sprintf(log_line, "dvi_swap %d", dvi_gone);
108 show_line(log_line, 0);
110 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
111 if(dvi_limit == dvi_buf_size) {
112 writedvi(0, half_buf - 1);
113 dvi_limit = half_buf;
114 dvi_offset = dvi_offset + dvi_buf_size;
118 writedvi(half_buf, dvi_buf_size - 1);
119 dvi_limit = dvi_buf_size;
121 dvi_gone = dvi_gone + half_buf;
123 /* following needs access to dvi_buf=zdvibuf see coerce.h */
124 void dvi_four_(integer x) /* attempt at speeding up bkph - is compiler smart ? */
128 /* dvi_buf[dvi_ptr]= x / 16777216L; */ /* 2^24 */
129 /* dvi_buf[dvi_ptr]=(x >> 24); */
130 dvi_buf[dvi_ptr]= (unsigned char)(x >> 24);
132 if(dvi_ptr == dvi_limit)dvi_swap ();
135 x = x + 1073741824L; /* 2^30 40000000 hex */
138 /* dvi_buf[dvi_ptr]=(x / 16777216L)+ 128; */ /* 2^24 */
139 dvi_buf[dvi_ptr]=(x >> 24)+ 128; /* set sign bit */
141 if(dvi_ptr == dvi_limit)dvi_swap ();
144 /* x = x % 16777216L; */ /* % 2^24 */
147 /* dvi_buf[dvi_ptr]= x / 65536L; */
148 /* dvi_buf[dvi_ptr]=(x >> 16); */
149 dvi_buf[dvi_ptr]= (unsigned char)(x >> 16);
151 if(dvi_ptr == dvi_limit)dvi_swap ();
153 /* x = x % 65536L; */ /* % 2^16 */
156 /* dvi_buf[dvi_ptr]= x / 256; */
157 /* dvi_buf[dvi_ptr]=(x >> 8); */
158 dvi_buf[dvi_ptr]= (unsigned char)(x >> 8);
160 if(dvi_ptr == dvi_limit)dvi_swap ();
163 /* dvi_buf[dvi_ptr]= x % 256; */ /* % 2^8 */
164 dvi_buf[dvi_ptr]= x & 255;
166 if(dvi_ptr == dvi_limit)dvi_swap ();
169 /* following needs access to dvi_buf=zdvibuf see coerce.h */
170 void zdvipop(integer l)
172 if((l == dvi_offset + dvi_ptr)&&(dvi_ptr > 0))
176 dvi_buf[dvi_ptr]= 142;
178 if(dvi_ptr == dvi_limit)dvi_swap ();
181 /* following needs access to dvi_buf=zdvibuf see coerce.h */
182 void dvi_font_def_(internal_font_number f)
185 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
189 dvi_buf[dvi_ptr]= 243;
191 if(dvi_ptr == dvi_limit)dvi_swap ();
194 dvi_buf[dvi_ptr]= f - 1;
196 if(dvi_ptr == dvi_limit)dvi_swap ();
201 dvi_buf[dvi_ptr]= 244;
203 if(dvi_ptr == dvi_limit)dvi_swap ();
206 dvi_buf[dvi_ptr]= (f - 1) >> 8; /* top byte */
208 if(dvi_ptr == dvi_limit)dvi_swap ();
211 dvi_buf[dvi_ptr]= (f - 1) & 255; /* bottom byte */
213 if(dvi_ptr == dvi_limit)dvi_swap ();
218 dvi_buf[dvi_ptr]= 243;
220 if(dvi_ptr == dvi_limit)dvi_swap ();
223 dvi_buf[dvi_ptr]= f - 1;
225 if(dvi_ptr == dvi_limit)dvi_swap ();
228 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
229 /* spit out the font checksum now */
231 dvi_buf[dvi_ptr]= font_check[f].b0;
233 if(dvi_ptr == dvi_limit)dvi_swap ();
236 dvi_buf[dvi_ptr]= font_check[f].b1;
238 if(dvi_ptr == dvi_limit)dvi_swap ();
241 dvi_buf[dvi_ptr]= font_check[f].b2;
243 if(dvi_ptr == dvi_limit)dvi_swap ();
246 dvi_buf[dvi_ptr]= font_check[f].b3;
248 if(dvi_ptr == dvi_limit)dvi_swap ();
250 dvi_four(font_size[f]);
251 dvi_four(font_dsize[f]);
253 /* long to unsigned char ... */
255 (str_start[font_area[f]+ 1]- str_start[font_area[f]]);
257 if(dvi_ptr == dvi_limit)dvi_swap ();
260 /* long to unsigned char ... */
262 (str_start[font_name[f]+ 1]- str_start[font_name[f]]);
264 if(dvi_ptr == dvi_limit)dvi_swap ();
267 register integer for_end;
268 k = str_start[font_area[f]];
269 for_end = str_start[font_area[f]+ 1]- 1;
272 dvi_buf[dvi_ptr]= str_pool[k];
274 if(dvi_ptr == dvi_limit)dvi_swap ();
276 while(k++ < for_end);
279 register integer for_end;
280 k = str_start[font_name[f]];
281 for_end = str_start[font_name[f]+ 1]- 1;
284 dvi_buf[dvi_ptr]= str_pool[k];
286 if(dvi_ptr == dvi_limit)dvi_swap ();
288 while(k++ < for_end);
291 /* following needs access to dvi_buf=zdvibuf see coerce.h */
292 void zmovement(scaled w, eight_bits o)
299 mem[q + 2].cint = dvi_offset + dvi_ptr;
300 if(o == 157) /* 157 == down1 */
302 mem[q].hh.v.RH = down_ptr;
305 else { /* 143 == right1 */
307 mem[q].hh.v.RH = right_ptr;
312 while(p != 0){ /* while p<>null do l.12153 */
314 if(mem[p + 1].cint == w)
315 switch(mstate + mem[p].hh.v.LH)
320 if(mem[p + 2].cint < dvi_gone)
324 k = mem[p + 2].cint - dvi_offset;
326 k = k + dvi_buf_size;
327 dvi_buf[k]= dvi_buf[k]+ 5;
335 if(mem[p + 2].cint < dvi_gone)
339 k = mem[p + 2].cint - dvi_offset;
341 k = k + dvi_buf_size;
342 dvi_buf[k]= dvi_buf[k]+ 10;
357 else switch(mstate + mem[p].hh.v.LH)
376 if(abs(w)>= 8388608L) /* 2^23 */
379 dvi_buf[dvi_ptr]= o + 3;
381 if(dvi_ptr == dvi_limit)dvi_swap ();
389 dvi_buf[dvi_ptr]= o + 2;
391 if(dvi_ptr == dvi_limit)dvi_swap ();
394 w = w + 16777216L; /* 2^24 */
396 /* dvi_buf[dvi_ptr]= w / 65536L; */
397 /* dvi_buf[dvi_ptr]=(w >> 16); */
398 dvi_buf[dvi_ptr]= (unsigned char)(w >> 16);
400 if(dvi_ptr == dvi_limit)dvi_swap ();
402 /* w = w % 65536L; */
409 dvi_buf[dvi_ptr]= o + 1;
411 if(dvi_ptr == dvi_limit)dvi_swap ();
420 if(dvi_ptr == dvi_limit)dvi_swap ();
427 /* dvi_buf[dvi_ptr]= w / 256; */
428 /* dvi_buf[dvi_ptr]=(w >> 8); */
429 dvi_buf[dvi_ptr]= (unsigned char)(w >> 8);
431 if(dvi_ptr == dvi_limit)dvi_swap ();
435 /* dvi_buf[dvi_ptr]= w % 256; */
436 dvi_buf[dvi_ptr]= w & 255;
438 if(dvi_ptr == dvi_limit)dvi_swap ();
441 lab40: mem[q].hh.v.LH = mem[p].hh.v.LH;
442 if(mem[q].hh.v.LH == 1)
445 dvi_buf[dvi_ptr]= o + 4;
447 if(dvi_ptr == dvi_limit)dvi_swap ();
449 while(mem[q].hh.v.RH != p){
452 switch(mem[q].hh.v.LH)
468 dvi_buf[dvi_ptr]= o + 9;
470 if(dvi_ptr == dvi_limit)dvi_swap ();
472 while(mem[q].hh.v.RH != p){
475 switch(mem[q].hh.v.LH)
489 void prune_movements_(integer l)
492 while(down_ptr != 0){ /* while down_ptr<>null do l.12206 */
494 if(mem[down_ptr + 2].cint < l)
497 down_ptr = mem[p].hh.v.RH;
500 lab30: while(right_ptr != 0){ /* done: while right_ptr<>null do */
502 if(mem[right_ptr + 2].cint < l)
505 right_ptr = mem[p].hh.v.RH;
509 /* following needs access to dvi_buf=zdvibuf see coerce.h */
510 void special_out_(halfword p)
516 movement(cur_h - dvi_h, 143); /* 143 == right1 */
521 movement(cur_v - dvi_v, 157); /* 157 == down1 */
524 old_setting = selector;
526 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
527 /* About output \special{...} make some space in string pool 97/Mar/9 */
528 #ifdef ALLOCATESTRING
529 if(pool_ptr + 32000 > current_pool_size)
530 str_pool = realloc_str_pool (increment_pool_size);
531 /* We don't bother to check whether this worked - will catch later */
533 /* Potential problem here if current_pool_size is not much more than pool_ptr! */
534 /* Fixed 97/Mar/9 in version 2.0.3 */
535 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
536 #ifdef ALLOCATESTRING
537 /* show_token_list(mem[mem[p + 1].hh.v.RH].hh.v.RH, 0,
538 current_pool_size - pool_ptr); */
539 show_token_list(mem[mem[p + 1].hh.v.RH].hh.v.RH, 0,
541 /* Above is safe, since print/print_char/print_esc will extend string space */
543 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
544 show_token_list(mem[mem[p + 1].hh.v.RH].hh.v.RH, 0,
545 pool_size - pool_ptr);
548 selector = old_setting;
550 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
551 /* str_room(1) - is there space for one more character in string pool ? */
552 #ifdef ALLOCATESTRING
553 if(pool_ptr + 1 > current_pool_size)
554 str_pool = realloc_str_pool (increment_pool_size);
555 if(pool_ptr + 1 > current_pool_size) { /* in case it failed 94/Jan/24 */
556 overflow(257, current_pool_size - init_pool_ptr); /* 97/Mar/7 */
557 return; // abort_flag set
560 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
561 if(pool_ptr + 1 > pool_size){
562 overflow(257, pool_size - init_pool_ptr); /* pool size */
563 return; // abort_flag set
567 if((pool_ptr - str_start[str_ptr])< 256) /* can use xxx1 ? */
570 dvi_buf[dvi_ptr]= 239; /* xxx1 */
572 if(dvi_ptr == dvi_limit)dvi_swap ();
575 /* long to unsigned char ... */
576 dvi_buf[dvi_ptr]=(pool_ptr - str_start[str_ptr]);
578 if(dvi_ptr == dvi_limit)dvi_swap ();
581 else { /* use xxx4 instead */
584 dvi_buf[dvi_ptr]= 242; /* xxx4 */
586 if(dvi_ptr == dvi_limit)dvi_swap ();
588 dvi_four((pool_ptr - str_start[str_ptr]));
592 /* debugging code for \special{src: ... } 98/Nov/11 */
594 int k = str_start[str_ptr];
597 if (str_pool [k] == 's' &&
598 str_pool [k+1] == 'r' &&
599 str_pool [k+2] == 'c' &&
600 str_pool [k+3] == ':') { /* \special{src: ... } */
604 *s++ = str_pool[k++];
608 show_line(log_line, 0)
612 if (cur_input.name_field > 17) { /* redundant ? */
613 print(cur_input.name_field);
614 print_char(40); /*(*/
615 print_int(line); /* line number */
616 print_char(41); /*)*/
617 print_char(32); /* */
618 print_char(58); /* : */
629 register integer for_end;
630 k = str_start[str_ptr];
631 for_end = pool_ptr - 1;
634 dvi_buf[dvi_ptr]= str_pool[k];
636 if(dvi_ptr == dvi_limit)dvi_swap ();
638 while(k++ < for_end);
640 pool_ptr = str_start[str_ptr];
642 /* noew returns -1 if it fails */
643 void write_out_(halfword p)
646 /* integer oldmode; */
647 int oldmode; /* 1995/Jan/7 */
648 /* small_number j; */
649 int j; /* 1995/Jan/7 */
651 /* q:=get_avail; info(q):=right_brace_token+"}";@/ */
653 mem[q].hh.v.LH = 637;
654 /* r:=get_avail; link(q):=r; info(r):=end_write_token; ins_list(q);@/ */
655 /* @d end_write_token==cs_token_flag+end_write */
658 /* mem[r].hh.v.LH = (hash_size + 4617); */
659 /* mem[r].hh.v.LH = (hash_size + 4095 + 522); */
660 mem[r].hh.v.LH = (hash_size + hash_extra + 4095 + 522);
661 begin_token_list(q, 4);
662 begin_token_list(mem[p + 1].hh.v.RH, 15);
664 mem[q].hh.v.LH = 379;
665 begin_token_list(q, 4);
669 q = scan_toks(false, true);
671 /* if(cur_tok != (hash_size + 4617)) */
672 /* if(cur_tok != (hash_size + 4095 + 522)) */
673 if(cur_tok != (hash_size + hash_extra + 4095 + 522))
675 print_err("Unbalanced write command");
678 help_line[1]= 1292; /* On this page there's a \write with fewer real {'s than }'s. */
679 help_line[0]= 1006; /* I can't handle that very well; good luck. */
684 /* } while(!(cur_tok == (hash_size + 4617))); */
685 /* } while(!(cur_tok == (hash_size + 4095 + 522))); */
686 } while(!(cur_tok == (hash_size + hash_extra + 4095 + 522))); /*1996/Jan/10*/
690 old_setting = selector;
691 j = mem[p + 1].hh.v.LH;
692 if(write_open[j])selector = j;
694 if((j == 17)&&(selector == 19))
701 selector = old_setting;
703 void out_what_(halfword p)
705 /* small_number j; */
706 int j; /* 1995/Jan/7 */
712 j = mem[p + 1].hh.v.LH;
713 if(mem[p].hh.b1 == 1){
718 (void) a_close(write_file[j]);
719 if(mem[p].hh.b1 == 2)
720 write_open[j]= false;
722 cur_name = mem[p + 1].hh.v.RH;
723 cur_area = mem[p + 2].hh.v.LH;
724 cur_ext = mem[p + 2].hh.v.RH;
725 if(cur_ext == 335) /* "" */
726 cur_ext = 785; /* => ".tex" */
727 pack_file_name(cur_name, cur_area, cur_ext);
728 while(! a_open_out(write_file[j])) {
729 prompt_file_name(1294, 785); /* output file name .tex */
744 confusion(1293); /* ext4 */
745 return; // abort_flag set
750 /* following needs access to dvi_buf=zdvibuf see coerce.h */
751 void hlist_out (void)
757 /* glue_ord gorder; */
758 int gorder; /* 95/Jan/7 */
760 int gsign; /* 95/Jan/7 */
766 bool outerdoingleaders;
768 /* ********************************************************************* */
769 real gluetemp; /* new in 3.14159 */
770 /* ********************************************************************* */
772 gorder = mem[thisbox + 5].hh.b1;
773 gsign = mem[thisbox + 5].hh.b0;
774 p = mem[thisbox + 5].hh.v.RH;
778 dvi_buf[dvi_ptr]= 141;
780 if(dvi_ptr == dvi_limit)dvi_swap ();
784 saveloc = dvi_offset + dvi_ptr;
787 /* while p<>null do l.12314 */
788 while(p != 0)lab21: if((p >= hi_mem_min))
792 movement(cur_h - dvi_h, 143); /* 143 == right1 */
797 movement(cur_v - dvi_v, 157); /* 157 == down1 */
811 { /* fnt_num_0 --- fnt_num_63 */
812 dvi_buf[dvi_ptr]= f + 170;
814 if(dvi_ptr == dvi_limit)dvi_swap ();
816 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
818 else if(f <= 256){ /* if we allow greater than 256 fonts */
820 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
821 else { /* normal TeX 82 case */
823 { /* fnt1 followed by f */
824 dvi_buf[dvi_ptr]= 235;
826 if(dvi_ptr == dvi_limit)dvi_swap ();
829 dvi_buf[dvi_ptr]= f - 1;
831 if(dvi_ptr == dvi_limit)dvi_swap ();
834 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
836 else { /* fnt2 followed by f / 256, f % 256 */
838 dvi_buf[dvi_ptr]= 236;
840 if(dvi_ptr == dvi_limit)dvi_swap ();
843 dvi_buf[dvi_ptr]= (f - 1) >> 8; /* top byte */
845 if(dvi_ptr == dvi_limit)dvi_swap ();
848 dvi_buf[dvi_ptr]= (f - 1) & 255; /* bottom byte */
850 if(dvi_ptr == dvi_limit)dvi_swap ();
854 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
859 dvi_buf[dvi_ptr]= 128;
861 if(dvi_ptr == dvi_limit)dvi_swap ();
866 if(dvi_ptr == dvi_limit)dvi_swap ();
868 cur_h = cur_h + font_info[width_base[f]+ font_info[char_base[f]+ c
871 } while(!(!(p >= hi_mem_min)));
879 /* if list_ptr(p)=null then cur_h:=cur_h+width(p) l.12371 */
880 if(mem[p + 5].hh.v.RH == 0)
881 cur_h = cur_h + mem[p + 1].cint;
886 cur_v = baseline + mem[p + 4].cint;
889 if(mem[p].hh.b0 == 1)vlist_out ();
893 cur_h = edge + mem[p + 1].cint;
899 rule_ht = mem[p + 3].cint;
900 rule_dp = mem[p + 2].cint;
901 rule_wd = mem[p + 1].cint;
910 g = mem[p + 1].hh.v.LH;
911 rule_wd = mem[g + 1].cint;
916 if(mem[g].hh.b0 == gorder)
917 /* *********************************************************************** */
918 /* rule_wd = rule_wd + round(mem[thisbox + 6].gr * mem[g + 2].cint); */
919 /* ******************** 3.14159 ******************************************* */
921 gluetemp = mem[thisbox + 6].gr * mem[g + 2].cint;
922 if(gluetemp > 1000000000.0)
923 gluetemp = 1000000000.0;
924 else if(gluetemp < -1000000000.0)
925 gluetemp = -1000000000.0;
926 rule_wd = rule_wd + round(gluetemp);
928 /* ************************************************************************* */
931 /* if(mem[g].hh.b1 == gorder)*/
932 /* rule_wd = rule_wd - round(mem[thisbox + 6].gr * mem[g + 3].cint); */
934 /* ******************** 3.14159 ******************************************* */
935 else if(mem[g].hh.b1 == gorder)
937 gluetemp = mem[thisbox + 6].gr * mem[g + 3].cint;
938 if(gluetemp > 1000000000.0)
939 gluetemp = 1000000000.0;
940 else if(gluetemp < -1000000000.0)
941 gluetemp = -1000000000.0;
942 rule_wd = rule_wd - round(gluetemp);
944 /* ************************************************************************* */
946 if(mem[p].hh.b1 >= 100)
948 leaderbox = mem[p + 1].hh.v.RH;
949 if(mem[leaderbox].hh.b0 == 2)
951 rule_ht = mem[leaderbox + 3].cint;
952 rule_dp = mem[leaderbox + 2].cint;
955 leaderwd = mem[leaderbox + 1].cint;
956 if((leaderwd > 0)&&(rule_wd > 0))
958 rule_wd = rule_wd + 10;
959 edge = cur_h + rule_wd;
961 if(mem[p].hh.b1 == 100)
964 cur_h = leftedge + leaderwd *((cur_h - leftedge)/ leaderwd)
967 cur_h = cur_h + leaderwd;
971 lq = rule_wd / leaderwd;
972 lr = rule_wd % leaderwd;
973 if(mem[p].hh.b1 == 101)
974 cur_h = cur_h +(lr / 2);
977 lx =(2 * lr + lq + 1)/(2 * lq + 2);
978 cur_h = cur_h +((lr -(lq - 1)* lx)/ 2);
981 while(cur_h + leaderwd <= edge){
983 cur_v = baseline + mem[leaderbox + 4].cint;
986 movement(cur_v - dvi_v, 157); /* 157 == down1 */
992 movement(cur_h - dvi_h, 143); /* 143 == right1 */
996 temp_ptr = leaderbox;
997 outerdoingleaders = doing_leaders;
998 doing_leaders = true;
999 if(mem[leaderbox].hh.b0 == 1)vlist_out ();
1001 doing_leaders = outerdoingleaders;
1004 /* ****************************************************************** */
1005 /* cur_v = saveh; */
1006 cur_v = baseline; /* changed in 3.1415 */
1007 /* ****************************************************************** */
1008 cur_h = saveh + leaderwd + lx;
1019 cur_h = cur_h + mem[p + 1].cint;
1023 mem[mem_top - 12]= mem[p + 1];
1024 mem[mem_top - 12].hh.v.RH = mem[p].hh.v.RH;
1034 lab14: if((rule_ht == -1073741824L)) /* - 2^30 */
1035 rule_ht = mem[thisbox + 3].cint;
1036 if((rule_dp == -1073741824L)) /* - 2^30 */
1037 rule_dp = mem[thisbox + 2].cint;
1038 rule_ht = rule_ht + rule_dp;
1039 if((rule_ht > 0)&&(rule_wd > 0))
1043 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1046 cur_v = baseline + rule_dp;
1049 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1053 dvi_buf[dvi_ptr]= 132;
1055 if(dvi_ptr == dvi_limit)dvi_swap ();
1060 dvi_h = dvi_h + rule_wd;
1062 lab13: cur_h = cur_h + rule_wd;
1063 lab15: p = mem[p].hh.v.RH;
1065 prune_movements(saveloc);
1070 /* following needs access to dvi_buf=zdvibuf see coerce.h */
1071 void vlist_out (void)
1075 scaled saveh, savev;
1077 /* glue_ord gorder; */
1078 int gorder; /* 95/Jan/7 */
1080 int gsign; /* 95/Jan/7 */
1086 bool outerdoingleaders;
1088 /* ************************************************************************ */
1089 real gluetemp; /* new in 3.14159 */
1090 /* ************************************************************************ */
1092 gorder = mem[thisbox + 5].hh.b1;
1093 gsign = mem[thisbox + 5].hh.b0;
1094 p = mem[thisbox + 5].hh.v.RH;
1098 dvi_buf[dvi_ptr]= 141;
1100 if(dvi_ptr == dvi_limit)dvi_swap ();
1102 if(cur_s > max_push)
1104 saveloc = dvi_offset + dvi_ptr;
1106 cur_v = cur_v - mem[thisbox + 3].cint;
1108 while(p != 0){ /* while p<>null do l.12494 OK */
1109 if((p >= hi_mem_min)) {
1110 confusion(822); /* vlist_out */
1111 return; // abort_flag set
1114 switch(mem[p].hh.b0)
1117 /* if list_ptr(p)=null then cur_v:=cur_v+height(p)+depth(p) l.12529 */
1118 if(mem[p + 5].hh.v.RH == 0)
1119 cur_v = cur_v + mem[p + 3].cint + mem[p + 2].cint;
1122 cur_v = cur_v + mem[p + 3].cint;
1125 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1130 cur_h = leftedge + mem[p + 4].cint;
1132 if(mem[p].hh.b0 == 1)vlist_out ();
1136 cur_v = savev + mem[p + 2].cint;
1142 rule_ht = mem[p + 3].cint;
1143 rule_dp = mem[p + 2].cint;
1144 rule_wd = mem[p + 1].cint;
1153 g = mem[p + 1].hh.v.LH;
1154 rule_ht = mem[g + 1].cint;
1159 if(mem[g].hh.b0 == gorder)
1160 /* ************************************************************************ */
1161 /* rule_ht = rule_ht + round(mem[thisbox + 6].gr * mem[g + 2].cint); */
1162 /* ************************ 3.14159 **************************************** */
1164 gluetemp = mem[thisbox + 6].gr * mem[g + 2].cint;
1165 if(gluetemp > 1000000000.0)
1166 gluetemp = 1000000000.0;
1167 else if(gluetemp < -1000000000.0)
1168 gluetemp = -1000000000.0;
1169 rule_ht = rule_ht + round(gluetemp);
1171 /* ************************************************************************* */
1173 /* ************************************************************************* */
1175 /* if(mem[g].hh.b1 == gorder) */
1176 /* rule_ht = rule_ht - round(mem[thisbox + 6].gr * mem[g + 3].cint); */
1178 else if(mem[g].hh.b1 == gorder) /* BUG FIX !!! */
1180 gluetemp = mem[thisbox + 6].gr * mem[g + 3].cint;
1181 if(gluetemp > 1000000000.0)
1182 gluetemp = 1000000000.0;
1183 else if(gluetemp < -1000000000.0)
1184 gluetemp = -1000000000.0;
1185 rule_ht = rule_ht - round(gluetemp);
1187 /* ************************************************************************* */
1189 if(mem[p].hh.b1 >= 100)
1191 leaderbox = mem[p + 1].hh.v.RH;
1192 if(mem[leaderbox].hh.b0 == 2)
1194 rule_wd = mem[leaderbox + 1].cint;
1198 leaderht = mem[leaderbox + 3].cint + mem[leaderbox + 2]
1200 if((leaderht > 0)&&(rule_ht > 0))
1202 rule_ht = rule_ht + 10;
1203 edge = cur_v + rule_ht;
1205 if(mem[p].hh.b1 == 100)
1208 cur_v = topedge + leaderht *((cur_v - topedge)/ leaderht)
1211 cur_v = cur_v + leaderht;
1215 lq = rule_ht / leaderht;
1216 lr = rule_ht % leaderht;
1217 if(mem[p].hh.b1 == 101)
1218 cur_v = cur_v +(lr / 2);
1221 lx =(2 * lr + lq + 1)/(2 * lq + 2);
1222 cur_v = cur_v +((lr -(lq - 1)* lx)/ 2);
1225 while(cur_v + leaderht <= edge){
1227 cur_h = leftedge + mem[leaderbox + 4].cint;
1230 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1234 cur_v = cur_v + mem[leaderbox + 3].cint;
1237 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1241 temp_ptr = leaderbox;
1242 outerdoingleaders = doing_leaders;
1243 doing_leaders = true;
1244 if(mem[leaderbox].hh.b0 == 1)vlist_out ();
1246 doing_leaders = outerdoingleaders;
1249 /* ************************************************************************ */
1250 /* cur_h = saveh; */
1251 cur_h = leftedge; /* 3.1415 */
1252 /* ************************************************************************ */
1253 cur_v = savev - mem[leaderbox + 3].cint + leaderht + lx;
1263 cur_v = cur_v + mem[p + 1].cint;
1270 lab14: if((rule_wd == -1073741824L)) /* -2^30 */
1271 rule_wd = mem[thisbox + 1].cint;
1272 rule_ht = rule_ht + rule_dp;
1273 cur_v = cur_v + rule_ht;
1274 if((rule_ht > 0)&&(rule_wd > 0))
1278 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1283 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1287 dvi_buf[dvi_ptr]= 137;
1289 if(dvi_ptr == dvi_limit)dvi_swap ();
1295 lab13: cur_v = cur_v + rule_ht;
1297 lab15: p = mem[p].hh.v.RH;
1299 prune_movements(saveloc);
1304 /* following needs access to dvi_buf=zdvibuf see coerce.h */
1305 void ship_out_(halfword p)
1311 if(eqtb[(hash_size + 3197)].cint > 0)
1313 print_nl(335); /* */
1315 print(823); /* Completed box being shipped out */
1317 if(term_offset > max_print_line - 9)
1319 else if((term_offset > 0)||(file_offset > 0))
1320 print_char(32); /* */
1321 print_char(91); /*[*/
1323 while((eqtb[(hash_size + 3218) + j].cint == 0)&&(j > 0)) decr(j);
1325 register integer for_end;
1330 print_int(eqtb[(hash_size + 3218) + k].cint);
1332 print_char(46); /* . */
1334 while(k++ < for_end);
1339 if(eqtb[(hash_size + 3197)].cint > 0)
1341 print_char(93); /*]*/
1342 begin_diagnostic ();
1344 end_diagnostic(true);
1346 if((mem[p + 3].cint > 1073741823L)|| /* 2^30 - 1 */
1347 (mem[p + 2].cint > 1073741823L)||
1348 (mem[p + 3].cint + mem[p + 2].cint +
1349 eqtb[(hash_size + 3749)].cint > 1073741823L)||
1350 (mem[p + 1].cint + eqtb[(hash_size + 3748)].cint > 1073741823L))
1352 print_err("Huge page cannot be shipped out");
1355 help_line[1]= 828; /* The page just created is more than 18 feet tall or */
1356 help_line[0]= 829; /* more than 18 feet wide, so I suspect something went wrong. */
1359 if(eqtb[(hash_size + 3197)].cint <= 0)
1361 begin_diagnostic ();
1362 print_nl(830); /* The following box has been deleted: */
1364 end_diagnostic(true);
1368 if(mem[p + 3].cint + mem[p + 2].cint + eqtb[(hash_size + 3749)].cint > max_v
1370 max_v = mem[p + 3].cint + mem[p + 2].cint + eqtb[(hash_size + 3749)].cint;
1371 if(mem[p + 1].cint + eqtb[(hash_size + 3748)].cint > max_h)
1372 max_h = mem[p + 1].cint + eqtb[(hash_size + 3748)].cint;
1375 cur_h = eqtb[(hash_size + 3748)].cint;
1377 if(output_file_name == 0)
1379 if(job_name == 0)open_log_file ();
1380 pack_job_name(788); /* .dvi */
1381 while(! b_open_out(dvi_file)) {
1382 prompt_file_name(789, 788); /* file name for output .dvi */
1384 output_file_name = b_make_name_string(dvi_file);
1387 if(total_pages == 0)
1390 dvi_buf[dvi_ptr]= 247;
1392 if(dvi_ptr == dvi_limit)dvi_swap ();
1395 dvi_buf[dvi_ptr]= 2;
1397 if(dvi_ptr == dvi_limit)dvi_swap ();
1399 dvi_four(25400000L); /* magic DVI scale factor */
1400 dvi_four(473628672L); /* 7227 * 65536 */
1402 dvi_four(eqtb[(hash_size + 3180)].cint);
1403 old_setting = selector;
1405 print(821); /* TeX output */
1406 print_int(eqtb[(hash_size + 3186)].cint);
1407 print_char(46); /* . */
1408 print_two(eqtb[(hash_size + 3185)].cint);
1409 print_char(46); /* . */
1410 print_two(eqtb[(hash_size + 3184)].cint);
1411 print_char(58); /* : */
1412 print_two(eqtb[(hash_size + 3183)].cint / 60);
1413 print_two(eqtb[(hash_size + 3183)].cint % 60);
1414 selector = old_setting;
1416 /* long to unsigned char ... */
1417 dvi_buf[dvi_ptr]=(pool_ptr - str_start[str_ptr]);
1419 if(dvi_ptr == dvi_limit)dvi_swap ();
1422 register integer for_end;
1423 s = str_start[str_ptr];
1424 for_end = pool_ptr - 1;
1427 dvi_buf[dvi_ptr]= str_pool[s];
1429 if(dvi_ptr == dvi_limit)dvi_swap ();
1431 while(s++ < for_end);
1433 pool_ptr = str_start[str_ptr];
1434 } // end of if total_pages == 0
1436 pageloc = dvi_offset + dvi_ptr;
1438 dvi_buf[dvi_ptr]= 139;
1440 if(dvi_ptr == dvi_limit)dvi_swap ();
1443 register integer for_end;
1447 dvi_four(eqtb[(hash_size + 3218) + k].cint);
1448 while(k++ < for_end);
1452 cur_v = mem[p + 3].cint + eqtb[(hash_size + 3749)].cint;
1454 if(mem[p].hh.b0 == 1)vlist_out ();
1457 dvi_buf[dvi_ptr]= 140;
1459 if(dvi_ptr == dvi_limit)dvi_swap ();
1464 if(eqtb[(hash_size + 3197)].cint <= 0)
1465 print_char(93); /*]*/
1472 if(eqtb[(hash_size + 3194)].cint > 1)
1474 print_nl(824); /* Memory usage before: */
1475 print_int(var_used);
1476 print_char(38); /* & */
1477 print_int(dyn_used);
1478 print_char(59); /*; */
1484 if(eqtb[(hash_size + 3194)].cint > 1)
1486 print(825); /* after */
1487 print_int(var_used);
1488 print_char(38); /* & */
1489 print_int(dyn_used);
1490 print(826); /* still utouched */
1491 print_int(hi_mem_min - lo_mem_max - 1); /* somewhat inaccurate free mem */
1496 void scan_spec_(group_code c, bool threecodes)
1501 s = save_stack[save_ptr + 0].cint;
1502 if(scan_keyword(836)) /* to */
1504 else if(scan_keyword(837)) /* spread */
1511 scan_dimen(false, false, false);
1512 lab40: if(threecodes)
1514 save_stack[save_ptr + 0].cint = s; /* s may be used without ... */
1517 save_stack[save_ptr + 0].cint = speccode;
1518 save_stack[save_ptr + 1].cint = cur_val;
1519 save_ptr = save_ptr + 2;
1523 halfword hpack_(halfword p, scaled w, small_number m)
1524 {/* 21 50 10 */ register halfword Result;
1531 int o; /* 95/Jan/7 */
1532 internal_font_number f;
1539 mem[r + 4].cint = 0;
1553 while(p != 0){ /* while p<>null do l.12862 */
1555 lab21: while((p >= hi_mem_min)) {
1558 i = font_info[char_base[f]+ mem[p].hh.b1].qqqq;
1560 x = x + font_info[width_base[f]+ i.b0].cint;
1561 s = font_info[height_base[f]+(hd)/ 16].cint;
1564 s = font_info[depth_base[f]+(hd)% 16].cint;
1569 if(p != 0) /* if p<>null then l.12886 */
1571 switch(mem[p].hh.b0)
1577 x = x + mem[p + 1].cint;
1578 if(mem[p].hh.b0 >= 2)
1580 else s = mem[p + 4].cint;
1581 if(mem[p + 3].cint - s > h)
1582 h = mem[p + 3].cint - s;
1583 if(mem[p + 2].cint + s > d)
1584 d = mem[p + 2].cint + s;
1590 /* if adjust_tail<>null then link(adjust_tail):=null; l.12865 / 12891 */
1591 if(adjust_tail != 0)
1593 while(mem[q].hh.v.RH != p)q = mem[q].hh.v.RH;
1594 if(mem[p].hh.b0 == 5)
1596 mem[adjust_tail].hh.v.RH = mem[p + 1].cint;
1597 while(mem[adjust_tail].hh.v.RH != 0)adjust_tail = mem[
1598 adjust_tail].hh.v.RH;
1600 free_node(mem[q].hh.v.RH, 2);
1604 mem[adjust_tail].hh.v.RH = p;
1617 g = mem[p + 1].hh.v.LH;
1618 x = x + mem[g + 1].cint;
1620 totalstretch[o]= totalstretch[o]+ mem[g + 2].cint;
1622 totalshrink[o]= totalshrink[o]+ mem[g + 3].cint;
1623 if(mem[p].hh.b1 >= 100)
1625 g = mem[p + 1].hh.v.RH;
1626 if(mem[g + 3].cint > h)
1627 h = mem[g + 3].cint;
1628 if(mem[g + 2].cint > d)
1629 d = mem[g + 2].cint;
1635 x = x + mem[p + 1].cint;
1639 mem[mem_top - 12]= mem[p + 1];
1640 mem[mem_top - 12].hh.v.RH = mem[p].hh.v.RH;
1652 if(adjust_tail != 0)
1653 mem[adjust_tail].hh.v.RH = 0;
1654 mem[r + 3].cint = h;
1655 mem[r + 2].cint = d;
1658 mem[r + 1].cint = w;
1662 mem[r + 5].hh.b0 = 0;
1663 mem[r + 5].hh.b1 = 0;
1664 mem[r + 6].gr = 0.0;
1669 if(totalstretch[3]!= 0)
1671 else if(totalstretch[2]!= 0)
1673 else if(totalstretch[1]!= 0)
1676 mem[r + 5].hh.b1 = o;
1677 mem[r + 5].hh.b0 = 1;
1678 /* if total_stretch[o]<>0 then glue_set(r):=... l.12982 */
1679 if(totalstretch[o]!= 0)
1680 mem[r + 6].gr = x / ((double) totalstretch[o]);
1683 mem[r + 5].hh.b0 = 0;
1684 mem[r + 6].gr = 0.0;
1686 /* if o=normal then if list_ptr(r)<>null then l.12987 */
1688 if(mem[r + 5].hh.v.RH != 0)
1690 last_badness = badness(x, totalstretch[0]);
1691 if(last_badness > eqtb[(hash_size + 3189)].cint)
1694 if(last_badness > 100)
1695 print_nl(838); /* Underfull */
1696 else print_nl(839); /* Loose */
1697 print(840); /* \hbox (badness */
1698 print_int(last_badness);
1699 if(last_badness > 100)underfull_hbox++; /* 1996/Feb/9 */
1707 if(totalshrink[3]!= 0)
1709 else if(totalshrink[2]!= 0)
1711 else if(totalshrink[1]!= 0)
1714 mem[r + 5].hh.b1 = o;
1715 mem[r + 5].hh.b0 = 2;
1716 if(totalshrink[o]!= 0)
1717 mem[r + 6].gr =(- (integer) x)/ ((double) totalshrink[o]);
1720 mem[r + 5].hh.b0 = 0;
1721 mem[r + 6].gr = 0.0;
1723 /* if (total_shrink[o]<-x)and(o=normal)and(list_ptr(r)<>null) then l.13946 */
1724 if((totalshrink[o]< - (integer) x)&&(o == 0)&&(mem[r + 5
1727 last_badness = 1000000L;
1728 /* set_glue_ratio_one(glue_set(r)); {use the maximum shrinkage} */
1729 mem[r + 6].gr = 1.0;
1730 /* if (-x-total_shrink[normal]>hfuzz)or(hbadness<100) then */
1731 if((- (integer) x - totalshrink[0]> eqtb[(hash_size + 3738)].cint)||(
1732 eqtb[(hash_size + 3189)].cint < 100))
1734 if((eqtb[(hash_size + 3746)].cint > 0)&&(- (integer) x - totalshrink[0
1735 ] > eqtb[(hash_size + 3738)].cint))
1737 while(mem[q].hh.v.RH != 0)q = mem[q].hh.v.RH;
1738 mem[q].hh.v.RH = new_rule ();
1739 mem[mem[q].hh.v.RH + 1].cint = eqtb[(hash_size + 3746)].cint;
1742 print_nl(846); /* Overfull \hbox(*/
1743 print_scaled(- (integer) x - totalshrink[0]);
1744 print(847); /* pt too wide */
1745 overfull_hbox++; /* 1996/Feb/9 */
1750 if(mem[r + 5].hh.v.RH != 0)
1752 last_badness = badness(- (integer) x, totalshrink[0]);
1753 if(last_badness > eqtb[(hash_size + 3189)].cint)
1756 print_nl(848); /* Tight \hbox (badness */
1757 print_int(last_badness);
1763 lab50: if(output_active)
1764 print(841); /*)has occurred while \output is active */
1767 if(pack_begin_line != 0)
1769 if(pack_begin_line > 0)
1770 print(842); /*)in paragraph at lines */
1771 else print(843); /*)in alignment at lines */
1772 print_int(abs(pack_begin_line));
1773 print(844); /* -- */
1775 else print(845); /*)detected at line */
1779 font_in_short_display = 0;
1780 short_display(mem[r + 5].hh.v.RH);
1782 begin_diagnostic ();
1784 end_diagnostic(true);
1788 halfword vpackage_(halfword p, scaled h, small_number m, scaled l)
1789 {/* 50 10 */ register halfword Result;
1795 int o; /* 95/Jan/7 */
1800 mem[r + 4].cint = 0;
1801 mem[r + 5].hh.v.RH = p;
1815 if((p >= hi_mem_min)) {
1816 confusion(849); /* vpack */
1817 return 0; // abort_flag set
1819 else switch(mem[p].hh.b0)
1825 x = x + d + mem[p + 3].cint;
1826 d = mem[p + 2].cint;
1827 if(mem[p].hh.b0 >= 2)
1829 else s = mem[p + 4].cint;
1830 if(mem[p + 1].cint + s > w)
1831 w = mem[p + 1].cint + s;
1841 g = mem[p + 1].hh.v.LH;
1842 x = x + mem[g + 1].cint;
1844 totalstretch[o]= totalstretch[o]+ mem[g + 2].cint;
1846 totalshrink[o]= totalshrink[o]+ mem[g + 3].cint;
1847 if(mem[p].hh.b1 >= 100)
1849 g = mem[p + 1].hh.v.RH;
1850 if(mem[g + 1].cint > w)
1851 w = mem[g + 1].cint;
1857 x = x + d + mem[p + 1].cint;
1867 mem[r + 1].cint = w;
1871 mem[r + 2].cint = l;
1873 else mem[r + 2].cint = d;
1876 mem[r + 3].cint = h;
1880 mem[r + 5].hh.b0 = 0;
1881 mem[r + 5].hh.b1 = 0;
1882 mem[r + 6].gr = 0.0;
1887 if(totalstretch[3]!= 0)
1889 else if(totalstretch[2]!= 0)
1891 else if(totalstretch[1]!= 0)
1894 mem[r + 5].hh.b1 = o;
1895 mem[r + 5].hh.b0 = 1;
1896 if(totalstretch[o]!= 0)
1897 mem[r + 6].gr = x / ((double) totalstretch[o]);
1900 mem[r + 5].hh.b0 = 0;
1901 mem[r + 6].gr = 0.0;
1904 if(mem[r + 5].hh.v.RH != 0)
1906 last_badness = badness(x, totalstretch[0]);
1907 if(last_badness > eqtb[(hash_size + 3190)].cint)
1910 if(last_badness > 100)
1911 print_nl(838); /* Underfull */
1912 else print_nl(839); /* Loose */
1913 print(850); /* \vbox (badness */
1914 print_int(last_badness);
1915 if(last_badness > 100)underfull_vbox++; /* 1996/Feb/9 */
1923 if(totalshrink[3]!= 0)
1925 else if(totalshrink[2]!= 0)
1927 else if(totalshrink[1]!= 0)
1930 mem[r + 5].hh.b1 = o;
1931 mem[r + 5].hh.b0 = 2;
1932 if(totalshrink[o]!= 0)
1933 mem[r + 6].gr =(- (integer) x)/ ((double) totalshrink[o]);
1936 mem[r + 5].hh.b0 = 0;
1937 mem[r + 6].gr = 0.0;
1939 /* if (total_shrink[o]<-x)and(o=normal)and(list_ptr(r)<>null) then l.13046 */
1940 if((totalshrink[o]< - (integer) x)&&(o == 0)&&(mem[r + 5
1943 last_badness = 1000000L;
1944 mem[r + 6].gr = 1.0;
1945 if((- (integer) x - totalshrink[0]> eqtb[(hash_size + 3739)].cint)||(
1946 eqtb[(hash_size + 3190)].cint < 100))
1949 print_nl(851); /* Overfull \vbox(*/
1950 print_scaled(- (integer) x - totalshrink[0]);
1951 print(852); /* pt too high */
1952 overfull_vbox++; /* 1996/Feb/9 */
1956 /* else if o=normal then if list_ptr(r)<>null then l.13052 */
1958 if(mem[r + 5].hh.v.RH != 0)
1960 last_badness = badness(- (integer) x, totalshrink[0]);
1961 if(last_badness > eqtb[(hash_size + 3190)].cint)
1964 print_nl(853); /* Tight \vbox (badness */
1965 print_int(last_badness);
1971 lab50: if(output_active)
1972 print(841); /*)has occurred while \output is active */
1975 if(pack_begin_line != 0)
1977 print(843); /*)in alignment at lines */
1978 print_int(abs(pack_begin_line));
1979 print(844); /* -- */
1981 else print(845); /*)detected at line */
1985 begin_diagnostic ();
1987 end_diagnostic(true);
1991 void append_to_vlist_(halfword b)
1995 if(cur_list.aux_field.cint > ignore_depth)
1997 d = mem[eqtb[(hash_size + 783)].hh.v.RH + 1].cint - cur_list.aux_field.cint -
1999 if(d < eqtb[(hash_size + 3732)].cint)
2000 p = new_param_glue(0);
2003 p = new_skip_param(1);
2004 mem[temp_ptr + 1].cint = d;
2006 mem[tail].hh.v.RH = p;
2009 mem[tail].hh.v.RH = b;
2011 cur_list.aux_field.cint = mem[b + 2].cint;
2013 halfword new_noad (void)
2014 {register halfword Result;
2019 mem[p + 1].hh = empty_field;
2020 mem[p + 3].hh = empty_field;
2021 mem[p + 2].hh = empty_field;
2025 halfword new_style_(small_number s)
2026 {register halfword Result;
2031 mem[p + 1].cint = 0;
2032 mem[p + 2].cint = 0;
2036 halfword new_choice (void)
2037 {register halfword Result;
2042 mem[p + 1].hh.v.LH = 0;
2043 mem[p + 1].hh.v.RH = 0;
2044 mem[p + 2].hh.v.LH = 0;
2045 mem[p + 2].hh.v.RH = 0;
2049 void show_info (void)
2051 show_node_list(mem[temp_ptr].hh.v.LH);
2053 halfword fraction_rule_(scaled t)
2054 {register halfword Result;
2057 mem[p + 3].cint = t;
2058 mem[p + 2].cint = 0;
2062 halfword overbar_(halfword b, scaled k, scaled t)
2063 {register halfword Result;
2067 q = fraction_rule(t);
2071 Result = vpackage(p, 0, 1, 1073741823L); /* 2^30 - 1 */
2074 halfword char_box_(internal_font_number f, quarterword c)
2075 {register halfword Result;
2079 q = font_info[char_base[f]+ c].qqqq;
2081 b = new_null_box ();
2082 mem[b + 1].cint = font_info[width_base[f]+ q.b0].cint + font_info
2083 [italic_base[f]+(q.b2)/ 4].cint;
2084 mem[b + 3].cint = font_info[height_base[f]+(hd)/ 16].cint;
2085 mem[b + 2].cint = font_info[depth_base[f]+(hd)% 16].cint;
2086 /* long to unsigned short ... */
2090 mem[b + 5].hh.v.RH = p;
2094 void stack_into_box_(halfword b, internal_font_number f, quarterword c)
2098 mem[p].hh.v.RH = mem[b + 5].hh.v.RH;
2099 mem[b + 5].hh.v.RH = p;
2100 mem[b + 3].cint = mem[p + 3].cint;
2102 scaled height_plus_depth_(internal_font_number f, fquarterword c)
2103 {register scaled Result;
2106 q = font_info[char_base[f]+ c].qqqq;
2108 Result = font_info[height_base[f]+(hd)/ 16].cint + font_info[
2109 depth_base[f]+(hd)% 16].cint;
2112 halfword var_delimiter_(halfword d, small_number s, scaled v)
2113 {/* 40 22 */ register halfword Result;
2115 internal_font_number f, g;
2116 quarterword c, x, y;
2123 /* small_number z; */
2124 int z; /* 95/Jan/7 */
2125 /* bool largeattempt; */
2126 int largeattempt; /* 95/Jan/7 */
2129 largeattempt = false;
2133 if((z != 0)||(x != 0))
2138 g = eqtb[(hash_size + 1835) + z].hh.v.RH;
2142 if((y >= font_bc[g])&&(y <= font_ec[g]))
2144 lab22: q = font_info[char_base[g]+ y].qqqq;
2154 u = font_info[height_base[g]+(hd)/ 16].cint + font_info
2155 [depth_base[g]+(hd)% 16].cint;
2176 largeattempt = true;
2181 if(((q.b2)% 4)== 3) /* q may be used without ... */
2183 b = new_null_box ();
2185 r = font_info[exten_base[f]+ q.b3].qqqq;
2187 u = height_plus_depth(f, c);
2189 q = font_info[char_base[f]+ c].qqqq;
2190 mem[b + 1].cint = font_info[width_base[f]+ q.b0].cint +
2191 font_info[italic_base[f]+(q.b2)/ 4].cint;
2194 w = w + height_plus_depth(f, c);
2197 w = w + height_plus_depth(f, c);
2200 w = w + height_plus_depth(f, c);
2212 stack_into_box(b, f, c);
2215 register integer for_end;
2219 stack_into_box(b, f, c);
2220 while(m++ < for_end);
2225 stack_into_box(b, f, c);
2228 register integer for_end;
2232 stack_into_box(b, f, c);
2233 while(m++ < for_end);
2238 stack_into_box(b, f, c);
2239 mem[b + 2].cint = w - mem[b + 3].cint;
2241 else b = char_box(f, c);
2242 else { /* c may be used without ... */
2243 b = new_null_box ();
2244 mem[b + 1].cint = eqtb[(hash_size + 3741)].cint;
2246 mem[b + 4].cint = half(mem[b + 3].cint - mem[b + 2].cint)-
2247 font_info[22 + param_base[eqtb[(hash_size + 1837) + s].hh.v.RH]].cint;
2251 /* rebox_ etc used to follow here in tex4.c */