|
|
1.1 root 1: NEW Oct 87:
2:
3: New functions toupper(s) and tolower(s) that return
4: the case-converted version of s.
5:
6: NEW Jul 87:
7:
8: Array sizes are dynamic: hash table grows as elements are added.
9:
10: Dynamic regular expressions are cached, up to some limit.
11:
12: NEW Jun 87:
13:
14: Fixed split() so that does split(s,t,/r/) properly;
15: fixed index(s,/r/) to be an error), since it's wrong.
16:
17: String value of a numeric constant is the input representation.
18:
19: NEW Sept 86:
20:
21: Changed order of evaluation of x = y to do rhs first
22:
23: New array SYMTAB, the symbol table.
24: not documented, local pleading only
25:
26: -S and -R are officially deprecated; they can't work
27:
28: NEW June 86:
29:
30: if ((i,j,k) in array) ... now works.
31:
32: NEW Apr 86:
33:
34: Pattern action statements can occur on a single line
35: if separated by semicolons.
36:
37: Grammar revised to eliminate many ambiguities caused
38: by abuse of > sign. As a result, constructs like
39: print a > b c
40: are syntactically illegal; parens are required.
41:
42: NEW Jan 86:
43:
44: new function match(s, re) returns position
45: in s where re occurs (origin 1) or 0 if not.
46: new variables RSTART set to pos and RLENGTH
47: to length of matched string.
48:
49: NEW Dec 85:
50:
51: fixed comment handling so can have
52: ..., # comment
53:
54: added ?: operator
55:
56: added do-while as in C
57:
58: arr[i,j], etc., works. Components separated by SUBSEP,
59: initialized to \034.
60:
61: WISH LIST:
62:
63: save compiled state
64: lazy field evaluation
65: type decls
66: scanf
67: access to run-time fcns
68: c output, link to c
69: char fcns, left side fcns (e.g., lsubstr)
70: begin & end in patterns
71: limits on arrays, etc., ought to be dynamic instead of static.
72:
73:
74: CHANGES SO FAR (Jul 85):
75:
76: added & in replacement of sub() and gsub(); use \& to quote it
77:
78: mutiple BEGIN's and END's concatenated
79:
80: replaced error reporting mechanism
81:
82: "function" is a synonym for "func"
83:
84: "delete array[elem]" removes elem from array
85:
86: Fixed bug in field handling for ~ 25% speed up.
87:
88: Augmented the getline function:
89: getline
90: sets $0, NR, NF, $1..., from next input record
91: getline x
92: sets x from next input record, sets NR,
93: but NOT $0, NF, etc.
94: getline < "foo"
95: sets $0 from file foo. sets NF, $1...,
96: but NOT NR
97: getline x < "foo"
98: sets x from foo. no effect on $0, NF, NR, etc.
99:
100: Files are as for print; they are matched by name,
101: and remain open until explicitly closed.
102: Input pipes work; syntax is
103: "whatever" | getline
104: "something" | getline x
105: (This adds a reduce/reduce conflict
106: to the grammar, so it may be a bad idea.)
107:
108: getline returns 0 on EOF, -1 on error, >0 normally
109:
110: Added close function:
111: close("foo") calls fclose for right file or pclose for pipe
112:
113: Added sub(regexp, replacement, str) and gsub(...).
114: Substitutes replacement for leftmost occurrence
115: of regexpr in str, or in $0 if no str supplied.
116: Gsub substitutes for all. Number of changes
117: is returned.
118:
119: Regular expressions can be dynamic. Any constant string
120: or variable can be used as a regular expression
121: in sub(), gsub, or after ~ and !~.
122:
123: Field separators can be regular expressions, both in FS
124: and as the 3rd argument of split().
125:
126: Added "i in arr" condition, for if (...) and patterns.
127: i in arr is true if arr[i] has been defined.
128: Note that this is different from asking if
129: arr[n] == i for some i! We are searching for
130: a subscript, not a value.
131:
132: terminal i/o, eg stderr
133: at least for output, no change needed:
134: print | "cat -u 1>&2"
135: can only have one of these active at one time.
136:
137: ARGC and ARGV[] exist, essentially as in C.
138: ARGC is the number of arguments including the program name.
139: ARGV[0]..ARGV[ARGC-1] are the arguments
140: These can be modified in any way at any time.
141: If an ARGV[i] for i>0 is not null, it is assumed to be
142: the name of a file and is opened in the normal sequence.
143: New members of ARGV can be added dynamically beyond the
144: ones currently processed.
145: The argument '-' is added when input is stdin.
146:
147:
148: added system(), rand(), srand(), sin, cos, atan2
149:
150: added variable FNR -- line number in current file
151: can test FNR == 1 to see if in new file
152:
153: Fixed so that \f, \b, \r, \ddd work in strings as in C
154:
155: Functions are in:
156: recursive
157: arguments are call by value for scalars, by ref for arrays
158: declaration is
159: func f(arg list) statement
160: arguments by name
161: arguments are local; all others global
162: return [expr]
163:
164: Order rules relaxed:
165: BEGIN, END, func declarations can occur anywhere a pattern can.
166:
167: Added check when syntax error encountered,
168: for better identification of some errors.
169: Other error messages better. Line number in source
170: and input line line both given for dynamic errors.
171: Some previously uncaught things now flagged
172: e.g. print <= "foo"
173: print > foo (where foo is null)
174: detects calls of undefined functions, like foo(bar)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.