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("! "); /* ! */
41 print_string("Missing character: there is no");
44 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
45 print_nl("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_string("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");
676 help2("On this page there's a \\write with fewer real {'s than }'s.",
677 "I can't handle that very well; good luck.");
681 /* } while(!(cur_tok == (hash_size + 4617))); */
682 /* } while(!(cur_tok == (hash_size + 4095 + 522))); */
683 } while(!(cur_tok == (hash_size + hash_extra + 4095 + 522))); /*1996/Jan/10*/
687 old_setting = selector;
688 j = mem[p + 1].hh.v.LH;
689 if(write_open[j])selector = j;
691 if((j == 17)&&(selector == 19))
698 selector = old_setting;
700 void out_what_(halfword p)
702 /* small_number j; */
703 int j; /* 1995/Jan/7 */
709 j = mem[p + 1].hh.v.LH;
710 if(mem[p].hh.b1 == 1){
715 (void) a_close(write_file[j]);
716 if(mem[p].hh.b1 == 2)
717 write_open[j]= false;
719 cur_name = mem[p + 1].hh.v.RH;
720 cur_area = mem[p + 2].hh.v.LH;
721 cur_ext = mem[p + 2].hh.v.RH;
722 if(cur_ext == 335) /* "" */
723 cur_ext = 785; /* => ".tex" */
724 pack_file_name(cur_name, cur_area, cur_ext);
725 while(! a_open_out(write_file[j])) {
726 prompt_file_name(1294, 785); /* output file name .tex */
741 confusion(1293); /* ext4 */
742 return; // abort_flag set
747 /* following needs access to dvi_buf=zdvibuf see coerce.h */
748 void hlist_out (void)
754 /* glue_ord gorder; */
755 int gorder; /* 95/Jan/7 */
757 int gsign; /* 95/Jan/7 */
763 bool outerdoingleaders;
765 /* ********************************************************************* */
766 real gluetemp; /* new in 3.14159 */
767 /* ********************************************************************* */
769 gorder = mem[thisbox + 5].hh.b1;
770 gsign = mem[thisbox + 5].hh.b0;
771 p = mem[thisbox + 5].hh.v.RH;
775 dvi_buf[dvi_ptr]= 141;
777 if(dvi_ptr == dvi_limit)dvi_swap ();
781 saveloc = dvi_offset + dvi_ptr;
784 /* while p<>null do l.12314 */
785 while(p != 0)lab21: if((p >= hi_mem_min))
789 movement(cur_h - dvi_h, 143); /* 143 == right1 */
794 movement(cur_v - dvi_v, 157); /* 157 == down1 */
808 { /* fnt_num_0 --- fnt_num_63 */
809 dvi_buf[dvi_ptr]= f + 170;
811 if(dvi_ptr == dvi_limit)dvi_swap ();
813 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
815 else if(f <= 256){ /* if we allow greater than 256 fonts */
817 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
818 else { /* normal TeX 82 case */
820 { /* fnt1 followed by f */
821 dvi_buf[dvi_ptr]= 235;
823 if(dvi_ptr == dvi_limit)dvi_swap ();
826 dvi_buf[dvi_ptr]= f - 1;
828 if(dvi_ptr == dvi_limit)dvi_swap ();
831 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
833 else { /* fnt2 followed by f / 256, f % 256 */
835 dvi_buf[dvi_ptr]= 236;
837 if(dvi_ptr == dvi_limit)dvi_swap ();
840 dvi_buf[dvi_ptr]= (f - 1) >> 8; /* top byte */
842 if(dvi_ptr == dvi_limit)dvi_swap ();
845 dvi_buf[dvi_ptr]= (f - 1) & 255; /* bottom byte */
847 if(dvi_ptr == dvi_limit)dvi_swap ();
851 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
856 dvi_buf[dvi_ptr]= 128;
858 if(dvi_ptr == dvi_limit)dvi_swap ();
863 if(dvi_ptr == dvi_limit)dvi_swap ();
865 cur_h = cur_h + font_info[width_base[f]+ font_info[char_base[f]+ c
868 } while(!(!(p >= hi_mem_min)));
876 /* if list_ptr(p)=null then cur_h:=cur_h+width(p) l.12371 */
877 if(mem[p + 5].hh.v.RH == 0)
878 cur_h = cur_h + mem[p + 1].cint;
883 cur_v = baseline + mem[p + 4].cint;
886 if(mem[p].hh.b0 == 1)vlist_out ();
890 cur_h = edge + mem[p + 1].cint;
896 rule_ht = mem[p + 3].cint;
897 rule_dp = mem[p + 2].cint;
898 rule_wd = mem[p + 1].cint;
907 g = mem[p + 1].hh.v.LH;
908 rule_wd = mem[g + 1].cint;
913 if(mem[g].hh.b0 == gorder)
914 /* *********************************************************************** */
915 /* rule_wd = rule_wd + round(mem[thisbox + 6].gr * mem[g + 2].cint); */
916 /* ******************** 3.14159 ******************************************* */
918 gluetemp = mem[thisbox + 6].gr * mem[g + 2].cint;
919 if(gluetemp > 1000000000.0)
920 gluetemp = 1000000000.0;
921 else if(gluetemp < -1000000000.0)
922 gluetemp = -1000000000.0;
923 rule_wd = rule_wd + round(gluetemp);
925 /* ************************************************************************* */
928 /* if(mem[g].hh.b1 == gorder)*/
929 /* rule_wd = rule_wd - round(mem[thisbox + 6].gr * mem[g + 3].cint); */
931 /* ******************** 3.14159 ******************************************* */
932 else if(mem[g].hh.b1 == gorder)
934 gluetemp = mem[thisbox + 6].gr * mem[g + 3].cint;
935 if(gluetemp > 1000000000.0)
936 gluetemp = 1000000000.0;
937 else if(gluetemp < -1000000000.0)
938 gluetemp = -1000000000.0;
939 rule_wd = rule_wd - round(gluetemp);
941 /* ************************************************************************* */
943 if(mem[p].hh.b1 >= 100)
945 leaderbox = mem[p + 1].hh.v.RH;
946 if(mem[leaderbox].hh.b0 == 2)
948 rule_ht = mem[leaderbox + 3].cint;
949 rule_dp = mem[leaderbox + 2].cint;
952 leaderwd = mem[leaderbox + 1].cint;
953 if((leaderwd > 0)&&(rule_wd > 0))
955 rule_wd = rule_wd + 10;
956 edge = cur_h + rule_wd;
958 if(mem[p].hh.b1 == 100)
961 cur_h = leftedge + leaderwd *((cur_h - leftedge)/ leaderwd)
964 cur_h = cur_h + leaderwd;
968 lq = rule_wd / leaderwd;
969 lr = rule_wd % leaderwd;
970 if(mem[p].hh.b1 == 101)
971 cur_h = cur_h +(lr / 2);
974 lx =(2 * lr + lq + 1)/(2 * lq + 2);
975 cur_h = cur_h +((lr -(lq - 1)* lx)/ 2);
978 while(cur_h + leaderwd <= edge){
980 cur_v = baseline + mem[leaderbox + 4].cint;
983 movement(cur_v - dvi_v, 157); /* 157 == down1 */
989 movement(cur_h - dvi_h, 143); /* 143 == right1 */
993 temp_ptr = leaderbox;
994 outerdoingleaders = doing_leaders;
995 doing_leaders = true;
996 if(mem[leaderbox].hh.b0 == 1)vlist_out ();
998 doing_leaders = outerdoingleaders;
1001 /* ****************************************************************** */
1002 /* cur_v = saveh; */
1003 cur_v = baseline; /* changed in 3.1415 */
1004 /* ****************************************************************** */
1005 cur_h = saveh + leaderwd + lx;
1016 cur_h = cur_h + mem[p + 1].cint;
1020 mem[mem_top - 12]= mem[p + 1];
1021 mem[mem_top - 12].hh.v.RH = mem[p].hh.v.RH;
1031 lab14: if((rule_ht == -1073741824L)) /* - 2^30 */
1032 rule_ht = mem[thisbox + 3].cint;
1033 if((rule_dp == -1073741824L)) /* - 2^30 */
1034 rule_dp = mem[thisbox + 2].cint;
1035 rule_ht = rule_ht + rule_dp;
1036 if((rule_ht > 0)&&(rule_wd > 0))
1040 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1043 cur_v = baseline + rule_dp;
1046 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1050 dvi_buf[dvi_ptr]= 132;
1052 if(dvi_ptr == dvi_limit)dvi_swap ();
1057 dvi_h = dvi_h + rule_wd;
1059 lab13: cur_h = cur_h + rule_wd;
1060 lab15: p = mem[p].hh.v.RH;
1062 prune_movements(saveloc);
1067 /* following needs access to dvi_buf=zdvibuf see coerce.h */
1068 void vlist_out (void)
1072 scaled saveh, savev;
1074 /* glue_ord gorder; */
1075 int gorder; /* 95/Jan/7 */
1077 int gsign; /* 95/Jan/7 */
1083 bool outerdoingleaders;
1085 /* ************************************************************************ */
1086 real gluetemp; /* new in 3.14159 */
1087 /* ************************************************************************ */
1089 gorder = mem[thisbox + 5].hh.b1;
1090 gsign = mem[thisbox + 5].hh.b0;
1091 p = mem[thisbox + 5].hh.v.RH;
1095 dvi_buf[dvi_ptr]= 141;
1097 if(dvi_ptr == dvi_limit)dvi_swap ();
1099 if(cur_s > max_push)
1101 saveloc = dvi_offset + dvi_ptr;
1103 cur_v = cur_v - mem[thisbox + 3].cint;
1105 while(p != 0){ /* while p<>null do l.12494 OK */
1106 if((p >= hi_mem_min)) {
1107 confusion(822); /* vlist_out */
1108 return; // abort_flag set
1111 switch(mem[p].hh.b0)
1114 /* if list_ptr(p)=null then cur_v:=cur_v+height(p)+depth(p) l.12529 */
1115 if(mem[p + 5].hh.v.RH == 0)
1116 cur_v = cur_v + mem[p + 3].cint + mem[p + 2].cint;
1119 cur_v = cur_v + mem[p + 3].cint;
1122 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1127 cur_h = leftedge + mem[p + 4].cint;
1129 if(mem[p].hh.b0 == 1)vlist_out ();
1133 cur_v = savev + mem[p + 2].cint;
1139 rule_ht = mem[p + 3].cint;
1140 rule_dp = mem[p + 2].cint;
1141 rule_wd = mem[p + 1].cint;
1150 g = mem[p + 1].hh.v.LH;
1151 rule_ht = mem[g + 1].cint;
1156 if(mem[g].hh.b0 == gorder)
1157 /* ************************************************************************ */
1158 /* rule_ht = rule_ht + round(mem[thisbox + 6].gr * mem[g + 2].cint); */
1159 /* ************************ 3.14159 **************************************** */
1161 gluetemp = mem[thisbox + 6].gr * mem[g + 2].cint;
1162 if(gluetemp > 1000000000.0)
1163 gluetemp = 1000000000.0;
1164 else if(gluetemp < -1000000000.0)
1165 gluetemp = -1000000000.0;
1166 rule_ht = rule_ht + round(gluetemp);
1168 /* ************************************************************************* */
1170 /* ************************************************************************* */
1172 /* if(mem[g].hh.b1 == gorder) */
1173 /* rule_ht = rule_ht - round(mem[thisbox + 6].gr * mem[g + 3].cint); */
1175 else if(mem[g].hh.b1 == gorder) /* BUG FIX !!! */
1177 gluetemp = mem[thisbox + 6].gr * mem[g + 3].cint;
1178 if(gluetemp > 1000000000.0)
1179 gluetemp = 1000000000.0;
1180 else if(gluetemp < -1000000000.0)
1181 gluetemp = -1000000000.0;
1182 rule_ht = rule_ht - round(gluetemp);
1184 /* ************************************************************************* */
1186 if(mem[p].hh.b1 >= 100)
1188 leaderbox = mem[p + 1].hh.v.RH;
1189 if(mem[leaderbox].hh.b0 == 2)
1191 rule_wd = mem[leaderbox + 1].cint;
1195 leaderht = mem[leaderbox + 3].cint + mem[leaderbox + 2]
1197 if((leaderht > 0)&&(rule_ht > 0))
1199 rule_ht = rule_ht + 10;
1200 edge = cur_v + rule_ht;
1202 if(mem[p].hh.b1 == 100)
1205 cur_v = topedge + leaderht *((cur_v - topedge)/ leaderht)
1208 cur_v = cur_v + leaderht;
1212 lq = rule_ht / leaderht;
1213 lr = rule_ht % leaderht;
1214 if(mem[p].hh.b1 == 101)
1215 cur_v = cur_v +(lr / 2);
1218 lx =(2 * lr + lq + 1)/(2 * lq + 2);
1219 cur_v = cur_v +((lr -(lq - 1)* lx)/ 2);
1222 while(cur_v + leaderht <= edge){
1224 cur_h = leftedge + mem[leaderbox + 4].cint;
1227 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1231 cur_v = cur_v + mem[leaderbox + 3].cint;
1234 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1238 temp_ptr = leaderbox;
1239 outerdoingleaders = doing_leaders;
1240 doing_leaders = true;
1241 if(mem[leaderbox].hh.b0 == 1)vlist_out ();
1243 doing_leaders = outerdoingleaders;
1246 /* ************************************************************************ */
1247 /* cur_h = saveh; */
1248 cur_h = leftedge; /* 3.1415 */
1249 /* ************************************************************************ */
1250 cur_v = savev - mem[leaderbox + 3].cint + leaderht + lx;
1260 cur_v = cur_v + mem[p + 1].cint;
1267 lab14: if((rule_wd == -1073741824L)) /* -2^30 */
1268 rule_wd = mem[thisbox + 1].cint;
1269 rule_ht = rule_ht + rule_dp;
1270 cur_v = cur_v + rule_ht;
1271 if((rule_ht > 0)&&(rule_wd > 0))
1275 movement(cur_h - dvi_h, 143); /* 143 == right1 */
1280 movement(cur_v - dvi_v, 157); /* 157 == down1 */
1284 dvi_buf[dvi_ptr]= 137;
1286 if(dvi_ptr == dvi_limit)dvi_swap ();
1292 lab13: cur_v = cur_v + rule_ht;
1294 lab15: p = mem[p].hh.v.RH;
1296 prune_movements(saveloc);
1301 /* following needs access to dvi_buf=zdvibuf see coerce.h */
1302 void ship_out_(halfword p)
1308 if(eqtb[(hash_size + 3197)].cint > 0)
1312 print_string("Completed box being shipped out");
1314 if(term_offset > max_print_line - 9)
1316 else if((term_offset > 0)||(file_offset > 0))
1317 print_char(32); /* */
1318 print_char(91); /*[*/
1320 while((eqtb[(hash_size + 3218) + j].cint == 0)&&(j > 0)) decr(j);
1322 register integer for_end;
1327 print_int(eqtb[(hash_size + 3218) + k].cint);
1329 print_char(46); /* . */
1331 while(k++ < for_end);
1336 if(eqtb[(hash_size + 3197)].cint > 0)
1338 print_char(93); /*]*/
1339 begin_diagnostic ();
1341 end_diagnostic(true);
1343 if((mem[p + 3].cint > 1073741823L)|| /* 2^30 - 1 */
1344 (mem[p + 2].cint > 1073741823L)||
1345 (mem[p + 3].cint + mem[p + 2].cint +
1346 eqtb[(hash_size + 3749)].cint > 1073741823L)||
1347 (mem[p + 1].cint + eqtb[(hash_size + 3748)].cint > 1073741823L))
1349 print_err("Huge page cannot be shipped out");
1350 help2("The page just created is more than 18 feet tall or",
1351 "more than 18 feet wide, so I suspect something went wrong.");
1353 if(eqtb[(hash_size + 3197)].cint <= 0)
1355 begin_diagnostic ();
1356 print_nl("The following box has been deleted:"); /* */
1358 end_diagnostic(true);
1362 if(mem[p + 3].cint + mem[p + 2].cint + eqtb[(hash_size + 3749)].cint > max_v
1364 max_v = mem[p + 3].cint + mem[p + 2].cint + eqtb[(hash_size + 3749)].cint;
1365 if(mem[p + 1].cint + eqtb[(hash_size + 3748)].cint > max_h)
1366 max_h = mem[p + 1].cint + eqtb[(hash_size + 3748)].cint;
1369 cur_h = eqtb[(hash_size + 3748)].cint;
1371 if(output_file_name == 0)
1373 if(job_name == 0)open_log_file ();
1374 pack_job_name(788); /* .dvi */
1375 while(! b_open_out(dvi_file)) {
1376 prompt_file_name(789, 788); /* file name for output .dvi */
1378 output_file_name = b_make_name_string(dvi_file);
1381 if(total_pages == 0)
1384 dvi_buf[dvi_ptr]= 247;
1386 if(dvi_ptr == dvi_limit)dvi_swap ();
1389 dvi_buf[dvi_ptr]= 2;
1391 if(dvi_ptr == dvi_limit)dvi_swap ();
1393 dvi_four(25400000L); /* magic DVI scale factor */
1394 dvi_four(473628672L); /* 7227 * 65536 */
1396 dvi_four(eqtb[(hash_size + 3180)].cint);
1397 old_setting = selector;
1399 print_string("TeX output ");
1400 print_int(eqtb[(hash_size + 3186)].cint);
1401 print_char(46); /* . */
1402 print_two(eqtb[(hash_size + 3185)].cint);
1403 print_char(46); /* . */
1404 print_two(eqtb[(hash_size + 3184)].cint);
1405 print_char(58); /* : */
1406 print_two(eqtb[(hash_size + 3183)].cint / 60);
1407 print_two(eqtb[(hash_size + 3183)].cint % 60);
1408 selector = old_setting;
1410 /* long to unsigned char ... */
1411 dvi_buf[dvi_ptr]=(pool_ptr - str_start[str_ptr]);
1413 if(dvi_ptr == dvi_limit)dvi_swap ();
1416 register integer for_end;
1417 s = str_start[str_ptr];
1418 for_end = pool_ptr - 1;
1421 dvi_buf[dvi_ptr]= str_pool[s];
1423 if(dvi_ptr == dvi_limit)dvi_swap ();
1425 while(s++ < for_end);
1427 pool_ptr = str_start[str_ptr];
1428 } // end of if total_pages == 0
1430 pageloc = dvi_offset + dvi_ptr;
1432 dvi_buf[dvi_ptr]= 139;
1434 if(dvi_ptr == dvi_limit)dvi_swap ();
1437 register integer for_end;
1441 dvi_four(eqtb[(hash_size + 3218) + k].cint);
1442 while(k++ < for_end);
1446 cur_v = mem[p + 3].cint + eqtb[(hash_size + 3749)].cint;
1448 if(mem[p].hh.b0 == 1)vlist_out ();
1451 dvi_buf[dvi_ptr]= 140;
1453 if(dvi_ptr == dvi_limit)dvi_swap ();
1458 if(eqtb[(hash_size + 3197)].cint <= 0)
1459 print_char(93); /*]*/
1466 if(eqtb[(hash_size + 3194)].cint > 1)
1468 print_nl("Memory usage before: "); /* */
1469 print_int(var_used);
1470 print_char(38); /* & */
1471 print_int(dyn_used);
1472 print_char(59); /*; */
1478 if(eqtb[(hash_size + 3194)].cint > 1)
1480 print_string("after");
1481 print_int(var_used);
1482 print_char(38); /* & */
1483 print_int(dyn_used);
1484 print_string("still utouched");
1485 print_int(hi_mem_min - lo_mem_max - 1); /* somewhat inaccurate free mem */
1490 void scan_spec_(group_code c, bool threecodes)
1495 s = save_stack[save_ptr + 0].cint;
1496 if(scan_keyword(836)) /* to */
1498 else if(scan_keyword(837)) /* spread */
1505 scan_dimen(false, false, false);
1506 lab40: if(threecodes)
1508 save_stack[save_ptr + 0].cint = s; /* s may be used without ... */
1511 save_stack[save_ptr + 0].cint = speccode;
1512 save_stack[save_ptr + 1].cint = cur_val;
1513 save_ptr = save_ptr + 2;
1517 halfword hpack_(halfword p, scaled w, small_number m)
1518 {/* 21 50 10 */ register halfword Result;
1525 int o; /* 95/Jan/7 */
1526 internal_font_number f;
1533 mem[r + 4].cint = 0;
1547 while(p != 0){ /* while p<>null do l.12862 */
1549 lab21: while((p >= hi_mem_min)) {
1552 i = font_info[char_base[f]+ mem[p].hh.b1].qqqq;
1554 x = x + font_info[width_base[f]+ i.b0].cint;
1555 s = font_info[height_base[f]+(hd)/ 16].cint;
1558 s = font_info[depth_base[f]+(hd)% 16].cint;
1563 if(p != 0) /* if p<>null then l.12886 */
1565 switch(mem[p].hh.b0)
1571 x = x + mem[p + 1].cint;
1572 if(mem[p].hh.b0 >= 2)
1574 else s = mem[p + 4].cint;
1575 if(mem[p + 3].cint - s > h)
1576 h = mem[p + 3].cint - s;
1577 if(mem[p + 2].cint + s > d)
1578 d = mem[p + 2].cint + s;
1584 /* if adjust_tail<>null then link(adjust_tail):=null; l.12865 / 12891 */
1585 if(adjust_tail != 0)
1587 while(mem[q].hh.v.RH != p)q = mem[q].hh.v.RH;
1588 if(mem[p].hh.b0 == 5)
1590 mem[adjust_tail].hh.v.RH = mem[p + 1].cint;
1591 while(mem[adjust_tail].hh.v.RH != 0)adjust_tail = mem[
1592 adjust_tail].hh.v.RH;
1594 free_node(mem[q].hh.v.RH, 2);
1598 mem[adjust_tail].hh.v.RH = p;
1611 g = mem[p + 1].hh.v.LH;
1612 x = x + mem[g + 1].cint;
1614 totalstretch[o]= totalstretch[o]+ mem[g + 2].cint;
1616 totalshrink[o]= totalshrink[o]+ mem[g + 3].cint;
1617 if(mem[p].hh.b1 >= 100)
1619 g = mem[p + 1].hh.v.RH;
1620 if(mem[g + 3].cint > h)
1621 h = mem[g + 3].cint;
1622 if(mem[g + 2].cint > d)
1623 d = mem[g + 2].cint;
1629 x = x + mem[p + 1].cint;
1633 mem[mem_top - 12]= mem[p + 1];
1634 mem[mem_top - 12].hh.v.RH = mem[p].hh.v.RH;
1646 if(adjust_tail != 0)
1647 mem[adjust_tail].hh.v.RH = 0;
1648 mem[r + 3].cint = h;
1649 mem[r + 2].cint = d;
1652 mem[r + 1].cint = w;
1656 mem[r + 5].hh.b0 = 0;
1657 mem[r + 5].hh.b1 = 0;
1658 mem[r + 6].gr = 0.0;
1663 if(totalstretch[3]!= 0)
1665 else if(totalstretch[2]!= 0)
1667 else if(totalstretch[1]!= 0)
1670 mem[r + 5].hh.b1 = o;
1671 mem[r + 5].hh.b0 = 1;
1672 /* if total_stretch[o]<>0 then glue_set(r):=... l.12982 */
1673 if(totalstretch[o]!= 0)
1674 mem[r + 6].gr = x / ((double) totalstretch[o]);
1677 mem[r + 5].hh.b0 = 0;
1678 mem[r + 6].gr = 0.0;
1680 /* if o=normal then if list_ptr(r)<>null then l.12987 */
1682 if(mem[r + 5].hh.v.RH != 0)
1684 last_badness = badness(x, totalstretch[0]);
1685 if(last_badness > eqtb[(hash_size + 3189)].cint)
1688 if(last_badness > 100)
1689 print_nl("Underfull"); /* */
1690 else print_nl("Loose"); /* */
1691 print_string("\\hbox (badness");
1692 print_int(last_badness);
1693 if(last_badness > 100)underfull_hbox++; /* 1996/Feb/9 */
1701 if(totalshrink[3]!= 0)
1703 else if(totalshrink[2]!= 0)
1705 else if(totalshrink[1]!= 0)
1708 mem[r + 5].hh.b1 = o;
1709 mem[r + 5].hh.b0 = 2;
1710 if(totalshrink[o]!= 0)
1711 mem[r + 6].gr =(- (integer) x)/ ((double) totalshrink[o]);
1714 mem[r + 5].hh.b0 = 0;
1715 mem[r + 6].gr = 0.0;
1717 /* if (total_shrink[o]<-x)and(o=normal)and(list_ptr(r)<>null) then l.13946 */
1718 if((totalshrink[o]< - (integer) x)&&(o == 0)&&(mem[r + 5
1721 last_badness = 1000000L;
1722 /* set_glue_ratio_one(glue_set(r)); {use the maximum shrinkage} */
1723 mem[r + 6].gr = 1.0;
1724 /* if (-x-total_shrink[normal]>hfuzz)or(hbadness<100) then */
1725 if((- (integer) x - totalshrink[0]> eqtb[(hash_size + 3738)].cint)||(
1726 eqtb[(hash_size + 3189)].cint < 100))
1728 if((eqtb[(hash_size + 3746)].cint > 0)&&(- (integer) x - totalshrink[0
1729 ] > eqtb[(hash_size + 3738)].cint))
1731 while(mem[q].hh.v.RH != 0)q = mem[q].hh.v.RH;
1732 mem[q].hh.v.RH = new_rule ();
1733 mem[mem[q].hh.v.RH + 1].cint = eqtb[(hash_size + 3746)].cint;
1736 print_nl("Overfull \\hbox("); /* */
1737 print_scaled(- (integer) x - totalshrink[0]);
1738 print_string("pt too wide");
1739 overfull_hbox++; /* 1996/Feb/9 */
1744 if(mem[r + 5].hh.v.RH != 0)
1746 last_badness = badness(- (integer) x, totalshrink[0]);
1747 if(last_badness > eqtb[(hash_size + 3189)].cint)
1750 print_nl("Tight \\hbox (badness "); /* */
1751 print_int(last_badness);
1757 lab50: if(output_active)
1758 print_string(")has occurred while \\output is active");
1761 if(pack_begin_line != 0)
1763 if(pack_begin_line > 0)
1764 print_string(")in paragraph at lines ");
1765 else print_string(")in alignment at lines ");
1766 print_int(abs(pack_begin_line));
1769 else print_string(")detected at line ");
1773 font_in_short_display = 0;
1774 short_display(mem[r + 5].hh.v.RH);
1776 begin_diagnostic ();
1778 end_diagnostic(true);
1782 halfword vpackage_(halfword p, scaled h, small_number m, scaled l)
1783 {/* 50 10 */ register halfword Result;
1789 int o; /* 95/Jan/7 */
1794 mem[r + 4].cint = 0;
1795 mem[r + 5].hh.v.RH = p;
1809 if((p >= hi_mem_min)) {
1810 confusion(849); /* vpack */
1811 return 0; // abort_flag set
1813 else switch(mem[p].hh.b0)
1819 x = x + d + mem[p + 3].cint;
1820 d = mem[p + 2].cint;
1821 if(mem[p].hh.b0 >= 2)
1823 else s = mem[p + 4].cint;
1824 if(mem[p + 1].cint + s > w)
1825 w = mem[p + 1].cint + s;
1835 g = mem[p + 1].hh.v.LH;
1836 x = x + mem[g + 1].cint;
1838 totalstretch[o]= totalstretch[o]+ mem[g + 2].cint;
1840 totalshrink[o]= totalshrink[o]+ mem[g + 3].cint;
1841 if(mem[p].hh.b1 >= 100)
1843 g = mem[p + 1].hh.v.RH;
1844 if(mem[g + 1].cint > w)
1845 w = mem[g + 1].cint;
1851 x = x + d + mem[p + 1].cint;
1861 mem[r + 1].cint = w;
1865 mem[r + 2].cint = l;
1867 else mem[r + 2].cint = d;
1870 mem[r + 3].cint = h;
1874 mem[r + 5].hh.b0 = 0;
1875 mem[r + 5].hh.b1 = 0;
1876 mem[r + 6].gr = 0.0;
1881 if(totalstretch[3]!= 0)
1883 else if(totalstretch[2]!= 0)
1885 else if(totalstretch[1]!= 0)
1888 mem[r + 5].hh.b1 = o;
1889 mem[r + 5].hh.b0 = 1;
1890 if(totalstretch[o]!= 0)
1891 mem[r + 6].gr = x / ((double) totalstretch[o]);
1894 mem[r + 5].hh.b0 = 0;
1895 mem[r + 6].gr = 0.0;
1898 if(mem[r + 5].hh.v.RH != 0)
1900 last_badness = badness(x, totalstretch[0]);
1901 if(last_badness > eqtb[(hash_size + 3190)].cint)
1904 if(last_badness > 100)
1905 print_nl("Underfull"); /* */
1906 else print_nl("Loose"); /* */
1907 print_string("\\vbox (badness");
1908 print_int(last_badness);
1909 if(last_badness > 100)underfull_vbox++; /* 1996/Feb/9 */
1917 if(totalshrink[3]!= 0)
1919 else if(totalshrink[2]!= 0)
1921 else if(totalshrink[1]!= 0)
1924 mem[r + 5].hh.b1 = o;
1925 mem[r + 5].hh.b0 = 2;
1926 if(totalshrink[o]!= 0)
1927 mem[r + 6].gr =(- (integer) x)/ ((double) totalshrink[o]);
1930 mem[r + 5].hh.b0 = 0;
1931 mem[r + 6].gr = 0.0;
1933 /* if (total_shrink[o]<-x)and(o=normal)and(list_ptr(r)<>null) then l.13046 */
1934 if((totalshrink[o]< - (integer) x)&&(o == 0)&&(mem[r + 5
1937 last_badness = 1000000L;
1938 mem[r + 6].gr = 1.0;
1939 if((- (integer) x - totalshrink[0]> eqtb[(hash_size + 3739)].cint)||(
1940 eqtb[(hash_size + 3190)].cint < 100))
1943 print_nl("Overfull \\vbox("); /* */
1944 print_scaled(- (integer) x - totalshrink[0]);
1945 print_string("pt too high");
1946 overfull_vbox++; /* 1996/Feb/9 */
1950 /* else if o=normal then if list_ptr(r)<>null then l.13052 */
1952 if(mem[r + 5].hh.v.RH != 0)
1954 last_badness = badness(- (integer) x, totalshrink[0]);
1955 if(last_badness > eqtb[(hash_size + 3190)].cint)
1958 print_nl("Tight \\vbox (badness "); /* */
1959 print_int(last_badness);
1965 lab50: if(output_active)
1966 print_string(")has occurred while \\output is active");
1969 if(pack_begin_line != 0)
1971 print_string(")in alignment at lines ");
1972 print_int(abs(pack_begin_line));
1975 else print_string(")detected at line ");
1979 begin_diagnostic ();
1981 end_diagnostic(true);
1985 void append_to_vlist_(halfword b)
1989 if(cur_list.aux_field.cint > ignore_depth)
1991 d = mem[eqtb[(hash_size + 783)].hh.v.RH + 1].cint - cur_list.aux_field.cint -
1993 if(d < eqtb[(hash_size + 3732)].cint)
1994 p = new_param_glue(0);
1997 p = new_skip_param(1);
1998 mem[temp_ptr + 1].cint = d;
2000 mem[tail].hh.v.RH = p;
2003 mem[tail].hh.v.RH = b;
2005 cur_list.aux_field.cint = mem[b + 2].cint;
2007 halfword new_noad (void)
2008 {register halfword Result;
2013 mem[p + 1].hh = empty_field;
2014 mem[p + 3].hh = empty_field;
2015 mem[p + 2].hh = empty_field;
2019 halfword new_style_(small_number s)
2020 {register halfword Result;
2025 mem[p + 1].cint = 0;
2026 mem[p + 2].cint = 0;
2030 halfword new_choice (void)
2031 {register halfword Result;
2036 mem[p + 1].hh.v.LH = 0;
2037 mem[p + 1].hh.v.RH = 0;
2038 mem[p + 2].hh.v.LH = 0;
2039 mem[p + 2].hh.v.RH = 0;
2043 void show_info (void)
2045 show_node_list(mem[temp_ptr].hh.v.LH);
2047 halfword fraction_rule_(scaled t)
2048 {register halfword Result;
2051 mem[p + 3].cint = t;
2052 mem[p + 2].cint = 0;
2056 halfword overbar_(halfword b, scaled k, scaled t)
2057 {register halfword Result;
2061 q = fraction_rule(t);
2065 Result = vpackage(p, 0, 1, 1073741823L); /* 2^30 - 1 */
2068 halfword char_box_(internal_font_number f, quarterword c)
2069 {register halfword Result;
2073 q = font_info[char_base[f]+ c].qqqq;
2075 b = new_null_box ();
2076 mem[b + 1].cint = font_info[width_base[f]+ q.b0].cint + font_info
2077 [italic_base[f]+(q.b2)/ 4].cint;
2078 mem[b + 3].cint = font_info[height_base[f]+(hd)/ 16].cint;
2079 mem[b + 2].cint = font_info[depth_base[f]+(hd)% 16].cint;
2080 /* long to unsigned short ... */
2084 mem[b + 5].hh.v.RH = p;
2088 void stack_into_box_(halfword b, internal_font_number f, quarterword c)
2092 mem[p].hh.v.RH = mem[b + 5].hh.v.RH;
2093 mem[b + 5].hh.v.RH = p;
2094 mem[b + 3].cint = mem[p + 3].cint;
2096 scaled height_plus_depth_(internal_font_number f, fquarterword c)
2097 {register scaled Result;
2100 q = font_info[char_base[f]+ c].qqqq;
2102 Result = font_info[height_base[f]+(hd)/ 16].cint + font_info[
2103 depth_base[f]+(hd)% 16].cint;
2106 halfword var_delimiter_(halfword d, small_number s, scaled v)
2107 {/* 40 22 */ register halfword Result;
2109 internal_font_number f, g;
2110 quarterword c, x, y;
2117 /* small_number z; */
2118 int z; /* 95/Jan/7 */
2119 /* bool largeattempt; */
2120 int largeattempt; /* 95/Jan/7 */
2123 largeattempt = false;
2127 if((z != 0)||(x != 0))
2132 g = eqtb[(hash_size + 1835) + z].hh.v.RH;
2136 if((y >= font_bc[g])&&(y <= font_ec[g]))
2138 lab22: q = font_info[char_base[g]+ y].qqqq;
2148 u = font_info[height_base[g]+(hd)/ 16].cint + font_info
2149 [depth_base[g]+(hd)% 16].cint;
2170 largeattempt = true;
2175 if(((q.b2)% 4)== 3) /* q may be used without ... */
2177 b = new_null_box ();
2179 r = font_info[exten_base[f]+ q.b3].qqqq;
2181 u = height_plus_depth(f, c);
2183 q = font_info[char_base[f]+ c].qqqq;
2184 mem[b + 1].cint = font_info[width_base[f]+ q.b0].cint +
2185 font_info[italic_base[f]+(q.b2)/ 4].cint;
2188 w = w + height_plus_depth(f, c);
2191 w = w + height_plus_depth(f, c);
2194 w = w + height_plus_depth(f, c);
2206 stack_into_box(b, f, c);
2209 register integer for_end;
2213 stack_into_box(b, f, c);
2214 while(m++ < for_end);
2219 stack_into_box(b, f, c);
2222 register integer for_end;
2226 stack_into_box(b, f, c);
2227 while(m++ < for_end);
2232 stack_into_box(b, f, c);
2233 mem[b + 2].cint = w - mem[b + 3].cint;
2235 else b = char_box(f, c);
2236 else { /* c may be used without ... */
2237 b = new_null_box ();
2238 mem[b + 1].cint = eqtb[(hash_size + 3741)].cint;
2240 mem[b + 4].cint = half(mem[b + 3].cint - mem[b + 2].cint)-
2241 font_info[22 + param_base[eqtb[(hash_size + 1837) + s].hh.v.RH]].cint;
2245 /* rebox_ etc used to follow here in tex4.c */