#define EXTERN  extern
#include        "define.h"

gate0ts()   
   {
   int  i,end;
   float        offset,isave,qsave,oldiaccum,oldqaccum;
   volatile float junk;   

   if(++hitcount >= *Hits)
      {
      hitcount = 0;             /* reset dwell counter */
      
      end = *Pulsewidth;  /* .5 X number of samples in FIFO for gate0 */
      oldiaccum = *FIFO;
      oldqaccum = *FIFO;
      offset = (oldiaccum >= 0.0) ? ADOFFSET : -ADOFFSET;
      *(tsptr[1 - (*Flag & 1)] - 0) = oldiaccum - offset;
      *(tsptr[1 - (*Flag & 1)] - 1) = oldqaccum - offset;

      for(i=1; i<end; i++)
        {
        if(i&1) /* if odd */
           {
           *(tsptr[1 - (*Flag & 1)] - 2 * i - 0) = oldiaccum - (isave = *FIFO) - offset;
           *(tsptr[1 - (*Flag & 1)] - 2 * i - 1) = oldqaccum - (qsave = *FIFO) - offset;
           oldiaccum = isave;
           oldqaccum = qsave;
           }
        else  /* if even */
           {
           *(tsptr[1 - (*Flag & 1)] - 2 * i - 0) = (isave = *FIFO) - oldiaccum - offset;
           *(tsptr[1 - (*Flag & 1)] - 2 * i - 1) = (qsave = *FIFO) - oldqaccum - offset;
           oldiaccum = isave;
           oldqaccum = qsave;
           }
        }
      
      if(*FIFO != EOF)     LEDSET(EOFPROBLEM);
      else LEDSET(LED4);
      
      (*Flag)++;                /* swap buffer indicator */
      
      if(*Flag & 1) LEDSET(LED5);  else     LEDCLR(LED5);

      *PCINT = ASSERT;     /* generate a little low going pulse */
      *PCINT = DEASSERT;
      }
   else
      {
      end = 2 * *Pulsewidth;
      for(i=0; i<end; i++)    junk = *FIFO;
      junk = *FIFO;  /* eof */
      }
   }   
