Hail Expression Writer By Samuel Stearley
v1.05
Copyright 2002-04


homepage: http://www.nyall.net
Yes this document is rather big. But I do expect you to read it over once. In future versions I will keep detailed track of changes/additions so that you know what to look for in this file. Changes are kept in history.txt.

To install send hail.89z or hail.89y to your calculator. Do not send both. Hail.89y is a ppg compressed version of hail.89z. Iif you choose to send hail.89y you will need a decompressor such as ttstart. The latest version of which is available in the tigcc tools suite.

If you do choose to install the ppg compressed version there is a basic program included called hailexe.89p (will work on any calc) Hailexe.89p is a basic program that decompresses hail with ttstart. It makes more sense to me to distribute a 40 byte basic program that uses ttstart than to distribute an 1600 byte custom decompressor. And if there is ever discovored a bug in the decompressor you can simply fix things by updating ttstart.

If you choose to install the uncompressed version there will be trouble with AMS versions 2.03 to 2.08. (To check what AMS version you have press F1, then A from the home screen.) Hail exceeds the artificial size limitation imposed on users by Texas Instruments. To get around this you can use ttstart to execute hail (the combination luncher/decompressor mentioned above) OR you can install a program such as KERNO that will suppress the errors. Kerno may downloaded from ticalc.org or calc.gregd.org.

Regardless of which version you select you will also have to send haildata.89z.  Haildata contains external data and the settings.  So set the  internal settings of hail the way you like before archiving haildata. Do not rename hail or haildata. The 89 version will not operate correctly on a 92/V200. The 92+ version should work correctly on a v200 Both files must be placed into the main folder.

NOTES FOR HW2/TITANIUM USERS (HW3):  These calcs feature "protection" mechanisms that forbid an assembly program from executing another assembly program. Hail allows evaluation of expressions and executing eqw programs.  Therefore it is possible that other assembly programs could be called.  Therefore I recomend that you remove the protection mechanism by installing the Hardware patch.

There was a stripped down version planned.  The features that will be missing from it are marked in this document with an x.




Table of Contents:

1)Keys

2)Various Entry

A) Matrix

B) List

C) Typing Basic/Asm Programs or Built in Functions

D) Differential Equations

3)Command Line Arguments

4)Cursor Mode (x)

5)Overview Mode (x)

6)Forms

7)Options

8)Always Cursor Mode (x)

9)More Matrix Navigation (x)

10)Extra Features

11)Limitations

12)Odd things

13)Bugs

14)Ram Usage

15)Future Versions

16)Reserved Variable Names

17)Contacting the Author

18)Legal

19)Thanks




Keys:

I assume that you have experience with an equation writer of some sort, like on the hp calculators or eqw for the ti by E.W.  Hail has many features from both camps.


The best introduction to using an equation writer is the documentation for eqw.  I suggest you read it if you have not already.  So by standard the following keys described in the documentation of eqw apply during Hail:


Diamond+numbers, [, {, Apps, var-link, Operators, numbers, letters, Arrows, arrows+shift, arrows+2nd, Comma, semi-colin, Backspace, Clear, Del, Insert, math, units, char, catalog, diamond + [.


The remaining keys in Hail are now described.


Recall:

______________________________________________________________

Executes ti’s recall box.


Diamond + Store:

______________________________________________________________

Executes the basic program eqwprgmr().  Recall used to do this.


Mode:

______________________________________________________________

Mode will give you tios’s mode menu.


Home:

_______________________________________________________________

Gives help/about/settings pages.  Previously this was

Assigned to mode.


Alpha (lock on 92+) + up/down/right/left:

______________________________________________________________

Used with matrix/list/program entry.  These keys insert rows above the cursor or below the cursor.  Or insert columns to the left of the cursor or to the right of the cursor.


Or insert element in a list to the right or left.

Or insert arguments of a basic function to the right or left.


Space:

______________________________________________________________

For the 92+ owners who always have to stretch thier hands over to the arrow keys. It performs the same operation as the up key.


This is like math cad.


Diamond + down:

______________________________________________________________

2nd+down goes to the left most number/var within the highlighted expression.  Diamond+down goes to the right most number/var in the highlighted expression.


Diamond +right/left: (x)

______________________________________________________________

Swaps selected expression with the argument to the right or left. 


Example:

1) Enter (x-y)/(x-y^2)

2) Select the numerator

3) Hit diamond + right and the numerator is swapped with

the argument to the "right" which is the denominator. So

the expression becomes: (x-y^2)/(x-y)


‘)’ Right Parenthesis:

______________________________________________________________

Toggles between the small and the large font! This is remembered so set it how you like before archiving.


‘(‘ Left Parenthesis: (x)

______________________________________________________________

Cursor mode!  See discription below.


Diamond + negate/h:

______________________________________________________________

Stores highlighted block to the home screen history! The second key depends if you have an 89 or 92+


F8: (x)

______________________________________________________________

Over view mode.  See below.


Diamond + apps: (x)

______________________________________________________________

Approximates highlighted expression and if the result is a float, then print that float in the status line.


Diamond + F1: (x)

______________________________________________________________

Enters a new matrix navigation mode.  You must be within a matrix in order for this to work.


Diamond + F2:

______________________________________________________________

Press this key and it will reload everything from the variable xsafety.


Operators:

______________________________________________________________

They are applied to what is already highlighed or to the number that is currently being edited.


Pi Product is mapped to '}'

Sigma summation is mapped to ':'.

Abs is mapped to diamond + '|'.  Or on the 92+ diamond + k because '|' is 2nd + 'k'


Mem: (x)

________________________________________________________________

There are two ways that the ‘and’ operator can be printed.  This key toggles between the two.  This is described in more detail below.




Matrix Entry:

To enter a matrix hit '[' the currently selected expression will be the first element in the matrix.  As you move about the matrix your position in the matrix will be printed in the status line as row,column.  If you have an entire row selected it will only print the row number.


Once the matrix is entered you can do many things to it:


a)Add rows:

To add a row above the current row you are in press alpha(lock on 92+) + up.  To add a row below the current row you are in press alpha(lock on 92+) + down. Or ';'.


b)Delete rows:

Select row and press clear/backspace


c)Add columns:

To add a column to the right of the current matrix element the cursor is in press alpha+ right. Can you guess what alpha+left does? To add a column to the far right press ','


d)Delete columns:

Press backspace on a place holder in a matrix and the entire column goes with it.


e)Swap rows:

Select a row and press diamond+right to swap it with the row below, diamond+left to swap it with the row above.


f)Swap elements:

Elements in each row may be swapped with other elements in that row with the diamond +right/left keys.




List Entry:

To enter a list hit the '{'.  the currently selected expression will be the first item of the list.  As you move about the list it will print the index of the selected element in the status line.


Once it is entered you can do several things:


a)Add Elements:

Press ',' to add an element to the very end. Press alpha + right to add an element to the right of the element the cursor is currently in. Press alpha +left ...


b)Swap Elements:

Simply use diamond +right/left


c)Delete Element:

Highlight the unwanted expression. Press clear to turn it into a place holder. Press backspace to delete the place holder.




Typing Basic/Asm Programs OR Tios Functions:

If you do not wish to get a command from the catalog/math menu or get the basic/asm program from the var-link menu you can type it instead.


To apply a basic/asm program or a tios function to an expression first highlight that expression.  Then type the name of the function.  The existing expression will momentarily disappear.


When done typing, hit the "(" key and the command is applied immediately to the argument that was selected before the typing began.  If what you have typed is a tios function then it applied as a tios function.  Else it is applied as a basic/asm program.  It is case insensitive.


Notes:  1) It is case insensitive.  2) When typing a tios function you can press down arrow instead of right parenthesis.  3) Not all tios commands are supported.  You can not use things like ‘For’ or any other command where the arguments are listed behind the function with a space, not inside parenthesis.


Example:


1) Enter (x-4)/(s-v)

2) Highlight it all

3) Hit DIAMOND + ( + SHIFT + p for the upper case greek PI.

4) Hit the "(" and wallah!  The pi product form is entered.


Odd Example:


1)    Enter (x-4)/(s+d)

2)    Highlight it

3) type "and"

4) Hit the "(" and wallah!  The function "and" is applied to (x-4)/(s+d).


Once a basic program or asm program is entered there are several ways that arguments can be added. Manipulation is essentially the same as that of a list. You can add an argument to the very end with the comma key. Or for greater control over where the arguments go you can use alpha (hand on 92p) +right/left.




Differential Equation Entry:

It is straight forward to enter an expression like y''. Enter y, then hit the prime key twice.

Entering an initial condition like f'(0)=0 is not as straight forward. To write the f'(0) part of this expression these steps must be followed:
1: Write the f(0) in the ordinary fasion: like how basic programs are entered.
2: Make sure that f(0) is selected. This will not work if the function name 'f' is selected.
3: Press the ['] key on the keyboard, keep pressing it to add more primes.
4: Press [del] to remove a prime




Command Line Arguments:

Hail can take arguments, they are the same as EQW by E.W.


ONE ARGUMENT: hail(expression) The argument is first simplified by the os before it is passed on to hail as an argument.


hail("expression") The argument is a string so it is not simplified by the os.


For compatability with eqw programs and forms placeholders are given by a 1 letter variable being char(255).


But Hail has additional argument capability:


TWO ARGUMENTS: hail(expr,font)  The expression can be a string or a nomal expression.  If a string is passed the argument will not be simplified.  Font is the font to use.


If two arguments are passed hail will output the dimensions of the expression once it has been pretty printed. Note: it does not display it pretty printed, it just gets the dimensions.


To the variable ‘xtop’ hail will store the size of the top of the expression.  To the variable ‘xbottom’ hail will store the bottom half of the expression.  To get the total height of the expression add these variables together.  Yes there are reasons why they are not added together already.


Width will be stored to ‘xwidth’


For the small font use 0, for medium font use 1.


THREE ARGUMENTS: hail(expr,x,y)  The expression is displayed on the screen at coordinates x and y.  The coordinates may be negative.  The expression can go out of bounds.  If it does the graphics will be clipped.


The font it uses is the default font used during normal editing procedures.


Again the expression can be a string or an actual expression.


Also it will output the dimensions of the expression to the variable names given above.


FOUR ARGUMENTS: hail(expr,x,y,font)  Just like the 3 arg form but this way you can specify the font.




Cursor Mode:

Press '(' to get into this mode (except when typing a variable name/number)


This is a feature on my 49g's eqw and it is replicated here.  It lets you move around the equation in any x and y direction and it "ignores" the rpn tree-structure.


Arrows move the cursor, escape and enter will exit from the cursor mode. The currently boxed expression will then be highlighted when escape or enter is pressed.


If you know what you are doing then this feature probably will not be that useful.  But for those who don't know what they are doing, it could also be confusing.  So don't ask me to explain it.  Just play with it.


Unlike the 49g you can do anything to the boxed expression that you want. You can apply operators, type over it, cut, copy, paste, delete it, ect.  Upon doing any of these actions Hail will revert back to normal mode.  But if you like cursor mode there is an option that will let you always be in cursor mode.




Overview Mode:

This mode is just for observing the expression.  The arrows scroll in nice large chunks and there is no need to hold down the shift button which is awkward.  And it is not in the inverse white on black like a highlighted expression in the normal editing mode.


There are two ways that it can display the expression for viewing:


If it is not very tall (less than half the display area) and very wide (width is greater than the display area) then hail will display it with line breaks.  You will know if you are in this display mode because you will see the line breaks, which are dashed lines.  The arrows will scroll it.  ')' will toggle the font.  ']' will shange the alignment of matrix columns.


Failing the circumstances for the line break mode it will do a normal display. Arrows will scroll if it can be scrolled by incriments of 40 pixels.  2nd + arrows will scroll in whole screen sections.  And ')' will toggle the font. Again ']' will shange the alignment of matrix columns.




Using Forms:

Sorry but the " character will not convert the highlighted expression to a string.  Just enter the expression normally, stash it to the history, exit Hail and convert it to a string yourself.




Options:

All these options are stored internally in haildata and need to be set before archiving haildata.


1)Font:


Hail can use two fonts, medium or small.  The ')' toggle between the two fonts.  By default the medium font is set. The small font is nice for viewing but not writing.


2)Spacing: (x)


You can control the "spacing" variable.  The spacing variable will control how condensed the pretty printing is.  Like "a+b" how many pixels after the “a” will the "+" appear?  This is what it controls. It does this for all infix operators and multiplication.


So if the default is too cramped for you then adjust it.


Personally I think that the tios's pretty printing is too loose while the hp49g's pretty printing is too cramped.


To set the spacing press mode and press keys till you come to the options page. Then press F1 to cycle between 4 spacing sizes.


Or use custom key during normal entry to cycle between the different spacings.


3)Division: (x)


The width of a division bar is determined by the greater of two widths: the numerator or denominator width.  It then goes and adds this additional constant to that width.  The numerator and denominator will then be centered in the division based on this width.


Pressing F2 will cycle between 0-6.


4)Matrix Right Align: (x)


When checked this will cause the elements in a matrix to be right aligned in a column, by default they are left aligned.


This can be set from the mode screen, but ']' on the keyboard will toggle between the two alignments.


5)Soft Menu: (x)


If you wish you can have the soft menu gone.


6)Ez_greek: (x)


For those of you who have to use greek characters a lot (Any engineering or Math major does)  It is only available in the 89 version of Hail.


When activated all that you need to do to type a greek letter is press the alpha/shift modifier.  Keep the modifier held down and press the alpha letter that corresponds to the greek leter you want.


To type normal letters press and RELEASE the modifier.


This is a direct integration of a tsr I wrote called Ez_greek that is available on my site.


7)And printing: (x)


There are two ways that the ‘and’ operator can be printed.  The first is the traditional method whereby and is printed in between the two arguments.  The second way it can be printed is in a vertical form.


The vertical form is nicer because it can help fit more onto the screen at once.


Example:


Solve(x^3+y/x=3 and x/y+y^(1/x)=12-sin(x),{x,y})


Will not fit entirely on the screen, but it will if you use the vertical form of and.  The results of solving simultaneous equations can also be quite long and using this option those results can be nicely compacted.


The upside down v symbol commonly used as an and operator is placed in between the arguments with the second form.


You can not set this option from the mode screen.  There are reasons for this.


8)Always Cursor Mode: (x)


Set this and you will do all editing in cursor mode.

See Below.


9)Low ram Mode:


By Default Hail requires 32k available to write the datums that dictate the positioning of everying.  Using 32k the limit on objects in the expression is about 800 numbers/operators.


If the low ram option is set Hail will use 16k to write the datums.  So the limit has on items has shrunk down to 400 numbers/operators.


This option is only for advanced users.


Effects of changing this option will not occur until after Hail has been exited and restarted.



Always Cursor Mode: (x)

In normal mode you move about the entire expression by moving about the smaller expressions it is composed of.  Up selects more, down selects less, right and left move to different expressions.


But the cursor mode lets you move about the expression at will in any x or y direction regardless of the rpn structure.  Now if you like you can be in that mode all the time.

 

The boxed expression is the selected expression, just like the inverted expression in normal mode is the selected expression.  Any thing that you could do in the normal mode can be done in this mode to that boxed expression: be it storing to stuff to the history, typing numbers, applying operators, cutting, copying, ect.


Even if you do not use this mode you can still quick enter a temporary cursor mode by pressing the ‘(‘ key.  In the temporary cursor mode escape and enter result in the boxed expression being the selected expression.  In Prefered Cursor Mode escape will exit Hail and enter will paste the expression to the entry line (provided there are no place holders left in the expression.)


So just play with it.  Personally I find it slower and more of a pain than the normall entry procedure of moving from expression to expression.  But it is here as an alternate. Newbies might find it easier.



Matrix Navigation: (x)

Yes you can navigate a matrix the way you can in eqw by E.W.


But a new matrix navigation method is available in Hail.  You press Diamond + F1 to get into it.  Once in it you will be confined to the matrix.


In this mode movement is like that in the 0S’s data/matrix editor.  Using the arrows you move the cursor from one element to another.  You can not select rows, parts of the element, or the entire matrix.  All that you can select is a matrix element.


During the navigation the current elements row and column will be printed in the status line.


Up:      Stay in the same column, go one row higher.

Down:      Stay in the same column, go one row lower.

Right:     Stay in the same row, but move 1 column to the right.

Left:      Stay in the same row, but move 1 column to the left.


And you can move to the extreme edges of the matrix with 2nd + Arrow.


Enter/Escape: Return to the normal mode of operation.  A confirmation message of this will be blinked in the status.




Extra Features:

1) If an underscore is in a variable name then what comes after the underscore will be printed as a subscript. The underscore is not printed at all.


The exception to this being if the underscore is the very first or last character.  If it is the last char in a var name you will temporarily not see it (the typing cursor has moved into the subscript), just press down and the typing cursor is gone and the underscore appears.


This is like how mathcad works with the '.' character.


2) When eqwUser or an eqw program is launched the selected expression will be stored to a variable called ‘selected.’  This makes it possible to have eqw programs that act directly on the expression itself just like the function keys act directly on the selected expression.


For example the following eqw program takes the selected expression and immediately turns it into it’s polar form, assuming that it has a polar form:


Eqwprgm3()

Prgm

Local x

SetMode(“Complex Format”, “polar”)-> x

hailCom(string(selected))

SetMode(“Complex Format”, x)

EndPrgm


This example is included in this .zip archive.




Limitations:

1) The third optional argument for the derivative function is only displayed once in the "numerator" of the d/dx.


2) It can not display  basic commands (like "For " and "EndFor" ) and statistical commands (like "LinReg " ) are not supported.  An equation writer really is not supposed to be used for such commands.  The focus is Calculus.


If you give hail an expression with these items in it then they will be replaced by a rectangular block (looks like an extra wide placeholder)


3) Hail will not display very large strings, visually they will be replaced with another string that says "Big String."




Odd things:

1) Matrix rows are cut/copied/pasted as lists.  When stashed to the history a matrix row is stored as a list.


2) Depending on the operator hail might use brackets instead of parenthesis.  This is to increase readability because the brackets are only used with certain operators:


a)Postfix:

Operator comes after argument like >hex, !, ect


b)Prefix:

Operator comes before the argument like negate.


c)Powers:

The ^ operator.  The base has brackets around it if the base is non simple.  The exponant has brackets around it if the exponant exceeds certain dimensions.


d)Exp:

The e^(.  Again the exponant only gets brackets if it exceeds certain dimensions.


e)Sigma Sum and PI Product:

The First Argument will be in square brackets.


Example:


(x-5)^3  The highest operator is the ^ it decides that the first argument x-5 is non simple and needs to be enclosed in something.  It chooses to use Brackets.


In the case of (x-5)*3 the high operator is the multiply so it looks at the (x-5) and sees that it is non simple and needs to be enclosed in something.  In this case it uses parenthesis, not brackets.




Bugs:

1) When you exit hail the number of history pairs in the status line will still reflect the number of undos/spacing option.


2) Hail might place parenthesis where they are not needed.  Sometimes I ignore tios's rules:


Example:


Tios prints abs(x)^3 as  (|x|)^3.  Hail prints this as |x|^3.  Note that neither actually show the ^.


3) Expressions are limited to dimensions of 32k by 32k.  If these dimensions are exceeded then there will be graphical errors.




Ram Usage:

Hail allocates 7k for the rpn Data.


For each operator and number in the expression, hail will write a "block." These blocks contain datums that dictate x,y positioning, area, text versions of numbers and some other datums.  So for each operator and number in the expression you have about a 30-40 byte overhead.


hail allocates 32k for these blocks so there is space for about 800 blocks. So if your expression has more than 800 operators/numbers then hail can not handle it.


If want there is an option that you can check so that hail will allocate 16k for these blocks.  For those of you who have a lot of things in ram.  Personally I have nothing in ram.


Hail keeps at max 20 undos.


So you need about 40k free to operate Hail.




Future Versions:

1) Include an event hook tsr that maps hail to something like Shift+Enter.

2) More advanced when( form.




Reserved Variable Names:

Hail:  The name of this program. Do not rename it under any circumstance.  Doing so could cause a crash.  Hail needs to be able to find itself and hide itself in order for the tios catalog to function without crashing.  This may be archived.


Haildata:  The external data file.  If you rename it hail will not be able to get it’s external data.  This may be archived.

 

EqwUser: This program will be executed when apps is pressed.  This may be archived.

 

EqwPrgmx:  Where x is 1 to 9.  This program is executed when diamond + number is pressed.  This may be archived.


Eqwprgmr:  This program is executes when diamond +store is pressed.  This may be archived.


Selected:  When any user program is executed the currently selected expression is stored to this variable.  Do not archive this variable.


Xtop:  The top half of an expression that has been pretty printed to the screen with hail’s additional command line features.  Do not archive this.


XBottom: The bottom half of an expression that has been pretty printed to the screen with hail’s additional command line features.  Do not archive this.


Xwidth:  The width of an expression that has been pretty printed to the screen with hail’s additional command line features.  Do not archive this.


Xsafety: A safety variable.  I have this tendancy to press exit and loose everything I’ve entered.  So now when you press exit everything is stored to this variable.




Contacting the author:

I may be contacted by email at: samuel@nyall.net


Please send questions, comments, and suggestions.  At this point of developement I want feed back.  Half the fun of writing calculator programs is hearing from people around the world. Or goto my sight and sign the guest book.


If you can please send me a ti file of the expression that can be used to get to the bug with the pressing of a few keystrokes.




Legal:

I am in charge of the distribution of hail. Do not upload hail to any site or distribute it on any medium without my permission. Calc to Calc distribution is fine. If you distribute a basic program that makes use of Hail, you still may not distribute hail. Just plug my site and tell others to go there.  No money can be charged for hail itself or for the distribution of hail.  If you charge money for other programs or for the distribution of other programs you are not allowed to bundle hail with those programs.  You are not allowed to include hail as a freebie associated with any sale.


Samuel Stearley is not responsible for anything that occurs from the use of this program.  That includes but is not limited to crashes, damage to calculator or loss of data.


Samuel Stearley does not guarantee that it works.  If Hail incorrectly prints an expression and you write it down as an answer on a test I am not responsible.


It is Open source.  It is 100% asm.  Will you be able to do anything with it? You may plagariaze ideas of hail but not the code.  It is there if you wish to add to the project.  If you wish to use parts of the source then my permission is needed.




Thanks:

-Friend Rabbit.  Rest in peace space cowboy.

-Rusty Wagner for vti.

-The tict for thier handle explorer.  I use it quite extensively to view rpn data of entries in the history.