UTIL.CXX
/******************************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