<?xml version="1.0" encoding="iso-8859-2"?>
<!-- name="generator" content="pyblosxom/1.0.0 (May 24, 2004)" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
<channel>
<title>... with flags unfurled... : programming/palmbits   </title>
<link>http://znouza.meinlschmidt.org/blog/programming/palmbits/index.rss</link>
<description>we reached the dizzy heights...</description>
<language>en</language>
<item>
    <title>Progress bar</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/050406-0143.html</link>
    <description>&lt;p&gt;
from palm-dev e-mail list, credit goes to Logan Shaw
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
typedef struct
{
    RectangleType bounds;
    WinHandle savedbits;
} ProgBar;

void OpenProgressBar (ProgBar *progbar)
{
    UInt16 savebitserror;

    progbar-&gt;savedbits = WinSaveBits (&amp; progbar-&gt;bounds, &amp; savebitserror);
    WinEraseRectangle (&amp; progbar-&gt;bounds, 0);
}

void CloseProgressBar (ProgBar *progbar)
{
    if (progbar-&gt;savedbits)
    {
        WinRestoreBits (
	        progbar-&gt;bounds.topLeft.x, progbar-&gt;bounds.topLeft.y,
	        progbar-&gt;savedbits);
    }
    else
    {
	/* maybe should enqueue a frmUpdateEvent instead, maybe not */
        WinEraseRectangle (&amp; progbar-&gt;bounds, 0);
    }
}

void UpdateProgressBar (ProgBar *progbar, Int32 numerator, Int32 denominator)
{
    RectangleType fillrect;

    RctCopyRectangle (&amp; progbar-&gt;bounds, &amp; fillrect);
    fillrect.extent.x = progbar-&gt;bounds.extent.x * numerator / denominator;

    WinDrawRectangle (&amp; fillrect, 0);
}

void TestProgressBar ()
{
    Int32 i;
    const Int32 max = 25;
    ProgBar progbar;

    progbar.bounds.topLeft.x = 20;
    progbar.bounds.topLeft.y = 70;
    progbar.extent.x = 120;
    progbar.extent.y = 20;

    OpenProgressBar (&amp; progbar);
    for (i = 0; i &lt;= max; i++)
    {
        UpdateProgressBar (&amp; progbar, i, max);
        SysTaskDelay (SysTicksPerSecond() / 5);
    }
    CloseProgressBar (&amp; progbar);
}

&lt;/pre&gt;
</description>
  </item>
<item>
    <title>Preferences</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/050328-2050.html</link>
    <description>&lt;p&gt;Preferences structure definition&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
typedef struct {
	int skeletonData;
} Prefs;

Prefs prefs;
&lt;/pre&gt;
&lt;p&gt;Open preferences&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
void startApp() {
	Int16 prefSize = sizeof(Prefs);
	if ((PrefGetAppPreferences (AppCreator, 
			 		1000, // pref database id
			 		&amp;prefs, 
			 		&amp;prefSize, 
		 	 		true) // saved during Hotsync
		== noPreferenceFound) 
		|| (prefSize != sizeof(Prefs))) {
					// default initialization, since discovered 
					// Prefs was missing or old.
		prefs.skeletonData=1;
	}
}
&lt;/pre&gt;
&lt;p&gt;Write preferences&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
void stopApp() {
	PrefSetAppPreferences (AppCreator, 
				1000,	// pref database id
				1, 	// version of pref database
				&amp;prefs, 
				sizeof(Prefs), 
				true);	// saved during hotsync
}
&lt;/pre&gt;
</description>
  </item>
<item>
    <title>Using libraries</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/050328-2040.html</link>
    <description>&lt;p&gt;
Load and initializing the library
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
#include &lt;mathlib.h&gt;
int MathLibRef = -1;
...
// is library already loaded?
err = SysLibFind(&quot;MathLib&quot;, &amp;MathLibRef);
if (err != 0) {
	// negative, load
	err = SysLibLoad(&apos;libr&apos;, &apos;MthL&apos;, &amp;MathLibRef);
	if (err == 0) {
		err = MathLibOpen (MathLibRef, 1);
	}
}
&lt;/pre&gt;
&lt;p&gt;
Closing library
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
if (MathLibRef != -1) {
	Err err;
	UInt16 usecount;
	err = MathLibClose (MathLibRef, &amp;usecount);
	if (usecount == 0) {
		SysLibRemove (MathLibRef);
	}
}
&lt;/pre&gt;
</description>
  </item>
<item>
    <title>Click on the field opens built-in keypad</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/040911-1106.html</link>
    <description>I&apos;m using it for easy data writing.
&lt;pre class=&quot;code&quot;&gt;
static Boolean frmMain_myField_OnfldEnter(EventPtr event)
{
    SysKeyboardDialog(kbdAlpha);
    return true;
}
&lt;/pre&gt;
</description>
  </item>
<item>
    <title>Direct video memory access</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/040907-0921.html</link>
    <description>&lt;pre class=&quot;code&quot;&gt;
UInt32       *ptrScreen = &lt;a href=&quot;http://www.palmos.com/dev/support/docs/protein_books/UserInterface/UI_Bitmap.html#1028437&quot;&gt;BmpGetBits&lt;/a&gt;(&lt;a href=&quot;http://www.palmos.com/dev/support/docs/palmos/Window.html#1014197&quot;&gt;WinGetBitmap&lt;/a&gt;(&lt;a href=&quot;http://www.palmos.com/dev/support/docs/palmos/Window.html#1014337&quot;&gt;WinGetDisplayWindow&lt;/a&gt;()));
// 8bits/color, 320x320 display.. fill entire display with black
UInt32       count = 320*320

while(count--) { ptrScreen[count] = 0; }
&lt;/pre&gt;	
&lt;p&gt;* since OS3.5&lt;/p&gt;
&lt;p&gt;is neccessary to evalute number of colors used and desired resolution. Buffer is by rows from upper. 16bit (65535) means 2bytes per pixel, 256 means 1byte etc...&lt;/p&gt;
&lt;p&gt;for PalmOS&amp;lt;3.5 use the following:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
WindowType  *winP;
winP = WinGetWindowHandle( win );
ptr = winP-&gt;displayAddrV20;
&lt;/pre&gt;	
</description>
  </item>
<item>
    <title>Displaying an alert window</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/040806-1210.html</link>
    <description>&lt;p&gt;resource - .h file:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#define CustomAlert 1000
&lt;/pre&gt;

&lt;p&gt;resource - .rcp file:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;ALERT ID CustomAlert
BEGIN
  TITLE &quot;custom alert&quot;
  MESSAGE &quot;^1\n^2\n^3&quot;
  BUTTONS &quot;OK&quot;
END
&lt;/pre&gt;

&lt;p&gt;code:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
    Char alertMsg[64];
    StrPrintF(alertMsg, &quot;Your value is %d&quot;, yourValue);
    &lt;a href=&quot;http://www.palmos.com/dev/support/docs/palmos/Form.html#997090&quot;&gt;FrmCustomAlert&lt;/a&gt;(CustomAlert, alertMsg, &quot;&quot;, &quot;&quot;);
&lt;/pre&gt;	

&lt;p&gt;
do NOT pass NULL value as param in FrmCustomAlert - always use &quot;&quot;.
&lt;/p&gt;						
</description>
  </item>
<item>
    <title>Changing graphics mode</title>
    <link>http://znouza.meinlschmidt.org/blog/programming/palmbits/040804-1535.html</link>
    <description>&lt;pre class=&quot;code&quot;&gt;
Boolean SetScreenColorDepth(int depth)
{
    UInt16 reqDepth=depth;
    Err err = &lt;a href=&quot;http://www.palmos.com/dev/support/docs/palmos/Window.html#1012037&quot;&gt;WinScreenMode&lt;/a&gt;(winScreenModeSet,NULL,NULL,&amp;amp;reqDepth,NULL);
    return !err;
}

Boolean RestoreScreenColorDepth(void)
{
    Err err = &lt;a href=&quot;http://www.palmos.com/dev/support/docs/palmos/Window.html#1012037&quot;&gt;WinScreenMode&lt;/a&gt;(winScreenModeSetToDefaults,NULL,NULL,NULL,NULL);
    return !err;
}
&lt;/pre&gt;	
&lt;p&gt;
You must set color depth before any window is created. Check error codes for unsupported modes.
&lt;/p&gt;
</description>
  </item>
   </channel>
</rss>