/******************************Module*Header*******************************\
* Module Name: util.cxx
*
* Misc. utility functions
*
* Copyright 1996 - 1998 Microsoft Corporation
*
\**************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <sys/timeb.h>
#include <GL/gl.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <time.h>
#include <math.h>
#include "ssintrnl.hxx"
#include "util.hxx"
/******************************Public*Routine******************************\
* SS_TIME class
*
\**************************************************************************/
void
SS_TIME::Update()
{
struct _timeb time;
_ftime( &time );
seconds = time.time + time.millitm/1000.0;
}
void
SS_TIME::Zero()
{
seconds = 0.0;
}
double
SS_TIME::Seconds()
{
return seconds;
}
SS_TIME
SS_TIME::operator+( SS_TIME addTime )
{
return( *this += addTime );
}
SS_TIME
SS_TIME::operator-( SS_TIME subTime )
{
return( *this -= subTime );
}
SS_TIME
SS_TIME::operator+=( SS_TIME addTime )
{
seconds += addTime.seconds;
return *this;
}
SS_TIME
SS_TIME::operator-=( SS_TIME subTime )
{
seconds -= subTime.seconds;
return *this;
}
/******************************Public*Routine******************************\
* SS_TIMER class
*
\**************************************************************************/
void
SS_TIMER::Start()
{
startTime.Update();
}
SS_TIME
SS_TIMER::Stop()
{
elapsed.Update();
return elapsed - startTime;
}
void
SS_TIMER::Reset()
{
elapsed.Zero();
}
SS_TIME
SS_TIMER::ElapsedTime()
{
elapsed.Update();
return elapsed - startTime;
}
/******************************Public*Routine******************************\
* ss_Rand
*
* Generates integer random number 0..(max-1)
*
\**************************************************************************/
int ss_iRand( int max )
{
return (int) ( max * ( ((float)rand()) / ((float)(RAND_MAX+1)) ) );
}
/******************************Public*Routine******************************\
* ss_Rand2
*
* Generates integer random number min..max
*
\**************************************************************************/
int ss_iRand2( int min, int max )
{
if( min == max )
return min;
else if( max < min ) {
int temp = min;
min = max;
max = temp;
}
return min + (int) ( (max-min+1) * ( ((float)rand()) / ((float)(RAND_MAX+1)) ) );
}
/******************************Public*Routine******************************\
* ss_fRand
*
* Generates float random number min...max
*
\**************************************************************************/
FLOAT ss_fRand( FLOAT min, FLOAT max )
{
FLOAT diff;
diff = max - min;
return min + ( diff * ( ((float)rand()) / ((float)(RAND_MAX)) ) );
}
/******************************Public*Routine******************************\
* ss_RandInit
*
* Initializes the randomizer
*
\**************************************************************************/
void ss_RandInit( void )
{
struct _timeb time;
_ftime( &time );
srand( time.millitm );
for( int i = 0; i < 10; i ++ )
rand();
}
#if DBG
/******************************Public*Routine******************************\
* DbgPrint
*
* Formatted string output to the debugger.
*
* History:
* 26-Jan-1996 -by- Gilman Wong [gilmanw]
* Wrote it.
\**************************************************************************/
ULONG
DbgPrint(PCH DebugMessage, ...)
{
va_list ap;
char buffer[256];
va_start(ap, DebugMessage);
vsprintf(buffer, DebugMessage, ap);
OutputDebugStringA(buffer);
va_end(ap);
return(0);
}
#endif