/*************************************************************************** Name : TIMEOUTS.C Comment : Various support functions Revision Log Num Date Name Description --- -------- ---------- ----------------------------------------------- 001 12/18/91 arulm Commenting it for the first time. This is the "stable" DOS version from which the Windows code will be derived. This file should not change for Windows ***************************************************************************/ #include "prep.h" #include "fcomint.h" #include "fdebug.h" ///RSL #include "glbproto.h" #define faxTlog(m) DEBUGMSG(ZONE_TO, m) #define faxT2log(m) DEBUGMSG(ZONE_TIMEOUT, m) #define FILEID FILEID_TIMEOUTS /*************************************************************************** Name : Timers Class Purpose : Provide for Timeouts TO -- Timeout struct startTimeout -- creates a new timeout ***************************************************************************/ void startTimeOut(PThrdGlbl pTG, LPTO lpto, ULONG ulTimeout) { ///////////// ulTimeout <<= 1; // give us a little more time during debugging BG_CHK(lpto); lpto->ulStart = GetTickCount(); lpto->ulTimeout = ulTimeout; lpto->ulEnd = lpto->ulStart + ulTimeout; // will wrap around as system // time nears 4Gig ms (MyDebugPrint(pTG, LOG_ALL, "StartTO: 0x%08lx --> to=0x%08lx start=0x%08lx end=0x%08lx\r\n", lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd)); return; } BOOL checkTimeOut(PThrdGlbl pTG, LPTO lpto) { // if it returns FALSE, caller must return FALSE immediately // (after cleaning up, as appropriate). // SWORD swRet; ULONG ulTime; BG_CHK(lpto); ulTime = GetTickCount(); //// if(fVerbose3) //// (MyDebugPrint(pTG, "CheckTO: 0x%08lx --> to=0x%08lx start=0x%08lx end=0x%08lx CURR=0x%08lx\r\n", //// lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime)); if(lpto->ulTimeout == 0) { goto out; } else if(lpto->ulEnd >= lpto->ulStart) { if(ulTime >= lpto->ulStart && ulTime <= lpto->ulEnd) return TRUE; else goto out; } else // ulEnd wrapped around!! { ERRMSG(("<> CheckTO WRAPPED!!: 0x%04x --> to=0x%08lx start=0x%08lx end=0x%08lx time=0x%08lx\r\n", lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime)); if(ulTime >= lpto->ulStart || ulTime <= lpto->ulEnd) return TRUE; else goto out; } out: faxT2log(("CheckTO--TIMEOUT!: 0x%04x --> to=0x%08lx start=0x%08lx end=0x%08lx CURR=0x%08lx\r\n", lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime)); return FALSE; } // this will return garbage values if ULONG leftTimeOut(PThrdGlbl pTG, LPTO lpto) { ULONG ulTime; BG_CHK(lpto); ulTime = GetTickCount(); if(lpto->ulTimeout == 0) return 0; else if(lpto->ulEnd >= lpto->ulStart) { if(ulTime >= lpto->ulStart && ulTime <= lpto->ulEnd) return (lpto->ulEnd - ulTime); else return 0; } else { if(ulTime >= lpto->ulStart || ulTime <= lpto->ulEnd) return (lpto->ulEnd - ulTime); // in unsigned arithmetic this // works correctly even if End