////////////////////////////////////////////////////////////////////////////// // // This file is part of the Atari Machine Specific Library, // and is Copyright 1992 by Warwick W. Allison. // // You are free to copy and modify these sources, provided you acknoledge // the origin by retaining this notice, and adhere to the conditions // described in the file COPYING. // ////////////////////////////////////////////////////////////////////////////// #ifndef _FastCounter_h #define _FastCounter_h /////////////////////////////////////////////////////////////////////////// // // Fast counters are high-speed decimal display objects. // Currently, only implemented in STLow resolution. // // To use, create a screen with " 0123456789" depicted in colour 15, // each character 8 pixels wide, and all the same height. // // Create a CounterFont from this screen. // // Create a FastCounter from this font. // /////////////////////////////////////////////////////////////////////////// #include #include class CounterFont { public: CounterFont(short Height, short Plane=0); // x must be multiple of 16 GetImages(Screen&,short x,short y); friend class FastCounter; Draw(short,long Offset); // Draw "00" to "99"; 100+x=" x", 110=" " private: short *Data; short shifts; short height; short plane; }; class FastCounter { public: // Use given font, draw at (x,y) - x multiple of 16, // initial counter value v, given number of digits (multiple of 2). FastCounter(CounterFont*,int x,int y,unsigned v=0,short digits=6); ~FastCounter(); void Draw(); // Draw on current page void Add(short); // Increase/decrease void Set(unsigned); void operator ++ () {Add(1);} void operator -- () {Add(-1);} void operator += (short x) {Add(x);} void operator -= (short x) {Add(-x);} operator int(); // Convert to int operator double(); // convert to double void MoveTo(short x,short y); void ZeroSuppression(bool on=TRUE); // Turned on by default private: bool LeadingZeroes=FALSE; CounterFont *Font; unsigned short *Digit; unsigned short Changed[2]; short Size; long Offset; }; #endif