(2023-05-08) Making POSIX AWK great again: introducing The Great Library
------------------------------------------------------------------------
As I had already said, AWK is a heavily underrated tool available for pretty
much every normal OS out there. And even in its standard-compliant version,
it is capable of doing a lot of useful things. However, I have some plans
for some rather ambitious projects, but these projects would include several
things POSIX AWK doesn't offer out of the box, and most of them are not even
offered by GAWK:

* single-character keyboard input (both blocking and non-blocking),
* ASCII and UTF-8 codepoint conversion for further output or processing,
* loading binary files into arrays and saving arrays into binary files,
* some math functions available in C standard library but missing from
standard AWK for some reasons (like sign, floor, ceil, tan, cotan),
* and, of course, cross-platform bitwise operations.

To think of it, implementation of all this stuff would put AWK on par with
Python or at least Lua when it comes to interactive apps and binary data
processing. But, of course, not everything here can be implemented with AWK
itself, and sometimes we have to rely on some external commands. If we limit
these commands and their options to the ones required by POSIX as well
though, we still should be fine. The most obvious examples are how we can
implement single-character keyboard input and loading binary files
(considering all the null bytes they may have): we just use the od command
that can shape everything as decimals of the byte width we specify. To
achieve unbuffered character input, we can also use od in conjunction with
terminal modes set with the the stty command. Since both stty and od are a
part of POSIX, we can, as long as we only use the options listed there,
safely use them to extend AWK script capabilities. And this is what I have
used in my tgl.awk, which, as you may have guessed, stands for The Great
Library, as I have called it on my main hoi.st page.

So, how do we use it? Although AWK generally doesn't have the "include"
feature (except the most recent GAWK), we can just use several -f flags one
after another, which is fully supported by the standard. There also is a
caveat when using this library with GAWK: in order for any string-related
functions to work correctly, it requires LANG=C environment variable to be
set. It won't hurt, however, to set this variable for any other AWK version
either. So, the most correct way of running any TGL-enabled AWK program in a
POSIX environment is like this:

LANG=C awk -f tgl.awk -f your_prog.awk [...args...]

This library is subject to change/update in the future, although I believe
it's already close to its final state. I'm not going to introduce any more
feature creep unless it's absolutely necessary to continue with active
projects. And in regard of what we can do with the already existing
functionality, I hope you'll find this out very soon.

--- Luxferre ---