Listing 3 (reprate.hpp)

 1: /*
 2: REPRATE.HPP
 3:
 4: Header file for periodic event class definitions.
 5: Paul A. Cornelius, August 1991
 6: */
 7:
 8: #ifndef REPRATE_HPP
 9: #define REPRATE_HPP
10:
11: typedef void (*CALL_ME)();      // user function type
12: const unsigned TICKS_PER_SECOND=1024;
13:
14: #ifndef DLIST_HPP
15:     #include <dlist.hpp>
16: #endif
17:
18: class RepRate
19: {
20: friend class RepRateList;
21: private:
22:     CALL_ME func;
23:     long tick_interval;
24:         // ticks between calls to CALL_ME
25:     long count_now;
26:     void HandleTick();
27: public:
28:     RepRate(double Hz,CALL_ME);
29:     ~RepRate()                          {}
30:     double ChangeRepRate(double Hz);
31:         // returns actual rep rate
32:     void ChangeFunction(CALL_ME p)      {func= p;}
33:     double GetRepRate()
34:         // returns actual rep rate
35:     {
36:         return double(TICKS_PER_SECOND) /
37:          double(tick_interval);
38:     }
39: };
40:
41: // The next class supports a list of RepRate objects.
42: // An instance is declared globally as TimerList.
43: // There can be only a single RepRateList per program;
44: // attempting to instantiate a second one will
45: // cause an assertion failure.
46: declare(zGDList,RepRate);
47: class RepRateList
48: {
49: friend void handle_tick();
50:     static int On;
51:     int TimerOn;
52:     int Error;
53:     zGDList(RepRate) Replist;
54:     void TurnOnTimer();
55:     void TurnOffTimer();
56:     void HandleTick();
57: public:
58:     RepRateList();
59:         // Clock does not turn on until first RepRate
60:         // object is linked in
61:     ~RepRateList();         // Turns off the clock
62:
63:     void Linkin(RepRate*);
64:         // Attaches the object to the list, starts
65:         // clock if not already going
66:     void Linkout(RepRate*);
67:         // Removes object from list, stops clock if
68:         // it is the last one
69:     int GetError() {return Error;}
70:         // 1 linked list error
71: };
72:
73: extern RepRateList TimerList;
74:
75: #endif
/* End of File */