diff --git a/hawk/README.md b/hawk/README.md new file mode 100644 index 00000000..e897a463 --- /dev/null +++ b/hawk/README.md @@ -0,0 +1,66 @@ +# Hawk + +# Table of Contents +- [Language](#language) +- [Embedding Guide](#embedding-guide) + +#### TODO: unary bitwise not +#### TODO: fix -F or --field-separator to hawk. + + +## Language + +Hawk implements most of the AWK programming language elements with extensions. + + +### Entry Point + +You may change the entry point of your script by setting a function name with @pragma entry. + +
+@pragma entry main + +function main () +{ + print "hello, world"; +} ++ +### Value + +- unitialized value +- integer +- floating-point number +- string +- byte string +- array + +### Module + + + +### Incompatibility with AWK + +#### Parameter passing + +In AWK, the caller can pass an uninitialized variable as a function parameter and get a changed value if the callled function sets it to an array. + +
+function q(a) {a[1]=20; a[2]=30;} +BEGIN { q(x); for (i in x) print i, x[i]; } ++ +In Hawk, you can prefix the pramater name with & to indicate call-by-reference for the same effect. +
+function q(&a) {a[1]=20; a[2]=30;} +BEGIN { q(x); for (i in x) print i, x[i]; } ++ +Alternatively, you may form an array before passing it to a function. +
+function q(a) {a[1]=20; a[2]=30;} +BEGIN { x[3]=99; q(x); for (i in x) print i, x[i]; }' ++ + +## Embedding Guide diff --git a/hawk/bin/main.c b/hawk/bin/main.c index 9cc66fc8..018d8fb7 100644 --- a/hawk/bin/main.c +++ b/hawk/bin/main.c @@ -381,7 +381,7 @@ static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg) /* compose a string value to use to set FS to */ fs = hawk_rtx_makestrvalwithbcstr(rtx, arg->fs); - if (fs) return -1; + if (!fs) return -1; /* change FS according to the command line argument */ hawk_rtx_refupval (rtx, fs);