
Help
----

Introduction
------------

This is the third-and-a-half request-for-comments (RFC)
release of Isis. The half is because I haven't really done much
but I was revamping the website and thought I might as well
stick on the latest version.

Isis is a spreadsheet. That's basically all. I originally
intended to write a simply but relatively powerful spreadsheet
perhaps for educational use but have ended up writing a kind of
hybrid that contains some but not all of the features found in
more powerful commercial spreadsheets. Oh well.

Changes
-------

In this third-and-a-half release, the differences from the
third release are:

        - The memory handling code has been completely
          changed - it now uses Jon Ribbens' Flex code rather
          than my own - and _should_ be much more reliable and
          efficient.
        - The delete row and insert row facilities should now
          work. The column equivalents are still broken and so
          are disabled. Oh, and formulae _are_ updated now after
          a row is added or removed.
        - The sprites are also stored in a dynamic area on
          RISC OS 3.5+ as well as the messages.
        - The deg() and rad() inaccuracy problems are fixed.
        - Errors are now recorded, along with heap dump, in
          <Isis$Dir>.Resources.Reports.
        - The problems loading old files have gone.

For anyone who has the second release, the following changes
were made for the third release:

        - The invisible and unchecked font size limit of 256
          has gone.
        - There is a completely new help system but with very
          little help in it.
        - Sorting is complete.
        - Row and column headings may be added, either using the
          main menu or by clicking MENU on a row or column
          label.
        - Circular references are now flagged.
        - Automatic evaluation now works.
        - If Isis is loaded, CTRL-double-clicking on a sheet
          file will display its file version number.
        - ^E may be used to force evaluation of the cursor.
        - Printing is possible but the code is incomplete: only
          the entire sheet may be printed, row and column
          headings are ignored, and there are problems when a
          row or column is wider or taller than the page.
        - Scientific notation may now be used to enter numbers.
        - There is a new much faster memory copying routine,
          courtesy of GUS... so if inserting or deleting a
          column or row actually worked, it would be much
          faster. Trust me.
        - Quite a few minor changes and a lot of bug fixes.
        - A number of bugs introduced: notably that the chronic
          state of column or row insertion or deletion has
          worsened and can now completely hang the machine if
          used on the last column or row, there are occasional
          mysterious machine hangs when quitting Isis (to cure
          on RISC OS 3.5+, press ALT-BREAK and quit any _other_
          task), and there are some odd memory corruption
          problems after loading an old version file.
          
For anyone who looked at the first release, the following
changes were made for the second release:

        - The toolbox has moved to the top of the main window
          and the pane-management code has been rewritten to
          hopefully solve the bugs with window resizing. The
          toolbox may be scrolled if some of it is obscured, by
          dragging on its background.
        - The default cell size has been reduced.
        - You can now wipe the current sheet and create a new
          one at any time using an option on the iconbar menu.
        - There is now a limited styles system. Note that each
          cell may have only _one_ style on top of the default.
          To use the cell border as an example, the cell
          plotting code now looks at the cell data to see if
          the cell border has been set as an effect (from the
          toolbox or the effects menu). If so, that border
          setting is used. If not, the cell style is checked.
          If the cell has no style or that style has no border
          set, the base style setting is used. If the cell style
          exists and does have a border setting, it is used.
          Simple, isn't it? :-)
        - There are now some nice pointer changes.
        - Importing now works! You can currently import only
          TSV and CSV files. Dragging one of these into the
          sheet window will paste it at the _cursor_ position,
          in a similar manner to the clipboard paste function.
          Dragging a file onto the iconbar will attempt to
          import it into a new, blank sheet of the correct size.

For more information, examine the Documents.Log file.
          
Licence
-------

Right, Isis is copyright  me, Nicholas Marriott, and Alpha
Programming. Please don't distribute this RFC release too much
(meaning don't include it on any magazine cover discs, CD-ROMs,
or anything else - basically, don't provide people with any
source of it other than the AlphaPro website) without my
permission. Don't distribute any modified versions without
requesting my permission first. You can take apart, reverse-
engineer or whatever the program as long as you feel you can put
it back together again.

Source
------

The latest release of the Isis program can be obtained from
www.geocities.com/nicm32 or if you send me a disc and postage
I'll probably send you a copy of the latest version.

If you ask nicely, I might send you the source code but don't
expect to make much sense of it. Its 100% ARM, by the way.

Problems
--------

There are quite a few omissions and problems in this release of
Isis, the most crucial of which are:

      - You can't resize the sheet using the resize window.
      - No proper documentation. Interactive help is supported
        but not on menus.
      - You can't export as a Draw file. Or import Schema.
      - Overlays are a complete mess. So are styles.
      - Printing isn't complete.
      - It's a wee bit slow on ARM3 or less.
      - Effects are a wee bit cumbersome, especially font
        selection: no special bold or italic buttons.

There are also several major bugs, including:

      - Colour picker windows cause an inexplicable non-fatal
        error.
      - Sorting sometimes hangs the machine.

Other than that, the program seems quite stable to me but I have
not conducted rigorous or complete testing.

Cell references
---------------

Those used to other spreadsheets may find some aspects of Isis
quite odd.

The method of referring to cells is one example. In Isis, _all_
cells references must be enclosed in square brackets: []. There
are also two forms a reference can take. The first (coordinate)
system _numbers_ the columns and rows from zero, like a
two-dimensional array. Using this method, the top-left cell is
referred to as,

      [0,0]
         
the one below it as,

      [0,1]
      
and so in.

Under the second (standard) system, the columns are labelled
from A and the rows from zero:

      [A0] or [A1]

The system in use can be set from the options dialogue box
obtainable from the iconbar menu. This option controls only what
form the program _outputs_ the references - both forms will be
accepted as input (but don't expect what you enter to stay that
way if you use the opposite to what is configured).

Note that the @ symbol may be used to lock cell references in
formulae and prevent them being updated when a fill or paste is
performed, for example:

      [@A0]  [A@0]  [@A@0]
      [@0,1] [0,@1] [@0,@1]
      
If the 'Update references' option on the options submenu is
unticked, no cell references are ever changed.

Cell ranges are specified as so:

     [A0-B1] or [0-1,0-1]
     [D7-F9] or [3-5,7-9]

Formulae
--------

A formula may be entered directly into the sheet - any string
starting with '=' is assumed to be a formula - or through the
formula dialogue box obtained by double-clicking ADJUST on the
main sheet window.

The formula processor uses the C/C++ model which supports the
following operators:

Operator  Precedence  Function
~         14u         Bitwise not: ~5 == -6
!         14u         Logical not: !5 == 0
+         14u         Unary plus
-         14u         Unary minus
**        13b         Power: 5**2 == 25
*         12b         Multiply: 5*2 == 10
/         12b         Divide: 5/2 == 2.5
%         12b         Modulus: 5%2 == 1
+         11b         Binary plus: 5+2 == 7
-         11b         Binary minus: 5-2 == 3
<<        10b         Bitwise shift left: 5<<2 == 20
>>        10b         Bitwise shift right: 5>>2 == 1
<         09b         Less than: 5<2 == 0, 2<5 == 1
<=        09b         Less than or equal: 5<=2 == 0
>         09b         Greater than: 5>2 == 1, 2>5 ==0
>=        09b         Greater than or equal: 5>=2 == 1
==        08b         Equality: 5==2 == 0
!=        08b         Inequality: 5!=2 == 1
&         07b         Bitwise and: 5&2 == 0
^         06b         Bitwise eor: 5^2 == 7
|         05b         Bitwise or: 5|2 == 7
&&        04b         Logical and: 5&&2 == 1
||        03b         Logical or: 5||2 == 1
?:        02t         Arithmetic if: 5&&2?1:0 == 1

FP numbers are converted to integers for bitwise operations. All
numbers are converted to true or false (1 or 0) for logical
operations, where 0 is false, !0 is true.

The arithmetic if is the only complicated bit for people not
familiar with C or C++. It's syntax is:

        <condition>?<true value>:<false value>

Such as:

        {n1}%2?"odd":"even"

Nested arithmetic ifs must be enclosed in brackets, like so,

        [2,2]<6?"D":([2,2]<11?"C":([2,2]<16?"B":"A"))      

which works out the grade for an Eng. Lit. essay mark out of 20
found in cell [2,2] or [C2].

Note that constants may be set up using the constants dialogue
box on the utilities submenu of the main menu. They must be
enclosed in curly brackets, {}, in all formulae.

Unfortunately, cell references are treated as single entities so
it is *not* yet possible to use something like:

        [2*3,3*2]
        
All functions are in lower case: sin(), cos(), and so on. Trig. 
functions must have parameters in radians (like BASIC).

Errors in a formula are not handled very well, currently the
cell is just filled with the string "ERROR".

Look at the example sheets for, er, examples or read the Isis
online help for more information.

Miscellaneous
-------------

In Isis there is no messing about with a special icon for
entering data into a cell. You type directly onto the sheet.

Cells are automatically expanded when the text becomes too big
to fit. Note that this size becomes the minimum: you can set
cell widths and heights bigger than the size of the text but
_not_ smaller. This is irritating sometimes but I have yet to
think of a good way round it.

Most other things should be easy enough to work out or in the
interactive help. If there's anything that isn't, WRITE AND TELL
ME!

Comments
--------

As this is an RFC release, I am, obviously, hoping for some
comments. The main areas I want feedback on are:

   - The user interface: inconsistencies, difficulties, or
     suggestions for improvement.
   - Bug reports.
   - Ideas for additional features or different (better?)
     takes on existing features.

I would rather have suggestions which are aimed towards making
the program more user-friendly than for esoteric features
required only very rarely.

Of course, any constructive comments at all will be appreciated.
Please don't report any bugs I already know about (see the Bugs
file) unless you really feel your instance is different in some
way.

I can be contacted at the address below. I'll try to reply to
all messages as quickly as possible but, er, that may not
actually be very fast.

Conclusion
----------

Thanks to everyone who has sent me comments so far.

Nicholas Marriott,
Alpha Programming.

<nic@alpha-programming.co.uk>

54 Moneymore Road,
Cookstown,
Co. Tyrone,
N.Ireland,
BT80 8EH.
