-*-text-*-

==============
EDEN TODO LIST
==============

BUG details are now held in the SourceForge database: see
http://sf.net/projects/eden


IMPROVEMENTS
============

o Exactly how inefficient is the list implementation in tkeden? Does it scan
  from the end each time? How would we go about storing an entire dictionary
  in Eden for example, for Hangman?
o Find original Donald lexer lex.l - see what changes were made for the
  (handwritten?) lex.c in tkeden
o Check out hash function used in Eden/symbol.c. Will the hash index ever be
  > 0xFF: constantly EORing with a char...???
o Profile tkeden and improve most called regions, especially for Chris'
  Data Explorer...
o Another notation, like Scout, to handle whole windowing system? Carters
  says hard because X assumes user has control of windows, not the program.
o Sort out inconsistencies between notations.
o Think about JVM and relation to the Eden VM - what possibility of cross
  fertilization?
o "add layers to donald through scout" (from TODO)
o "Wrap standard I/O in a tk window" (from TODO)
o Port to Mac?! gcc available on the Mac? On the Arch (schools?)
o Remove reliance on PATH (eg ImageScale uses 'pnmscale'). Either
  write a wrapper or set variables with the complete path for each utility
  used.
o A single step facility to enable modeller to monitor each redefinition?
o dtkeden in heterogenous environments?
o Vastly improve the textual script viewer: hyperlinked definitions, fast
  rebuild... link to a web browser? Write an Eden script to communicate with
  Netscape (or any browser) and send the text of the script.
  Eg netscape -remote 'openURL(http://www.dcs.warwick.ac.uk/modelling)'
o Higher order definitions somehow? Multiple similar definitions cannot be
  done particularly neatly at the moment. Or can they? See the speedo eg.
o Link Javabeans with dependencies in Eden. Use, or at least look at jacl?
o Get rid of alloca? See http://www.eskimo.com/~scs/C-faq/q7.32.html
o Automatically generate dependencies for non-local variables used in
  functions - recall note from the back of the Eden manual. Don't retrigger
  actions though.
o Maybe Misc should be a subdirectory (or maybe just in the directory of?)
  Eden
o Make lint happy with the code. Haven't got it to run the second stage yet.
o Use an enum for the type inside Datum - would this show up in debuggers,
  making it easier to see?
o New feature, perhaps built in: generate increments to a clock integer at
  a given real time frequency
o Look at BLT and integrate some features?
o Store definitions on disc rather than in memory - like VM? Need a better
  file format. WMB said would be good to be able to bring in and take out
  whole sections of script as appropriate.
o "combination observables" (eg distances between billiard balls) that can be
  defined, but don't take up space until you query them. Or perhaps these are
  just functions.
o Link the Eden library to Java using JNI?!
o Perhaps the symbol table should be a /list/ with special (associative)
  indexing. Then items could be removed easily.
o Re-do the user interface in Scout?
o Operators += etc only work on integers
o An emacs highlighting setup for Eden code?  See
  /gnu/share/emacs/20.3/lisp/font-lock.el.
o symbols() only takes one argument?  Should give an error message if given
  more than one.
o Link with emacs as an editor.  Use elisp.  Colours to represent bits that
  have been changed, and need sending to tkeden - send them with a key press.
o Finish mouse dragging facility - can we get COG to work with the current
  setup?
o Get around sensible CWD problem on Windoz by adding a cd primitive to
  Eden, and call this from Run.e files
o More obscure information in About tkeden should appear only when you
  press a "more information" button
o Edit menu with Cut and Paste?
o Make it possible for users to link in other translators for notations at
  runtime.
o Some way to see /values/ of Donald things without having to
  representation on the screen - view values in the View window...?  Or
  implement the ? operator in Donald properly (seems to be partially
  implemented at the mo... or am I being confused by the ? Donald operator
  for "this is a line of Eden?")
o Access Eden lists from Donald:
    %eden
    func f { writeln("f ", $); return $1 + 1; }
    %donald
    int f1
    f1 = f!(1)
  works, but the equivalent for lists does not.
o List indexing is not implemented in back-ticks:
    1:> s="l[2]";
    2:> l=[1,3];
    3:> writeln(`s`);
    @
o One undefined item should not stop the entire screen from being updated.
o symboltable()# fails when the table gets large - error running out of
  heap?  Could make heap a dynamic array, I suppose...
o Fix undefined problems: need more eager operators.
o Get rid of "program too big" error: make prog a more dynamic array that
  is realloc'd when this error would have occurred
o Donald 'pi' token - is it used?  Meurig was trying to '%donald; real pi'.
o Port Sasami to Unix
o A 'warnings' window instead of the error messages appearing in the
  history.  Visual warning to the user when something has appeared there.
  Warnings for "you have declared a symbol with a name similar to another",
  "this is now @" etc along with error messages (which would prob. be in a
  different colour).  Sometimes it is appropriate to warn a user that they
  are creating a new symbol (eg when /using/ a model), when building -
  probably not.
o a minor version number to represent changes to the Tcl / Eden library stuff?
o change each sprintf to snprintf and include the buffer size to attempt to
  stop all these buffer overruns.
o Radio button for the notation in the input window?
o Make long variable names possible (apparently >20 chars fails, especially
  in Scout)
o ttyeden readline: get it to complete from the symbol table and built-ins.
o "Freeze" the state function - want the equivalent of SQLs COMMIT or
  ROLLBACK.
o A "save script" function for ttyeden: could rapidly prototype using the
  new readline interface, but cannot save.
o guessLibLocation should read search a predetermined path to find a
  configuration file which determines the lib files location.
o 'find' symbols facility should be better: need to be able to find
  definitions and usages separately.  Need to be able to find 'is'
  separately from values.
o Navigation around the view definitions interface is awful.
o A function to 'forget' a set of definitions in the correct order?
  Perhaps by redefining all to @, then removing.  Perhaps it should
  interactively prompt to make sure that we don't accidently remove
  definitions we would like to keep: a kind of 'rm -i' prompt.  Perhaps it
  could print some information about whether it managed it or not.  Perhaps
  we need an argument to tell it to be interactive or not.
o Redesign into a one-window interface?  Then have multiple input windows,
  one for each notation?
o Inconsistency: textbox and text windows in scout with the same number of
  vertical lines are different sizes.
o Inconsistency: use outlinecolor for circles outline, color for lines
  outline.
o Inconsistency: use div in donald, / in eden.
o Inconsistency: use semicolons in eden, not in donald
o Inconsistency: don't declare in eden, declare in donald.
o Inconsistency: last element of a scout window doesn't have a comma, the
  others do.
o Inconsistency: PI in eden, pi in donald
o Inconsistency: scout references its windows from the top left and donald
  from the bottom left
o If any element in the screen is @, the whole screen is not displayed
  (apparently).  Improve this to give a warning if something in the screen
  is @.
o '?insert', '?append' fails.  This is because the parser expects '?',
  lvalue and keywords such as insert and append are not lvalues.  Need to
  figure out how to get the parser to accept these types.
o Test new Eden bison.simple with eden < file, read file, piped input (via
  a translator)...
o Link translators (eg eddi) to tkeden via pipes (tkeden pipe function?)
  and multiple Tcl windows
o wouldBlock: change to getcWouldBlock and put in rl_getc_wouldblock logic
o Check "additional possibilities" sum in bison.simple - does it give the
  right answer?
o View -> Eden definitions: an option to sort and indent according to
  definition level?  (This could be used to quickly find the basic model
  parameters).
o Make a documentation package: cron job to nightly tar and gzip the HTML
  Eden, Scout, Donald documentation (post-SSI processing: wget? need
  version numbers or stamp package with the date: make the package each
  night and see if it has changed).
o Change colour of interrupt button when it might be necessary to press it
  (when a RunSet is being processed?)
o Make it possible to extend the stack when overflow occurs by implementing
  a non-contiguous stack.  Need to ensure that nothing attempts to walk the
  stack to be able to do this tho'.
o Make it possible to extend the heap when overflow occurs.  (Example
  problem: see OASYSPermutations/gen_table.e).  Perhaps allocate memory
  with malloc when heap overflows.
o Highlight Eden / Donald / Scout keywords in the input window as they are
  entered using the Tcl text tag facility?
o Extend debug() to take combinations of categories to filter debugging
  output, now that I've introduced CALSTK etc.
o In the View Definitions window, use tags to highlight references to other
  variables - click and they are displayed.  Add a back and forward button
  as per web browser.  Or perhaps write an export to HTML feature and link
  with a web browser?  (Perhaps use EMHTTP - press Reload on the web
  browser and it'll reload the page of definitions).
o An incremental search facility on Ctrl-S, like emacs?
o Use a more decent File -> Include widget: try FileSelectBox from Tix (but
  these widgets are megawidgets which probably required [incr Tcl] and
  [incr Tk] - the OO extensions to Tcl/Tk).
o Take a look at TkTable - a spreadsheet / table widget: could we improve
  the View Definition windows with this?
o Change the mouse cursor when tkeden is busy (see example from Tk FAQ #4.3
  How do I change the Tk cursor?).
o A +/- button in View Eden Definitions to expand / contract display of
  agents (eg AGENT system should probably be contracted most of the time).
o Put an error message pane underneath the input window (+ make it possible
  to resize it?)
o Separate error stream into another Tcl window.
o configure.in: can we cache more?
o Option to update "View Eden Definitions" continuously (actually, on every
  RunSet switch).
o Link Prev, Next Tcl history (in tkeden and ttyeden) with the history
  as stored on file (a bit like the shell).
o Wrap Sasami window in Scout
o Feed mouse placement in Sasami window to Eden (perhaps in terms of a list
  of polygons that the mouse is currently over - Benjohn describes a
  technique involving turning the OpenGL renderer into a special mode, and
  rendering a window one pixel in size).
o " %scout" - make ex.c ignore leading spaces / tabs
o Inp_Dev_Save might be an unnecessary hack: perhaps Inp_Dev should be
  volatile?
o When opening the Scout window, if there is any content outside, make it
  bigger.
o Get Scout/print.c printdef to use the constants array etc
o Fix Scout so that on View Scout or Scout ? query, the correct value of
  sensitive is shown
o Input window: an Undo function (particularly wrt paste / insert)
o Improve Scout / Donald unhelpful "parse error"
o Fix tcl("reinit");
o Un-hack the dashed line stuff using the Dash patch in Tcl / Tk 8.3.3...
o Add a File->cd
o "a=1; while (1) { a++; }" causes tkeden to hang: not even the Interrupt
  button works (but Ctrl-C does) - is it possible to make the event
  from the Interrupt button be processed straight away (despite Tcl update
  not having been called - perhaps via some sort of error mechanism?) but
  leave the other events until Eden is ready, as before?
o Sasami: remove the globTogl hack
o Recode all references to interp->result (see Tcl_SetResult(3))
o Add some syntax to allow removal of triggers: ~>![] ? (if ![] is valid
  syntax elsewhere)...
o Resize viewport: if viewport size has not changed, don't do anything.
o A View Sasami Definitions window for completeness
o Can we rework Sasami's numeric IDs into symbolic ones for ease of
  tracing...?
o Replace the multiple Save options with Save and Save As options,
  with radio buttons to turn off saving of various notations in the
  dialogue box.
o Don't create required windows (eg History) until it is actually
  required to speed initial startup?
o Windows: Try and get the executable to use the Scriptics-provided
  DLLs (so can use Tcl 8.3 with the dash patch etc)?  Perhaps look at
  using the tcl-stub stuff...?
o Sasami: [Ben] Smooth vertex normals based on face normals and face
  adjacency
o [Ben] Speed controller example shows some display corruption
o [Ben] Note : Enormous (40 units+) polygons screw up lighting. OpenGL
  driver bug?  (Addition) Not necessarily bug. Maybe something to do with
  oblique specular angles on large polys looking wrong (despite being
  "right" in a mathematical sense). Imagine a poly large enough that the
  vertices on both sides had specular hilights and then interpolate
  across...
o Install a non-debugging version for DCS for performance??
o Rework Misc functions in the style of random if they are declared in
  system header files
o Change Scout int_tree assertion to a more helpful error, or modify the
  Scout parser to only allow integer values.
o Find should beep when search proceeds beyond the end or beginning of the
  document.
o Finish Help -> About Donald, Scout, Sasami
o Help -> About LSD
o Remember the state of file type selection between File -> Opens etc
o File -> Restart !
o Find in the Quick Reference Guide windows...
o Can we get the OK button in the Quick Reference Guide windows to take up
  less space?
o DFfont is read by Donald at Donald startup, but Donald lacks dependency
  in this area and it's difficult to convince it to re-render the
  statechart with a new font (for example), whereas Scout seems to be
  better implemented here.
o Un-hack the Scout integer / real implementation (give Scout true integers
  and true reals).
o Remove "VB-like" features completely.
o Query ? operator now shows sp->master, but this pretty much always seems
  to say "input".  Can we change sp->master or get information from
  elsewhere that would make this more useful?  Need to look at the calls to
  pushMasterStack() and what that actually does.  Perhaps push the stack
  trace so far: "input window:proc p:action q"?
o Do 'Previous' after error & move cursor to position of error (making
  interaction with tkeden somewhat like interaction with a debugger)
o Save definitions should not save the ones belonging to 'system'.
o %scout causes a few system definitions to be entered under agent 'input'
o ON should actually be MOUSEBUT + KEYS or something, so can narrow down
  the sensitivity even further (ignore keys, for example).
o "%scout\nscreen &= <window>;" doesn't work - I presume the parser needs
  correcting to allow display literals after &=
o An eden_allow_proc_redefine variable (at the moment, redefining a
  proc to a value is not allowed so as to avoid accidental overwriting
  - but sometimes this can be useful).
o An eden_allow_builtin_redefine variable?
o Sometimes the error message needs to read from further back than
  just the current line (eg when the line before is missing a
  semi-colon in Scout).
o Can we make it unnecessary to declare Eden variables to Scout?
o On an error condition, should make sure that the line containing the
  error (which was hence ignored) does not appear in history.  This is
  complicated by the fact that the contents of the input window is
  currently put into history in its entirety.  Perhaps Eden itself
  should push things into history as it executes.
o one-line escape into Scout, Donald... whatever... from Eden.
  Perhaps a notation change with characters on the same line (eg
  '%scout int i') would be a change for that line only?
o Add __PRETTY_FUNCTION__ to DEBUGPRINT output?  (See gcc.info...)
o Which way up are the coordinate systems in Donald, Scout and Sasami?
  Document in the quick references.
o Add a way of stating literal strings without needing to escape
  characters to Eden - perhaps like the shell << operator (usage eg:
  cat <<EOF
  stuff that doesn't need escaping
  EOF).
o A 'help' command in ttyeden
o Only tell re eden_notice_undef_reference on every 20th error, say
o Tcl update on error, so that the error window doesn't appear to be blank
  when we have a series of errors (although the 'update' has caused
  problems in the past).
o Add type information to ? output
o Can we give more information during the "reference to undefined variable"
  message?
o Don't try and do dashes with Tk <8.3: info tclversion, info patchlevel
o Give some sensible error message if can't find initial library files
  rather than just "Tcl errorInfo... blank"
o Link with Tcl/Tk stubs instead to remove the dependency upon exact Tcl/Tk
  version (eg currently linking with 8.3 here, but 8.2 will probably do on
  most Linux systems).  Or perhaps stubs are about Tcl extensions?
o Add Tk img package lib to Windows distribution...
o Change _tkeden_showxoutput to _introspect_xoutput.  Then make it redefine
  a symbol.  Can then add a proc to print it out, or do something more
  clever.  In fact, change all writes to fds to change variables which may
  then trigger some output.
o Donald, Scout etc should not have their own symbol table - the
  information should be stored in the Eden symbol table.
o Some kind of interface telling when something has changed / been added.
  This could be used to interface to an editor, a filesystem, a graphic
  representing doorbell data?
o sprintf should truncate to strlen of first argument, then remove checking
  in donald.init.e + change FAQ entries
o Integrate the "Alpha" (cross-platform?) editor which seems to be mainly
  written in Tcl as an on-line editor for definitions
o Rename stuff in trans.e (or perhaps use virtual agency?) so it doesn't
  stomp on any existing models
o Redo Arca translator in Chris Brown style?

o Scout screen_width etc are system definitions - should be read only by
  the user and possibly not appear in View Scout Definitions...?

o sensitive MOTION etc settings not shown in View Scout... (and Save Scout)

o Projects database model

o A slide presentation notation?

o Change DCS old date-based tkeden versions to numeric ones (0.9 and
  lower).

o Don't record duplicate entries in keyboard history (ttyeden... tkeden?)

o Fix bug: trying to do notation() on the same notation twice will probably
  cause the parser to mess up and certainly causes the radio button
  handling code to attempt to create the same window twice and mess up.

o Remove all traces of Patrick's mouseClick stuff (in Scout/symbol.c:
  automatically created '_click' procedure etc).  Figure out a solution for
  reworking models that used this feature.

o An //= operator, or make += work on strings (first option probably better
  as + is not overloaded for strings).

o Procedural aspects of notations should go.  Eg % for changing notation
  (blocks of notation should be delimited another way -- with brackets?),
  >> has the same problem, replace autocalc=0; with autocalc--; etc...

o dtkeden: command line option for automatically logging in as a certain
  agent.

o A solution for running large-area models on small screens (how to
  redefine the font size... and all geometry?)

o Changing nSegments in cruise speedo apparently causes a freeze.

o Lack of a scrollbar in the DOS window causes problems on Windows.  Need a
  solution: perhaps wrap stdout in a tk window... or can we redefine the
  Eden 'stdout' variable?  Nope -- the value changes, but doesn't affect
  writeln etc....  Can we copy cmd.exe (not command.exe) from an NT machine
  and see if that gives us a scroll bar?

o "ash"[1] is a syntax error

o s='s'; writeln(s[1]) fails.  Not possible unless I can figure a way of
  getting the address of a char.  Aha... try ctos()...

o "index out of range" errors don't give information about which type of
  command produced the error

o ImageScale still has problems.  It may work OK with .ppm input files on
  UNIX, if pnmscale is in your path (at DCS it is
  /usr/local/bin/pbm/pnmscale).

o Find... dialogs should not be modal (ie should not stop rest of
  application working...)

o Rework View Scout, Donald... window menus to have an Edit menu, as per
  View Eden...

o Print information from the entire Inp_Dev stack when printing error
  messages (this should provide a kind of stack trace)

o Does beep counter reset on every beep?  Ie if we have a continuous
  beeping situation (eg interpreting a bunch of Eden in EDDI by mistake),
  it should not beep at all instead of beeping every three seconds.

o Make notation change in ttyeden persist across EOF (including -e).

o Page down in View Eden Definitions seems to work on Windows but not UNIX?

o Test Sasami with a model which calls eager() in a tight loop - Ben had a
  note about this in the original render.c source (should be OK as eager
  forces a Tcl update, and togl will then call the r_render callback).  Tim
  tested this -- there is a bug.

o installeddi() should do a NOP the second time it is called.
  Actually... unnecessary as it doesn't seem to do any harm?  Actually need
  to fix notation() so that a second call will replace the info gathered
  from the first (I suspect it actually ends up with multiple copies on the
  list currently).

o eden_allow_redefine_builtins -- a new variable to turn this option on so
  that we could redefine writeln for example to get EDDI query results into
  a string instead of stdout...

o Notation change requires exact match -- good.  But it needs to ignore
  white space at the end of the line ("\n%eddi    \n" fails).

o Windoz: after accepting a file from File -> Open by pressing return, the
  input window then appears to have focus but alt-a does not work

o Split change.log file?  It's getting a bit long to view via the Help menu
  now...

o An 'sqleddi' command to start up tkeden with all Meurig's stuff?

o Add SQLEDDI questions to Eden FAQ.  Eg stuff must be in upper case, lack
  of # character...

o SQLEDDI error messages... they should not come out on stdout, they should
  show the context, they seem to be very confusing when you feed it
  rubbish.

o Notation radio buttons should be packed more sensibly if tkeden window is
  small

o A debugging mode which prints out the name of the currently executing
  function and the line that it is in... kind of language level debugging,
  as debug(1) is too low-level to be useful mostly.

o Debugging is strange in Eden due to definitive machine: we want to know
  /why/ something happened.  In procedural languages a stack trace will do
  but definition update and triggered actions confuse this picture in a
  definitive system.


o Observation-oriented database optimisations on EDDI relational algebra
  (eg move selections inside joins)


o EDDI: access Eden functions in 'is' views.  Perhaps like Donald '!'?.  Eg
  MARKSPERCENT is mul!((MARKS % q1), div!(100,8))

o tkeden quits when this redefinition is made:
(load this file)
%eden
_tkeden_showxoutput = 1;

%scout
image source = ImageFile("png", "/dcs/emp/ashley/EMProjects/Scans/10c1.png");
window firstImage = {
  type: IMAGE
  box: [{10,10}, {490,240}]
  pict: "source"
  border: 5
  relief: "raise"
};
screen = <firstImage>;
(give this input)
%scout
image source = ImageFile("png", "/dcs/emp/ashley/EMProjects/Scans/11c1.png");
window firstImage = {
  type: IMAGE
  box: [{10,10}, {490,240}]
  pict: "source"
  border: 5
  relief: "raise"
};
screen = <firstImage>;


o Remove X related stuff from link line on Mac OS X... and seems we
  don't need -lm as well...

o Create a Tk console window if required, using Tk_CreateConsoleWindow
  as per Tcl_AppInit in tkMacOSXAppInit.c?  (Will this improve the
  console facilities on Windows?)

o Could use CFBundleGetMainBundle etc on MacOS X to find library files
  within a bundled application: see main() in tkMacOSXAppInit.c.

o Document cost of the various list operations:
init ([sdf, sdfsd, dsaf])          ll handle (from count?!)
listsize (l#): O(1)                ll oracle
sel (retrieve / set l[n]): O(1)    ll oracle
shift: O(n)                        ll oracle handle (ll--)
append: O(1)                       ll oracle handle (ll++)
insert: O(no items after insertion point)  ll oracle handle (ll++)
delete: O(no items after deletion point)   ll oracle handle (ll--)
concat: ??  eg lr is l1 // l2              ll1 oracle ll2 oracle llr handle (ll1+ll2)

o Abhir would like a "repeat last command" key shortcut (ie previous,
  accept).

o Need to correct the Eden manual:  eval() isn't a real function:
a=1;
proc p { writeln(eval(a)); }
p(); /* prints 1 */
a=4;
p(); /* prints 1 -- whoops */

eval() doesn't exist in ttyeden-jun201996 (which you need to run on gem).
Or tkeden-sep261997
Or tkeden-dec151997
Or tkeden.S-dec151997
But it does, with this problem, in dtkeden-sep31999

o It isn't possible to write an assert function in Eden.  eval
requires an unquoted expression as input (so the exact expression
cannot be passed in as a parameter) and it evals at parse time, not
when the containing procedure is called.  execute cannot be used as it
returns the error status from parsing + invoking the string, not the
value of the result.  Duh!

o ttyeden-jun201996 says "Killed" when run directly on cottage.  The wrapper
shell script conceals this error.


o On Mac OS X:

TK/TCL PROBLEMS
- Down scroll buttons not visible [the same in Wish]
- Window close / minimise / max buttons don't show indicators on mouse over
  [the same in Wish]
- Paste from elsewhere in OS doesn't work [the same in Wish]
- Dragging windows requires click to make active first [the same in Wish]
- Maximise button doesn't work [the same in Wish]
- Hide tkeden doesn't work [Wish dies unexpectedly]
- Menu tear-offs a bit naff [a Tk problem]

VERSIONING
Y- About... menu in application menu (move from Help menu?)
Y- Correct version number into bundle info
Y- Build bundle via a shell command in Makefile?  (ie don't use PB)

COSMETIC
N- Sort application menu: capitalise Tkeden
Y- Background colours of Input Window a bit naff (use Apple horizontal lines?)
- View menu to Window?
Y- An icon!
- Accept button background should be grey, not white (a Tk problem?)

INTERFACE
- Can't select text in Eden Definitions (or Scout definitions...)
- Key shortcuts?  Use Apple key?
- Default buttons (eg Help -> About tkeden -> OK) should glow and respond to
  press on Return.
- Most of Eden Definitions menu doesn't appear (Save, Find, Rebuild, Update, Close?)
  - Get About Tcl/Tk in Eden Definitions menu...
  - ... reimplement Eden Definitions menu as a bunch of buttons?
- Apple-W (for close window) doesn't work anywhere
- Implement a console window (tkConsole isn't quite right...)

BUGS
- Link with own compiled Tcl/Tk [AHB suggests a cc run time linking option]
  - Need to look up @executable_path in ProjectBuilder mail archives
- File -> Open / Execute... cancel... NavGetReply failed, -128
- Need three ctrl-c's to quit??
- Apple-Q gives Bus error -- but tkeden->Quit does not.  Looks like Quit is not
  registered in the commandTable hash (commandEntryPtr == NULL)
- "tkwin == NULL, 224" errors when navigating Open dialogue with right arrow
- How do we get to the right and middle buttons?

IMPROVEMENTS
Y- Copy lib-tkeden into Resources in bundle and locate them there by default:
   should then be able to double-click to load
- Stuff it, put it up for download
Y- Use my applied-for file type for app
- Use my applied-for file type for created files
- Sasami!  Togl on Mac OS X... people seem to be moaning about 'main' being
  null presently (April 2002)

MODEL TESTS
Y- cruise: graphics are a bit odd... get a division by zero error...
Y  - gradient does not seem to affect vehicle display
Y  - conceptCar/vp11 is wrongly positioned (end of window)... or actually, vl11 - or
    perhaps it is the rotation making a mess: probably, as vp11 is used by vl11 and
    vl10 and only seems to be "wrong" in vl11.
Y  - speedo is a mess, as is the hill
Y- beetles: possibly OK, but get some "NaN"-related errors
Y- racing: graphics a bit odd (is it Donald curves?), car goes off track?
- racing: background colours?
- OXO tk: seems OK (but can't use non-left mouse buttons!)

- roadsys: pretty good
- roomviewer seems OK
- jugs: seems OK


o Parser documentation

o Help -> About EDDI

o Refactor the libLocation guessing stuff for the various platforms.  Take
  it all out of main.c!

o change.log file accessible from the website somehow (link to
  ~empublic/lib?)


o emprojects in ~empublic/bin to start up a projects database with
  persistence.  (Need to fix commas bug first :<)

o Improved Eden lists... then create a %eden2 notation which does this
  transparently.

o Figure how to rework existing models to cope with removal of _mouseClick
  in 1.17 (railway accident messes up, for example)

o Add an Eden log command, which specifies a file to start logging
  stdout (and stderr?) to.  dup stdout, open it again (see man dup),
  then read this every so often (after every RunSet?), and write this
  to the log file.  Nope -- this doesn't work.  Perhaps you can't read
  from stdout.
  Another way might be to define my own fprintf function and link Eden
  with this?
  Or can we redefine stdout once the process has started?
  Don't really understand the difference between fds and streams :(
  I'm sure this has been done in other tools (shells, mysql, tee...)
  Java System class seems to be able to reassign out, err etc

Is this one fixed?
o Saving multiple history files by moving them causes problems when logged
  in on multiple machines as the same user and running tkeden on them all:
  get "stale remote file handle" from flush $histFile in edenio.tcl


o mv arca.lib arcalib.eden (once Arca translator is fixed)

o query output should limit value display to one or two lines?

o eden_backticks_dependency_hack: what does this do?  Perhaps make it a
  standard part.

o Input window should take note of the indentation level when return is
  pressed and create the same number of tabs as the line above.

o fopen("thing"); quits Eden: need fopen("thing", "r");

o Link with regular expressions library and use that instead of CB's split
  etc?

o Expose eden_notice_undef_reference, _tkeden_showxoutput etc in a Scout
  window as standard to give a more visibility to these settings and make
  them easier to change.

o EDDI join * operator appears to be right-associative.  Probably should be
  left associative so that Q*A*P still works in sensible time even if A and
  P are very large.  In fact, probably want most operators to be
  left-associative: right-associative is more the special case, required
  for function application, exponent etc.  The left-associativity probably
  occurs due to splitting the string from the left.

o Get a heap overflow error when doing a massive join in EDDI.  Seems to
  come possibly from the 'return tlist;' in njoin()?  Does a return value
  go via the heap?  Presumably we need to make all those things in njoin
  auto variables... but that didn't seem to make much difference.

o How about some confirmation from EDDI when making massive
  joins... "about to start calculating 8000000 rows: OK?".  Should be able
  to turn this prompt off too.

o Some way of querying whether it is /possible/ to forget a symbol (without
  actually forgetting it yet).  [Tim's idea]

o sasamiexamplesCarter1999... load test.s, view eden definitions with all
  translations on, then select just "initialisation"... nothing appears.
  Select all or "system" works OK.

o An Eden timer(proc, time) function.  This should set up an OS callback
  for that amount of time delay.  The Eden process should block otherwise,
  if it has an empty Runset.  Then could use this for examining the
  filesystem on a regular basis without doing a busy loop.

o Can we access a persistent EDDI database from a web server?  Eg to serve
  the EMpress database.  Perhaps use a named pipe for textual communication
  (not much good for multiple clients though).

o Lots of stuff in the symbol table seems to cause View Eden Definitions to
  mess up.  See 3doxo in ~croe/PhD/PRACTICAL/3doxo/Run.e

o Benjohn wants an integrated system for writing small graphical programs.
  Could we write a BASIC CB parser (BASIC syntax is good for beginners) and
  provide some PLOT functions, and even access to OpenGL Sasami stuff?  It
  should run in full screen mode (so the user obviously has control over
  the entire machine and is not distracted).  The editor is also
  critical... in BASIC, we can simply edit by rewriting lines: "30 PLOT
  x,y" rewrites the current definition of line 10.  The user only has to
  know that and the LIST command to create simple programs (cf Bonnie Nardi
  novice spreadsheet users get by with using only a small number of
  functions).  When the program gets large, they have to figure out how to
  control the LIST output so that it doesn't scroll off the screen, but by
  then they are more advanced as they've written a program larger than one
  screen (and can learn about pausing output with a key modifier, or
  parameters for the LIST command).  Strikes me that we are recreating a
  similar kind of interface in tkeden.  How about a BASIC, but with
  definitive features?

o Setting attributes of Donald geometry by using an escape to Eden is a
  total hack.  Eg need to say A_p_q, but Donald is already within p {} so
  could be unnecessary within Donald.  Donald has a string type so can we
  pull this within Donald?

o Write a Donald reflection mechanism in Eden.  COG could use this to save
  drawings created.  Replace execute("%donald\nline l1=... in COG with
  saveAndExecuteDonald("line l1 =... and maintain a list in Eden which is
  the Donald symbol table (ie l1 can be later redefined).  Then we can just
  write that list out to disk to save the Donald.  For COG, we'd need to
  distinguish between "system" and "user" geometry, not saving "system"
  stuff (eg the red selector dots).  Having done this, we could work on an
  agent-oriented parser using these Eden primitives we have constructed,
  and build a %donald2 notation, working out the inconsistencies with other
  notations as we go.

o Rewrite the Quick Reference Guides in Scout

o COMMIT / ROLLBACK... saving symbol table state to disk on COMMIT, and
  reverting to that on ROLLBACK.  ?

o Get pow to return an int if both arguments are ints.  This requires
  changing it from a simple c-library mapping to a C function.

o bounceCarter1999: a Sasami bug -- when the sasami viewport, open_display
  etc code is at the start of bounce.s, the Sasami viewport does not open.

o Add stuff for Allan's Dependency Modelling Tool:
  - Storage of info list within symbols.  Worried about memory allocation:
  but perhaps just freedatum in forget().
  - Func / procs to manipulate list
  - Make it a list of lists, each index being a defined user: dmt being 1.
  - Figure out how to remote control a dtkeden server using a socket
  - resetSymbolIterator, getNextSymbol functions to access symboltable()
  data one at a time

o Consider putting information about rgb2colour in Scout and Donald Quick
  Reference Guides.

o Optional warning to say when redefining an observable that already
  exists.  eden_notice_redefine?

o Actions are not evaluated when one or more of their triggers is undefined
  (or is it non-existent?).  This caused me a problem with writing a
  triggered procedure to mediate the donald better list symbol table to the
  outside; it may be the thing that stops the Scout screen updating when
  something is @; Chris has found it a problem with some mouse click
  problem.  This is probably the rule that things can't be evaluated if
  their inputs are not up to date?

o Does query ? operator create an undefined variable when asked about
  something that does not exist?  The output needs changing to show that
  the variable does not exist (as well as being undefined?).

o ?variable in Scout shows nothing at all if the variable is undefined:
  perhaps it should return @ or something.

o in the presentation notations we need to remove the max() and min()
  function definitions..  just in case they are used in the model, they are
  now as standard in tkeden1.41.

o Scout: ash.type = DONALD, to allow incremental redefinition of windows.
  window ash { type: DONALD } doesn't work (other values return to their
  defaults).

o CB's "number" template number=["read_all", [["0", "9"]]]; accepts the
  empty string.

o Wrap Sasami in a Scout window (for Chris R).

o Full PCRE documentation (in a Help menu?).

o Rewrite CB's split function using regular expressions (hopefully
  performance would improve).

o Replace Eden 'macro' function with one using a RE?  (Measure
  performance difference).

o Rethink regmatch output: multiple matches as well as subpatterns?
  (Then probably need a limit parameter).

o p=&w;
  p(); -- segmentation fault

o Make append, insert work on strings

o TKEDEN_LIB env variable to EDEN_LIB (accessible from ttyeden also)

o proc p { writeln("$1", $1); }; p("hi"); fails with
    index out of range (11 is outside the range 1...1) in p 
  proc p { writeln($1); }; p("hi"); is OK... ???!!

o Help->License should show GPL

o notations TODO:
   - denota translator: stop #s on stderr

   - redo Donald or Scout in Eden?

   - add %scout0, %lsd0, %eden0 etc as well as %donald0

   - IP translator synchronisation to avoid the one second delays


o edensl:
  - need to escape quotes within quoted parameters

  - problem with procs: edensl chunks statements, but execute needs
    whole procs at a time.

  - need to add underscores between symbol names and indices and also cope
    with multiple levels of lists... eg need l_1_2, not l12.

  - auto (within proc) lists?


o Can %edensl fully replace the built-in %eden?  Probably need to make sure
  that execute, include etc all do a "%eden\n" before they run to make sure
  this fully works.

o Generate machine code, not VM instructions to avoid the overhead of calls
  to function pointers.

o Fix AOP translator to use one buffer per notation, so that AOP
  translators can use other AOP translators.

o A restart menu option... or some way of clearing all state... (cf BASIC
  "NEW").

o Do we need the whole of the pcre directory, or can we just take a
  few choice files and put them in Eden/ ?

o remove cvs trans.c

o WMB would rather tkeden_vbfeatures be implemented as a Scout sensitive:
  value (?)


o Pointers used in procs become invalid after forget:
    proc p { forget(&a); }
    p();
    p(); /* segmentation fault */

  (the problem does not occur in "global", non-proc contexts, as the parser
  will create a when &a is used if it does not already exist.  This does
  not happen during a proc however, as the proc is not reparsed for
  execution).

o arca on PC...

o PCRE documentation.


o Scout/parser.y: ALIGN ':' int_exp, not JUST, as per SENSITIVE, to allow
  DFalign.  Similarly TYPE?
(important for Chris)

o ~wmb/public/projects/tools/translators/def2proc/EXAMPLES/guess.proc
  doesn't work in recent ttyeden, but works OK in ttyeden-1.6.

o 1|> g is f(2);
  2|> f=2;
  crash?!

o cruise controller falls over when nSegment is changed on Windows (and
  Mac?) but not Solaris.



o SQLEDDI bugs:

  1) joins cause "njoin has received at least one undefined table": garbage
     collector not working properly?
  ... fixed, but fudged: todo's seem to need % at end... should fix the
  underlying cause really...

  2) collating together several lines of SQL seems to cause odd errors.
     Doing the lines individually is OK.
  ... another awful todo() problem.  A number of possible solutions but
  none of them are easy.



o func f {}; f=2; gives error: f is func, not a read/write variable.  This
  causes a problem with the new spreadsheet funcs, if someone uses the
  observable name 'ceiling' for example (room3dsasamiCarter1999).  The only
  restriction (which we should change to a warning) is when assigning to a
  func/proc/procmacro.  Overwriting one of those with an is is OK, and the
  reverse is OK.

o Bug reported by Antony Harfield: Chris' logo parser gives Sig 11 on
  Windows

o Plug-in architecture.  Have a special directory within lib-tkeden within
  which users can drop folders containing Eden.  Eg for the Arca
  translator.  When Eden starts up, it searches this directory for
  specially-named startup files and executes them.  This is fairly
  easy... but ideally users would download such things from the
  repository... and how should we cope with platform-specific code there?
  Eg the Arca translator needs to be compiled for a specific platform.
  Have previously avoided putting platform-specific stuff into the
  repository, but perhaps we should allow this as long as they are named in
  a standard form, eg arcaWard2002/arcaWard2002-solaris-sparc?  Then the
  repository can spot these standard names and present a download facility
  for that subdirectory.  Or perhaps users just download the lot, then put
  the plugin for their platform into the directory?

o Bug reported by JP re Scout?
