HOWTO: write programs
Page update November 18, 2010
Puppy Linux is a tiny distribution, but there is a wide choice of
The default live-CD is not setup for compiling programs, however there is an add-on 'devx' file that turns
Puppy into a complete compiling environment. The add-on file also provides Python. Without the add-on, Puppy already has
Ash/Bash and Perl scripting languages. This page has a summary of
the programming options in Puppy...
A language that is all ready for action in Puppy is command-shell
scripting. Unix and Linux shell command-scripting has been around for
ages and is going to be around for a long time to come. What I mean by the
"command shell" is the user interface that you use when at the commandline.
When you are running X, the commandline will be in a terminal window, but
you can also exit from X and be back at a commandline.
The actual program that is running and doing the interacting with you is
known as the command-shell, and for Linux it is usually what is known as the
Bash shell. In Puppy, you have a choice of two shells, Bash or Ash.
Note that when a terminal window is opened in X, Bash is running. If
you exit from X to the commandline, Ash is running. You can explicitly
choose either Bash or Ash in a script by placing "#!/bin/bash" or
"#!/bin/sh" (or "#!/bin/ash") on the first line.
A shell script is an executable program, except that it is a text file and
does not have to be compiled. Shell scripts can be very sophisticated, and
there are lots of them in Puppy.
This page is not a tutorial on how to program with Ash/Bash scripts --there
are plenty of books on the subject and also on the Internet. There are a
couple of Bash scripting HOWTOs to be found here:
"Advanced Bash-Scripting Guide": http://www.tldp.org/LDP/abs/html/index.html
"Bash Programming - Introduction HOWTO": http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
To write a Ash/Bash script, all you need is a text editor, and Puppy has two
console editors, e3 and MP, and two GUI editors, Geany
and NicoEdit. Geany, NicoEdit and MP have
color syntax highlighting for Bash/Ash scripts.
Have fun, write a script for Puppy!
Here is an overview of tools to aid with scripting, with links to online docs:
|e3, mp, NicoEdit,
|Ash , Bash
|Command shells used in Puppy
suite of basic Unix/Linux console applications, can be used in scripts.
Puppy uses many of these, although in many cases the "full" program is
used as the Busybox applet lacks the required functionality.
|A GTK GUI frontend for scripts
|A very basic X11 GUI dialog frontend for scripts
|A console application for cut-to and paste-from the
clipboard or X-selections (primary or secondary). Can be used in scripts.
|This is yet another alternative to xmessage
and Xdialog. Gtkdialog is a GTK2 application and reads an XML file
that describes the dialog format and user interaction, allowing
incredible sophisticated GUIs. I think that gtkdialog is the pick of the bunch!
Note that Puppy currently has two versions of gtkdialog, named
gtkdialog2 and gtkdialog3 -- it is preferred that you use the latter as
this will eventually be the only one in Puppy -- in other words, always
execute the binary "gtkdialog3".
Note, the user manual for gtkdialog3 is rudimentary, but the 'devx'
module has many example programs at /usr/share/doc/gtkdialog3/examples in Puppy.
Forum member 'zigbert' has a nice tutorial with tips on how to use gtkdialog: GtkDialog tips.
|A more powerful alternative to xmessage. There are two flavours, the original yaf-splash and our re-written enhanced yaf-splash. Note that they have the same filename but the original is always to be found at /usr/X11R7/bin.
Here are some scripts used in Puppy:
All of the tools for compiling C/C++ applications are to be found in an add-on file named *devx*.sfs (* denotes optional extra text used to describe release version ec.). This is what we call an SFS file, and you can read an overview of these online in this page: http://puppylinux.com/development/package-management.htm
To use this file is very simple. Download it from the Internet (it is
about 90MB) and save to /mnt/home (the same place as the "pupsave.2fs" file, that is, your saved session).
Or, if you have installed Puppy to hard drive with what we call a
"full" installation (Puppy occupying his own partition, no
ramdisk), then download the *devx*.sfs file ...then some manual steps are required, see here: http://www.puppylinux.com/hard-puppy.htm.
After downloading *devx*.sfs and placing it in the right place, reboot Puppy, and that's it, you're ready to go.
All of the normal compiling tools work, such as "configure" and "make".
Note, it is necessary that the PC have either a Linux swap partition and/or a lot
of RAM. C/C++ compiling needs a lot of temporary space.
It is also recommended that you place the source package (that you want to compile) in a mounted
Linux partition, not in /root. This is in the case of running from a
live-CD or a frugal install, in which '/' is actually a layered
filesystem. A layered filesystem sometimes causes problems with
compiling, so it is recommended to mount a hard drive partition for the
purpose -- a Linux partition, not a DOS/Windows partition!
If you compile a package and would like to make it available for others
to use, it is very easy to create a PET package -- read this: http://www.puppylinux.com/development/createpet.htm
If you want to write GTK applications, the 'devx' file also has
'glade-3'. This is a visual GUI-builder. Find out more about Glade
The 'glade-3' program generates an XML file, and Puppy has 'libglade',
a library that an application uses to read the XML file and generate
Note, gtkdialog3 is also able to load a Glade XML file. See the
gtkdialog3 examples at /usr/share/doc/gtkdialog/examples, provided by
the 'devx' file. So, even a Bash script can utilise Glade.
This is the future. Vala and Genie are languages
in every respect superior to C/C++. Vala has a C#-like syntax, Genie
has a Python-like syntax. It is actually the same compiler, it just
accepts two alternative syntaxes.
Vala/Genie is a true compiler environment and generates extremely
efficient executables. They are particularly nice for writing GTK
applications. I have placed the Vala/Genie compiler, with documentation
and the ValaIDE, in the 'devx' SFS file.
Online documentation on Vala/Genie is here:
The ValaIDE is an Integrated Development Environment, with a text
editor that has colour syntax highlghting for both Vala and Genie. If
the 'devx' SFS file is loaded, you will find an entry for ValaIDE in
the 'Utility' menu.
Note that the NicoEdit text editor also has syntax highlighting for
Vala and Genie. The Geany text editor has syntax highlighting for Vala
but not Genie.
Also if the 'devx' sfs file is loaded you will find the Vala Reference Manual at /usr/share/devhelp/books/vala/index.html.
You can find
some exciting new applications on the Puppy forum, that are gradually
finding their way into the official Puppy live-CD.
Nicholas's NicoEdit text editor is one example, a GTK application
Genie. It doesn't stop there, Mark has written PuppyBrowser,
EmbeddedBookmarks and Pictureviewer in Genie.
BaCon is a structured-BASIC compiler ....what! ...why are we promoting
a 1970's programming language? Sometimes older and simpler is actually better.
BaCon is very easy to learn and get productive in a very short time. It
is also one of the easiest ways to write GTK GUI applications, using
HUG (Highlevel Universal GUI).
The main reason that you would write a program in a compilable language
is due to very much faster execution speed compared with a shell
script. It also gives you ready access to all the shared libraries,
which you can't really call from a script.
I have created an introductory page, with links to everything you need to know:
The author of BaCon is Peter van Eerten, and this is his project home:
When you have the 'devx' SFS file loaded, you will find documentation and .bac include files in /usr/share/BaCon.
© Copyright Barry Kauler 2010 bkhome.org All rights reserved
See FAQ for legal statement.