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!

ncdialogapi-0.0.35.tar.bz2 (updated 2021-09-01)

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.  

gString-0.0.31.tar.bz2 (updated 2021-05-28)

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 wide (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 provisionally 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.


FileMangler (fmg) source code (C++), installation script (perl) and documentation in 'info' (Texinfo) and HTML formats.

FileMangler is a compact, fast and flexible tool for handling all your file management needs including scheduled and ad-hoc file backup and synchronization activities. FileMangler is based on the NcDialog API (see above), and runs as a menu-driven dialog in the GNU/Linux terminal environment. FileMangler provides interactive access to many system tools such as Less, Grep, Find, Diff, Stat, Chmod, Hexdump, Mount, Tar and much more. FileMangler also provides full support for managing the local Trashcan. This makes FileMangler ideal for those who are new to Linux and have not yet mastered the incredibly-powerful, yet endlessly-frustrating world of the Linux command line. At the same time, experienced command-line gurus will appreciate how the integration of these utilities into a single, fluid command structure streamlines even complex system maintenance tasks.
Also, and in all modesty, FileMangler's documentation is vastly superior to that of any other file management application, hobbiest or commercial, for any system, anywhere. (and that's as modest as we ever get :-)


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 MP3 (id2v2.3/4), OGA (OGG/Vorbis I, 2015) and WMA (ASF 1.20.03) audio
  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.


WaylandCB class source code (C++), Makefile, test application,
and documentation in 'info' (Texinfo) and HTML formats.

The WaylandCB clipboard interface class provides a seamless interface between console applications and the Wayland system clipboards. Wayland is the communications protocol which is replacing X-Windows on most GNU/Linux desktops, including GNOME 3.20+, KDE Plasma 5+ and others. WaylandCB communicates with the system clipboard through Sergey Bugaev's “wl-clipboard” console apps “wl-copy” and “wl-paste”. This provides full independence from GTK, Qt or other toolkits normally needed to create applications which directly communicate with Wayland. The WaylandCB package also includes our gString tool for encoding/decoding and formatting of text data. WaylandCB may be built against the included ‘Wayclip’ reference and demonstration app. Wayclip verifies accurate compilation of the clipboard interface code and demonstrates access to each of WaylandCB's public methods. Full documentation is also included.


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,
Texinfo documentation.

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.

Important Note

The “Idpp” post-processor has been updated to support ‘makeinfo’ version 6.6 and above.
The Texinfo development group has done a great job cleaning up and organizing the Perl code for ‘texi2any’.     Well done All!
Now that the syntax and layout of the HTML generated by ‘texi2any’ has been stabilized, we have rewritten the post-processor's parsing routines to reflect the new layout. In addition, most of the non-optimal formatting in the raw HTML can now be corrected automatically without user interaction. The command-line options and switches have also been updated to allow a more targeted interaction for formatting decisions which require it.
— Post-processing is also much faster (not that it was slow before).
— List processing has received special attention, and although ‘texi2any’ generally does a good
     job with lists, the HTML5 standard offers a much larger variety of enumeration types
     (approximately 50 types). The post-processor now supports the following in addition to the
     standard alphanumeric types: leading-zero decimal, uppercase and lowercase Roman
     numerals, lowercase Greek, CJK, Katakana, Hebrew and Arabic. A variety of custom bullet-list
     formats (well beyond the three HTML standard types) is also supported. Please review the
     documentation for additional details on this upgrade.
— As a final note, although the Texinfo “@small. . .” block commands are unfortunately no longer
     supported by ‘texi2any’, the ‘idpp’ post-processor now offers both smaller-font AND larger-font
     options for all block commands.


CSS3 style for HTML documents generated by makeinfo/texi2any version 5.x and early 6.0.

Example Applets and Miscellaneous Fun

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.

exercalc-0.0.01.tar.bz2 (initial release 2021-07-01)

Exercalc (ecalc) source code (C++), Makefile,
and detailed documentation in 'info' (Texinfo) and HTML formats.

‘ecalc’ is a console (terminal) dialog-based application built using the author's NcDialog API (ncurses). The application provides a framework for tracking and analysis of daily exercise data. Using a series of configuration options such as height, weight, type of exercise, velocity, intensity of effort and your personal exercise goals Exercalc can analyze the data and display your progress both mathematically and in the form of a standard bar chart.
Exercalc is designed specifically as a teaching tool for the software-design student who wants to create a software application with a user-friendly, multilingual user interface. As such, a general user may find Exercalc to be lacking polish; however, software engineering students may benefit from the simple, C++ coding style, the algorithms for multi-language support and the source code's extensive internal documentation.
Author's Note: This application was written out of boredom caused by the multiple corona-virus quarantines we have endured, both here in China and in the U.S. While the author appreciates a quiet work environment, this level of isolation is just ridiculous!


'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.

termsize-0.0.01.tar.bz2 (new 2021-10-18)

‘TermSize’ source code (C++), Makefiles, release notes.

The ‘TermSize’ application is a GNU/Linux console (command-line) utility written in C++ which reports on terminal-window resize events. ‘TermSize’ is built on the NcDialog API, but unlike other applications on this site, ‘TermSize’ uses only the basic NCurses-class methods for startup, shutdown and display output. This greatly simplifies the source code (about 500 lines of code).
This application was written to compensate for the fact that the GNOME terminal application no longer interactively reports the size of the window as the user resizes it. In addition, gnome-terminal incorrectly uses a hard-coded 12-point font when calculating the initial size of the window. (‘Konsole’, on the other hand, continues to report window-resize event correctly.) So a big Raspberry 😜 to the gnome-terminal maintainers, but also a big thanks for providing us the incentive to spend a pleasant afternoon writing this little utility program.

Additional downloads will be posted soon. Check back often!

“An enthusiastic and knowledgeable beta-tester is a treasure beyond golden-crust pizza.” — Software Sam Software Sam wishes to express his most sincere appreciation to our beta-testers, both here at BJUT and throughout the GNU/Linux community. Without you, we would crash and burn. With you, we look almost intelligent. Thank you!

Reporting Problems

If you are unable to download the desired package, if the package is corrupted, or if there is a  (GASP!)  bug in the code or documentation, please post a message on the Contact Us Page and we will correct the problem as soon as possible.

Help for Data Downloads

— Archive packages may be directly downloaded by one of two methods:
    1) Left-click on the link (package name).  Your browser should open a dialog to ask what
        you want to do with the package.  Select the 'save file' option in the dialog.
    2) Right-click on the link and select 'save as' from the context menu.
— Few packages are greater than two megabytes (2 Mbytes), and should therefore take only
    a few seconds to download, even through slow connections.
— If applicable, be sure to select the package which matches the target system's hardware.
— Archive packages are created using the 'tar' utility.
    (auto-install  '.rpm'  packages are not available at this time)
— Most packages are also compressed using '.bz2' compression.

Unpacking a Compressed Archive

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.

- All posted software source code, libraries and executables released under GNU General Public License GPL3.
- All posted software documentation released under the GNU Free Documentation License FDL1.3.
- Other site contents, all rights reserved (but if you see something you like, we can negotiate.)