[comp.sys.amiga.tech] Finding a HIRES Screen

murphy@pur-phy (William J. Murphy) (01/07/89)

After being chided for writing a program that didn't properly open
a custom screen when in morerows mode, I started to hack my code following
the article in Tansactor 1.3 by John Toebes.  He illustrates a method
for looking at Prefernces Pref.LaceWB to set the appropriate numer of 
rows in the display.  I looked through Preferences.h in the include/intuition
diresctory of Manx C, and found no corresponding flag to tell me if the
screen is HIRES.  

I suppose that means that preferences always starts up Workench screen in HIRES?
So, I tried opening the screen according to NormalDisplayRows and Columns 
without any trouble, except that if my custom screen viewmode was NULL, I would
have 640+ columns on a 320+ column screen.  The simple minded solution, but not
foolproof solution was the following:

rows = GfxBase->NormalDisplayRows;
cols = GfxBase->NormalDisplayColumns;
GetPrefs(&prefs, sizeof(struct Preferences));

if (prefs.LaceWB)
{
    newscreen.ViewModes = LACE;
    rows += rows;
}

if (cols > 320)
{
    newscreen.ViewModes = newscreen.ViewModes | HIRES;
}

newscreen.Width  = cols;
newscreen.Height = rows;

The problem I see with this is that MoreRows and other programs can set the
Workbench screen to (LORES + epsilon) or (HIRES + epsilon), but I don't
know whether it is HIRES or LORES. I can see that if the test was 

if (cols >= 640)
    newscreen.ViewModes = newscreen.ViewModes | HIRES;

Then I would always catch the HIRES, unless epsilon were negative.

I hope this explains my question, any sure-fire ways of querying the operating
system to check HIRES?

Bill Murphy
murphy@newton.physics.purdue.edu