6 #pragma warning(disable:4115) // kill rpcasync.h complaint
8 #define MYLIBAPI __declspec(dllexport)
13 #pragma warning(disable:4131) // old style declarator
14 #pragma warning(disable:4135) // conversion between different integral types
15 #pragma warning(disable:4127) // conditional expression is constant
23 #pragma warning(disable:4244) /* 96/Jan/10 */
25 /* rebox_ used to be in tex4.c */
27 halfword rebox_(halfword b, scaled w)
29 register halfword Result;
31 internal_font_number f;
33 /* begin if (width(b)<>w)and(list_ptr(b)<>null) then l.14010 */
34 if ((mem[b + 1].cint != w) && (mem[b + 5].hh.v.RH != 0))
36 if (mem[b].hh.b0 == 1)
38 p = mem[b + 5].hh.v.RH;
39 /* if (is_char_node(p))and(link(p)=null) then l.14013 */
40 if (((p >= hi_mem_min)) &&(mem[p].hh.v.RH == 0))
43 v = font_info[width_base[f] + font_info[char_base[f] + mem[p].hh.b1].qqqq.b0].cint;
44 if (v != mem[b + 1].cint)
45 mem[p].hh.v.RH = new_kern(mem[b + 1].cint - v);
50 /* while link(p)<>null do p:=link(p); l.14019 */
51 while (mem[p].hh.v.RH != 0)
53 mem[p].hh.v.RH = new_glue(12);
54 Result = hpack(b, w, 0);
63 /* This is to be the start of tex5.c */
65 halfword math_glue_(halfword g, scaled m)
67 register halfword Result;
72 n = x_over_n(m, 65536L);
80 mem[p + 1].cint = mult_and_add(n, mem[g + 1].cint, xn_over_d(mem[g + 1].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
81 mem[p].hh.b0 = mem[g].hh.b0;
82 if (mem[p].hh.b0 == 0)
83 mem[p + 2].cint = mult_and_add(n, mem[g + 2].cint, xn_over_d(mem[g + 2].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
85 mem[p + 2].cint = mem[g + 2].cint;
86 mem[p].hh.b1 = mem[g].hh.b1;
87 if (mem[p].hh.b1 == 0)
88 mem[p + 3].cint = mult_and_add(n, mem[g + 3].cint, xn_over_d(mem[g + 3].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
90 mem[p + 3].cint = mem[g + 3].cint;
95 void math_kern_ (halfword p, scaled m)
100 if (mem[p].hh.b1 == 99)
102 n = x_over_n(m, 65536L);
109 mem[p + 1].cint = mult_and_add(n, mem[p + 1].cint, xn_over_d(mem[p + 1].cint, f, 65536L), 1073741823L); /* 2^30 - 1 */
110 /* mem[p].hh.b1 = 0; */
111 mem[p].hh.b1 = 1; /* changed in 3.14159 */
115 void flush_math (void)
117 flush_node_list(mem[head].hh.v.RH);
118 flush_node_list(cur_list.aux_field.cint);
119 mem[head].hh.v.RH = 0;
121 cur_list.aux_field.cint = 0;
124 halfword clean_box_(halfword p, small_number s)
126 register halfword Result;
128 small_number savestyle;
132 switch(mem[p].hh.v.RH)
136 cur_mlist = new_noad();
137 mem[cur_mlist + 1]= mem[p];
147 cur_mlist = mem[p].hh.v.LH;
156 savestyle = cur_style;
158 mlist_penalties = false;
160 q = mem[temp_head].hh.v.RH;
161 cur_style = savestyle;
166 cur_size = 16 * ((cur_style - 2) / 2);
167 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
170 if ((q >= hi_mem_min) || (q == 0))
172 else if ((mem[q].hh.v.RH == 0) && (mem[q].hh.b0 <= 1) && (mem[q + 4].cint == 0))
176 q = mem[x + 5].hh.v.RH;
177 if ((q >= hi_mem_min))
180 /* if r<>null then if link(r)=null then l.14140 */
182 if (mem[r].hh.v.RH == 0)
183 if (!(r >= hi_mem_min))
184 if (mem[r].hh.b0 == 11)
187 mem[q].hh.v.RH = 0; /* link(q):=null; */
194 void fetch_(halfword a)
196 cur_c = mem[a].hh.b1;
197 cur_f = eqtb[(hash_size + 1835) + mem[a].hh.b0 + cur_size].hh.v.RH;
202 print_size(cur_size);
204 print_int(mem[a].hh.b0);
205 print_string(" is undefined (character ");
208 help4("Somewhere in the math formula just ended, you used the",
209 "stated character from an undefined font family. For example,",
210 "plain TeX doesn't allow \\it or \\sl in subscripts. Proceed,",
211 "and I'll try to forget that I needed that character.");
213 cur_i = null_character;
218 if ((cur_c >= font_bc[cur_f]) && (cur_c <= font_ec[cur_f]))
219 cur_i = font_info[char_base[cur_f]+ cur_c].qqqq;
221 cur_i = null_character;
222 if (!((cur_i.b0 > 0)))
224 char_warning(cur_f, cur_c);
230 void make_over_(halfword q)
232 mem[q + 1].hh.v.LH = overbar(clean_box(q + 1, 2 * (cur_style / 2) + 1),
233 3 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint,
234 font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
235 mem[q + 1].hh.v.RH = 2;
238 void make_under_(halfword q)
242 x = clean_box(q + 1, cur_style);
243 p = new_kern(3 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
245 mem[p].hh.v.RH = fraction_rule(font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
246 y = vpackage(x, 0, 1, 1073741823L); /* 2^30 - 1 */
247 delta = mem[y + 3].cint + mem[y + 2].cint + font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
248 mem[y + 3].cint = mem[x + 3].cint;
249 mem[y + 2].cint = delta - mem[y + 3].cint;
250 mem[q + 1].hh.v.LH = y;
251 mem[q + 1].hh.v.RH = 2;
254 void make_vcenter_(halfword q)
258 v = mem[q + 1].hh.v.LH;
259 if (mem[v].hh.b0 != 1)
261 confusion("vcenter");
262 return; // abort_flag set
264 delta = mem[v + 3].cint + mem[v + 2].cint;
265 mem[v + 3].cint = font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + half(delta);
266 mem[v + 2].cint = delta - mem[v + 3].cint;
269 void make_radical_(halfword q)
273 x = clean_box(q + 1, 2 *(cur_style / 2)+ 1);
275 clr = font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint +
276 (abs(font_info[5 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint)/ 4);
279 clr = font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
280 clr = clr + (abs(clr) / 4);
282 y = var_delimiter(q + 4,
283 cur_size, mem[x + 3].cint + mem[x + 2].cint + clr + font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
284 delta = mem[y + 2].cint -(mem[x + 3].cint + mem[x + 2].cint + clr);
286 clr = clr + half(delta);
287 mem[y + 4].cint = - (integer) (mem[x + 3].cint + clr);
288 mem[y].hh.v.RH = overbar(x, clr, mem[y + 3].cint);
289 mem[q + 1].hh.v.LH = hpack(y, 0, 1);
290 mem[q + 1].hh.v.RH = 2;
293 void make_math_accent_(halfword q)
298 internal_font_number f;
311 if (mem[q + 1].hh.v.RH == 1)
314 if (((cur_i.b2)% 4)== 1)
316 a = lig_kern_base[cur_f]+ cur_i.b3;
317 cur_i = font_info[a].qqqq;
320 a = lig_kern_base[cur_f]+ 256 * cur_i.b2 + cur_i.b3 + 32768L - 256 * (128);
321 cur_i = font_info[a].qqqq;
325 if (cur_i.b1 == skew_char[cur_f])
329 s = font_info[kern_base[cur_f]+ 256 * cur_i.b2 + cur_i.b3].cint;
334 a = a + cur_i.b0 + 1;
335 cur_i = font_info[a].qqqq;
340 x = clean_box(q + 1, 2 * (cur_style / 2) + 1);
345 if (((i.b2)% 4) != 2)
348 i = font_info[char_base[f]+ y].qqqq;
351 if (font_info[width_base[f]+ i.b0].cint > w)
353 /* long to unsigned short ... */
357 if (h < font_info[5 + param_base[f]].cint)
360 delta = font_info[5 + param_base[f]].cint;
361 if ((mem[q + 2].hh.v.RH != 0) || (mem[q + 3].hh.v.RH != 0))
362 if (mem[q + 1].hh.v.RH == 1)
366 mem[x + 1]= mem[q + 1];
367 mem[x + 2]= mem[q + 2];
368 mem[x + 3]= mem[q + 3];
369 mem[q + 2].hh = empty_field;
370 mem[q + 3].hh = empty_field;
371 mem[q + 1].hh.v.RH = 3;
372 mem[q + 1].hh.v.LH = x;
373 x = clean_box(q + 1, cur_style);
374 delta = delta + mem[x + 3].cint - h;
378 mem[y + 4].cint = s + half(w - mem[y + 1].cint);
380 p = new_kern(- (integer) delta);
383 y = vpackage(y, 0, 1, 1073741823L); /* 2^30 - 1 */
384 mem[y + 1].cint = mem[x + 1].cint;
385 if (mem[y + 3].cint < h)
387 p = new_kern(h - mem[y + 3].cint);
388 mem[p].hh.v.RH = mem[y + 5].hh.v.RH;
389 mem[y + 5].hh.v.RH = p;
392 mem[q + 1].hh.v.LH = y;
393 mem[q + 1].hh.v.RH = 2;
397 void make_fraction_(halfword q)
399 halfword p, v, x, y, z;
400 scaled delta, delta1, delta2, shiftup, shiftdown, clr;
402 if (mem[q + 1].cint == 1073741824L) /* 2^30 */
403 mem[q + 1].cint = font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
404 x = clean_box(q + 2, cur_style + 2 - 2 * (cur_style / 6));
405 z = clean_box(q + 3, 2 * (cur_style / 2) + 3 - 2 * (cur_style / 6));
406 if (mem[x + 1].cint < mem[z + 1].cint)
407 x = rebox(x, mem[z + 1].cint);
409 z = rebox(z, mem[x + 1].cint);
412 shiftup = font_info[8 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
413 shiftdown = font_info[11 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
417 shiftdown = font_info[12 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
418 if (mem[q + 1].cint != 0)
419 shiftup = font_info[9 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
421 shiftup = font_info[10 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
423 if (mem[q + 1].cint == 0)
426 clr = 7 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
428 clr = 3 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
429 delta = half(clr - ((shiftup - mem[x + 2].cint) - (mem[z + 3].cint - shiftdown)));
432 shiftup = shiftup + delta;
433 shiftdown = shiftdown + delta;
439 clr = 3 * mem[q + 1].cint;
441 clr = mem[q + 1].cint;
442 delta = half(mem[q + 1].cint);
443 delta1 = clr - ((shiftup - mem[x + 2].cint) - (font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + delta));
444 delta2 = clr -((font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint - delta) - (mem[z + 3].cint - shiftdown));
446 shiftup = shiftup + delta1;
448 shiftdown = shiftdown + delta2;
452 mem[v + 3].cint = shiftup + mem[x + 3].cint;
453 mem[v + 2].cint = mem[z + 2].cint + shiftdown;
454 mem[v + 1].cint = mem[x + 1].cint;
455 if (mem[q + 1].cint == 0)
457 p = new_kern((shiftup - mem[x + 2].cint)-(mem[z + 3].cint - shiftdown));
462 y = fraction_rule(mem[q + 1].cint);
463 p = new_kern((font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint - delta) - (mem[z + 3].cint - shiftdown));
466 p = new_kern((shiftup - mem[x + 2].cint) - (font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint + delta));
470 mem[v + 5].hh.v.RH = x;
472 delta = font_info[20 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
474 delta = font_info[21 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
475 x = var_delimiter(q + 4, cur_size, delta);
477 z = var_delimiter(q + 5, cur_size, delta);
479 mem[q + 1].cint = hpack(x, 0, 1);
481 /***************************************************************************/
482 /* moved to end to avoid questions about pragma optimize 96/Sep/12 */
483 scaled make_op_ (halfword);
484 /***************************************************************************/
486 void make_ord_(halfword q)
491 if (mem[q + 3].hh.v.RH == 0)
492 if (mem[q + 2].hh.v.RH == 0)
493 if (mem[q + 1].hh.v.RH == 1)
497 if ((mem[p].hh.b0 >= 16) && (mem[p].hh.b0 <= 22))
498 if (mem[p + 1].hh.v.RH == 1)
499 if (mem[p + 1].hh.b0 == mem[q + 1].hh.b0)
501 mem[q + 1].hh.v.RH = 4;
503 if (((cur_i.b2) % 4) == 1)
505 a = lig_kern_base[cur_f]+ cur_i.b3;
506 cur_c = mem[p + 1].hh.b1;
507 cur_i = font_info[a].qqqq;
510 a = lig_kern_base[cur_f] + 256 * cur_i.b2 + cur_i.b3 + 32768L - 256 * (128);
511 cur_i = font_info[a].qqqq;
515 if (cur_i.b1 == cur_c)
519 p = new_kern(font_info[kern_base[cur_f] + 256 * cur_i.b2 + cur_i.b3].cint);
520 mem[p].hh.v.RH = mem[q].hh.v.RH;
529 pause_for_instructions();
536 mem[q + 1].hh.b1 = cur_i.b3;
540 mem[p + 1].hh.b1 = cur_i.b3;
547 mem[r + 1].hh.b1 = cur_i.b3;
548 mem[r + 1].hh.b0 = mem[q + 1].hh.b0;
552 mem[r + 1].hh.v.RH = 1;
554 mem[r + 1].hh.v.RH = 4;
559 mem[q].hh.v.RH = mem[p].hh.v.RH;
560 mem[q + 1].hh.b1 = cur_i.b3;
561 mem[q + 3]= mem[p + 3];
562 mem[q + 2]= mem[p + 2];
569 mem[q + 1].hh.v.RH = 1;
574 a = a + cur_i.b0 + 1;
575 cur_i = font_info[a].qqqq;
581 /***************************************************************************/
582 /* moved to end to avoid questions about pragma optimize 96/Sep/12 */
583 void make_scripts_ (halfword, scaled);
584 /***************************************************************************/
586 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;
594 cur_size = 16 * ((style - 2) / 2);
595 delta2 = maxd + font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
596 delta1 = max_h + maxd - delta2;
599 delta = (delta1 / 500) * delimiter_factor;
600 delta2 = delta1 + delta1 - delimiter_shortfall;
603 mem[q + 1].cint = var_delimiter(q + 1, cur_size, delta);
604 Result = mem[q].hh.b0 - (10);
608 void mlist_to_hlist (void)
613 small_number savestyle;
616 /* small_number rtype; */
617 int rtype; /* 95/Jan/7 */
618 /* small_number t; */
619 int t; /* 95/Jan/7 */
626 penalties = mlist_penalties;
637 cur_size = 16 * ((cur_style - 2) / 2);
638 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
644 switch (mem[q].hh.b0)
672 if (mem[q].hh.b0 == 31)
688 if (mem[q].hh.b1 == 1)
716 cur_style = mem[q].hh.b1;
721 cur_size = 16 * ((cur_style - 2) / 2);
722 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
729 switch (cur_style / 2)
733 p = mem[q + 1].hh.v.LH;
734 mem[q + 1].hh.v.LH = 0;
739 p = mem[q + 1].hh.v.RH;
740 mem[q + 1].hh.v.RH = 0;
745 p = mem[q + 2].hh.v.LH;
746 mem[q + 2].hh.v.LH = 0;
751 p = mem[q + 2].hh.v.RH;
752 mem[q + 2].hh.v.RH = 0;
756 flush_node_list(mem[q + 1].hh.v.LH);
757 flush_node_list(mem[q + 1].hh.v.RH);
758 flush_node_list(mem[q + 2].hh.v.LH);
759 flush_node_list(mem[q + 2].hh.v.RH);
761 mem[q].hh.b1 = cur_style;
764 if (p != 0)/* if p<>null then l.14317 */
768 /* while link(p)<>null do p:=link(p); */
769 while (mem[p].hh.v.RH != 0)
786 if (mem[q + 3].cint > max_h)
787 max_h = mem[q + 3].cint;
788 if (mem[q + 2].cint > maxd)
789 maxd = mem[q + 2].cint;
795 if (mem[q].hh.b1 == 99)
797 x = mem[q + 1].hh.v.LH;
798 y = math_glue(x, cur_mu);
800 mem[q + 1].hh.v.LH = y;
803 else if ((cur_size != 0) && (mem[q].hh.b1 == 98))
806 /* if p<>null then if (type(p)=glue_node)or(type(p)=kern_node) then */
808 if ((mem[p].hh.b0 == 10) || (mem[p].hh.b0 == 11))
810 mem[q].hh.v.RH = mem[p].hh.v.RH;
820 math_kern(q, cur_mu);
827 return; // abort_flag set
830 } /* end of switch */
831 switch (mem[q + 1].hh.v.RH)
839 delta = font_info[italic_base[cur_f]+(cur_i.b2)/ 4].cint;
840 p = new_character(cur_f, cur_c);
841 if ((mem[q + 1].hh.v.RH == 4) && (font_info[2 + param_base[cur_f]].cint != 0))
843 if ((mem[q + 3].hh.v.RH == 0) && (delta != 0))
845 mem[p].hh.v.RH = new_kern(delta);
857 p = mem[q + 1].hh.v.LH;
861 cur_mlist = mem[q + 1].hh.v.LH;
862 savestyle = cur_style;
863 mlist_penalties = false;
865 cur_style = savestyle;
870 cur_size = 16 * ((cur_style - 2) / 2);
871 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
873 p = hpack(mem[temp_head].hh.v.RH, 0, 1);
879 return; // abort_flag set
882 } /* end of switch */
884 mem[q + 1].cint = p; /* p may be used without ... */
885 if ((mem[q + 3].hh.v.RH == 0) && (mem[q + 2].hh.v.RH == 0))
887 make_scripts(q, delta);
889 z = hpack(mem[q + 1].cint, 0, 1);
890 if (mem[z + 3].cint > max_h)
891 max_h = mem[z + 3].cint;
892 if (mem[z + 2].cint > maxd)
893 maxd = mem[z + 2].cint;
897 rtype = mem[r].hh.b0;
912 cur_size = 16 *((cur_style - 2) / 2);
913 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
920 switch (mem[q].hh.b0)
932 pen = bin_op_penalty;
961 t = make_left_right(q, style, maxd, max_h);
965 cur_style = mem[q].hh.b1;
971 cur_size = 16 *((cur_style - 2) / 2);
972 cur_mu = x_over_n(font_info[6 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint, 18);
997 return; // abort_flag set
1003 switch (str_pool[rtype * 8 + t + magic_offset])
1031 confusion("mlist4");
1032 return; // abort_flag set
1038 y = math_glue(eqtb[(hash_size + 782) + x].hh.v.RH, cur_mu); /* gluebase + x */
1043 mem[z].hh.b1 = x + 1; /* x may be used without ... */
1046 if (mem[q + 1].cint != 0)
1048 mem[p].hh.v.RH = mem[q + 1].cint;
1053 while (!(mem[p].hh.v.RH == 0));
1056 if (mem[q].hh.v.RH != 0)
1059 rtype = mem[mem[q].hh.v.RH].hh.b0;
1063 z = new_penalty(pen);
1077 void push_alignment (void)
1081 mem[p].hh.v.RH = align_ptr;
1082 mem[p].hh.v.LH = cur_align;
1083 mem[p + 1].hh.v.LH = mem[align_head].hh.v.RH;
1084 mem[p + 1].hh.v.RH = cur_span;
1085 mem[p + 2].cint = cur_loop;
1086 mem[p + 3].cint = align_state;
1087 mem[p + 4].hh.v.LH = cur_head;
1088 mem[p + 4].hh.v.RH = cur_tail;
1090 cur_head = get_avail();
1093 void pop_alignment (void)
1097 mem[cur_head].hh.v.RH = avail;
1104 cur_tail = mem[p + 4].hh.v.RH;
1105 cur_head = mem[p + 4].hh.v.LH;
1106 align_state = mem[p + 3].cint;
1107 cur_loop = mem[p + 2].cint;
1108 cur_span = mem[p + 1].hh.v.RH;
1109 mem[align_head].hh.v.RH = mem[p + 1].hh.v.LH;
1110 cur_align = mem[p].hh.v.LH;
1111 align_ptr = mem[p].hh.v.RH;
1115 void get_preamble_token (void)
1119 while ((cur_chr == 256) && (cur_cmd == 4))
1130 fatal_error("(interwoven alignment preambles are not allowed)");
1131 return; // abort_flag set
1133 if ((cur_cmd == 75) && (cur_chr == (hash_size + 793)))
1135 scan_optional_equals();
1137 if (global_defs > 0)
1138 geq_define((hash_size + 793), 117, cur_val);
1140 eq_define((hash_size + 793), 117, cur_val);
1145 void init_align (void)
1152 align_state = -1000000L;
1154 if ((mode == 203) && ((tail != cur_list.head_field) || (cur_list.aux_field.cint != 0)))
1156 print_err("Improper ");
1157 print_esc("halign");
1158 print_string(" inside $$'s");
1159 help3("Displays can use special alignments (like \\eqalignno)",
1160 "only if nothing but the alignment itself is between $$'s.",
1161 "So I've deleted the formulas that preceded this alignment.");
1169 cur_list.aux_field.cint = nest[nest_ptr - 2].aux_field.cint;
1172 /* long to short ... */
1173 mode = - (integer) mode;
1174 scan_spec(6, false);
1175 mem[align_head].hh.v.RH = 0;
1176 cur_align = align_head;
1179 warning_index = savecsptr;
1180 align_state = -1000000L;
1183 mem[cur_align].hh.v.RH = new_param_glue(11);
1184 cur_align = mem[cur_align].hh.v.RH;
1191 get_preamble_token();
1194 if ((cur_cmd <= 5) && (cur_cmd >= 4) && (align_state == -1000000L))
1195 if ((p == hold_head) && (cur_loop == 0) && (cur_cmd == 4))
1196 cur_loop = cur_align;
1199 print_err("Missing # inserted in alignment preamble");
1200 help3("There should be exactly one # between &'s, when an",
1201 "\\halign or \\valign is being set up. In this case you had",
1202 "none, so I've put one in; maybe that will work.");
1206 else if ((cur_cmd != 10) || (p != hold_head))
1208 mem[p].hh.v.RH = get_avail();
1210 mem[p].hh.v.LH = cur_tok;
1214 mem[cur_align].hh.v.RH = new_null_box();
1215 cur_align = mem[cur_align].hh.v.RH;
1216 mem[cur_align].hh.v.LH = end_span;
1217 mem[cur_align + 1].cint = -1073741824L; /* - 2^30 */
1218 mem[cur_align + 3].cint = mem[hold_head].hh.v.RH;
1224 get_preamble_token();
1225 if ((cur_cmd <= 5) && (cur_cmd >= 4) && (align_state == -1000000L))
1229 print_err("Only one # is allowed per tab");
1230 help3("There should be exactly one # between &'s, when an",
1231 "\\halign or \\valign is being set up. In this case you had",
1232 "more than one, so I'm ignoring all but the first.");
1236 mem[p].hh.v.RH = get_avail();
1238 mem[p].hh.v.LH = cur_tok;
1241 mem[p].hh.v.RH = get_avail();
1243 /* mem[p].hh.v.LH = (hash_size + 4614); */
1244 /* mem[p].hh.v.LH = (hash_size + 4095 + 519); */
1245 mem[p].hh.v.LH = (hash_size + hash_extra + 4095 + 519); /* 96/Jan/10 */
1246 mem[cur_align + 2].cint = mem[hold_head].hh.v.RH;
1251 /* if every_cr<>null then begin_token_list(every_cr,every_cr_text); l.15665 */
1252 if (every_cr != 0) /* everycr */
1253 begin_token_list(every_cr, 13);
1257 void init_span_ (halfword p)
1261 space_factor = 1000;
1264 cur_list.aux_field.cint = ignore_depth;
1270 void init_row (void)
1273 mode = (-103) - mode;
1277 cur_list.aux_field.cint = 0;
1279 tail_append(new_glue(mem[mem[align_head].hh.v.RH + 1].hh.v.LH));
1280 mem[tail].hh.b1 = 12;
1281 cur_align = mem[mem[align_head].hh.v.RH].hh.v.RH;
1282 cur_tail = cur_head;
1283 init_span(cur_align);
1286 void init_col (void)
1288 mem[cur_align + 5].hh.v.LH = cur_cmd;
1294 begin_token_list(mem[cur_align + 3].cint, 1);
1297 /* fin_col() moved to end to hide in pragma (g, "off") */
1298 /* may need to move more ? everything calling new_null_box() ? */
1305 p = hpack(mem[head].hh.v.RH, 0, 1);
1308 if (cur_head != cur_tail)
1310 mem[tail].hh.v.RH = mem[cur_head].hh.v.RH;
1316 p = vpackage(mem[head].hh.v.RH, 0, 1, 1073741823L); /* 2^30 - 1 */
1318 mem[tail].hh.v.RH = p;
1320 space_factor = 1000;
1323 mem[p + 6].cint = 0;
1324 if (every_cr != 0) /* everycr */
1325 begin_token_list(every_cr, 13);
1329 void fin_align (void)
1331 halfword p, q, r, s, u, v;
1336 memory_word auxsave;
1340 confusion("align1");
1341 return; // abort_flag set
1346 confusion("align0");
1347 return; // abort_flag set
1350 if (nest[nest_ptr - 1].mode_field == 203)
1354 q = mem[mem[align_head].hh.v.RH].hh.v.RH;
1357 flush_list(mem[q + 3].cint);
1358 flush_list(mem[q + 2].cint);
1359 p = mem[mem[q].hh.v.RH].hh.v.RH;
1360 if (mem[q + 1].cint == -1073741824L) /* - 2^30 */
1362 mem[q + 1].cint = 0;
1364 s = mem[r + 1].hh.v.LH;
1367 incr(mem[0].hh.v.RH); /* mem[mem_bot]? mem[null]? */
1369 mem[r + 1].hh.v.LH = 0;
1372 if (mem[q].hh.v.LH != end_span)
1374 t = mem[q + 1].cint + mem[mem[mem[q].hh.v.RH + 1].hh.v.LH + 1].cint;
1381 mem[r + 1].cint = mem[r + 1].cint - t;
1383 while (mem[r].hh.v.RH > n)
1386 n = mem[mem[s].hh.v.LH].hh.v.RH + 1;
1388 if (mem[r].hh.v.RH < n)
1390 mem[r].hh.v.LH = mem[s].hh.v.LH;
1392 decr(mem[r].hh.v.RH);
1397 if (mem[r + 1].cint > mem[mem[s].hh.v.LH + 1].cint)
1398 mem[mem[s].hh.v.LH + 1].cint = mem[r + 1].cint;
1403 while (!(r == end_span));
1407 mem[q + 3].cint = 0;
1408 mem[q + 2].cint = 0;
1409 mem[q + 5].hh.b1 = 0;
1410 mem[q + 5].hh.b0 = 0;
1411 mem[q + 6].cint = 0;
1412 mem[q + 4].cint = 0;
1416 save_ptr = save_ptr - 2;
1417 pack_begin_line = - (integer) mode_line;
1420 rulesave = overfull_rule;
1422 p = hpack(mem[align_head].hh.v.RH, save_stack[save_ptr + 1].cint, save_stack[save_ptr + 0].cint);
1423 overfull_rule = rulesave;
1427 q = mem[mem[align_head].hh.v.RH].hh.v.RH;
1430 mem[q + 3].cint = mem[q + 1].cint;
1431 mem[q + 1].cint = 0;
1432 q = mem[mem[q].hh.v.RH].hh.v.RH;
1435 p = vpackage(mem[align_head].hh.v.RH, save_stack[save_ptr + 1].cint, save_stack[save_ptr + 0].cint, 1073741823L); /* 2^30 - 1 */
1436 q = mem[mem[align_head].hh.v.RH].hh.v.RH;
1439 mem[q + 1].cint = mem[q + 3].cint;
1440 mem[q + 3].cint = 0;
1441 q = mem[mem[q].hh.v.RH].hh.v.RH;
1445 pack_begin_line = 0;
1446 q = mem[head].hh.v.RH;
1449 {/* while q<>null l.15794 OK */
1450 if (!(q >= hi_mem_min)) /* begin if not is_char_node(q) then */
1451 if (mem[q].hh.b0 == 13)
1456 mem[q + 1].cint = mem[p + 1].cint;
1461 mem[q + 3].cint = mem[p + 3].cint;
1463 mem[q + 5].hh.b1 = mem[p + 5].hh.b1;
1464 mem[q + 5].hh.b0 = mem[p + 5].hh.b0;
1465 mem[q + 6].gr = mem[p + 6].gr;
1466 mem[q + 4].cint = o;
1467 r = mem[mem[q + 5].hh.v.RH].hh.v.RH;
1468 s = mem[mem[p + 5].hh.v.RH].hh.v.RH;
1472 t = mem[s + 1].cint;
1479 v = mem[s + 1].hh.v.LH;
1480 mem[u].hh.v.RH = new_glue(v);
1483 t = t + mem[v + 1].cint;
1484 if (mem[p + 5].hh.b0 == 1)
1486 if (mem[v].hh.b0 == mem[p + 5].hh.b1)
1487 t = t + round(mem[p + 6].gr * mem[v + 2].cint);
1489 else if (mem[p + 5].hh.b0 == 2)
1491 if (mem[v].hh.b1 == mem[p + 5].hh.b1)
1492 t = t - round(mem[p + 6].gr * mem[v + 3].cint);
1495 mem[u].hh.v.RH = new_null_box();
1497 t = t + mem[s + 1].cint;
1499 mem[u + 1].cint = mem[s + 1].cint;
1503 mem[u + 3].cint = mem[s + 1].cint;
1508 mem[r + 3].cint = mem[q + 3].cint;
1509 mem[r + 2].cint = mem[q + 2].cint;
1510 if (t == mem[r + 1].cint)
1512 mem[r + 5].hh.b0 = 0;
1513 mem[r + 5].hh.b1 = 0;
1514 mem[r + 6].gr = 0.0;
1516 else if (t > mem[r + 1].cint)
1518 mem[r + 5].hh.b0 = 1;
1519 if (mem[r + 6].cint == 0)
1520 mem[r + 6].gr = 0.0;
1522 mem[r + 6].gr =(t - mem[r + 1].cint)/ ((double) mem[r + 6].cint);
1526 mem[r + 5].hh.b1 = mem[r + 5].hh.b0;
1527 mem[r + 5].hh.b0 = 2;
1528 if (mem[r + 4].cint == 0)
1529 mem[r + 6].gr = 0.0;
1530 else if ((mem[r + 5].hh.b1 == 0) && (mem[r + 1].cint - t > mem[r + 4].cint))
1531 mem[r + 6].gr = 1.0;
1533 mem[r + 6].gr =(mem[r + 1].cint - t)/ ((double) mem[r + 4].cint);
1535 mem[r + 1].cint = w;
1540 mem[r + 1].cint = mem[q + 1].cint;
1541 if (t == mem[r + 3].cint)
1543 mem[r + 5].hh.b0 = 0;
1544 mem[r + 5].hh.b1 = 0;
1545 mem[r + 6].gr = 0.0;
1547 else if (t > mem[r + 3].cint)
1549 mem[r + 5].hh.b0 = 1;
1550 if (mem[r + 6].cint == 0)
1551 mem[r + 6].gr = 0.0;
1552 else mem[r + 6].gr = (t - mem[r + 3].cint) / ((double) mem[r + 6].cint);
1556 mem[r + 5].hh.b1 = mem[r + 5].hh.b0;
1557 mem[r + 5].hh.b0 = 2;
1558 if (mem[r + 4].cint == 0)
1559 mem[r + 6].gr = 0.0;
1560 else if ((mem[r + 5].hh.b1 == 0) && (mem[r + 3].cint - t > mem[r + 4].cint))
1561 mem[r + 6].gr = 1.0;
1563 mem[r + 6].gr =(mem[r + 3].cint - t)/ ((double) mem[r + 4].cint);
1565 mem[r + 3].cint = w;
1568 mem[r + 4].cint = 0;
1571 mem[u].hh.v.RH = mem[r].hh.v.RH;
1572 mem[r].hh.v.RH = mem[hold_head].hh.v.RH;
1575 r = mem[mem[r].hh.v.RH].hh.v.RH;
1576 s = mem[mem[s].hh.v.RH].hh.v.RH;
1580 else if (mem[q].hh.b0 == 2)
1582 if ((mem[q + 1].cint == -1073741824L)) /* 2^30 */
1583 mem[q + 1].cint = mem[p + 1].cint;
1584 if ((mem[q + 3].cint == -1073741824L)) /* 2^30 */
1585 mem[q + 3].cint = mem[p + 3].cint;
1586 if ((mem[q + 2].cint == -1073741824L)) /* 2^30 */
1587 mem[q + 2].cint = mem[p + 2].cint;
1593 mem[q + 4].cint = o;
1603 auxsave = cur_list.aux_field;
1604 p = mem[head].hh.v.RH;
1612 print_err("Missing $$ inserted");
1613 help2("Displays can use special alignments (like \\eqalignno)",
1614 "only if nothing but the alignment itself is between $$'s.");
1622 print_err("Display math should end with $$");
1623 help2("The `$' that I just saw supposedly matches a previous `$$'.",
1624 "So I shall assume that you typed `$$' both times.");
1629 tail_append(new_penalty(pre_display_penalty));
1630 tail_append(new_param_glue(3));
1631 mem[tail].hh.v.RH = p;
1634 tail_append(new_penalty(post_display_penalty));
1635 tail_append(new_param_glue(4));
1636 cur_list.aux_field.cint = auxsave.cint;
1637 resume_after_display();
1641 cur_list.aux_field = auxsave;
1642 mem[tail].hh.v.RH = p;
1643 if (p != 0) /* if p<>null then tail:=q; l.15926 */
1651 /* used to be align_peek, zfintieshrink, etc in old tex5.c */
1652 /************************************************************************/
1653 /* moved down here to avoid questions about pragma optimize */
1654 #pragma optimize("g", off)
1655 /* for MC VS compiler */
1656 /* Moved down here 96/Oct/12 in response to problem with texerror.tex */
1657 /* pragma optimize("a", off) not strong enough - this may slow things */
1661 register bool Result;
1673 return 0; // abort_flag set
1675 q = mem[cur_align].hh.v.RH;
1680 return 0; // abort_flag set
1683 if (align_state < 500000L)
1685 fatal_error("(interwoven alignment preambles are not allowed)"); /* */
1686 return 0; // abort_flag set
1689 p = mem[q].hh.v.RH; /* p <- link(q) p.791 */
1690 /* if (p = null) ^ (extra_info(cur_align) < cr_code) then p.792 */
1691 if ((p == 0) && (mem[cur_align + 5].hh.v.LH < 257))
1694 /* potential problem here if new_null_box causes memory reallocation ??? */
1695 /* compiler optimization does not refresh `mem' loaded in registers ? */
1696 mem[q].hh.v.RH = new_null_box();
1698 mem[p].hh.v.LH = end_span;
1699 mem[p + 1].cint = -1073741824L; /* - 2^30 */
1700 cur_loop = mem[cur_loop].hh.v.RH;
1702 r = mem[cur_loop + 3].cint;
1705 mem[q].hh.v.RH = get_avail();
1707 mem[q].hh.v.LH = mem[r].hh.v.LH;
1711 mem[p + 3].cint = mem[hold_head].hh.v.RH;
1713 r = mem[cur_loop + 2].cint;
1716 mem[q].hh.v.RH = get_avail();
1718 mem[q].hh.v.LH = mem[r].hh.v.LH;
1722 mem[p + 2].cint = mem[hold_head].hh.v.RH;
1723 cur_loop = mem[cur_loop].hh.v.RH;
1724 mem[p].hh.v.RH = new_glue(mem[cur_loop + 1].hh.v.LH);
1728 print_err("Extra alignment tab has been changed to ");
1730 help3("You have given more \\span or & marks than there were",
1731 "in the preamble to the \\halign or \\valign now in progress.",
1732 "So I'll assume that you meant to type \\cr instead.");
1733 /* extra_info(cur_align) < cr_code) ? */
1734 mem[cur_align + 5].hh.v.LH = 257;
1737 if (mem[cur_align + 5].hh.v.LH != 256)
1744 adjust_tail = cur_tail;
1745 u = hpack(mem[head].hh.v.RH, 0, 1);
1746 w = mem[u + 1].cint;
1747 cur_tail = adjust_tail;
1752 u = vpackage(mem[head].hh.v.RH, 0, 1, 0);
1753 w = mem[u + 3].cint;
1756 if (cur_span != cur_align)
1762 q = mem[mem[q].hh.v.RH].hh.v.RH;
1764 while (!(q == cur_align));
1765 /* if n > max_quarterword then confusion("256 spans"); p.798 */
1766 /* if (n > 255) */ /* 94/Apr/4 ? */
1767 if (n > max_quarterword)
1768 { /* 96/Oct/12 ??? */
1769 confusion("256 spans"); /* 256 spans --- message wrong now, but ... */
1770 return 0; // abort_flag set
1773 while (mem[mem[q].hh.v.LH].hh.v.RH < n)
1775 if (mem[mem[q].hh.v.LH].hh.v.RH > n)
1778 mem[s].hh.v.LH = mem[q].hh.v.LH;
1781 mem[s + 1].cint = w;
1783 else if (mem[mem[q].hh.v.LH + 1].cint < w)
1784 mem[mem[q].hh.v.LH + 1].cint = w;
1786 else if (w > mem[cur_align + 1].cint)
1787 mem[cur_align + 1].cint = w;
1790 if (total_stretch[3] != 0)
1792 else if (total_stretch[2] != 0)
1794 else if (total_stretch[1] != 0)
1798 mem[u + 5].hh.b1 = o;
1799 mem[u + 6].cint = total_stretch[o];
1800 if (total_shrink[3] != 0)
1802 else if (total_shrink[2] != 0)
1804 else if (total_shrink[1] != 0)
1808 mem[u + 5].hh.b0 = o;
1809 mem[u + 4].cint = total_shrink[o];
1811 mem[tail].hh.v.RH = u;
1815 tail_append(new_glue(mem[mem[cur_align].hh.v.RH + 1].hh.v.LH));
1816 mem[tail].hh.b1 = 12;
1817 /* if (extra_info(cur_align) >= cr_code) then p.792 */
1818 if (mem[cur_align + 5].hh.v.LH >= 257)
1825 align_state = 1000000L;
1830 while (!(cur_cmd != 10));
1836 /* #pragma optimize ("g", on) */ /* for MC VS compiler */
1837 /* #pragma optimize ("g",) */ /* 94/Jan/25 */
1838 /* #pragma optimize ("", on) */ /* 96/Sep/12 */
1839 /* #pragma optimize("g", off) */ /* for MC VS compiler */
1841 scaled make_op_(halfword q)
1843 register scaled Result;
1845 halfword p, v, x, y, z;
1848 scaled shiftup, shiftdown;
1850 if ((mem[q].hh.b1 == 0) && (cur_style < 2))
1852 if (mem[q + 1].hh.v.RH == 1)
1855 if ((cur_style < 2) && (((cur_i.b2)% 4)== 2))
1858 i = font_info[char_base[cur_f]+ c].qqqq;
1863 mem[q + 1].hh.b1 = c;
1866 delta = font_info[italic_base[cur_f] + (cur_i.b2) / 4].cint;
1867 x = clean_box(q + 1, cur_style);
1868 if ((mem[q + 3].hh.v.RH != 0) && (mem[q].hh.b1 != 1))
1869 mem[x + 1].cint = mem[x + 1].cint - delta;
1870 mem[x + 4].cint = half(mem[x + 3].cint - mem[x + 2].cint) - font_info[22 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1871 mem[q + 1].hh.v.RH = 2;
1872 mem[q + 1].hh.v.LH = x;
1876 if (mem[q].hh.b1 == 1)
1878 x = clean_box(q + 2, 2 * (cur_style / 4) + 4 + (cur_style % 2));
1879 y = clean_box(q + 1, cur_style);
1880 z = clean_box(q + 3, 2 * (cur_style / 4) + 5);
1883 mem[v + 1].cint = mem[y + 1].cint;
1884 if (mem[x + 1].cint > mem[v + 1].cint)
1885 mem[v + 1].cint = mem[x + 1].cint;
1886 if (mem[z + 1].cint > mem[v + 1].cint)
1887 mem[v + 1].cint = mem[z + 1].cint;
1888 x = rebox(x, mem[v + 1].cint);
1889 y = rebox(y, mem[v + 1].cint);
1890 z = rebox(z, mem[v + 1].cint);
1891 mem[x + 4].cint = half(delta);
1892 mem[z + 4].cint = - (integer) mem[x + 4].cint;
1893 mem[v + 3].cint = mem[y + 3].cint;
1894 mem[v + 2].cint = mem[y + 2].cint;
1895 if (mem[q + 2].hh.v.RH == 0)
1898 mem[v + 5].hh.v.RH = y;
1902 shiftup = font_info[11 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint - mem[x + 2].cint;
1903 if (shiftup < font_info[9 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint)
1904 shiftup = font_info[9 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
1905 p = new_kern(shiftup);
1908 p = new_kern(font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
1910 mem[v + 5].hh.v.RH = p;
1911 mem[v + 3].cint = mem[v + 3].cint + font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint + mem[x + 3].cint + mem[x + 2].cint + shiftup;
1913 if (mem[q + 3].hh.v.RH == 0)
1917 shiftdown = font_info[12 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint - mem[z + 3].cint;
1918 if (shiftdown < font_info[10 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint)
1919 shiftdown = font_info[10 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint;
1920 p = new_kern(shiftdown);
1923 p = new_kern(font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint);
1925 mem[v + 2].cint = mem[v + 2].cint + font_info[13 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint + mem[z + 3].cint + mem[z + 2].cint + shiftdown;
1927 mem[q + 1].cint = v;
1932 /* #pragma optimize ("g", on) */ /* for MC VS compiler */
1933 /* #pragma optimize ("g",) */ /* 94/Jan/25 */
1934 /* #pragma optimize ("", on) */ /* 96/Sep/12 */
1935 /* #pragma optimize ("g", off) */
1937 void make_scripts_(halfword q, scaled delta)
1939 halfword p, x, y, z;
1940 scaled shiftup, shiftdown, clr;
1943 p = mem[q + 1].cint;
1944 if ((p >= hi_mem_min))
1956 shiftup = mem[z + 3].cint - font_info[18 + param_base[eqtb[(hash_size + 1837) + t].hh.v.RH]].cint;
1957 shiftdown = mem[z + 2].cint + font_info[19 + param_base[eqtb[(hash_size + 1837) + t].hh.v.RH]].cint;
1960 if (mem[q + 2].hh.v.RH == 0)
1962 x = clean_box(q + 3, 2 *(cur_style / 4)+ 5);
1963 mem[x + 1].cint = mem[x + 1].cint + script_space;
1964 if (shiftdown < font_info[16 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint)
1965 shiftdown = font_info[16 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1966 clr = mem[x + 3].cint -(abs(font_info[5 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint * 4) / 5);
1967 if (shiftdown < clr)
1969 mem[x + 4].cint = shiftdown;
1974 x = clean_box(q + 2, 2 *(cur_style / 4)+ 4 +(cur_style % 2));
1975 mem[x + 1].cint = mem[x + 1].cint + script_space;
1977 clr = font_info[15 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1978 else if (cur_style < 2)
1979 clr = font_info[13 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1981 clr = font_info[14 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1984 clr = mem[x + 2].cint +(abs(font_info[5 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint) / 4);
1988 if (mem[q + 3].hh.v.RH == 0)
1989 mem[x + 4].cint = - (integer) shiftup;
1992 y = clean_box(q + 3, 2 * (cur_style / 4)+ 5);
1993 mem[y + 1].cint = mem[y + 1].cint + script_space;
1994 if (shiftdown < font_info[17 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint)
1995 shiftdown = font_info[17 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint;
1996 clr = 4 * font_info[8 + param_base[eqtb[(hash_size + 1838) + cur_size].hh.v.RH]].cint - ((shiftup - mem[x + 2].cint) - (mem[y + 3].cint - shiftdown));
1999 shiftdown = shiftdown + clr;
2000 clr =(abs(font_info[5 + param_base[eqtb[(hash_size + 1837) + cur_size].hh.v.RH]].cint * 4) / 5) - (shiftup - mem[x + 2].cint);
2003 shiftup = shiftup + clr;
2004 shiftdown = shiftdown - clr;
2007 mem[x + 4].cint = delta;
2008 p = new_kern((shiftup - mem[x + 2].cint) - (mem[y + 3].cint - shiftdown));
2011 x = vpackage(x, 0, 1, 1073741823L); /* 2^30 - 1 */
2012 mem[x + 4].cint = shiftdown;
2015 if (mem[q + 1].cint == 0)
2016 mem[q + 1].cint = x;
2019 p = mem[q + 1].cint;
2020 while (mem[p].hh.v.RH != 0)
2025 /* #pragma optimize ("g", on) */ /* 96/Sep/12 */
2026 /* #pragma optimize ("g") */ /* 94/Jan/25 */
2027 #pragma optimize ("", on) /* 96/Sep/12 */