Annotation of researchv8dc/cmd/awk/NEW, revision 1.1.1.1

1.1       root        1: BUGS:
                      2:        ARGC and ARGV include a - for stdin when there are no args.
                      3: 
                      4: WISH LIST:
                      5: 
                      6:        %c
                      7:        re parsing function of some kind
                      8:        save compiled state
                      9:        lazy field evaluation
                     10:        type decls
                     11:        scanf
                     12:        access to run-time fcns
                     13:        c output, link to c
                     14:        char fcns, left side fcns (e.g., lsubstr)
                     15:        coercion of expr to condition and vice versa
                     16:        begin & end in patterns
                     17:        limits on arrays, etc., ought to be dynamic instead of static.
                     18: 
                     19: 
                     20: CHANGES SO FAR (Jul 85):
                     21: 
                     22: added & in replacement of sub() and gsub();  use \& to quote it
                     23: 
                     24: mutiple BEGIN's and END's concatenated
                     25: 
                     26: replaced error reporting mechanism
                     27: 
                     28: "function" is a synonym for "func"
                     29: 
                     30: "delete array[elem]" removes elem from array
                     31: 
                     32: Fixed bug in field handling for ~ 25% speed up.
                     33: 
                     34: Augmented the getline function:
                     35:        getline
                     36:                sets $0, NR, NF, $1..., from next input record
                     37:        getline x
                     38:                sets x from next input record, sets NR,
                     39:                but NOT $0, NF, etc.
                     40:        getline < "foo"
                     41:                sets $0 from file foo.  sets NF, $1...,
                     42:                but NOT NR
                     43:        getline x < "foo"
                     44:                sets x from foo.  no effect on $0, NF, NR, etc.
                     45: 
                     46:        Files are as for print; they are matched by name,
                     47:        and remain open until explicitly closed.
                     48:        Input pipes work;  syntax is
                     49:                "whatever" | getline
                     50:                "something" | getline x
                     51:        (This adds a reduce/reduce conflict
                     52:        to the grammar, so it may be a bad idea.)
                     53: 
                     54:        getline returns 0 on EOF, -1 on error, >0 normally
                     55: 
                     56: Added close function:
                     57:        close("foo") calls fclose for right file or pclose for pipe
                     58: 
                     59: Added sub(regexp, replacement, str) and gsub(...).
                     60:        Substitutes replacement for leftmost occurrence
                     61:        of regexpr in str, or in $0 if no str supplied.
                     62:        Gsub substitutes for all.  Number of changes
                     63:        is returned.
                     64: 
                     65: Regular expressions can be dynamic.  Any constant string
                     66:        or variable can be used as a regular expression
                     67:        in sub(), gsub, or after ~ and !~.
                     68: 
                     69: Field separators can be regular expressions, both in FS
                     70:        and as the 3rd argument of split().
                     71: 
                     72: Added "i in arr" condition, for if (...) and patterns.
                     73:        i in arr  is true if arr[i] has been defined.
                     74:        Note that this is different from asking if
                     75:        arr[n] == i for some i!  We are searching for
                     76:        a subscript, not a value.
                     77: 
                     78: terminal i/o, eg stderr
                     79:        at least for output, no change needed:
                     80:        print | "cat -u 1>&2"
                     81:        can only have one of these active at one time.
                     82: 
                     83: ARGC and ARGV[] exist, essentially as in C.
                     84:        ARGC is the number of arguments including the program name.
                     85:        ARGV[0]..ARGV[ARGC-1] are the arguments
                     86:        These can be modified in any way at any time.
                     87:        If an ARGV[i] for i>0 is not null, it is assumed to be
                     88:        the name of a file and is opened in the normal sequence.
                     89:        New members of ARGV can be added dynamically beyond the
                     90:        ones currently processed.
                     91:        The argument '-' is added when input is stdin.
                     92: 
                     93: 
                     94: added system(), rand(), srand(), sin, cos, atan2
                     95: 
                     96: added variable FNR -- line number in current file
                     97:        can test FNR == 1 to see if in new file
                     98: 
                     99: Fixed so that \f, \b, \r, \ddd work in strings as in C
                    100: 
                    101: Functions are in:
                    102:        recursive
                    103:        arguments are call by value for scalars, by ref for arrays
                    104:        declaration is
                    105:                func f(arg list) statement
                    106:                        arguments by name
                    107:        arguments are local;  all others global
                    108:        return [expr]
                    109: 
                    110: Order rules relaxed:
                    111:        BEGIN, END, func declarations can occur anywhere a pattern can.
                    112: 
                    113: Added awkcheck when syntax error encountered,
                    114:        for better identification of some errors.
                    115:        Other error messages better.  Line number in source
                    116:        and input line line both given for dynamic errors.
                    117:        Some previously uncaught things now flagged
                    118:        e.g.    print <= "foo"
                    119:                print > foo (where foo is null)
                    120:        detects calls of undefined functions, like foo(bar)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.