Implementing a boot theme
This section describes how each of the obligatory theme functions must be implemented.
ThemeInit
This, as the name implies, is the standard location to perform initializations.
Below is an example on how you can use the standard $PREVLEVEL
variable (from
the Sysvinit init
program) to echo some message when system initializes or
goes down.
if [ "$PREVLEVEL" = "N" ]
then
echo "GoboLinux is initializing..."
else
echo "GoboLinux is going down..."
fi
ThemeFile
GoboLinux boot scripts work by processing a sequence of files (again, check
section
“Customizing the initialization”
for more details). Before starting to process each of these files, the boot
scripts core will call ThemeFile
passing as the first (and only) parameter the
name of the file that is starting to be processed. Needless to say, you are not
obligated to give feedback on what file is being processed (the “Hat” theme,
example, does nothing in its implementation of ThemeFile
.
A very simple example implementation of ThemeFile
follows.
function ThemeFile() {
echo "Entering file '$1'..."
}
ThemeBefore and ThemeAfter
These functions wrap the execution of commands. ThemeBefore
runs before a
program is executed and ThemeAfter
, as expected, afterwards.
ThemeBefore
is given two parameters: an identifier and a message. The
identifier is a numeric id so you can match calls to ThemeBefore
and
ThemeAfter
. Likewise, ThemeAfter
is given two parameters, the identifier and
a numeric result code, indicating success (zero) or failure (other values).
If your theme supports only sequential booting (ie, does not use Fork
and
Wait
to parallelize the execution of the boot tasks), you can ignore the
identifier – most themes do, as sequential boots are more common and that makes
the themes simpler. On parallel boot, however, programs can end in a different
order than they were started; with some escape code trickery, one can represent
graphically the intrincacies of parallel booting (the CheckList theme is an
attempt at that).
Here’s a quick example of ThemeBefore
and ThemeAfter
:
function ThemeBefore() {
shift # ignore id
echo -n "===> $@... "
}
function ThemeAfter() {
if [ "$2" -eq 0 ]
then echo "{SUCCESS}"
else echo "{ERROR}"
fi
}
ThemeFinish
The ThemeFinish
function is called as the last step in a runlevel switch
(after everything else was done). Hence, this is the place to add any
finalization code. A common task performed by ThemeFinish
is writing to the
issue file, whose contents are displayed on the screen just before the login
prompt. The issue file name is passed as the first (and only) ThemeFinish
parameter.
The following example shows a sample ThemeFinish
implementation that just
writes an issue file that clears the screen.
function ThemeFinish() {
clear > $1
echo "Welcome!!" >> $1
}