With these functions, it should be much easier to construct
structures containing string offsets instead of string pointers.
That can be very useful when transmitting, storing or sharing data
with different address spaces.

I added the (out-push-new) because the string table text is
diverted into an output stream named, “scribble” and I want to
have the string table emitted before the string table references.
The string table references are also emitted inside the FOR
loop. So, when the loop is done, the current output is suspended
under the name, “main” and the “scribble” table is then emitted
into the primary output. (emit-string-table inserts its
output directly into the current output stream. It does not need to
be the last function in an AutoGen macro block.) Next I
ag-fprintf the array-of-pointer declaration directly into the
current output. Finally I restore the “main” output stream and
(out-pop #t)-it into the main output stream.

Here is the result. Note that duplicate strings are not repeated
in the string table: