The primary focus of this site is to help those who are building console-based (terminal window)
applications. For good or ill, the command line is the heart of Linux. However, everyday users will
never make the leap from their current, familiar and comfortable-but-toxic OS until we have tamed
the command-line beast.
Command-line applications are smaller AND faster in every way from load time, to execution
speed to development and maintenance time. Embrace your inner Prompt-meister!
Source code and full documentation for an application programmer's toolkit which
encapsulates the GNU/Linux 'ncurses' library to create dialog-based console applications.
Includes a comprehensive test suite and many example applications.
The NcDialog API (Application Programming Interface) is implemented as a link library which
provides console applications written in C++ with easy access to the text-formatting tools and
window objects needed to design dialog-based applications which leverage the ncurses (actually ncursesw)
C-language library without the need to know anything
about the ncurses primitives. The NcDialog API
is a class-based design which provides robust, modularized code for quick-and-painless development of
console applications which incorporate sophisticated user-interface controls such as Textboxes, Pushbuttons,
Radiobuttons, Spinners and a variety of controls for display and selection of scrolled data items. All languages
and the full Unicode/UTF-8 character set are supported for both LTR and RTL languages. The NcDialog API is also
completely thread safe.
Comprehensive documentation is included, and is designed to be useful both for student programmers and
for grizzled code warriors.
Note: The NcDialog API was developed using the ncursesw 5.9 development
package, and is fully functional with v:5.9 ncurses. We have recently built the API against ncursesw 6.0.20160213.
This is the version of the ncurses library shipped with Ubuntu-GNOME 16.4.3LTS. The API builds cleanly and runs
without error with the ncursesw 6.0 library, except
that a few of the underlying
keycode definitions have changed. Approximately eight(8) keycodes are affected. These are: a few of the navigation
keys when conditioned by CTRL and/or ALT modifier keys, and two numeric keypad keys. We are researching this and
hope to post an update by the end of the March.
gString class source code (C++), Makefile, test application,
and detailed documentation in 'info' (Texinfo) and HTML formats.
'gString' is a small, fast and flexible way to seamlessly convert, format and analyze both
UTF-8 and wchar_t text. Conceptually, gString is a C++ class definition similar to
std::string or the GTK glib::ustring. gString is much simpler than these all-purpose classes,
but it includes the all the common features with none of the fat. gString consists of one
source module and one header file. It can be built as a link library or the object file can be
linked directly with your application. gString is an indispensible tool for multi-language
support in console applications or in any application that is designed to be lean-and-clean.
Console Trashcan (ctrash) source code (C++), Makefile,
and detailed documentation in ‘info’ (Texinfo) and HTML formats.
‘ctrash’ provides comprehnsive Trashcan management from within a terminal window.
Manage the system Trashcan directly from the command-line, or invoke ‘ctrash’ from any application.
‘ctrash’ provides a safe and reliable replacement for the ‘rm’, ‘rmdir’,
‘unlink’ and other console utilities by
deleting files, rather than deleting them
completely. ‘ctrash’ includes many options which allow you to automatically empty the Trashcan when you log out,
or to manage the number of items in the Trashcan by removing files older than a specified date — and much more.
Taggit (taggit) source code (C++), Makefile, and documentation in 'info' (Texinfo) and HTML formats.
Edit, add or remove text and image metadata (tag data) for audio files.
1) Supports both MP3 (id2v2.3/4) and OGA (OGG/Vorbis I, 2015) audio formats.
2) Simultaneous editing of an entire album (up to 99 audio source files).
3) User interface is multilingual from the ground up, currently implemented in four (4)
languages: English, Español, Zhōngwén (中文) and Tiếng Việt; with hooks for
additional languages, both LTR and RTL.
While ‘Taggit’ is primarily a model for students who are creating applications with fully-integrated
multilingual user interfaces, Taggit includes one or two interesting features which may be missing from more
“mainstream” tag editors.
Because Software Sam has only limited ability with languages,
some of the captions and instructions may be poorly translated from the English. Sorry about that – these
will be improved as we get more feedback from the community.
crcPlus (crcplus) source code (C++), Makefile, test data
and documentation in 'info' (Texinfo) and HTML formats.
CRC (Cyclic Redundancy Check) algorithms are used to verify data integrity in streaming data
which may be subject to data loss via single-bit or burst-error corruption. CRC is used to protect data in everything
from mobile phone text messages, to streaming video.
‘crcPlus’ provides two fully-configurable CRC Generator reference models:
1) a direct-calculation model for CRC algorithm verification, and
2) a table-driven model which uses a dynamically-created hash table for
performance-oriented CRC generation.
Both of these models are built around the CRC_Gen class definition (C++) which may be “#included” in any
application which needs CRC error detection.
‘crcPlus’ is a natural evolution from our C hack, ‘crcmodel’
(see Applets below), which was in turn based on a reference model by Ross Williams (1993).
Source Profiler (srcprof) source code (C++), Makefile,
and detailed documentation in 'info' (Texinfo) and HTML formats.
‘srcprof’ analyzes your source code modules and calculates the “maintainability” of
the code. A count of source code lines, comments and whitespace is generated for each source file, and a
“maintainability-index” report is created, giving a baseline evaluation of the effectiveness of the source
code layout. ‘srcprof’ analyzes high-level languages like C, C++, Java and VB, as well as assembly
languages, HTML/CSS markup and scripting languages such as Perl, Python, shell scripts and more.
Become the rock-star developer of your organization. Management types will love these
reports because their disorganized little brains will almost be able
to comprehend the significance of progress in source code development when presented in this simple way.
CSS3 style definition file for use with HTML documents generated from Texinfo source.
Includes CSS definitions, HTML post-processor utility (C++ source), HTML test suite,
A bit of painless style for those of us who create (or are considering creation of)
html-formatted documentation using the Texinfo documentation system (makeinfo --html).
As you may know, the raw HTML output from 'makeinfo' is a bit simplistic, but has style
hooks for customizing the look of the document. 'infodoc-styles.css' replaces the
do-nothing style hooks in these documents with actual, style definitions which may be easily
customized to meet your particular needs. You can see this styling in action by clicking any
of the 'View as HTML' buttons on this page.
The following group of downloads consists of various code examples and student exercises.
The items available in this section may change from time to time, based on students' needs.
'crcmodel' source code (C), Makefile.
'crcmodel' is reference implementation for generating CRC (Cyclic Redundancy Check) error detection.
'crcmodel' is based on an original algorithm designed by Ross Williams (1993), updated with significant code
cleanup, the addition of invocation options and other enhancements to assist students and others in integrating CRC
into their own projects.
'crcmodel' provides a simple, accurate model for CRC generation based on a set of flexible setup parameters.
Both 32-bit and 16-bit CRC are supported, as well as reflected and non-reflected bit manipulation. If, for a given
source data stream and setup parameters, your CRC implementation generates the same CRC value as 'crcmodel' then you
can be relatively certain that your implementation is correct!
‘Salmon’ and ‘childApp’ source code (C++), Makefiles, release notes.
The ‘Salmon’ application is a GNU/Linux console (command-line) utility written
in C++ which demonstrates some common examples of spawing an external process from within an application and
redirecting the standard I/O streams to avoid resource conflicts. The application demonstrates the use of the
‘execv’, ‘execl’, ‘execlp’, ‘execvp’, ‘fork’,
‘vfork’, ‘waitpid’ and ‘dup2’ functions, among others. Also demonstrated is a
procedure for defining and opening a secondary terminal window.
To unpack archive packages of the form: package_name.tar.bz2, follow these steps:
1) Open a terminal window
(size to 132-column width for optimal viewing pleasure)
2) Move the package to the (empty) directory where you want to unpack the archive.
(you should have read/write access to this directory)
3) Enter the command: tar -xjvf package_name.tar.bz2
This will unpack all files of the archive into the current working directory, using the
correct directory hierarchy, and listing each file as it is unpacked.
4) Refer to the archive's 'README' file for any package-specific information.