home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / misc / icalc.lha / ICalc / Docs / History < prev    next >
Encoding:
Text File  |  1992-08-03  |  9.1 KB  |  261 lines

  1. =============================================================================
  2.  
  3.     icalc - a complex-number expression language
  4.  
  5.     (C) 1991, 1992 Martin W. Scott. All Rights Reserved.
  6.  
  7. =============================================================================
  8.  
  9.     Revision History,
  10.     and Things To Do.
  11.  
  12.     * == not documented yet
  13.  
  14. =============================================================================
  15.  
  16.     To Add/Fix
  17.     ----------
  18.  
  19.   FIX    - function, f say, defined initially, then some other fn g
  20.       defined using f. f is redefined, incorrectly at first, thereby
  21.       deleting it from sym-table, until defined correctly. But
  22.       pointers in g now point to nothing...
  23.       This indicates need for reference count within symbols...
  24.  
  25.   ADD    - break, continue constructs.
  26.  
  27.   ADD    - print function which takes strings and format values.
  28.  
  29.   ADD    - error construct. Very similar to print...
  30.  
  31.  
  32.     Version 2.1a
  33.     ------------
  34.     - fixed number display bug: minus sign was being printed after base
  35.       specifier instead of before, e.g. wrote $-A instead of -$A.
  36.  
  37.  
  38.     Version 2.1
  39.     -----------
  40.     - new scripts to perform numerical integration.
  41.  
  42.     - new script 'zroots.ic' which finds all roots of an
  43.       arbitrary polynomial.
  44.  
  45.     - BUG FIX: Sigh...sqrt function was still wrong; thoeretically correct,
  46.       but when rounding errors taken into account, it (very) rarely broke.
  47.       Fixed now, with a routine that looks after its rounding errors better.
  48.  
  49.     - BUG FIX: When started from workbench, output from exec'd commands is
  50.       now displayed if running under Kickstart 2.0.
  51.  
  52.     - CHANGE: indexes of arrays are now rounded to nearest integer, not
  53.       rounded down as previously.
  54.  
  55.     - BUG FIX: Corrected icalc.init session() function.
  56.  
  57.     - BUG FIX: Lattice's %g format behaved oddly under some circumstances
  58.       (writing values like -0 for instance). Since a new routine is used to
  59.       display numbers (in any base) this and all other %g related bugs have
  60.       gone. (Thanks to Eric Rankin for reporting this bug).
  61.       New routine used provides extra flexibility. Modified/new builtins:
  62.         prec(n)        display to n significant digits
  63.         sigzeros(n)    number of leading zeros condidered significant
  64.       The latter routine is new, and documented in the Advanced Guide.
  65.  
  66.     - multiple number bases now supported -- see Advanced Guide.
  67.       New builtin:  outbase(n)    returns last answer (ans)
  68.       (Requested by Jeremy McDonald, who kindly provided the number display
  69.       routine).
  70.  
  71.     - array base can be altered from 1 to any (non-negative) integer;
  72.       obviously, 0 and 1 are about the only sensible choices, in which
  73.       case, a[0] would be first element of array a.
  74.       New constant: ABASE        holds current array base index
  75.       New builtin:  arraybase(n)    returns old base, or -1
  76.                     if n out-of-range.
  77.  
  78.     - bye command added as alias for quit, exit.
  79.  
  80.     - strings given to commands (such as 'cd') need not now be terminated.
  81.       eg: can now type: exec "ed vars.ic<newline>
  82.       (This is along the same lines as GnuPlot).
  83.  
  84.  
  85.     Version 2.0
  86.     -----------
  87.  
  88.     - new and revised scripts - see documents for details.
  89.  
  90.     - writevars "file" writes all variables and arrays to specified
  91.       file in such a way that it can subsequently be read by a 'read'
  92.       command or as an argument to icalc.
  93.  
  94.     - exec "str" command added, passes string to system()
  95.       ie. runs command specified in str. eg. exec "run dme"
  96.       Also, cd "str" and pwd commands added.
  97.  
  98.     - local vars available for functions via local statement.
  99.  
  100.     - 1d-arrays added - see docs for details.
  101.  
  102.     - clear <SYM> where sym is function or variable (or array)
  103.       frees all memory, deletes entry in table. Use with care, doesn't
  104.       check if SYM is referred to elsewhere.
  105.  
  106.     - startup-file optionally specified in env-var ICALCINIT.
  107.  
  108.     - read <name> command, so you can read files from other files
  109.       (like #include) and interactively. Makes writing and debugging
  110.       of compilcated functions much easier.
  111.  
  112.     - Functions can take expressions as parameters, ie. parameters need
  113.       not be evaluated on calling, but only on reference; this can be
  114.       a powerful tool in function definition - see docs.
  115.  
  116.     - More freedom about putting new-lines in expressions to aid clarity.
  117.       See docs for details. Still not free-form though, because of the
  118.       interactive nature of icalc.
  119.  
  120.     - if-then and if-then-else constructs added.
  121.  
  122.     - while-do and repeat-until constructs added - see docs for details.
  123.       To facilitate infinite loops (which would probably print() values),
  124.       the constants TRUE and FALSE have been added. Also added INFINITY
  125.       constant, which represents the largest possible value that can be
  126.       used.
  127.  
  128.     - [internal: changed over to Berkeley Yacc from Bison, because
  129.        the latter didn't seem to understand %nonassoc operator type.]
  130.  
  131.     - [Bugette: a = 3 && b = 4 is valid - parses as a = (3 && (b = 4))
  132.        instead (I would have thought) as a = (3 && 4) = b (ie. nonesense).
  133.        Something wrong with precedence of right-to-left ops in Bison/Yacc?
  134.        Or a grammar that just can't be dealt with by Bison/Yacc?]
  135.  
  136.     - [Internal: binary ops have node set to call-function - quicker than
  137.        case lookup in eval_tree().]
  138.  
  139.     - Exponentation operator ^ now sensitive to operands, ie. doesn't
  140.       just use complex-number formula, but chooses method depending on
  141.       operands. Thus, realno^realno = realno + 0i. Quicker in most
  142.       cases now.
  143.  
  144.     - BUG FIX: files are now closed upon being read, rather than at
  145.       program termination.
  146.  
  147.     - BUG FIX: can now assign to parameters in function definition (for
  148.       what it's worth...).
  149.  
  150.     - BUG FIX: all arguments to functions are now evaluated from left
  151.       to right; previously, this was the case for builtin functions,
  152.       but not user-defined functions.
  153.  
  154.     - Recursive functions may now be written, but program stack grows
  155.       quickly - I'm working on reducing it.
  156.  
  157.     - Addition of ternary operator ?: with usage as in C (see docs).
  158.  
  159.     - Addition of +=, *= etc. operators.
  160.  
  161.     - Addition of relational operators > , >=, <, <=, ==, != and logical
  162.       operators &&, ||, ! (negation). && and || use short-circuit
  163.       evaluation, ala C.
  164.  
  165.     - Abort trap now set, so you can ^C out of long calculations :-)
  166.       Doesn't slow things down too much.
  167.  
  168.  
  169.     Version 1.1a
  170.     ------------
  171.  
  172.     - BUG FIX: The inverse trigonometric functions asin, acos, atan now
  173.       return values in the conventionally regarded PVR's. They should
  174.       also work all the time now (unlike in the last release). 
  175.  
  176.     - BUG FIX: Fixed major bug whereby sqrt(z) didn't return values in
  177.       the correct quadrant for PVR of (-PI,PI]. Not only did this affect
  178.       the sqrt function, but also all functions defined using sqrt
  179.       (internally and in scripts), including inverse trig. functions.
  180.  
  181.     - Addition of max and min functions, which take a variable number
  182.       of arguments and return respectively the value of the  maximum
  183.       or minimum REAL part encountered.
  184.  
  185.     - Addition of a time() builtin. This allows timings of operations
  186.       to be made. time(t) = current time - t.
  187.  
  188.     - Addition of sgn() builtin, which returns the sign (-1,0,1) of the
  189.       REAL part of its argument.
  190.  
  191.     - Modified definitions of int, floor, ceil to only act on REAL part of
  192.       their arguments, so to get floor of imag. part, say floor(Im(z)).
  193.  
  194.     - Revised icalc.init file, with more definitions.
  195.  
  196.     - BUG FIX: Corrected stupid mistake in definition of polar(r,theta)
  197.       function in icalc.init.
  198.  
  199.  
  200.  
  201.     Version 1.1
  202.     -----------
  203.  
  204.     - Example script files modified. Now provided are:
  205.         icalc.init, which has many useful functions (startup-file);
  206.         trig.icalc, which contains less-used trig functions;
  207.         stat.icalc, one-variable statistical analysis.
  208.       You are strongly recommended to look at these for tips on how
  209.       best to use icalc.
  210.  
  211.     - On startup, icalc will now read the file 's:icalc.init' if it
  212.       exists.
  213.  
  214.     - Special function multi() added, which evaluates all its arguments,
  215.       returning the last one as its value. See docs and example scripts
  216.       for applications. Also added is print() builtin, for use
  217.       with multi().
  218.  
  219.     - Special functions Sum(), Prod(), every() and vevery() now added.
  220.       The repeat construct has therefore been removed. (It was only
  221.       in there until I got around to adding this type of facility).
  222.  
  223.     - Expressions and function definitions may now be continued on
  224.       the next line by use of a backslash '\'.
  225.  
  226.     - Identifiers may begin with and contain underscores (and, as a
  227.       side-effect of the implementation, be composed entirely of
  228.       underscores).
  229.  
  230.     - Multi-parameter functions now added.
  231.  
  232.     - You can now declare functions that take no parameters, eg.
  233.         func total() = sum1 + sum2
  234.  
  235.     - Listing of user functions improved: now shows parameter list;
  236.       However, I don't think it's worth writing out whole definition.
  237.  
  238.     - Method of setting precision has changed: now use function
  239.       prec(digits), which returns ans (last computed result). Initially
  240.       set to 8.
  241.  
  242.     - Added function int(z), which returns the real and imaginary parts
  243.       of z rounded to nearest integers; 0.5 rounds up.
  244.  
  245.     - Added functions ceil(z) and floor(z), which operate separately
  246.       on the real and imaginary parts of their argument, in a similar
  247.       manner to int(z).
  248.  
  249.     - Now has a prompt to avoid confusion.
  250.  
  251.     - [Real-valued functions are no longer computed internally as such.]
  252.  
  253.     - Removed debugging code accidentally left in with version 1.0.
  254.  
  255.  
  256.  
  257.     Version 1.0
  258.     -----------
  259.  
  260.     - Initial release.
  261.