for Front Panel
This is a list of mistakes
discovered by me and others since the book was published. Many
thanks to those of you who went to the trouble of sending me your
comments. These comments all apply to the first edition of the
in the Text
Section 1.8 Feedback
My web site is listed
as http://www.iol.ie/~rmurphy. It should, of course been http://www.iol.ie/~nmurphy.
The real rmurphy was kind enough to add a link from his page to
mine to redirect anyone who was misled by this. Since then my
site has moved to http://www.panelsoft.com.
Section 2.3 An Array
The following 2 lines
of code appear in this section:
In both cases OK_LED
should read OK_FLAG.
Section 4.7 Example
of an FSM for a Toggle Button on a GUI
Figure 4.3 has a transition
from UP to PENDING_DOWN and from PENDING_DOWN to UP. In each case
the arrow is pointing in the wrong direction. In other words the
Press/doNothing() transition should point from UP to PENDING_DOWN,
and the SlideOff/doNothing() transition should point from PENDING_DOWN
Section 5.3 The Next
Level Up - Do you Need Objects?
Figure 5.2 should say
boxCreate instead of createBox
Section 5.4 Refreshing
In the second paragraph
the following lines appear:
'To refresh the
display, two actions must occur. First the man image must be removed
from its current position.'
In the line above 'current'
should read 'old'.
Section 5.4.1 Refreshing
At the bottom of page
98 the last sentence should have the word 'member' added to the
Section B.2.13 borland4
At the bottom of page
302 the reference to "Borland 3.1" should say "Borland
phrase "but it is used by useb3.bat" should read "but
it is used by useb4.bat".
The web link for Vanderheiden,
Gregg C., 'Use of audio-haptic interface techniques to allow nonvisual
access to touchscreen appliances', is out of date. It should be
in the Code
shapes.c the function containerRemoveFrom(). There is for loop
in this function, which is searching for the child to be removed.
When the child is found we want to exit the loop. In order to
do this iterator is assigned to NULL. However, the final assignment
of the for (iterator = iterator->nextContainedPtr;) is executed
before the loop is exited causing a null pointer to be dereferenced.
There is no quick fix, so the loop was recoded as a while loop.
The entire function is available via this link: containerRemoveFrom.
containerUpdateAbsolutePosition() assumes that the container has
a parent. If it does not then the function should just return
doing nothing. The new version of this function is available via
this link: containerUpdateAbsolutePosition.
if clause in drawableErase can be removed since the same check
for a null parent has already been performed in displayRefresh().
root Container is made dirty, say by changing its color, the following
refresh will not update any of the drawables. The problem is that
the root container is a special case. It is the only visible container
that does not have a parent, and therefore need to be checked
for in displayRefresh. To do the check I had to add an extra file
static member called FS_rootContainerPtr, so that the displayRefresh
function would always be able to check if a particular dirty container
was in fact the root Container. The value of FS_rootContainerPtr
is set in containerCreateRoot. The updates are available via this
link: displayRefresh and containerCreateRoot.