                        exAL Version 6.1 


This is the latest release of exAL, a spreadsheet library for the HP48S/G
calculator. It is by no means meant to replace your pc spreadsheet but 
it is functional enough to provide stable spreadsheet like data entry and
some mathematical manipulation.
exAL requires the UFL library with small font. If you intend to use compressed
data, you will also need Mika Hieskanan's BZ in lib form.
Valid object types that can be entered into a cell are:

real:           a real number ie 1, 2.5, 3.65876, etc.
complex:        (1,2), (1.69, 2.98), etc.
list:           { 1 2 3 4 5 ...}, { any comb of real/complex/string/equ/etc ...}
prog:           << routine that returns at LEAST one result and does
                        NOT affect the display or perform the kill
                        command or any other operation that would
                        cause exAL to error >>
string:         any string such as "Title" 


formulae and programs can contain references to other cells just like
you would expect. If you precede a cell reference with a $ character,
that cell reference is static ie in the copy function, it will not change.
An example is if A1 contains 100, and A2 contains '$A1+1', and you
want to copy A2 from B1 to C5, each cell in the block will contain
101. However, if you do NOT add the $ char, the cells will contain
 dynamically updated expressions like A2+1, A3+1 ... B2+1 B2+1 etc

Cell names are denoted as [A-Z][1-?]. What this means is that the size of 
the sheet is limited in the number of columns it may have to 26.
However, it may have any number of rows up to the limits of available
memory.


If you are familiar with earlier versions of exAL, you will not see a
drastic difference in the appearance of the sheet as I have found that
the current interface is both practical and functional. However, the code
has been COMPLETELY rewritten and is made to be much more efficient.

******************************
Differences in earlier code: *
******************************
exAL now uses the stack display as opposed to PICT. (ABUFF, not GBUFF)
        This means it is a little faster in some respects as well as
        being more efficient.

Data input is now accomplished with an assembly language routine that
        allows the data to be input from the status box instead of
        jumping to the old INPUT line routine. You can now do everything
        from inside the viewer. It is much faster and more elegant. The
        input routine is known as EDLIN and was written by Arnold Moy.
        
	NOTE: For some reason, edlin will fail to catch the initial
	keystrokes if you try to type too fast. I suggest starting slowly
	on the first two or three.
	
There are a LOT less key combinations to remember now as I have implemented
        a pseudo-menu system for some operations and for configuration.
        (see below)

The sheet is drawn in pages. By this I mean that the largest grob that will
        be created is 132x64. The older versions created a grob that was
        proportional to the size of the sheet itself which meant that the grob
        would be HUGE if the sheet was big. The new method will drastically
        decrease the memory needed to run exAL when the sheet is larger than
        5 columns and 8 rows. You might notice a small speed penalty when
        scrolling the sheet over previous versions, but it will be insignificant.

I added several routines that are written in assembly to speed up certain
        things, make the overall program smaller, and to get more practice
        in writing assembly.

The code creates only ONE global variable now while running as opposed to 
        previous versions which created up to eight globals. This means
        smaller code and faster execution of routines.

Many bugs from the earlier versions were fixed. 

******************************
Future additions:            *
******************************

A plotter will be added which will be much nicer than previous versions.



******************************
Caveats!!                    *
******************************


The input routine, EDLIN, has a little trouble capturing the initial
key presses if you start too fast. Just make sure that you make the first
two key presses at a moderate speed.


NOTE!!!!
The copy/fill function will only copy from the source cell in a right/down
direction. ie copy A1 from A1 to D5. But NOT copy C5 from A1 to B6. Remember,
right and down including the source cell!

Do not try to crash this version. It is designed to let the user determine
if the current functions perform as required and to afford the opportunity
for users to give input pertaining to future enhancements, bug fixes, etc.
Examples of bad data would be:

'A1+' which would obviously not work.

<< A1 B2 + DROP >> which returns nothing and will nuke you.

1.34A25 which is not a real and would probably crash you or at least
        return invalid results.



With all of that said, now I will explain the program.

There are two ways to start the program.

1) Press NEW in the library's menu. This will create a blank sheet
        with 4 columns and 7 rows. Each cell will contain a null string
        so they will appear blank. All settings will be made default ie
        gridlines will be on, auto movement will be down, exAL will
        automatically save the sheet if data is edited or new data
        is input, sound is on and a couple of other things.

2) If you have already run the program and saved the sheet, exAL will
        create a program in the main calc menu that will start the viewer
        for you with the last sheet version saved and all settings from
        the previous session will be made current. You will be able to name
        the sheet anything you want and you can create and store as many
        sheets as your memory will abide.


After starting the program in either of the two methods described above,
the following keys are defined:


[A]	About function. Simply displays a little string in the status box
	and it remains there until you press another key.


[C]     This key starts the copy/fill function. When you press it, the status
        bar will show you:

        Copy ##

        where ## is the cell that is currently highlighted. You may move the 
        cursor around the sheet until you are on the cell which will be 
        the source of the fill. Let's say it is A1. When you are at the 
        source cell, press ENTER and the status box will look like this:

        Copy A1 from A1

        You may now move the cursor to the cell where you want the fill
        to begin. As you move the cursor, the status box will update. Let's
        start the copy from B1, so move to B1 and press ENTER. Now the
        status box will say:

        Copy A1 from B1 to B1

        Again, as you may have surmised, move the cursor to the cell where
        the fill will terminate. The status box will update as before.
        Go to, say, D5 and press ENTER.
        From here, the program will fill A1 from B1 to D5 and will dynamically
        update any cell references in A1 as it proceeds across the columns
        and down the rows. If A1 does not resolve to a real or complex result
        you will see Error! in the cell where it is being resolved.

You can abort the copy/fill function at any time by pressing ON during the
definition process. But once you press ENTER for the third time, it will
finish itself.

[NXT]   Will start the configuration routine. From this screen, you can scroll
        up and down and toggle the values of various settings. Toggle with 
        [+/-], ON saves and exits to spreadsheet. 

	Auto-move - will toggle whether the cursor automatically moves
		          right or down after a valid entry is made into a cell.
	Display - toggles whether values or formulae (if applicable) are displayed
		   in the status box.
	Plot type - toggles whether points or lines are used in plotting.
			(not yet applicable)
	BZ active - toggles whether BZ is used when the sheet is saved.
	Auto-save - toggles whether the sheet is automatically saved after it
		        is changed in some way. Note! If this is set to YES, BZ will
		        NOT be active.
	Sound - obvious.
	EQ Editor - toggles which editing environment is used to edit an
		       equation. I advise using the default. EQWriter is slow.
	


[']     This starts an input for a formula. In the status box you will
        see '' and you can enter the formula. The input routine works 
        like the built in one and all characters are defined.
        Pressing ENTER will place the data into the current cell. Pressing
        ON will abort the entry.

[EVAL]  Will re-evaluate the current cell.

left-shift [EVAL]       Will re-evaluate the entire sheet.

[<-], [->], [V] and [^] will move the cursor in the appropriate direction.
                        holding it down will repeat.
			right shift + any of these will jump to the corresponding 
			edge of the sheet.

[ENTER] Will place the current cell on the stack

left-shift [+/-]        Will edit the current cell. Editing is just like
                            data entry. ENTER saves, ON aborts.

[EEX]   Will toggle the gridlines on/off

[DEL]   Will delete the current cell

[1],[2],[3],[4],[5],[6],[7],[8],[9],[0] and [.] will begin numeric entry
        into the current cell.

[/]     Will start the pseudo menu. You will see three options:

        [R]ow [C]ol [M]ath

        If you press either [R], [C] or [M], you will be presented with
        more selections. Say you press [R]:

        [D]el [I]ns [A]dd

        [D] deletes the current row
        [I] inserts a row at the current position
        [A] appends a row to the bottom of the sheet

        Selecting [C] will give the same options only for columns.
        Selecting [M] will give you:
        
        [T]ot [M]ean [S]dev

        You can select either of these and if there is data stored in
        SIGDAT (explained later), [T] will place the sum of SIGDAT in the
        current cell. [M] is the average, [S] is the sample standard
        deviation.

left-shift [-]  Will let you enter a program into the current cell. EDLIN
                will open up with <<>> in the status box.

left-shift [+]  Will let you enter a list. The list should contain only
                valid objects. The objects will be placed in successive cells
                until the edge of the sheet or the end of the list, which-
                ever occurs first. Invalid values will be skipped.
                eg {1 2 3 4 5 6 7} will place 1,2,3,4,5,6 and 7 in seven
                consecutive cells down the current column starting from
                the current cell (if auto move is down) or it will place
                1,2,3 and 7 across the current row (if auto move is right). 


left-shift [/] Begins entry of a complex number

[SPC]   Will redraw the entire sheet.


[ON]    Will let you exit the sheet. You will be presented with the opportunity
        to provide a name for the current sheet. Either enter a name or press
        ON again. If you enter a name, the sheet and all of its' settings
        will be saved in you main menu. If you press ON instead of a name,
        the program will exit.

right-shift [ON] Turns off the calc. When you turn it back on, it will
		 be right where you left it. Alarms should remain intact.


right-shift [0] will export the sheet to a space delimited ascii file suitable for
	         import into a pc spreadsheet like Excel. Note! In order to use
	         this file, you will have to edit it once it is uploaded to your pc
	         and remove the header and both of the double quote marks.
	         Make sure you upload it in ascii format.

left-shift [downarrow] will print the current LCD image to a HP thermal
			printer.
note: if you have Auto-save activated, any entry of data will save the sheet
        automatically. If you have yet to provide a name, it will be called
        'untitled' and be saved. To restart a sheet that was saved, simply 
        press its' menu key.


********************
Concerning SIGDAT: *
********************

You may accumulate real data in a variable called SIGDAT by moving to the 
cell of interest and pressing right-shift [TAN]. If the cell is a real or
a formula that resolves to a real, that value will be added to SIGDAT. There
is no limit to the number of entries that you can add. After you have at least
two entries in SIGDAT, you can use the [M]ath functions as described above.
You can clear SIGDAT by pressing left-shift [TAN].

I would like to thank the following for their help:

Arnold Moy - who tested it for me and alerted me to some problems. He also
		provided the permission to use his editor routine, EDLIN, in
		exAL. It greatly improved the usability and appeal of the lib.

Othniel Rawlins - for beta testing and suggestions.

Many others who I have not mentioned by name who helped in some way.


I know this isn't the best doc, but it should get you started. Please let me
know if any of the functions described here do not work as expected. Also
let me know if you have any questions, comments or suggestions. Thanx for the
help! :-)


Al Arduengo
exal@texas.net
(210)654-1381

