
// Gathers unpredictable system data to be used for generating
// random bits

#include <MacTypes.h>

class CRandomizer {
 public:
    CRandomizer(void);
    void PeriodicAction(void);

 private:

    // Private calls

    void AddTimeSinceMachineStartup(void);
    void AddAbsoluteSystemStartupTime(void);
    void AddAppRunningTime(void);
    void AddStartupVolumeInfo(void);
    void AddFiller(void);

    void AddCurrentMouse(void);
    void AddNow(double millisecondUncertainty);
    void AddBytes(void *data, long size, double entropy);

    void GetTimeBaseResolution(void);
    unsigned long SysTimer(void);

    // System Info
    bool mSupportsLargeVolumes;
    bool mIsPowerPC;
    bool mIs601;

    // Time info
    double mTimebaseTicksPerMillisec;
    unsigned long mLastPeriodicTicks;

    // Mouse info
    long mSamplePeriod;
    Point mLastMouse;
    long mMouseStill;
};
