Oups, I sent the version with the modifications applied (enrolling).
Here is the vanilla version (with reformating):

void
makemoves( scaled xx0 , scaled xx1 , scaled xx2 , scaled xx3 ,
        scaled yy0 , scaled yy1 , scaled yy2 , scaled yy3 , 
        smallnumber xicorr , smallnumber etacorr ) 
{/* 22 30 10 */ integer x1, x2, x3, m, r, y1, y2, y3, n, s, l  ; 
  integer q, t, u, x2a, x3a, y2a, y3a  ; 

  if ( ( xx3 < xx0 ) || ( yy3 < yy0 ) ) 
        confusion ( 109 ) ; 
  l = 16 ; 
  bisectptr = 0 ; 
  x1 = xx1 - xx0 ; 
  x2 = xx2 - xx1 ; 
  x3 = xx3 - xx2 ; 
  if ( xx0 >= xicorr ) 
        r = ( xx0 - xicorr ) % 65536L ; 
  else 
        r = 65535L - ( ( - (integer) xx0 + xicorr - 1 ) % 65536L ) ; 

  m = ( xx3 - xx0 + r ) / 65536L ; 
  y1 = yy1 - yy0 ; 
  y2 = yy2 - yy1 ; 
  y3 = yy3 - yy2 ; 
  if ( yy0 >= etacorr ) 
        s = ( yy0 - etacorr ) % 65536L ; 
  else 
        s = 65535L - ( ( - (integer) yy0 + etacorr - 1 ) % 65536L ) ; 
  n = ( yy3 - yy0 + s ) / 65536L ; 

  if ( ( xx3 - xx0 >= 268435456L ) || ( yy3 - yy0 >= 268435456L ) ) {
                x1 = half ( x1 + xicorr ) ; 
                x2 = half ( x2 + xicorr ) ; 
                x3 = half ( x3 + xicorr ) ; 
                r = half ( r + xicorr ) ; 
                y1 = half ( y1 + etacorr ) ; 
                y2 = half ( y2 + etacorr ) ; 
                y3 = half ( y3 + etacorr ) ; 
                s = half ( s + etacorr ) ; 
                l = 15 ; 
  } 

  while ( true ) {
    lab22:
        if ( m == 0 ) {
                while ( n > 0 ) {
                        incr ( moveptr ) ; 
                        move [ moveptr ] = 1 ; 
                        decr ( n ) ; 
                } 
        } else if ( n == 0 ) 
                move [ moveptr ] = move [ moveptr ] + m ; 
        else if ( m + n == 2 ) {
                        r = twotothe [ l ] - r ; 
                        s = twotothe [ l ] - s ; 
                        while ( l < 30 ) {
                                x3a = x3 ; 
                                x2a = half ( x2 + x3 + xicorr ) ; 
                                x2 = half ( x1 + x2 + xicorr ) ; 
                                x3 = half ( x2 + x2a + xicorr ) ; 
                                t = x1 + x2 + x3 ; 
                                r = r + r - xicorr ; 
                                y3a = y3 ; 
                                y2a = half ( y2 + y3 + etacorr ) ; 
                                y2 = half ( y1 + y2 + etacorr ) ; 
                                y3 = half ( y2 + y2a + etacorr ) ; 
                                u = y1 + y2 + y3 ; 
                                s = s + s - etacorr ; 
                                if ( t < r ) {
                                        if ( u < s ) {
                                          x1 = x3 ; 
                                          x2 = x2a ; 
                                          x3 = x3a ; 
                                          r = r - t ; 
                                          y1 = y3 ; 
                                          y2 = y2a ; 
                                          y3 = y3a ; 
                                          s = s - u ; 
                                        } 
                                } else {
                                          {
                                            incr ( moveptr ) ; 
                                            move [ moveptr ] = 2 ; 
                                          } 
                                          goto lab30 ; 
                                } else if ( u < s ) {
                                          {
                                            incr ( move [ moveptr ] ) ; 
                                            incr ( moveptr ) ; 
                                            move [ moveptr ] = 1 ; 
                                          } 
                                          goto lab30 ; 
                                } 
                                incr ( l ) ;
                        }  /* end while */
                        r = r - xicorr ; 
                        s = s - etacorr ; 
                        if ( abvscd ( x1 + x2 + x3 , s , y1 + y2 + y3 , r ) - 
xicorr >= 0 ) {
                                incr ( move [ moveptr ] ) ; 
                                incr ( moveptr ) ; 
                                move [ moveptr ] = 1 ; 
                        } else {
                                        incr ( moveptr ) ; 
                                        move [ moveptr ] = 2 ; 
                                } 
                        lab30: ; 
        } else {        /* The problem arises in this branch */
      incr ( l ) ;
      bisectstack [ bisectptr + 10 ] = l ; 
      bisectstack [ bisectptr + 2 ] = x3 ; 
      bisectstack [ bisectptr + 1 ] = half ( x2 + x3 + xicorr ) ; 
      x2 = half ( x1 + x2 + xicorr ) ; 
      x3 = half ( x2 + bisectstack [ bisectptr + 1 ] + xicorr ) ; 
      bisectstack [ bisectptr ] = x3 ; 
      r = r + r + xicorr ; 
      t = x1 + x2 + x3 + r ; 
      q = t / twotothe [ l ] ; 
      bisectstack [ bisectptr + 3 ] = t % twotothe [ l ] ; 
      bisectstack [ bisectptr + 4 ] = m - q ; 
      m = q ; 
      bisectstack [ bisectptr + 7 ] = y3 ; 
      bisectstack [ bisectptr + 6 ] = half ( y2 + y3 + etacorr ) ; 
      y2 = half ( y1 + y2 + etacorr ) ; 
      y3 = half ( y2 + bisectstack [ bisectptr + 6 ] + etacorr ) ; 
      bisectstack [ bisectptr + 5 ] = y3 ; 
      s = s + s + etacorr ; 
      u = y1 + y2 + y3 + s ; 
      q = u / twotothe [ l ] ; 
      bisectstack [ bisectptr + 8 ] = u % twotothe [ l ] ; 
      bisectstack [ bisectptr + 9 ] = n - q ; 
      n = q ; 
      bisectptr = bisectptr + 11 ; 
      goto lab22 ; 
    } 
    if ( bisectptr == 0 ) 
        goto lab10 ; 
    bisectptr = bisectptr - 11 ; 
    x1 = bisectstack [ bisectptr ] ; 
    x2 = bisectstack [ bisectptr + 1 ] ; 
    x3 = bisectstack [ bisectptr + 2 ] ; 
    r = bisectstack [ bisectptr + 3 ] ; 
    m = bisectstack [ bisectptr + 4 ] ; 
    y1 = bisectstack [ bisectptr + 5 ] ; 
    y2 = bisectstack [ bisectptr + 6 ] ; 
    y3 = bisectstack [ bisectptr + 7 ] ; 
    s = bisectstack [ bisectptr + 8 ] ; 
    n = bisectstack [ bisectptr + 9 ] ; 
    l = bisectstack [ bisectptr + 10 ] ; 
  } /* end true */
  lab10: ; 
} 
-- 
        Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
                      http://www.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C

Reply via email to