//////////////////////////////////////////////////////////////////////////////
//
//  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 _Resolution_h
#define _Resolution_h
//
//  Support for the currently defined (1992) resolutions.
//
//  To change to a different, simply declare that a change in resolution
//  exists, eg.:
//
//		ResolutionChange Rez(STLow);
//
//  This will change the current resolution to ST low resolution.
//  Various modules (esp. Screens) take notice of the current resolution.
//  When the resolution change goes out of scope (ceases to exist), it
//  will revert to the previous resolution.
//
//  Note that due to the fascist way TOS changes resolution, the current
//  logical screen is cleared when resolution is changed.
//
//  Various arrays of resolution dependent values are also supplied.
//

typedef enum {STLow=0, STMedium=1, STHigh=2, TTLow=7, TTMedium=4, TTHigh=5} Resolution;
#define NUMRES (TTLow+1)

extern short BitPlanes[NUMRES];
extern short BytesPerBitPlaneLine[NUMRES];
extern short BytesPerLine[NUMRES];
extern short ScreenWidth[NUMRES];
extern short ScreenHeight[NUMRES];
extern short NumberOfColours[NUMRES];


class ResolutionChange
{
public:
	Resolution Before,After;

	ResolutionChange();		/* No change */
	ResolutionChange(Resolution);
	~ResolutionChange();		/* Change back */
};

/* The concept here is that resolutions may be changed in a scopewise
 * manner.  Simply by declaring that a ResolutionChange object exists,
 * the resolution will be modified for the scope, but restored at the
 * end on the scope!
 */

#endif
