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 */
26 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
28 /* rebox_ used to be in tex4.c */
30 halfword rebox_(halfword b, scaled w)
31 {register halfword Result;
33 internal_font_number f;
35 /* begin if (width(b)<>w)and(list_ptr(b)<>null) then l.14010 */
36 if((mem[b + 1].cint != w)&&(mem[b + 5].hh.v.RH != 0))
40 p = mem[b + 5].hh.v.RH;
41 /* if (is_char_node(p))and(link(p)=null) then l.14013 */
42 if(((p >= hi_mem_min)) &&(mem[p].hh.v.RH == 0))
45 v = font_info[width_base[f]+ font_info[char_base[f]+ mem[p]
46 .hh.b1].qqqq.b0].cint;
47 if(v != mem[b + 1].cint)
48 mem[p].hh.v.RH = new_kern(mem[b + 1].cint - v);
53 /* while link(p)<>null do p:=link(p); l.14019 */
54 while(mem[p].hh.v.RH != 0)p = mem[p].hh.v.RH;
55 mem[p].hh.v.RH = new_glue(12);
56 Result = hpack(b, w, 0);
65 /* This is to be the start of tex5.c */
66 halfword math_glue_(halfword g, scaled m)
67 {register halfword Result;
71 n = x_over_n(m, 65536L);
79 mem[p + 1].cint = mult_and_add(n, mem[g + 1].cint, xn_over_d(mem[
80 g + 1].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
81 mem[p].hh.b0 = mem[g].hh.b0;
83 mem[p + 2].cint = mult_and_add(n, mem[g + 2].cint, xn_over_d(mem[
84 g + 2].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
85 else mem[p + 2].cint = mem[g + 2].cint;
86 mem[p].hh.b1 = mem[g].hh.b1;
88 mem[p + 3].cint = mult_and_add(n, mem[g + 3].cint, xn_over_d(mem[
89 g + 3].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
90 else mem[p + 3].cint = mem[g + 3].cint;
94 void math_kern_ (halfword p, scaled m)
98 if(mem[p].hh.b1 == 99)
100 n = x_over_n(m, 65536L);
107 mem[p + 1].cint = mult_and_add(n, mem[p + 1].cint, xn_over_d(mem
108 [p + 1].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
109 /* mem[p].hh.b1 = 0; */
110 mem[p].hh.b1 = 1; /* changed in 3.14159 */
113 void flush_math (void)
115 flush_node_list(mem[head].hh.v.RH);
116 flush_node_list(cur_list.aux_field.cint);
117 mem[head].hh.v.RH = 0;
119 cur_list.aux_field.cint = 0;
121 halfword clean_box_(halfword p, small_number s)
122 {/* 40 */ register halfword Result;
124 small_number savestyle;
127 switch(mem[p].hh.v.RH)
130 cur_mlist = new_noad ();
131 mem[cur_mlist + 1]= mem[p];
141 cur_mlist = mem[p].hh.v.LH;
150 savestyle = cur_style;
152 mlist_penalties = false;
154 q = mem[mem_top - 3].hh.v.RH;
155 cur_style = savestyle;
159 else cur_size = 16 *((cur_style - 2)/ 2);
160 cur_mu = x_over_n(font_info[6 +
161 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
163 lab40: if((q >= hi_mem_min)||(q == 0))
165 else if((mem[q].hh.v.RH == 0)&&(mem[q].hh.b0 <= 1)&&(mem
168 else x = hpack(q, 0, 1);
169 q = mem[x + 5].hh.v.RH;
170 if((q >= hi_mem_min))
173 /* if r<>null then if link(r)=null then l.14140 */
175 if(mem[r].hh.v.RH == 0)
176 if(!(r >= hi_mem_min))
177 if(mem[r].hh.b0 == 11)
180 mem[q].hh.v.RH = 0; /* link(q):=null; */
186 void fetch_(halfword a)
188 cur_c = mem[a].hh.b1;
189 cur_f = eqtb[(hash_size + 1835) + mem[a].hh.b0 + cur_size].hh.v.RH;
193 print_size(cur_size);
194 print_char(32); /* */
195 print_int(mem[a].hh.b0);
196 print(878); /* is undefined (character */
198 print_char(41); /*)*/
201 help_line[3]= 879; /* Somewhere in the math formula just ended, you used the */
202 help_line[2]= 880; /* stated character from an undefined font family. For example, */
203 help_line[1]= 881; /* plain TeX doesn't allow \it or \sl in subscripts. Proceed, */
204 help_line[0]= 882; /* and I'll try to forget that I needed that character. */
207 cur_i = null_character;
212 if((cur_c >= font_bc[cur_f])&&(cur_c <= font_ec[cur_f]))
213 cur_i = font_info[char_base[cur_f]+ cur_c].qqqq;
214 else cur_i = null_character;
215 if(!((cur_i.b0 > 0)))
217 char_warning(cur_f, cur_c);
222 void make_over_(halfword q)
224 mem[q + 1].hh.v.LH = overbar(clean_box(q + 1, 2 *(cur_style / 2)
225 + 1), 3 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]
226 ].cint, font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]]
228 mem[q + 1].hh.v.RH = 2;
230 void make_under_(halfword q)
234 x = clean_box(q + 1, cur_style);
235 p = new_kern(3 * font_info[8 +
236 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
238 mem[p].hh.v.RH = fraction_rule(font_info[8 +
239 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
240 y = vpackage(x, 0, 1, 1073741823L); /* 2^30 - 1 */
241 delta = mem[y + 3].cint + mem[y + 2].cint + font_info[8 +
242 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
243 mem[y + 3].cint = mem[x + 3].cint;
244 mem[y + 2].cint = delta - mem[y + 3].cint;
245 mem[q + 1].hh.v.LH = y;
246 mem[q + 1].hh.v.RH = 2;
248 void make_vcenter_(halfword q)
252 v = mem[q + 1].hh.v.LH;
253 if(mem[v].hh.b0 != 1){
254 confusion(536); /* vcenter */
255 return; // abort_flag set
257 delta = mem[v + 3].cint + mem[v + 2].cint;
258 mem[v + 3].cint = font_info[22 +
259 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + half(delta);
260 mem[v + 2].cint = delta - mem[v + 3].cint;
262 void make_radical_(halfword q)
266 x = clean_box(q + 1, 2 *(cur_style / 2)+ 1);
269 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint +
270 (abs(font_info[5 + param_base[eqtb[(hash_size + 1837) +
271 cur_size].hh.v.RH]].cint)/ 4);
275 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
276 clr = clr +(abs(clr)/ 4);
278 y = var_delimiter(q + 4, cur_size, mem[x + 3].cint + mem[x + 2]
279 .cint + clr + font_info[8 +
280 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
281 delta = mem[y + 2].cint -(mem[x + 3].cint + mem[x + 2].cint +
284 clr = clr + half(delta);
285 mem[y + 4].cint = - (integer)(mem[x + 3].cint + clr);
286 mem[y].hh.v.RH = overbar(x, clr, mem[y + 3].cint);
287 mem[q + 1].hh.v.LH = hpack(y, 0, 1);
288 mem[q + 1].hh.v.RH = 2;
290 void make_math_accent_(halfword q)
295 internal_font_number f;
308 if(mem[q + 1].hh.v.RH == 1)
311 if(((cur_i.b2)% 4)== 1)
313 a = lig_kern_base[cur_f]+ cur_i.b3;
314 cur_i = font_info[a].qqqq;
317 a = lig_kern_base[cur_f]+ 256 * cur_i.b2 + cur_i.b3 + 32768L - 256
319 cur_i = font_info[a].qqqq;
322 if(cur_i.b1 == skew_char[cur_f])
326 s = font_info[kern_base[cur_f]+ 256 * cur_i.b2 + cur_i.b3]
332 a = a + cur_i.b0 + 1;
333 cur_i = font_info[a].qqqq;
338 x = clean_box(q + 1, 2 *(cur_style / 2)+ 1);
345 i = font_info[char_base[f]+ y].qqqq;
348 if(font_info[width_base[f]+ i.b0].cint > w)
350 /* long to unsigned short ... */
354 if(h < font_info[5 + param_base[f]].cint)
356 else delta = font_info[5 + param_base[f]].cint;
357 if((mem[q + 2].hh.v.RH != 0)||(mem[q + 3].hh.v.RH != 0)
359 if(mem[q + 1].hh.v.RH == 1)
363 mem[x + 1]= mem[q + 1];
364 mem[x + 2]= mem[q + 2];
365 mem[x + 3]= mem[q + 3];
366 mem[q + 2].hh = empty_field;
367 mem[q + 3].hh = empty_field;
368 mem[q + 1].hh.v.RH = 3;
369 mem[q + 1].hh.v.LH = x;
370 x = clean_box(q + 1, cur_style);
371 delta = delta + mem[x + 3].cint - h;
375 mem[y + 4].cint = s + half(w - mem[y + 1].cint);
377 p = new_kern(- (integer) delta);
380 y = vpackage(y, 0, 1, 1073741823L); /* 2^30 - 1 */
381 mem[y + 1].cint = mem[x + 1].cint;
382 if(mem[y + 3].cint < h)
384 p = new_kern(h - mem[y + 3].cint);
385 mem[p].hh.v.RH = mem[y + 5].hh.v.RH;
386 mem[y + 5].hh.v.RH = p;
389 mem[q + 1].hh.v.LH = y;
390 mem[q + 1].hh.v.RH = 2;
393 void make_fraction_(halfword q)
395 halfword p, v, x, y, z;
396 scaled delta, delta1, delta2, shiftup, shiftdown, clr;
397 if(mem[q + 1].cint == 1073741824L) /* 2^30 */
398 mem[q + 1].cint = font_info[8 +
399 param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
400 x = clean_box(q + 2, cur_style + 2 - 2 *(cur_style / 6));
401 z = clean_box(q + 3, 2 *(cur_style / 2)+ 3 - 2 *(cur_style / 6));
402 if(mem[x + 1].cint < mem[z + 1].cint)
403 x = rebox(x, mem[z + 1].cint);
404 else z = rebox(z, mem[x + 1].cint);
407 shiftup = font_info[8 +
408 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
409 shiftdown = font_info[11 +
410 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
414 shiftdown = font_info[12 +
415 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
416 if(mem[q + 1].cint != 0)
417 shiftup = font_info[9 +
418 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
419 else shiftup = font_info[10 +
420 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
422 if(mem[q + 1].cint == 0)
425 clr = 7 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]
427 else clr = 3 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
429 delta = half(clr -((shiftup - mem[x + 2].cint)-(mem[z + 3]
430 .cint - shiftdown)));
433 shiftup = shiftup + delta;
434 shiftdown = shiftdown + delta;
440 clr = 3 * mem[q + 1].cint;
441 else clr = mem[q + 1].cint;
442 delta = half(mem[q + 1].cint);
443 delta1 = clr -((shiftup - mem[x + 2].cint)-(font_info[22 +
444 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + delta));
445 delta2 = clr -((font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size]
446 .hh.v.RH]].cint - delta)-(mem[z + 3].cint - shiftdown));
448 shiftup = shiftup + delta1;
450 shiftdown = shiftdown + delta2;
454 mem[v + 3].cint = shiftup + mem[x + 3].cint;
455 mem[v + 2].cint = mem[z + 2].cint + shiftdown;
456 mem[v + 1].cint = mem[x + 1].cint;
457 if(mem[q + 1].cint == 0)
459 p = new_kern((shiftup - mem[x + 2].cint)-(mem[z + 3].cint -
465 y = fraction_rule(mem[q + 1].cint);
466 p = new_kern((font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
467 .v.RH]].cint - delta)-(mem[z + 3].cint - shiftdown));
470 p = new_kern((shiftup - mem[x + 2].cint)-(font_info[22 +
471 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + delta));
475 mem[v + 5].hh.v.RH = x;
477 delta = font_info[20 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]]
479 else delta = font_info[21 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH
481 x = var_delimiter(q + 4, cur_size, delta);
483 z = var_delimiter(q + 5, cur_size, delta);
485 mem[q + 1].cint = hpack(x, 0, 1);
487 /***************************************************************************/
488 /* moved to end to avoid questions about pragma optimize 96/Sep/12 */
489 scaled make_op_ (halfword);
490 /***************************************************************************/
491 void make_ord_(halfword q)
495 lab20: if(mem[q + 3].hh.v.RH == 0)
496 if(mem[q + 2].hh.v.RH == 0)
497 if(mem[q + 1].hh.v.RH == 1)
501 if((mem[p].hh.b0 >= 16)&&(mem[p].hh.b0 <= 22))
502 if(mem[p + 1].hh.v.RH == 1)
503 if(mem[p + 1].hh.b0 == mem[q + 1].hh.b0)
505 mem[q + 1].hh.v.RH = 4;
507 if(((cur_i.b2)% 4)== 1)
509 a = lig_kern_base[cur_f]+ cur_i.b3;
510 cur_c = mem[p + 1].hh.b1;
511 cur_i = font_info[a].qqqq;
514 a = lig_kern_base[cur_f]+ 256 * cur_i.b2 + cur_i.b3 + 32768L - 256
516 cur_i = font_info[a].qqqq;
519 if(cur_i.b1 == cur_c)
523 p = new_kern(font_info[kern_base[cur_f]+ 256 * cur_i.b2 + cur_i
525 mem[p].hh.v.RH = mem[q].hh.v.RH;
533 pause_for_instructions ();
539 mem[q + 1].hh.b1 = cur_i.b3;
543 mem[p + 1].hh.b1 = cur_i.b3;
550 mem[r + 1].hh.b1 = cur_i.b3;
551 mem[r + 1].hh.b0 = mem[q + 1].hh.b0;
555 mem[r + 1].hh.v.RH = 1;
556 else mem[r + 1].hh.v.RH = 4;
561 mem[q].hh.v.RH = mem[p].hh.v.RH;
562 mem[q + 1].hh.b1 = cur_i.b3;
563 mem[q + 3]= mem[p + 3];
564 mem[q + 2]= mem[p + 2];
571 mem[q + 1].hh.v.RH = 1;
576 a = a + cur_i.b0 + 1;
577 cur_i = font_info[a].qqqq;
583 /***************************************************************************/
584 /* moved to end to avoid questions about pragma optimize 96/Sep/12 */
585 void make_scripts_ (halfword, scaled);
586 /***************************************************************************/
587 small_number make_left_right_(halfword q, small_number style, scaled maxd, scaled max_h)
588 {register small_number Result;
589 scaled delta, delta1, delta2;
592 else cur_size = 16 *((style - 2)/ 2);
593 delta2 = maxd + font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
595 delta1 = max_h + maxd - delta2;
598 delta =(delta1 / 500)* eqtb[(hash_size + 3181)].cint;
599 delta2 = delta1 + delta1 - eqtb[(hash_size + 3740)].cint;
602 mem[q + 1].cint = var_delimiter(q + 1, cur_size, delta);
603 Result = mem[q].hh.b0 -(10);
606 void mlist_to_hlist (void)
607 {/* 21 82 80 81 83 30 */
611 small_number savestyle;
614 /* small_number rtype; */
615 int rtype; /* 95/Jan/7 */
616 /* small_number t; */
617 int t; /* 95/Jan/7 */
624 penalties = mlist_penalties;
634 else cur_size = 16 *((cur_style - 2)/ 2);
635 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
641 switch(mem[q].hh.b0){
665 if(rtype == 18) mem[r].hh.b0 = 16;
666 if(mem[q].hh.b0 == 31) goto lab80;
681 if(mem[q].hh.b1 == 1)
709 cur_style = mem[q].hh.b1;
713 else cur_size = 16 *((cur_style - 2)/ 2);
714 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size]
715 .hh.v.RH]].cint, 18);
722 switch(cur_style / 2)
725 p = mem[q + 1].hh.v.LH;
726 mem[q + 1].hh.v.LH = 0;
731 p = mem[q + 1].hh.v.RH;
732 mem[q + 1].hh.v.RH = 0;
737 p = mem[q + 2].hh.v.LH;
738 mem[q + 2].hh.v.LH = 0;
743 p = mem[q + 2].hh.v.RH;
744 mem[q + 2].hh.v.RH = 0;
748 flush_node_list(mem[q + 1].hh.v.LH);
749 flush_node_list(mem[q + 1].hh.v.RH);
750 flush_node_list(mem[q + 2].hh.v.LH);
751 flush_node_list(mem[q + 2].hh.v.RH);
753 mem[q].hh.b1 = cur_style;
756 if(p != 0)/* if p<>null then l.14317 */
760 /* while link(p)<>null do p:=link(p); */
761 while(mem[p].hh.v.RH != 0)p = mem[p].hh.v.RH;
777 if(mem[q + 3].cint > max_h)
778 max_h = mem[q + 3].cint;
779 if(mem[q + 2].cint > maxd)
780 maxd = mem[q + 2].cint;
786 if(mem[q].hh.b1 == 99)
788 x = mem[q + 1].hh.v.LH;
789 y = math_glue(x, cur_mu);
791 mem[q + 1].hh.v.LH = y;
794 else if((cur_size != 0)&&(mem[q].hh.b1 == 98))
797 /* if p<>null then if (type(p)=glue_node)or(type(p)=kern_node) then */
799 if((mem[p].hh.b0 == 10)||(mem[p].hh.b0 == 11))
801 mem[q].hh.v.RH = mem[p].hh.v.RH;
811 math_kern(q, cur_mu);
817 confusion(883); /* mlist1 */
818 return; // abort_flag set
821 } /* end of switch */
823 switch(mem[q + 1].hh.v.RH){
830 delta = font_info[italic_base[cur_f]+(cur_i.b2)/ 4].cint;
831 p = new_character(cur_f, cur_c);
832 if((mem[q + 1].hh.v.RH == 4)&&(font_info[2 + param_base
835 if((mem[q + 3].hh.v.RH == 0)&&(delta != 0))
837 mem[p].hh.v.RH = new_kern(delta);
848 p = mem[q + 1].hh.v.LH;
852 cur_mlist = mem[q + 1].hh.v.LH;
853 savestyle = cur_style;
854 mlist_penalties = false;
856 cur_style = savestyle;
860 else cur_size = 16 *((cur_style - 2)/ 2);
861 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size]
862 .hh.v.RH]].cint, 18);
864 p = hpack(mem[mem_top - 3].hh.v.RH, 0, 1);
869 confusion(884); /* mlist2 */
870 return; // abort_flag set
873 } /* end of switch */
875 mem[q + 1].cint = p; /* p may be used without ... */
876 if((mem[q + 3].hh.v.RH == 0)&&(mem[q + 2].hh.v.RH == 0)
879 make_scripts(q, delta);
880 lab82: z = hpack(mem[q + 1].cint, 0, 1);
881 if(mem[z + 3].cint > max_h)
882 max_h = mem[z + 3].cint;
883 if(mem[z + 2].cint > maxd)
884 maxd = mem[z + 2].cint;
887 rtype = mem[r].hh.b0;
888 lab81: q = mem[q].hh.v.RH;
900 else cur_size = 16 *((cur_style - 2)/ 2);
901 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
920 pen = eqtb[(hash_size + 3172)].cint;
926 pen = eqtb[(hash_size + 3173)].cint;
949 t = make_left_right(q, style, maxd, max_h);
953 cur_style = mem[q].hh.b1;
958 else cur_size = 16 *((cur_style - 2)/ 2);
959 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size]
960 .hh.v.RH]].cint, 18);
984 confusion(885); /* mlist3 */
985 return; // abort_flag set
991 switch(str_pool[rtype * 8 + t + magic_offset])
1015 confusion(887); /* mlist4 */
1016 return; // abort_flag set
1022 y = math_glue(eqtb[(hash_size + 782) + x].hh.v.RH, cur_mu); /* gluebase + x */
1027 mem[z].hh.b1 = x + 1; /* x may be used without ... */
1030 if(mem[q + 1].cint != 0)
1032 mem[p].hh.v.RH = mem[q + 1].cint;
1035 } while(!(mem[p].hh.v.RH == 0));
1038 if(mem[q].hh.v.RH != 0)
1041 rtype = mem[mem[q].hh.v.RH].hh.b0;
1045 z = new_penalty(pen);
1057 void push_alignment (void)
1061 mem[p].hh.v.RH = align_ptr;
1062 mem[p].hh.v.LH = cur_align;
1063 mem[p + 1].hh.v.LH = mem[mem_top - 8].hh.v.RH;
1064 mem[p + 1].hh.v.RH = cur_span;
1065 mem[p + 2].cint = cur_loop;
1066 mem[p + 3].cint = align_state;
1067 mem[p + 4].hh.v.LH = cur_head;
1068 mem[p + 4].hh.v.RH = cur_tail;
1070 cur_head = get_avail ();
1072 void pop_alignment (void)
1076 mem[cur_head].hh.v.RH = avail;
1084 cur_tail = mem[p + 4].hh.v.RH;
1085 cur_head = mem[p + 4].hh.v.LH;
1086 align_state = mem[p + 3].cint;
1087 cur_loop = mem[p + 2].cint;
1088 cur_span = mem[p + 1].hh.v.RH;
1089 mem[mem_top - 8].hh.v.RH = mem[p + 1].hh.v.LH;
1090 cur_align = mem[p].hh.v.LH;
1091 align_ptr = mem[p].hh.v.RH;
1094 void get_preamble_token (void)
1096 lab20: get_token ();
1097 while((cur_chr == 256)&&(cur_cmd == 4)) {
1107 fatal_error(592); /* (interwoven alignment preambles are not allowed) */
1108 return; // abort_flag set
1110 if((cur_cmd == 75)&&(cur_chr == (hash_size + 793)))
1112 scan_optional_equals ();
1114 if(eqtb[(hash_size + 3206)].cint > 0)
1115 geq_define((hash_size + 793), 117, cur_val);
1116 else eq_define((hash_size + 793), 117, cur_val);
1120 void init_align (void)
1126 align_state = -1000000L;
1127 if((mode == 203)&&((tail != cur_list
1128 .head_field)||(cur_list.aux_field.cint != 0)))
1130 print_err("Improper ");
1131 print_esc(517); /* halign */
1132 print(888); /* inside $$ */
1135 help_line[2]= 889; /* Displays can use special alignments (like \eqalignno) */
1136 help_line[1]= 890; /* only if nothing but the alignment itself is between $$'s. */
1137 help_line[0]= 891; /* So I've deleted the formulas that preceded this alignment. */
1146 cur_list.aux_field.cint = nest[nest_ptr - 2].aux_field.cint;
1149 /* long to short ... */
1150 mode = - (integer) mode;
1151 scan_spec(6, false);
1152 mem[mem_top - 8].hh.v.RH = 0;
1153 cur_align = mem_top - 8;
1156 warning_index = savecsptr;
1157 align_state = -1000000L;
1159 mem[cur_align].hh.v.RH = new_param_glue(11);
1160 cur_align = mem[cur_align].hh.v.RH;
1166 get_preamble_token();
1169 if((cur_cmd <= 5)&&(cur_cmd >= 4)&&(align_state == -1000000L))
1170 if((p == mem_top - 4)&&(cur_loop == 0)&&(cur_cmd == 4))
1171 cur_loop = cur_align;
1173 print_err("Missing # inserted in alignment preamble");
1176 help_line[2]= 898; /* There should be exactly one # between &'s, when an */
1177 help_line[1]= 899; /* \halign or \valign is being set up. In this case you had */
1178 help_line[0]= 900; /* none, so I've put one in; maybe that will work. */
1183 else if((cur_cmd != 10)||(p != mem_top - 4))
1185 mem[p].hh.v.RH = get_avail ();
1187 mem[p].hh.v.LH = cur_tok;
1191 mem[cur_align].hh.v.RH = new_null_box ();
1192 cur_align = mem[cur_align].hh.v.RH;
1193 mem[cur_align].hh.v.LH = mem_top - 9;
1194 mem[cur_align + 1].cint = -1073741824L; /* - 2^30 */
1195 mem[cur_align + 3].cint = mem[mem_top - 4].hh.v.RH;
1200 get_preamble_token();
1201 if((cur_cmd <= 5)&&(cur_cmd >= 4)&&(align_state == -1000000L))
1205 print_err("Only one # is allowed per tab");
1208 help_line[2]= 898; /* There should be exactly one # between &'s, when an */
1209 help_line[1]= 899; /* \halign or \valign is being set up. In this case you had */
1210 help_line[0]= 902; /* more than one, so I'm ignoring all but the first. */
1215 mem[p].hh.v.RH = get_avail ();
1217 mem[p].hh.v.LH = cur_tok;
1219 lab32: mem[p].hh.v.RH = get_avail ();
1221 /* mem[p].hh.v.LH = (hash_size + 4614); */
1222 /* mem[p].hh.v.LH = (hash_size + 4095 + 519); */
1223 mem[p].hh.v.LH = (hash_size + hash_extra + 4095 + 519); /* 96/Jan/10 */
1224 mem[cur_align + 2].cint = mem[mem_top - 4].hh.v.RH;
1226 lab30: scanner_status = 0;
1228 /* if every_cr<>null then begin_token_list(every_cr,every_cr_text); l.15665 */
1229 if(eqtb[(hash_size + 1320)].hh.v.RH != 0)/* everycr */
1230 begin_token_list(eqtb[(hash_size + 1320)].hh.v.RH, 13);
1233 void init_span_ (halfword p)
1237 space_factor = 1000;
1240 cur_list.aux_field.cint = ignore_depth;
1241 normal_paragraph ();
1245 void init_row (void)
1251 else cur_list.aux_field.cint = 0;
1253 mem[tail].hh.v.RH = new_glue(mem[mem[mem_top - 8]
1254 .hh.v.RH + 1].hh.v.LH);
1255 tail = mem[tail].hh.v.RH;
1257 mem[tail].hh.b1 = 12;
1258 cur_align = mem[mem[mem_top - 8].hh.v.RH].hh.v.RH;
1259 cur_tail = cur_head;
1260 init_span(cur_align);
1262 void init_col (void)
1264 mem[cur_align + 5].hh.v.LH = cur_cmd;
1270 begin_token_list(mem[cur_align + 3].cint, 1);
1273 /* fin_col() moved to end to hide in pragma (g, "off") */
1274 /* may need to move more ? everything calling new_null_box() ? */
1280 p = hpack(mem[head].hh.v.RH, 0, 1);
1283 if(cur_head != cur_tail)
1285 mem[tail].hh.v.RH = mem[cur_head].hh.v.RH;
1291 p = vpackage(mem[head].hh.v.RH, 0, 1,
1292 1073741823L); /* 2^30 - 1 */
1294 mem[tail].hh.v.RH = p;
1296 space_factor = 1000;
1299 mem[p + 6].cint = 0;
1300 if(eqtb[(hash_size + 1320)].hh.v.RH != 0)/* everycr */
1301 begin_token_list(eqtb[(hash_size + 1320)].hh.v.RH, 13);
1304 void fin_align (void)
1306 halfword p, q, r, s, u, v;
1311 memory_word auxsave;
1314 confusion(909); /* align1 */
1315 return; // abort_flag set
1319 confusion(910); /* align0 */
1320 return; // abort_flag set
1323 if(nest[nest_ptr - 1].mode_field == 203)
1324 o = eqtb[(hash_size + 3745)].cint;
1326 q = mem[mem[mem_top - 8].hh.v.RH].hh.v.RH;
1328 flush_list(mem[q + 3].cint);
1329 flush_list(mem[q + 2].cint);
1330 p = mem[mem[q].hh.v.RH].hh.v.RH;
1331 if(mem[q + 1].cint == -1073741824L) /* - 2^30 */
1333 mem[q + 1].cint = 0;
1335 s = mem[r + 1].hh.v.LH;
1338 incr(mem[0].hh.v.RH); /* mem[mem_bot]? mem[null]? */
1340 mem[r + 1].hh.v.LH = 0;
1343 if(mem[q].hh.v.LH != mem_top - 9)
1345 t = mem[q + 1].cint + mem[mem[mem[q].hh.v.RH + 1].hh
1352 mem[r + 1].cint = mem[r + 1].cint - t;
1354 while(mem[r].hh.v.RH > n){
1357 n = mem[mem[s].hh.v.LH].hh.v.RH + 1;
1359 if(mem[r].hh.v.RH < n)
1361 mem[r].hh.v.LH = mem[s].hh.v.LH;
1363 decr(mem[r].hh.v.RH);
1368 if(mem[r + 1].cint > mem[mem[s].hh.v.LH + 1].cint)
1369 mem[mem[s].hh.v.LH + 1].cint = mem[r + 1].cint;
1373 } while(!(r == mem_top - 9));
1377 mem[q + 3].cint = 0;
1378 mem[q + 2].cint = 0;
1379 mem[q + 5].hh.b1 = 0;
1380 mem[q + 5].hh.b0 = 0;
1381 mem[q + 6].cint = 0;
1382 mem[q + 4].cint = 0;
1385 save_ptr = save_ptr - 2;
1386 pack_begin_line = - (integer) mode_line;
1389 rulesave = eqtb[(hash_size + 3746)].cint;
1390 eqtb[(hash_size + 3746)].cint = 0;
1391 p = hpack(mem[mem_top - 8].hh.v.RH, save_stack[save_ptr + 1].cint
1392 , save_stack[save_ptr + 0].cint);
1393 eqtb[(hash_size + 3746)].cint = rulesave;
1397 q = mem[mem[mem_top - 8].hh.v.RH].hh.v.RH;
1399 mem[q + 3].cint = mem[q + 1].cint;
1400 mem[q + 1].cint = 0;
1401 q = mem[mem[q].hh.v.RH].hh.v.RH;
1403 p = vpackage(mem[mem_top - 8].hh.v.RH, save_stack[save_ptr + 1]
1404 .cint, save_stack[save_ptr + 0].cint, 1073741823L); /* 2^30 - 1 */
1405 q = mem[mem[mem_top - 8].hh.v.RH].hh.v.RH;
1407 mem[q + 1].cint = mem[q + 3].cint;
1408 mem[q + 3].cint = 0;
1409 q = mem[mem[q].hh.v.RH].hh.v.RH;
1412 pack_begin_line = 0;
1413 q = mem[head].hh.v.RH;
1415 while(q != 0){ /* while q<>null l.15794 OK */
1417 if(!(q >= hi_mem_min)) /* begin if not is_char_node(q) then */
1418 if(mem[q].hh.b0 == 13)
1423 mem[q + 1].cint = mem[p + 1].cint;
1428 mem[q + 3].cint = mem[p + 3].cint;
1430 mem[q + 5].hh.b1 = mem[p + 5].hh.b1;
1431 mem[q + 5].hh.b0 = mem[p + 5].hh.b0;
1432 mem[q + 6].gr = mem[p + 6].gr;
1433 mem[q + 4].cint = o;
1434 r = mem[mem[q + 5].hh.v.RH].hh.v.RH;
1435 s = mem[mem[p + 5].hh.v.RH].hh.v.RH;
1438 t = mem[s + 1].cint;
1445 v = mem[s + 1].hh.v.LH;
1446 mem[u].hh.v.RH = new_glue(v);
1449 t = t + mem[v + 1].cint;
1450 if(mem[p + 5].hh.b0 == 1)
1452 if(mem[v].hh.b0 == mem[p + 5].hh.b1)
1453 t = t + round(mem[p + 6].gr * mem[v + 2].cint);
1455 else if(mem[p + 5].hh.b0 == 2)
1457 if(mem[v].hh.b1 == mem[p + 5].hh.b1)
1458 t = t - round(mem[p + 6].gr * mem[v + 3].cint);
1461 mem[u].hh.v.RH = new_null_box ();
1463 t = t + mem[s + 1].cint;
1465 mem[u + 1].cint = mem[s + 1].cint;
1469 mem[u + 3].cint = mem[s + 1].cint;
1474 mem[r + 3].cint = mem[q + 3].cint;
1475 mem[r + 2].cint = mem[q + 2].cint;
1476 if(t == mem[r + 1].cint)
1478 mem[r + 5].hh.b0 = 0;
1479 mem[r + 5].hh.b1 = 0;
1480 mem[r + 6].gr = 0.0;
1482 else if(t > mem[r + 1].cint)
1484 mem[r + 5].hh.b0 = 1;
1485 if(mem[r + 6].cint == 0)
1486 mem[r + 6].gr = 0.0;
1487 else mem[r + 6].gr =(t - mem[r + 1].cint)/ ((double)
1492 mem[r + 5].hh.b1 = mem[r + 5].hh.b0;
1493 mem[r + 5].hh.b0 = 2;
1494 if(mem[r + 4].cint == 0)
1495 mem[r + 6].gr = 0.0;
1496 else if((mem[r + 5].hh.b1 == 0)&&(mem[r + 1].cint -
1497 t > mem[r + 4].cint))
1498 mem[r + 6].gr = 1.0;
1499 else mem[r + 6].gr =(mem[r + 1].cint - t)/ ((double)
1502 mem[r + 1].cint = w;
1507 mem[r + 1].cint = mem[q + 1].cint;
1508 if(t == mem[r + 3].cint)
1510 mem[r + 5].hh.b0 = 0;
1511 mem[r + 5].hh.b1 = 0;
1512 mem[r + 6].gr = 0.0;
1514 else if(t > mem[r + 3].cint)
1516 mem[r + 5].hh.b0 = 1;
1517 if(mem[r + 6].cint == 0)
1518 mem[r + 6].gr = 0.0;
1519 else mem[r + 6].gr =(t - mem[r + 3].cint)/ ((double)
1524 mem[r + 5].hh.b1 = mem[r + 5].hh.b0;
1525 mem[r + 5].hh.b0 = 2;
1526 if(mem[r + 4].cint == 0)
1527 mem[r + 6].gr = 0.0;
1528 else if((mem[r + 5].hh.b1 == 0)&&(mem[r + 3].cint -
1529 t > mem[r + 4].cint))
1530 mem[r + 6].gr = 1.0;
1531 else mem[r + 6].gr =(mem[r + 3].cint - t)/ ((double)
1534 mem[r + 3].cint = w;
1537 mem[r + 4].cint = 0;
1538 if(u != mem_top - 4)
1540 mem[u].hh.v.RH = mem[r].hh.v.RH;
1541 mem[r].hh.v.RH = mem[mem_top - 4].hh.v.RH;
1544 r = mem[mem[r].hh.v.RH].hh.v.RH;
1545 s = mem[mem[s].hh.v.RH].hh.v.RH;
1548 else if(mem[q].hh.b0 == 2)
1550 if((mem[q + 1].cint == -1073741824L)) /* 2^30 */
1551 mem[q + 1].cint = mem[p + 1].cint;
1552 if((mem[q + 3].cint == -1073741824L)) /* 2^30 */
1553 mem[q + 3].cint = mem[p + 3].cint;
1554 if((mem[q + 2].cint == -1073741824L)) /* 2^30 */
1555 mem[q + 2].cint = mem[p + 2].cint;
1561 mem[q + 4].cint = o;
1571 auxsave = cur_list.aux_field;
1572 p = mem[head].hh.v.RH;
1579 print_err("Missing $$ inserted");
1582 help_line[1]= 889; /* Displays can use special alignments (like \eqalignno) */
1583 help_line[0]= 890; /* only if nothing but the alignment itself is between $$'s. */
1592 print_err("Display math should end with $$");
1595 help_line[1]= 1161; /* The `$' that I just saw supposedly matches a previous `$$'. */
1596 help_line[0]= 1162; /* So I shall assume that you typed `$$' both times. */
1603 mem[tail].hh.v.RH = new_penalty(eqtb[(hash_size + 3174)].cint
1605 tail = mem[tail].hh.v.RH;
1608 mem[tail].hh.v.RH = new_param_glue(3);
1609 tail = mem[tail].hh.v.RH;
1611 mem[tail].hh.v.RH = p;
1615 mem[tail].hh.v.RH = new_penalty(eqtb[(hash_size + 3175)].cint
1617 tail = mem[tail].hh.v.RH;
1620 mem[tail].hh.v.RH = new_param_glue(4);
1621 tail = mem[tail].hh.v.RH;
1623 cur_list.aux_field.cint = auxsave.cint;
1624 resume_after_display ();
1628 cur_list.aux_field = auxsave;
1629 mem[tail].hh.v.RH = p;
1630 if(p != 0) /* if p<>null then tail:=q; l.15926 */
1637 /* used to be align_peek, zfintieshrink, etc in old tex5.c */
1638 /************************************************************************/
1639 /* moved down here to avoid questions about pragma optimize */
1640 #pragma optimize("g", off) /* for MC VS compiler */
1641 /* Moved down here 96/Oct/12 in response to problem with texerror.tex */
1642 /* pragma optimize("a", off) not strong enough - this may slow things */
1644 {/* 10 */ register bool Result;
1653 confusion(903); /* endv */
1654 return 0; // abort_flag set
1656 q = mem[cur_align].hh.v.RH;
1658 confusion(903); /* endv */
1659 return 0; // abort_flag set
1661 if(align_state < 500000L) { /* ??? */
1662 fatal_error(592); /* (interwoven alignment preambles are not allowed) */
1663 return 0; // abort_flag set
1665 p = mem[q].hh.v.RH; /* p <- link(q) p.791 */
1666 /* if (p = null) ^ (extra_info(cur_align) < cr_code) then p.792 */
1667 if((p == 0)&&(mem[cur_align + 5].hh.v.LH < 257))
1670 /* potential problem here if new_null_box causes memory reallocation ??? */
1671 /* compiler optimization does not refresh `mem' loaded in registers ? */
1672 mem[q].hh.v.RH = new_null_box ();
1674 mem[p].hh.v.LH = mem_top - 9;
1675 mem[p + 1].cint = -1073741824L; /* - 2^30 */
1676 cur_loop = mem[cur_loop].hh.v.RH;
1678 r = mem[cur_loop + 3].cint;
1681 mem[q].hh.v.RH = get_avail ();
1683 mem[q].hh.v.LH = mem[r].hh.v.LH;
1687 mem[p + 3].cint = mem[mem_top - 4].hh.v.RH;
1689 r = mem[cur_loop + 2].cint;
1692 mem[q].hh.v.RH = get_avail ();
1694 mem[q].hh.v.LH = mem[r].hh.v.LH;
1698 mem[p + 2].cint = mem[mem_top - 4].hh.v.RH;
1699 cur_loop = mem[cur_loop].hh.v.RH;
1700 mem[p].hh.v.RH = new_glue(mem[cur_loop + 1].hh.v.LH);
1703 print_err("Extra alignment tab has been changed to ");
1704 print_esc(893); /* cr */
1707 help_line[2]= 905; /* You have given more \span or & marks than there were */
1708 help_line[1]= 906; /* in the preamble to the \halign or \valign now in progress. */
1709 help_line[0]= 907; /* So I'll assume that you meant to type \cr instead. */
1711 /* extra_info(cur_align) < cr_code) ? */
1712 mem[cur_align + 5].hh.v.LH = 257;
1715 if(mem[cur_align + 5].hh.v.LH != 256)
1722 adjust_tail = cur_tail;
1723 u = hpack(mem[head].hh.v.RH, 0, 1);
1724 w = mem[u + 1].cint;
1725 cur_tail = adjust_tail;
1730 u = vpackage(mem[head].hh.v.RH, 0, 1, 0);
1731 w = mem[u + 3].cint;
1734 if(cur_span != cur_align)
1739 q = mem[mem[q].hh.v.RH].hh.v.RH;
1740 } while(!(q == cur_align));
1741 /* if n > max_quarterword then confusion("256 spans"); p.798 */
1742 /* if(n > 255) */ /* 94/Apr/4 ? */
1743 if(n > max_quarterword) { /* 96/Oct/12 ??? */
1744 confusion(908); /* 256 spans --- message wrong now, but ... */
1745 return 0; // abort_flag set
1748 while(mem[mem[q].hh.v.LH].hh.v.RH < n)q = mem[q].hh
1750 if(mem[mem[q].hh.v.LH].hh.v.RH > n)
1753 mem[s].hh.v.LH = mem[q].hh.v.LH;
1756 mem[s + 1].cint = w;
1758 else if(mem[mem[q].hh.v.LH + 1].cint < w)
1759 mem[mem[q].hh.v.LH + 1].cint = w;
1761 else if(w > mem[cur_align + 1].cint)
1762 mem[cur_align + 1].cint = w;
1765 if(totalstretch[3]!= 0)
1767 else if(totalstretch[2]!= 0)
1769 else if(totalstretch[1]!= 0)
1772 mem[u + 5].hh.b1 = o;
1773 mem[u + 6].cint = totalstretch[o];
1774 if(totalshrink[3]!= 0)
1776 else if(totalshrink[2]!= 0)
1778 else if(totalshrink[1]!= 0)
1781 mem[u + 5].hh.b0 = o;
1782 mem[u + 4].cint = totalshrink[o];
1784 mem[tail].hh.v.RH = u;
1788 mem[tail].hh.v.RH = new_glue(mem[mem[cur_align]
1789 .hh.v.RH + 1].hh.v.LH);
1790 tail = mem[tail].hh.v.RH;
1792 mem[tail].hh.b1 = 12;
1793 /* if (extra_info(cur_align) >= cr_code) then p.792 */
1794 if(mem[cur_align + 5].hh.v.LH >= 257)
1801 align_state = 1000000L;
1804 } while(!(cur_cmd != 10));
1810 /* #pragma optimize ("g", on) */ /* for MC VS compiler */
1811 /* #pragma optimize ("g",) */ /* 94/Jan/25 */
1812 /* #pragma optimize ("", on) */ /* 96/Sep/12 */
1813 /* #pragma optimize("g", off) */ /* for MC VS compiler */
1815 scaled make_op_(halfword q)
1816 {register scaled Result;
1818 halfword p, v, x, y, z;
1821 scaled shiftup, shiftdown;
1822 if((mem[q].hh.b1 == 0)&&(cur_style < 2))
1824 if(mem[q + 1].hh.v.RH == 1)
1827 if((cur_style < 2)&&(((cur_i.b2)% 4)== 2))
1830 i = font_info[char_base[cur_f]+ c].qqqq;
1835 mem[q + 1].hh.b1 = c;
1838 delta = font_info[italic_base[cur_f]+(cur_i.b2)/ 4].cint;
1839 x = clean_box(q + 1, cur_style);
1840 if((mem[q + 3].hh.v.RH != 0)&&(mem[q].hh.b1 != 1))
1841 mem[x + 1].cint = mem[x + 1].cint - delta;
1842 mem[x + 4].cint = half(mem[x + 3].cint - mem[x + 2].cint)-
1843 font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1844 mem[q + 1].hh.v.RH = 2;
1845 mem[q + 1].hh.v.LH = x;
1848 if(mem[q].hh.b1 == 1)
1850 x = clean_box(q + 2, 2 *(cur_style / 4)+ 4 +(cur_style % 2));
1851 y = clean_box(q + 1, cur_style);
1852 z = clean_box(q + 3, 2 *(cur_style / 4)+ 5);
1853 v = new_null_box ();
1855 mem[v + 1].cint = mem[y + 1].cint;
1856 if(mem[x + 1].cint > mem[v + 1].cint)
1857 mem[v + 1].cint = mem[x + 1].cint;
1858 if(mem[z + 1].cint > mem[v + 1].cint)
1859 mem[v + 1].cint = mem[z + 1].cint;
1860 x = rebox(x, mem[v + 1].cint);
1861 y = rebox(y, mem[v + 1].cint);
1862 z = rebox(z, mem[v + 1].cint);
1863 mem[x + 4].cint = half(delta);
1864 mem[z + 4].cint = - (integer) mem[x + 4].cint;
1865 mem[v + 3].cint = mem[y + 3].cint;
1866 mem[v + 2].cint = mem[y + 2].cint;
1867 if(mem[q + 2].hh.v.RH == 0)
1870 mem[v + 5].hh.v.RH = y;
1874 shiftup = font_info[11 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH
1875 ]].cint - mem[x + 2].cint;
1876 if(shiftup < font_info[9 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
1878 shiftup = font_info[9 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH
1880 p = new_kern(shiftup);
1883 p = new_kern(font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
1886 mem[v + 5].hh.v.RH = p;
1887 mem[v + 3].cint = mem[v + 3].cint + font_info[13 + param_base[
1888 eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint + mem[x + 3].cint + mem
1889 [x + 2].cint + shiftup;
1891 if(mem[q + 3].hh.v.RH == 0)
1895 shiftdown = font_info[12 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
1896 .v.RH]].cint - mem[z + 3].cint;
1897 if(shiftdown < font_info[10 + param_base[eqtb[(hash_size + 1838) + cur_size]
1899 shiftdown = font_info[10 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
1901 p = new_kern(shiftdown);
1904 p = new_kern(font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh
1907 mem[v + 2].cint = mem[v + 2].cint + font_info[13 + param_base[
1908 eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint + mem[z + 3].cint + mem
1909 [z + 2].cint + shiftdown;
1911 mem[q + 1].cint = v;
1916 /* #pragma optimize ("g", on) */ /* for MC VS compiler */
1917 /* #pragma optimize ("g",) */ /* 94/Jan/25 */
1918 /* #pragma optimize ("", on) */ /* 96/Sep/12 */
1919 /* #pragma optimize ("g", off) */
1921 void make_scripts_(halfword q, scaled delta)
1923 halfword p, x, y, z;
1924 scaled shiftup, shiftdown, clr;
1926 p = mem[q + 1].cint;
1927 if((p >= hi_mem_min))
1938 shiftup = mem[z + 3].cint - font_info[18 + param_base[eqtb[(hash_size + 1837) +
1940 shiftdown = mem[z + 2].cint + font_info[19 + param_base[eqtb[(hash_size + 1837)
1941 + t].hh.v.RH]].cint;
1944 if(mem[q + 2].hh.v.RH == 0)
1946 x = clean_box(q + 3, 2 *(cur_style / 4)+ 5);
1947 mem[x + 1].cint = mem[x + 1].cint + eqtb[(hash_size + 3742)].cint;
1948 if(shiftdown < font_info[16 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
1950 shiftdown = font_info[16 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH
1952 clr = mem[x + 3].cint -(abs(font_info[5 + param_base[eqtb[
1953 (hash_size + 1837) + cur_size].hh.v.RH]].cint * 4)/ 5);
1956 mem[x + 4].cint = shiftdown;
1961 x = clean_box(q + 2, 2 *(cur_style / 4)+ 4 +(cur_style % 2));
1962 mem[x + 1].cint = mem[x + 1].cint + eqtb[(hash_size + 3742)].cint;
1964 clr = font_info[15 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]]
1966 else if(cur_style < 2)
1967 clr = font_info[13 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]]
1969 else clr = font_info[14 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
1973 clr = mem[x + 2].cint +(abs(font_info[5 +
1974 param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint)/ 4);
1978 if(mem[q + 3].hh.v.RH == 0)
1979 mem[x + 4].cint = - (integer) shiftup;
1982 y = clean_box(q + 3, 2 *(cur_style / 4)+ 5);
1983 mem[y + 1].cint = mem[y + 1].cint + eqtb[(hash_size + 3742)].cint;
1984 if(shiftdown < font_info[17 + param_base[eqtb[(hash_size + 1837) + cur_size]
1986 shiftdown = font_info[17 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
1988 clr = 4 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH
1989 ]].cint -((shiftup - mem[x + 2].cint)-(mem[y + 3].cint
1993 shiftdown = shiftdown + clr;
1994 clr =(abs(font_info[5 + param_base[eqtb[(hash_size + 1837) + cur_size].hh
1995 .v.RH]].cint * 4)/ 5)-(shiftup - mem[x + 2].cint);
1998 shiftup = shiftup + clr;
1999 shiftdown = shiftdown - clr;
2002 mem[x + 4].cint = delta;
2003 p = new_kern((shiftup - mem[x + 2].cint)-(mem[y + 3].cint
2007 x = vpackage(x, 0, 1, 1073741823L); /* 2^30 - 1 */
2008 mem[x + 4].cint = shiftdown;
2011 if(mem[q + 1].cint == 0)
2012 mem[q + 1].cint = x;
2015 p = mem[q + 1].cint;
2016 while(mem[p].hh.v.RH != 0)p = mem[p].hh.v.RH;
2020 /* #pragma optimize ("g", on) */ /* 96/Sep/12 */
2021 /* #pragma optimize ("g") */ /* 94/Jan/25 */
2022 #pragma optimize ("", on) /* 96/Sep/12 */
2023 /***************************************************************************/