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.
|