home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume23
/
rc
/
part01
/
CHANGES
< prev
next >
Wrap
Text File
|
1991-10-18
|
8KB
|
215 lines
Changes since rc-1.0:
builtin now forces a path-search for non-builtin commands. e.g.,
builtin ls
forces a path search for /bin/ls, rather than running a function called
"ls".
A bug in the builtin wait was fixed.
The builtin whatis how takes a -s flag, for displaying available
signals and their handlers, and also prints correct code for
reinterpretation. (metacharacters inside variable names were not
correctly quoted)
An extra field was added to the "limit" builtin for SunOS systems,
which apparently allow a limit on file descriptors.
A home-rolled execve() was written for people with geriatric unices
that don't do #! in the kernel.
SIGTERM is now ignored by rc along with SIGQUIT. (This is not how
Duff's shell behaves, but it is standard practise for Unix shells to
ignore SIGTERM)
If $history was set to a bad file, then rc would print far too many
error messages. Now rc prints one error message and assigns null to
$history, if $history names an invalid file.
rc now explicitly refuses to trap SIGCLD on System V machines, because
of the weird way in which SIGCLD work. (really because I didn't want to
get into the job control business)
A bug was fixed in the parser so that functions with metacharacters in
their names are correctly imported from the environment.
he globber was changed to call stat() before calling opendir();
apparently opendir() succeeds on some Unices even when invoked on
regular files.
It is now illegal to have '=' be part of a variable name. This should
be the only illegal character inside a variable name!
backquote rescanning was rewritten from scratch; now it no longer
assigns null list entries to represent consecutive occurences of $ifs
characters in the input.
e.g., now `{echo ' '} returns a null list, and not a 4-element list
of null characters.
rc used to export all handlers but those in {sighup, sigint, sigquit,
sigterm, sigexit}. Now rc does not export ANY signal handlers.
rc's lexer was cleaned up to accept 8-bit data. rc is now presumed to
be 8-bit clean. I would like to hear of evidence to the contrary.
rc now traps EOF when scanning a variable name inside a heredoc.
rc's fdgchar() was cleaned up so that it did not assign negative values
to unsigned objects. (this one is truly for the pedants)
rc's lexer was fixed so that multiple backslashes at the end of a line
are interpreted correctly.
rc's parser now allows a newline to appear after "else" (via
skipnl()).
main() was exiting in certain situations with an exit status of 0
instead of rc's real exit status.
rc's yacc file was fixed so that yaccs which do "magic" can clean up
after themselves via the tokens YYACCEPT and YYABORT. Most notably,
Sun's yyparse() calls malloc.
A mistake in the argument list of treecpy() was cleaned up.
Calls to write() are now checked for failure.
walk() was optimized for space in two ways: rPIPE was removed and
placed in a separate function body, and a few obvious chances for
employing tail-recursion via goto's was taken. This should result in a
slightly smaller use of stackspace.
Additions since 1.1beta:
------------------------
John Mackin kindly supplied a set of awk scripts to convert rc's
source into K&R 1 C. To perform the conversion, type "make C".
Paul Haahr and I wrote a history program loosely based upon one
that Boyd Roberts sent to me. Both of these programs are
reimplementations of v8 shell history. Type "make history".
Tom Duff has kindly given permission for his paper "rc - a Shell
for Plan 9 and UNIX Systems" to be distributed in PostScript form
with my rc. The file is called "plan9-rc.ps".
Changes since 1.1beta:
----------------------
Builtins were changed to flag an error on too many arguments.
Also, the shift builtin now complains if there are no more elements
in $* to shift.
The error message printed by exec() ("foo not found") when it could
not find an executable has been updated to read "Permission denied",
and so on.
Bugs in the home-rolled execve() were fixed.
A compile-time option was added to rc so that rc exports environment
variable names using only the character set [a-zA-Z0-9_]. This is for
braindamaged Bourne shells which don't like characters like - or :
appearing in variable names. rc does this by encoding the variable
name in a hex-based code. It seems to work fine on systems which need
it, but it's definitely a hack.
rc now supports /dev/fd, if you have it.
Occasionally rc would be too overzealous in its reporting of errors,
so a failed call to write() would cause another failed call to
write() (to print the error!!) and so on... Now rc no longer reports
failed calls to write().
Changes since 1.1gamma:
rc sorts the environment strings before exporting them
rc ignores signals on rc -c. Fixes the "rc -c sh" followed by an
interrupt bug.
the bogus skipnl() action is gone from the parser; the optional
newlines are implemented as yacc productions.
a bug in the function-printing code was fixed ( {echo}>file was
exported incorrectly as {echo}>file () ).
a=1 {b=2} is now correctly executed as a local assignment to a and a
global assignemnt to b, at the cost of a few extra braces in the
printing of functions.
rc's use of jmp_buf was changed to work with braindamaged architectures
which don't define jmp_buf as an array.
rc's access() was broken when uid == 0.
rc now incorporates switch--case parsing in the grammar; this means
that the rules are a little more strict than they were before, but
reasonable switch() statements should not break.
rc -n means don't execute commands, just parse.
eval statements now do not reset the line number count in scripts. This
allows for more useful error messages, e.g.,
line 53: syntax error near end of line
as opposed to
line 1: syntax error near end of line
rc's non-exporting of variables like "pid" and "*" has been improved;
it was previously not possible to export a function named "pid" or a
variable named "sigint". This has been fixed.
rc's use of wait() was completely revamped. Now FIFOs should be more
reliable, as should be signal handlers.
rc -x is now more informative: variable and function assignments are
printed, as are calls to ~.
rc -nx now prints the parsetree of each command in addition to refusing
to execute it.
for all it's worth, variables named "while" "switch" etc. are now
correctly described by "whatis" (i.e., quoted).
for all it's worth, you can now return lists from functions, as long as
each element is a valid exit status (integer, or lowercase signal name
(with or without +core)) The most useful application for this would
be:
fn foo {
stuff
stat = $status
stuff
return $stat
}
here documents in loops and/or functions now interpret variable
expansions at execute rather than at parse-time.
Changes since 1.1gamma:
-----------------------
Several bugs were fixed. In particular:
When an exception in a braced group occurred, rc did not pop all local
variable definitions.
returning from fn prompt would cause an infinite loop.
the postfix increment operator used for numbering the /tmp fifos that
rc uses to implement <{} redirection was placed inside a cpp macro
which evaluated an argument twice, and hence all fifos were named after
odd integers. In the interest of fairness to the even integers, this
has been corrected.
the man page has been cleaned up in countless ways.
rc -nx printed a redundant file-descriptor for "foo<{bar}"
"builtin exec sh" did not do the right thing, partly because exec is
not a genuine builtin. However, now it does.