Command PAGE
 
Description Create a  Page or Group of entities. Pages contain entities to be shown on the display plus functions that will run as a background task only on that page. Entities are listed so that they are layered from back to front. Create the style and declare the page before using the SHOW(PageName); command.
 
Syntax/Parameters PAGE(Name,Style)
{
..,//Page Contents
}
 
Style The style defines the page size, position and background.

STYLE(stPage,Page)   //create a style name and define as type Page
 {
 update=all; //define page refresh method with ;; options: 'all' or 'changed'
 sizeX=480; //specify width of page 1 to 3* LCD width     
 sizeY=272; //specify height of page 1 to 3* LCD height
 posX=0;     //specify the absolute X position of page on screen. -4 * LCD width to 4 * LCD width
 posY=0;     //specify the absolute Y position of page on screen. -4 * LCD height to 4 * LCD height
 back=black;  //specify background colour of page as hex \\000000 to \\FFFFFF or colour name
 image=pageimg; //specify background image for the page using the entity name used in the LIB command to store the image .
 }
 
Options Page Refreshing v47.00
A new mode has been added for pages which allows for either:
 - all entities to be redrawn on a page when a double semicolon (
;;) refresh is encountered (default),
 - only the entities that have been modified since last refresh to be redrawn when a double semicolon (
;;) is encountered.

A
SHOW(page); command will always redraw all the entities on a page.
STYLE(name,PAGE) { update=all; } // default: refreshes all entities on a ;;
STYLE(name,PAGE) { update=changed; }
// refreshes only changed entities on a ;;

Page Merging - v37.00
LOAD(Page1,Page2,Page3,…); will copy all entities from Page2 into Page1, then Page3 into Page 1, then Page4 into Page 1.


Pop-Up Pages - v49.03
Page style parameter "type=popUp;" or "type=p;" added to define a page as a pop-up.
Default is "type=normal;" or "type=n;" for non-pop-up page.
This allows pages the same size as the screen to be defined as a pop-up.
Pages smaller than the screen size will still always be declared as pop-ups; the "type" parameter is ignored in this case.


Support for Pages Larger Than Screen Size - v49.43
* Added functionality to support pages defined greater than page size. The posX and posY in the page style can be used to scroll the
page around.
STYLE(stPg,PAGE){sizeX=960;}
LOAD(stPg.posX,-480);; // Show right half of page
* Modified page style so that only sizeX or sizeY needs to be defined (the other size defaults to the screen size). Previously both sizeX
and sizeY needed to be defined to override the default page size.

Order Page Layers PAGE(name){ent1;ent2;...} - v49.46
* Implemented Page re-ordering functionality.
* Use the PAGE(name) command with no style specified.
* The parameters are:
entName; // Specify the entity on the page
entName,action; // Specify the entity plus the action to perform.
* The format and parameters are:
PAGE(pgName)
{
ent0,u; // up - move entity one place forward
ent1,d; // down - move entity one place backward
ent2,f; // first - move entity to the first position (the front)
ent3,l; // last - move entity to the last position (the back)
ent4,b; // below - move entity behind previous entity in list (ent3)
ent5,a; // above - move entity in front of previous entity in list (ent4)
}

The second 'action' parameter is optional, and defaults to 'b' - below with the first one in the list defaulting to 'f', the top.
PAGE(pgName)
{
ent0; // 'f'
ent1; // 'b'
ent2; // 'b'
ent3; // 'b'
}

In the above, ent0 will appear at the top with ent1 behind ent0, ent2 behind ent1, and ent3 behind ent2. Any other entities on the page
will then be shown behind these with their order unchanged.

PAGE(){} reordering parameters now use '=' separator - v49.47
For consistency with STYLE() and SETUP(), the PAGE(){} reordering parameters now support '=' between the parameter name and
parameter type.
PAGE(name)
{
name=f;
name,f;
}

Screen Capture LOAD( SDHC, PAGE ); - v49.51
* Added TFT screen capture to Bitmap file on SD Card.
* Use LOAD(SDHC,PAGE);
* Files are stored in the "SDHC/page/" directory. If it does not exist then it is created.
* Files are stored as "SDHC/page/pagename_num.bmp" where pagename is the name of the page being displayed on the screen and num is an incrementing number. eg if the page "pgTest" is being displayed then the file will be "SDHC/page/pgTest_1.bmp". A second capture would create "SDHC/page/pgTest_2.bmp".
* The stored bitmap takes into account the rotation of the screen.
* If there is enough free memory then a buffer is created and the display memory is copied instantly to the buffer and this is saved to SD card as a bitmap. This prevents screen updates modifying the required screen capture. If there is not enough free memory then the actual display memory is used and copied to SD card as a bitmap.
* Note, due to the large file sizes involved, writing the bitmap to the SD card will take typically 5-7 secs on 3.5", 9-11 secs on 4.3", 23-26 secs 5.7" and 28-32 secs on 7" displays.


Using  update=changed
To gain the faster refreshing, a few rules apply.
1/ Only the screen area where the changed entity is located is redrawn.
2/ The entity is redrawn on top of any existing pixels being displayed in that area.
3/ Entities with transparent backgrounds will show all previous rendering at that location in the transparent area.
4/ Hiding an entity will not produce any visible difference until a full page refresh is performed.

To support the “update=changed;” method.
1/ Do not use images with transparent backgrounds
2/ Specify the “back” colour in the style for text.
3/ To hide an entity, a “masking” image will need to be placed over the entity.
4/ To refresh only the entities on a page that have been modified, use the double semi-colon “;;” refresh method after the last update object, e.g. IMG(imgt1,myimg );;.
5/ To refresh the whole page, use the SHOW( page ); method.

 
Example PAGE(MainPage,stPage)
 {
   POSN( 200, 208 );  KEY( StopKey, StopEvent, 95, 95, TOUCH );    //call function StopEvent
   POSN( 76, 252 ); KEY( SaveKey, SaveEvent, 62, 24, TOUCH );       //call function SaveEvent
   POSN( +80, +0 ); KEY( CalibKey, CalibEvent, 62, 24, TOUCH );       /call function CalibEvent    
   POSN( +80, +0 ); KEY( ClockKey, [Show(Clock);], 62, 24, TOUCH );  //inline code to show clock
 }
 
Update Information

 Version

 Title

Date  

 Details

00.14.00

 Pop-Up Pages

06 Oct 15 

Show

Fixed problem of background filling whole screen for pop-up pages.

49.58

 PAGE

07 Sep 15 

Show

* Reduced RAM consumption when a page has a fixed colour background

49.58

 PAGE REFRESH

07 Sep 15 

Show

* Page is no longer redrawn if same page is refreshed and page is still in the process of being drawn

00.01.00

 Faster alpha blending of entities

13 Feb 15 

Show

Improvements have been made to alpha-blending 32-bit entities onto the screen.

Results on a 480x272 module:
* Test using box with border width 8px, width 480px, height 80px
Screen Rotated 0: was 40.0-40.2ms; now 26.4-26.6ms
Screen Rotated 180: was 40.0-41.8ms; now 26.4-27.2ms
* Test using box with border width 8px, width 272px, height 150px
Screen Rotated 90: was 46.8-47.0ms; now 30.8-31.0ms
Screen Rotated 270: was 46.8-47.0ms; now 30.8-31.0ms
* Test using "rotating coin" within the confines of the screen
Screen Rotated 0: was 7.4-12.0ms; now 6.4-7.4ms
Screen Rotated 180: was 7.4-12.0ms; now 6.4-7.4ms
Screen Rotated 90: was 7.4-12.2ms; now 6.4-7.8ms
Screen Rotated 270: was 7.4-12.2ms; now 6.4-7.8ms
* Test using "rotating coin" partially outside of the screen area
Screen Rotated 0: was 7.2-11.6ms; now 6.2-7.2ms
Screen Rotated 180: was 7.2-11.6ms; now 6.2-7.2ms
Screen Rotated 90: was 12.6-17.4ms; now 6.4-7.8ms
Screen Rotated 270: was 7.2-11.8ms; now 6.4-7.8ms

00.01.00

 Page background corrupted when screen rotated

13 Feb 15 

Show

---

00.01.00

 Faster page background rendering (using Pixel Pipeline)

13 Feb 15 

Show

Enable hardware pixel pipeline to speed up page refresh.

49.52

 Built-In Styles - Parameters Are Optional

25 Feb 14 

Show

Modified "built-in" styles to make parameters optional. Simply miss out the parameter between the underscores.

TEXT(txt4,"",DST___128__CC); // Create Text with only maxLen and curRel changed from defaults
PAGE(pg3,DSP__libBg){...} // Create Page with only image changed from defaults;
DRAW(dr4,40,40,DSD_B__RED__BR); // Create Draw, type = box; only specifiying some parameters
KEY(key2,func,100,100,DSK_C____TL); // Create Key, action = change; curRel = TL

49.51

 SHOW() and HIDE() Groups of Entities

18 Feb 14 

Show

Added array of pointer support to SHOW() and HIDE() commands.
This allows for groups of entities to be shown and hidden on a page by passing the single name for the array of pointers.

VAR(group>"",PTR,3);
LOAD(group.0>"img1");
LOAD(group.1>"text1");
LOAD(group.2>"shape1");

HIDE(group);; // Hide img1, text1, shape1
SHOW(group);; // Show img1, text1, shape1

Test code:

STYLE(stPage,PAGE){}
STYLE(stCirc1,DRAW){type=circle;col=white;width=1;back=red;}
STYLE(stCirc2,DRAW){type=circle;col=white;width=1;back=green;}
STYLE(stCirc3,DRAW){type=circle;col=white;width=1;back=blue;}
STYLE(stCirc4,DRAW){type=circle;col=white;width=1;back=yellow;}
STYLE(stText,TEXT){ maxRows=4; ySpace=4; }
STYLE(stBox,DRAW){type=box;col=lime;width=1;}

VAR(x,49,S32); VAR(y,49,S32);

PAGE(pgTest,stPage)
{
LOAD(x,49); LOAD(y,49); DRAW(circle1,80,stCirc1,x,y);
CALC(x,DISPX,50,"-"); LOAD(y,50); DRAW(circle2,60,stCirc2,x,y);
LOAD(x,90); CALC(y,DISPY,90,"-"); DRAW(circle3,150,stCirc3,x,y);
CALC(x,DISPX,70,"-"); CALC(y,DISPY,70,"-"); DRAW(circle4,100,stCirc4,x,y);

CALC(x,DISPX,2,1,"/-"); CALC(y,DISPY,2,1,"/-");
DRAW(box1,DISPX,DISPY,stBox,x,y);
TEXT(text1,"",stText,x,y);
KEY(key1,fncKey1,DISPX,DISPY,TOUCH,x,y);
}
LOAD(text1,
"Vers: ",VERS_IAPP,"\\0d\\0a",
"Width: ",DISPX,"px\\0d\\0a",
"Height: ",DISPY,"px\\0d\\0a",
"Rotate: ",DISPR,"deg"
);
SHOW(pgTest);

VAR(toggle,0,U8);
VAR(group>"",PTR,4);
LOAD(group.0>"circle1");
LOAD(group.1>"circle2");
LOAD(group.2>"circle3");
LOAD(group.3>"circle4");

FUNC(fncKey1)
{
//IF(toggle==0?[LOAD(toggle,1);HIDE(circle1,circle2,circle3,circle4);;]:[LOAD(toggle,0);SHOW(circle1,circle2,circle3,circle4);;]);
IF(toggle==0?[LOAD(toggle,1);HIDE(group);;]:[LOAD(toggle,0);SHOW(group);;]);
}

49.51

 Built-In TEXT, PAGE, DRAW, and IMAGE Styles

10 Feb 14 

Show

A larger range of "default" styles has been added.

The built-in styles are prefixed by four characters as follows:
* Text Styles are prefixed by "DST_"
* Page Styles are prefixed by "DSP_"
* Draw Styles are prefixed by "DSD_"
* Image Styles are prefixed by "DSI_"

The styles are not created at start up. The style is only created the first time it is referenced from the users' project.

The style are created from the parameters within the style name itself, ie the colour black is taken from the actual name DSP_BLACK, so DSP_PINK would create a colour pink. These colours are from the colour table on the website.

Here are the rules/examples for each

Add a default TEXT style
DST_
DST_col
DST_col_fnt
DST_col_fnt_len
DST_col_fnt_len_row
DST_col_fnt_len_row_cur
Where
col = 'col' name or 3-digit hex or 6-digit hex (see "Colours" below)
fnt = 'font' 8, 16, 32 for Ascii8, Ascii16, Ascii32 or font name (see "Fonts" below)
len = 'maxLen'
row = 'maxRows'
cur = 'curRel'
Examples
TEXT(txt1,"Hello",DST_BLACK_16); // Create Text, colour = black; font = built-in Ascii16;
TEXT(txt2,"",DST_F30_fnt32_8_4); // Create Text, colour = \\FF3300, font = fnt32; maxLen = 8; maxRows = 4
TEXT(txt3,"",DST_RED_F32_8_4_TL); // Create Text, colour = \\FF3300, font = F32; maxLen = 12; maxRows = 4; curRel = TL

Add a default PAGE style
DSP_
DSP_col
DSP_col_img
Where
col = 'col' name or 3-digit hex or 6-digit hex (see "Colours" below)
img = 'image' image name
Examples
PAGE(pg1,DSP_BLACK){…} // Create Page, back = black;
PAGE(pg2,DSP_AB0056_libBg){…} // Create Page, back = \\AB0056, image = libBg;

Add a default DRAW style
DSD_
DSD_typ
DSD_typ_wid
DSD_typ_wid_col
DSD_typ_wid_col_fil
DSD_typ_wid_col_fil_cur
Where
typ = 'type' of shape (best to use the single letter here)
wid = 'width' of border
col = 'col' colour of border (see "Colours" below)
fil = 'back' colour of fill (see "Colours" below)
cur = 'curRel'
Examples
DRAW(dr1,100,20,DSD_BOX); // Create Draw, type = box;
DRAW(dr2,120,DSD_C_2_RED); // Create Draw, type = circle; width = 2; border colour = red;
DRAW(dr3,60,40,DSD_B_1_RED_FD0_TL,20,40); // Create Draw, type = box; width = 1; border = red; back = \\FFDD00; curRel = TL;

Add a default IMAGE style
DSI_
DSI_cur
Where
cur = 'curRel'
Examples
IMG(img1,libImg1,DSI_TL); // Create Image, curRel = TL;


The only limitations to this method is that the style name needs to fit within the 18 character entity name limit.

Colours
Where the styles take a colour for a parameter, then the value can be represented in one of three ways.
* The name of the colour can be specified as in the colour chart on the website, eg BLACK, BLUE, GOLD etc
* A 6 digit hexadecimal number can be used, eg 123ABC which converts to \\123ABC
* A 3 digit hexadecimal number can be used, eg FD0 which converts to \\FFDD00

Fonts
Where the style takes a font for a parameter, then one of two options are assumed.
* If the value is either 8, 16, or 32 then the built-in fonts Ascii8, Ascii16 or Ascii32 are used
* Otherwise the value is assumed to be the name of a font loaded by the LIB command, eg fnt64 from LIB(fnt64,"SDHC/name.fnt");


Examples from testing:

PAGE(p1,DSP_){}
STYLE(DSP_,PAGE){}

PAGE(p2,DSP_BLACK){}
STYLE(DSP_BLACK,PAGE){back=BLACK;}

PAGE(p3,DSP_FD0){}
STYLE(DSP_FD0,PAGE){back=\\FFDD00;}

PAGE(p4,DSP_ABC123){}
STYLE(DSP_ABC123,PAGE){back=\\ABC123;}

LIB(Im1,"SDHC/page/pgMain_1.bmp");
PAGE(p5,DSP_000_Im1){}
STYLE(DSP_000_Im1,PAGE){back=\\000000;image=Im1;}

PAGE(p6,DSP_blue_Im1){}
STYLE(DSP_blue_Im1,PAGE){back=blue;image=Im1;}


IMG(i1,Im1,DSI_);
STYLE(DSI_,IMAGE){}


TEXT(t1,"",DST_);
STYLE(DST_,TEXT){}

TEXT(t2,"",DST_BLACK);
STYLE(DST_BLACK,TEXT){col=BLACK;}

TEXT(t3,"",DST_blue_32);
STYLE(DST_blue_32,TEXT){col=blue;font=Ascii32;}

LIB(Fnt16,"SDHC/asc_16b.fnt");
TEXT(t4,"Hello",DST_red_Fnt16);
STYLE(DST_red_Fnt16,TEXT){col=red;font=Fnt16;}

TEXT(t5,"Hi",DST_fd0_Fnt16,4,5);
STYLE(DST_fd0_Fnt16,TEXT){col=\\ffdd00;font=Fnt16;}


DRAW(d1,100,DSD_);
STYLE(DSD_,DRAW){}

DRAW(d2,200,DSD_C);
STYLE(DSD_C,DRAW){type=C;}

DRAW(d3,100,50,DSD_B);
STYLE(DSD_B,DRAW){type=B;}

DRAW(d4,30,40,DSD_B_2);
STYLE(DSD_B_2,DRAW){type=B;width=2;}

DRAW(d5,120,DSD_C_1_red);
STYLE(DSD_C_1_red,DRAW){type=C;width=1;col=red;}

DRAW(d6,30,40,DSD_B_2_Red_Blue);
STYLE(DSD_B_2_Red_Blue,DRAW){type=B;width=2;col=Red;back=Blue;}

DRAW(d7,10,30,0,140,DSD_E_20_FD0_FFF,30,30);
STYLE(DSD_E_20_FD0_FFF,DRAW){type=E;width=20;col=\\FFDD00;back=\\FFFFFF;}

49.51

 Screen Capture LOAD( SDHC, PAGE );

06 Feb 14 

Show

* Added TFT screen capture to Bitmap file on SD Card.
* Use LOAD(SDHC,PAGE);
* Files are stored in the "SDHC/page/" directory. If it does not exist then it is created.
* Files are stored as "SDHC/page/pagename_num.bmp" where pagename is the name of the page being displayed on the screen and num is an incrementing number. eg if the page "pgTest" is being displayed then the file will be "SDHC/page/pgTest_1.bmp". A second capture would create "SDHC/page/pgTest_2.bmp".
* The stored bitmap takes into account the rotation of the screen.
* If there is enough free memory then a buffer is created and the display memory is copied instantly to the buffer and this is saved to SD card as a bitmap. This prevents screen updates modifying the required screen capture. If there is not enough free memory then the actual display memory is used and copied to SD card as a bitmap.
* Note, due to the large file sizes involved, writing the bitmap to the SD card will take typically 5-7 secs on 3.5", 9-11 secs on 4.3", 23-26 secs 5.7" and 28-32 secs on 7" displays.

49.47

 PAGE(){} reordering parameters now use '=' separator

01 Nov 13 

Show

For consistency with STYLE() and SETUP(), the PAGE(){} reordering parameters now support '=' between the parameter name and parameter type.

PAGE(name)
{
name=f;
name,f;
}

49.46

 Order Page Layers PAGE(name){ent1;ent2;...}

23 Oct 13 

Show

* Implemented Page re-ordering functionality.
* Use the PAGE(name) command with no style specified.
* The parameters are:
entName; // Specify the entity on the page
entName,action; // Specify the entity plus the action to perform.
* The format and parameters are:
PAGE(pgName)
{
ent0,u; // up - move entity one place forward
ent1,d; // down - move entity one place backward
ent2,f; // first - move entity to the first position (the front)
ent3,l; // last - move entity to the last position (the back)
ent4,b; // below - move entity behind previous entity in list (ent3)
ent5,a; // above - move entity in front of previous entity in list (ent4)
}

The second 'action' parameter is optional, and defaults to 'b' - below with the first one in the list defaulting to 'f', the top.

PAGE(pgName)
{
ent0; // 'f'
ent1; // 'b'
ent2; // 'b'
ent3; // 'b'
}

In the above, ent0 will appear at the top with ent1 behind ent0, ent2 behind ent1, and ent3 behind ent2. Any other entities on the page will then be shown behind these with their order unchanged.

49.43

 Support for Pages Larger Than Screen Size

12 Sep 13 

Show

* Added functionality to support pages defined greater than page size. The posX and posY in the page style can be used to scroll the page around.
STYLE(stPg,PAGE){sizeX=960;}
LOAD(stPg.posX,-480);; // Show right half of page
* Modified page style so that only sizeX or sizeY needs to be defined (the other size defaults to the screen size). Previously both sizeX and sizeY needed to be defined to override the default page size.

49.42

 Page Memory Savings

06 Sep 13 

Show

* When a page just consists of a background colour or an image the size of the page then memory the size of the page is no longer allocated.
* If the page background contains an image less than the page size, then memory will be allocated, the area filled with the background colour and the image copied into the centre as it currently does.

This means that the following memory can be saved, if just a background colour is specified:
3.5" – 307,200 bytes per page
4.3" – 522,240 bytes per page
5.7" – 1,228,800 bytes per page
7.0" – 1,536,000 bytes per page

49.37

 POSN in DRAW, IMG, TEXT and KEY Commands

10 Jun 13 

Show

* Added initial positioning to commands:
a) DRAW(name,width,style,x,y);
DRAW(name,width,height,style,x,y);
DRAW(name,width,height,start,arc,style,x,y);
b) IMG(name,src,style,x,y);
c) TEXT(name,text,style,x,y);
d) KEY(name,func,width,height,style,x,y);
KEY(name,downFunc,upFunc,width,height,style,x,y);
KEY(name,downFunc,upFunc,repFunc,width,height,style,x,y);

49.34

 Parser - Fixed problem with passing page creation parameters between functions.

23 Feb 13 

Show

Parser
* Fixed problem with passing page creation parameters between functions which caused entities to not be displayed.

49.32

 Internal Message Items - Increased nesting depth/loops/functions from 24 to 28.

14 Feb 13 

Show

* Increased nesting depth/loops/functions from 24 to 28.
* Current number of used msg items can be read in S32 Variable SYSINTMSG.

49.14

 Page Backgrounds - Fixed problem rendering page background images not equal to screen size.

27 Jul 12 

Show

* Fixed problem rendering page background images not equal to screen size.

49.14

 Opacity - Corrected problem with assigning initial opacity value to text, images, draw, pages.

27 Jul 12 

Show

* Corrected problem with assigning initial opacity value to text, images, draw, pages.

49.08

 Not Function Error - Fixed error which was due to a pointer error when changing/refreshing a page without page loop

11 Jul 12 

Show

Fixed "Not Function" Error which was due to a pointer error when changing/refreshing a page without page loop. This problem could cause other unexplained errors. This bug was present in the code from before V00.47.24.

49.03

 Pop-Up Pages - Page style parameter ''type=popUp;'' or ''type=p;'' added to define a page as a pop-up.

01 Jun 12 

Show

Page style parameter "type=popUp;" or "type=p;" added to define a page as a pop-up.
Default is "type=normal;" or "type=n;" for non-pop-up page.
* This allows pages the same size as the screen to be defined as a pop-up.
* Pages smaller than the screen size will still always be declared as pop-ups; the "type" parameter is ignored in this case.

49.03

 LOOP() - ''Array Error - Subscript Out Of Range'' message

01 Jun 12 

Show

"Array Error - Subscript Out Of Range" message
At the start of each pass through a loop, a check is performed to see if a touch screen key is being pressed and, if it is, then the associated touch key function is called. Caution must be observed with the touch key function to not modify variables that are being used within the loop otherwise undesired results can occur which can be difficult to spot or result in an error message.* Example 1 - Variables
VAR( varX, 0, U8 );
// We have a simple function...
FUNC( fnTest1 )
{
LOAD( varX, 0 );
LOOP( lpTest1, 10 )
{
// [Touch Keys are effectively tested here]
LOAD( RS2, varX );
CALC( varX, varX, 1, "+" );
}
}

// In a page we have...
KEY( kyTest1, [ LOAD( varX, 0 ); ], 100, 100, TOUCH );
// Normally we would get 0123456789 sent out of the RS2 port each time fnTest1 is run
// If however the key kyTest1 is pressed when the loop is being run then the output may be changed to 0123012345!

* Example 2 - Arrays
VAR( varArr, 0, U8, 5 );
VAR( varY, 0, U8 );
// We have another simple function...
FUNC( fnTest2 )
{
LOAD( varY, 0 );
LOOP( lpTest2, 5 )
{
// [Touch Keys are effectively tested here]
LOAD( RS2, varArr.varY );
CALC( varY, varY, 1, "+" );
}
}

// In a page we have...
KEY( kyTest2, [ LOAD( varY, 0 ); ], 100, 100, TOUCH );
KEY( kyTest3, [ LOAD( varY, 3 ); ], 100, 100, TOUCH );

// Normally we would get the contents of varArr.0 varArr.1 varArr.2 varArr.3 varArr.4 sent out of the RS2 port each time fnTest2 is run
// If however the key kyTest2 is pressed when the loop is being run then the output may be changed to varArr.0 varArr.1 varArr.0 varArr.1 varArr.2!
// Or, an error when kyTest3 is pressed giving varArr.0 varArr.1 varArr.3 varArr.4 ** Array Error - Subscript Out Of Range ** (ie varArr.5 doesn't exist!)

* Good coding practice
> Make sure variables used in a loop are not modified from a touch key function (unless this is a desired action)
> If a variable does need to be changed then set a 'flag' in the key function and test the flag in the page loop and make the change there instead.

49.00

 Pages Redraw - Modified behaviour of pages with update=changed.

22 Mar 12 

Show

Modified behaviour of pages with update=changed so that longer redraw time is removed for first refresh

47.24

 Loops - Loop duration of ''FOREVER'' now accepted for all loops (not just page loop).

31 Oct 11 

Show

Loop duration of "FOREVER" now accepted for all loops (not just page loop)
* Touch screen events are processed every loop.

47.24

 Exit() - end loops and functions - Exit command added to exit loops or functions

31 Oct 11 

Show

Exit command added to exit loops or functions
> exit(); // exit current loop/function
> exit(name); // exit nested loops/functions up to and including loop/function with name
* Examples:
> loop(lp1,FOREVER){ calc(x,y,z,"+"); if(x=5?[exit(lp1);]); } // exit loop when x=5
> loop(lp2,FOREVER){ calc(x,y,z,"+"); if(x=5?[exit(lp2);]); } // exit loop when x=5 (as above)
> func(fn1) { if(x=5?[exit(fn1);]); ...... } // exits function when x=5 without running rest of code
> func(fn2) { loop(lp3,100){ load(rs2,"*"); if(quit=1?[exit(fn2);;]); // sends 100 *'s through RS2 unless quit is set to 1, then loop and the function are exited (A screen refresh occurs before the exit)

* Note, if the name provided in the exit(name); command does not exist in the current function/loop nesting, then all loops
and functions are exited up to the top level. It is not possible to exit the page loop in this way.

47.00

 Page Refreshing - A new mode has been added for pages.

09 Jul 11 

Show

A new mode has been added for pages which allows for either
All entities to be redrawn on a page when a double semicolon (;;) refresh is encountered
(default), or
Only the entities that have been modified since last refresh to be redrawn when a double
semicolon (;;) is encountered.
A SHOW(page); command will always redraw all the entities on a page.
STYLE(name,PAGE) { update=all; } // default: refreshes all entities on a ;;
STYLE(name,PAGE) { update=changed; } // refreshes only changed entities on a ;;

45.00

 Update Page - Unused page removed from system to save page worth of memory.

10 Jun 11 

Show

Unused page removed from system to save page worth of memory.

45.00

 Pointers - Fixed a potential pointer issue in the main page loop.

10 Jun 11 

Show

Fixed a potential pointer issue in the main page loop.

45.00

 Loops - Added capability for nested loops and loops in functions.

10 Jun 11 

Show

Added capability for nested loops and loops in functions
Loop Example 1
var(ii,0,U8);
var(jj,0,U8);
var(kk,0,U8);
func(fn1)
{
load(ii,0);
loop(lp0,10)
{
load(jj,0)
loop(lp1,10)
{
load(kk,0);
loop(lp2,10)
{
load(rs2,ii,",",jj,",",kk,"\\0d\\0a");
calc(kk,kk,1,"+");
}
calc(jj,jj,1,"+");
}
calc(ii,ii,1,"+");
}
load(rs2,"\\0d\\0a");
}

Outputs: 0,0,0\\0d\\0a0,0,1\\0d\\0a0,0,2\\0d\\0a...9,9,9\\0d\\0a\\0d\\0a

Loop Example 2

key(k0,[loop(klp,10){load(rs2,"*");}load(rs2,"\\0d\\0a");],480,136,TOUCH);

Outputs on key press: **********\\0d\\0a

42.00

 Page Errors - The background fill routine now correctly fills all size pages.

09 Mar 11 

Show

The background fill routine now correctly fills all size pages.
Display and render buffers now guaranteed to align with DMA burst length (misalignment causes occasional pixel errors).

39.00

 Interrupts - Serial interrupts INT() can now be declared either globally or locally to a page.

21 Jan 11 

Show

Serial interrupts INT() can now be declared either globally (outside of a PAGE(){}) or locally to a page (inside a PAGE(){}).
If an interrupt is declared within a page then it will only be called when the page is being shown.
If an interrupt is declared outside of a page then it will be called no matter which page is being shown.
There is a special case when the same interrupt source is declared both globally and within a page.
In this case, the page interrupt takes precedence and the global interrupt is not called.

37.00

 Page Rotation - Page rotation removed. Use screen rotation instead.

13 Dec 10 

Show

Page rotation removed. Use screen rotation instead in
SETUP(SYSTEM){rotate=180;}

37.00

 Page Merging - LOAD(Page1,Page2,Page3,…);.

13 Dec 10 

Show

LOAD(Page1,Page2,Page3,…); will copy all entities from Page2 into Page1, then Page3 into Page 1, then Page4 into Page 1

27.00

 Smaller Pages / Pop Ups - Added popup pages.

10 Sep 10 

Show

Added popup pages - ie smaller than 480 * 272.
When smaller page is displayed SHOW(SmallPage); it is overlayed onto the existing page which is then ‘frozen’. Use SHOW(PREV_PAGE); to return.

25.00

 POSN Command - Command now supports moving entities on the page.

03 Sep 10 

Show

Command now supports moving entities on the page
If Name is not a Page, the entity Name on the current page is moved to position x,y. If Name is a Page, the cursor is set to position x,y

POSN(x,y,Name); moves entity to x,y

21.00

 FUNC LOOP - Allow single line FUNC(){} and LOOP(){}

30 Jul 10 

Show

Allow single line FUNC(){} and LOOP(){}
e.g. FUNC(Help) { SHOW (HelpPage); }

21.00

 STYLE - Fixed error with default style initialization.

30 Jul 10 

Show

Fixed error with default style initialization. Style parameter names for POSN, PAGE, TEXT, DRAW, IMAGE, KEY set up