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