www.pudn.com > ASYNC13.rar > WAITQUIE.C


/* A module of ASYNCx.LIB version 1.10 */ 
 
#include  
#include "asyncdef.h" 
 
/* 
** Wait for between t and t+1 18ths of a second to elapse without any 
** characters arriving at port p. If max 18ths of a second elapse before 
** a gap in the incomming data of t 18ths of a second has been found, a 
** value of -1 is returned. If the gap is found within max 18ths of a 
** second, a value of 0 is returned. If mode is set to 0, any characters 
** that do arrive during the execution of this routine are discarded and 
** the input buffer for the port p is empty when this routine returns. 
** If mode is set to 1, characters arriving at the port are detected but 
** not discarded. Be careful of buffer overflow if use mode 1. If the 
** input buffer overflows, the least recent data will be lost and the 
** newest data will be retained. 
*/ 
int a_waitquiet(ASYNC *p,int t,int max,int mode) 
{unsigned long t0,t1,far *t2; 
 int count0; 
 if (!p) 
   return -1; 
 /* 
 ** *t2 is the current time and is incrimented by the operating system 
 ** 18.21 times per second. 
 */ 
 t2=(unsigned long far *)MK_FP(0x40,0x6c); 
 /* 
 ** t0 is the initial time. t1 is the time at which the last character 
 ** was received. (Assume that a character was just received.) 
 */ 
 t0=t1=*t2; 
 if (mode==0) 
   while ((*t2)-t1<=(unsigned long)t && (*t2)-t0<=(unsigned long)max) 
    {if (a_getc(p)!=-1) /* If another character has been received, */ 
       t1=*t2;          /* update t1.                              */ 
    } 
 else 
  {count0=a_icount(p);            /* count0 = # of chars in buffer   */ 
   while((*t2)-t1<=(unsigned long)t && (*t2)-t0<=(unsigned long)max) 
     if (a_icount(p)!=count0)     /* If more characters are received */ 
      {t1=*t2;                    /* update t1 and                   */ 
       count0=a_icount(p);        /* the character counter.          */ 
      } 
  } 
 if ((*t2)-t1>=(unsigned long)t) 
   return 0; 
 else 
   return -1; 
} /* end of int a_waitquiet(p,t,max,mode) */