rem: *StartPointLeft = endpointL; *StartPointRight = endpointR;
add: *StartPointLeft = endpointL >> 16; *StartPointRight = endpointR >> 16;
context: AddLongsMono( ADDARGS ){  LONG    *src    = Src;  LONG    *dst    = *Dst;  Fixed64  offset = *Offset;  int      i;  LONG     startpointL, startpointR, endpointL = 0, endpointR = 0; // Make compiler happy  LONG     lastpointL, lastpointR;  lastpointL = lastpointR = 0;        // 0 doesn't affect the StopAtZero code  for( i = 0; i < Samples; i++)  {    if( offseti == FirstOffsetI ) {      startpointL = *StartPointLeft;      startpointR = *StartPointRight;    }    else    {      startpointL = src[ offseti * 2 + 0 - 2 ];      startpointR = src[ offseti * 2 + 1 - 2 ];    }    endpointL = src[ offseti * 2 + 0 ];    endpointR = src[ offseti * 2 + 1 ];    startpointL += (LONG) (((LONGLONG) (endpointL - startpointL) * offsetf ) >> 32);    startpointR += (LONG) (((LONGLONG) (endpointR - startpointR) * offsetf ) >> 32);    if( StopAtZero &&        ( ( lastpointL < 0 && startpointL >= 0 ) ||          ( lastpointR < 0 && startpointR >= 0 ) ||          ( lastpointL > 0 && startpointL <= 0 ) ||          ( lastpointR > 0 && startpointR <= 0 ) ) )    {      break;    }    lastpointL = startpointL;    lastpointR = startpointR;    *dst++ += (LONG) ( ( (LONGLONG) ScaleLeft * startpointL  ) >> 16 )      + (LONG) ( ( (LONGLONG) ScaleRight * startpointR ) >> 16 );    offset += Add;  }  *StartPointLeft = endpointL;  *StartPointRight = endpointR;  *Dst    = dst;  *Offset = offset;  return i;}