Tech Note 13: Using the ScreenLib Shared Library

Oct 21, 2003

© NSB Corporation. All rights reserved.

(Special thanks to Ron Glowka) s

The ScreenLib Shared Library adds functions to NS Basic/Palm to enhance control of the screen. It allows you to change the bit depth and color attributes. There are also drawing functions and a screen lock function. A sample program demonstrating the use of the functions called ScreenLibTest is also included.

By providing access to the the PalmOS WinScreenMode API function, ScreenLib provides methods for determining a PalmOS device's bit depth and color capabilities and for setting the "screen mode" to take advantage of these capabilities. It eliminates the need for using third-party applications to perform these functions prior to running your NSBasic program.

A copy of the PalmOS documentation for the WinScreenMode API function is provided at the end of this document. This documentation should be reviewed to gain a more full understanding of this function.

Color support in the Palm OS may work differently than you are used to. Each of the UI elements on the screen has its own color setting. However, the settings apply equally to all objects on the screen.

More information on using color capabilities can be found in the "Tech Note 04: Using Color Objects and Graphics" contributed by Adrian Nicolaiev. This Tech Note can be found at:

http://nsbasic.com/palm/info/technotes/TN04.htm

All of the PalmOS "SysTraps" mentioned in Tech Note 4, plus a few others, are now supported in this library. While most of these functions can be called using the built-in SysTrapSub and SysTrapFunc statements, they have been included here to make them easier to call and are somewhat more "self documenting".

In order to use the ScreenLib Shared Library, the library must be loaded using the NSBasic LoadLibrary statement. This statement should be located in the program's Startup code so that the functions will be available throughout the program. The LoadLibrary statement has an optional second parameter to allow you to specify an abbreviated reference name for the library's functions. The examples in this document use "SL" for this reference name. Example:

    Program's Startup code:

	Sub main()
	    LoadLibrary "ScreenLib", "SL"
	End Sub

Also, in order to use the ScreenLib Shared Library, the ScreenLib.INF file must be present in your "nsbasic\lib" directory and the ScreenLib.prc file must be downloaded to your device.

Except for the function that returns a version number, all the parameter and return data types are either "Integer"or "String". Version numbers are returned as a "Double".

ScreenLib Shared Library Function Reference

:
Version
-------

	Version = ScreenLib.Version()

    Description:

	Returns the version number of the ScreenLib Shared Library.

    Parameters: None

    Returns:	Version as Double

    Example:

	Dim Version as Double

	Version = SL.Version()

CompileInfo
-----------

	ScreenLib.CompileInfo CompileDate, CompileTime

    Description:

	Returns the date and time that the ScreenLib Shared Library 
	was compiled.

    Parameters: CompileDate as String
		CompileTime as String

    Returns:	None

    Example:

	Dim CompileDate as String
	Dim CompileTime as String

	CompileDate = "mon dd yyyy"	'11 characters
	CompileTime = "hh:mm:ss"	'8 characters

	SL.CompileInfo CompileDate, CompileTime

    Comments:

	The CompileDate and CompileTime string variables must be 
	initialized prior to calling CompileInfo.  

GetSupportedDepths
------------------

	Depths = ScreenLib.GetSupportedDepths()

    Description:

	Returns a bitmapped integer with each bit indicating a
	bitmap depth supported by the PalmOS device.

    Parameters:	None

    Returns:	Depths as Integer

    Example:

	    Dim Depths as Integer
   
	    Depths = SL.GetSupportedDepths()

    Comments:

	The NS Basic Shared Library "BitsNBytes" probably provides
	the best suited functions for evaluating the returned value
	from this function.

DepthSupported
--------------

	Boolean = ScreenLib.DepthSupported(Depth)

    Description:

	Returns 1 if the specified depth is supported by the
	PalmOS device.  Otherwise, it returns 0.

    Parameters:	Depth as Integer

    Returns:	Boolean as Integer

    Example:

	Dim Boolean as Integer
	Dim Depth as Integer

	Depth = 4
	Boolean = SL.DepthSupported(Depth)

ColorSupported
--------------

	Boolean = ScreenLib.ColorSupported()

    Description:

	Returns 1 if the PalmOS device has color capabilities.
	Otherwise, it returns 0.

    Parameters:	None

    Returns:	Boolean as Integer

    Example:

	Dim Boolean as Integer

	Boolean = SL.ColorSupported()

SetDepth
--------

	ScreenLib.SetDepth Depth

    Description:

	Sets the screen mode to support the specified bitmap 
	bit depth.

    Parameters:	Depth as Integer

    Returns:	None

    Example:

	Dim Depth as Integer

	Depth = 4
	SL.SetDepth Depth

SetColor
--------

	ScreenLib.SetColor Boolean

    Description:

	Sets the screen mode to support color bitmaps.

    Parameters:	Boolean as Integer
			(1 = support color)
			(0 = do not support color)

    Example:

	Dim Boolean as Integer

	Boolean = 1
	SL.SetColor Boolean

SetWidth
--------

	ScreenLib.SetWidth Width

    Description:

	Sets the current screen width.

    Parameters:	Width as Integer

    Returns:	None

    Example:

	Dim Width as Integer

	Width = 160
	SL.SetWidth Width

    Comments:

	This function does not appear to work correctly with NS Basic
	programs.

SetHeight
---------

	ScreenLib.SetHeight Height

    Description:

	Sets the current screen height.

    Parameters:	Height as Integer

    Returns:	None

    Example:

	Dim Height as Integer

	Height = 160
	SL.SetHeight Height

    Comments:

	This function does not appear to work correctly with NS Basic
	programs.

SaveScreenMode
--------------

	ScreenLib.SaveScreenMode()

    Description:

	Saves the current screen mode parameters.  These parameters
	can later be restored by calling "RestoreScreenMode".  It is
	suggested that the current screen mode parameters be saved before
	any changes are requested and that these saved parameters
	are restored when the program exits.

    Parameters:	None

    Returns:	None

    Example:

	SL.SaveScreenMode()

RestoreScreenMode
-----------------

	ScreenLib.RestoreScreenMode()

    Description:

	Restores saved screen mode parameters.  These parameters
	must have been saved by calling "SaveScreenMode".  It is
	suggested that the current screen mode parameters be saved before
	any changes are requested and that these saved parameters
	are restored when the program exits.

    Parameters:	None

    Returns:	None

    Example:

	SL.RestoreScreenMode()

CurrentDepth
------------

	Depth = ScreenLib.CurrentDepth()

    Description:

	Returns the current bitmap depth.

    Parameters:	None

    Returns:	Depth as Integer

    Example:

	Dim Depth as Integer

	Depth = SL.CurrentDepth()

CurrentColor
------------

	Boolean = ScreenLib.CurrentColor()

    Description:

	Returns 1 if the PalmOS Device's screen mode is currently
	set to support color.   Otherwise, it returns 0.

    Parameters:	None

    Returns:	Boolean as Integer

    Example:

	Dim Boolean as Integer

	Boolean = SL.CurrentColor()

CurrentWidth
------------

	Width = ScreenLib.CurrentWidth()

    Description:

	Returns the current screen width.

    Parameters:	None

    Returns:	Width as Integer

    Example:

	Dim Width as Integer

	Width = SL.CurrentWidth()

CurrentHeight
-------------

	Height = ScreenLib.CurrentHeight()

    Description:

	Returns the current screen height.

    Parameters:	None

    Returns:	Height as Integer

    Example:

	Dim Height as Integer

	Height = SL.CurrentHeight()

SetToDefaults
-------------

	ScreenLib.SetToDefaults()

    Description:

	Sets all screen mode parameters to their default values.

    Parameters:	None

    Returns:	None

    Example:

	SL.SetToDefaults()

DefaultDepth
------------

	Depth = ScreenLib.DefaultDepth()

    Description:

	Returns the default bitmap depth.

    Parameters:	None

    Returns:	Depth as Integer

    Example:

	Dim Depth as Integer

	Depth = SL.DefaultDepth()

DefaultColor
------------

	Boolean = ScreenLib.DefaultColor()

    Description:

	Returns 1 if the PalmOS Device's screen mode default is
	set to support color.   Otherwise, it returns 0.

    Parameters:	None

    Returns:	Boolean as Integer

    Example:

	Dim Boolean as Integer

	Boolean = SL.DefaultColor()

DefaultWidth
------------

	Width = ScreenLib.DefaultWidth()

    Description:

	Returns the default screen width.

    Parameters:	None

    Returns:	Width as Integer

    Example:

	Dim Width as Integer

	Width = SL.DefaultWidth()

DefaultHeight
-------------

	Height = ScreenLib.DefaultHeight()

    Description:

	Returns the default screen height.

    Parameters:	None

    Returns:	Height as Integer

    Example:

	Dim Height as Integer

	Height = SL.DefaultHeight()

GetTableEntryIndex
------------------

	Index = ScreenLib.GetTableEntryIndex(Which)

    Description:

	This function calls the PalmOS UIColorGetTableEntryIndex
	function.  It returns the index value for a UI color for the 
	current system palette.

    Parameters:	Which as Integer
			UIObjectFrame = 0,
			UIObjectFill = 1
			UIObjectForeground = 2
			UIObjectSelectedFill = 3
			UIObjectSelectedForeground = 4

			UIMenuFrame = 5
			UIMenuFill = 6
			UIMenuForeground = 7
			UIMenuSelectedFill = 8
			UIMenuSelectedForeground = 9

			UIFieldBackground = 10
			UIFieldText = 11
			UIFieldTextLines = 12
			UIFieldCaret = 13
			UIFieldTextHighlightBackground = 14
			UIFieldTextHighlightForeground = 15
			UIFieldFepRawText = 16
			UIFieldFepRawBackground = 17
			UIFieldFepConvertedText = 18
			UIFieldFepConvertedBackground = 19
			UIFieldFepUnderline = 20

			UIFormFrame = 21
			UIFormFill = 22
	
			UIDialogFrame = 23
			UIDialogFill = 24

			UIAlertFrame = 25
			UIAlertFill = 26

			UIOK = 27
			UICaution = 28
			UIWarning = 29

    Returns:	Index as Integer

    Example:

	Dim Which as Integer
	Dim Index as Integer

	Which = 11   'UIFieldText
	Index = SL.GetTableEntryIndex(Which)

GetTableEntryRGB
----------------

	Index = ScreenLib.GetTableEntryRGB(Which)

    Description:

	This function calls the PalmOS UIColorGetTableEntryRGB function.
	It retrieves the RGB values for the UI Color.  RGB Values are
	returned in a structure called "RGBColorType".  It contains the 
	following fields:
		index, red, green, blue.
	This function retrieves all these values, but only returns
	the index.  To get the red, green, and blue values, call this
	function first and then call GetRGBRed, GetRGBGreen, and 
	GetRGBBlue.  See the example for more information.

    Parameters:	Which as Integer
			(see the GetTableEntryIndex function for
			 a list of valid "Which" values")

    Returns:	Index as Integer

    Example:

	Dim Which as Integer
	Dim Index as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer

	Which = 11  'UIFieldText
	Index = SL.GetTableEntryRGB(Which)
	Red = SL.GetRGBRed()
	Green = SL.GetRGBGreen()
	Blue = SL.GetRGBBlue()

GetRGBIndex
-----------

	Index = ScreenLib.GetRGBIndex()

    Description:

	RGB Values are returned in a structure called "RGBColorType".  
	It contains the following fields:
		index, red, green, blue.

	This function returns the index value that was previously
	retrieved by either the GetTableEntryRGB or IndexToRGB functions.

    Parameters:	None

    Returns:	Index as Integer

    Example:

	Dim Index as Integer
	Index = SL.GetRGBIndex()
	
GetRGBRed
---------

	Red = ScreenLib.GetRGBRed()

    Description:

	RGB Values are returned in a structure called "RGBColorType".  
	It contains the following fields:
		index, red, green, blue.

	This function returns the red value that was previously
	retrieved by either the GetTableEntryRGB or IndexToRGB functions.

    Parameters:	None

    Returns:	Red as Integer

    Example:

	See the example provided with either the GetTableEntryRGB or 
	IndexToRGB functions.

GetRGBGreen
-----------

	Green = ScreenLib.GetRGBGreen()

    Description:

	RGB Values are returned in a structure called "RGBColorType".  
	It contains the following fields:
		index, red, green, blue.

	This function returns the green value that was previously
	retrieved by either the GetTableEntryRGB or IndexToRGB functions.

    Parameters:	None

    Returns:	Green as Integer

    Example:

	See the example provided with either the GetTableEntryRGB or 
	IndexToRGB functions.

GetRGBBlue
----------

	Blue = ScreenLib.GetRGBBlue()

    Description:

	RGB Values are returned in a structure called "RGBColorType".  
	It contains the following fields:
		index, red, green, blue.

	This function returns the blue value that was previously
	retrieved by either the GetTableEntryRGB or IndexToRGB functions.

    Parameters:	None

    Returns:	Blue as Integer

    Example:

	See the example provided with either the GetTableEntryRGB or 
	IndexToRGB functions.

SetTableEntryIndex
------------------

	ScreenLib.SetTableEntryIndex Which, Index

    Description:

	This subroutine calls the PalmOS IndexToRGB function and then 
        it calls UIColorSetTableEntry.	It changes a value in the UI 
        Color list.

    Parameters:	Which as Integer
			(see the GetTableEntryIndex function for
			 a list of valid "Which" values")
		Index as Integer (valid values: 0 to 255)

    Returns:	None

    Example:

	Dim Which as Integer
	Dim Index as Integer

	Which = 11 'UIFieldText
	Index = 42
	SL.SetTableEntryIndex Which, Index

    Note:

	Some changes aren't reflected until the object or form is
	redrawn with the "Redraw" statement.  Even then, some changes
	like the form background (UIFormFill - 22) aren't reflected
	until until you change forms with a "NextScreen" statement.
	You might want to set some table entries in either the
	programs "Startup" code or just before you use the "NextScreen"
	statement.

SetTableEntryRGB
----------------

	ScreenLib.SetTableEntryRGB Which, Red, Green, Blue

    Description:

	This subroutine calls the PalmOS UIColorSetTableEntry function.
	It changes a value in the UI Color list.

    Parameters:	Which as Integer
			(see the GetTableEntryIndex function for
			 a list of valid "Which" values")
		Red as Integer	 (valid values: 0 to 255)
		Green as Integer (valid values: 0 to 255)
		Blue as Integer  (valid values: 0 to 255)

    Returns:	None

    Example:

	Dim Which as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer

	Which = 11 'UIFieldText
	Red = 255
	Green = 0
	Blue = 0
	SL.SetTableEntryRGB Which, Red, Green, Blue

    Note:

	Some changes aren't reflected until the object or form is
	redrawn with the "Redraw" statement.  Even then, some changes
	like the form background (UIFormFill - 22) aren't reflected
	until until you change forms with a "NextScreen" statement.
	You might want to set some table entries in either the
	programs "Startup" code or just before you use the "NextScreen"
	statement.

BrightnessAdjust
----------------

	ScreenLib.BrightnessAdjust()

    Description:

	This subroutine calls the PalmOS UIBrightnessAdjust function.  
	It displays the "Brightness Adjust" dialog.

    Parameters:	None

    Returns:	None

    Example:

	SL.BrightnessAdjust()

ContrastAdjust
--------------

	ScreenLib.ContrastAdjust()

    Description:

	This subroutine calls the PalmOS UIContrastAdjust function.  
	It displays the "Contrast Adjust" dialog.

    Parameters:	None

    Returns:	None

    Example:

	SL.ContrastAdjust()

    Note:

	The PalmOS documentation states that this function only works
	on the "Palm V Connected Organizer".

PickColorIndex
--------------

	Changed = ScreenLib.PickColorIndex(Index, Title)

    Description:

	This function calls the PalmOS UIPickColor function.  It
	displays a Palette dialog to allow a user to select a
	color.  The selected index and RGB values can be retrieved
	by calling the GetRGBIndex, GetRGBRed, GetRGBGreen and 
	GetRGBBlue functions.

    Parameters:	Index as Integer - suggested Index
		Title as String - Dialog title to display

    Returns:	Changed as Integer
		(0 = User cancelled or chose suggested index)
		(1 = User chose a new index)

    Example:

	Dim Index as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer
	Dim Changed as Integer
	Dim Title as String

	Index = 42
	Title = "Pick a Color"
	Changed = SL.PickColorIndex(Index, Title)
	If Changed = 1 Then
	    Index = SL.GetRGBIndex()
	    Red = SL.GetRGBRed()
	    Green = SL.GetRGBGreen()
	    Blue = SL.GetRGBBlue()
	End If

PickColorRGB
--------------

	Changed = ScreenLib.PickColorRGB(Red, Green, Blue, Title)

    Description:

	This function calls the PalmOS UIPickColor function.  It
	displays an RGB dialog to allow a user to select a
	color.  The selected index and RGB values can be retrieved
	by calling the GetRGBIndex, GetRGBRed, GetRGBGreen and 
	GetRGBBlue functions.

    Parameters:	Red as Integer - suggested red value - 0 to 255)
		Green as Integer - suggested green value - 0 to 255)
		Blue as Integer - suggested blue value - 0 to 255)
		Title as String - Dialog title to display

    Returns:	Changed as Integer
		(0 = User cancelled or chose suggested RGB values)
		(1 = User chose new RGB values)

    Example:

	Dim Index as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer
	Dim Changed as Integer
	Dim Title as String

	Red = 255
	Green = 0
	Blue = 0
	Title = "Pick a Color"
	Changed = SL.PickColorRGB(Red, Green, Blue, Title)
	If Changed = 1 Then
	    Index = SL.GetRGBIndex()
	    Red = SL.GetRGBRed()
	    Green = SL.GetRGBGreen()
	    Blue = SL.GetRGBBlue()
	End If

IndexToRGB
----------

	ScreenLib.IndexToRGB Index

    Description:

	This subroutine calls the PalmOS WinIndexToRGB function.  It
	converts an index in the currently active color table to an
	RGB value.  RGB Values are returned in a structure called 
	"RGBColorType".  It contains the following fields:
		index, red, green, blue.
	To get the actual index, red, green, and blue values, call this
	function first and then call GetRGBIndex, GetRGBRed, GetRGBGreen,
	and GetRGBBlue.  See the example for more information.

    Parameters:	Index as Integer

    Returns:	None

    Example:

	Dim Index as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer

	Index = 134
	SL.IndexToRGB Index
	Index = SL.GetRGBIndex()
	Red = SL.GetRGBRed()
	Green = SL.GetRGBGreen()
	Blue = SL.GetRGBBlue()

RGBToIndex
----------

	Index = ScreenLib.RGBToIndex(Red, Green, Blue)

    Description:

	This function calls the PalmOS WinRGBToIndex function.  It 
	converts RGB values to the index of the closest color in the
	currently active color lookup table (CLUT).

    Parameters:	Red as Integer   (valid values:  0 to 255)
		Green as Integer (valid values:  0 to 255)
		Blue as Integer  (valid values:  0 to 255)

    Returns:	Index as Integer

    Example:

	Dim Index as Integer
	Dim Red as Integer
	Dim Green as Integer
	Dim Blue as Integer

	Red = 255
	Green = 0
	Blue = 0
	Index = SL.RGBToIndex(Red, Green, Blue)

SetForeColor
------------

	OldIndex = ScreenLib.SetForeColor(NewIndex)

    Description:

	This function calls the PalmOS WinSetForeColor function.  It
	sets the foreground color to use in subsequent draw operations.

    Parameter:	NewIndex as Integer

    Returns:	OldIndex as Integer  - previous foreground index

    Example:

	Dim OldIndex as Integer
	Dim NewIndex as Integer

	NewIndex = 134
	OldIndex = SL.SetForeColor(NewIndex)

    Note:

	Colors set with this function appear to be reset to default
	values when switching between forms or when a form is redrawn.
	It is probably best to call this function in the form's
	"After" code section.

SetBackColor
------------

	OldIndex = ScreenLib.SetBackColor(NewIndex)

    Description:

	This function calls the PalmOS WinSetBackColor function.  It
	sets the background color to use in subsequent draw operations.

    Parameter:	NewIndex as Integer

    Returns:	OldIndex as Integer  - previous background index

    Example:

	Dim OldIndex as Integer
	Dim NewIndex as Integer

	NewIndex = 134
	OldIndex = SL.SetBackColor(NewIndex)

    Note:

	Colors set with this function appear to be reset to default
	values when switching between forms or when a form is redrawn.
	It is probably best to call this function in the form's
	"After" code section.

SetTextColor
------------

	OldIndex = ScreenLib.SetTextColor(NewIndex)

    Description:

	This function calls the PalmOS WinSetTextColor function.  It
	sets the color to use for drawing characters in subsequent draw 
	operations.

    Parameter:	NewIndex as Integer

    Returns:	OldIndex as Integer  - previous text index

    Example:

	Dim OldIndex as Integer
	Dim NewIndex as Integer

	NewIndex = 134
	OldIndex = SL.SetTextColor(NewIndex)

    Note:

	Colors set with this function appear to be reset to default
	values when switching between forms or when a form is redrawn.
	It is probably best to call this function in the form's
	"After" code section.

DrawLine
--------

	ScreenLib.DrawLine X1, Y1, X2, Y2

    Description:

	This soubroutine calls the PalmOS WinDrawLine function.  It 
	draws a line in the draw window using the current foreground 
	color.
	Note:  This function was provided for completeness only.  The
	built-in DrawLine NSBasic statement produces the same result.

    Parameters:	X1 as Integer
		Y1 as Integer
		X2 as Integer
		Y2 as Integer

    Returns:	None

    Example:

	Dim X1 as Integer
	Dim Y1 as Integer
	Dim X2 as Integer
	Dim Y2 as Integer

	X1 = 10
	Y1 = 20
	X2 = 120
	Y2 = 20
	SL.DrawLine X1, Y1, X2, Y2

DrawGrayLine
------------

	ScreenLib.DrawGrayLine X1, Y1, X2, Y2

    Description:

	This subroutine calls the PalmOS WinDrawGrayLine function.  It
	does not draw in a gray color, but rather draws with
	alternating foreground and background colors.

    Parameters:	X1 as Integer
		Y1 as Integer
		X2 as Integer
		Y2 as Integer

    Returns:	None

    Example:

	Dim X1 as Integer
	Dim Y1 as Integer
	Dim X2 as Integer
	Dim Y2 as Integer

	X1 = 10
	Y1 = 20
	X2 = 120
	Y2 = 20
	SL.DrawGrayLine X1, Y1, X2, Y2

EraseLine
---------

	ScreenLib.EraseLine X1, Y1, X2, Y2

    Description:

	This subroutine calls the PalmOS WinEraseLine function.  It
	draws a line in the draw window using the current background
	color.

    Parameters:	X1 as Integer
		Y1 as Integer
		X2 as Integer
		Y2 as Integer

    Returns:	None

    Example:

	Dim X1 as Integer
	Dim Y1 as Integer
	Dim X2 as Integer
	Dim Y2 as Integer

	X1 = 10
	Y1 = 20
	X2 = 120
	Y2 = 20
	SL.EraseLine X1, Y1, X2, Y2

InvertLine
----------

	ScreenLib.InvertLine X1, Y1, X2, Y2

    Description:

	This subroutine calls the PalmOS WinInvertLine function.  It
	draws an inverted line in the draw window.

    Parameters:	X1 as Integer
		Y1 as Integer
		X2 as Integer
		Y2 as Integer

    Returns:	None

    Example:

	Dim X1 as Integer
	Dim Y1 as Integer
	Dim X2 as Integer
	Dim Y2 as Integer

	X1 = 10
	Y1 = 20
	X2 = 120
	Y2 = 20
	SL.InvertLine X1, Y1, X2, Y2

DrawPixel
---------

	ScreenLib.DrawPixel X, Y

    Description:

	This subroutine calls the PalmOS WinDrawPixel function.  It
	draws a pixel in the draw window using the current foreground
	color.

    Parameters:	X as Integer
		Y as Integer

    Returns:	None

    Example:

	Dim X as Integer
	Dim Y as Integer
	X = 10
	Y = 20
	SL.DrawPixel X, Y

ErasePixel
----------

	ScreenLib.ErasePixel X, Y

    Description:

	This subroutine calls the PalmOS WinErasePixel function.  It
	draws a pixel in the draw window using the current background
	color.

    Parameters:	X as Integer
		Y as Integer

    Returns:	None

    Example:

	Dim X as Integer
	Dim Y as Integer
	X = 10
	Y = 20
	SL.ErasePixel X, Y

InvertPixel
-----------

	ScreenLib.InvertPixel X, Y

    Description:

	This subroutine calls the PalmOS WinInvertPixel function.  It
	draws an inverted pixel in the draw window.

    Parameters:	X as Integer
		Y as Integer

    Returns:	None

    Example:

	Dim X as Integer
	Dim Y as Integer
	X = 10
	Y = 20
	SL.InvertPixel X, Y

GetPixel
--------

	Index = ScreenLib.GetPixel(X, Y)

    Description:

	This function calls the PalmOS WinGetPixel function.  It
	returns the color of the specified a pixel in the draw window.

    Parameters:	X as Integer
		Y as Integer

    Returns:	Index as Integer

    Example:

	Dim Index as Integer
	Dim X as Integer
	Dim Y as Integer
	X = 10
	Y = 20
	Index = SL.GetPixel(X, Y)

ScreenLock
----------

	Success = ScreenLib.ScreenLock(Mode)

    Description:

	This function calls the PalmOS WinScreenLock function.  It 
	"locks" the current screen by switching the UI concept of the 
	screen base address to an area that is not reflected on the
	display.  This routine can be used to "freeze" the display 
	while doing lengthy drawing operations to avoid a flickering
	effect.  Call ScreenUnlock to unlock the display and cause
	it to be updated with any changes.  The screen must be unlocked
	as many times as it is locked to actually update the display.

    Parameters:	Mode as Integer
			(winLockCopy = 0 - copy old screen to new)
			(winLockErase = 1 - erase new screen to white)
			(winLockDontCare = 2 - don't do anything)

    Returns:	Success as Integer
		(1 = Success)
		(0 = Failure)

    Example:

	Dim Success as Integer
	Dim Mode as Integer
	
	Mode = 0  'winLockCopy
	Success = SL.ScreenLock(Mode)

ScreenUnlock
------------

	ScreenLib.ScreenUnlock()

    Description:

	This subroutine calls the PalmOS WinScreenUnlock function.  Call 
	ScreenUnlock to unlock the display and cause it to be updated 
	with any changes.  The screen, which was locked by calling
	ScreenLock, must be unlocked as many times as it is locked to 
	actually update the display.

    Parameters:	None

    Returns:	None

    Example:

	SL.ScreenUnlock()


PalmOS WinScreenMode API Documentation

:
Purpose:

Sets or returns display parameters, including display geometry, 
bit depth, and color support. 

Prototype:

	Err WinScreenMode (WinScreenModeOperation operation, 
			   UInt32 *widthP, UInt32 *heightP, 
			   UInt32 *depthP, Boolean *enableColorP) 
Parameters:

The widthP, heightP, depthP, and enableColorP parameters are used in 
different ways for different operations. See Comments at the end of 
this description for details.    

	-> operation

		The work this function is to perform, as specified by 
		one of the following selectors:
 
 		  winScreenModeGet
			 Return the current settings for the display. 
 
 		  winScreenModeGetDefaults
			 Return the default settings for the display. 
 
 		  winScreenModeGetSupportedDepths
			 Return in depthP a hexadecimal value indicating
			 the supported screen depths. The binary 
			 representation of this value defines a bitfield
			 in which the value 1 indicates support for a 
			 particular display depth. The position 
			 representing a particular bit depth corresponds
			 to the value 2(bitDepth-1). See the Example at 
			 the end of this function description for more 
			 information.
 
 		  winScreenModeGetSupportsColor
 			Return true as the value of the enableColorP
			parameter when color mode can be enabled.
 
 		  winScreenModeSet
			Change display settings to the values specified
			by the other arguments to the WinScreenMode 
			function. 
 
 		  winScreenModeSetToDefaults
			 Change display settings to default values. 
 
	<-> widthP

		Pointer to new/old screen width.
 
	<-> heightP

		 Pointer to new/old screen height.
 
	<-> depthP
		
		Pointer to new/old/available screen depth.
 
	<-> enableColorP

		Pass true to enable color drawing mode.
 

Result:

	If no error, returns values as specified by the operation 
	argument. Various invalid arguments may cause this function 
	to return a sysErrParamErr result code. In rare cases, a failed 
	allocation can cause this function to return a 
	memErrNotEnoughSpace error. 

Comments:

The widthP, heightP, depthP, and enableColorP parameters are used in 
different ways for different operations. All "get" operations overwrite 
these values with a result when the function returns. The 
winScreenModeSet operation changes current display parameters when 
passed valid argument values that are not NULL pointers. The 
winScreenModeSetToDefaults operation ignores values passed for all of 
these parameters. 

Table 48.1 summarizes parameter usage for each operation this function 
performs. 


Table 48.1 Use of parameters to WinScreenMode function  

Operation  winScreenMode...  widthP    heightP   depthP    enableColorP  
...Get			     returned  returned  returned  returned  
...GetDefaults               returned  returned  returned  returned  
...GetSupportedDepths        pass in   pass in   returned  pass in  
...GetSupportsColor          pass in   pass in   pass in   returned  
...Set  		     pass in   pass in   pass in   pass in  
...SetToDefaults  	     ignored   ignored   ignored   ignored  
 



This function ignores NULL pointer arguments to the widthP, heightP, 
depthP, and enableColorP parameters; thus, you can pass a NULL pointer 
for any of these values to leave the current value unchanged. Similarly, 
when getting values, this function does not return a value for any NULL 
pointer argument. 

If you change the display depth, it is recommended that you restore it 
to its previous state when your application closes, even though the 
system sets display parameters back to their default values when 
launching an application. 

Note that none of the other operations interprets the depth parameter 
the same way that winScreenModeGetSupportedDepths does. For example, to 
set the display depth to 8-bit mode, you use 8 (decimal) for the display 
depth, not 0x08 (128 decimal). 

Compatibility:

Implemented only if 3.5 New Feature Set is present. In OS versions prior 
to 3.5, this function is called ScrDisplayMode. The prototype for 
ScrDisplayMode is similar to WinScreenMode: 

	Err ScrDisplayMode ( ScrDisplayModeOperation operation, 
			     DWordPtr widthP, DWordPtr heightP, 
			     DWordPtr depthP, BooleanPtr enableColorP)


The only other difference between ScrDisplayMode and WinScreenMode is 
that the ScrDisplayModeOperation constants begin with the prefix 
scrDisplayMode rather than winScreenMode. 

Example: 

Here are some additional examples of return values provided by the 
winScreenModeGetSupportedDepths mode of the WinScreenMode function. 

This function indicates support for 4-bit drawing by returning a value 
of 0x08, or 23, which corresponds to a binary value of 1000. Support for 
bit depths of 2 and 1 is indicated by a return value of 0x03. Support for
bit depths of 4, 2, and 1 is indicated by 0x0B, which is a binary value 
of 1011. Support for bit depths of 24, 8, 4 and 2 is indicated by 
0x80008A. The figure immediately following depicts this final example 
graphically. 

        24-bit drawing
        |                               8-bit drawing
        |                               |       4-bit drawing
        |                               |       |   2-bit drawing
        |                               |       |   |
	1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0
	|                               |       |   |
       2^23                            2^7     2^3 2^1

	Bit depth support indicated by interpreting 0x80008A as
	binary value.