Modules/include files for handling balanced trees. Data are stored under a key
(either an integer value or a string) and can be retrieved quickly.
The corresponding test programs demonstrate a fairly straightforward method to
customise the type of the data that are stored (a kind of "generic" programming).
Module for encoding/decoding strings according to the base64 scheme.
August 2019
Experiment with generic programming features - both a set of programs and a note.
A new module with basic string operations, such as replacing a set of substrings.
May 2019
Added notes on lambda expressions and the prototype pattern with accompanying source code
to demonstrate the approaches.
Several more checking programs - focusing on Fortran 2018 features.
November 2018
Cleaning up the repository (superfluous .dsp and .dsw files removed)
Also adding missing make files (some directories require special measures to ensure
they work on the various platforms - this still requires some work)
December 2016
Module for handling command-line arguments in a very similar way as the C function "getopt".
The technique used is the same as for the keyvars module.
October 2016
Module for substituting values into a string based on simple format codes. This helps in combination
with the translation module to customize the messages from a program.
August 2016
Module for retrieving variables from an INI-file like file via a single subroutine call. Using pointers
it can retrieve any number of variables in one go. Via the descriptive strings you pass for each variable
it can write an annotated sample input file.
A module (translation) and an auxiliary program that can be used to build a small "database" of strings in several
human languages. The strings are retrieved via a keyword and the language. Useful for localising an application.
For the moment a very simple module, but the intention is to use the technique of the "keyvars" module to enable
substitutions in arbitrary places.
Set of programs to check if the compiler supports features like BLOCK, ASSOCIATE, Bessel functions and so on.
May 2014
New module: mod_regex (and a lower-level one, fcre) provided by Paul Fossati) that
provides a convenient interface to the PCRE library for "Perl-compatible regular expressions."
While this is at the moment still in need of some revision, it is useable.
February 2014
Added several files that were missing from the examples in my book to the website.
Thanks to Daniel Gloger for reporting them.
December 2013
Added a module for reading Windows BMP files, provided by Denis Yavna.
Note that not all types of BMP files are supported, though.
Improvements because of compiler messages (reported by Karin Nystrom) and
several corrections to the pointsets module (including an extended test program for this
module).
October 2013
Added a module for reading dBase III files (reading only). There are a number of
limitations:
No support for memo fields. dBase files containing memo fields may not be recognised at all.
No support for dBase IV files.
Status of records is not recognised or reported.
Added a module to manipulate ("filter") multiline text variables. This is meant to make
it easier to edit the contents of files for instance. Just a start.
Added two routines for unconstrained and constrained minimisation, developed by Mike Powell.
(Wrapped in separate modules to make the interface slightly easier and more robust)
July 2013
Added a module for reading a password (inspired by a thread on comp.lang.fortran)
June 2013
Added a module for traversing grid points in N dimensions. Two classes are
provided: traverse a rectangular block from the beginning to the end or step
through such a block in a so-called quasi-random way. This allows the computation
of a multidimensional integral using less data points than would be required for
a Monte Carlo approach (see the test program for an example).
April 2013
Added a module for enumerating grid points in one, two or three dimensions.
The idea arose while dabbling with Diophantine equations. The enumeration technique
visits the points closest to the origin first, so that small values of the coordinates
can examined first and then you move on to larger ones. This is guaranteed in all
supported dimensions.
Corrected a problem in the singleline_text module with empty strings.
March 2013
Improvement and bugfix:
The ODBC (fodbc) module now accepts an arbitrary list of columns
Note that this must be ported to the SQLite (fsqlite) and MySQL (myfortran)
modules too. (Another issue that has arisen: handling SQL null values)
The dictionary module contained a bug that could result in an array bound
violation. This has been fixed by replacing the mod() function by the modulo()
function.
January 2013
New module:
The instructions and the example for the use of fast-CGI have been turned into
a new module. Together with several concise examples.
December 2012
New modules:
Added a module for logging to multiple files (provided by Karin Nystrom).
Added a module for random permutation (derived from a posting on comp.lang.fortran by Bart Vanderwoestyne).
Not actually a new module yet, but instructions on the use of Fast-CGI in combination with the Nginx webserver
(contributed by Ricolindo Carino).
November 2012
I have introduced this page to provide an overview of what is happening in this
project.
New modules:
The new modules use the object-oriented features of Fortran 2003. The modules define simple classes,
no inheritance for instance.
read_characters is a module to read a text file character by character. It is the start of
a new set of modules, inspired by the book "Fortran Tools" by Jones and Crabtree.
tokenlists is a module that allows easier handling of a tokenized string and builds on
the older tokenize module.
Changes to existing modules:
The libdate module now contains a routine scan_date to scan a string for
date/time information.
The odbc module now supports binary large objects (BLOB). There are a few caveats though,
as not all ODBC drivers and underlying database systems can actually handle BLOBs.
Introduced the Fortran 2008 feature NEWUNIT=, as per a patch by Karin Nystrom. This has the advantage of
not interfering with other LU-numbers in the calling program.