// utf-8

P = priority: 1..9
T = estimated time [hours]
W = weighted priority: P/T

______________________________________________
P	T	W	TYP: TASK
______________________________________________

bugs:
5	5	1.0	BUG: String::ConvertedTo(): handle char(0) in conversion to UTF-8
1	1	1.0	BUG: permissions for symbolic links in 'dir' are 'l---'
1	1	1.0	BUG: bytesfree_su=0 in dir ""
3	3	1.0	BUG: variable names with dot "." cannot be found! ((!!automatic detection of "." in class Var!!))
2	4	0.5	BUG: main.cp: restore tty settings also on error exit.  ((how??))

missing implementations:
6	2	3.0	IMP: SystemIO.cp: VolumeFree() for _SOLARIS
8	4	2.0	IMP: VolumeFlags() for _LINUX und _SOLARIS
2	2	1.0	IMP: utf-8.cp: ucs4_char_to_upper/lower(): handle characters beyond UCS-2
1	2	0.5	IMP: Stream::SetWindowSize()
2	5	0.4	IMP: SystemIO.cp: ReadDirectory(): _NON_BSD: check for read-only device
2	5	0.4	IMP: SystemIO.cp: ReadDirectory(): _NON_BSD: mount flags
2	5	0.4	IMP: SystemIO.cp: ReadDirectory(): _NON_BSD: file system owner
			IMP: cstrings.cp: va_copy(...) for FreeBSD, Debian2.2
			IMP: os_utilities.h: SysLoad() for Debian and others without getloadavg()

internal changes:
5	5	1.0	MOD: String::NumVal(): number literals with more than 40 characters
5	5	1.0	NEW: token profiling in Value() and Execute()  =>  sorting of handlers for cpu cache optimization
8	10	0.9	MOD: Var.name as pointer for space conservation ((lots of unnamed variables in arrays!!))
			MOD: tGKauf etc.  =>  tGKauf.dist  =>  faster skipping in proc definition and pruning operators

visible changes:
9	5	1.8	NEW: sema: kind of global semaphor for synchronization of different scripts (e.g. cgi scripts)
4	4	1.0	NEW: proc a.b(){}   ((like var a.b=...))
4	4	1.0	NEW: env:   instruction env: print beautified env data
9	10	0.9	NEW: text[..] = ...
3	5	0.6	NEW: encode/decode: MIME
9	20	0.4	NEW: list[..] = ...
5	10	0.5	NEW: encode/decode: calculate misc. checksums, e.g. MD5, crc
5	40	0.1	NEW: encode/decode: encryption/decryption, e.g. RSA
3	15	0.3	NEW: switch .. case .. default .. then
3	6	0.5	NEW: env:   assignment to env
2	6	0.3	NEW: prefs: cmd and fn to access preferences from script: "prefs" or "conf" or similar
1	6	0.2	NEW: prefs: assignment to prefs
			MOD: ~ and ! for lists
			MOD: call [#number,] ... as instruction: print result
			MOD: [new][var] var_ref = proc(..){..}
			MOD: <shift><return> == <esc>0M: map to <return> in line editor
			IMP: edit var_ref
			NEW: typeof [value|file name]
			MOD: execute(): sys: set stderr to stderr_stream => enable redirection of stderr e.g. to file
			MOD: rename convert to encode/decode:  encode|decode(text,type) == convert(text to|from type)
			NEW: encode/decode BASE64, uuencode/decode, BinHex, quoted printable
			MOD: handling of trailing NULLs in lists
			IMP: replace <list>, ...
			IMP: replace text,number,number  ((auto-conversion))
			NEW: indexof <variable>
			MOD: line edit: editlastitem => pg_dn should present an empty input line
			MOD: instructions pwd, dir and other beautyfied printers: shell only, not in scripts
			NEW: "proc(){..}"()  =>  compile and execute

big chunks:
4	8	0.5	NEW: cache tokenized scripts in cache folder
2	10	0.2	MOD: use kio's malloc for new/delete
4	40	0.1	MOD: class Var { usagecnt, name, data }  => -parent, -index, +usage_count
8	99	0.1	NEW: GUI interface
9	99	0.1	NEW: port to Windows
2	99	0.1	NEW: threads
5	99	0.1	NEW: debugger

ideas/unsorted:
9			NEW: non-blocking file i/o, ioctl()
			MOD: wildcard in open, close
9			NEW: sockets, ftp, http, smtp, tcp, udp, etc.
9			NEW: pipes
9			NEW: word to change encoding for stream
3			NEW: catch signals, e.g. ctrl-c
4			NEW: ioctl() um Stream.error zu lesen, setzen, löschen
2			NEW: this, self
5			NEW: errorstr, SetError or the like; e.g. word "error" which can be read and written like a var
3			NEW: wort für introspection, zb. version usw.
			NEW: exec external_cmd asynchronously fully connected via pipes
			NEW: access to own file name&path for scripts ((word for introspection))
			MOD: a?b:c  if called with accept_novalue then accept no value for b and c
			NEW: proc:  function to define a proc; e.g.: var a = proc(){return 77}  or  in list definitions
			MOD: freeze/melt with convert to|from ice (and zip, gzip, zip2 usw.)
			MOD: globals: rework instruction globals
			MOD: var: "var xyz" for an existing xyz should set it to 0.0 ((??really??!!))
			IMP: &&= and ||= : pruning
			NEW: count file filename  and  count dir  dirname   w/o reading the whole file...
			MOD: replace <list>, <text>, <text>  and  replace <text|list>, <list1>, <list2>
			MOD: redirect stderr to stderr stream for ExecCmd()  -> rework of std stream handling required
			NEW: tonumber or similar: conversion of text to number expecting a single number literal, e.g. "1.23" not "1+2"
			MOD: substr(text,n1[,n2]): 2nd index optional as in midstr()
			MOD: a_str[-10 to -5]  =>  negative numbers from right ?
			MOD: in cgi-mode run as user = "owner of script" (not user apache) => prevent common exploits
			MOD: proc idf ( a, *, b ) { .. }  =>  '*' also not at end
			MOD: proc foo(*){}  =>  foo( a=22, b=33)  =>  assign names to '*' arguments  =>  similar to obj-C
			MOD: beautified printing instructions: parsed by shell, no longer part of VIP syntax

more ideas:
		??	NEW: adate filename, cdate filename
		??	NEW: autocompletion of idfs and filenames in shell
5		??	NEW: quotedstr, unquotedstr, escapedstr, unescapedstr, toutf8str, fromutf8str
		??	MOD: function inkeystr(#5)  or  function variants of get and getchar -> var a = get#5; ((ambiguous))
0		??	MOD: conversions with encode/decode: encode v_ref to idf; decode v_ref from idf; a=encode(str to idf); a=decode(str from idf)
			NEW: instruction 'help'
			MOD: dir "..." list no .filenames except if a match pattern is given
			MOD: convert text to idf [to idf] [...]
			MOD: find(<list>,<text>)
			MOD: proc a ( b, *, c ) {}	=> allow fixed arguments after '*'
			MOD: mylist.name	=> allow reserved names after '.'

documentation:
			DOC: shell editor: error indication, history, colors,
			DOC: colors, and color examples
			DOC: split
			DOC: file name [=|#=] string
			DOC: include: now also function: included file now may return a result: var a = include filename
			DOC: call: was: exec; now also instruction:  call filename, argument, ...
			DOC: sys:  now also instruction
			DOC: eval: now also instruction
			DOC: installation
			DOC: preferences
			DOC: elif
			DOC: prio of monadic operators/prefixes ++, --, +, -, !, ~, @ in regard to following [] () or .
			DOC: try … else … then
			DOC: return values for shell script, cgi-script, sys, call and include
			DOC: String literals: «...» and across <nl>


planned for version > 1.0:

3			MOD: Execute(), Value(): operator=(): create target as late as possible => a={}; a[1]=a[5]=a[3]=a; => a={{},*,{},*,{}}
3			MOD: tNEW, tVAR: create target as late as possible.
3			MOD: tVAR: assume "target does not exist" even if it already exists => var a=a reads always a from outer context

			vip code interpreter with tokenize, reorder -> forth-style vip code with stack and heap
			will solve the following problems

			BUG: crash: deleting a variable in use: var a; proc bummer() { del a }; a=bummer();

			BUG: wrong result:  refvar(x) op sideeffect(x)  or  fu(refvar(x),sideeffect(x))













