diff --git a/awka/error.c b/awka/error.c index 910caf8..7549771 100644 --- a/awka/error.c +++ b/awka/error.c @@ -110,7 +110,8 @@ static int missing_rparen[] = static int missing_rbrace[] = { EOF, a_BEGIN, a_END , 0 } ; -static void missing( c, n , ln) +static void +missing( c, n , ln) int c ; char *n ; int ln ; @@ -120,7 +121,7 @@ static void missing( c, n , ln) { s0 = pfile_name ; s1 = ": " ; } else s0 = s1 = "" ; - errmsg(0, "%s%sline %u: missing %c near %s" ,s0, s1, ln, c, n) ; + errmsg(0, "%s%sline %u: missing %c near %s" ,s0, s1, ln, c, n) ; } void yyerror(s) @@ -168,7 +169,7 @@ void yyerror(s) switch ( current_token ) { case UNEXPECTED : - unexpected_char() ; + unexpected_char() ; goto done ; case BAD_DECIMAL : @@ -211,9 +212,38 @@ void errmsg VA_ALIST2(int , errnum, char *, format) fprintf( stderr, "\n") ; } +char * +char_repeat( int n, char c ) +{ + char * dest = malloc(n+1); + memset(dest, c, n); + dest[n] = '\0'; + return dest; +} + +char * +get_source_line() { + FILE *fp = NULL; + static int bufferLength = 254; + char *buffer = malloc( bufferLength + 1); + int linecount = token_lineno - 1; + + buffer[0] = '\0'; + if ( !pfile_name ) return (buffer); + if (!(fp = fopen(pfile_name, "r"))) return (buffer); + + while(fgets(buffer, bufferLength, fp)) { + if ( !linecount-- ) + break; + } + fclose(fp); + return (buffer) ; +} + void compile_error VA_ALIST(char *, format) va_list args ; - char *s0, *s1 ; + char *lnstr = malloc( 20 ); + char *s0, *s1, *sc, *fill ; /* with multiple program files put program name in error message */ @@ -222,11 +252,19 @@ void compile_error VA_ALIST(char *, format) else { s0 = s1 = "" ; } - fprintf(stderr, "%s: %s%sline %u: " , progname, s0, s1,token_lineno) ; + sprintf(lnstr, "line %d: ",token_lineno); + sc = get_source_line(); + + fprintf(stderr, "%s: %s%s%s%s" , progname, s0, s1, lnstr, sc) ; + + fill = char_repeat((int) line_pos-1,' '); + fprintf(stderr, "%s: %s%s%s%s^ " , progname, s0, s1, lnstr, fill) ; VA_START(args, char *, format) ; vfprintf(stderr, format, args) ; va_end(args) ; fprintf(stderr, "\n") ; + free(sc); + free(lnstr); if ( ++compile_error_count == MAX_COMPILE_ERRORS ) exit(2) ; } @@ -245,16 +283,16 @@ void rt_error VA_ALIST( char *, format) void bozo(s) char *s ; -{ - errmsg(0, "bozo: %s" , s) ; +{ + errmsg(0, "bozo: %s" , s) ; exit(3) ; } void overflow(s, size) char *s ; unsigned size ; -{ +{ errmsg(0 , "program limit exceeded: %s size=%u", s, size) ; - exit(2) ; + exit(2) ; } @@ -271,17 +309,36 @@ static void rt_where() /* run time */ void rt_overflow(s, size) char *s ; unsigned size ; -{ +{ errmsg(0 , "program limit exceeded: %s size=%u", s, size) ; rt_where() ; exit(2) ; } +/* compile time */ void -unexpected_char() -{ int c = yylval.ival ; +unexpected_char( void ) +{ + int c = yylval.ival ; + char *lnstr = malloc( 20 ); + char *s0, *s1, *sc, *fill; + + if ( pfile_name ) + { s0 = pfile_name ; s1 = ": " ; } + else s0 = s1 = "" ; + + sprintf(lnstr, "line %d: ",token_lineno); + + sc = get_source_line(); + fprintf(stderr, "%s: %s%s%s%s", progname, s0, s1, lnstr, sc) ; + free(sc); + + /* point to error location then show the error message */ + fill = char_repeat((int) line_pos-1,' '); + fprintf(stderr, "%s: %s%s%s%s^ ", progname, s0, s1, lnstr, fill) ; + free(fill); + free(lnstr); - fprintf(stderr, "%s: %u: ", progname, token_lineno) ; if ( c > ' ' && c < 127 ) fprintf(stderr, "unexpected character '%c'\n" , c) ; else @@ -320,9 +377,9 @@ void type_error(p) /* a minimal vfprintf */ int simple_vfprintf( fp, format, argp) FILE *fp ; - char *format ; + char *format ; va_list argp ; -{ +{ char *q , *p, *t ; int l_flag ; char xbuff[64] ; @@ -331,7 +388,7 @@ int simple_vfprintf( fp, format, argp) xbuff[0] = '%' ; while ( *q != 0 ) - { + { if ( *q != '%' ) { putc(*q, fp) ; q++ ; continue ; @@ -374,7 +431,7 @@ int simple_vfprintf( fp, format, argp) break ; default: - putc('%', fp) ; + putc('%', fp) ; q = p ; break ; } diff --git a/awka/scan.c b/awka/scan.c index 6bc7a2b..eac5779 100644 --- a/awka/scan.c +++ b/awka/scan.c @@ -47,14 +47,16 @@ #include "files.h" /* static functions */ -static void PROTO(scan_fillbuff, (void)) ; -static void PROTO(scan_open, (void)) ; -static int PROTO(slow_next, (void)) ; -static void PROTO(eat_comment, (void)) ; -static void PROTO(eat_semi_colon, (void)) ; +static void PROTO(scan_fillbuff, (void)) ; +static void PROTO(scan_open, (void)) ; +static int PROTO(slow_next, (void)) ; +static unsigned char PROTO(next, (void)) ; +static void PROTO(un_next, (void)) ; +static void PROTO(eat_comment, (void)) ; +static void PROTO(eat_semi_colon, (void)) ; static double PROTO(collect_decimal, (int, int *)) ; -static int PROTO(collect_string, (void)) ; -static int PROTO(collect_RE, (void)) ; +static int PROTO(collect_string, (void)) ; +static int PROTO(collect_RE, (void)) ; /*----------------------------- @@ -74,6 +76,7 @@ extern char **vardeclare; extern int vdec_no, vdec_allc; int _true_re = 0; +int line_pos = 0 ; void PROTO(init_extbi, (void)); @@ -144,6 +147,16 @@ scan_cleanup() scan_code['\r'] = SC_UNEXPECTED ; } +static unsigned char +next() +{ + line_pos++; + return (*buffp ? *buffp++ : slow_next()); +} + +static void +un_next() { buffp--; line_pos--; } + /*-------------------------------- global variables shared by yyparse() and yylex() and used for error messages too @@ -157,6 +170,7 @@ int paren_cnt ; int brace_cnt ; int print_flag ; /* changes meaning of '>' */ int getline_flag ; /* changes meaning of '<' */ +//int line_pos = 0 ; /*---------------------------------------- @@ -207,10 +221,12 @@ slow_next() ZFREE(q) ; scan_open() ; token_lineno = lineno = 1 ; + line_pos = 0 ; } else break /* real eof */ ; } + line_pos++; return *buffp++ ; /* note can un_next() , eof which is zero */ } @@ -250,7 +266,7 @@ eat_comment() { /* navigate to the next word */ while (c == ' ' || c == '\t') c = next() ; - if (c == '\n' || c == '\0') return ; + if (c == '\n' || c == '\0') { line_pos = 0 ; return ; } i = 0 ; while (c != ' ' && c != '\t' && c != '\n' && c != '\0') @@ -335,7 +351,9 @@ eat_nl() /* eat all space including newlines */ while (scan_code[c = next()] == SC_SPACE) ; if (c == '\n') + { token_lineno = ++lineno ; + } else if (c == 0) { un_next() ; @@ -356,8 +374,10 @@ eat_nl() /* eat all space including newlines */ default: un_next() ; + line_pos = 0; return ; } + line_pos = 0; } int @@ -392,6 +412,7 @@ yylex() if (c == '\n') { token_lineno = ++lineno ; + line_pos = 0; goto reswitch ; } @@ -451,7 +472,36 @@ yylex() ct_ret(COMMA) ; case SC_MUL: - test1_ret('=', MUL_ASG, MUL) ; + // * or *= or **= + //test1_ret('=', MUL_ASG, MUL) ; + switch (next()) + { + case '*': // ** + yylval.ival = '*' ; + string_buff[0] = + string_buff[1] = '*' ; + string_buff[2] = 0 ; + if (c = next() == '=') + { + // **= + yylval.ival = '=' ; + string_buff[2] = '='; + string_buff[3] = 0; + ct_ret(POW_ASG); + } + yylval.ival = c ; + string_buff[2] = c; + string_buff[3] = 0; + ct_ret(UNEXPECTED); + + case '=': // *= + ct_ret(MUL_ASG) ; + + default: // * + un_next() ; + ct_ret(MUL) ; + } + case SC_DIV: { @@ -1109,6 +1159,7 @@ collect_string() { p-- ; lineno++ ; + line_pos = 0; } else if (c == 0) un_next() ; else diff --git a/awka/scan.h b/awka/scan.h index dfe0e66..3aba6f1 100644 --- a/awka/scan.h +++ b/awka/scan.h @@ -39,6 +39,7 @@ the GNU General Public License, version 2, 1991. #include "parse.h" #endif +int line_pos; extern char scan_code[256] ; @@ -88,9 +89,6 @@ void PROTO( unexpected_char, (void) ) ; #define ct_ret(x) return current_token = (x) -#define next() (*buffp ? *buffp++ : slow_next()) -#define un_next() buffp-- - #define test1_ret(c,x,d) if ( next() == (c) ) ct_ret(x) ;\ else { un_next() ; ct_ret(d) ; } diff --git a/benchmark/Makefile.in b/benchmark/Makefile.in index 96a2ce0..8241656 100644 --- a/benchmark/Makefile.in +++ b/benchmark/Makefile.in @@ -10,245 +10,108 @@ PERL = perl PYTHON = python3 TCL = tclsh -AWKAV = $(AWKA) -v | head -n3 +AWKAV = $(AWKA) -v | head -n2 GAWKV = $(GAWK) -V | head -n1 -MAWKV = $(MAWK) -W Version 2>&1 | head -n1 -PERLV = $(PERL) -v | head -n2 +MAWKV = $(MAWK) -W Version 2>&1 | head -n1 +PERLV = $(PERL) -v | head -n2 | tail -n1 PYTHONV = $(PYTHON) -V TCLV = echo 'puts [ concat "TCL" " " [info patchlevel]]' | $(TCL) - TIME = /usr/bin/time CMP = cmp -CC = gcc -CFLAGS = -O2 -EXE = +CC = gcc -O3 +EXE = MLIB = -lm -SLIB = +SLIB = MATHLIB = $(MLIB) $(SLIB) +CFLAGS = -L ../lib -I../lib ../lib/libawka.a $(MATHLIB) srcdir = . +# run a number of times to average the result +SEQCMD = seq 5 | xargs -I{} + +srcdir = . + +############### bench: start array array2 array3 array4 array4b array4c array4d io cast expr function loop recurse split parsecsv regexp end ############### versions:: + @date + @echo "--------- Versions ----------" @$(AWKAV) @$(MAWKV) @$(GAWKV) @$(PERLV) @$(PYTHONV) @$(TCLV) - @echo "-----------------------------" + @echo "--------- Results -----------" start:: @echo "Generating benchmarks..." - @date >res.out - @echo "-----------------------------" >>res.out - -array:: - @echo 'ARRAY' - @echo 'ARRAY:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array2:: - @echo 'ARRAY2' - @echo 'ARRAY2:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array3:: - @echo 'ARRAY3' - @echo 'ARRAY3:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array4:: - @echo 'ARRAY4' - @echo 'ARRAY4:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array4b:: - @echo 'ARRAY4b' - @echo 'ARRAY4b:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array4c:: - @echo 'ARRAY4c' - @echo 'ARRAY4c:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -array4d:: - @echo 'ARRAY4d' - @echo 'ARRAY4d:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - - -io:: - @echo 'IO' - @echo 'IO:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @$(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out + @date + @echo "-----------------------------" -cast:: - @echo 'CAST' - @echo 'CAST:' >>res.out +array array2 array3 array4 array4b array4c array4d io:: + @echo $@ @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out + @$(CC) x.c $(CFLAGS) + @$(SEQCMD) $(TIME) -f "$@\tAWKA\t%e sec" ./a.out 2>>$@ares.out + @$(SEQCMD) $(TIME) -f "$@\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>$@mres.out + @$(SEQCMD) $(TIME) -f "$@\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>$@gres.out + @$(SEQCMD) $(TIME) -f "$@\tPERL\t%e sec" $(PERL) $@.pl 2>>$@plres.out + @$(SEQCMD) $(TIME) -f "$@\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>$@pyres.out + @$(SEQCMD) $(TIME) -f "$@\tTCL \t%e sec" $(TCL) $@.tcl 2>>$@tres.out -expr:: - @echo 'EXPR' - @echo 'EXPR:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out -function:: - @echo 'FUNCTION' - @echo 'FUNCTION:' >>res.out +cast expr function recurse split:: + @echo $@ @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out + @$(CC) x.c $(CFLAGS) + @$(SEQCMD) $(TIME) -f "$@\tAWKA\t%e sec" ./a.out 2>>$@ares.out + @$(SEQCMD) $(TIME) -f "$@\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>$@mres.out + @$(SEQCMD) $(TIME) -f "$@\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>$@gres.out + @$(SEQCMD) $(TIME) -f "$@\tPERL\t%e sec" $(PERL) $@.pl 2>>$@plres.out + @$(SEQCMD) $(TIME) -f "$@\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>$@pyres.out loop:: - @echo 'LOOP' - @echo 'LOOP:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out - -recurse:: - @echo 'RECURSE' - @echo 'RECURSE:' >>res.out + @echo $@ @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out + @$(CC) x.c $(CFLAGS) + @seq 2 | $(TIME) -f "$@\tAWKA\t%e sec" ./a.out 2>>$@ares.out + @seq 2 | $(TIME) -f "$@\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>$@mres.out + @seq 2 | $(TIME) -f "$@\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>$@gres.out + @seq 2 | $(TIME) -f "$@\tPERL\t%e sec" $(PERL) $@.pl 2>>$@plres.out + @seq 2 | $(TIME) -f "$@\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>$@pyres.out -split:: - @echo 'SPLIT' - @echo 'SPLIT:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tPERL\t%e sec" $(PERL) $@.pl 2>>res.out - @$(TIME) -f "\tPYTHON\t%e sec" $(PYTHON) $@.py 2>>res.out - @ # $(TIME) -f "\tTCL \t%e sec" $(TCL) $@.tcl 2>>res.out -parsecsv:: - @echo 'PARSECSV' - @echo 'PARSECSV:' >>res.out +parsecsv regexp:: + @echo $@ @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out + @$(CC) x.c $(CFLAGS) + @$(SEQCMD) $(TIME) -f "$@\tAWKA\t%e sec" ./a.out 2>>$@ares.out + @$(SEQCMD) $(TIME) -f "$@\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>$@mres.out + @$(SEQCMD) $(TIME) -f "$@\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>$@gres.out -regexp:: - @echo 'REGEXP' - @echo 'REGEXP:' >>res.out - @$(AWKA) -f $@.awk >x.c - @$(CC) $(CLFAGS) x.c -L ../lib -I../lib ../lib/libawka.a -lm - @$(TIME) -f "\tAWKA\t%e sec" ./a.out 2>>res.out - @$(TIME) -f "\tMAWK\t%e sec" $(MAWK) -f $@.awk 2>>res.out - @$(TIME) -f "\tGAWK\t%e sec" $(GAWK) -f $@.awk 2>>res.out end:: @echo "Finished benchmarking!" - @$(GAWK) "/:|sec|--/" res.out + @cat *res.out | $(GAWK) -f lib/benchmarksort.awk ############### -results: res.out versions - @$(GAWK) "/:|sec|--/" res.out +results: versions + @cat *res.out | $(GAWK) -f lib/benchmarksort.awk clean: - rm -fr _* core x.c a.out res.out + rm -fr _* core x.c a.out *res.out distclean: clean rm -f Makefile diff --git a/benchmark/README b/benchmark/README index d54a530..73d2bc1 100644 --- a/benchmark/README +++ b/benchmark/README @@ -47,6 +47,20 @@ may not be as efficient as they could/should be. By all means improve them & forward me a copy. Any takers? Anyone? I also need perl scripts for the parsecsv, loop & regexp examples. +############################################################# +Note: +the results below are different from running the benchmarking +scripts now. + +The number of loops for each test has been reduced to make +the benchmarking quicker to run, while each test is run +multiple times to average the results. + +The timing numbers are indicative, and the numbers are not the +actual time taken to run a test. + +############################################################# + RESULTS for v0.7.1, 17-8-2000: CAST diff --git a/benchmark/array.awk b/benchmark/array.awk index 02c5109..5f81c28 100644 --- a/benchmark/array.awk +++ b/benchmark/array.awk @@ -5,7 +5,7 @@ BEGIN { if (!base) - base = 300000 + base = 3000 for (i=0; i0) { x = $3 - if (nr++ < 2) - print x + if (nr++ < 2) {} + #print x } system("rm -f io.txt"); diff --git a/benchmark/io.pl b/benchmark/io.pl index ee41877..4eeb5a3 100644 --- a/benchmark/io.pl +++ b/benchmark/io.pl @@ -6,7 +6,7 @@ # another example of why Awk should be used for processing # data! ;-) -$base = 1500000; +$base = 15000; $v3 = "qwerty qwerty qwerty qwerty qwerty qwerty"; $v4 = "quincy quincy quincy quincy quincy quincy"; $nr = 0; @@ -30,7 +30,7 @@ @fields = split(" "); $x = $fields[3]; if ($nr++ < 2) { - print($x, "\n"); + #print($x, "\n"); } #$nr = $nr + 1; } diff --git a/benchmark/io.py b/benchmark/io.py index 2cdfbf4..6015582 100644 --- a/benchmark/io.py +++ b/benchmark/io.py @@ -7,7 +7,7 @@ # data! ;-) import os -base = 1500000 +base = 15000 v3 = "qwerty qwerty qwerty qwerty qwerty qwerty" v4 = "quincy quincy quincy quincy quincy quincy" nr = 0 @@ -26,7 +26,8 @@ fields = S.split(" ") x = fields[3] if nr < 2: - print(x) + nr = nr + #print(x) nr = nr + 1 f.close() diff --git a/benchmark/io.tcl b/benchmark/io.tcl index 6c72444..531a5e3 100644 --- a/benchmark/io.tcl +++ b/benchmark/io.tcl @@ -1,6 +1,6 @@ #!/usr/local/bin/tcl -set base 1500000 +set base 15000 set v3 "qwerty qwerty qwerty qwerty qwerty qwerty" set v4 "quincy quincy quincy quincy quincy quincy" @@ -23,7 +23,7 @@ while {[gets $io_txt line]>-1} { set arr [split $line " "] set x [lindex $arr 2] if {$nr < 2} { - puts $x + #puts $x } incr nr } diff --git a/benchmark/lib/benchmarksort.awk b/benchmark/lib/benchmarksort.awk new file mode 100644 index 0000000..b199757 --- /dev/null +++ b/benchmark/lib/benchmarksort.awk @@ -0,0 +1,41 @@ +# sort +# type\tname\ttime +# by type|time +# +BEGIN { + FS = "\t" + OFS = FS + OFMT = "%0.02f" +} +!/PERL|PYTHON|AWKA|MAWK|GAWK|TCL/ {next} +{ + # sum and count the time values for each type,name combination + type = $1 + name = $2 + time = $3 + split($3, T, " ") + tsum[type","name] += T[1] + nr[type","name] += 1 + typ[type] = type +} +END { + for(tn in tsum) { + split(tn, X, ",") + # times array - use asorti to sort indexes by time + t[tsum[tn]","X[1]","X[2]] = 1 + } + asort(typ,typsorted) + asorti(t, tkeys) + for(y in typsorted) { + if(y>1) print "" + print toupper(typsorted[y])":" + j = 1 + for(x in tkeys) { + split(tkeys[x], XX, ",") + if(typsorted[y] == XX[2]) { + #print XX[2]","t[tkeys[x]]","XX[1] + printf("%d: %-10s %*.2f\n", j++, XX[3], 6, 10*XX[1]) + } + } + } +} diff --git a/benchmark/loop.awk b/benchmark/loop.awk index 5e450f9..af02279 100644 --- a/benchmark/loop.awk +++ b/benchmark/loop.awk @@ -71,6 +71,8 @@ BEGIN { } } } + + exit print "" print "and the best World Cup 99 cricket team is..." diff --git a/benchmark/loop.pl b/benchmark/loop.pl index 4eac6cf..5db34db 100644 --- a/benchmark/loop.pl +++ b/benchmark/loop.pl @@ -126,6 +126,8 @@ } } +exit; + print ''; print 'and the best World Cup 99 cricket team is...'; print 'POSITION ', 'TEAM', 'PTS', 'PLAYER'; diff --git a/benchmark/loop.py b/benchmark/loop.py index 2d5b614..19842f8 100644 --- a/benchmark/loop.py +++ b/benchmark/loop.py @@ -94,6 +94,8 @@ bbw3 = bw3 bbw4 = bw4 +exit(); + print('') print('and the best World Cup 99 cricket team is...') print('POSITION ', '\t', 'TEAM', '\t', 'PTS', '\t', 'PLAYER') diff --git a/benchmark/parsecsv.awk b/benchmark/parsecsv.awk index 85d4fb1..c3da081 100644 --- a/benchmark/parsecsv.awk +++ b/benchmark/parsecsv.awk @@ -1,5 +1,5 @@ BEGIN { - if (!base) base = 50000 + if (!base) base = 500 FS="," line[1] = "a,b,c,d" line[2] = "a,\"b\",c,d" diff --git a/benchmark/recurse.awk b/benchmark/recurse.awk index b8dcb8e..fa28286 100644 --- a/benchmark/recurse.awk +++ b/benchmark/recurse.awk @@ -6,8 +6,8 @@ function rec(a, b) { } BEGIN { - for (i=1; i<2000; i++) + for (i=1; i<20; i++) x += rec(1,400) - print x + #print x } diff --git a/benchmark/recurse.pl b/benchmark/recurse.pl index c22d0a3..a30d11a 100644 --- a/benchmark/recurse.pl +++ b/benchmark/recurse.pl @@ -8,9 +8,9 @@ sub rec { } } -$base = 2000; +$base = 20; $x = 0; for ($i=1; $i<$base; $i++) { $x += rec(1, 400); } -print $x."\n"; +#print $x."\n"; diff --git a/benchmark/recurse.py b/benchmark/recurse.py index e825632..ebc9f6c 100644 --- a/benchmark/recurse.py +++ b/benchmark/recurse.py @@ -6,8 +6,8 @@ def rec(x, y): else: return rec(a+1, b) -base = 2000 +base = 20 x = 0 for i in range(1, base): x += rec(1, 400) -print(x, '\n') +#print(x, '\n') diff --git a/benchmark/regexp.awk b/benchmark/regexp.awk index 44e27e3..003e7ea 100644 --- a/benchmark/regexp.awk +++ b/benchmark/regexp.awk @@ -1,7 +1,7 @@ # Contributed by Eiso AB BEGIN { - if (!base) base = 30000 + if (!base) base = 300 Switch["123"] = " abc " Switch["82"] = " def " diff --git a/benchmark/split.awk b/benchmark/split.awk index 0dd45e9..7ae84fb 100644 --- a/benchmark/split.awk +++ b/benchmark/split.awk @@ -1,5 +1,5 @@ BEGIN { - if (!base) base = 200000 + if (!base) base = 2000 str = "Newcastle Knights are the best there is" diff --git a/benchmark/split.pl b/benchmark/split.pl index b7112c0..802eb4c 100644 --- a/benchmark/split.pl +++ b/benchmark/split.pl @@ -1,4 +1,4 @@ -$base = 200000; +$base = 2000; $str = "Newcastle Knights are the best there is"; diff --git a/benchmark/split.py b/benchmark/split.py index d1ffc22..f68a1cf 100644 --- a/benchmark/split.py +++ b/benchmark/split.py @@ -1,6 +1,6 @@ import sys, re, os -base = 200000 +base = 2000 str = "Newcastle Knights are the best there is" diff --git a/test/Makefile.in b/test/Makefile.in index 7823bf0..f7af4df 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -27,18 +27,20 @@ SHELL = /bin/sh AWK = @AWK@ CMP = @CMP@ -CC = @CC@ +CC = @CC@ -O3 EXE = @EXE@ MLIB = @MATHLIB@ SLIB = @SOCKET_LIBS@ AWKA = ../awka/awka -MATHLIB = $(MLIB) $(SLIB) +MATHLIB = $(MLIB) $(SLIB) # for the brave at heart... #AWKA = ../awka/awka -d #MATHLIB = $(MLIB) -L../dfa -I../dfa -ldfa +CFLAGS = -L../lib -I../lib ../lib/libawka.a $(MATHLIB) + srcdir = @srcdir@ VPATH = @srcdir@ @@ -58,7 +60,8 @@ basic: msg swaplns messages a_cat pdb_find_salt argarray longwrds \ nfldstr foronsplit divide parsecsv arraycat argtest2 fw rsre unbuf \ bslash print cox gensub zeroflag getnr2tm getnr2tb \ numindex subslash opasnslf opasnidx arynocls getlnbuf arysubnm \ - nlstrina nextfile next rsnul1nl beginexit mainexit fnrtest + nlstrina nextfile next rsnul1nl beginexit mainexit fnrtest \ + powtest begingetline extendedchars revive-awka: rslen rsnull scgi @@ -74,13 +77,13 @@ extra: regtest inftest next:: @$(AWKA) -f next.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx nextfile.in1 >_$@ $(CMP) $(srcdir)/next.ok _$@ && rm -f _$@ nextfile:: @$(AWKA) -f nextfile.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx nextfile.in1 nextfile.in2 nextfile.in3 >_$@ $(CMP) $(srcdir)/nextfile.ok _$@ && rm -f _$@ @@ -90,55 +93,55 @@ nasty:: @echo '-> order of execution some C compilers decide on, and really its not a' @echo '-> problem. But if the test works for you, great!' @$(AWKA) -f nasty.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/nasty.ok _$@ && rm -f _$@ zeroflag:: @$(AWKA) -f zeroflag.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/zeroflag.ok _$@ && rm -f _$@ rsnul1nl:: @$(AWKA) -f rsnul1nl.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx rsnul1nl.in >_$@ $(CMP) $(srcdir)/rsnul1nl.ok _$@ && rm -f _$@ rsnull:: @ $(AWKA) -f $@.awk > x.c - @ $(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @ $(CC) x.c $(CFLAGS) -o xx @/bin/echo -n -e "abc\0def\0hij" | ./xx > _$@ $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ rslen:: @ $(AWKA) -f $@.awk > $@.c - @ $(CC) -g $@.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o $@.exe + @ $(CC) $@.c $(CFLAGS) -o $@.exe @/bin/echo -n -e "123456789" | ./$@.exe > _$@ $(CMP) $(srcdir)/$@.ok _$@ && rm -f $@.exe $@.c _$@ scgi:: @ $(AWKA) -f $@.awk > $@.c - @ $(CC) -g $@.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o $@.exe + @ $(CC) $@.c $(CFLAGS) -o $@.exe @ ./$@.exe $@.in > $@.out $(CMP) $(srcdir)/$@.ok $@.out && rm -f $@.exe $@.c $@.out getnr2tm:: @$(AWKA) -f getnr2tm.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx getnr2tm.in >_$@ $(CMP) $(srcdir)/getnr2tm.ok _$@ && rm -f _$@ getnr2tb:: @$(AWKA) -f getnr2tb.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx getnr2tb.in >_$@ $(CMP) $(srcdir)/getnr2tb.ok _$@ && rm -f _$@ asort:: @$(AWKA) -f asort.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/asort.ok _$@ && rm -f _$@ @@ -148,64 +151,64 @@ printf1:: @echo '-> for reasons known only to itself. If you can provide telnet access' @echo '-> to a machine exhibiting this problem do let me know. -andrew' @$(AWKA) -f printf1.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/printf1.ok _$@ && rm -f _$@ numindex:: @$(AWKA) -f numindex.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx <$(srcdir)/numindex.in >_$@ $(CMP) $(srcdir)/numindex.ok _$@ && rm -f _$@ subslash:: @$(AWKA) -f subslash.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/subslash.ok _$@ && rm -f _$@ opasnslf:: @$(AWKA) -f opasnslf.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/opasnslf.ok _$@ && rm -f _$@ opasnidx:: @$(AWKA) -f opasnidx.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/opasnidx.ok _$@ && rm -f _$@ arynocls:: @$(AWKA) -f arynocls.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx arynocls.in >_$@ $(CMP) $(srcdir)/arynocls.ok _$@ && rm -f _$@ getlnbuf:: @$(AWKA) -f getlnbuf.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx getlnbuf.in >_$@ @$(AWKA) -f gtlnbufv.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx getlnbuf.in >_2$@ $(CMP) $(srcdir)/getlnbuf.ok _$@ && $(CMP) $(srcdir)/getlnbuf.ok _2$@ && rm -f _$@ _2$@ arysubnm:: @$(AWKA) -f arysubnm.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/arysubnm.ok _$@ && rm -f _$@ nlstrina:: @$(AWKA) -f nlstrina.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/nlstrina.ok _$@ && rm -f _$@ poundbang:: @$(AWKA) -f poundbang >x.c; - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx poundbang >_`basename $@` $(CMP) $(srcdir)/poundbang.ok _`basename $@` && rm -f _`basename $@` @@ -214,16 +217,17 @@ msg:: @echo 'in floating point values are probably benign -- in particular,' @echo 'some systems may omit a leading zero and the floating point' @echo 'precision may lead to slightly different output in a few cases.' + @echo '' swaplns:: @$(AWKA) -f $(srcdir)/swaplns.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/swaplns.in >_$@ $(CMP) $(srcdir)/swaplns.ok _$@ && rm -f _$@ messages:: @$(AWKA) -f $(srcdir)/messages.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >out2 2>out3 { $(CMP) $(srcdir)/out1.ok out1 && $(CMP) $(srcdir)/out2.ok out2 && \ $(CMP) $(srcdir)/out3.ok out3 && rm -f out1 out2 out3; } || \ @@ -236,223 +240,223 @@ argarray:: *) cp $(srcdir)/argarray.in . ;; \ esac @$(AWKA) -f $(srcdir)/argarray.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @TEST=test echo just a test | ./xx -v EXE=$(EXE) ./argarray.in - >_$@ $(CMP) $(srcdir)/argarray.ok _$@ && rm -f _$@ argtest2:: @$(AWKA) -f $(srcdir)/argtest2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ @$(AWKA) -f $(srcdir)/argtest2.awk -a "-v var=value" >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >>_$@ @$(AWKA) -f $(srcdir)/argtest2.awk -a "-We -v var=value" >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >>_$@ $(CMP) $(srcdir)/argtest2.ok _$@ && rm -f _$@ fstabplus:: @$(AWKA) -f $(srcdir)/fstabplus.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo '1 2' | ./xx >_$@ $(CMP) $(srcdir)/fstabplus.ok _$@ && rm -f _$@ pdb_find_salt:: @$(AWKA) -f $(srcdir)/pdb_find_salt.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx pdb_find_salt.in >_$@ $(CMP) $(srcdir)/pdb_find_salt.ok _$@ && rm -f _$@ print:: @$(AWKA) -f $(srcdir)/print.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/print.ok _$@ && rm -f _$@ gensub:: @$(AWKA) -f $(srcdir)/gensub.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/gensub.ok _$@ && rm -f _$@ cox:: @$(AWKA) -f $(srcdir)/cox.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/cox.ok _$@ && rm -f _$@ hh:: @$(AWKA) -f $(srcdir)/hh.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx -v scalefile=hh.in >_$@ $(CMP) $(srcdir)/hh.ok _$@ && rm -f _$@ retest:: @$(AWKA) -f $(srcdir)/retest.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/retest.ok _$@ && rm -f _$@ bslash:: @$(AWKA) -f $(srcdir)/bslash.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/bslash.ok _$@ && rm -f _$@ fw:: @$(AWKA) -f $(srcdir)/fw.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx fw.in >_$@ $(CMP) $(srcdir)/fw.ok _$@ && rm -f _$@ rsre:: @$(AWKA) -f $(srcdir)/rsre.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx rsre.awk >_$@ $(CMP) $(srcdir)/rsre.ok _$@ && rm -f _$@ unbuf:: @$(AWKA) -f $(srcdir)/unbuf.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @cat $(srcdir)/unbuf.awk | ./xx -vINFILE="$(srcdir)/unbuf.awk" unbuf.awk >_$@ $(CMP) $(srcdir)/unbuf.ok _$@ && rm -f _$@ a_cat:: @$(AWKA) -f $(srcdir)/a_cat.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/a_cat.ok _$@ && rm -f _$@ bil:: @$(AWKA) -f $(srcdir)/bil.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx bil.in >_$@ $(CMP) $(srcdir)/bil.ok _$@ && rm -f _$@ bil2:: @$(AWKA) -f $(srcdir)/bil2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx bil2.in1 >_$@ $(CMP) $(srcdir)/bil2.ok _$@ && rm -f _$@ eiso:: @$(AWKA) -f $(srcdir)/eiso.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx eiso.in >_$@ $(CMP) $(srcdir)/eiso.ok _$@ && rm -f _$@ eiso2:: @$(AWKA) -f $(srcdir)/eiso2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx eiso2.in >_$@ $(CMP) $(srcdir)/eiso2.ok _$@ && rm -f _$@ eiso3:: @$(AWKA) -f $(srcdir)/eiso3.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/eiso3.ok _$@ && rm -f _$@ eiso4:: @$(AWKA) -f $(srcdir)/eiso4.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx eiso4.in >_$@ $(CMP) $(srcdir)/eiso4.ok _$@ && rm -f _$@ divide:: @$(AWKA) -f $(srcdir)/divide.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/divide.ok _$@ && rm -f _$@ parsecsv:: @$(AWKA) -f $(srcdir)/parsecsv.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx parsecsv.in >_$@ $(CMP) $(srcdir)/parsecsv.ok _$@ && rm -f _$@ range:: @$(AWKA) -f $(srcdir)/range.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx range.in >_$@ $(CMP) $(srcdir)/range.ok _$@ && rm -f _$@ conflict:: @$(AWKA) -f $(srcdir)/conflict.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/conflict.ok _$@ && rm -f _$@ aloop:: @$(AWKA) -f $(srcdir)/aloop.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/aloop.ok _$@ && rm -f _$@ dubois:: @$(AWKA) -f $(srcdir)/dubois.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/dubois.ok _$@ && rm -f _$@ splitrem:: @$(AWKA) -f $(srcdir)/splitrem.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/splitrem.ok _$@ && rm -f _$@ fun:: @$(AWKA) -f $(srcdir)/fun.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/fun.ok _$@ && rm -f _$@ fsrs:: @$(AWKA) -f $(srcdir)/fsrs.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/fsrs.in >_$@ $(CMP) $(srcdir)/fsrs.ok _$@ && rm -f _$@ amsal:: @$(AWKA) -f $(srcdir)/amsal.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/amsal.in >_$@ $(CMP) $(srcdir)/amsal.ok _$@ && rm -f _$@ amsal2:: @$(AWKA) -f $(srcdir)/amsal2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/amsal2.awk >_$@ $(CMP) $(srcdir)/amsal2.ok _$@ && rm -f _$@ amsal3:: @$(AWKA) -f $(srcdir)/amsal3.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/amsal3.in >_$@ $(CMP) $(srcdir)/amsal3.ok _$@ && rm -f _$@ amsal4:: @$(AWKA) -f $(srcdir)/amsal4.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/amsal4-1.in $(srcdir)/amsal4-2.in >_$@ $(CMP) $(srcdir)/amsal4.ok _$@ && rm -f _$@ amsal5:: @$(AWKA) -f $(srcdir)/amsal5.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/amsal5.in >_$@ $(CMP) $(srcdir)/amsal5.ok _$@ && rm -f _$@ arraycat:: @$(AWKA) -f $(srcdir)/arraycat.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/arraycat.ok _$@ && rm -f _$@ longwrds:: @$(AWKA) -f $(srcdir)/longwrds.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/manpage >_$@ $(CMP) $(srcdir)/longwrds.ok _$@ && rm -f _$@ @@ -464,13 +468,13 @@ regtest:: posix:: @$(AWKA) -f $(srcdir)/posix.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo '1:2,3 4' | ./xx >_$@ $(CMP) $(srcdir)/posix.ok _$@ && rm -f _$@ posix2:: @$(AWKA) -f $(srcdir)/posix2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx posix2.in >_$@ $(CMP) $(srcdir)/posix2.ok _$@ && rm -f _$@ @@ -479,7 +483,7 @@ manyfiles:: @mkdir junk @$(AWK) 'BEGIN { for (i = 1; i <= 32; i++) print i, i}' >_$@ @$(AWKA) -f $(srcdir)/manyfiles.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx _$@ _$@ @echo "This number better be 1 -> " | tr -d '\012\015' @wc -l junk/* | $(AWK) '$$1 != 2' | wc -l @@ -487,152 +491,152 @@ manyfiles:: compare:: @$(AWKA) -f $(srcdir)/compare.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx 0 1 $(srcdir)/compare.in >_$@ $(CMP) $(srcdir)/compare.ok _$@ && rm -f _$@ arrayref:: @$(AWKA) -f $(srcdir)/arrayref.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/arrayref.ok _$@ && rm -f _$@ rs:: @$(AWKA) '{ print $$1, $$2}' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx -v RS="" $(srcdir)/rs.in >_$@ $(CMP) $(srcdir)/rs.ok _$@ && rm -f _$@ fsbs:: @$(AWKA) '{ print $$1, $$2 }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx -v FS='\' $(srcdir)/fsbs.in >_$@ $(CMP) $(srcdir)/fsbs.ok _$@ && rm -f _$@ inftest:: @echo This test is very machine specific... @$(AWKA) -f $(srcdir)/inftest.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/inftest.ok _$@ && rm -f _$@ getline:: @$(AWKA) -f $(srcdir)/getline.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/getline.awk $(srcdir)/getline.awk >_$@ $(CMP) $(srcdir)/getline.ok _$@ && rm -f _$@ getline2:: @$(AWKA) -f $(srcdir)/getline2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/getline2.in >_$@ $(CMP) $(srcdir)/getline2.ok _$@ && rm -f _$@ rand:: @$(AWKA) -f $(srcdir)/rand.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/rand.ok _$@ && rm -f _$@ negexp:: @$(AWKA) 'BEGIN { a = -2; print 10^a }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/negexp.ok _$@ && rm -f _$@ asgext:: @$(AWKA) -f $(srcdir)/asgext.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/asgext.in >_$@ $(CMP) $(srcdir)/asgext.ok _$@ && rm -f _$@ anchgsub:: @$(AWKA) -f $(srcdir)/anchgsub.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/anchgsub.in >_$@ $(CMP) $(srcdir)/anchgsub.ok _$@ && rm -f _$@ splitargv:: @$(AWKA) -f $(srcdir)/splitargv.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/splitargv.in >_$@ $(CMP) $(srcdir)/splitargv.ok _$@ && rm -f _$@ nfset:: @$(AWKA) -f $(srcdir)/nfset.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/nfset.in >_$@ $(CMP) $(srcdir)/nfset.ok _$@ && rm -f _$@ reparse:: @$(AWKA) -f $(srcdir)/reparse.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/reparse.in >_$@ $(CMP) $(srcdir)/reparse.ok _$@ && rm -f _$@ convfmt:: @$(AWKA) -f $(srcdir)/convfmt.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/convfmt.ok _$@ && rm -f _$@ litoct:: @$(AWKA) -f $(srcdir)/litoct.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo ab | ./xx >_$@ $(CMP) $(srcdir)/litoct.ok _$@ && rm -f _$@ resplit:: @$(AWKA) '{ FS = ":"; $$0 = $$0; print $$2 }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo a:b:c d:e:f | ./xx > _$@ $(CMP) $(srcdir)/resplit.ok _$@ && rm -f _$@ rswhite:: @$(AWKA) -f $(srcdir)/rswhite.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/rswhite.in > _$@ $(CMP) $(srcdir)/rswhite.ok _$@ && rm -f _$@ intprec:: @-$(AWKA) -f $(srcdir)/intprec.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx > _$@ 2>&1 $(CMP) $(srcdir)/intprec.ok _$@ && rm -f _$@ childin:: @$(AWKA) 'BEGIN { "cat" | getline; print; close("cat") }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo hi | ./xx > _$@ $(CMP) $(srcdir)/childin.ok _$@ && rm -f _$@ numsubstr:: @$(AWKA) -f numsubstr.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @-AWKPATH=$(srcdir) ./xx $(srcdir)/numsubstr.in >_$@ $(CMP) $(srcdir)/numsubstr.ok _$@ && rm -f _$@ gnureops:: @$(AWKA) -f $(srcdir)/gnureops.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/gnureops.ok _$@ && rm -f _$@ pcntplus:: @$(AWKA) -f $(srcdir)/pcntplus.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/pcntplus.ok _$@ && rm -f _$@ prmreuse:: @$(AWKA) -f $(srcdir)/prmreuse.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/prmreuse.ok _$@ && rm -f _$@ math:: @$(AWKA) -f $(srcdir)/math.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/math.ok _$@ && rm -f _$@ @@ -642,140 +646,140 @@ fflush:: fldchg:: @$(AWKA) -f $(srcdir)/fldchg.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/fldchg.in >_$@ $(CMP) $(srcdir)/fldchg.ok _$@ && rm -f _$@ fldchgnf:: @$(AWKA) -f $(srcdir)/fldchgnf.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/fldchgnf.in >_$@ $(CMP) $(srcdir)/fldchgnf.ok _$@ && rm -f _$@ reindops:: @$(AWKA) -f $(srcdir)/reindops.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/reindops.in >_$@ $(CMP) $(srcdir)/reindops.ok _$@ && rm -f _$@ sprintfc:: @$(AWKA) -f $(srcdir)/sprintfc.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/sprintfc.in >_$@ $(CMP) $(srcdir)/sprintfc.ok _$@ && rm -f _$@ getlnhd:: @$(AWKA) -f $(srcdir)/getlnhd.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/getlnhd.ok _$@ && rm -f _$@ backgsub:: @$(AWKA) -f $(srcdir)/backgsub.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/backgsub.in >_$@ $(CMP) $(srcdir)/backgsub.ok _$@ && rm -f _$@ tweakfld:: @$(AWKA) -f $(srcdir)/tweakfld.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/tweakfld.in >_$@ @rm -f errors.cleanup $(CMP) $(srcdir)/tweakfld.ok _$@ && rm -f _$@ clsflnam:: @$(AWKA) -f $(srcdir)/clsflnam.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/clsflnam.in >_$@ $(CMP) $(srcdir)/clsflnam.ok _$@ && rm -f _$@ mmap8k:: @$(AWKA) '{ print }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/mmap8k.in >_$@ $(CMP) $(srcdir)/mmap8k.in _$@ && rm -f _$@ dynlj:: @$(AWKA) -f $(srcdir)/dynlj.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/dynlj.ok _$@ && rm -f _$@ substr:: @$(AWKA) -f $(srcdir)/substr.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/substr.ok _$@ && rm -f _$@ eofsplit:: @$(AWKA) -f $(srcdir)/eofsplit.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/eofsplit.ok _$@ && rm -f _$@ prt1eval:: @$(AWKA) -f $(srcdir)/prt1eval.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/prt1eval.ok _$@ && rm -f _$@ prtoeval:: @$(AWKA) -f $(srcdir)/prtoeval.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/prtoeval.ok _$@ && rm -f _$@ gsubtest:: @$(AWKA) -f $(srcdir)/gsubtest.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/gsubtest.ok _$@ && rm -f _$@ splitwht:: @$(AWKA) -f $(srcdir)/splitwht.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/splitwht.ok _$@ && rm -f _$@ back89:: @$(AWKA) '/a\8b/' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/back89.in >_$@ $(CMP) $(srcdir)/back89.ok _$@ && rm -f _$@ tradanch:: @$(AWKA) -f $(srcdir)/tradanch.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/tradanch.in >_$@ $(CMP) $(srcdir)/tradanch.ok _$@ && rm -f _$@ nlfldsep:: @$(AWKA) -f $(srcdir)/nlfldsep.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/nlfldsep.in > _$@ $(CMP) $(srcdir)/nlfldsep.ok _$@ && rm -f _$@ splitvar:: @$(AWKA) -f $(srcdir)/splitvar.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/splitvar.in >_$@ $(CMP) $(srcdir)/splitvar.ok _$@ && rm -f _$@ foronsplit:: @$(AWKA) -f $(srcdir)/foronsplit.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/foronsplit.ok _$@ && rm -f _$@ intest:: @$(AWKA) -f $(srcdir)/intest.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/intest.ok _$@ && rm -f _$@ strftlng:: @$(AWKA) -f $(srcdir)/strftlng.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @TZ=UTC; export TZ; ./xx >_$@ @if $(CMP) -s $(srcdir)/strftlng.ok _$@ ; then : ; else \ TZ=UTC0; export TZ; ./xx >_$@ ; \ @@ -784,57 +788,57 @@ strftlng:: nfldstr:: @$(AWKA) '$$1 == 0 { print "bug" }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo | ./xx > _$@ $(CMP) $(srcdir)/nfldstr.ok _$@ && rm -f _$@ nors:: @$(AWKA) '{ print $$NF }' >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @echo A B C D E | tr -d '\012\015' | ./xx - $(srcdir)/nors.in > _$@ $(CMP) $(srcdir)/nors.ok _$@ && rm -f _$@ fnarydel:: @$(AWKA) -f $(srcdir)/fnarydel.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/fnarydel.ok _$@ && rm -f _$@ pipeio1:: @$(AWKA) -f $(srcdir)/pipeio1.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ @rm -f test1 test2 $(CMP) $(srcdir)/pipeio1.ok _$@ && rm -f _$@ pipeio2:: @$(AWKA) -f $(srcdir)/pipeio2.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx -v SRCDIR=$(srcdir) >_$@ $(CMP) $(srcdir)/pipeio2.ok _$@ && rm -f _$@ funstack:: @$(AWKA) -f $(srcdir)/funstack.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/funstack.in >_$@ $(CMP) $(srcdir)/funstack.ok _$@ && rm -f _$@ clobber:: @$(AWKA) -f $(srcdir)/clobber.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/clobber.ok seq && $(CMP) $(srcdir)/clobber.ok _$@ && rm -f _$@ @rm -f seq delarprm:: @$(AWKA) -f $(srcdir)/delarprm.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/delarprm.ok _$@ && rm -f _$@ prdupval:: @$(AWKA) -f $(srcdir)/prdupval.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $(srcdir)/prdupval.in >_$@ $(CMP) $(srcdir)/prdupval.ok _$@ && rm -f _$@ @@ -842,7 +846,7 @@ nondec:: @if grep BITOP ../config.h | grep define > /dev/null; \ then \ $(AWKA) -f $(srcdir)/nondec.awk >x.c; \ - $(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx \ + $(CC) x.c $(CFLAGS) -o xx \ ./xx >_$@; \ else \ cp $(srcdir)/nondec.ok _$@; \ @@ -851,25 +855,43 @@ nondec:: beginexit:: @$(AWKA) -f $(srcdir)/$@.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ mainexit:: @$(AWKA) -f $(srcdir)/$@.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @(./xx $@.in ; echo $$?) >_$@ $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ fnrtest:: @$(AWKA) -f $(srcdir)/$@.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx $@.in $@.in $@.in >_$@ $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +powtest:: + @$(AWKA) -f $(srcdir)/$@.awk >x.c + @$(CC) x.c $(CFLAGS) -o xx + @./xx >_$@ + $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +begingetline:: + @$(AWKA) -f $(srcdir)/$@.awk >x.c + @$(CC) x.c $(CFLAGS) -o xx + @./xx >_$@ + $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +extendedchars:: + @$(AWKA) -f $(srcdir)/$@.awk >x.c + @$(CC) x.c $(CFLAGS) -o xx + @./xx >_$@ + $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + mathxtra:: @$(AWKA) -f $(srcdir)/math_extra.awk >x.c - @$(CC) -g x.c -L../lib -I../lib ../lib/libawka.a $(MATHLIB) -o xx + @$(CC) x.c $(CFLAGS) -o xx @./xx >_$@ $(CMP) $(srcdir)/math_extra.ok _$@ && rm -f _$@ diff --git a/test/arynocls.awk b/test/arynocls.awk index 724c9ac..8e3c9ce 100644 --- a/test/arynocls.awk +++ b/test/arynocls.awk @@ -34,16 +34,16 @@ # The program bug is to not close the file in sub2. function sub1(x) { -# while (getline < "a" == 1) i++ +# while (getline < "a" == 1) i++ while (getline < INPUT == 1) i++ -# close("a") +# close("a") close(INPUT) } function sub2(x) { i=0 delete y -# while (getline < "a" == 1) z[++i] = $1 +# while (getline < "a" == 1) z[++i] = $1 while (getline < INPUT == 1) z[++i] = $1 for(i in z) y[i] = x[i] + z[i] } @@ -53,7 +53,8 @@ function sub3(x, y, z) { for(i=1; i<=4; i++) z[i] = y[i] } -BEGIN { +BEGIN { + INPUT = "a" sub1(x) sub2(x) sub3(x, y, z) diff --git a/test/begingetline.awk b/test/begingetline.awk new file mode 100644 index 0000000..824fd61 --- /dev/null +++ b/test/begingetline.awk @@ -0,0 +1,9 @@ +# Test using getline reading in the BEGIN section +# Reading one value results in ++c being run twice +# and the output is "2" + +BEGIN { + system("echo 1 > _f.out") + while ((getline a[++c] < "_f.out") > 0) { } + print c +} diff --git a/test/begingetline.ok b/test/begingetline.ok new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/begingetline.ok @@ -0,0 +1 @@ +2 diff --git a/test/extendedchars.awk b/test/extendedchars.awk new file mode 100644 index 0000000..f5f044b --- /dev/null +++ b/test/extendedchars.awk @@ -0,0 +1,4 @@ +# test the reading of extended chars (unsigned char) +BEGIN { + print "ján Jón" +} \ No newline at end of file diff --git a/test/extendedchars.ok b/test/extendedchars.ok new file mode 100644 index 0000000..0fb94b1 --- /dev/null +++ b/test/extendedchars.ok @@ -0,0 +1 @@ +ján Jón diff --git a/test/powtest.awk b/test/powtest.awk new file mode 100644 index 0000000..1aa3315 --- /dev/null +++ b/test/powtest.awk @@ -0,0 +1,9 @@ +# test **= in addition to ^= +BEGIN { +x = y = 2; +x ^= 3; +y **= 3; +print "8 <==> "x" <==> "y +#z %_= 3; +#w = 45@789 +} diff --git a/test/powtest.ok b/test/powtest.ok new file mode 100644 index 0000000..2c6dee2 --- /dev/null +++ b/test/powtest.ok @@ -0,0 +1 @@ +8 <==> 8 <==> 8 diff --git a/x.c b/x.c new file mode 100644 index 0000000..e69de29