home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume23 / rc / part01 / CHANGES < prev    next >
Text File  |  1991-10-18  |  8KB  |  215 lines

  1. Changes since rc-1.0:
  2.  
  3. builtin now forces a path-search for non-builtin commands. e.g.,
  4.  
  5.     builtin ls
  6.  
  7. forces a path search for /bin/ls, rather than running a function called
  8. "ls".
  9.  
  10. A bug in the builtin wait was fixed.
  11.  
  12. The builtin whatis how takes a -s flag, for displaying available
  13. signals and their handlers, and also prints correct code for
  14. reinterpretation.  (metacharacters inside variable names were not
  15. correctly quoted)
  16.  
  17. An extra field was added to the "limit" builtin for SunOS systems,
  18. which apparently allow a limit on file descriptors.
  19.  
  20. A home-rolled execve() was written for people with geriatric unices
  21. that don't do #! in the kernel.
  22.  
  23. SIGTERM is now ignored by rc along with SIGQUIT. (This is not how
  24. Duff's shell behaves, but it is standard practise for Unix shells to
  25. ignore SIGTERM)
  26.  
  27. If $history was set to a bad file, then rc would print far too many
  28. error messages.  Now rc prints one error message and assigns null to
  29. $history, if $history names an invalid file.
  30.  
  31. rc now explicitly refuses to trap SIGCLD on System V machines, because
  32. of the weird way in which SIGCLD work. (really because I didn't want to
  33. get into the job control business)
  34.  
  35. A bug was fixed in the parser so that functions with metacharacters in
  36. their names are correctly imported from the environment.
  37.  
  38. he globber was changed to call stat() before calling opendir();
  39. apparently opendir() succeeds on some Unices even when invoked on
  40. regular files.
  41.  
  42. It is now illegal to have '=' be part of a variable name. This should
  43. be the only illegal character inside a variable name!
  44.  
  45. backquote rescanning was rewritten from scratch; now it no longer
  46. assigns null list entries to represent consecutive occurences of $ifs
  47. characters in the input.
  48.  
  49. e.g., now `{echo '   '} returns a null list, and not a 4-element list
  50. of null characters.
  51.  
  52. rc used to export all handlers but those in {sighup, sigint, sigquit,
  53. sigterm, sigexit}.  Now rc does not export ANY signal handlers.
  54.  
  55. rc's lexer was cleaned up to accept 8-bit data. rc is now presumed to
  56. be 8-bit clean.  I would like to hear of evidence to the contrary.
  57.  
  58. rc now traps EOF when scanning a variable name inside a heredoc.
  59.  
  60. rc's fdgchar() was cleaned up so that it did not assign negative values
  61. to unsigned objects.  (this one is truly for the pedants)
  62.  
  63. rc's lexer was fixed so that multiple backslashes at the end of a line
  64. are interpreted correctly.
  65.  
  66. rc's parser now allows a newline to appear after "else" (via
  67. skipnl()).
  68.  
  69. main() was exiting in certain situations with an exit status of 0
  70. instead of rc's real exit status.
  71.  
  72. rc's yacc file was fixed so that yaccs which do "magic" can clean up
  73. after themselves via the tokens YYACCEPT and YYABORT. Most notably,
  74. Sun's yyparse() calls malloc.
  75.  
  76. A mistake in the argument list of treecpy() was cleaned up.
  77.  
  78. Calls to write() are now checked for failure.
  79.  
  80. walk() was optimized for space in two ways: rPIPE was removed and
  81. placed in a separate function body, and a few obvious chances for
  82. employing tail-recursion via goto's was taken. This should result in a
  83. slightly smaller use of stackspace.
  84.  
  85. Additions since 1.1beta:
  86. ------------------------
  87.  
  88. John Mackin kindly supplied a set of awk scripts to convert rc's
  89. source into K&R 1 C. To perform the conversion, type "make C".
  90.  
  91. Paul Haahr and I wrote a history program loosely based upon one
  92. that Boyd Roberts sent to me. Both of these programs are
  93. reimplementations of v8 shell history. Type "make history".
  94.  
  95. Tom Duff has kindly given permission for his paper "rc - a Shell
  96. for Plan 9 and UNIX Systems" to be distributed in PostScript form
  97. with my rc. The file is called "plan9-rc.ps".
  98.  
  99. Changes since 1.1beta:
  100. ----------------------
  101.  
  102. Builtins were changed to flag an error on too many arguments.
  103. Also, the shift builtin now complains if there are no more elements
  104. in $* to shift.
  105.  
  106. The error message printed by exec() ("foo not found") when it could
  107. not find an executable has been updated to read "Permission denied",
  108. and so on.
  109.  
  110. Bugs in the home-rolled execve() were fixed.
  111.  
  112. A compile-time option was added to rc so that rc exports environment
  113. variable names using only the character set [a-zA-Z0-9_]. This is for
  114. braindamaged Bourne shells which don't like characters like - or :
  115. appearing in variable names. rc does this by encoding the variable
  116. name in a hex-based code. It seems to work fine on systems which need
  117. it, but it's definitely a hack.
  118.  
  119. rc now supports /dev/fd, if you have it.
  120.  
  121. Occasionally rc would be too overzealous in its reporting of errors,
  122. so a failed call to write() would cause another failed call to
  123. write() (to print the error!!) and so on... Now rc no longer reports
  124. failed calls to write().
  125. Changes since 1.1gamma:
  126.  
  127. rc sorts the environment strings before exporting them
  128.  
  129. rc ignores signals on rc -c. Fixes the "rc -c sh" followed by an
  130. interrupt bug.
  131.  
  132. the bogus skipnl() action is gone from the parser; the optional
  133. newlines are implemented as yacc productions.
  134.  
  135. a bug in the function-printing code was fixed ( {echo}>file was
  136. exported incorrectly as {echo}>file () ).
  137.  
  138. a=1 {b=2} is now correctly executed as a local assignment to a and a
  139. global assignemnt to b, at the cost of a few extra braces in the
  140. printing of functions.
  141.  
  142. rc's use of jmp_buf was changed to work with braindamaged architectures
  143. which don't define jmp_buf as an array.
  144.  
  145. rc's access() was broken when uid == 0.
  146.  
  147. rc now incorporates switch--case parsing in the grammar; this means
  148. that the rules are a little more strict than they were before, but
  149. reasonable switch() statements should not break.
  150.  
  151. rc -n means don't execute commands, just parse.
  152.  
  153. eval statements now do not reset the line number count in scripts. This
  154. allows for more useful error messages, e.g.,
  155.  
  156.     line 53: syntax error near end of line
  157.  
  158. as opposed to
  159.  
  160.     line 1: syntax error near end of line
  161.  
  162. rc's non-exporting of variables like "pid" and "*" has been improved;
  163. it was previously not possible to export a function named "pid" or a
  164. variable named "sigint". This has been fixed.
  165.  
  166. rc's use of wait() was completely revamped. Now FIFOs should be more
  167. reliable, as should be signal handlers.
  168.  
  169. rc -x is now more informative: variable and function assignments are
  170. printed, as are calls to ~.
  171.  
  172. rc -nx now prints the parsetree of each command in addition to refusing
  173. to execute it.
  174.  
  175. for all it's worth, variables named "while" "switch" etc. are now
  176. correctly described by "whatis" (i.e., quoted).
  177.  
  178. for all it's worth, you can now return lists from functions, as long as
  179. each element is a valid exit status (integer, or lowercase signal name
  180. (with or without +core)) The most useful application for this would
  181. be:
  182.  
  183.     fn foo {
  184.         stuff
  185.         stat = $status
  186.         stuff
  187.         return $stat
  188.     }
  189.  
  190. here documents in loops and/or functions now interpret variable
  191. expansions at execute rather than at parse-time.
  192.  
  193. Changes since 1.1gamma:
  194. -----------------------
  195.  
  196. Several bugs were fixed. In particular:
  197.  
  198. When an exception in a braced group occurred, rc did not pop all local
  199. variable definitions.
  200.  
  201. returning from fn prompt would cause an infinite loop.
  202.  
  203. the postfix increment operator used for numbering the /tmp fifos that
  204. rc uses to implement <{} redirection was placed inside a cpp macro
  205. which evaluated an argument twice, and hence all fifos were named after
  206. odd integers. In the interest of fairness to the even integers, this
  207. has been corrected.
  208.  
  209. the man page has been cleaned up in countless ways.
  210.  
  211. rc -nx printed a redundant file-descriptor for "foo<{bar}"
  212.  
  213. "builtin exec sh" did not do the right thing, partly because exec is
  214. not a genuine builtin. However, now it does.
  215.