Dlist Section

Display lists are user-defined lists of graphical instructions which will run when particular things happen. Each page can specify display lists to run:

  1. before any widgets are put on the screen,
  2. after all the widgets have been drawn, and
  3. after the next-page button has been pressed, but before the new page is loaded.

The other way display lists can run is as an action tied to a BOOLEAN widget.

This page is not a tutorial on display lists, but describes the instructions they are built on.

Context

The display is organised as 320 rows of 240 pixels in each row. X coordinates grow left to right, Y coordinates grow from top to bottom.

Display Coordinates

Display list instructions share a graphics context which is used and/or updated by the various instructions. It keeps track of a handful of values:

Display list structure

The display list section can be introduced in two ways:

Each display list entry is structured as follows:

name {
instructions
}

Where:

Display list instructions

Note: Only the MOVE instruction accepts negative numbers. All other numbers must be positive.

Default display lists

Configuring display lists is optional. If you don't define a DLIST section in your configuration a default defines a few simple screen erase operations which you can use from your page definitions. Here are the default display list definitions:

[DLIST]
blackbg {
	bg base jmp bgfill
}
bluebg {
	bg bluebg jmp bgfill
}
greenbg {
	bg greenbg jmp bgfill
}
redbg {
	bg redbg jmp bgfill
}
brownbg {
	bg brownbg jmp bgfill
}
bgfill {
	rectfillbg 240 320
	blon
}

All but the last simply set a background colour and jump to bgfill. It fills a screen sized rectangle in background colour, then turns the display backlight on. Pretty simple. One possible point of confusion is that names like redbg are used for both display lists and colours. These names are kept in different places, so when a colour is needed (e.g. the BG instruction), the colour will be found; when a display list is needed (e.g. the JMP instruction) the display list will be found.

An empty [DLIST] section will remove all default display lists. This will leave you with the display's default background: a black and white tiny chequerboard pattern.

RLE Section

RLE stands for run length encoding, a simple compression technique often used (as here) for 2-colour images. The dashboard only uses these images from display lists. The reason RLEs aren't included in the DLIST section is because image data tends to be bulky. It is neater to define a named image in the RLE section and refer to it by name in the DLIST section.

Each display list reference to an RLE causes the whole RLE to be expanded in-place. This means that a lot of memory can be used up needlessly if you refer more than once to a particular RLE.

The RLE section is optional and has no defaults. It is introduced with the [RLE] section marker.

Each RLE entry is structured as follows:

name widthxheight {
rle_body
}

where:

The pbm2rle utility converts a standard ASCII PBM image to the dashboard RLE format.

Memory use

The number of bytes required for the RLE body is half the number of visible characters within the braces. As pbm2rle formats it, the size is 32 bytes per full line plus half the number of visible characters on the last line (if it isn't full).