home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Tex / texsrc.arc / TEX4.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  54KB  |  2,176 lines

  1. overlay "tex4"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5. startinput () { /* 30 */ r_startinput 
  6.   scanfilename () ; 
  7.   if ( curext == 206 ) 
  8.   curext = 644 ; 
  9.   packfilename ( curname , curarea , curext ) ; 
  10.   while ( true ) { 
  11.     beginfilerea () ; 
  12.     if ( aopenin ( inputfile [ curinput .indexfield ] , inputpathspec ) ) 
  13.     goto lab30 ; 
  14.     endfilereadi () ; 
  15.     promptfilena ( 640 , 644 ) ; 
  16.   } 
  17.   lab30: curinput .namefield = amakenamestr ( inputfile [ curinput .indexfield 
  18.   ] ) ; 
  19.   if ( jobname == 0 ) 
  20.   {
  21.     jobname = curname ; 
  22.     openlogfile () ; 
  23.   } 
  24.   if ( termoffset + ( strstart [ curinput .namefield + 1 ] - strstart [ 
  25.   curinput .namefield ] ) > maxprintline - 2 ) 
  26.   println () ; 
  27.   else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) ) 
  28.   printchar ( 32 ) ; 
  29.   printchar ( 40 ) ; 
  30.   print ( curinput .namefield ) ; 
  31.   termflush ( output ) ; 
  32.   curinput .statefield = 33 ; 
  33.   {
  34.     if ( ! inputln ( inputfile [ curinput .indexfield ] , false ) ) 
  35.     ; 
  36.     firmupthelin () ; 
  37.     if ( ( eqtb [ 5315 ] .cint < 0 ) || ( eqtb [ 5315 ] .cint > 127 ) ) 
  38.     decr ( curinput .limitfield ) ; 
  39.     else buffer [ curinput .limitfield ] = eqtb [ 5315 ] .cint ; 
  40.     first = curinput .limitfield + 1 ; 
  41.     curinput .locfield = curinput .startfield ; 
  42.     line = 1 ; 
  43.   } 
  44. internalfont zreadfontinfo ( u , nom , aire , s ) 
  45. halfword u ; 
  46. strnumber nom , aire ; 
  47. scaled s ; 
  48. {/* 30 11 45 */ register internalfont Result; 
  49.   r_readfontinfo 
  50.   integer k ; 
  51.   boolean fileopened ; 
  52.   halfword lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np ; 
  53.   internalfont f ; 
  54.   internalfont g ; 
  55.   eightbits a, b, c, d ; 
  56.   fourquarters qw ; 
  57.   scaled sw ; 
  58.   scaled z ; 
  59.   integer alpha ; 
  60.   quarterword beta ; 
  61.   g = 0 ; 
  62.   fileopened = false ; 
  63.   packfilename ( nom , aire , 664 ) ; 
  64.   if ( ! bopenin ( tfmfile ) ) 
  65.   goto lab11 ; 
  66.   fileopened = true ; 
  67.   {
  68.     {
  69.       lf = tfmtemp ; 
  70.       if ( lf > 127 ) 
  71.       goto lab11 ; 
  72.       tfmtemp = getc ( tfmfile ) ; 
  73.       lf = lf * 256 + tfmtemp ; 
  74.     } 
  75.     tfmtemp = getc ( tfmfile ) ; 
  76.     {
  77.       lh = tfmtemp ; 
  78.       if ( lh > 127 ) 
  79.       goto lab11 ; 
  80.       tfmtemp = getc ( tfmfile ) ; 
  81.       lh = lh * 256 + tfmtemp ; 
  82.     } 
  83.     tfmtemp = getc ( tfmfile ) ; 
  84.     {
  85.       bc = tfmtemp ; 
  86.       if ( bc > 127 ) 
  87.       goto lab11 ; 
  88.       tfmtemp = getc ( tfmfile ) ; 
  89.       bc = bc * 256 + tfmtemp ; 
  90.     } 
  91.     tfmtemp = getc ( tfmfile ) ; 
  92.     {
  93.       ec = tfmtemp ; 
  94.       if ( ec > 127 ) 
  95.       goto lab11 ; 
  96.       tfmtemp = getc ( tfmfile ) ; 
  97.       ec = ec * 256 + tfmtemp ; 
  98.     } 
  99.     if ( ( bc > ec + 1 ) || ( ec > 255 ) ) 
  100.     goto lab11 ; 
  101.     tfmtemp = getc ( tfmfile ) ; 
  102.     {
  103.       nw = tfmtemp ; 
  104.       if ( nw > 127 ) 
  105.       goto lab11 ; 
  106.       tfmtemp = getc ( tfmfile ) ; 
  107.       nw = nw * 256 + tfmtemp ; 
  108.     } 
  109.     tfmtemp = getc ( tfmfile ) ; 
  110.     {
  111.       nh = tfmtemp ; 
  112.       if ( nh > 127 ) 
  113.       goto lab11 ; 
  114.       tfmtemp = getc ( tfmfile ) ; 
  115.       nh = nh * 256 + tfmtemp ; 
  116.     } 
  117.     tfmtemp = getc ( tfmfile ) ; 
  118.     {
  119.       nd = tfmtemp ; 
  120.       if ( nd > 127 ) 
  121.       goto lab11 ; 
  122.       tfmtemp = getc ( tfmfile ) ; 
  123.       nd = nd * 256 + tfmtemp ; 
  124.     } 
  125.     tfmtemp = getc ( tfmfile ) ; 
  126.     {
  127.       ni = tfmtemp ; 
  128.       if ( ni > 127 ) 
  129.       goto lab11 ; 
  130.       tfmtemp = getc ( tfmfile ) ; 
  131.       ni = ni * 256 + tfmtemp ; 
  132.     } 
  133.     tfmtemp = getc ( tfmfile ) ; 
  134.     {
  135.       nl = tfmtemp ; 
  136.       if ( nl > 127 ) 
  137.       goto lab11 ; 
  138.       tfmtemp = getc ( tfmfile ) ; 
  139.       nl = nl * 256 + tfmtemp ; 
  140.     } 
  141.     tfmtemp = getc ( tfmfile ) ; 
  142.     {
  143.       nk = tfmtemp ; 
  144.       if ( nk > 127 ) 
  145.       goto lab11 ; 
  146.       tfmtemp = getc ( tfmfile ) ; 
  147.       nk = nk * 256 + tfmtemp ; 
  148.     } 
  149.     tfmtemp = getc ( tfmfile ) ; 
  150.     {
  151.       ne = tfmtemp ; 
  152.       if ( ne > 127 ) 
  153.       goto lab11 ; 
  154.       tfmtemp = getc ( tfmfile ) ; 
  155.       ne = ne * 256 + tfmtemp ; 
  156.     } 
  157.     tfmtemp = getc ( tfmfile ) ; 
  158.     {
  159.       np = tfmtemp ; 
  160.       if ( np > 127 ) 
  161.       goto lab11 ; 
  162.       tfmtemp = getc ( tfmfile ) ; 
  163.       np = np * 256 + tfmtemp ; 
  164.     } 
  165.     if ( lf != 6 + lh + ( ec - bc + 1 ) + nw + nh + nd + ni + nl + nk + ne + 
  166.     np ) 
  167.     goto lab11 ; 
  168.   } 
  169.   lf = lf - 6 - lh ; 
  170.   if ( np < 7 ) 
  171.   lf = lf + 7 - np ; 
  172.   if ( ( fontptr == fontmax ) || ( fmemptr + lf > fontmemsize ) ) 
  173.   {
  174.     {
  175.       if ( interaction == 3 ) 
  176.       wakeuptermin () ; 
  177.       printnl ( 133 ) ; 
  178.       print ( 655 ) ; 
  179.     } 
  180.     sprintcs ( u ) ; 
  181.     printchar ( 61 ) ; 
  182.     printfilenam ( nom , aire , 206 ) ; 
  183.     if ( s >= 0 ) 
  184.     {
  185.       print ( 598 ) ; 
  186.       printscaled ( s ) ; 
  187.       print ( 262 ) ; 
  188.     } 
  189.     else if ( s != - 1000 ) 
  190.     {
  191.       print ( 656 ) ; 
  192.       printint ( - s ) ; 
  193.     } 
  194.     print ( 665 ) ; 
  195.     {
  196.       helpptr = 4 ; 
  197.       helpline [ 3 ] = 666 ; 
  198.       helpline [ 2 ] = 667 ; 
  199.       helpline [ 1 ] = 668 ; 
  200.       helpline [ 0 ] = 669 ; 
  201.     } 
  202.     error () ; 
  203.     goto lab30 ; 
  204.   } 
  205.   f = fontptr + 1 ; 
  206.   charbase [ f ] = fmemptr - bc ; 
  207.   widthbase [ f ] = charbase [ f ] + ec + 1 ; 
  208.   heightbase [ f ] = widthbase [ f ] + nw ; 
  209.   depthbase [ f ] = heightbase [ f ] + nh ; 
  210.   italicbase [ f ] = depthbase [ f ] + nd ; 
  211.   ligkernbase [ f ] = italicbase [ f ] + ni ; 
  212.   kernbase [ f ] = ligkernbase [ f ] + nl ; 
  213.   extenbase [ f ] = kernbase [ f ] + nk ; 
  214.   parambase [ f ] = extenbase [ f ] + ne ; 
  215.   {
  216.     if ( lh < 2 ) 
  217.     goto lab11 ; 
  218.     {
  219.       tfmtemp = getc ( tfmfile ) ; 
  220.       a = tfmtemp ; 
  221.       qw .b0 = a ; 
  222.       tfmtemp = getc ( tfmfile ) ; 
  223.       b = tfmtemp ; 
  224.       qw .b1 = b ; 
  225.       tfmtemp = getc ( tfmfile ) ; 
  226.       c = tfmtemp ; 
  227.       qw .b2 = c ; 
  228.       tfmtemp = getc ( tfmfile ) ; 
  229.       d = tfmtemp ; 
  230.       qw .b3 = d ; 
  231.       fontcheck [ f ] = qw ; 
  232.     } 
  233.     tfmtemp = getc ( tfmfile ) ; 
  234.     {
  235.       z = tfmtemp ; 
  236.       if ( z > 127 ) 
  237.       goto lab11 ; 
  238.       tfmtemp = getc ( tfmfile ) ; 
  239.       z = z * 256 + tfmtemp ; 
  240.     } 
  241.     tfmtemp = getc ( tfmfile ) ; 
  242.     z = z * 256 + tfmtemp ; 
  243.     tfmtemp = getc ( tfmfile ) ; 
  244.     z = ( z * 16 ) + ( tfmtemp / 16 ) ; 
  245.     if ( z < 65536 ) 
  246.     goto lab11 ; 
  247.     while ( lh > 2 ) { 
  248.       tfmtemp = getc ( tfmfile ) ; 
  249.       tfmtemp = getc ( tfmfile ) ; 
  250.       tfmtemp = getc ( tfmfile ) ; 
  251.       tfmtemp = getc ( tfmfile ) ; 
  252.       decr ( lh ) ; 
  253.     } 
  254.     fontdsize [ f ] = z ; 
  255.     if ( s != - 1000 ) 
  256.     if ( s >= 0 ) 
  257.     z = s ; 
  258.     else z = xnoverd ( z , - s , 1000 ) ; 
  259.     fontsize [ f ] = z ; 
  260.   } 
  261.   for ( k = fmemptr ; k <= widthbase [ f ] - 1 ; k ++ ) 
  262.   {
  263.     {
  264.       tfmtemp = getc ( tfmfile ) ; 
  265.       a = tfmtemp ; 
  266.       qw .b0 = a ; 
  267.       tfmtemp = getc ( tfmfile ) ; 
  268.       b = tfmtemp ; 
  269.       qw .b1 = b ; 
  270.       tfmtemp = getc ( tfmfile ) ; 
  271.       c = tfmtemp ; 
  272.       qw .b2 = c ; 
  273.       tfmtemp = getc ( tfmfile ) ; 
  274.       d = tfmtemp ; 
  275.       qw .b3 = d ; 
  276.       fontinfo [ k ] .qqqq = qw ; 
  277.     } 
  278.     if ( ( a >= nw ) || ( b / 16 >= nh ) || ( b % 16 >= nd ) || ( c / 4 >= ni 
  279.     ) ) 
  280.     goto lab11 ; 
  281.     switch ( c % 4 ) 
  282.     {case 1 : 
  283.       if ( d >= nl ) 
  284.       goto lab11 ; 
  285.       break ; 
  286.     case 3 : 
  287.       if ( d >= ne ) 
  288.       goto lab11 ; 
  289.       break ; 
  290.     case 2 : 
  291.       {
  292.     {
  293.       if ( ( d < bc ) || ( d > ec ) ) 
  294.       goto lab11 ; 
  295.     } 
  296.     while ( d < k + bc - fmemptr ) { 
  297.       qw = fontinfo [ charbase [ f ] + d ] .qqqq ; 
  298.       if ( ( ( qw .b2 ) % 4 ) != 2 ) 
  299.       goto lab45 ; 
  300.       d = qw .b3 ; 
  301.     } 
  302.     if ( d == k + bc - fmemptr ) 
  303.     goto lab11 ; 
  304.     lab45: ; 
  305.       } 
  306.       break ; 
  307.     default : 
  308.       ; 
  309.       break ; 
  310.     } 
  311.   } 
  312.   {
  313.     {
  314.       alpha = 16 ; 
  315.       while ( z >= 8388608 ) { 
  316.     z = z / 2 ; 
  317.     alpha = alpha + alpha ; 
  318.       } 
  319.       beta = 256 / alpha ; 
  320.       alpha = alpha * z ; 
  321.     } 
  322.     for ( k = widthbase [ f ] ; k <= ligkernbase [ f ] - 1 ; k ++ ) 
  323.     {
  324.       tfmtemp = getc ( tfmfile ) ; 
  325.       a = tfmtemp ; 
  326.       tfmtemp = getc ( tfmfile ) ; 
  327.       b = tfmtemp ; 
  328.       tfmtemp = getc ( tfmfile ) ; 
  329.       c = tfmtemp ; 
  330.       tfmtemp = getc ( tfmfile ) ; 
  331.       d = tfmtemp ; 
  332.       sw = ( ( ( ( ( d * z ) / 256 ) + ( c * z ) ) / 256 ) + ( b * z ) ) / 
  333.       beta ; 
  334.       if ( a == 0 ) 
  335.       fontinfo [ k ] .cint = sw ; 
  336.       else if ( a == 255 ) 
  337.       fontinfo [ k ] .cint = sw - alpha ; 
  338.       else goto lab11 ; 
  339.     } 
  340.     if ( fontinfo [ widthbase [ f ] ] .cint != 0 ) 
  341.     goto lab11 ; 
  342.     if ( fontinfo [ heightbase [ f ] ] .cint != 0 ) 
  343.     goto lab11 ; 
  344.     if ( fontinfo [ depthbase [ f ] ] .cint != 0 ) 
  345.     goto lab11 ; 
  346.     if ( fontinfo [ italicbase [ f ] ] .cint != 0 ) 
  347.     goto lab11 ; 
  348.   } 
  349.   {
  350.     for ( k = ligkernbase [ f ] ; k <= kernbase [ f ] - 1 ; k ++ ) 
  351.     {
  352.       {
  353.     tfmtemp = getc ( tfmfile ) ; 
  354.     a = tfmtemp ; 
  355.     qw .b0 = a ; 
  356.     tfmtemp = getc ( tfmfile ) ; 
  357.     b = tfmtemp ; 
  358.     qw .b1 = b ; 
  359.     tfmtemp = getc ( tfmfile ) ; 
  360.     c = tfmtemp ; 
  361.     qw .b2 = c ; 
  362.     tfmtemp = getc ( tfmfile ) ; 
  363.     d = tfmtemp ; 
  364.     qw .b3 = d ; 
  365.     fontinfo [ k ] .qqqq = qw ; 
  366.       } 
  367.       {
  368.     if ( ( b < bc ) || ( b > ec ) ) 
  369.     goto lab11 ; 
  370.       } 
  371.       if ( c < 128 ) 
  372.       {
  373.     if ( ( d < bc ) || ( d > ec ) ) 
  374.     goto lab11 ; 
  375.       } 
  376.       else if ( d >= nk ) 
  377.       goto lab11 ; 
  378.     } 
  379.     if ( ( nl > 0 ) && ( a < 128 ) ) 
  380.     goto lab11 ; 
  381.     for ( k = kernbase [ f ] ; k <= extenbase [ f ] - 1 ; k ++ ) 
  382.     {
  383.       tfmtemp = getc ( tfmfile ) ; 
  384.       a = tfmtemp ; 
  385.       tfmtemp = getc ( tfmfile ) ; 
  386.       b = tfmtemp ; 
  387.       tfmtemp = getc ( tfmfile ) ; 
  388.       c = tfmtemp ; 
  389.       tfmtemp = getc ( tfmfile ) ; 
  390.       d = tfmtemp ; 
  391.       sw = ( ( ( ( ( d * z ) / 256 ) + ( c * z ) ) / 256 ) + ( b * z ) ) / 
  392.       beta ; 
  393.       if ( a == 0 ) 
  394.       fontinfo [ k ] .cint = sw ; 
  395.       else if ( a == 255 ) 
  396.       fontinfo [ k ] .cint = sw - alpha ; 
  397.       else goto lab11 ; 
  398.     } 
  399.   } 
  400.   for ( k = extenbase [ f ] ; k <= parambase [ f ] - 1 ; k ++ ) 
  401.   {
  402.     {
  403.       tfmtemp = getc ( tfmfile ) ; 
  404.       a = tfmtemp ; 
  405.       qw .b0 = a ; 
  406.       tfmtemp = getc ( tfmfile ) ; 
  407.       b = tfmtemp ; 
  408.       qw .b1 = b ; 
  409.       tfmtemp = getc ( tfmfile ) ; 
  410.       c = tfmtemp ; 
  411.       qw .b2 = c ; 
  412.       tfmtemp = getc ( tfmfile ) ; 
  413.       d = tfmtemp ; 
  414.       qw .b3 = d ; 
  415.       fontinfo [ k ] .qqqq = qw ; 
  416.     } 
  417.     if ( a != 0 ) 
  418.     {
  419.       if ( ( a < bc ) || ( a > ec ) ) 
  420.       goto lab11 ; 
  421.     } 
  422.     if ( b != 0 ) 
  423.     {
  424.       if ( ( b < bc ) || ( b > ec ) ) 
  425.       goto lab11 ; 
  426.     } 
  427.     if ( c != 0 ) 
  428.     {
  429.       if ( ( c < bc ) || ( c > ec ) ) 
  430.       goto lab11 ; 
  431.     } 
  432.     {
  433.       if ( ( d < bc ) || ( d > ec ) ) 
  434.       goto lab11 ; 
  435.     } 
  436.   } 
  437.   {
  438.     for ( k = 1 ; k <= np ; k ++ ) 
  439.     if ( k == 1 ) 
  440.     {
  441.       tfmtemp = getc ( tfmfile ) ; 
  442.       sw = tfmtemp ; 
  443.       if ( sw > 127 ) 
  444.       sw = sw - 256 ; 
  445.       tfmtemp = getc ( tfmfile ) ; 
  446.       sw = sw * 256 + tfmtemp ; 
  447.       tfmtemp = getc ( tfmfile ) ; 
  448.       sw = sw * 256 + tfmtemp ; 
  449.       tfmtemp = getc ( tfmfile ) ; 
  450.       fontinfo [ parambase [ f ] ] .cint = ( sw * 16 ) + ( tfmtemp / 16 ) ; 
  451.     } 
  452.     else { 
  453.       tfmtemp = getc ( tfmfile ) ; 
  454.       a = tfmtemp ; 
  455.       tfmtemp = getc ( tfmfile ) ; 
  456.       b = tfmtemp ; 
  457.       tfmtemp = getc ( tfmfile ) ; 
  458.       c = tfmtemp ; 
  459.       tfmtemp = getc ( tfmfile ) ; 
  460.       d = tfmtemp ; 
  461.       sw = ( ( ( ( ( d * z ) / 256 ) + ( c * z ) ) / 256 ) + ( b * z ) ) / 
  462.       beta ; 
  463.       if ( a == 0 ) 
  464.       fontinfo [ parambase [ f ] + k - 1 ] .cint = sw ; 
  465.       else if ( a == 255 ) 
  466.       fontinfo [ parambase [ f ] + k - 1 ] .cint = sw - alpha ; 
  467.       else goto lab11 ; 
  468.     } 
  469.     if ( eof ( tfmfile ) ) 
  470.     goto lab11 ; 
  471.     for ( k = np + 1 ; k <= 7 ; k ++ ) 
  472.     fontinfo [ parambase [ f ] + k - 1 ] .cint = 0 ; 
  473.   } 
  474.   if ( np >= 7 ) 
  475.   fontparams [ f ] = np ; 
  476.   else fontparams [ f ] = 7 ; 
  477.   hyphenchar [ f ] = eqtb [ 5313 ] .cint ; 
  478.   skewchar [ f ] = eqtb [ 5314 ] .cint ; 
  479.   fontname [ f ] = nom ; 
  480.   fontarea [ f ] = aire ; 
  481.   fontbc [ f ] = bc ; 
  482.   fontec [ f ] = ec ; 
  483.   fontglue [ f ] = 0 ; 
  484.   charbase [ f ] = charbase [ f ] ; 
  485.   widthbase [ f ] = widthbase [ f ] ; 
  486.   ligkernbase [ f ] = ligkernbase [ f ] ; 
  487.   kernbase [ f ] = kernbase [ f ] ; 
  488.   extenbase [ f ] = extenbase [ f ] ; 
  489.   decr ( parambase [ f ] ) ; 
  490.   fmemptr = fmemptr + lf ; 
  491.   fontptr = f ; 
  492.   g = f ; 
  493.   goto lab30 ; 
  494.   lab11: { 
  495.     if ( interaction == 3 ) 
  496.     wakeuptermin () ; 
  497.     printnl ( 133 ) ; 
  498.     print ( 655 ) ; 
  499.   } 
  500.   sprintcs ( u ) ; 
  501.   printchar ( 61 ) ; 
  502.   printfilenam ( nom , aire , 206 ) ; 
  503.   if ( s >= 0 ) 
  504.   {
  505.     print ( 598 ) ; 
  506.     printscaled ( s ) ; 
  507.     print ( 262 ) ; 
  508.   } 
  509.   else if ( s != - 1000 ) 
  510.   {
  511.     print ( 656 ) ; 
  512.     printint ( - s ) ; 
  513.   } 
  514.   if ( fileopened ) 
  515.   print ( 657 ) ; 
  516.   else print ( 658 ) ; 
  517.   {
  518.     helpptr = 5 ; 
  519.     helpline [ 4 ] = 659 ; 
  520.     helpline [ 3 ] = 660 ; 
  521.     helpline [ 2 ] = 661 ; 
  522.     helpline [ 1 ] = 662 ; 
  523.     helpline [ 0 ] = 663 ; 
  524.   } 
  525.   error () ; 
  526.   lab30: if ( fileopened ) 
  527.   bclose ( tfmfile ) ; 
  528.   Result = g ; 
  529.   return(Result) ; 
  530. zcharwarning ( f , c ) 
  531. internalfont f ; 
  532. eightbits c ; 
  533. {r_charwarning 
  534.   if ( eqtb [ 5302 ] .cint > 0 ) 
  535.   {
  536.     begindiagnos () ; 
  537.     printnl ( 678 ) ; 
  538.     printASCII ( c ) ; 
  539.     print ( 679 ) ; 
  540.     print ( fontname [ f ] ) ; 
  541.     printchar ( 33 ) ; 
  542.     enddiagnosti ( false ) ; 
  543.   } 
  544. halfword znewcharacter ( f , c ) 
  545. internalfont f ; 
  546. eightbits c ; 
  547. {/* 10 */ register halfword Result; r_newcharacter 
  548.   halfword p ; 
  549.   if ( fontbc [ f ] <= c ) 
  550.   if ( fontec [ f ] >= c ) 
  551.   if ( ( fontinfo [ charbase [ f ] + c ] .qqqq .b0 > 0 ) ) 
  552.   {
  553.     p = getavail () ; 
  554.     mem [(long) p ] .hh.b0 = f ; 
  555.     mem [(long) p ] .hh.b1 = c ; 
  556.     Result = p ; 
  557.     return(Result) ; 
  558.   } 
  559.   charwarning ( f , c ) ; 
  560.   Result = 0 ; 
  561.   return(Result) ; 
  562. dviswap () { r_dviswap 
  563.   if ( dvilimit == dvibufsize ) 
  564.   {
  565.     writedvi ( 0 , halfbuf - 1 ) ; 
  566.     dvilimit = halfbuf ; 
  567.     dvioffset = dvioffset + dvibufsize ; 
  568.     dviptr = 0 ; 
  569.   } 
  570.   else { 
  571.     writedvi ( halfbuf , dvibufsize - 1 ) ; 
  572.     dvilimit = dvibufsize ; 
  573.   } 
  574.   dvigone = dvigone + halfbuf ; 
  575. zdvifour ( x ) 
  576. integer x ; 
  577. {r_dvifour 
  578.   if ( x >= 0 ) 
  579.   {
  580.     dvibuf [ dviptr ] = x / 16777216 ; 
  581.     incr ( dviptr ) ; 
  582.     if ( dviptr == dvilimit ) 
  583.     dviswap () ; 
  584.   } 
  585.   else { 
  586.     x = x + 1073741824 ; 
  587.     x = x + 1073741824 ; 
  588.     {
  589.       dvibuf [ dviptr ] = ( x / 16777216 ) + 128 ; 
  590.       incr ( dviptr ) ; 
  591.       if ( dviptr == dvilimit ) 
  592.       dviswap () ; 
  593.     } 
  594.   } 
  595.   x = x % 16777216 ; 
  596.   {
  597.     dvibuf [ dviptr ] = x / 65536 ; 
  598.     incr ( dviptr ) ; 
  599.     if ( dviptr == dvilimit ) 
  600.     dviswap () ; 
  601.   } 
  602.   x = x % 65536 ; 
  603.   {
  604.     dvibuf [ dviptr ] = x / 256 ; 
  605.     incr ( dviptr ) ; 
  606.     if ( dviptr == dvilimit ) 
  607.     dviswap () ; 
  608.   } 
  609.   {
  610.     dvibuf [ dviptr ] = x % 256 ; 
  611.     incr ( dviptr ) ; 
  612.     if ( dviptr == dvilimit ) 
  613.     dviswap () ; 
  614.   } 
  615. zdvipop ( l ) 
  616. integer l ; 
  617. {r_dvipop 
  618.   if ( ( l == dvioffset + dviptr ) && ( dviptr > 0 ) ) 
  619.   decr ( dviptr ) ; 
  620.   else { 
  621.     dvibuf [ dviptr ] = 142 ; 
  622.     incr ( dviptr ) ; 
  623.     if ( dviptr == dvilimit ) 
  624.     dviswap () ; 
  625.   } 
  626. zdvifontdef ( f ) 
  627. internalfont f ; 
  628. {r_dvifontdef 
  629.   poolpointer k ; 
  630.   {
  631.     dvibuf [ dviptr ] = 243 ; 
  632.     incr ( dviptr ) ; 
  633.     if ( dviptr == dvilimit ) 
  634.     dviswap () ; 
  635.   } 
  636.   {
  637.     dvibuf [ dviptr ] = f - 1 ; 
  638.     incr ( dviptr ) ; 
  639.     if ( dviptr == dvilimit ) 
  640.     dviswap () ; 
  641.   } 
  642.   {
  643.     dvibuf [ dviptr ] = fontcheck [ f ] .b0 ; 
  644.     incr ( dviptr ) ; 
  645.     if ( dviptr == dvilimit ) 
  646.     dviswap () ; 
  647.   } 
  648.   {
  649.     dvibuf [ dviptr ] = fontcheck [ f ] .b1 ; 
  650.     incr ( dviptr ) ; 
  651.     if ( dviptr == dvilimit ) 
  652.     dviswap () ; 
  653.   } 
  654.   {
  655.     dvibuf [ dviptr ] = fontcheck [ f ] .b2 ; 
  656.     incr ( dviptr ) ; 
  657.     if ( dviptr == dvilimit ) 
  658.     dviswap () ; 
  659.   } 
  660.   {
  661.     dvibuf [ dviptr ] = fontcheck [ f ] .b3 ; 
  662.     incr ( dviptr ) ; 
  663.     if ( dviptr == dvilimit ) 
  664.     dviswap () ; 
  665.   } 
  666.   dvifour ( fontsize [ f ] ) ; 
  667.   dvifour ( fontdsize [ f ] ) ; 
  668.   {
  669.     dvibuf [ dviptr ] = ( strstart [ fontarea [ f ] + 1 ] - strstart [ 
  670.     fontarea [ f ] ] ) ; 
  671.     incr ( dviptr ) ; 
  672.     if ( dviptr == dvilimit ) 
  673.     dviswap () ; 
  674.   } 
  675.   {
  676.     dvibuf [ dviptr ] = ( strstart [ fontname [ f ] + 1 ] - strstart [ 
  677.     fontname [ f ] ] ) ; 
  678.     incr ( dviptr ) ; 
  679.     if ( dviptr == dvilimit ) 
  680.     dviswap () ; 
  681.   } 
  682.   for ( k = strstart [ fontarea [ f ] ] ; k <= strstart [ fontarea [ f ] + 1 ] 
  683.   - 1 ; k ++ ) 
  684.   {
  685.     dvibuf [ dviptr ] = strpool [ k ] ; 
  686.     incr ( dviptr ) ; 
  687.     if ( dviptr == dvilimit ) 
  688.     dviswap () ; 
  689.   } 
  690.   for ( k = strstart [ fontname [ f ] ] ; k <= strstart [ fontname [ f ] + 1 ] 
  691.   - 1 ; k ++ ) 
  692.   {
  693.     dvibuf [ dviptr ] = strpool [ k ] ; 
  694.     incr ( dviptr ) ; 
  695.     if ( dviptr == dvilimit ) 
  696.     dviswap () ; 
  697.   } 
  698. zmovement ( w , o ) 
  699. scaled w ; 
  700. eightbits o ; 
  701. {/* 10 40 45 2 1 */ r_movement 
  702.   smallnumber mstate ; 
  703.   halfword p, q ; 
  704.   integer k ; 
  705.   q = getnode ( 3 ) ; 
  706.   mem [(long) q + 1 ] .cint = w ; 
  707.   mem [(long) q + 2 ] .cint = dvioffset + dviptr ; 
  708.   if ( o == 157 ) 
  709.   {
  710.     mem [(long) q ] .hh .v.RH = downptr ; 
  711.     downptr = q ; 
  712.   } 
  713.   else { 
  714.     mem [(long) q ] .hh .v.RH = rightptr ; 
  715.     rightptr = q ; 
  716.   } 
  717.   p = mem [(long) q ] .hh .v.RH ; 
  718.   mstate = 0 ; 
  719.   while ( p != 0 ) { 
  720.     if ( mem [(long) p + 1 ] .cint == w ) 
  721.     switch ( mstate + mem [(long) p ] .hh .v.LH ) 
  722.     {case 3 : 
  723.     case 4 : 
  724.     case 15 : 
  725.     case 16 : 
  726.       if ( mem [(long) p + 2 ] .cint < dvigone ) 
  727.       goto lab45 ; 
  728.       else { 
  729.     k = mem [(long) p + 2 ] .cint - dvioffset ; 
  730.     if ( k < 0 ) 
  731.     k = k + dvibufsize ; 
  732.     dvibuf [ k ] = dvibuf [ k ] + 5 ; 
  733.     mem [(long) p ] .hh .v.LH = 1 ; 
  734.     goto lab40 ; 
  735.       } 
  736.       break ; 
  737.     case 5 : 
  738.     case 9 : 
  739.     case 11 : 
  740.       if ( mem [(long) p + 2 ] .cint < dvigone ) 
  741.       goto lab45 ; 
  742.       else { 
  743.     k = mem [(long) p + 2 ] .cint - dvioffset ; 
  744.     if ( k < 0 ) 
  745.     k = k + dvibufsize ; 
  746.     dvibuf [ k ] = dvibuf [ k ] + 10 ; 
  747.     mem [(long) p ] .hh .v.LH = 2 ; 
  748.     goto lab40 ; 
  749.       } 
  750.       break ; 
  751.     case 1 : 
  752.     case 2 : 
  753.     case 8 : 
  754.     case 13 : 
  755.       goto lab40 ; 
  756.       break ; 
  757.     default : 
  758.       ; 
  759.       break ; 
  760.     } 
  761.     else switch ( mstate + mem [(long) p ] .hh .v.LH ) 
  762.     {case 1 : 
  763.       mstate = 6 ; 
  764.       break ; 
  765.     case 2 : 
  766.       mstate = 12 ; 
  767.       break ; 
  768.     case 8 : 
  769.     case 13 : 
  770.       goto lab45 ; 
  771.       break ; 
  772.     default : 
  773.       ; 
  774.       break ; 
  775.     } 
  776.     p = mem [(long) p ] .hh .v.RH ; 
  777.   } 
  778.   lab45: ; 
  779.   mem [(long) q ] .hh .v.LH = 3 ; 
  780.   if ( abs ( w ) >= 8388608 ) 
  781.   {
  782.     {
  783.       dvibuf [ dviptr ] = o + 3 ; 
  784.       incr ( dviptr ) ; 
  785.       if ( dviptr == dvilimit ) 
  786.       dviswap () ; 
  787.     } 
  788.     dvifour ( w ) ; 
  789.     return ; 
  790.   } 
  791.   if ( abs ( w ) >= 32768 ) 
  792.   {
  793.     {
  794.       dvibuf [ dviptr ] = o + 2 ; 
  795.       incr ( dviptr ) ; 
  796.       if ( dviptr == dvilimit ) 
  797.       dviswap () ; 
  798.     } 
  799.     if ( w < 0 ) 
  800.     w = w + 16777216 ; 
  801.     {
  802.       dvibuf [ dviptr ] = w / 65536 ; 
  803.       incr ( dviptr ) ; 
  804.       if ( dviptr == dvilimit ) 
  805.       dviswap () ; 
  806.     } 
  807.     w = w % 65536 ; 
  808.     goto lab2 ; 
  809.   } 
  810.   if ( abs ( w ) >= 128 ) 
  811.   {
  812.     {
  813.       dvibuf [ dviptr ] = o + 1 ; 
  814.       incr ( dviptr ) ; 
  815.       if ( dviptr == dvilimit ) 
  816.       dviswap () ; 
  817.     } 
  818.     if ( w < 0 ) 
  819.     w = w + 65536 ; 
  820.     goto lab2 ; 
  821.   } 
  822.   {
  823.     dvibuf [ dviptr ] = o ; 
  824.     incr ( dviptr ) ; 
  825.     if ( dviptr == dvilimit ) 
  826.     dviswap () ; 
  827.   } 
  828.   if ( w < 0 ) 
  829.   w = w + 256 ; 
  830.   goto lab1 ; 
  831.   lab2: { 
  832.     dvibuf [ dviptr ] = w / 256 ; 
  833.     incr ( dviptr ) ; 
  834.     if ( dviptr == dvilimit ) 
  835.     dviswap () ; 
  836.   } 
  837.   lab1: { 
  838.     dvibuf [ dviptr ] = w % 256 ; 
  839.     incr ( dviptr ) ; 
  840.     if ( dviptr == dvilimit ) 
  841.     dviswap () ; 
  842.   } 
  843.   return ; 
  844.   lab40: mem [(long) q ] .hh .v.LH = mem [(long) p ] .hh .v.LH ; 
  845.   if ( mem [(long) q ] .hh .v.LH == 1 ) 
  846.   {
  847.     {
  848.       dvibuf [ dviptr ] = o + 4 ; 
  849.       incr ( dviptr ) ; 
  850.       if ( dviptr == dvilimit ) 
  851.       dviswap () ; 
  852.     } 
  853.     while ( mem [(long) q ] .hh .v.RH != p ) { 
  854.       q = mem [(long) q ] .hh .v.RH ; 
  855.       switch ( mem [(long) q ] .hh .v.LH ) 
  856.       {case 3 : 
  857.     mem [(long) q ] .hh .v.LH = 5 ; 
  858.     break ; 
  859.       case 4 : 
  860.     mem [(long) q ] .hh .v.LH = 6 ; 
  861.     break ; 
  862.       default : 
  863.  
  864.     break ; 
  865.       } 
  866.     } 
  867.   } 
  868.   else { 
  869.     {
  870.       dvibuf [ dviptr ] = o + 9 ; 
  871.       incr ( dviptr ) ; 
  872.       if ( dviptr == dvilimit ) 
  873.       dviswap () ; 
  874.     } 
  875.     while ( mem [(long) q ] .hh .v.RH != p ) { 
  876.       q = mem [(long) q ] .hh .v.RH ; 
  877.       switch ( mem [(long) q ] .hh .v.LH ) 
  878.       {case 3 : 
  879.     mem [(long) q ] .hh .v.LH = 4 ; 
  880.     break ; 
  881.       case 5 : 
  882.     mem [(long) q ] .hh .v.LH = 6 ; 
  883.     break ; 
  884.       default : 
  885.  
  886.     break ; 
  887.       } 
  888.     } 
  889.   } 
  890. zprunemovemen ( l ) 
  891. integer l ; 
  892. {/* 30 10 */ r_prunemovemen 
  893.   halfword p ; 
  894.   while ( downptr != 0 ) { 
  895.     if ( mem [(long) downptr + 2 ] .cint < l ) 
  896.     goto lab30 ; 
  897.     p = downptr ; 
  898.     downptr = mem [(long) p ] .hh .v.RH ; 
  899.     freenode ( p , 3 ) ; 
  900.   } 
  901.   lab30: while ( rightptr != 0 ) { 
  902.     if ( mem [(long) rightptr + 2 ] .cint < l ) 
  903.     return ; 
  904.     p = rightptr ; 
  905.     rightptr = mem [(long) p ] .hh .v.RH ; 
  906.     freenode ( p , 3 ) ; 
  907.   } 
  908. zspecialout ( p ) 
  909. halfword p ; 
  910. {r_specialout 
  911.   quarterword oldsetting ; 
  912.   poolpointer k ; 
  913.   if ( curh != dvih ) 
  914.   {
  915.     movement ( curh - dvih , 143 ) ; 
  916.     dvih = curh ; 
  917.   } 
  918.   if ( curv != dviv ) 
  919.   {
  920.     movement ( curv - dviv , 157 ) ; 
  921.     dviv = curv ; 
  922.   } 
  923.   oldsetting = selector ; 
  924.   selector = 21 ; 
  925.   showtokenlis ( mem [(long) mem [(long) p + 1 ] .hh .v.RH ] .hh .v.RH , 0 , poolsize - 
  926.   poolptr ) ; 
  927.   selector = oldsetting ; 
  928.   {
  929.     if ( poolptr + 1 > poolsize ) 
  930.     overflow ( 128 , poolsize - initpoolptr ) ; 
  931.   } 
  932.   if ( ( poolptr - strstart [ strptr ] ) < 256 ) 
  933.   {
  934.     {
  935.       dvibuf [ dviptr ] = 239 ; 
  936.       incr ( dviptr ) ; 
  937.       if ( dviptr == dvilimit ) 
  938.       dviswap () ; 
  939.     } 
  940.     {
  941.       dvibuf [ dviptr ] = ( poolptr - strstart [ strptr ] ) ; 
  942.       incr ( dviptr ) ; 
  943.       if ( dviptr == dvilimit ) 
  944.       dviswap () ; 
  945.     } 
  946.   } 
  947.   else { 
  948.     {
  949.       dvibuf [ dviptr ] = 242 ; 
  950.       incr ( dviptr ) ; 
  951.       if ( dviptr == dvilimit ) 
  952.       dviswap () ; 
  953.     } 
  954.     dvifour ( ( poolptr - strstart [ strptr ] ) ) ; 
  955.   } 
  956.   for ( k = strstart [ strptr ] ; k <= poolptr - 1 ; k ++ ) 
  957.   {
  958.     dvibuf [ dviptr ] = strpool [ k ] ; 
  959.     incr ( dviptr ) ; 
  960.     if ( dviptr == dvilimit ) 
  961.     dviswap () ; 
  962.   } 
  963.   poolptr = strstart [ strptr ] ; 
  964. zwriteout ( p ) 
  965. halfword p ; 
  966. {r_writeout 
  967.   quarterword oldsetting ; 
  968.   integer oldmode ; 
  969.   smallnumber j ; 
  970.   halfword q, r ; 
  971.   q = getavail () ; 
  972.   mem [(long) q ] .hh .v.LH = 637 ; 
  973.   r = getavail () ; 
  974.   mem [(long) q ] .hh .v.RH = r ; 
  975.   mem [(long) r ] .hh .v.LH = 7362 ; 
  976.   begintokenli ( q , 4 ) ; 
  977.   begintokenli ( mem [(long) p + 1 ] .hh .v.RH , 15 ) ; 
  978.   q = getavail () ; 
  979.   mem [(long) q ] .hh .v.LH = 379 ; 
  980.   begintokenli ( q , 4 ) ; 
  981.   oldmode = curlist .modefield ; 
  982.   curlist .modefield = 0 ; 
  983.   curcs = writeloc ; 
  984.   q = scantoks ( false , true ) ; 
  985.   gettoken () ; 
  986.   if ( curtok != 7362 ) 
  987.   {
  988.     {
  989.       if ( interaction == 3 ) 
  990.       wakeuptermin () ; 
  991.       printnl ( 133 ) ; 
  992.       print ( 1139 ) ; 
  993.     } 
  994.     {
  995.       helpptr = 2 ; 
  996.       helpline [ 1 ] = 1140 ; 
  997.       helpline [ 0 ] = 860 ; 
  998.     } 
  999.     error () ; 
  1000.     do { gettoken () ; 
  1001.     } while ( ! ( curtok == 7362 ) ) ; 
  1002.   } 
  1003.   curlist .modefield = oldmode ; 
  1004.   endtokenlist () ; 
  1005.   oldsetting = selector ; 
  1006.   j = mem [(long) p + 1 ] .hh .v.LH ; 
  1007.   if ( writeopen [ j ] ) 
  1008.   selector = j ; 
  1009.   else { 
  1010.     if ( ( j == 17 ) && ( selector == 19 ) ) 
  1011.     selector = 18 ; 
  1012.     printnl ( 206 ) ; 
  1013.   } 
  1014.   showtokenlis ( mem [(long) defref ] .hh .v.RH , 0 , 10000000 ) ; 
  1015.   println () ; 
  1016.   flushlist ( defref ) ; 
  1017.   selector = oldsetting ; 
  1018. zoutwhat ( p ) 
  1019. halfword p ; 
  1020. {r_outwhat 
  1021.   smallnumber j ; 
  1022.   switch ( mem [(long) p ] .hh.b1 ) 
  1023.   {case 0 : 
  1024.   case 1 : 
  1025.   case 2 : 
  1026.     if ( ! doingleaders ) 
  1027.     {
  1028.       j = mem [(long) p + 1 ] .hh .v.LH ; 
  1029.       if ( mem [(long) p ] .hh.b1 == 1 ) 
  1030.       writeout ( p ) ; 
  1031.       else { 
  1032.     if ( writeopen [ j ] ) 
  1033.     aclose ( writefile [ j ] ) ; 
  1034.     if ( mem [(long) p ] .hh.b1 == 2 ) 
  1035.     writeopen [ j ] = false ; 
  1036.     else if ( j < 16 ) 
  1037.     {
  1038.       curname = mem [(long) p + 1 ] .hh .v.RH ; 
  1039.       curarea = mem [(long) p + 2 ] .hh .v.LH ; 
  1040.       curext = mem [(long) p + 2 ] .hh .v.RH ; 
  1041.       if ( curext == 206 ) 
  1042.       curext = 644 ; 
  1043.       packfilename ( curname , curarea , curext ) ; 
  1044.       while ( ! aopenout ( writefile [ j ] ) ) promptfilena ( 1142 , 644 ) 
  1045.       ; 
  1046.       writeopen [ j ] = true ; 
  1047.     } 
  1048.       } 
  1049.     } 
  1050.     break ; 
  1051.   case 3 : 
  1052.     specialout ( p ) ; 
  1053.     break ; 
  1054.   default : 
  1055.     confusion ( 1141 ) ; 
  1056.     break ; 
  1057.   } 
  1058. hlistout () { /* 21 13 14 15 */ r_hlistout 
  1059.   scaled baseline ; 
  1060.   scaled leftedge ; 
  1061.   scaled saveh, savev ; 
  1062.   halfword thisbox ; 
  1063.   glueord gorder ; 
  1064.   quarterword gsign ; 
  1065.   halfword p ; 
  1066.   integer saveloc ; 
  1067.   halfword leaderbox ; 
  1068.   scaled leaderwd ; 
  1069.   scaled lx ; 
  1070.   boolean outerdoingle ; 
  1071.   scaled edge ; 
  1072.   fourquarters qi;
  1073.   thisbox = tempptr ; 
  1074.   gorder = mem [(long) thisbox + 5 ] .hh.b1 ; 
  1075.   gsign = mem [(long) thisbox + 5 ] .hh.b0 ; 
  1076.   p = mem [(long) thisbox + 5 ] .hh .v.RH ; 
  1077.   incr ( curs ) ; 
  1078.   if ( curs > 0 ) 
  1079.   {
  1080.     dvibuf [ dviptr ] = 141 ; 
  1081.     incr ( dviptr ) ; 
  1082.     if ( dviptr == dvilimit ) 
  1083.     dviswap () ; 
  1084.   } 
  1085.   if ( curs > maxpush ) 
  1086.   maxpush = curs ; 
  1087.   saveloc = dvioffset + dviptr ; 
  1088.   baseline = curv ; 
  1089.   leftedge = curh ; 
  1090.   while ( p != 0 ) lab21: if ( ( p >= himemmin ) ) 
  1091.   {
  1092.     if ( curh != dvih ) 
  1093.     {
  1094.       movement ( curh - dvih , 143 ) ; 
  1095.       dvih = curh ; 
  1096.     } 
  1097.     if ( curv != dviv ) 
  1098.     {
  1099.       movement ( curv - dviv , 157 ) ; 
  1100.       dviv = curv ; 
  1101.     } 
  1102.     do { f = mem [(long) p ] .hh.b0 ; 
  1103.       c = mem [(long) p ] .hh.b1 ; 
  1104.       if ( f != dvif ) 
  1105.       {
  1106.     if ( ! fontused [ f ] ) 
  1107.     {
  1108.       dvifontdef ( f ) ; 
  1109.       fontused [ f ] = true ; 
  1110.     } 
  1111.     if ( f <= 64 ) 
  1112.     {
  1113.       dvibuf [ dviptr ] = f + 170 ; 
  1114.       incr ( dviptr ) ; 
  1115.       if ( dviptr == dvilimit ) 
  1116.       dviswap () ; 
  1117.     } 
  1118.     else { 
  1119.       {
  1120.         dvibuf [ dviptr ] = 235 ; 
  1121.         incr ( dviptr ) ; 
  1122.         if ( dviptr == dvilimit ) 
  1123.         dviswap () ; 
  1124.       } 
  1125.       {
  1126.         dvibuf [ dviptr ] = f - 1 ; 
  1127.         incr ( dviptr ) ; 
  1128.         if ( dviptr == dvilimit ) 
  1129.         dviswap () ; 
  1130.       } 
  1131.     } 
  1132.     dvif = f ; 
  1133.       } 
  1134.       if ( c >= 128 ) 
  1135.       {
  1136.     dvibuf [ dviptr ] = 128 ; 
  1137.     incr ( dviptr ) ; 
  1138.     if ( dviptr == dvilimit ) 
  1139.     dviswap () ; 
  1140.       } 
  1141.       {
  1142.     dvibuf [ dviptr ] = c ; 
  1143.     incr ( dviptr ) ; 
  1144.     if ( dviptr == dvilimit ) 
  1145.     dviswap () ; 
  1146.       } 
  1147. /*      curh = curh + fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + c 
  1148.       ] .qqqq .b0 ] .cint ; */
  1149. qi=    fontinfo [ charbase [ f ] + c  ] .qqqq;
  1150.   curh = curh + fontinfo [ widthbase [ f ] + qi .b0 ] .cint ;
  1151.       p = mem [(long) p ] .hh .v.RH ; 
  1152.     } while ( ! ( ! ( p >= himemmin ) ) ) ; 
  1153.     dvih = curh ; 
  1154.   } 
  1155.   else { 
  1156.     switch ( mem [(long) p ] .hh.b0 ) 
  1157.     {case 0 : 
  1158.     case 1 : 
  1159.       if ( mem [(long) p + 5 ] .hh .v.RH == 0 ) 
  1160.       curh = curh + mem [(long) p + 1 ] .cint ; 
  1161.       else { 
  1162.     saveh = dvih ; 
  1163.     savev = dviv ; 
  1164.     curv = baseline + mem [(long) p + 4 ] .cint ; 
  1165.     tempptr = p ; 
  1166.     edge = curh ; 
  1167.     if ( mem [(long) p ] .hh.b0 == 1 ) 
  1168.     vlistout () ; 
  1169.     else hlistout () ; 
  1170.     dvih = saveh ; 
  1171.     dviv = savev ; 
  1172.     curh = edge + mem [(long) p + 1 ] .cint ; 
  1173.     curv = baseline ; 
  1174.       } 
  1175.       break ; 
  1176.     case 2 : 
  1177.       {
  1178.     ruleht = mem [(long) p + 3 ] .cint ; 
  1179.     ruledp = mem [(long) p + 2 ] .cint ; 
  1180.     rulewd = mem [(long) p + 1 ] .cint ; 
  1181.     goto lab14 ; 
  1182.       } 
  1183.       break ; 
  1184.     case 8 : 
  1185.       outwhat ( p ) ; 
  1186.       break ; 
  1187.     case 10 : 
  1188.       {
  1189.     g = mem [(long) p + 1 ] .hh .v.LH ; 
  1190.     rulewd = mem [(long) g + 1 ] .cint ; 
  1191.     if ( gsign != 0 ) 
  1192.     {
  1193.       if ( gsign == 1 ) 
  1194.       {
  1195.         if ( mem [(long) g ] .hh.b0 == gorder ) 
  1196.         rulewd = rulewd + round ( mem [(long) thisbox + 6 ] .gr * mem [(long) g + 2 ] 
  1197.         .cint ) ; 
  1198.       } 
  1199.       else { 
  1200.         if ( mem [(long) g ] .hh.b1 == gorder ) 
  1201.         rulewd = rulewd - round ( mem [(long) thisbox + 6 ] .gr * mem [(long) g + 3 ] 
  1202.         .cint ) ; 
  1203.       } 
  1204.     } 
  1205.     if ( mem [(long) p ] .hh.b1 >= 100 ) 
  1206.     {
  1207.       leaderbox = mem [(long) p + 1 ] .hh .v.RH ; 
  1208.       if ( mem [(long) leaderbox ] .hh.b0 == 2 ) 
  1209.       {
  1210.         ruleht = mem [(long) leaderbox + 3 ] .cint ; 
  1211.         ruledp = mem [(long) leaderbox + 2 ] .cint ; 
  1212.         goto lab14 ; 
  1213.       } 
  1214.       leaderwd = mem [(long) leaderbox + 1 ] .cint ; 
  1215.       if ( ( leaderwd > 0 ) && ( rulewd > 0 ) ) 
  1216.       {
  1217.         rulewd = rulewd + 10 ; 
  1218.         edge = curh + rulewd ; 
  1219.         lx = 0 ; 
  1220.         if ( mem [(long) p ] .hh.b1 == 100 ) 
  1221.         {
  1222.           saveh = curh ; 
  1223.           curh = leftedge + leaderwd * ( ( curh - leftedge ) / leaderwd ) 
  1224.           ; 
  1225.           if ( curh < saveh ) 
  1226.           curh = curh + leaderwd ; 
  1227.         } 
  1228.         else { 
  1229.           lq = rulewd / leaderwd ; 
  1230.           lr = rulewd % leaderwd ; 
  1231.           if ( mem [(long) p ] .hh.b1 == 101 ) 
  1232.           curh = curh + ( lr / 2 ) ; 
  1233.           else { 
  1234.         lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ; 
  1235.         curh = curh + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ; 
  1236.           } 
  1237.         } 
  1238.         while ( curh + leaderwd <= edge ) { 
  1239.           curv = baseline + mem [(long) leaderbox + 4 ] .cint ; 
  1240.           if ( curv != dviv ) 
  1241.           {
  1242.         movement ( curv - dviv , 157 ) ; 
  1243.         dviv = curv ; 
  1244.           } 
  1245.           savev = dviv ; 
  1246.           if ( curh != dvih ) 
  1247.           {
  1248.         movement ( curh - dvih , 143 ) ; 
  1249.         dvih = curh ; 
  1250.           } 
  1251.           saveh = dvih ; 
  1252.           tempptr = leaderbox ; 
  1253.           outerdoingle = doingleaders ; 
  1254.           doingleaders = true ; 
  1255.           if ( mem [(long) leaderbox ] .hh.b0 == 1 ) 
  1256.           vlistout () ; 
  1257.           else hlistout () ; 
  1258.           doingleaders = outerdoingle ; 
  1259.           dviv = savev ; 
  1260.           dvih = saveh ; 
  1261.           curv = savev ; 
  1262.           curh = saveh + leaderwd + lx ; 
  1263.         } 
  1264.         curh = edge - 10 ; 
  1265.         goto lab15 ; 
  1266.       } 
  1267.     } 
  1268.     goto lab13 ; 
  1269.       } 
  1270.       break ; 
  1271.     case 11 : 
  1272.     case 9 : 
  1273.       curh = curh + mem [(long) p + 1 ] .cint ; 
  1274.       break ; 
  1275.     case 6 : 
  1276.       {
  1277.     mem [(long) memtop - 12 ] = mem [(long) p + 1 ] ; 
  1278.     mem [(long) memtop - 12 ] .hh .v.RH = mem [(long) p ] .hh .v.RH ; 
  1279.     p = memtop - 12 ; 
  1280.     goto lab21 ; 
  1281.       } 
  1282.       break ; 
  1283.     default : 
  1284.       ; 
  1285.       break ; 
  1286.     } 
  1287.     goto lab15 ; 
  1288.     lab14: if ( ( ruleht == - 1073741824 ) ) 
  1289.     ruleht = mem [(long) thisbox + 3 ] .cint ; 
  1290.     if ( ( ruledp == - 1073741824 ) ) 
  1291.     ruledp = mem [(long) thisbox + 2 ] .cint ; 
  1292.     ruleht = ruleht + ruledp ; 
  1293.     if ( ( ruleht > 0 ) && ( rulewd > 0 ) ) 
  1294.     {
  1295.       if ( curh != dvih ) 
  1296.       {
  1297.     movement ( curh - dvih , 143 ) ; 
  1298.     dvih = curh ; 
  1299.       } 
  1300.       curv = baseline + ruledp ; 
  1301.       if ( curv != dviv ) 
  1302.       {
  1303.     movement ( curv - dviv , 157 ) ; 
  1304.     dviv = curv ; 
  1305.       } 
  1306.       {
  1307.     dvibuf [ dviptr ] = 132 ; 
  1308.     incr ( dviptr ) ; 
  1309.     if ( dviptr == dvilimit ) 
  1310.     dviswap () ; 
  1311.       } 
  1312.       dvifour ( ruleht ) ; 
  1313.       dvifour ( rulewd ) ; 
  1314.       curv = baseline ; 
  1315.       dvih = dvih + rulewd ; 
  1316.     } 
  1317.     lab13: curh = curh + rulewd ; 
  1318.     lab15: p = mem [(long) p ] .hh .v.RH ; 
  1319.   } 
  1320.   prunemovemen ( saveloc ) ; 
  1321.   if ( curs > 0 ) 
  1322.   dvipop ( saveloc ) ; 
  1323.   decr ( curs ) ; 
  1324. vlistout () { /* 13 14 15 */ r_vlistout 
  1325.   scaled leftedge ; 
  1326.   scaled topedge ; 
  1327.   scaled saveh, savev ; 
  1328.   halfword thisbox ; 
  1329.   glueord gorder ; 
  1330.   quarterword gsign ; 
  1331.   halfword p ; 
  1332.   integer saveloc ; 
  1333.   halfword leaderbox ; 
  1334.   scaled leaderht ; 
  1335.   scaled lx ; 
  1336.   boolean outerdoingle ; 
  1337.   scaled edge ; 
  1338.   thisbox = tempptr ; 
  1339.   gorder = mem [(long) thisbox + 5 ] .hh.b1 ; 
  1340.   gsign = mem [(long) thisbox + 5 ] .hh.b0 ; 
  1341.   p = mem [(long) thisbox + 5 ] .hh .v.RH ; 
  1342.   incr ( curs ) ; 
  1343.   if ( curs > 0 ) 
  1344.   {
  1345.     dvibuf [ dviptr ] = 141 ; 
  1346.     incr ( dviptr ) ; 
  1347.     if ( dviptr == dvilimit ) 
  1348.     dviswap () ; 
  1349.   } 
  1350.   if ( curs > maxpush ) 
  1351.   maxpush = curs ; 
  1352.   saveloc = dvioffset + dviptr ; 
  1353.   leftedge = curh ; 
  1354.   curv = curv - mem [(long) thisbox + 3 ] .cint ; 
  1355.   topedge = curv ; 
  1356.   while ( p != 0 ) { 
  1357.     if ( ( p >= himemmin ) ) 
  1358.     confusion ( 681 ) ; 
  1359.     else { 
  1360.       switch ( mem [(long) p ] .hh.b0 ) 
  1361.       {case 0 : 
  1362.       case 1 : 
  1363.     if ( mem [(long) p + 5 ] .hh .v.RH == 0 ) 
  1364.     curv = curv + mem [(long) p + 3 ] .cint + mem [(long) p + 2 ] .cint ; 
  1365.     else { 
  1366.       curv = curv + mem [(long) p + 3 ] .cint ; 
  1367.       if ( curv != dviv ) 
  1368.       {
  1369.         movement ( curv - dviv , 157 ) ; 
  1370.         dviv = curv ; 
  1371.       } 
  1372.       saveh = dvih ; 
  1373.       savev = dviv ; 
  1374.       curh = leftedge + mem [(long) p + 4 ] .cint ; 
  1375.       tempptr = p ; 
  1376.       if ( mem [(long) p ] .hh.b0 == 1 ) 
  1377.       vlistout () ; 
  1378.       else hlistout () ; 
  1379.       dvih = saveh ; 
  1380.       dviv = savev ; 
  1381.       curv = savev + mem [(long) p + 2 ] .cint ; 
  1382.       curh = leftedge ; 
  1383.     } 
  1384.     break ; 
  1385.       case 2 : 
  1386.     {
  1387.       ruleht = mem [(long) p + 3 ] .cint ; 
  1388.       ruledp = mem [(long) p + 2 ] .cint ; 
  1389.       rulewd = mem [(long) p + 1 ] .cint ; 
  1390.       goto lab14 ; 
  1391.     } 
  1392.     break ; 
  1393.       case 8 : 
  1394.     outwhat ( p ) ; 
  1395.     break ; 
  1396.       case 10 : 
  1397.     {
  1398.       g = mem [(long) p + 1 ] .hh .v.LH ; 
  1399.       ruleht = mem [(long) g + 1 ] .cint ; 
  1400.       if ( gsign != 0 ) 
  1401.       {
  1402.         if ( gsign == 1 ) 
  1403.         {
  1404.           if ( mem [(long) g ] .hh.b0 == gorder ) 
  1405.           ruleht = ruleht + round ( mem [(long) thisbox + 6 ] .gr * mem [(long) g + 2 
  1406.           ] .cint ) ; 
  1407.         } 
  1408.         else { 
  1409.           if ( mem [(long) g ] .hh.b1 == gorder ) 
  1410.           ruleht = ruleht - round ( mem [(long) thisbox + 6 ] .gr * mem [(long) g + 3 
  1411.           ] .cint ) ; 
  1412.         } 
  1413.       } 
  1414.       if ( mem [(long) p ] .hh.b1 >= 100 ) 
  1415.       {
  1416.         leaderbox = mem [(long) p + 1 ] .hh .v.RH ; 
  1417.         if ( mem [(long) leaderbox ] .hh.b0 == 2 ) 
  1418.         {
  1419.           rulewd = mem [(long) leaderbox + 1 ] .cint ; 
  1420.           ruledp = 0 ; 
  1421.           goto lab14 ; 
  1422.         } 
  1423.         leaderht = mem [(long) leaderbox + 3 ] .cint + mem [(long) leaderbox + 2 ] 
  1424.         .cint ; 
  1425.         if ( ( leaderht > 0 ) && ( ruleht > 0 ) ) 
  1426.         {
  1427.           ruleht = ruleht + 10 ; 
  1428.           edge = curv + ruleht ; 
  1429.           lx = 0 ; 
  1430.           if ( mem [(long) p ] .hh.b1 == 100 ) 
  1431.           {
  1432.         savev = curv ; 
  1433.         curv = topedge + leaderht * ( ( curv - topedge ) / leaderht ) 
  1434.         ; 
  1435.         if ( curv < savev ) 
  1436.         curv = curv + leaderht ; 
  1437.           } 
  1438.           else { 
  1439.         lq = ruleht / leaderht ; 
  1440.         lr = ruleht % leaderht ; 
  1441.         if ( mem [(long) p ] .hh.b1 == 101 ) 
  1442.         curv = curv + ( lr / 2 ) ; 
  1443.         else { 
  1444.           lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ; 
  1445.           curv = curv + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ; 
  1446.         } 
  1447.           } 
  1448.           while ( curv + leaderht <= edge ) { 
  1449.         curh = leftedge + mem [(long) leaderbox + 4 ] .cint ; 
  1450.         if ( curh != dvih ) 
  1451.         {
  1452.           movement ( curh - dvih , 143 ) ; 
  1453.           dvih = curh ; 
  1454.         } 
  1455.         saveh = dvih ; 
  1456.         curv = curv + mem [(long) leaderbox + 3 ] .cint ; 
  1457.         if ( curv != dviv ) 
  1458.         {
  1459.           movement ( curv - dviv , 157 ) ; 
  1460.           dviv = curv ; 
  1461.         } 
  1462.         savev = dviv ; 
  1463.         tempptr = leaderbox ; 
  1464.         outerdoingle = doingleaders ; 
  1465.         doingleaders = true ; 
  1466.         if ( mem [(long) leaderbox ] .hh.b0 == 1 ) 
  1467.         vlistout () ; 
  1468.         else hlistout () ; 
  1469.         doingleaders = outerdoingle ; 
  1470.         dviv = savev ; 
  1471.         dvih = saveh ; 
  1472.         curh = saveh ; 
  1473.         curv = savev - mem [(long) leaderbox + 3 ] .cint + leaderht + lx ; 
  1474.           } 
  1475.           curv = edge - 10 ; 
  1476.           goto lab15 ; 
  1477.         } 
  1478.       } 
  1479.       goto lab13 ; 
  1480.     } 
  1481.     break ; 
  1482.       case 11 : 
  1483.     curv = curv + mem [(long) p + 1 ] .cint ; 
  1484.     break ; 
  1485.       default : 
  1486.  
  1487.     break ; 
  1488.       } 
  1489.       goto lab15 ; 
  1490.       lab14: if ( ( rulewd == - 1073741824 ) ) 
  1491.       rulewd = mem [(long) thisbox + 1 ] .cint ; 
  1492.       ruleht = ruleht + ruledp ; 
  1493.       curv = curv + ruleht ; 
  1494.       if ( ( ruleht > 0 ) && ( rulewd > 0 ) ) 
  1495.       {
  1496.     if ( curh != dvih ) 
  1497.     {
  1498.       movement ( curh - dvih , 143 ) ; 
  1499.       dvih = curh ; 
  1500.     } 
  1501.     if ( curv != dviv ) 
  1502.     {
  1503.       movement ( curv - dviv , 157 ) ; 
  1504.       dviv = curv ; 
  1505.     } 
  1506.     {
  1507.       dvibuf [ dviptr ] = 137 ; 
  1508.       incr ( dviptr ) ; 
  1509.       if ( dviptr == dvilimit ) 
  1510.       dviswap () ; 
  1511.     } 
  1512.     dvifour ( ruleht ) ; 
  1513.     dvifour ( rulewd ) ; 
  1514.       } 
  1515.       goto lab15 ; 
  1516.       lab13: curv = curv + ruleht ; 
  1517.     } 
  1518.     lab15: p = mem [(long) p ] .hh .v.RH ; 
  1519.   } 
  1520.   prunemovemen ( saveloc ) ; 
  1521.   if ( curs > 0 ) 
  1522.   dvipop ( saveloc ) ; 
  1523.   decr ( curs ) ; 
  1524. zshipout ( p ) 
  1525. halfword p ; 
  1526. {/* 30 */ r_shipout 
  1527.   integer pageloc ; 
  1528.   quarterword j, k ; 
  1529.   poolpointer s ; 
  1530.   quarterword oldsetting ; 
  1531.   if ( eqtb [ 5301 ] .cint > 0 ) 
  1532.   {
  1533.     printnl ( 206 ) ; 
  1534.     println () ; 
  1535.     print ( 682 ) ; 
  1536.   } 
  1537.   if ( termoffset > maxprintline - 9 ) 
  1538.   println () ; 
  1539.   else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) ) 
  1540.   printchar ( 32 ) ; 
  1541.   printchar ( 91 ) ; 
  1542.   j = 9 ; 
  1543.   while ( ( eqtb [ 5317 + j ] .cint == 0 ) && ( j > 0 ) ) decr ( j ) ; 
  1544.   for ( k = 0 ; k <= j ; k ++ ) 
  1545.   {
  1546.     printint ( eqtb [ 5317 + k ] .cint ) ; 
  1547.     if ( k < j ) 
  1548.     printchar ( 46 ) ; 
  1549.   } 
  1550.   termflush ( output ) ; 
  1551.   if ( eqtb [ 5301 ] .cint > 0 ) 
  1552.   {
  1553.     printchar ( 93 ) ; 
  1554.     begindiagnos () ; 
  1555.     showbox ( p ) ; 
  1556.     enddiagnosti ( true ) ; 
  1557.   } 
  1558.   if ( ( mem [(long) p + 3 ] .cint > 1073741823 ) || ( mem [(long) p + 2 ] .cint > 
  1559.   1073741823 ) || ( mem [(long) p + 3 ] .cint + mem [(long) p + 2 ] .cint + eqtb [ 5720 ] 
  1560.   .cint > 1073741823 ) || ( mem [(long) p + 1 ] .cint + eqtb [ 5719 ] .cint > 
  1561.   1073741823 ) ) 
  1562.   {
  1563.     {
  1564.       if ( interaction == 3 ) 
  1565.       wakeuptermin () ; 
  1566.       printnl ( 133 ) ; 
  1567.       print ( 686 ) ; 
  1568.     } 
  1569.     {
  1570.       helpptr = 2 ; 
  1571.       helpline [ 1 ] = 687 ; 
  1572.       helpline [ 0 ] = 688 ; 
  1573.     } 
  1574.     error () ; 
  1575.     if ( eqtb [ 5301 ] .cint <= 0 ) 
  1576.     {
  1577.       begindiagnos () ; 
  1578.       printnl ( 689 ) ; 
  1579.       showbox ( p ) ; 
  1580.       enddiagnosti ( true ) ; 
  1581.     } 
  1582.     goto lab30 ; 
  1583.   } 
  1584.   if ( mem [(long) p + 3 ] .cint + mem [(long) p + 2 ] .cint + eqtb [ 5720 ] .cint > maxv 
  1585.   ) 
  1586.   maxv = mem [(long) p + 3 ] .cint + mem [(long) p + 2 ] .cint + eqtb [ 5720 ] .cint ; 
  1587.   if ( mem [(long) p + 1 ] .cint + eqtb [ 5719 ] .cint > maxh ) 
  1588.   maxh = mem [(long) p + 1 ] .cint + eqtb [ 5719 ] .cint ; 
  1589.   dvih = 0 ; 
  1590.   dviv = 0 ; 
  1591.   curh = eqtb [ 5719 ] .cint ; 
  1592.   dvif = 0 ; 
  1593.   if ( outputfilena == 0 ) 
  1594.   {
  1595.     if ( jobname == 0 ) 
  1596.     openlogfile () ; 
  1597.     packjobname ( 647 ) ; 
  1598.     while ( ! bopenout ( dvifile ) ) promptfilena ( 648 , 647 ) ; 
  1599.     outputfilena = bmakenamestr ( dvifile ) ; 
  1600.   } 
  1601.   if ( totalpages == 0 ) 
  1602.   {
  1603.     {
  1604.       dvibuf [ dviptr ] = 247 ; 
  1605.       incr ( dviptr ) ; 
  1606.       if ( dviptr == dvilimit ) 
  1607.       dviswap () ; 
  1608.     } 
  1609.     {
  1610.       dvibuf [ dviptr ] = 2 ; 
  1611.       incr ( dviptr ) ; 
  1612.       if ( dviptr == dvilimit ) 
  1613.       dviswap () ; 
  1614.     } 
  1615.     dvifour ( 25400000 ) ; 
  1616.     dvifour ( 473628672 ) ; 
  1617.     preparemag () ; 
  1618.     dvifour ( eqtb [ 5284 ] .cint ) ; 
  1619.     oldsetting = selector ; 
  1620.     selector = 21 ; 
  1621.     print ( 680 ) ; 
  1622.     printint ( eqtb [ 5290 ] .cint ) ; 
  1623.     printchar ( 46 ) ; 
  1624.     printtwo ( eqtb [ 5289 ] .cint ) ; 
  1625.     printchar ( 46 ) ; 
  1626.     printtwo ( eqtb [ 5288 ] .cint ) ; 
  1627.     printchar ( 58 ) ; 
  1628.     printtwo ( eqtb [ 5287 ] .cint / 60 ) ; 
  1629.     printtwo ( eqtb [ 5287 ] .cint % 60 ) ; 
  1630.     selector = oldsetting ; 
  1631.     {
  1632.       dvibuf [ dviptr ] = ( poolptr - strstart [ strptr ] ) ; 
  1633.       incr ( dviptr ) ; 
  1634.       if ( dviptr == dvilimit ) 
  1635.       dviswap () ; 
  1636.     } 
  1637.     for ( s = strstart [ strptr ] ; s <= poolptr - 1 ; s ++ ) 
  1638.     {
  1639.       dvibuf [ dviptr ] = strpool [ s ] ; 
  1640.       incr ( dviptr ) ; 
  1641.       if ( dviptr == dvilimit ) 
  1642.       dviswap () ; 
  1643.     } 
  1644.     poolptr = strstart [ strptr ] ; 
  1645.   } 
  1646.   pageloc = dvioffset + dviptr ; 
  1647.   {
  1648.     dvibuf [ dviptr ] = 139 ; 
  1649.     incr ( dviptr ) ; 
  1650.     if ( dviptr == dvilimit ) 
  1651.     dviswap () ; 
  1652.   } 
  1653.   for ( k = 0 ; k <= 9 ; k ++ ) 
  1654.   dvifour ( eqtb [ 5317 + k ] .cint ) ; 
  1655.   dvifour ( lastbop ) ; 
  1656.   lastbop = pageloc ; 
  1657.   curv = mem [(long) p + 3 ] .cint + eqtb [ 5720 ] .cint ; 
  1658.   tempptr = p ; 
  1659.   if ( mem [(long) p ] .hh.b0 == 1 ) 
  1660.   vlistout () ; 
  1661.   else hlistout () ; 
  1662.   {
  1663.     dvibuf [ dviptr ] = 140 ; 
  1664.     incr ( dviptr ) ; 
  1665.     if ( dviptr == dvilimit ) 
  1666.     dviswap () ; 
  1667.   } 
  1668.   incr ( totalpages ) ; 
  1669.   curs = - 1 ; 
  1670.   lab30: ; 
  1671.   if ( eqtb [ 5301 ] .cint <= 0 ) 
  1672.   printchar ( 93 ) ; 
  1673.   deadcycles = 0 ; 
  1674.   termflush ( output ) ; 
  1675.  
  1676. #ifdef STAT
  1677.   if ( eqtb [ 5298 ] .cint > 1 ) 
  1678.   {
  1679.     printnl ( 683 ) ; 
  1680.     printint ( varused ) ; 
  1681.     printchar ( 38 ) ; 
  1682.     printint ( dynused ) ; 
  1683.     printchar ( 59 ) ; 
  1684.   } 
  1685. #endif /* STAT */
  1686.   flushnodelis ( p ) ; 
  1687.  
  1688. #ifdef STAT
  1689.   if ( eqtb [ 5298 ] .cint > 1 ) 
  1690.   {
  1691.     print ( 684 ) ; 
  1692.     printint ( varused ) ; 
  1693.     printchar ( 38 ) ; 
  1694.     printint ( dynused ) ; 
  1695.     print ( 685 ) ; 
  1696.     printint ( himemmin - lomemmax - 1 ) ; 
  1697.     println () ; 
  1698.   } 
  1699. #endif /* STAT */
  1700. scanspec () { /* 40 */ r_scanspec 
  1701.   if ( scankeyword ( 695 ) ) 
  1702.   savestack [ saveptr + 0 ] .cint = 0 ; 
  1703.   else if ( scankeyword ( 696 ) ) 
  1704.   savestack [ saveptr + 0 ] .cint = 1 ; 
  1705.   else { 
  1706.     savestack [ saveptr + 0 ] .cint = 1 ; 
  1707.     savestack [ saveptr + 1 ] .cint = 0 ; 
  1708.     goto lab40 ; 
  1709.   } 
  1710.   scandimen ( false , false , false ) ; 
  1711.   savestack [ saveptr + 1 ] .cint = curval ; 
  1712.   lab40: saveptr = saveptr + 2 ; 
  1713.   scanleftbrac () ; 
  1714. halfword zhpack ( p , w , m ) 
  1715. halfword p ; 
  1716. scaled w ; 
  1717. smallnumber m ; 
  1718. {/* 21 50 10 */ register halfword Result; r_hpack 
  1719.   halfword r ; 
  1720.   halfword q ; 
  1721.   scaled h, d, x ; 
  1722.   scaled s ; 
  1723.   halfword g ; 
  1724.   glueord o ; 
  1725.   internalfont f ; 
  1726.   fourquarters i ; 
  1727.   eightbits hd ; 
  1728.   integer b ; 
  1729.   r = getnode ( 7 ) ; 
  1730.   mem [(long) r ] .hh.b0 = 0 ; 
  1731.   mem [(long) r ] .hh.b1 = 0 ; 
  1732.   mem [(long) r + 4 ] .cint = 0 ; 
  1733.   q = r + 5 ; 
  1734.   mem [(long) q ] .hh .v.RH = p ; 
  1735.   h = 0 ; 
  1736.   d = 0 ; 
  1737.   x = 0 ; 
  1738.   totalstretch [ 0 ] = 0 ; 
  1739.   totalshrink [ 0 ] = 0 ; 
  1740.   totalstretch [ 1 ] = 0 ; 
  1741.   totalshrink [ 1 ] = 0 ; 
  1742.   totalstretch [ 2 ] = 0 ; 
  1743.   totalshrink [ 2 ] = 0 ; 
  1744.   totalstretch [ 3 ] = 0 ; 
  1745.   totalshrink [ 3 ] = 0 ; 
  1746.   while ( p != 0 ) { 
  1747.     lab21: while ( ( p >= himemmin ) ) { 
  1748.       f = mem [(long) p ] .hh.b0 ; 
  1749.       i = fontinfo [ charbase [ f ] + mem [(long) p ] .hh.b1 ] .qqqq ; 
  1750.       hd = i .b1 ; 
  1751.       x = x + fontinfo [ widthbase [ f ] + i .b0 ] .cint ; 
  1752.       s = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ; 
  1753.       if ( s > h ) 
  1754.       h = s ; 
  1755.       s = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  1756.       if ( s > d ) 
  1757.       d = s ; 
  1758.       p = mem [(long) p ] .hh .v.RH ; 
  1759.     } 
  1760.     if ( p != 0 ) 
  1761.     {
  1762.       switch ( mem [(long) p ] .hh.b0 ) 
  1763.       {case 0 : 
  1764.       case 1 : 
  1765.       case 2 : 
  1766.       case 13 : 
  1767.     {
  1768.       x = x + mem [(long) p + 1 ] .cint ; 
  1769.       if ( mem [(long) p ] .hh.b0 >= 2 ) 
  1770.       s = 0 ; 
  1771.       else s = mem [(long) p + 4 ] .cint ; 
  1772.       if ( mem [(long) p + 3 ] .cint - s > h ) 
  1773.       h = mem [(long) p + 3 ] .cint - s ; 
  1774.       if ( mem [(long) p + 2 ] .cint + s > d ) 
  1775.       d = mem [(long) p + 2 ] .cint + s ; 
  1776.     } 
  1777.     break ; 
  1778.       case 3 : 
  1779.       case 4 : 
  1780.       case 5 : 
  1781.     if ( adjusttail != 0 ) 
  1782.     {
  1783.       while ( mem [(long) q ] .hh .v.RH != p ) q = mem [(long) q ] .hh .v.RH ; 
  1784.       if ( mem [(long) p ] .hh.b0 == 5 ) 
  1785.       {
  1786.         mem [(long) adjusttail ] .hh .v.RH = mem [(long) p + 1 ] .cint ; 
  1787.         while ( mem [(long) adjusttail ] .hh .v.RH != 0 ) adjusttail = mem [(long) 
  1788.         adjusttail ] .hh .v.RH ; 
  1789.         p = mem [(long) p ] .hh .v.RH ; 
  1790.         freenode ( mem [(long) q ] .hh .v.RH , 2 ) ; 
  1791.       } 
  1792.       else { 
  1793.         mem [(long) adjusttail ] .hh .v.RH = p ; 
  1794.         adjusttail = p ; 
  1795.         p = mem [(long) p ] .hh .v.RH ; 
  1796.       } 
  1797.       mem [(long) q ] .hh .v.RH = p ; 
  1798.       p = q ; 
  1799.     } 
  1800.     break ; 
  1801.       case 8 : 
  1802.  
  1803.     break ; 
  1804.       case 10 : 
  1805.     {
  1806.       g = mem [(long) p + 1 ] .hh .v.LH ; 
  1807.       x = x + mem [(long) g + 1 ] .cint ; 
  1808.       o = mem [(long) g ] .hh.b0 ; 
  1809.       totalstretch [ o ] = totalstretch [ o ] + mem [(long) g + 2 ] .cint ; 
  1810.       o = mem [(long) g ] .hh.b1 ; 
  1811.       totalshrink [ o ] = totalshrink [ o ] + mem [(long) g + 3 ] .cint ; 
  1812.       if ( mem [(long) p ] .hh.b1 >= 100 ) 
  1813.       {
  1814.         g = mem [(long) p + 1 ] .hh .v.RH ; 
  1815.         if ( mem [(long) g + 3 ] .cint > h ) 
  1816.         h = mem [(long) g + 3 ] .cint ; 
  1817.         if ( mem [(long) g + 2 ] .cint > d ) 
  1818.         d = mem [(long) g + 2 ] .cint ; 
  1819.       } 
  1820.     } 
  1821.     break ; 
  1822.       case 11 : 
  1823.       case 9 : 
  1824.     x = x + mem [(long) p + 1 ] .cint ; 
  1825.     break ; 
  1826.       case 6 : 
  1827.     {
  1828.       mem [(long) memtop - 12 ] = mem [(long) p + 1 ] ; 
  1829.       mem [(long) memtop - 12 ] .hh .v.RH = mem [(long) p ] .hh .v.RH ; 
  1830.       p = memtop - 12 ; 
  1831.       goto lab21 ; 
  1832.     } 
  1833.     break ; 
  1834.       default : 
  1835.  
  1836.     break ; 
  1837.       } 
  1838.       p = mem [(long) p ] .hh .v.RH ; 
  1839.     } 
  1840.   } 
  1841.   if ( adjusttail != 0 ) 
  1842.   mem [(long) adjusttail ] .hh .v.RH = 0 ; 
  1843.   mem [(long) r + 3 ] .cint = h ; 
  1844.   mem [(long) r + 2 ] .cint = d ; 
  1845.   if ( m == 1 ) 
  1846.   w = x + w ; 
  1847.   mem [(long) r + 1 ] .cint = w ; 
  1848.   x = w - x ; 
  1849.   if ( x == 0 ) 
  1850.   {
  1851.     mem [(long) r + 5 ] .hh.b0 = 0 ; 
  1852.     mem [(long) r + 5 ] .hh.b1 = 0 ; 
  1853.     mem [(long) r + 6 ] .gr = 0.0 ; 
  1854.     goto lab10 ; 
  1855.   } 
  1856.   else if ( x > 0 ) 
  1857.   {
  1858.     if ( totalstretch [ 3 ] != 0 ) 
  1859.     o = 3 ; 
  1860.     else if ( totalstretch [ 2 ] != 0 ) 
  1861.     o = 2 ; 
  1862.     else if ( totalstretch [ 1 ] != 0 ) 
  1863.     o = 1 ; 
  1864.     else o = 0 ; 
  1865.     mem [(long) r + 5 ] .hh.b1 = o ; 
  1866.     mem [(long) r + 5 ] .hh.b0 = 1 ; 
  1867.     if ( totalstretch [ o ] != 0 ) 
  1868.     mem [(long) r + 6 ] .gr = x / ((double) totalstretch [ o ] ) ; 
  1869.     else { 
  1870.       mem [(long) r + 5 ] .hh.b0 = 0 ; 
  1871.       mem [(long) r + 6 ] .gr = 0.0 ; 
  1872.     } 
  1873.     if ( ( eqtb [ 5293 ] .cint < 10000 ) && ( o == 0 ) && ( mem [(long) r + 5 ] .hh 
  1874.     .v.RH != 0 ) ) 
  1875.     {
  1876.       b = badness ( x , totalstretch [ 0 ] ) ; 
  1877.       if ( b > eqtb [ 5293 ] .cint ) 
  1878.       {
  1879.     println () ; 
  1880.     if ( b > 100 ) 
  1881.     printnl ( 697 ) ; 
  1882.     else printnl ( 698 ) ; 
  1883.     print ( 699 ) ; 
  1884.     printint ( b ) ; 
  1885.     goto lab50 ; 
  1886.       } 
  1887.     } 
  1888.     goto lab10 ; 
  1889.   } 
  1890.   else { 
  1891.     if ( totalshrink [ 3 ] != 0 ) 
  1892.     o = 3 ; 
  1893.     else if ( totalshrink [ 2 ] != 0 ) 
  1894.     o = 2 ; 
  1895.     else if ( totalshrink [ 1 ] != 0 ) 
  1896.     o = 1 ; 
  1897.     else o = 0 ; 
  1898.     mem [(long) r + 5 ] .hh.b1 = o ; 
  1899.     mem [(long) r + 5 ] .hh.b0 = 2 ; 
  1900.     if ( totalshrink [ o ] != 0 ) 
  1901.     mem [(long) r + 6 ] .gr = ( - x ) / ((double) totalshrink [ o ] ) ; 
  1902.     else { 
  1903.       mem [(long) r + 5 ] .hh.b0 = 0 ; 
  1904.       mem [(long) r + 6 ] .gr = 0.0 ; 
  1905.     } 
  1906.     if ( ( totalshrink [ o ] < - x ) && ( o == 0 ) && ( mem [(long) r + 5 ] .hh 
  1907.     .v.RH != 0 ) ) 
  1908.     {
  1909.       mem [(long) r + 6 ] .gr = 1.0 ; 
  1910.       if ( ( - x - totalshrink [ 0 ] > eqtb [ 5709 ] .cint ) || ( eqtb [ 5293 
  1911.       ] .cint < 100 ) ) 
  1912.       {
  1913.     if ( ( eqtb [ 5717 ] .cint > 0 ) && ( - x - totalshrink [ 0 ] > eqtb [ 
  1914.     5709 ] .cint ) ) 
  1915.     {
  1916.       while ( mem [(long) q ] .hh .v.RH != 0 ) q = mem [(long) q ] .hh .v.RH ; 
  1917.       mem [(long) q ] .hh .v.RH = newrule () ; 
  1918.       mem [(long) mem [(long) q ] .hh .v.RH + 1 ] .cint = eqtb [ 5717 ] .cint ; 
  1919.     } 
  1920.     println () ; 
  1921.     printnl ( 705 ) ; 
  1922.     printscaled ( - x - totalshrink [ 0 ] ) ; 
  1923.     print ( 706 ) ; 
  1924.     goto lab50 ; 
  1925.       } 
  1926.     } 
  1927.     else if ( ( eqtb [ 5293 ] .cint < 100 ) && ( o == 0 ) && ( mem [(long) r + 5 ] 
  1928.     .hh .v.RH != 0 ) ) 
  1929.     {
  1930.       b = badness ( - x , totalshrink [ 0 ] ) ; 
  1931.       if ( b > eqtb [ 5293 ] .cint ) 
  1932.       {
  1933.     println () ; 
  1934.     printnl ( 707 ) ; 
  1935.     printint ( b ) ; 
  1936.     goto lab50 ; 
  1937.       } 
  1938.     } 
  1939.     goto lab10 ; 
  1940.   } 
  1941.   lab50: if ( outputactive ) 
  1942.   print ( 700 ) ; 
  1943.   else { 
  1944.     if ( packbeginlin != 0 ) 
  1945.     {
  1946.       if ( packbeginlin > 0 ) 
  1947.       print ( 701 ) ; 
  1948.       else print ( 702 ) ; 
  1949.       printint ( abs ( packbeginlin ) ) ; 
  1950.       print ( 703 ) ; 
  1951.     } 
  1952.     else print ( 704 ) ; 
  1953.     printint ( line ) ; 
  1954.   } 
  1955.   println () ; 
  1956.   fontinshortd = 0 ; 
  1957.   shortdisplay ( mem [(long) r + 5 ] .hh .v.RH ) ; 
  1958.   println () ; 
  1959.   begindiagnos () ; 
  1960.   showbox ( r ) ; 
  1961.   enddiagnosti ( true ) ; 
  1962.   lab10: Result = r ; 
  1963.   return(Result) ; 
  1964. halfword zvpackage ( p , h , m , l ) 
  1965. halfword p ; 
  1966. scaled h ; 
  1967. smallnumber m ; 
  1968. scaled l ; 
  1969. {/* 50 10 */ register halfword Result; r_vpackage 
  1970.   halfword r ; 
  1971.   scaled w, d, x ; 
  1972.   scaled s ; 
  1973.   halfword g ; 
  1974.   glueord o ; 
  1975.   integer b ; 
  1976.   r = getnode ( 7 ) ; 
  1977.   mem [(long) r ] .hh.b0 = 1 ; 
  1978.   mem [(long) r ] .hh.b1 = 0 ; 
  1979.   mem [(long) r + 4 ] .cint = 0 ; 
  1980.   mem [(long) r + 5 ] .hh .v.RH = p ; 
  1981.   w = 0 ; 
  1982.   d = 0 ; 
  1983.   x = 0 ; 
  1984.   totalstretch [ 0 ] = 0 ; 
  1985.   totalshrink [ 0 ] = 0 ; 
  1986.   totalstretch [ 1 ] = 0 ; 
  1987.   totalshrink [ 1 ] = 0 ; 
  1988.   totalstretch [ 2 ] = 0 ; 
  1989.   totalshrink [ 2 ] = 0 ; 
  1990.   totalstretch [ 3 ] = 0 ; 
  1991.   totalshrink [ 3 ] = 0 ; 
  1992.   while ( p != 0 ) { 
  1993.     if ( ( p >= himemmin ) ) 
  1994.     confusion ( 708 ) ; 
  1995.     else switch ( mem [(long) p ] .hh.b0 ) 
  1996.     {case 0 : 
  1997.     case 1 : 
  1998.     case 2 : 
  1999.     case 13 : 
  2000.       {
  2001.     x = x + d + mem [(long) p + 3 ] .cint ; 
  2002.     d = mem [(long) p + 2 ] .cint ; 
  2003.     if ( mem [(long) p ] .hh.b0 >= 2 ) 
  2004.     s = 0 ; 
  2005.     else s = mem [(long) p + 4 ] .cint ; 
  2006.     if ( mem [(long) p + 1 ] .cint + s > w ) 
  2007.     w = mem [(long) p + 1 ] .cint + s ; 
  2008.       } 
  2009.       break ; 
  2010.     case 8 : 
  2011.       ; 
  2012.       break ; 
  2013.     case 10 : 
  2014.       {
  2015.     x = x + d ; 
  2016.     d = 0 ; 
  2017.     g = mem [(long) p + 1 ] .hh .v.LH ; 
  2018.     x = x + mem [(long) g + 1 ] .cint ; 
  2019.     o = mem [(long) g ] .hh.b0 ; 
  2020.     totalstretch [ o ] = totalstretch [ o ] + mem [(long) g + 2 ] .cint ; 
  2021.     o = mem [(long) g ] .hh.b1 ; 
  2022.     totalshrink [ o ] = totalshrink [ o ] + mem [(long) g + 3 ] .cint ; 
  2023.     if ( mem [(long) p ] .hh.b1 >= 100 ) 
  2024.     {
  2025.       g = mem [(long) p + 1 ] .hh .v.RH ; 
  2026.       if ( mem [(long) g + 1 ] .cint > w ) 
  2027.       w = mem [(long) g + 1 ] .cint ; 
  2028.     } 
  2029.       } 
  2030.       break ; 
  2031.     case 11 : 
  2032.       {
  2033.     x = x + d + mem [(long) p + 1 ] .cint ; 
  2034.     d = 0 ; 
  2035.       } 
  2036.       break ; 
  2037.     default : 
  2038.       ; 
  2039.       break ; 
  2040.     } 
  2041.     p = mem [(long) p ] .hh .v.RH ; 
  2042.   } 
  2043.   mem [(long) r + 1 ] .cint = w ; 
  2044.   if ( d > l ) 
  2045.   {
  2046.     x = x + d - l ; 
  2047.     mem [(long) r + 2 ] .cint = l ; 
  2048.   } 
  2049.   else mem [(long) r + 2 ] .cint = d ; 
  2050.   if ( m == 1 ) 
  2051.   h = x + h ; 
  2052.   mem [(long) r + 3 ] .cint = h ; 
  2053.   x = h - x ; 
  2054.   if ( x == 0 ) 
  2055.   {
  2056.     mem [(long) r + 5 ] .hh.b0 = 0 ; 
  2057.     mem [(long) r + 5 ] .hh.b1 = 0 ; 
  2058.     mem [(long) r + 6 ] .gr = 0.0 ; 
  2059.     goto lab10 ; 
  2060.   } 
  2061.   else if ( x > 0 ) 
  2062.   {
  2063.     if ( totalstretch [ 3 ] != 0 ) 
  2064.     o = 3 ; 
  2065.     else if ( totalstretch [ 2 ] != 0 ) 
  2066.     o = 2 ; 
  2067.     else if ( totalstretch [ 1 ] != 0 ) 
  2068.     o = 1 ; 
  2069.     else o = 0 ; 
  2070.     mem [(long) r + 5 ] .hh.b1 = o ; 
  2071.     mem [(long) r + 5 ] .hh.b0 = 1 ; 
  2072.     if ( totalstretch [ o ] != 0 ) 
  2073.     mem [(long) r + 6 ] .gr = x / ((double) totalstretch [ o ] ) ; 
  2074.     else { 
  2075.       mem [(long) r + 5 ] .hh.b0 = 0 ; 
  2076.       mem [(long) r + 6 ] .gr = 0.0 ; 
  2077.     } 
  2078.     if ( ( eqtb [ 5294 ] .cint < 10000 ) && ( o == 0 ) && ( mem [(long) r + 5 ] .hh 
  2079.     .v.RH != 0 ) ) 
  2080.     {
  2081.       b = badness ( x , totalstretch [ 0 ] ) ; 
  2082.       if ( b > eqtb [ 5294 ] .cint ) 
  2083.       {
  2084.     println () ; 
  2085.     if ( b > 100 ) 
  2086.     printnl ( 697 ) ; 
  2087.     else printnl ( 698 ) ; 
  2088.     print ( 709 ) ; 
  2089.     printint ( b ) ; 
  2090.     goto lab50 ; 
  2091.       } 
  2092.     } 
  2093.     goto lab10 ; 
  2094.   } 
  2095.   else { 
  2096.     if ( totalshrink [ 3 ] != 0 ) 
  2097.     o = 3 ; 
  2098.     else if ( totalshrink [ 2 ] != 0 ) 
  2099.     o = 2 ; 
  2100.     else if ( totalshrink [ 1 ] != 0 ) 
  2101.     o = 1 ; 
  2102.     else o = 0 ; 
  2103.     mem [(long) r + 5 ] .hh.b1 = o ; 
  2104.     mem [(long) r + 5 ] .hh.b0 = 2 ; 
  2105.     if ( totalshrink [ o ] != 0 ) 
  2106.     mem [(long) r + 6 ] .gr = ( - x ) / ((double) totalshrink [ o ] ) ; 
  2107.     else { 
  2108.       mem [(long) r + 5 ] .hh.b0 = 0 ; 
  2109.       mem [(long) r + 6 ] .gr = 0.0 ; 
  2110.     } 
  2111.     if ( ( totalshrink [ o ] < - x ) && ( o == 0 ) && ( mem [(long) r + 5 ] .hh 
  2112.     .v.RH != 0 ) ) 
  2113.     {
  2114.       mem [(long) r + 6 ] .gr = 1.0 ; 
  2115.       if ( ( - x - totalshrink [ 0 ] > eqtb [ 5710 ] .cint ) || ( eqtb [ 5294 
  2116.       ] .cint < 100 ) ) 
  2117.       {
  2118.     println () ; 
  2119.     printnl ( 710 ) ; 
  2120.     printscaled ( - x - totalshrink [ 0 ] ) ; 
  2121.     print ( 711 ) ; 
  2122.     goto lab50 ; 
  2123.       } 
  2124.     } 
  2125.     else if ( ( eqtb [ 5294 ] .cint < 100 ) && ( o == 0 ) && ( mem [(long) r + 5 ] 
  2126.     .hh .v.RH != 0 ) ) 
  2127.     {
  2128.       b = badness ( - x , totalshrink [ 0 ] ) ; 
  2129.       if ( b > eqtb [ 5294 ] .cint ) 
  2130.       {
  2131.     println () ; 
  2132.     printnl ( 712 ) ; 
  2133.     printint ( b ) ; 
  2134.     goto lab50 ; 
  2135.       } 
  2136.     } 
  2137.     goto lab10 ; 
  2138.   } 
  2139.   lab50: if ( outputactive ) 
  2140.   print ( 700 ) ; 
  2141.   else { 
  2142.     if ( packbeginlin != 0 ) 
  2143.     {
  2144.       print ( 702 ) ; 
  2145.       printint ( abs ( packbeginlin ) ) ; 
  2146.       print ( 703 ) ; 
  2147.     } 
  2148.     else print ( 704 ) ; 
  2149.     printint ( line ) ; 
  2150.     println () ; 
  2151.   } 
  2152.   begindiagnos () ; 
  2153.   showbox ( r ) ; 
  2154.   enddiagnosti ( true ) ; 
  2155.   lab10: Result = r ; 
  2156.   return(Result) ; 
  2157.