Changes as of 19-JUL-1987

I got this code from Fish disk number 65. Although the program is well
written it did not run on the Amiga. I set out to get it running and have
by now, as usual, spent far to much time on it. I release this update in the
hope that someone else will do some work on it.

I going to say a lot of negative things about Bawk here. This should not
taken as critisism against the original author. As I said above the program
was well written and it was fun to work with it. The characteristics of
the original program is 'almost correct, easy to understand, but slow'.
I much prefer to work with such code as compared to 'fast but buggy' code.

Although you may not believe it at first, there is really a lot of
functionality in this program. However; Bawk is not awk. There is a lot of
functionality lacking, and Bawk is also slower. You can be the one to
change all that... 8-)

Here are the some differences between awk and Bawk.

Regular expressions in Bawk are delimited by '@', not '/':
	@[Ff]oo@

The function 'print' is not implemented. You have to get by with 'printf'.
The reason that print is not yet implemented is that automatic
conversion between string values and other (e.g. numerical) values is not
yet implemented.

Assignment between arrays is not automatic. You have to use strcpy:
	Awk:	$1 = "foo"
	Bawk:	strcpy($1,"foo")

Redirection (printf "%s", $0 >file) is not implemented.

To match a field in awk you can say
	$1 ~ /[Ff]oo/
in Bawk you say
	match($1,@[Ff]oo@)

Arrays in Bawk are not associative. It would probably be a good idea to
remove the declarations from Bawk and to make type handling and array
handling more like awk.


Some minor changes:
Bawk can now take a command line pattern.
Here are three ways of invoking awk:

$ bawk @[Ff]oo@ file
$ echo >xxx @[Ff]oo@
$ bawk -f xxx file
$ bawk - file
@[Ff]oo@
$ 

The braindamaged parsing of command line arguments on the Amiga forced me
to define an alternative string delimiter. Strings can now be delimited
by '`' (`a string`) as well as '"' ("a string"). This behaviour is
optional. If you do not like it then undefine QUOTE_STRING_HACK in bawk.h.

I have used the Lattice C compiler. Conversion to manx with 32 bit ints
should be easy. The code assumes that sizeof(int) == sizeof(char *).

I used Fred Fish's dbug package to develop the current version. The name
dbug is a bit of a misnomer, 'trace' is a more appropriate name. dbug
implements tracing in an orderly manner. Very useful. The package is
available on Fish disk 41. An older version is on disk 2.

The trace code is conditionally compiled in depending on the definition
	DBUG_OFF
To compile with tracing, comment out the definition of DBUG_OFF in bawk.h.
You can then invoke tracing and dbug printing with
	bawk -\#t:d action file
Select printing only with
	bawk -\#d action file
Note that bawk will run slower and be a bit larger if you compile with
tracing enabled.

			Johan Widen
			USENET: jw@sics.se
