-*-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 Make append, insert work on strings
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 Provide a command line argument which lets you pass a string to be passed
  as input before anything else is read.
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 A rename symbol procedure, mainly for use in debugging (when we want to
  move an existing procedure out of the way to subsitute another but keep
  the original)
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 Understand and document checkRunSet in main.c.
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 symboltext only works for formulae - so perhaps it should be
  formulatext... :(.  Also many pointless differences between the
  reflection interfaces for formulae and variables etc (eg one gives a
  semi-colon at the end, other doesn't...).
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 Find... dialogs should not be modal (ie should not stop rest of
  application working...)
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 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).
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 Figure how to rework existing models to cope with removal of _mouseClick
  in 1.17 (railway accident messes up, for example)

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 Need forget(&ptr) as well as forget("name")

o Generate new package for LSM and send to Alexander

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.
