home *** CD-ROM | disk | FTP | other *** search
- //////////////////////////////////////////////////////////////////////////////
- //
- // 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 <bool.h>
- #include <screen.h>
-
- 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
-