112 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
$OpenBSD: PROJECTS,v 1.5 1999/07/14 13:37:23 millert Exp $
 | 
						|
 | 
						|
Things to be done in pdksh (see also the NOTES file):
 | 
						|
 | 
						|
    * builtin utilities: 
 | 
						|
      pdksh has most if not all POSIX/at&t ksh builtins, but they need to
 | 
						|
      be checked that they conform to POSIX/at&t manual.  Part of the
 | 
						|
      process is changing the builtins to use the ksh_getopt() routine.
 | 
						|
 | 
						|
      The following builtins, which are defined by POSIX, haven't been
 | 
						|
      examined:
 | 
						|
	eval
 | 
						|
 | 
						|
      The first pass has been done on the following commands:
 | 
						|
	. : alias bg break cd continue echo exec exit export false fc fg
 | 
						|
	getopts jobs kill pwd read readonly return set shift time trap true
 | 
						|
	umask unalias unset wait
 | 
						|
 | 
						|
      The second pass (ie, believed to be completely POSIX) has been done on
 | 
						|
      the following commands:
 | 
						|
	test
 | 
						|
 | 
						|
      (ulimit also needs to be examined to check that it fits the posix style)
 | 
						|
 | 
						|
    * test suite
 | 
						|
      Ideally, as the builtin utilities are being POSIXized, short tests
 | 
						|
      should be written to be used in regression testing.  The tests
 | 
						|
      directory contains some tests, but many more need to be written.
 | 
						|
 | 
						|
    * internationalization
 | 
						|
      Need to handle with the LANG and LC_* environment variables.  This
 | 
						|
      involves changes to ensure <ctype.h> macros are being used (currently
 | 
						|
      uses its own macros in many places), figuring out how to deal with
 | 
						|
      bases (for integer arithmetic, eg, 12#1A), and (the nasty one) doing
 | 
						|
      string look ups for error messages, etc..  It probably isn't worth
 | 
						|
      translating strings to other languages yet as the code is likely
 | 
						|
      to change a lot in the near future, but it would be good to have the
 | 
						|
      code set up so string tables can be used.
 | 
						|
 | 
						|
    * trap code
 | 
						|
	* add the DEBUG trap.
 | 
						|
	* fix up signal handling code.  In particular, fatal vs tty signals,
 | 
						|
	  have signal routine to call to check for pending/fatal traps, etc.
 | 
						|
 | 
						|
    * parsing
 | 
						|
	* the time keyword needs to be hacked to accept options (!) since
 | 
						|
	  POSIX says it shall accept the -p option and must skip a -- argument
 | 
						|
	  (end of options).  Yuck.
 | 
						|
 | 
						|
    * lexing
 | 
						|
      the lexing may need a re-write since it currently doesn't parse $( .. ),
 | 
						|
      $(( .. )), (( ... )) properly.
 | 
						|
	* need to ignore contents of quoted strings (and escaped chars?)
 | 
						|
	  inside $( .. ) and $(( .. )) when counting parentheses.
 | 
						|
	* need to put bounds check on states[] array (if it still exists after
 | 
						|
	  the re-write)
 | 
						|
 | 
						|
    * variables
 | 
						|
	* The "struct tbl" that is currently used for variables needs work since
 | 
						|
          more information (eg, array stuff, fields) are needed for variables
 | 
						|
	  but not for the other things that use "struct tbl".
 | 
						|
	* Arrays need to be implemented differently: currently does a linear
 | 
						|
	  search of a linked list to find element i; the linked list is not
 | 
						|
	  freed when a variable is unset.
 | 
						|
 | 
						|
    * functions
 | 
						|
      finish the differences between function x and x(): trap EXIT, traps
 | 
						|
      in general, treatment of OPTIND/OPTARG, 
 | 
						|
 | 
						|
    * history
 | 
						|
      There are two versions of the history code, COMPLEX_HISTORY and
 | 
						|
      EASY_HISTORY, which need to be merged.  COMPLEX does at&t style history
 | 
						|
      where the history file is written after each command and checked when
 | 
						|
      ever looking through the history (in case another shell has added
 | 
						|
      something).  EASY simply reads the history file at startup and writes
 | 
						|
      it before exiting.
 | 
						|
	* re-write the COMPLEX_HISTORY code so mmap() not needed (currently
 | 
						|
	  can't be used on machines without mmap()).
 | 
						|
	* Add multiline knowledge to COMPLEX_HISTORY (see EASY_HISTORY
 | 
						|
	  stuff).
 | 
						|
	* change COMPLEX_HISTORY code so concurrent history files are
 | 
						|
	  controlled by an option (set -o history-concurrent?).  Delete
 | 
						|
	  the EASY_HISTORY code.
 | 
						|
	* bring history code up to POSIX standards (see POSIX description
 | 
						|
	  of fc, etc.).
 | 
						|
 | 
						|
    * documentation
 | 
						|
      Some sort of tutorial with examples would be good.  Texinfo is probably
 | 
						|
      the best medium for this.  Also, the man page could be converted to
 | 
						|
      texinfo (if the tutorial and man page  are put in the same texinfo
 | 
						|
      page, they should be somewhat distinct - i.e., the tutorial should
 | 
						|
      be a separate thread - but there should be cross references between the
 | 
						|
      two).
 | 
						|
 | 
						|
    * miscellaneous
 | 
						|
	* POSIX specifies what happens when various kinds of errors occur
 | 
						|
	  in special built-ins commands vs regular commands (builtin or
 | 
						|
	  otherwise) (see POSIX.2:3.8.1).  Some of this has been taken
 | 
						|
	  care of, but more needs doing.
 | 
						|
 | 
						|
	* remove static limits created by fixed sized arrays
 | 
						|
	  (eg, ident[], heres[], PATH, buffer size in emacs/vi code)
 | 
						|
 | 
						|
	* merge the emacs and vi code (should reduce the size of the shell and
 | 
						|
	  make maintenance easier); handle SIGWINCH while editing a line.
 | 
						|
	  [John Rochester is working on the merge]
 | 
						|
 | 
						|
	* add POSIX globbing (eg, [[:alnum:]]), see POSIX.2:2.8.3.2.
 | 
						|
 | 
						|
	* teach shf_vfprintf() about long long's (%lld); also make %p use
 | 
						|
	  long longs if appropriate.
 |