home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / tex31 / texsrc.lzh / TEXSRC.LZH / tex10.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-28  |  35.9 KB  |  1,333 lines

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void pushalignment ( ) 
  5. {pushalignment_regmem 
  6.   halfword p  ; 
  7.   p = getnode ( 5 ) ; 
  8.   mem [ p ] .hh .v.RH = alignptr ; 
  9.   mem [ p ] .hh .v.LH = curalign ; 
  10.   mem [ p + 1 ] .hh .v.LH = mem [ memtop - 8 ] .hh .v.RH ; 
  11.   mem [ p + 1 ] .hh .v.RH = curspan ; 
  12.   mem [ p + 2 ] .cint = curloop ; 
  13.   mem [ p + 3 ] .cint = alignstate ; 
  14.   mem [ p + 4 ] .hh .v.LH = curhead ; 
  15.   mem [ p + 4 ] .hh .v.RH = curtail ; 
  16.   alignptr = p ; 
  17.   curhead = getavail () ; 
  18. void popalignment ( ) 
  19. {popalignment_regmem 
  20.   halfword p  ; 
  21.   {
  22.     mem [ curhead ] .hh .v.RH = avail ; 
  23.     avail = curhead ; 
  24.     ;
  25. #ifdef STAT
  26.     decr ( dynused ) ; 
  27. #endif /* STAT */
  28.   } 
  29.   p = alignptr ; 
  30.   curtail = mem [ p + 4 ] .hh .v.RH ; 
  31.   curhead = mem [ p + 4 ] .hh .v.LH ; 
  32.   alignstate = mem [ p + 3 ] .cint ; 
  33.   curloop = mem [ p + 2 ] .cint ; 
  34.   curspan = mem [ p + 1 ] .hh .v.RH ; 
  35.   mem [ memtop - 8 ] .hh .v.RH = mem [ p + 1 ] .hh .v.LH ; 
  36.   curalign = mem [ p ] .hh .v.LH ; 
  37.   alignptr = mem [ p ] .hh .v.RH ; 
  38.   freenode ( p , 5 ) ; 
  39. void getpreambletoken ( ) 
  40. {/* 20 */ getpreambletoken_regmem 
  41.   lab20: gettoken () ; 
  42.   while ( ( curchr == 256 ) && ( curcmd == 4 ) ) {
  43.       
  44.     gettoken () ; 
  45.     if ( curcmd > 100 ) 
  46.     {
  47.       expand () ; 
  48.       gettoken () ; 
  49.     } 
  50.   } 
  51.   if ( curcmd == 9 ) 
  52.   fatalerror ( 591 ) ; 
  53.   if ( ( curcmd == 75 ) && ( curchr == 3793 ) ) 
  54.   {
  55.     scanoptionalequals () ; 
  56.     scanglue ( 2 ) ; 
  57.     if ( eqtb [ 6206 ] .cint > 0 ) 
  58.     geqdefine ( 3793 , 117 , curval ) ; 
  59.     else eqdefine ( 3793 , 117 , curval ) ; 
  60.     goto lab20 ; 
  61.   } 
  62. void initalign ( ) 
  63. {/* 30 31 32 22 */ initalign_regmem 
  64.   halfword savecsptr  ; 
  65.   halfword p  ; 
  66.   savecsptr = curcs ; 
  67.   pushalignment () ; 
  68.   alignstate = -1000000L ; 
  69.   if ( ( curlist .modefield == 203 ) && ( ( curlist .tailfield != curlist 
  70.   .headfield ) || ( curlist .auxfield .cint != 0 ) ) ) 
  71.   {
  72.     {
  73.       if ( interaction == 3 ) 
  74.       wakeupterminal () ; 
  75.       printnl ( 262 ) ; 
  76.       print ( 676 ) ; 
  77.     } 
  78.     printesc ( 516 ) ; 
  79.     print ( 887 ) ; 
  80.     {
  81.       helpptr = 3 ; 
  82.       helpline [ 2 ] = 888 ; 
  83.       helpline [ 1 ] = 889 ; 
  84.       helpline [ 0 ] = 890 ; 
  85.     } 
  86.     error () ; 
  87.     flushmath () ; 
  88.   } 
  89.   pushnest () ; 
  90.   if ( curlist .modefield == 203 ) 
  91.   {
  92.     curlist .modefield = -1 ; 
  93.     curlist .auxfield .cint = nest [ nestptr - 2 ] .auxfield .cint ; 
  94.   } 
  95.   else if ( curlist .modefield > 0 ) 
  96.   curlist .modefield = - (integer) curlist .modefield ; 
  97.   scanspec ( 6 , false ) ; 
  98.   mem [ memtop - 8 ] .hh .v.RH = 0 ; 
  99.   curalign = memtop - 8 ; 
  100.   curloop = 0 ; 
  101.   scannerstatus = 4 ; 
  102.   warningindex = savecsptr ; 
  103.   alignstate = -1000000L ; 
  104.   while ( true ) {
  105.       
  106.     mem [ curalign ] .hh .v.RH = newparamglue ( 11 ) ; 
  107.     curalign = mem [ curalign ] .hh .v.RH ; 
  108.     if ( curcmd == 5 ) 
  109.     goto lab30 ; 
  110.     p = memtop - 4 ; 
  111.     mem [ p ] .hh .v.RH = 0 ; 
  112.     while ( true ) {
  113.     
  114.       getpreambletoken () ; 
  115.       if ( curcmd == 6 ) 
  116.       goto lab31 ; 
  117.       if ( ( curcmd <= 5 ) && ( curcmd >= 4 ) && ( alignstate == -1000000L ) ) 
  118.       if ( ( p == memtop - 4 ) && ( curloop == 0 ) && ( curcmd == 4 ) ) 
  119.       curloop = curalign ; 
  120.       else {
  121.       
  122.     {
  123.       if ( interaction == 3 ) 
  124.       wakeupterminal () ; 
  125.       printnl ( 262 ) ; 
  126.       print ( 896 ) ; 
  127.     } 
  128.     {
  129.       helpptr = 3 ; 
  130.       helpline [ 2 ] = 897 ; 
  131.       helpline [ 1 ] = 898 ; 
  132.       helpline [ 0 ] = 899 ; 
  133.     } 
  134.     backerror () ; 
  135.     goto lab31 ; 
  136.       } 
  137.       else if ( ( curcmd != 10 ) || ( p != memtop - 4 ) ) 
  138.       {
  139.     mem [ p ] .hh .v.RH = getavail () ; 
  140.     p = mem [ p ] .hh .v.RH ; 
  141.     mem [ p ] .hh .v.LH = curtok ; 
  142.       } 
  143.     } 
  144.     lab31: ; 
  145.     mem [ curalign ] .hh .v.RH = newnullbox () ; 
  146.     curalign = mem [ curalign ] .hh .v.RH ; 
  147.     mem [ curalign ] .hh .v.LH = memtop - 9 ; 
  148.     mem [ curalign + 1 ] .cint = -1073741824L ; 
  149.     mem [ curalign + 3 ] .cint = mem [ memtop - 4 ] .hh .v.RH ; 
  150.     p = memtop - 4 ; 
  151.     mem [ p ] .hh .v.RH = 0 ; 
  152.     while ( true ) {
  153.     
  154.       lab22: getpreambletoken () ; 
  155.       if ( ( curcmd <= 5 ) && ( curcmd >= 4 ) && ( alignstate == -1000000L ) ) 
  156.       goto lab32 ; 
  157.       if ( curcmd == 6 ) 
  158.       {
  159.     {
  160.       if ( interaction == 3 ) 
  161.       wakeupterminal () ; 
  162.       printnl ( 262 ) ; 
  163.       print ( 900 ) ; 
  164.     } 
  165.     {
  166.       helpptr = 3 ; 
  167.       helpline [ 2 ] = 897 ; 
  168.       helpline [ 1 ] = 898 ; 
  169.       helpline [ 0 ] = 901 ; 
  170.     } 
  171.     error () ; 
  172.     goto lab22 ; 
  173.       } 
  174.       mem [ p ] .hh .v.RH = getavail () ; 
  175.       p = mem [ p ] .hh .v.RH ; 
  176.       mem [ p ] .hh .v.LH = curtok ; 
  177.     } 
  178.     lab32: mem [ p ] .hh .v.RH = getavail () ; 
  179.     p = mem [ p ] .hh .v.RH ; 
  180.     mem [ p ] .hh .v.LH = 7614 ; 
  181.     mem [ curalign + 2 ] .cint = mem [ memtop - 4 ] .hh .v.RH ; 
  182.   } 
  183.   lab30: scannerstatus = 0 ; 
  184.   newsavelevel ( 6 ) ; 
  185.   if ( eqtb [ 4320 ] .hh .v.RH != 0 ) 
  186.   begintokenlist ( eqtb [ 4320 ] .hh .v.RH , 13 ) ; 
  187.   alignpeek () ; 
  188. void zinitspan ( p ) 
  189. halfword p ; 
  190. {initspan_regmem 
  191.   pushnest () ; 
  192.   if ( curlist .modefield == -102 ) 
  193.   curlist .auxfield .hh .v.LH = 1000 ; 
  194.   else {
  195.       
  196.     curlist .auxfield .cint = -65536000L ; 
  197.     normalparagraph () ; 
  198.   } 
  199.   curspan = p ; 
  200. void initrow ( ) 
  201. {initrow_regmem 
  202.   pushnest () ; 
  203.   curlist .modefield = ( -103 ) - curlist .modefield ; 
  204.   if ( curlist .modefield == -102 ) 
  205.   curlist .auxfield .hh .v.LH = 0 ; 
  206.   else curlist .auxfield .cint = 0 ; 
  207.   {
  208.     mem [ curlist .tailfield ] .hh .v.RH = newglue ( mem [ mem [ memtop - 8 ] 
  209.     .hh .v.RH + 1 ] .hh .v.LH ) ; 
  210.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  211.   } 
  212.   mem [ curlist .tailfield ] .hh.b1 = 12 ; 
  213.   curalign = mem [ mem [ memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  214.   curtail = curhead ; 
  215.   initspan ( curalign ) ; 
  216. void initcol ( ) 
  217. {initcol_regmem 
  218.   mem [ curalign + 5 ] .hh .v.LH = curcmd ; 
  219.   if ( curcmd == 63 ) 
  220.   alignstate = 0 ; 
  221.   else {
  222.       
  223.     backinput () ; 
  224.     begintokenlist ( mem [ curalign + 3 ] .cint , 1 ) ; 
  225.   } 
  226. boolean fincol ( ) 
  227. {/* 10 */ register boolean Result; fincol_regmem 
  228.   halfword p  ; 
  229.   halfword q, r  ; 
  230.   halfword s  ; 
  231.   halfword u  ; 
  232.   scaled w  ; 
  233.   glueord o  ; 
  234.   halfword n  ; 
  235.   if ( curalign == 0 ) 
  236.   confusion ( 902 ) ; 
  237.   q = mem [ curalign ] .hh .v.RH ; 
  238.   if ( q == 0 ) 
  239.   confusion ( 902 ) ; 
  240.   if ( alignstate < 500000L ) 
  241.   fatalerror ( 591 ) ; 
  242.   p = mem [ q ] .hh .v.RH ; 
  243.   if ( ( p == 0 ) && ( mem [ curalign + 5 ] .hh .v.LH < 257 ) ) 
  244.   if ( curloop != 0 ) 
  245.   {
  246.     mem [ q ] .hh .v.RH = newnullbox () ; 
  247.     p = mem [ q ] .hh .v.RH ; 
  248.     mem [ p ] .hh .v.LH = memtop - 9 ; 
  249.     mem [ p + 1 ] .cint = -1073741824L ; 
  250.     curloop = mem [ curloop ] .hh .v.RH ; 
  251.     q = memtop - 4 ; 
  252.     r = mem [ curloop + 3 ] .cint ; 
  253.     while ( r != 0 ) {
  254.     
  255.       mem [ q ] .hh .v.RH = getavail () ; 
  256.       q = mem [ q ] .hh .v.RH ; 
  257.       mem [ q ] .hh .v.LH = mem [ r ] .hh .v.LH ; 
  258.       r = mem [ r ] .hh .v.RH ; 
  259.     } 
  260.     mem [ q ] .hh .v.RH = 0 ; 
  261.     mem [ p + 3 ] .cint = mem [ memtop - 4 ] .hh .v.RH ; 
  262.     q = memtop - 4 ; 
  263.     r = mem [ curloop + 2 ] .cint ; 
  264.     while ( r != 0 ) {
  265.     
  266.       mem [ q ] .hh .v.RH = getavail () ; 
  267.       q = mem [ q ] .hh .v.RH ; 
  268.       mem [ q ] .hh .v.LH = mem [ r ] .hh .v.LH ; 
  269.       r = mem [ r ] .hh .v.RH ; 
  270.     } 
  271.     mem [ q ] .hh .v.RH = 0 ; 
  272.     mem [ p + 2 ] .cint = mem [ memtop - 4 ] .hh .v.RH ; 
  273.     curloop = mem [ curloop ] .hh .v.RH ; 
  274.     mem [ p ] .hh .v.RH = newglue ( mem [ curloop + 1 ] .hh .v.LH ) ; 
  275.   } 
  276.   else {
  277.       
  278.     {
  279.       if ( interaction == 3 ) 
  280.       wakeupterminal () ; 
  281.       printnl ( 262 ) ; 
  282.       print ( 903 ) ; 
  283.     } 
  284.     printesc ( 892 ) ; 
  285.     {
  286.       helpptr = 3 ; 
  287.       helpline [ 2 ] = 904 ; 
  288.       helpline [ 1 ] = 905 ; 
  289.       helpline [ 0 ] = 906 ; 
  290.     } 
  291.     mem [ curalign + 5 ] .hh .v.LH = 257 ; 
  292.     error () ; 
  293.   } 
  294.   if ( mem [ curalign + 5 ] .hh .v.LH != 256 ) 
  295.   {
  296.     unsave () ; 
  297.     newsavelevel ( 6 ) ; 
  298.     {
  299.       if ( curlist .modefield == -102 ) 
  300.       {
  301.     adjusttail = curtail ; 
  302.     u = hpack ( mem [ curlist .headfield ] .hh .v.RH , 0 , 1 ) ; 
  303.     w = mem [ u + 1 ] .cint ; 
  304.     curtail = adjusttail ; 
  305.     adjusttail = 0 ; 
  306.       } 
  307.       else {
  308.       
  309.     u = vpackage ( mem [ curlist .headfield ] .hh .v.RH , 0 , 1 , 0 ) ; 
  310.     w = mem [ u + 3 ] .cint ; 
  311.       } 
  312.       n = 0 ; 
  313.       if ( curspan != curalign ) 
  314.       {
  315.     q = curspan ; 
  316.     do {
  317.         incr ( n ) ; 
  318.       q = mem [ mem [ q ] .hh .v.RH ] .hh .v.RH ; 
  319.     } while ( ! ( q == curalign ) ) ; 
  320.     if ( n > 255 ) 
  321.     confusion ( 907 ) ; 
  322.     q = curspan ; 
  323.     while ( mem [ mem [ q ] .hh .v.LH ] .hh .v.RH < n ) q = mem [ q ] .hh 
  324.     .v.LH ; 
  325.     if ( mem [ mem [ q ] .hh .v.LH ] .hh .v.RH > n ) 
  326.     {
  327.       s = getnode ( 2 ) ; 
  328.       mem [ s ] .hh .v.LH = mem [ q ] .hh .v.LH ; 
  329.       mem [ s ] .hh .v.RH = n ; 
  330.       mem [ q ] .hh .v.LH = s ; 
  331.       mem [ s + 1 ] .cint = w ; 
  332.     } 
  333.     else if ( mem [ mem [ q ] .hh .v.LH + 1 ] .cint < w ) 
  334.     mem [ mem [ q ] .hh .v.LH + 1 ] .cint = w ; 
  335.       } 
  336.       else if ( w > mem [ curalign + 1 ] .cint ) 
  337.       mem [ curalign + 1 ] .cint = w ; 
  338.       mem [ u ] .hh.b0 = 13 ; 
  339.       mem [ u ] .hh.b1 = n ; 
  340.       if ( totalstretch [ 3 ] != 0 ) 
  341.       o = 3 ; 
  342.       else if ( totalstretch [ 2 ] != 0 ) 
  343.       o = 2 ; 
  344.       else if ( totalstretch [ 1 ] != 0 ) 
  345.       o = 1 ; 
  346.       else o = 0 ; 
  347.       mem [ u + 5 ] .hh.b1 = o ; 
  348.       mem [ u + 6 ] .cint = totalstretch [ o ] ; 
  349.       if ( totalshrink [ 3 ] != 0 ) 
  350.       o = 3 ; 
  351.       else if ( totalshrink [ 2 ] != 0 ) 
  352.       o = 2 ; 
  353.       else if ( totalshrink [ 1 ] != 0 ) 
  354.       o = 1 ; 
  355.       else o = 0 ; 
  356.       mem [ u + 5 ] .hh.b0 = o ; 
  357.       mem [ u + 4 ] .cint = totalshrink [ o ] ; 
  358.       popnest () ; 
  359.       mem [ curlist .tailfield ] .hh .v.RH = u ; 
  360.       curlist .tailfield = u ; 
  361.     } 
  362.     {
  363.       mem [ curlist .tailfield ] .hh .v.RH = newglue ( mem [ mem [ curalign ] 
  364.       .hh .v.RH + 1 ] .hh .v.LH ) ; 
  365.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  366.     } 
  367.     mem [ curlist .tailfield ] .hh.b1 = 12 ; 
  368.     if ( mem [ curalign + 5 ] .hh .v.LH >= 257 ) 
  369.     {
  370.       Result = true ; 
  371.       return(Result) ; 
  372.     } 
  373.     initspan ( p ) ; 
  374.   } 
  375.   alignstate = 1000000L ; 
  376.   do {
  377.       getxtoken () ; 
  378.   } while ( ! ( curcmd != 10 ) ) ; 
  379.   curalign = p ; 
  380.   initcol () ; 
  381.   Result = false ; 
  382.   return(Result) ; 
  383. void finrow ( ) 
  384. {finrow_regmem 
  385.   halfword p  ; 
  386.   if ( curlist .modefield == -102 ) 
  387.   {
  388.     p = hpack ( mem [ curlist .headfield ] .hh .v.RH , 0 , 1 ) ; 
  389.     popnest () ; 
  390.     appendtovlist ( p ) ; 
  391.     if ( curhead != curtail ) 
  392.     {
  393.       mem [ curlist .tailfield ] .hh .v.RH = mem [ curhead ] .hh .v.RH ; 
  394.       curlist .tailfield = curtail ; 
  395.     } 
  396.   } 
  397.   else {
  398.       
  399.     p = vpackage ( mem [ curlist .headfield ] .hh .v.RH , 0 , 1 , 1073741823L 
  400.     ) ; 
  401.     popnest () ; 
  402.     mem [ curlist .tailfield ] .hh .v.RH = p ; 
  403.     curlist .tailfield = p ; 
  404.     curlist .auxfield .hh .v.LH = 1000 ; 
  405.   } 
  406.   mem [ p ] .hh.b0 = 13 ; 
  407.   mem [ p + 6 ] .cint = 0 ; 
  408.   if ( eqtb [ 4320 ] .hh .v.RH != 0 ) 
  409.   begintokenlist ( eqtb [ 4320 ] .hh .v.RH , 13 ) ; 
  410.   alignpeek () ; 
  411. void finalign ( ) 
  412. {finalign_regmem 
  413.   halfword p, q, r, s, u, v  ; 
  414.   scaled t, w  ; 
  415.   scaled o  ; 
  416.   halfword n  ; 
  417.   scaled rulesave  ; 
  418.   memoryword auxsave  ; 
  419.   if ( curgroup != 6 ) 
  420.   confusion ( 908 ) ; 
  421.   unsave () ; 
  422.   if ( curgroup != 6 ) 
  423.   confusion ( 909 ) ; 
  424.   unsave () ; 
  425.   if ( nest [ nestptr - 1 ] .modefield == 203 ) 
  426.   o = eqtb [ 6745 ] .cint ; 
  427.   else o = 0 ; 
  428.   q = mem [ mem [ memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  429.   do {
  430.       flushlist ( mem [ q + 3 ] .cint ) ; 
  431.     flushlist ( mem [ q + 2 ] .cint ) ; 
  432.     p = mem [ mem [ q ] .hh .v.RH ] .hh .v.RH ; 
  433.     if ( mem [ q + 1 ] .cint == -1073741824L ) 
  434.     {
  435.       mem [ q + 1 ] .cint = 0 ; 
  436.       r = mem [ q ] .hh .v.RH ; 
  437.       s = mem [ r + 1 ] .hh .v.LH ; 
  438.       if ( s != 0 ) 
  439.       {
  440.     incr ( mem [ 0 ] .hh .v.RH ) ; 
  441.     deleteglueref ( s ) ; 
  442.     mem [ r + 1 ] .hh .v.LH = 0 ; 
  443.       } 
  444.     } 
  445.     if ( mem [ q ] .hh .v.LH != memtop - 9 ) 
  446.     {
  447.       t = mem [ q + 1 ] .cint + mem [ mem [ mem [ q ] .hh .v.RH + 1 ] .hh 
  448.       .v.LH + 1 ] .cint ; 
  449.       r = mem [ q ] .hh .v.LH ; 
  450.       s = memtop - 9 ; 
  451.       mem [ s ] .hh .v.LH = p ; 
  452.       n = 1 ; 
  453.       do {
  454.       mem [ r + 1 ] .cint = mem [ r + 1 ] .cint - t ; 
  455.     u = mem [ r ] .hh .v.LH ; 
  456.     while ( mem [ r ] .hh .v.RH > n ) {
  457.         
  458.       s = mem [ s ] .hh .v.LH ; 
  459.       n = mem [ mem [ s ] .hh .v.LH ] .hh .v.RH + 1 ; 
  460.     } 
  461.     if ( mem [ r ] .hh .v.RH < n ) 
  462.     {
  463.       mem [ r ] .hh .v.LH = mem [ s ] .hh .v.LH ; 
  464.       mem [ s ] .hh .v.LH = r ; 
  465.       decr ( mem [ r ] .hh .v.RH ) ; 
  466.       s = r ; 
  467.     } 
  468.     else {
  469.         
  470.       if ( mem [ r + 1 ] .cint > mem [ mem [ s ] .hh .v.LH + 1 ] .cint ) 
  471.       mem [ mem [ s ] .hh .v.LH + 1 ] .cint = mem [ r + 1 ] .cint ; 
  472.       freenode ( r , 2 ) ; 
  473.     } 
  474.     r = u ; 
  475.       } while ( ! ( r == memtop - 9 ) ) ; 
  476.     } 
  477.     mem [ q ] .hh.b0 = 13 ; 
  478.     mem [ q ] .hh.b1 = 0 ; 
  479.     mem [ q + 3 ] .cint = 0 ; 
  480.     mem [ q + 2 ] .cint = 0 ; 
  481.     mem [ q + 5 ] .hh.b1 = 0 ; 
  482.     mem [ q + 5 ] .hh.b0 = 0 ; 
  483.     mem [ q + 6 ] .cint = 0 ; 
  484.     mem [ q + 4 ] .cint = 0 ; 
  485.     q = p ; 
  486.   } while ( ! ( q == 0 ) ) ; 
  487.   saveptr = saveptr - 2 ; 
  488.   packbeginline = - (integer) curlist .mlfield ; 
  489.   if ( curlist .modefield == -1 ) 
  490.   {
  491.     rulesave = eqtb [ 6746 ] .cint ; 
  492.     eqtb [ 6746 ] .cint = 0 ; 
  493.     p = hpack ( mem [ memtop - 8 ] .hh .v.RH , savestack [ saveptr + 1 ] .cint 
  494.     , savestack [ saveptr + 0 ] .cint ) ; 
  495.     eqtb [ 6746 ] .cint = rulesave ; 
  496.   } 
  497.   else {
  498.       
  499.     q = mem [ mem [ memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  500.     do {
  501.     mem [ q + 3 ] .cint = mem [ q + 1 ] .cint ; 
  502.       mem [ q + 1 ] .cint = 0 ; 
  503.       q = mem [ mem [ q ] .hh .v.RH ] .hh .v.RH ; 
  504.     } while ( ! ( q == 0 ) ) ; 
  505.     p = vpackage ( mem [ memtop - 8 ] .hh .v.RH , savestack [ saveptr + 1 ] 
  506.     .cint , savestack [ saveptr + 0 ] .cint , 1073741823L ) ; 
  507.     q = mem [ mem [ memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  508.     do {
  509.     mem [ q + 1 ] .cint = mem [ q + 3 ] .cint ; 
  510.       mem [ q + 3 ] .cint = 0 ; 
  511.       q = mem [ mem [ q ] .hh .v.RH ] .hh .v.RH ; 
  512.     } while ( ! ( q == 0 ) ) ; 
  513.   } 
  514.   packbeginline = 0 ; 
  515.   q = mem [ curlist .headfield ] .hh .v.RH ; 
  516.   s = curlist .headfield ; 
  517.   while ( q != 0 ) {
  518.       
  519.     if ( ! ( q >= himemmin ) ) 
  520.     if ( mem [ q ] .hh.b0 == 13 ) 
  521.     {
  522.       if ( curlist .modefield == -1 ) 
  523.       {
  524.     mem [ q ] .hh.b0 = 0 ; 
  525.     mem [ q + 1 ] .cint = mem [ p + 1 ] .cint ; 
  526.       } 
  527.       else {
  528.       
  529.     mem [ q ] .hh.b0 = 1 ; 
  530.     mem [ q + 3 ] .cint = mem [ p + 3 ] .cint ; 
  531.       } 
  532.       mem [ q + 5 ] .hh.b1 = mem [ p + 5 ] .hh.b1 ; 
  533.       mem [ q + 5 ] .hh.b0 = mem [ p + 5 ] .hh.b0 ; 
  534.       mem [ q + 6 ] .gr = mem [ p + 6 ] .gr ; 
  535.       mem [ q + 4 ] .cint = o ; 
  536.       r = mem [ mem [ q + 5 ] .hh .v.RH ] .hh .v.RH ; 
  537.       s = mem [ mem [ p + 5 ] .hh .v.RH ] .hh .v.RH ; 
  538.       do {
  539.       n = mem [ r ] .hh.b1 ; 
  540.     t = mem [ s + 1 ] .cint ; 
  541.     w = t ; 
  542.     u = memtop - 4 ; 
  543.     while ( n > 0 ) {
  544.         
  545.       decr ( n ) ; 
  546.       s = mem [ s ] .hh .v.RH ; 
  547.       v = mem [ s + 1 ] .hh .v.LH ; 
  548.       mem [ u ] .hh .v.RH = newglue ( v ) ; 
  549.       u = mem [ u ] .hh .v.RH ; 
  550.       mem [ u ] .hh.b1 = 12 ; 
  551.       t = t + mem [ v + 1 ] .cint ; 
  552.       if ( mem [ p + 5 ] .hh.b0 == 1 ) 
  553.       {
  554.         if ( mem [ v ] .hh.b0 == mem [ p + 5 ] .hh.b1 ) 
  555.         t = t + round ( mem [ p + 6 ] .gr * mem [ v + 2 ] .cint ) ; 
  556.       } 
  557.       else if ( mem [ p + 5 ] .hh.b0 == 2 ) 
  558.       {
  559.         if ( mem [ v ] .hh.b1 == mem [ p + 5 ] .hh.b1 ) 
  560.         t = t - round ( mem [ p + 6 ] .gr * mem [ v + 3 ] .cint ) ; 
  561.       } 
  562.       s = mem [ s ] .hh .v.RH ; 
  563.       mem [ u ] .hh .v.RH = newnullbox () ; 
  564.       u = mem [ u ] .hh .v.RH ; 
  565.       t = t + mem [ s + 1 ] .cint ; 
  566.       if ( curlist .modefield == -1 ) 
  567.       mem [ u + 1 ] .cint = mem [ s + 1 ] .cint ; 
  568.       else {
  569.           
  570.         mem [ u ] .hh.b0 = 1 ; 
  571.         mem [ u + 3 ] .cint = mem [ s + 1 ] .cint ; 
  572.       } 
  573.     } 
  574.     if ( curlist .modefield == -1 ) 
  575.     {
  576.       mem [ r + 3 ] .cint = mem [ q + 3 ] .cint ; 
  577.       mem [ r + 2 ] .cint = mem [ q + 2 ] .cint ; 
  578.       if ( t == mem [ r + 1 ] .cint ) 
  579.       {
  580.         mem [ r + 5 ] .hh.b0 = 0 ; 
  581.         mem [ r + 5 ] .hh.b1 = 0 ; 
  582.         mem [ r + 6 ] .gr = 0.0 ; 
  583.       } 
  584.       else if ( t > mem [ r + 1 ] .cint ) 
  585.       {
  586.         mem [ r + 5 ] .hh.b0 = 1 ; 
  587.         if ( mem [ r + 6 ] .cint == 0 ) 
  588.         mem [ r + 6 ] .gr = 0.0 ; 
  589.         else mem [ r + 6 ] .gr = ( t - mem [ r + 1 ] .cint ) / ((double) 
  590.         mem [ r + 6 ] .cint ) ; 
  591.       } 
  592.       else {
  593.           
  594.         mem [ r + 5 ] .hh.b1 = mem [ r + 5 ] .hh.b0 ; 
  595.         mem [ r + 5 ] .hh.b0 = 2 ; 
  596.         if ( mem [ r + 4 ] .cint == 0 ) 
  597.         mem [ r + 6 ] .gr = 0.0 ; 
  598.         else if ( ( mem [ r + 5 ] .hh.b1 == 0 ) && ( mem [ r + 1 ] .cint - 
  599.         t > mem [ r + 4 ] .cint ) ) 
  600.         mem [ r + 6 ] .gr = 1.0 ; 
  601.         else mem [ r + 6 ] .gr = ( mem [ r + 1 ] .cint - t ) / ((double) 
  602.         mem [ r + 4 ] .cint ) ; 
  603.       } 
  604.       mem [ r + 1 ] .cint = w ; 
  605.       mem [ r ] .hh.b0 = 0 ; 
  606.     } 
  607.     else {
  608.         
  609.       mem [ r + 1 ] .cint = mem [ q + 1 ] .cint ; 
  610.       if ( t == mem [ r + 3 ] .cint ) 
  611.       {
  612.         mem [ r + 5 ] .hh.b0 = 0 ; 
  613.         mem [ r + 5 ] .hh.b1 = 0 ; 
  614.         mem [ r + 6 ] .gr = 0.0 ; 
  615.       } 
  616.       else if ( t > mem [ r + 3 ] .cint ) 
  617.       {
  618.         mem [ r + 5 ] .hh.b0 = 1 ; 
  619.         if ( mem [ r + 6 ] .cint == 0 ) 
  620.         mem [ r + 6 ] .gr = 0.0 ; 
  621.         else mem [ r + 6 ] .gr = ( t - mem [ r + 3 ] .cint ) / ((double) 
  622.         mem [ r + 6 ] .cint ) ; 
  623.       } 
  624.       else {
  625.           
  626.         mem [ r + 5 ] .hh.b1 = mem [ r + 5 ] .hh.b0 ; 
  627.         mem [ r + 5 ] .hh.b0 = 2 ; 
  628.         if ( mem [ r + 4 ] .cint == 0 ) 
  629.         mem [ r + 6 ] .gr = 0.0 ; 
  630.         else if ( ( mem [ r + 5 ] .hh.b1 == 0 ) && ( mem [ r + 3 ] .cint - 
  631.         t > mem [ r + 4 ] .cint ) ) 
  632.         mem [ r + 6 ] .gr = 1.0 ; 
  633.         else mem [ r + 6 ] .gr = ( mem [ r + 3 ] .cint - t ) / ((double) 
  634.         mem [ r + 4 ] .cint ) ; 
  635.       } 
  636.       mem [ r + 3 ] .cint = w ; 
  637.       mem [ r ] .hh.b0 = 1 ; 
  638.     } 
  639.     mem [ r + 4 ] .cint = 0 ; 
  640.     if ( u != memtop - 4 ) 
  641.     {
  642.       mem [ u ] .hh .v.RH = mem [ r ] .hh .v.RH ; 
  643.       mem [ r ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ; 
  644.       r = u ; 
  645.     } 
  646.     r = mem [ mem [ r ] .hh .v.RH ] .hh .v.RH ; 
  647.     s = mem [ mem [ s ] .hh .v.RH ] .hh .v.RH ; 
  648.       } while ( ! ( r == 0 ) ) ; 
  649.     } 
  650.     else if ( mem [ q ] .hh.b0 == 2 ) 
  651.     {
  652.       if ( ( mem [ q + 1 ] .cint == -1073741824L ) ) 
  653.       mem [ q + 1 ] .cint = mem [ p + 1 ] .cint ; 
  654.       if ( ( mem [ q + 3 ] .cint == -1073741824L ) ) 
  655.       mem [ q + 3 ] .cint = mem [ p + 3 ] .cint ; 
  656.       if ( ( mem [ q + 2 ] .cint == -1073741824L ) ) 
  657.       mem [ q + 2 ] .cint = mem [ p + 2 ] .cint ; 
  658.       if ( o != 0 ) 
  659.       {
  660.     r = mem [ q ] .hh .v.RH ; 
  661.     mem [ q ] .hh .v.RH = 0 ; 
  662.     q = hpack ( q , 0 , 1 ) ; 
  663.     mem [ q + 4 ] .cint = o ; 
  664.     mem [ q ] .hh .v.RH = r ; 
  665.     mem [ s ] .hh .v.RH = q ; 
  666.       } 
  667.     } 
  668.     s = q ; 
  669.     q = mem [ q ] .hh .v.RH ; 
  670.   } 
  671.   flushnodelist ( p ) ; 
  672.   popalignment () ; 
  673.   auxsave = curlist .auxfield ; 
  674.   p = mem [ curlist .headfield ] .hh .v.RH ; 
  675.   q = curlist .tailfield ; 
  676.   popnest () ; 
  677.   if ( curlist .modefield == 203 ) 
  678.   {
  679.     doassignments () ; 
  680.     if ( curcmd != 3 ) 
  681.     {
  682.       {
  683.     if ( interaction == 3 ) 
  684.     wakeupterminal () ; 
  685.     printnl ( 262 ) ; 
  686.     print ( 1163 ) ; 
  687.       } 
  688.       {
  689.     helpptr = 2 ; 
  690.     helpline [ 1 ] = 888 ; 
  691.     helpline [ 0 ] = 889 ; 
  692.       } 
  693.       backerror () ; 
  694.     } 
  695.     else {
  696.     
  697.       getxtoken () ; 
  698.       if ( curcmd != 3 ) 
  699.       {
  700.     {
  701.       if ( interaction == 3 ) 
  702.       wakeupterminal () ; 
  703.       printnl ( 262 ) ; 
  704.       print ( 1159 ) ; 
  705.     } 
  706.     {
  707.       helpptr = 2 ; 
  708.       helpline [ 1 ] = 1160 ; 
  709.       helpline [ 0 ] = 1161 ; 
  710.     } 
  711.     backerror () ; 
  712.       } 
  713.     } 
  714.     popnest () ; 
  715.     {
  716.       mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 6174 ] .cint 
  717.       ) ; 
  718.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  719.     } 
  720.     {
  721.       mem [ curlist .tailfield ] .hh .v.RH = newparamglue ( 3 ) ; 
  722.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  723.     } 
  724.     mem [ curlist .tailfield ] .hh .v.RH = p ; 
  725.     if ( p != 0 ) 
  726.     curlist .tailfield = q ; 
  727.     {
  728.       mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 6175 ] .cint 
  729.       ) ; 
  730.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  731.     } 
  732.     {
  733.       mem [ curlist .tailfield ] .hh .v.RH = newparamglue ( 4 ) ; 
  734.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  735.     } 
  736.     curlist .auxfield .cint = auxsave .cint ; 
  737.     resumeafterdisplay () ; 
  738.   } 
  739.   else {
  740.       
  741.     curlist .auxfield = auxsave ; 
  742.     mem [ curlist .tailfield ] .hh .v.RH = p ; 
  743.     if ( p != 0 ) 
  744.     curlist .tailfield = q ; 
  745.     if ( curlist .modefield == 1 ) 
  746.     buildpage () ; 
  747.   } 
  748. void alignpeek ( ) 
  749. {/* 20 */ alignpeek_regmem 
  750.   lab20: alignstate = 1000000L ; 
  751.   do {
  752.       getxtoken () ; 
  753.   } while ( ! ( curcmd != 10 ) ) ; 
  754.   if ( curcmd == 34 ) 
  755.   {
  756.     scanleftbrace () ; 
  757.     newsavelevel ( 7 ) ; 
  758.     if ( curlist .modefield == -1 ) 
  759.     normalparagraph () ; 
  760.   } 
  761.   else if ( curcmd == 2 ) 
  762.   finalign () ; 
  763.   else if ( ( curcmd == 5 ) && ( curchr == 258 ) ) 
  764.   goto lab20 ; 
  765.   else {
  766.       
  767.     initrow () ; 
  768.     initcol () ; 
  769.   } 
  770. halfword zfiniteshrink ( p ) 
  771. halfword p ; 
  772. {register halfword Result; finiteshrink_regmem 
  773.   halfword q  ; 
  774.   if ( noshrinkerroryet ) 
  775.   {
  776.     noshrinkerroryet = false ; 
  777.     {
  778.       if ( interaction == 3 ) 
  779.       wakeupterminal () ; 
  780.       printnl ( 262 ) ; 
  781.       print ( 910 ) ; 
  782.     } 
  783.     {
  784.       helpptr = 5 ; 
  785.       helpline [ 4 ] = 911 ; 
  786.       helpline [ 3 ] = 912 ; 
  787.       helpline [ 2 ] = 913 ; 
  788.       helpline [ 1 ] = 914 ; 
  789.       helpline [ 0 ] = 915 ; 
  790.     } 
  791.     error () ; 
  792.   } 
  793.   q = newspec ( p ) ; 
  794.   mem [ q ] .hh.b1 = 0 ; 
  795.   deleteglueref ( p ) ; 
  796.   Result = q ; 
  797.   return(Result) ; 
  798. void ztrybreak ( pi , breaktype ) 
  799. integer pi ; 
  800. smallnumber breaktype ; 
  801. {/* 10 30 31 22 60 */ trybreak_regmem 
  802.   halfword r  ; 
  803.   halfword prevr  ; 
  804.   halfword oldl  ; 
  805.   boolean nobreakyet  ; 
  806.   halfword prevprevr  ; 
  807.   halfword s  ; 
  808.   halfword q  ; 
  809.   halfword v  ; 
  810.   integer t  ; 
  811.   internalfontnumber f  ; 
  812.   halfword l  ; 
  813.   boolean noderstaysactive  ; 
  814.   scaled linewidth  ; 
  815.   schar fitclass  ; 
  816.   halfword b  ; 
  817.   integer d  ; 
  818.   boolean artificialdemerits  ; 
  819.   halfword savelink  ; 
  820.   scaled shortfall  ; 
  821.   if ( abs ( pi ) >= 10000 ) 
  822.   if ( pi > 0 ) 
  823.   goto lab10 ; 
  824.   else pi = -10000 ; 
  825.   nobreakyet = true ; 
  826.   prevr = memtop - 7 ; 
  827.   oldl = 0 ; 
  828.   curactivewidth [ 1 ] = activewidth [ 1 ] ; 
  829.   curactivewidth [ 2 ] = activewidth [ 2 ] ; 
  830.   curactivewidth [ 3 ] = activewidth [ 3 ] ; 
  831.   curactivewidth [ 4 ] = activewidth [ 4 ] ; 
  832.   curactivewidth [ 5 ] = activewidth [ 5 ] ; 
  833.   curactivewidth [ 6 ] = activewidth [ 6 ] ; 
  834.   while ( true ) {
  835.       
  836.     lab22: r = mem [ prevr ] .hh .v.RH ; 
  837.     if ( mem [ r ] .hh.b0 == 2 ) 
  838.     {
  839.       curactivewidth [ 1 ] = curactivewidth [ 1 ] + mem [ r + 1 ] .cint ; 
  840.       curactivewidth [ 2 ] = curactivewidth [ 2 ] + mem [ r + 2 ] .cint ; 
  841.       curactivewidth [ 3 ] = curactivewidth [ 3 ] + mem [ r + 3 ] .cint ; 
  842.       curactivewidth [ 4 ] = curactivewidth [ 4 ] + mem [ r + 4 ] .cint ; 
  843.       curactivewidth [ 5 ] = curactivewidth [ 5 ] + mem [ r + 5 ] .cint ; 
  844.       curactivewidth [ 6 ] = curactivewidth [ 6 ] + mem [ r + 6 ] .cint ; 
  845.       prevprevr = prevr ; 
  846.       prevr = r ; 
  847.       goto lab22 ; 
  848.     } 
  849.     {
  850.       l = mem [ r + 1 ] .hh .v.LH ; 
  851.       if ( l > oldl ) 
  852.       {
  853.     if ( ( minimumdemerits < 1073741823L ) && ( ( oldl != easyline ) || ( 
  854.     r == memtop - 7 ) ) ) 
  855.     {
  856.       if ( nobreakyet ) 
  857.       {
  858.         nobreakyet = false ; 
  859.         breakwidth [ 1 ] = background [ 1 ] ; 
  860.         breakwidth [ 2 ] = background [ 2 ] ; 
  861.         breakwidth [ 3 ] = background [ 3 ] ; 
  862.         breakwidth [ 4 ] = background [ 4 ] ; 
  863.         breakwidth [ 5 ] = background [ 5 ] ; 
  864.         breakwidth [ 6 ] = background [ 6 ] ; 
  865.         s = curp ; 
  866.         if ( breaktype > 0 ) 
  867.         if ( curp != 0 ) 
  868.         {
  869.           t = mem [ curp ] .hh.b1 ; 
  870.           v = curp ; 
  871.           s = mem [ curp + 1 ] .hh .v.RH ; 
  872.           while ( t > 0 ) {
  873.           
  874.         decr ( t ) ; 
  875.         v = mem [ v ] .hh .v.RH ; 
  876.         if ( ( v >= himemmin ) ) 
  877.         {
  878.           f = mem [ v ] .hh.b0 ; 
  879.           breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [ 
  880.           f ] + fontinfo [ charbase [ f ] + mem [ v ] .hh.b1 ] .qqqq 
  881.           .b0 ] .cint ; 
  882.         } 
  883.         else switch ( mem [ v ] .hh.b0 ) 
  884.         {case 6 : 
  885.           {
  886.             f = mem [ v + 1 ] .hh.b0 ; 
  887.             breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase 
  888.             [ f ] + fontinfo [ charbase [ f ] + mem [ v + 1 ] .hh.b1 ] 
  889.             .qqqq .b0 ] .cint ; 
  890.           } 
  891.           break ; 
  892.         case 0 : 
  893.         case 1 : 
  894.         case 2 : 
  895.         case 11 : 
  896.           breakwidth [ 1 ] = breakwidth [ 1 ] - mem [ v + 1 ] .cint ; 
  897.           break ; 
  898.           default: 
  899.           confusion ( 916 ) ; 
  900.           break ; 
  901.         } 
  902.           } 
  903.           while ( s != 0 ) {
  904.           
  905.         if ( ( s >= himemmin ) ) 
  906.         {
  907.           f = mem [ s ] .hh.b0 ; 
  908.           breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [ 
  909.           f ] + fontinfo [ charbase [ f ] + mem [ s ] .hh.b1 ] .qqqq 
  910.           .b0 ] .cint ; 
  911.         } 
  912.         else switch ( mem [ s ] .hh.b0 ) 
  913.         {case 6 : 
  914.           {
  915.             f = mem [ s + 1 ] .hh.b0 ; 
  916.             breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase 
  917.             [ f ] + fontinfo [ charbase [ f ] + mem [ s + 1 ] .hh.b1 ] 
  918.             .qqqq .b0 ] .cint ; 
  919.           } 
  920.           break ; 
  921.         case 0 : 
  922.         case 1 : 
  923.         case 2 : 
  924.           breakwidth [ 1 ] = breakwidth [ 1 ] + mem [ s + 1 ] .cint ; 
  925.           break ; 
  926.         case 11 : 
  927.           if ( ( t == 0 ) && ( mem [ s ] .hh.b1 != 2 ) ) 
  928.           t = -1 ; 
  929.           else breakwidth [ 1 ] = breakwidth [ 1 ] + mem [ s + 1 ] 
  930.           .cint ; 
  931.           break ; 
  932.           default: 
  933.           confusion ( 917 ) ; 
  934.           break ; 
  935.         } 
  936.         incr ( t ) ; 
  937.         s = mem [ s ] .hh .v.RH ; 
  938.           } 
  939.           breakwidth [ 1 ] = breakwidth [ 1 ] + discwidth ; 
  940.           if ( t == 0 ) 
  941.           s = mem [ v ] .hh .v.RH ; 
  942.         } 
  943.         while ( s != 0 ) {
  944.         
  945.           if ( ( s >= himemmin ) ) 
  946.           goto lab30 ; 
  947.           switch ( mem [ s ] .hh.b0 ) 
  948.           {case 10 : 
  949.         {
  950.           v = mem [ s + 1 ] .hh .v.LH ; 
  951.           breakwidth [ 1 ] = breakwidth [ 1 ] - mem [ v + 1 ] .cint ; 
  952.           breakwidth [ 2 + mem [ v ] .hh.b0 ] = breakwidth [ 2 + mem [ 
  953.           v ] .hh.b0 ] - mem [ v + 2 ] .cint ; 
  954.           breakwidth [ 6 ] = breakwidth [ 6 ] - mem [ v + 3 ] .cint ; 
  955.         } 
  956.         break ; 
  957.           case 12 : 
  958.         ; 
  959.         break ; 
  960.           case 9 : 
  961.           case 11 : 
  962.         if ( mem [ s ] .hh.b1 == 2 ) 
  963.         goto lab30 ; 
  964.         else breakwidth [ 1 ] = breakwidth [ 1 ] - mem [ s + 1 ] .cint 
  965.         ; 
  966.         break ; 
  967.         default: 
  968.         goto lab30 ; 
  969.         break ; 
  970.           } 
  971.           s = mem [ s ] .hh .v.RH ; 
  972.         } 
  973.         lab30: ; 
  974.       } 
  975.       if ( mem [ prevr ] .hh.b0 == 2 ) 
  976.       {
  977.         mem [ prevr + 1 ] .cint = mem [ prevr + 1 ] .cint - curactivewidth 
  978.         [ 1 ] + breakwidth [ 1 ] ; 
  979.         mem [ prevr + 2 ] .cint = mem [ prevr + 2 ] .cint - curactivewidth 
  980.         [ 2 ] + breakwidth [ 2 ] ; 
  981.         mem [ prevr + 3 ] .cint = mem [ prevr + 3 ] .cint - curactivewidth 
  982.         [ 3 ] + breakwidth [ 3 ] ; 
  983.         mem [ prevr + 4 ] .cint = mem [ prevr + 4 ] .cint - curactivewidth 
  984.         [ 4 ] + breakwidth [ 4 ] ; 
  985.         mem [ prevr + 5 ] .cint = mem [ prevr + 5 ] .cint - curactivewidth 
  986.         [ 5 ] + breakwidth [ 5 ] ; 
  987.         mem [ prevr + 6 ] .cint = mem [ prevr + 6 ] .cint - curactivewidth 
  988.         [ 6 ] + breakwidth [ 6 ] ; 
  989.       } 
  990.       else if ( prevr == memtop - 7 ) 
  991.       {
  992.         activewidth [ 1 ] = breakwidth [ 1 ] ; 
  993.         activewidth [ 2 ] = breakwidth [ 2 ] ; 
  994.         activewidth [ 3 ] = breakwidth [ 3 ] ; 
  995.         activewidth [ 4 ] = breakwidth [ 4 ] ; 
  996.         activewidth [ 5 ] = breakwidth [ 5 ] ; 
  997.         activewidth [ 6 ] = breakwidth [ 6 ] ; 
  998.       } 
  999.       else {
  1000.           
  1001.         q = getnode ( 7 ) ; 
  1002.         mem [ q ] .hh .v.RH = r ; 
  1003.         mem [ q ] .hh.b0 = 2 ; 
  1004.         mem [ q ] .hh.b1 = 0 ; 
  1005.         mem [ q + 1 ] .cint = breakwidth [ 1 ] - curactivewidth [ 1 ] ; 
  1006.         mem [ q + 2 ] .cint = breakwidth [ 2 ] - curactivewidth [ 2 ] ; 
  1007.         mem [ q + 3 ] .cint = breakwidth [ 3 ] - curactivewidth [ 3 ] ; 
  1008.         mem [ q + 4 ] .cint = breakwidth [ 4 ] - curactivewidth [ 4 ] ; 
  1009.         mem [ q + 5 ] .cint = breakwidth [ 5 ] - curactivewidth [ 5 ] ; 
  1010.         mem [ q + 6 ] .cint = breakwidth [ 6 ] - curactivewidth [ 6 ] ; 
  1011.         mem [ prevr ] .hh .v.RH = q ; 
  1012.         prevprevr = prevr ; 
  1013.         prevr = q ; 
  1014.       } 
  1015.       if ( abs ( eqtb [ 6179 ] .cint ) >= 1073741823L - minimumdemerits ) 
  1016.       minimumdemerits = 1073741822L ; 
  1017.       else minimumdemerits = minimumdemerits + abs ( eqtb [ 6179 ] .cint ) 
  1018.       ; 
  1019.       {register integer for_end; fitclass = 0 ; for_end = 3 ; if ( 
  1020.       fitclass <= for_end) do 
  1021.         {
  1022.           if ( minimaldemerits [ fitclass ] <= minimumdemerits ) 
  1023.           {
  1024.         q = getnode ( 2 ) ; 
  1025.         mem [ q ] .hh .v.RH = passive ; 
  1026.         passive = q ; 
  1027.         mem [ q + 1 ] .hh .v.RH = curp ; 
  1028.     ;
  1029. #ifdef STAT
  1030.         incr ( passnumber ) ; 
  1031.         mem [ q ] .hh .v.LH = passnumber ; 
  1032. #endif /* STAT */
  1033.         mem [ q + 1 ] .hh .v.LH = bestplace [ fitclass ] ; 
  1034.         q = getnode ( 3 ) ; 
  1035.         mem [ q + 1 ] .hh .v.RH = passive ; 
  1036.         mem [ q + 1 ] .hh .v.LH = bestplline [ fitclass ] + 1 ; 
  1037.         mem [ q ] .hh.b1 = fitclass ; 
  1038.         mem [ q ] .hh.b0 = breaktype ; 
  1039.         mem [ q + 2 ] .cint = minimaldemerits [ fitclass ] ; 
  1040.         mem [ q ] .hh .v.RH = r ; 
  1041.         mem [ prevr ] .hh .v.RH = q ; 
  1042.         prevr = q ; 
  1043.     ;
  1044. #ifdef STAT
  1045.         if ( eqtb [ 6195 ] .cint > 0 ) 
  1046.         {
  1047.           printnl ( 918 ) ; 
  1048.           printint ( mem [ passive ] .hh .v.LH ) ; 
  1049.           print ( 919 ) ; 
  1050.           printint ( mem [ q + 1 ] .hh .v.LH - 1 ) ; 
  1051.           printchar ( 46 ) ; 
  1052.           printint ( fitclass ) ; 
  1053.           if ( breaktype == 1 ) 
  1054.           printchar ( 45 ) ; 
  1055.           print ( 920 ) ; 
  1056.           printint ( mem [ q + 2 ] .cint ) ; 
  1057.           print ( 921 ) ; 
  1058.           if ( mem [ passive + 1 ] .hh .v.LH == 0 ) 
  1059.           printchar ( 48 ) ; 
  1060.           else printint ( mem [ mem [ passive + 1 ] .hh .v.LH ] .hh 
  1061.           .v.LH ) ; 
  1062.         } 
  1063. #endif /* STAT */
  1064.           } 
  1065.           minimaldemerits [ fitclass ] = 1073741823L ; 
  1066.         } 
  1067.       while ( fitclass++ < for_end ) ; } 
  1068.       minimumdemerits = 1073741823L ; 
  1069.       if ( r != memtop - 7 ) 
  1070.       {
  1071.         q = getnode ( 7 ) ; 
  1072.         mem [ q ] .hh .v.RH = r ; 
  1073.         mem [ q ] .hh.b0 = 2 ; 
  1074.         mem [ q ] .hh.b1 = 0 ; 
  1075.         mem [ q + 1 ] .cint = curactivewidth [ 1 ] - breakwidth [ 1 ] ; 
  1076.         mem [ q + 2 ] .cint = curactivewidth [ 2 ] - breakwidth [ 2 ] ; 
  1077.         mem [ q + 3 ] .cint = curactivewidth [ 3 ] - breakwidth [ 3 ] ; 
  1078.         mem [ q + 4 ] .cint = curactivewidth [ 4 ] - breakwidth [ 4 ] ; 
  1079.         mem [ q + 5 ] .cint = curactivewidth [ 5 ] - breakwidth [ 5 ] ; 
  1080.         mem [ q + 6 ] .cint = curactivewidth [ 6 ] - breakwidth [ 6 ] ; 
  1081.         mem [ prevr ] .hh .v.RH = q ; 
  1082.         prevprevr = prevr ; 
  1083.         prevr = q ; 
  1084.       } 
  1085.     } 
  1086.     if ( r == memtop - 7 ) 
  1087.     goto lab10 ; 
  1088.     if ( l > easyline ) 
  1089.     {
  1090.       linewidth = secondwidth ; 
  1091.       oldl = 65534L ; 
  1092.     } 
  1093.     else {
  1094.         
  1095.       oldl = l ; 
  1096.       if ( l > lastspecialline ) 
  1097.       linewidth = secondwidth ; 
  1098.       else if ( eqtb [ 4312 ] .hh .v.RH == 0 ) 
  1099.       linewidth = firstwidth ; 
  1100.       else linewidth = mem [ eqtb [ 4312 ] .hh .v.RH + 2 * l ] .cint ; 
  1101.     } 
  1102.       } 
  1103.     } 
  1104.     {
  1105.       artificialdemerits = false ; 
  1106.       shortfall = linewidth - curactivewidth [ 1 ] ; 
  1107.       if ( shortfall > 0 ) 
  1108.       if ( ( curactivewidth [ 3 ] != 0 ) || ( curactivewidth [ 4 ] != 0 ) || ( 
  1109.       curactivewidth [ 5 ] != 0 ) ) 
  1110.       {
  1111.     b = 0 ; 
  1112.     fitclass = 2 ; 
  1113.       } 
  1114.       else {
  1115.       
  1116.     if ( shortfall > 7230584L ) 
  1117.     if ( curactivewidth [ 2 ] < 1663497L ) 
  1118.     {
  1119.       b = 10000 ; 
  1120.       fitclass = 0 ; 
  1121.       goto lab31 ; 
  1122.     } 
  1123.     b = badness ( shortfall , curactivewidth [ 2 ] ) ; 
  1124.     if ( b > 12 ) 
  1125.     if ( b > 99 ) 
  1126.     fitclass = 0 ; 
  1127.     else fitclass = 1 ; 
  1128.     else fitclass = 2 ; 
  1129.     lab31: ; 
  1130.       } 
  1131.       else {
  1132.       
  1133.     if ( - (integer) shortfall > curactivewidth [ 6 ] ) 
  1134.     b = 10001 ; 
  1135.     else b = badness ( - (integer) shortfall , curactivewidth [ 6 ] ) ; 
  1136.     if ( b > 12 ) 
  1137.     fitclass = 3 ; 
  1138.     else fitclass = 2 ; 
  1139.       } 
  1140.       if ( ( b > 10000 ) || ( pi == -10000 ) ) 
  1141.       {
  1142.     if ( finalpass && ( minimumdemerits == 1073741823L ) && ( mem [ r ] 
  1143.     .hh .v.RH == memtop - 7 ) && ( prevr == memtop - 7 ) ) 
  1144.     artificialdemerits = true ; 
  1145.     else if ( b > threshold ) 
  1146.     goto lab60 ; 
  1147.     noderstaysactive = false ; 
  1148.       } 
  1149.       else {
  1150.       
  1151.     prevr = r ; 
  1152.     if ( b > threshold ) 
  1153.     goto lab22 ; 
  1154.     noderstaysactive = true ; 
  1155.       } 
  1156.       if ( artificialdemerits ) 
  1157.       d = 0 ; 
  1158.       else {
  1159.       
  1160.     d = eqtb [ 6165 ] .cint + b ; 
  1161.     if ( abs ( d ) >= 10000 ) 
  1162.     d = 100000000L ; 
  1163.     else d = d * d ; 
  1164.     if ( pi != 0 ) 
  1165.     if ( pi > 0 ) 
  1166.     d = d + pi * pi ; 
  1167.     else if ( pi > -10000 ) 
  1168.     d = d - pi * pi ; 
  1169.     if ( ( breaktype == 1 ) && ( mem [ r ] .hh.b0 == 1 ) ) 
  1170.     if ( curp != 0 ) 
  1171.     d = d + eqtb [ 6177 ] .cint ; 
  1172.     else d = d + eqtb [ 6178 ] .cint ; 
  1173.     if ( abs ( toint ( fitclass ) - toint ( mem [ r ] .hh.b1 ) ) > 1 ) 
  1174.     d = d + eqtb [ 6179 ] .cint ; 
  1175.       } 
  1176.     ;
  1177. #ifdef STAT
  1178.       if ( eqtb [ 6195 ] .cint > 0 ) 
  1179.       {
  1180.     if ( printednode != curp ) 
  1181.     {
  1182.       printnl ( 335 ) ; 
  1183.       if ( curp == 0 ) 
  1184.       shortdisplay ( mem [ printednode ] .hh .v.RH ) ; 
  1185.       else {
  1186.           
  1187.         savelink = mem [ curp ] .hh .v.RH ; 
  1188.         mem [ curp ] .hh .v.RH = 0 ; 
  1189.         printnl ( 335 ) ; 
  1190.         shortdisplay ( mem [ printednode ] .hh .v.RH ) ; 
  1191.         mem [ curp ] .hh .v.RH = savelink ; 
  1192.       } 
  1193.       printednode = curp ; 
  1194.     } 
  1195.     printnl ( 64 ) ; 
  1196.     if ( curp == 0 ) 
  1197.     printesc ( 593 ) ; 
  1198.     else if ( mem [ curp ] .hh.b0 != 10 ) 
  1199.     {
  1200.       if ( mem [ curp ] .hh.b0 == 12 ) 
  1201.       printesc ( 527 ) ; 
  1202.       else if ( mem [ curp ] .hh.b0 == 7 ) 
  1203.       printesc ( 346 ) ; 
  1204.       else if ( mem [ curp ] .hh.b0 == 11 ) 
  1205.       printesc ( 337 ) ; 
  1206.       else printesc ( 340 ) ; 
  1207.     } 
  1208.     print ( 922 ) ; 
  1209.     if ( mem [ r + 1 ] .hh .v.RH == 0 ) 
  1210.     printchar ( 48 ) ; 
  1211.     else printint ( mem [ mem [ r + 1 ] .hh .v.RH ] .hh .v.LH ) ; 
  1212.     print ( 923 ) ; 
  1213.     if ( b > 10000 ) 
  1214.     printchar ( 42 ) ; 
  1215.     else printint ( b ) ; 
  1216.     print ( 924 ) ; 
  1217.     printint ( pi ) ; 
  1218.     print ( 925 ) ; 
  1219.     if ( artificialdemerits ) 
  1220.     printchar ( 42 ) ; 
  1221.     else printint ( d ) ; 
  1222.       } 
  1223. #endif /* STAT */
  1224.       d = d + mem [ r + 2 ] .cint ; 
  1225.       if ( d <= minimaldemerits [ fitclass ] ) 
  1226.       {
  1227.     minimaldemerits [ fitclass ] = d ; 
  1228.     bestplace [ fitclass ] = mem [ r + 1 ] .hh .v.RH ; 
  1229.     bestplline [ fitclass ] = l ; 
  1230.     if ( d < minimumdemerits ) 
  1231.     minimumdemerits = d ; 
  1232.       } 
  1233.       if ( noderstaysactive ) 
  1234.       goto lab22 ; 
  1235.       lab60: mem [ prevr ] .hh .v.RH = mem [ r ] .hh .v.RH ; 
  1236.       freenode ( r , 3 ) ; 
  1237.       if ( prevr == memtop - 7 ) 
  1238.       {
  1239.     r = mem [ memtop - 7 ] .hh .v.RH ; 
  1240.     if ( mem [ r ] .hh.b0 == 2 ) 
  1241.     {
  1242.       activewidth [ 1 ] = activewidth [ 1 ] + mem [ r + 1 ] .cint ; 
  1243.       activewidth [ 2 ] = activewidth [ 2 ] + mem [ r + 2 ] .cint ; 
  1244.       activewidth [ 3 ] = activewidth [ 3 ] + mem [ r + 3 ] .cint ; 
  1245.       activewidth [ 4 ] = activewidth [ 4 ] + mem [ r + 4 ] .cint ; 
  1246.       activewidth [ 5 ] = activewidth [ 5 ] + mem [ r + 5 ] .cint ; 
  1247.       activewidth [ 6 ] = activewidth [ 6 ] + mem [ r + 6 ] .cint ; 
  1248.       curactivewidth [ 1 ] = activewidth [ 1 ] ; 
  1249.       curactivewidth [ 2 ] = activewidth [ 2 ] ; 
  1250.       curactivewidth [ 3 ] = activewidth [ 3 ] ; 
  1251.       curactivewidth [ 4 ] = activewidth [ 4 ] ; 
  1252.       curactivewidth [ 5 ] = activewidth [ 5 ] ; 
  1253.       curactivewidth [ 6 ] = activewidth [ 6 ] ; 
  1254.       mem [ memtop - 7 ] .hh .v.RH = mem [ r ] .hh .v.RH ; 
  1255.       freenode ( r , 7 ) ; 
  1256.     } 
  1257.       } 
  1258.       else if ( mem [ prevr ] .hh.b0 == 2 ) 
  1259.       {
  1260.     r = mem [ prevr ] .hh .v.RH ; 
  1261.     if ( r == memtop - 7 ) 
  1262.     {
  1263.       curactivewidth [ 1 ] = curactivewidth [ 1 ] - mem [ prevr + 1 ] 
  1264.       .cint ; 
  1265.       curactivewidth [ 2 ] = curactivewidth [ 2 ] - mem [ prevr + 2 ] 
  1266.       .cint ; 
  1267.       curactivewidth [ 3 ] = curactivewidth [ 3 ] - mem [ prevr + 3 ] 
  1268.       .cint ; 
  1269.       curactivewidth [ 4 ] = curactivewidth [ 4 ] - mem [ prevr + 4 ] 
  1270.       .cint ; 
  1271.       curactivewidth [ 5 ] = curactivewidth [ 5 ] - mem [ prevr + 5 ] 
  1272.       .cint ; 
  1273.       curactivewidth [ 6 ] = curactivewidth [ 6 ] - mem [ prevr + 6 ] 
  1274.       .cint ; 
  1275.       mem [ prevprevr ] .hh .v.RH = memtop - 7 ; 
  1276.       freenode ( prevr , 7 ) ; 
  1277.       prevr = prevprevr ; 
  1278.     } 
  1279.     else if ( mem [ r ] .hh.b0 == 2 ) 
  1280.     {
  1281.       curactivewidth [ 1 ] = curactivewidth [ 1 ] + mem [ r + 1 ] .cint ; 
  1282.       curactivewidth [ 2 ] = curactivewidth [ 2 ] + mem [ r + 2 ] .cint ; 
  1283.       curactivewidth [ 3 ] = curactivewidth [ 3 ] + mem [ r + 3 ] .cint ; 
  1284.       curactivewidth [ 4 ] = curactivewidth [ 4 ] + mem [ r + 4 ] .cint ; 
  1285.       curactivewidth [ 5 ] = curactivewidth [ 5 ] + mem [ r + 5 ] .cint ; 
  1286.       curactivewidth [ 6 ] = curactivewidth [ 6 ] + mem [ r + 6 ] .cint ; 
  1287.       mem [ prevr + 1 ] .cint = mem [ prevr + 1 ] .cint + mem [ r + 1 ] 
  1288.       .cint ; 
  1289.       mem [ prevr + 2 ] .cint = mem [ prevr + 2 ] .cint + mem [ r + 2 ] 
  1290.       .cint ; 
  1291.       mem [ prevr + 3 ] .cint = mem [ prevr + 3 ] .cint + mem [ r + 3 ] 
  1292.       .cint ; 
  1293.       mem [ prevr + 4 ] .cint = mem [ prevr + 4 ] .cint + mem [ r + 4 ] 
  1294.       .cint ; 
  1295.       mem [ prevr + 5 ] .cint = mem [ prevr + 5 ] .cint + mem [ r + 5 ] 
  1296.       .cint ; 
  1297.       mem [ prevr + 6 ] .cint = mem [ prevr + 6 ] .cint + mem [ r + 6 ] 
  1298.       .cint ; 
  1299.       mem [ prevr ] .hh .v.RH = mem [ r ] .hh .v.RH ; 
  1300.       freenode ( r , 7 ) ; 
  1301.     } 
  1302.       } 
  1303.     } 
  1304.   } 
  1305.   lab10: 
  1306.     ;
  1307. #ifdef STAT
  1308.   if ( curp == printednode ) 
  1309.   if ( curp != 0 ) 
  1310.   if ( mem [ curp ] .hh.b0 == 7 ) 
  1311.   {
  1312.     t = mem [ curp ] .hh.b1 ; 
  1313.     while ( t > 0 ) {
  1314.     
  1315.       decr ( t ) ; 
  1316.       printednode = mem [ printednode ] .hh .v.RH ; 
  1317.     } 
  1318.   } 
  1319. #endif /* STAT */
  1320.