home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / samples / mm / fssht / seekcalc.c < prev    next >
C/C++ Source or Header  |  1999-05-11  |  3KB  |  123 lines

  1.  
  2. #define INCL_BASE           // include BASE OS/2 defines
  3. #define INCL_NOPMAPI        // leave out the PM stuff
  4.  
  5. #include <os2.h>
  6. #include <os2medef.h>
  7. #include <seekcalc.h>
  8.  
  9. /* Performance stub for pagetuned pragma header files */
  10. #ifndef PERFSTUB
  11.   #include "perfstub.h"
  12.   #define  PERFSTUB
  13. #endif
  14.  
  15.  
  16. ULONG APIENTRY Bytes2Mmtime( ULONG   ulBytesPerUnit,
  17.                              ULONG   lSeekPoint,
  18.                              MMTIME  mmTimePerUnit,
  19.                              PLONG   plByteSeekPoint )
  20. {
  21.   ULONG   ulTempHigh, ulTempLow, roundup=0, rc=0, negative=0;
  22.  
  23.   if (lSeekPoint & 0x80000000)
  24.    {
  25.      lSeekPoint--;
  26.      lSeekPoint = ~lSeekPoint;
  27.      negative = 1;
  28.    }
  29.   ulTempHigh = lSeekPoint & 0xFFFF0000;
  30.   ulTempHigh = ulTempHigh >> 15;       // We will divide by 2 later
  31.  
  32.   ulTempLow = lSeekPoint & 0x0000FFFF;
  33.   ulTempLow = ulTempLow * 2;           // We will divide by 2 later
  34.  
  35.   ulTempHigh = ulTempHigh * (ULONG)mmTimePerUnit;
  36.   if (ulTempHigh & 0xFFFF0000) rc=1;
  37.  
  38.   ulTempHigh = ulTempHigh << 16;
  39.   ulTempHigh = ulTempHigh / ulBytesPerUnit;
  40.  
  41.   ulTempLow = ulTempLow * (ULONG)mmTimePerUnit;
  42.   ulTempLow = ulTempLow / ulBytesPerUnit;
  43.  
  44.   *plByteSeekPoint =  ulTempHigh + ulTempLow;
  45.  
  46.   if (*plByteSeekPoint & 0x00000001) roundup=1;
  47.  
  48.   *plByteSeekPoint = (*plByteSeekPoint/2) + roundup;
  49.  
  50.   if (negative)
  51.    {
  52.      *plByteSeekPoint = ~*plByteSeekPoint;
  53.      (*plByteSeekPoint)++;
  54.    }
  55.  
  56.   return(rc);
  57. }
  58.  
  59.  
  60.  
  61. ULONG APIENTRY Mmtime2Bytes( ULONG   ulBytesPerUnit,
  62.                              ULONG   lSeekPoint,
  63.                              MMTIME  mmTimePerUnit,
  64.                              PLONG   plByteSeekPoint )
  65. {
  66.   ULONG   ulTempHigh, ulTempLow, roundup=0, rc=0, negative=0;
  67.  
  68.   if (lSeekPoint & 0x80000000)
  69.    {
  70.      lSeekPoint--;
  71.      lSeekPoint = ~lSeekPoint;
  72.      negative = 1;
  73.    }
  74.   ulTempHigh = lSeekPoint & 0xFFFF0000;
  75.   ulTempHigh = ulTempHigh >> 15;       // We will divide by 2 later
  76.  
  77.   ulTempLow = lSeekPoint & 0x0000FFFF;
  78.   ulTempLow = ulTempLow * 2;           // We will divide by 2 later
  79.  
  80.   ulTempHigh = ulTempHigh * ulBytesPerUnit;
  81.   if (ulTempHigh & 0xFFFF0000) rc=1;
  82.  
  83.   ulTempHigh = ulTempHigh << 16;
  84.   ulTempHigh = ulTempHigh / mmTimePerUnit;
  85.  
  86.   ulTempLow = ulTempLow * ulBytesPerUnit;
  87.   ulTempLow = ulTempLow / mmTimePerUnit;
  88.  
  89.   *plByteSeekPoint =  ulTempHigh + ulTempLow;
  90.  
  91.   if (*plByteSeekPoint & 0x00000001) roundup=1;
  92.  
  93.   *plByteSeekPoint = (*plByteSeekPoint/2) + roundup;
  94.  
  95.   if (negative)
  96.    {
  97.      *plByteSeekPoint = ~*plByteSeekPoint;
  98.      (*plByteSeekPoint)++;
  99.    }
  100.  
  101.   return(rc);
  102. }
  103.  
  104.  
  105. ULONG APIENTRY AddNCheck(ULONG ulAdd, ULONG ulSeekPoint, PLONG plSeekPoint)
  106. {
  107.    ULONG ulTempHigh, ulTempLow, carry=0;
  108.  
  109.    ulTempHigh = ulAdd & 0xFFFF0000;
  110.    ulTempHigh = ulTempHigh >> 16;
  111.  
  112.    ulTempLow  = ulAdd & 0x0000FFFF;
  113.  
  114.    if ( (ulTempLow + (ulSeekPoint & 0x0000FFFF)) & 0xFFFF0000) carry=1;
  115.  
  116.    if ( (ulTempHigh + ((ulSeekPoint & 0xFFFF0000)>>16) + carry) & 0xFFFF0000) carry=1;
  117.    else carry = 0;
  118.  
  119.    *plSeekPoint=ulAdd + ulSeekPoint;
  120.  
  121.    return(carry);
  122. }
  123.