D'Arcy J.M. Cain

Generate - a file generating utility

Version 2.8

Generate is a text preprocessor that I originally wrote to help me write custom accounting applications based on the Progress database product. I felt that the built in wasn't useful enough so I designed a new one and implemented it. It actually started life as a package configuration and batch file generator for DOS and mutated to a simple script interpreter to replace shar file distribution. At this point it has almost nothing in common with that first program.

The basic idea behind generate is to create a script which generates files. There is some simple flow control constructs but the power lies in its macro processing. I have shamelessly stolen ideas from cpp, m4, make and David Tilbrook's dtree.

There are a few extra files in the distribution which come from my personal library which you may find useful in themselves. Here is a short description of these:

getarg.c
This is my replacement for getopt. It looks the same to the user but allows the programmer to allow mixing option and non-option arguments on the command line and simplifies the method of getting defaults and extra arguments from various sources.
getline.c
My unbounded line input function. Given different defines at compile time it can compile into getline(3), a simple unbounded input function, xgetline(3) which does the same except that it does comment processing and xcat(1) which implements xgetline as a command for shell script processing.
xstrtok.c
A replacement for strtok(3). Because strtok is a little brain dead about multiple calls this is a modified version which carries the pertinent information in a structure. This allows more than one string to be parsed at the same time (the code is re-entrant.)

To build the distribution you should simply have to run make (GNU Make). If you need to do more (other than to change the compiler or CFLAGS) please let me know. You may want to define MANDIR and BINDIR for installation if you want to install into somewhere other than /usr/local.

The major differences between 2.1 and 2.2 are:

The major differences between 2.2 and 2.3 are:

The major differences between 2.3 and 2.4 are:

The major differences between 2.4 and 2.5 are:

The major differences between 2.5 and 2.6 are:

The major differences between 2.6 and 2.8 are:

The major difference between 2.8 and 3.0 is that it works with Python 3.

This program may be freely distributed as long as credit is given to D'Arcy J.M. Cain, the source is included and this notice remains intact. There is specifically no restrictions on use of the program including personal or commercial. You may even charge others for this program as long as the above conditions are met.

This is not shareware and no registration fee is expected. If you like the program and want to support this method of distribution, write a program and distribute it the same way and I will feel I have been paid.

The distribution of the latest version is available as a shar file or as a compressed tar file.

Of course gifts of money, drinks and extravagant jewels are always welcome.