Resources (Old Software Libraries)
This page has some of my older software libraries, which are no longer maintained but are still presented for historical value and possible use. Although my more recent code is 'better', some of these libraries are extremely powerful and have not been replicated in modern code.
To understand the history a bit, I started programming with Python and made many projects. I became more interested in computer graphics and, as I gained experience, started to move my Python graphics code (the three glLib iterations over there) to C++ (glLibC++, never released). This C++ version eventually encompassed a different set of functionality. I started splitting off functionality to other libraries (libib, libash, etc., seen here), and made a new graphics library, libgrfx (never released). As I gained still more experience, I started re-integrating everything into a new foundational library of several components, libbedrock (hopefully released soon).
libib
Very many #include
s, #define
s, and utility functions are required by most sufficiently complicated projects. This library ("libib", short for "includes_build") is an agglomeration of such utilities, and most of my older C++ projects required it to compile. Moving common functionality to a higher-level header, which is then precompiled, also cut down build times.
The library provides architecture-independent #define
s for bits (16, 32, 64), build configuration (debug, release), platform, endianness, and compiler. It also provides useful macros while removing platform-specific cruft macros (like min
, max
, minor
, major
, etc.). Finally, it also offers helper functions for conversion of endianness, file manipulation, and std::string
.
Version | Files | Dependencies |
---|---|---|
1.0.3 | includes_build 1.0.3.zip (source) | C++ |
1.0.5 | includes_build 1.0.5.zip (source) | C++ |
1.0.6 | libib1.0.6.zip (source) | C++ |
1.0.7 | libib1.0.7.zip (source) | C++ |
1.0.8 | libib1.0.8.zip (source) | C++ |
1.1.0 | libib1.1.0.zip (source) | C++ |
1.2.0 | libib1.2.0.zip (source) | C++ |
libash
This C++ Math library was originally part of the first C++ port of my Python graphics library. Recognizing its utility, I ripped it out and generalized it. It grew into a powerful SIMD vector/matrix processor (it is very good at small matrices, up to 4⨯4).
Like many of my projects, the name of "Ash" was arrived at in a sideways way. Two famous mathematicians are Ada Lovelace and Leonhard Euler. Together, "AE". This "ae" happens to be close to "æ", an old-English letter known as "ash" (especially to Linguists, where it is the low-front vowel in IPA). Hence, "Ash".

Version | Files | Dependencies |
---|---|---|
1.0.0 | Ash 1.0.0.zip (source) | C++, libib |
1.0.2 | Ash 1.0.2.zip (source) | C++, libib |
1.0.3 | libash1.0.3.zip (source) | C++, libib, Eigen (Opt) |
1.0.4 | libash1.0.4.zip (source) | C++, libib, Eigen (Opt) |
1.0.5 | libash1.0.5.zip (source) | C++, libib, Eigen (Opt) |
1.1.0 | libash1.1.0.zip (source) | C++, libib, Eigen (Opt) |
1.2.0 | libash1.2.0.zip (source) | C++, libib, Eigen (Opt) |
1.3.0 | libash1.3.0.zip (source) | C++, libib, Eigen (Opt) |
libchrono
A library for accurate time scale and standard conversions. See also.
Version | Files | Dependencies |
---|---|---|
2.0.0 | libchrono2.0.0.zip (source) | C++, libib |
libsyndicate
Syndicate (from "syndication") is a simple [de]serialization library. It has some powerful features.
Version | Files | Dependencies |
---|---|---|
1.1.0 | libsyndicate1.1.0.zip (source) | C++, libib |
1.1.1 | libsyndicate1.1.1.zip (source) | C++, libib |
1.1.2 | libsyndicate1.1.2.zip (source) | C++, libib |
libportcullis
Portcullis is a relatively lightweight but still fairly powerful windowing system supporting Windows and Linux, writing directly to the Win32 API or the X windowing system. It has minimal dependencies.
Portcullis developed out of frustration with then-existing windowing systems. wxWidgets fails rudimentary static code analysis. Qt is 5GB each for x86 and x86-64, and exists in mutually incompatible versions. SDL supported one window only. GLUT has the same limitations, and it's proprietary. All except SDL usually hijack your program's main loop (SDL hijacks your main's declaration). Most require at least one shared library each—if not by design, then by law (esp., the (L)GPL). Others aren't cross-platform, are poorly supported, bloated, or unintuitive.
I do appreciate the "irony" that Portcullis does not support MacOS or most widgets. However, it does support multiple windows and shared OpenGL contexts, while not messing with your application's main loop. It aims to be intuitive to use. Additionally, it is small, ought to be easy to understand and robust, compiles for x86 and x86-64, can be compiled as a static library, and makes use of C++ features for best-practices (like namespace
s) that many toolkits flagrantly ignore.
Source is 89 kB of C++ with \r\n
line endings, and should compile for at least x86 and x86-64. Shell files are provided to build on UNIX machines, and a vs2013 file is provided for Windows. For the latter, you will need to manually adjust the include/library directories to get the example to compile. The program makes use of the override
keyword, which is supported by recent versions of g++ (>=4.7, I think).
The full source for this project is specifically released to the public domain although, as always, I would appreciate hearing where the code ends up!

Version | Files | Dependencies |
---|---|---|
1.00 | portcullis1.00.zip (source) | C++ |
1.0.9 | libportcullis1.0.9.zip (source) | C++, libib |
1.1.0 | libportcullis1.1.0.zip (source) | C++, libib |
libcrush
A simple wrapper for zlib.
Version | Files | Dependencies |
---|---|---|
1.0.1 | libcrush1.0.1.zip (source) | C++, libsyndicate, zlib |
1.0.2 | libcrush1.0.2.zip (source) | C++, libsyndicate, zlib |