Awka Stuff:

Home of Awka
Change Log
Bug Tracker
Awka-ELM Libraries
Future Plans


Other Stuff:

Xglobe Maps
About Me...

Generously hosted by...

SourceForge Logo

The Awka Changelog

At present this page documents changes from one beta snapshot to the next, and is therefore most relevant to those who are assisting with testing and reporting problems. This list will be reworked once a stable version is released.

v0.7.5, July 12 2001
  • Gawk 3.1.0's Coprocessing and inet functions are now supported by Awka, as are the new builtin functions asort() and mktime(). Thanks to Juergen Kahrs for the original work to implement this excellent feature, and to Arnold Robbins for including it in Gawk. That libawka will now be distributed under the GNU General Public License (GPL) rather than LGPL as a result of having to include some code from Gawk. The previously separate dfa library is now absorbed into libawka, and the -d command-line option for awka removed as it is no longer needed.
  • The match() function has been extended to support its new capability in Gawk 3.1.0. See the Gawk manpage for details.
  • awka -a -v 'var="string with whitespace"' will now work correctly.
  • To avoid breaching ANSI-C guidelines, \r in AWK program strings will be preserved as \r in the generated C code, not converted to ASCII character 13. Previously some platforms were incorrectly treating \r as \n - this has been fixed by this change.
  • Fixed a problem wherein awka -c sometimes failed to output matching curly braces in the translated code.
  • Fixed a data-input parsing error that could occur when RS="". The new test rsnul1nl (from gawk-3.1.0) will ensure the buglet doesn't return.
  • A new hash routine was implemented providing fewer collisions, particularly with long string indexes that have only minor differences. The optional SLOW_HASH #define is no longer needed.
  • Translator now tracks the datatype of scalar variables, and will produce more efficient code for vars that stay one type throughout a script. This is the first optimisation of translated code in a long, long time and it makes a considerable difference to many scripts.
v0.7.4, June 12 2001 - fixes a few bugs
  • Regular expressions that are exact strings will now run much quicker.
  • Tidied up some loose threads in lib/rexp.c.
  • FIELDWIDTHS will no longer be used in calls to the split() function, but only with the parsing of $0 into the $1 ... $n fields.
  • Removed the unnecessary VERSION line from configure.
  • Removed the 'longwrds' test's reliance on the sort utility.
  • Dropped the 'nasty' test. It doesn't accomplish much and fails on many systems (as it does for gawk).
  • Altered the test suite so it will always use the static library rather than the shared-object one. This was necessary to allow "make test" to work if the package hadn't previously been installed.
v0.7.3, May 25 2001 - a long time coming, hope the wait was worth it...
  • A shared object version of libawka will be compiled on systems that support it.
  • "var=value" without a preceding -v is now supported.
  • awka's "-o filename" will now produce a C file called "filename.c", instead of defaulting to awka_out.c as it did previously.
  • awka's -- option now works again, as will --help.
  • The third parameter of Gensub now works if it is a number greater than 0.
  • "." no longer required in PATH to run the test suite.
  • Array element deletions will no longer leak memory like a sieve.
  • The extended function alength() wasn't accounting for array element deletions - now it does.
  • various code cleanups, and better support for C++ compilers.
  • split("",array,whatever) will now return 0 instead of 1.
  • fixed a memory fault that sometimes occurred when arrays created by split() were extended.
  • nextfile and next from with a function now supported.
  • The builtin function system() will now fork()/execl() processes, and you can define which shell program it uses. See INSTALL for more details. I haven't implemented this for piped input (eg. "sort abc" | getline) yet.
  • Added John Maybury's fix for a problem in the temporary variable stack.
  • Libawka will now compile with SLOW_HASH defined.
  • Eliminated the annoying compile warnings for redefinition of BEGIN and END.
  • SUBSEP wasn't being treated as an internal variable by the translator! This error corrected.
  • Relaxed the temporary variable pool optimisation introduced in 0.7.2, as it was occasionally overdoing it & causing buggy behaviour.
  • Fixed a bug that caused getline to sometimes fail to set the value of $0.
v0.7.2, Aug 26 2000
  • Added to the test suite about a dozen or so new scripts borrowed from gawk-3.0.6.
  • Corrected awka's handling of code like b += b++, the problem being that AWK's handling of post & pre increment and decrement operators is actually different from how C does it, which isn't what I expected.
  • Optimised the size of the temporary-variable pools, so that it doesn't create more variables than your program needs. This reduces memory requirements, and can significantly improve performance.
v0.7.1, Aug 15 2000
  • Introduced a structure containing names & pointers to user-defined functions, for potential use in extended library code.
  • Found and fixed some memory leaks stemming from how the new dfa library was integrated with awka.
  • Some code cleanup to make gcc -Wall a bit happier (but still not warning-free).
v0.7.0, Aug 9 2000 - MAJOR VERSION CHANGE
  • Awka Extended Library Methods are finally implemented, about a year after the idea was first seriously discussed by my friend chris proctor. Sorry about the wait, but finally its here. This feature allows you to write your own C functions, and have them available as functions to call from your AWK program. The possibilities are endless! I can't say how good it feels to finally get this done.
  • Extra manpages awka-elm(5) and awka-elmref(5) now available to describe how the Awka-ELM features work, and provide a libawka API reference.
  • All manpages are also now in html format - see the doc directory.
  • Gawk's dfa module has been added to the Awka package as an optional library that can be used to enhance regular expression performance, in doing so making the translated C source of your AWK program subject to the GPL. See the manpage or awka -h for more details.
  • Fixed a very subtle bug causing incorrect casting of strings to numbers after a few numerical comparisons of the string. I doubt this affected many programs, as it would have been pretty obvious something was wrong.
  • ARGIND internal variable is now supported.
  • The getawkvar() builtin function has been removed (it was broken anyway), and will be redeveloped as an ELM function.
  • Added the necessary system #includes to libawka.h, rather than having them in every translated C file, as this assists writing Awka-ELM compliant code.
v0.5.9, Jul 18 2000
  • Arrays populated by split() were on occasion containing strange values in elements larger than the number of fields returned by split. If that makes sense. Anyway, problem fixed.
  • Fixed some FIELDWIDTHS errors.
  • Corrected a file input error that sometimes caused the input buffer to be processed twice when RS was longer than a single character.
v0.5.8, Jul 13 2000
  • The first of several warning messages, useful in debugging large AWK programs, has been implemented. Try awka -w a on a large program & see what happens.
  • The length function, without arguments, will now return the length of $0. How did this escape notice for so long?
v0.5.7, Jun 29 2000 - more gensub fixes
  • Fixes, fixes, fixes. What a complex beast gensub is! Thanks Eiso for pointing out the inconsistencies with Gawk.
v0.5.6, Jun 22 2000 - small gensub fix
  • Sub-patterns that failed to match anything were being handled wrongly by the substitution code; this has been fixed.
v0.5.5, Jun 9 2000 - saving the ENVIRONment
  • Oops, ENVIRON was broken in 0.5.3 - this release restores ENVIRON.
v0.5.4, Jun 8 2000 - a few more bugfixes
  • Gensub was thoroughly broken from version 0.5.0 - it should now be working again, at least to the level it was at in 0.3b-47, plus it will now support a literal string as the 4th parameter.
  • The extended function "or" is now being translated correctly.
v0.5.3, Jun 1 2000 - a big one. On your marks, set ...
  • Yet more backslash and escape character fixes. These have taken some time, as I really want to slay this dragon for good.
  • Running "awka -x" should now work for those who keep "." out of their PATH.
  • Gsub on patterns like /^ | $/ will now work - previously it wasn't going past the first case (^ ).
  • Octals are now supported in regular expressions eg. /a\052b/ same as /a*b/
  • Escaping of the ampersand character in the substitution string in calls to gsub() and sub() now works properly.
  • Corrected an awka command-line parse problem when both -a and -o were used.
  • Replaced awka_setd() in translated code with a new function, awka_vardblset(). This means code like this: '{ x="0123"; x = ("3" x) + 0; print x }' will work, as the awka_setd was incorrectly casting x to numeric _prior_ to the right hand side being evaluated.
  • Fixed a problem with $1..$n variables not being updated after getline.
  • Eliminated leakage that occurred when deleting arrays.
  • Fixed several problems associated with using awka -c.
  • Updated the manpage.
  • Tidied up the code, eliminating unused variables & so on. This should produce fewer warnings for some compilers.
v0.5.2, Apr 10 2000
  • A segfault that occurred when using "/" as a regular expression has been fixed.
  • Adding a negative-integer element to an array created by split will now work. eg. 'BEGIN { split("",x); x[-2]; print -2 in x }'.
v0.5.1, Apr 3 2000
  • Corrected the compile dependancy problem - awka should now compile smoothly. Thanks everyone for letting me know so quickly.
v0.5.0, Mar 31 2000
  • Dispensed with the Henry Spencer regular expression library, and adopted the one from glibc. Due to its age, the former just didn't support enough features and it was getting too difficult to hack them in.
  • Major revision of backslash parsing methods. The reason they've caused me so much grief is that, unlike an interpreter, I have to protect them (as well as quotes) from the C compiler.
  • Said goodbye to the "Awka Library License", and hello to LGPL. This was necessitated by the inclusion of glibc's regexp.
  • Adopted the Linux numbering system of even numbers for a stable release (one day soon) and odd for beta releases. Also started from a new number, as I was sick of 0.3b.

Older snapshot history may be found here

Andrew Sumner - (
Site Meter visitors since I added this counter.