// utf-8 vipsi completion file 2003-06-20 Stream: rework, store/restore tty settings after ^D encoding conversion for tty BS over Umlaut 2003-08-03 use of UCS4String lib (work in progress!) VScript: Variable names with non-ascii characters did freeze info "sort" et.al. did freeze 2003-08-04 Value: operator # nur für: Text # Text operator ## für: Liste ## Liste type conversion with Var::ToNumber() now converts void to 0.0 new type converters Var::ToList() and Var::ToString() 2003-08-07 VScript: automatic printing of result: quote strings, disass procs Value: string(proc) => disass; string(text) => leave as is 2003-08-08 test.vs: list concatenation tests adapted from old '#' to new '##' Var: list#text and text#list now expand the operation on the list os_util.cp SysLoad() for Linux 2003-08-09 execute.cp ReadDirectory(): mounted devices for all (?) Unixes (some bits still missing) 2003-08-13 VScript shell commands: now executed shell command is stored in VScript.proc->Var(isProc) now using UCS4String for strings in token stream. Value() creates 'shared' substrings from proc string for string literals 2003-08-14 execute.cp changed ExecuteScript() to Execute(Var*proc,Var*&result,uchar*ip=NULL) now VScript.proc is always set during execution; initially to tokenized shell line or script tIDF now using UCS4String now rejecting idf replacement operator @ in argument list of procedures MOD: String tokenname[] MOD: count(proc_var) => proc size in bytes IMP: convert text_var from utf-8 2003-08-15 MOD: use UCS4String in TokenizeScript() MOD: use UCS4String library: COMPLETE! DOC: updated documentation for 0.8.0 BUG: "Ein-/Ausgabe ist möglich" -> abort ((exception wg. non-blocking)) BUG: io started hogging the cpu after vipsi ran for a while ((wg. non-blocking)) BUG: freopen() in main() doesn't work! (erm.. did work. but creating new files was buggy...) BUG: Value(): tEVAL: führt proc aus ohne VScript.proc zu setzen! 2003-08-16 MOD: new procs := substring of enclosing proc NEW: ln -s vipsi calc; calc "23*44-3" direkt-ausführung MOD: shell: suppress printing of results after assignments NEW: value = exec( "script", arg1, ... ) NEW: str_val = sys ( "cmd", str_arg1, ... ) 2003-08-17 NEW: tokenize bis def. target code size => error position indication 2003-08-18 NEW: proper error position indication in shell NEW: history function in shell IMP: Terminal-Emulation: improved VT100 usage in editor 2003-08-19 DOC: sys(), exec(), calc mode, bugs 2003-08-21 MOD: eliminated void data type. uninitialized variables default to 0.0 2003-08-23 MOD: operator "<<" and ">>" now take any float number for left-side argument MOD: shell: don't store empty input lines in history BUG: value(): trap calling of non-procs BUG: value(): fixed procs returning no value 2003-08-24 MOD: nach fehler in shell cursor auf fehler positionieren NEW: error position indication in script, eval, calc, include, exec NEW: list[..to..] sublist 2003-08-25 NEW: operators: >>= <<= &&= ||= ##= &= |= ^= MOD: utf8 erzwingen mit ctrl seq. (XTerm) <-- release 0.8.0 --> 2003-08-31 MOD: minor tweaks to make it compile on MacOS X <-- release 0.8.1 --> 2003-09-01 MOD: error message in cgi scripts 2003-09-02 MOD: print nl and "byebye" after ^d BUG: «info "…"» -> quick syntax -> multi-char operators were split with spaces 2003-09-03 BUG: open/openout and new file|dir failed because FullPath() returned ENOENT NEW: ./vipsi self-installer version 0.1 ;-) BUG: fixed failed detection for cgi mode when no arguments were passed to script <-- release 0.8.2 --> 2003-09-05 MOD: optional 3rd parameter to find() and rfind() DEL: removed functions tfile() and dfile(); functionality now covered by split() NEW: text=split(text[,text]); split textvar[,text] NEW: file "name" = binarystring; file "name" #= binarystring MOD: convert to/from UCS1/2/4: now packing/unpacking 1/2/4 bytes to/from 1 char 2003-09-07 NEW: preferences for put, get and error text attributes IMP: implemented (again) convert text_var|list_var to|from 8bitcharset_idf NEW: function convert: text|list = convert(text|list to|from idf) 2003-09-08 MOD: conversion of lists to text: include names => { a=22, b=33, c=proc(){return a+b} } MOD: colorize all output to tty stdin/out/err (attributes customizable via prefs) 2003-09-09 BUG: swap: swap a,a => is a nop, fixed error "must not contain each other" MOD: swap: swap values only, don't swap names BUG: include: filename and result cell shared same Var => core dump when result cell was written to MOD: include: now also as function: included file may return a result MOD: exec: now also as instruction: exec filename, arg1, ... 2003-09-10 MOD: !!!!! renamed "exec" to "call" ((exec will be used for pipe-connected asynchr. execs)) MOD: sys: also instruction MOD: eval: also instruction 2003-09-13 MOD: added "cursor keys in application mode" to line editor 2003-09-15 MOD: dup2(stdout,stderr) if current script is run as cgi => see error messages in cgi output MOD: reading prefs in all run modes MOD: errors in procs: error message includes stack trace NEW: instruction wait(delay) 2003-09-20 BUG: String::_move(String&) broke linkage if string had no text sharing neighbours => crash later 2003-09-21 BUG: min(), max() with 3 or more arguments MOD: listing of variables with names: words starting with '_' need no @"_..." circumscription MOD: swap: back to old behaviour ((swap data AND names)) MOD: midstr(string,start): only 2 args => up to string end BUG: dir "..." aborts with error if it encounters a broken link in the directory BUG: FullPath() does not distinguish between "any path component" and "last path component" not found 2003-09-27 BUG: in GetEncodingFromName() and String::ConvertedFrom() => affected: convert to|from IMP: FreezeString(), MeltString(): change to UCS4String MOD: String::ConvertedTo(): replace not representable characters with '?' BUG: Stream::PutString(): bogus handling of conversion to ucs2 and ucs4 BUG: Var::MinVar() and Var::MaxVar(): handling of NULL in list().array MOD: min, max, >, <, >=, <=: now set error if different data types are compared 2003-09-28 MOD: List: assign named list items: var a = { a=1, b=2, @wood.pecker[to 3]="foo", @"%%%"=66 } MOD: got rid of special handling of assignments in Execute() (again) MOD: print automagic result after modify-and-assign operators (again) IMP: operator || and && --> pruning IMP: operator ?: --> pruning <-- release 0.8.3 --> 2003-09-30 DOC: operators: >>= <<= &&= ||= ##= &= |= ^= DOC: pruning in && || and ?: 2003-10-05 BUG: files with broken utf-8 names were not accessible! 2003-10-09 MOD: filenames with broken utf-8 are now assumed to be latin-1 BUG: exists("non/ex/file") returned "yes" for circular symbolic link chains 2003-10-11 MOD: match() now also matches broken utf-8; added case-folding DOC: tfile and dfile removed BUG: checked error handling after call to FullPath() BUG: info do loop -> runs into the loop! :-| (not that fatal: info if then) BUG: openin "fname" -> get/getchar/etc. all returned empty string MOD: get var_ref -> always return text MOD: getchar var_ref -> always return text, return "" if input empty BUG: exists file "brokenutf8name" yielded "no" 2003-10-12 BUG: string concatenation: fixed handling of NULL in lists (( NULL <=> 0.0 )) 2003-10-15 MOD: error messages in calc mode colorizing as in shell mode MOD: add prefs files to distro NEW: replace targettext,oldtext,newtext; text = replace(text,oldtext,newtext) MOD: sys: 1) sets error 2) also takes list argument 2003-10-16 NEW: try ... [else ...] then -> error handling within script 2003-10-17 BUG: mtime/atime exchanged in directory list 2003-10-18 NEW: convert to|from url ((URI url encode)) 2003-10-19 NEW: convert to|from tab[s][1..9] ((entab/detab)) BUG: a>=b and a<=b for NaN ((implemented as inverted '>' and '<' thus yielding true)) BUG: list: NULL in lists == Var("",0.0) ((changed from 'void')) BUG: list op list: handling of remaining items in longer list BUG: a[1]+=a Speicherzugriffsfehler ((test for intersection of left and right operand missing)) DOC: convert to/from url, tabs1..9 DOC: try .. else .. then DOC: sys: 1) sets error 2) also takes list argument DOC: replace 2003-10-20 DOC: find,rfind: 3rd parameter DOC: dir: instruction and function, examples. DOC: midstr(text,start) ((only 2 args => up to text end)) 2003-10-21 DOC: min, max, >, >=, <, <=: error if different types are compared DOC: named items in list literals 2003-11-11 BUG: isdir and isfile overwrote their argument with result 2003-11-15 MOD: include names in "componentnotfound" error message 2003-11-23 BUG: put foo() => if foo() does some i/o, that stream remained in effect after returning and put etc. printed to the wrong stream BUG: do … { … [exit|next|while|until] … } … loop => private context {…} was not dumped when leaving|restarting loop BUG: x##=y and x##y => x or y no list => automatic type casting of x or y preserved name of item in list MOD: execute(): sys: set stream to stderr while ExecCmd(), set to stdout before printing result BUG: 'get' from file => stalled near eof and hogged cpu; eof now triggers error MOD: eliminated Stream.error; now using errno as well BUG: include "~/..." did not work 2003-11-24 NEW: elif MOD: liste.@(text)[index] evaluated to: liste.@(text[index]) now: (liste.@text)[index] BUG: try … else … => error handler was not yet used in many cases. fixed. BUG: try … then / do … loop / { … } => dropping from try-then or do-loop across any nesting level of other kind of blocks fixed MOD: return [|] ((eliminated 'end' for returning 'novalue')) 2003-11-25 BUG: fixed messed up handling of return values from scripts MOD: end: now can return value MOD: end: now also from within a procedure BUG: ExecCmd(): save&restore tty settings NEW: Text: string literals with «...» or “...” MOD: Text: string literals across nl; checked \ behavior <-- release 0.8.4 -->