Last updated October 14th, 1997. See the MathPad Information web page for the latest version, registration, bug reports, or other information, or send email to rhuebner@probe.net.
Note: MathPad currently requires OS version 2.0 or greater, because it needs the IEEE 754 double-precision floating point functions provided by MathLib, which is a SysLib-style shared library that can't use the NewFloatMgr.lib library needed for IEEE 754 math under OS 1.x. If anyone knows how to create and access GLib-style libraries using CodeWarrior on Win95, I'd love to fix this.
MathPad is a tool for solving and storing mathematical equations in standard algebraic syntax. It works just like the standard MemoPad app, except that if you write down an equation and tap the Solve button, it computes the answer and fills it in for you. These equations can be simple math expressions like "2+2=", or algebraic expressions using variables such as "sqrt(x+4) / acos(0.7) = y**3". MathPad provides operators for exponentiation, bitwise AND, OR, NOT, and XOR, bit shifts, integer or modulo division, comparisons, and Boolean logic. Functions for trigonometry (including inverse and hyperbolics), logarithms, and date manipulation are also provided, with more to follow.
You can supply the values for the known variables and solve for a single remaining unknown variable without the hassle of re-arranging the equation to isolate the unknown. This allows you to easily play around with "what if" questions which would normally be too hard to calculate. Say you're shopping for a new house. Using the standard TVM (time value of money) formula, you can enter the house price and mortgage interest rate to determine the monthly payment. Payment too high? Put in your desired monthly payment, and solve for the house price you can really afford. Or put in the house price and payment you want, and solve for the interest rate you'll need to find to pull it off. And unlike hardwired financial calculators, you can tailor the equations to your special needs. Maybe you'd like to add the predicted property taxes and insurance into your monthly payment total?
Also, if you enter a set of linked equations, MathPad can solve for multiple unknown variables by repeatedly solving any equation in the set with a single unknown until all the variables have been determined. For example, you can put in the standard equations describing DC power expenditure (P=E*I, P=I**2*R, P=E**2/R) and fill in any two of the four variables, and MathPad will figure out how to compute both of the other two unknowns. MathPad doesn't handle simultaneous equations, however; I'm afraid that's a bit too difficult for the Pilot's memory and CPU constraints.
The equation records are maintained in a database file similar to MemoPad's, allowing you to build a custom library of frequently-used equations for quick reference. Structural engineers can archive their mass and stress calculations, real estate agents or bankers can put in loan and annuity formulas, anesthesiologists can compute dosages and blood gasses... whatever standard equations you need are at your fingertips. And since the calculations are written as text instead of being punched into a calculator, you can easily cut and paste the equations and their results to and from other apps such as email, or file your work for future reference.
MathPad combines a powerful algebraic expression parsing routine with a highly optimized root finding convergence algorithm. When you tap the Solve button, it searches the text of the current record for any equation with no more than one unknown variable. If you've entered an incomplete equation with no unknowns such as "8.3**9=", MathPad simply computes the answer and inserts it into the text for you. If it finds an equation with one unknown variable, it solves for the unknown by repeatedly trying different possible values for that variable until the equation works out correctly. First it internally rephrases the equation into the form "leftside minus rightside", so that a correct value for the unknown would cause the entire expression to equal 0. Then it tries to "bracket" the correct answer by looking for one value which causes the expression to yield a positive result (value too large), and another value which causes the expression to give a negative result (value too small). Usually, the correct answer can be found somewhere between those two values. Once it has identified a range which contains the correct answer in it somewhere, it uses a fancy algorithm (the Van Wijngaarden-Dekker-Brent method, from Numerical Recipes in C, 2nd ed.; Press, W.H. 1995; Cambridge University Press, if you care) to rapidly narrow the possible range and converge to the correct answer with as few tries as possible. After setting the unknown variable to the correct answer, MathPad restarts its search of the entire record to see if some other equation can now be solved. This continues until no more solvable equations are found.
While such a root finding algorithm is a very powerful and useful tool, it's not perfect. Many equations can have multiple equally correct possible answers (e.g. in "x*x=4", x could be either 2 or -2), and MathPad makes no attempt to find or display them all. For certain non-continuous or otherwise "strange" equations, MathPad can simply fail to find an answer and will give up. In particular, it does not understand or solve for imaginary or complex numbers. In cases where one possible answer is positive and another negative, a purposeful decision was made to preferentially bracket and find the positive answer, since that's much more likely to be the useful answer for real-world problems. If there are multiple correct positive answers, or no positive answers and multiple correct negative answers, MathPad will simply display the first one it stumbles across (generally the one closer to 0). Using MathPad to solve an equation for you does not absolve you of the responsibility to understand the equation and to exercise judgement in using the result. That said, however, these sorts of concerns generally apply more to "pure mathematics" problems in the theoretical realm than to the sort of actual, real-world problems you're likely to need to solve. "Real" problems involving tons, dollars, or cubic centimeters generally have only one correct answer which MathPad can "zero in" on without confusion.
Use the Install Tool of your PalmPilot Desktop software package to install MathPad.prc onto your PalmPilot. You also need to install the shared math library MathLib.prc if you don't already have it on your Pilot.
MathLib is a free shared library that can be used by any OS 2.0 Pilot program that needs IEEE 754 double precision math functions. It's distributed under the terms of the GNU General Public License, and is freely available with full source code and documentation at the MathLib Information web page. It's not a part of the MathPad program, and you're not paying anything for its use; a copy is simply included in this archive for your convenience.
If you decide to uninstall MathPad, use the standard Memory application built into the ROM to delete it. The equation database is tied to MathPad, and will be automatically deleted when MathPad is deleted.
MathPad is really very easy to use. It maintains a database of text records which you create and edit just like the standard MemoPad application. To do math, you essentially just write down an equation and tap Solve, and it does. You can write your equations directly using Graffiti, or you may find it more convenient to tap the "123" or "abc" dots in the lower corners of the Graffiti area to bring up the keyboard. The elements of an equation are:
The mathematical operators which MathPad recognizes are:
The operators are ranked according to precedence. In mixed expressions, operators higher up in the list are evaluated first, while operators at the same precedence are evaluated left to right. You can use parentheses to override this order of evaluation as required. For example, "1+2**3" equals 9, since ** comes before +, but "(1+2)**3" equals 27. MathPad supports nested parentheses more than 50 levels deep..
The operators ~, <<, >>, &, |, and ^ are computer logic oriented bit manipulation operations which work on 32-bit signed integer values. The values used with these operators must be whole numbers in the range -(2**31) to 2**31-1. These operations are performed internally using signed longs, so they'll wrap or overflow their results as required to stay within the 32-bit range.
The operators ==, !=, <, <=, >, and >= are conditional test operations. If the condition is true, the result is 1, otherwise the result is 0. Note that the equaltity test operator == requires two = signs, to differentiate it from the equation symbol.
The operators !, &&, ||, and ^^ are Boolean logic operators for use with the conditional test operations above. They're different from the bitwise operators ~, &, |, and ^ in that they consider the entire value as a whole instead of bit by bit. They treat 0 as false and any other value as true, and return 0 for false or 1 for true. For example, 1 & 4 = 0 using the bitwise operation, but 1 && 4 = 1 since both values are nonzero. Note that the meaning of the ! operator has changed; previous versions of MathPad used this for factorials, which are now done using the Fact() function to allow all the standard C-style conditional operators to be used.
MathPad includes the following built-in functions. Function names are not case sensitive; abs(), ABS(), and Abs() are equally valid. Note that all trigonometry functions work in radians, not degrees; use the Degrees() and Radians() functions as necessary to convert back and forth.
Abs | Absolute value; forces sign to positive |
Sign | -1 if value is negative, 1 if positive or 0 |
Int | Integer portion of value; truncates fractional part |
Frac | Fractional portion of value; sets integer portion to 0 |
Round | Nearest integral value |
Floor | Largest integral value not greater than x (round down) |
Ceil | Smallest integral value not less than x (round up) |
Sqrt | Square root; x**0.5 |
Cbrt | Cube root; x**(1/3) |
Exp | Exponential function or natural antilog; e**x |
Ln | Natural logarithm |
Log | Base 10 logarithm; for base 10 antilog just use 10**x |
Fact | Factorial; valid only for integral values from 0 through 170. Note: this function replaces the ! operator, which was reassigned for use as the logical NOT. |
Pi | 3.141592653589793116 |
Radians | Converts a number of degrees to the equivalent number of radians |
Degrees | Converts a number of radians to the equivalent number of degrees |
Sin, ASin, SinH, ASinH | Sine, arc sine, hyperbolic sine, and hyperbolic arc sine |
Cos, ACos, CosH, ACosH | Cosine, arc cosine, hyperbolic cosine, and hyperbolic arc cosine |
Tan, ATan, TanH, ATanH | Tangent, arc tangent, hyperbolic tangent, and hyperbolic arc tangent |
Now | Current date and time, as the number of days since January 1 1904. For example, January 1 1904 00:00:00 = 0.0; January 1 1904 12:00:00 = 0.5; January 2 1904 00:00:00 = 1.0. |
Days | Converts an explicit date and time in the format YYYYMMDD.HHMMSS to the number of days since January 1 1904. For example, Days(19040101) = 0.0; Days(19040102.12) = 1.5. |
JDays | Like the Days function, but uses Julian date in the format YYYYJJJ.HHMMSS instead of month and day. |
Date | Converts a number of days since January 1 1904 to an explicit date in the format YYYYMMDD.HHMMSS. For example, "Date(Now())=" returns the current date and time in human readable form. |
JDate | Like the Date function, but converts to a Julian date in the format YYYYJJJ.HHMMSS instead of month and day. |
Year, Month, Day, WDay, Hour, Minute, Second | Extracts the specified value from a number of days since January 1 1904. WDay returns the day of the week, from Sunday = 0 to Saturday = 6. |
Hours | Converts a time from HH.MMSS format to fractional hours. Can also be used to convert degrees, minutes, and seconds to degrees. |
HMS | Converts a time from fractional hours to HH.MMSS format. Can also be used to convert fractional degrees to degrees, minutes, and seconds. |
If | Conditional value. Requires three arguments, separated by semicolons. The first argument is a Boolean condition, which is evaluated as true if nonzero, or false if zero. If the condition is true, If() returns the value of the second argument. If the condition is false, If() returns the value of the third argument. For example; If(x < y; 3; 5) returns 3 if x is less than y, or 5 if not. |
Choose | Selects a value from a list of arguments separated by semicolons. The first argument is truncated to an integral index which must be from 1 to 63. This index is used to select one of the remaining arguments to return, with an index value of 1 returning the first argument after the index, value 2 selecting the second value after the index, etc. For example, if x = Pi() then Choose(x; 5; 10; 15; 20; 25) = 15. |
MathPad uses the new OS 2.0 IEEE 754 double-precision floating point functions to provide 14 significant digits of accuracy from negative to positive 10**300 (approximately). You enter floating-point values in the standard computer format of [-]digits[[decimal mark]digits][E[-]digits], e.g. "1", "1.23", "1.23E45", "-12.1E-3", etc. The decimal mark used is correctly determined from the Pilot's number format preferences.
Variable names can be any length, and are composed of the letters A to Z, a to z, 0 to 9, and/or the underscore character "_". The first character of the variable name must be alphabetic. Variable names are case sensitive; the variable "t" is different and separate from the variable "T". To use a variable in an equation, you must "declare" it, that is, reserve a place for its current value to be stored in your text somewhere. This is done by writing the variable name followed by a colon (":") and optionally a single space or tab. When MathPad needs to check if a variable is currently defined, it looks for "variable:" in your text and uses the value it finds written there. If no value is found, meaning the next thing MathPad sees after "variable:" is not a number, the variable is considered unknown and MathPad will try to solve for it and insert the answer after the colon.
Variables may also be specially designated as "input only" or "output only", for extra convenience with equations which you usually solve for the same variable each time. To mark a variable as "input only", declare it using "<-" after the name instead of the colon (e.g. "x<-"). Variables declared this way are automatically erased whenever the equation record is selected from the main display, with the cursor left sitting at the first input variable of the record for immediate data entry. There is also a menu command to "Clear Input Variables" which will clear them again during use with a quick two-stroke shortcut ("/I"). To mark a variable as "output only", declare it using "->" after the name instead of the colon (e.g. "x->"). Variables declared this way are automatically erased whenever the Solve button is tapped, so that they are always considered unknown, and so are always solved for without requiring you to erase them each time.
When a record contains more than one equation, MathPad normally tries to automatically solve as many as possible whenever the Solve button is tapped. If you want to verify the results of a variable's solution before continuing on to use that variable in further equations, you can mark that variable as requiring a "confirmation breakpoint" by appending a "?" after the variable name (e.g. "x?:"). This causes MathPad to pop up a confirmation dialog box showing the new value of x whenever x is solved for, allowing you to either Continue or Halt the solution of the rest of the record at that point.
There are times when you need to force a variable to always be computed with the maximum possible precision, rather than using the current number format specified by the Details window. For example, if one equation computes a variable which will be used as an input to another equation, and you currently have the number of output decimal places set to 2, this intermediate value would normally be computed only to two decimal places before being used in the second equation, and this loss of precision could cause problems. To avoid this, you may specify "x::" instead of "x:" for a normal variable, or "x->>" instead of "x->" for an output variable, to force that variable to always be computed with full precision regardless of the current output settings.
Finally, you may sometimes need to manually specify the limits of the range of possible answers which will be searched to solve for a particular variable. If you know that the equation you're attempting to solve has multiple valid answers, you can limit the range to be checked to force MathPad to converge in the desired region. Since MathPad preferentially searches for positive answers before negative ones, this can be used to force it to generate a negative solution when necessary. Also, the automatic solution "bracketing" algorithm sometimes fails when solving non-continuous functions, so you can use this to manually set the limits when the automatic search fails. To specify the limits of the range to be searched, specify both the lower and the upper limits of the search range in square brackets, separated by a ":", between the variable name and the variable type suffix, like this: "vname[lowlimit:highlimit]->" or "x[0:1E6]::".
MathPad also allows you to define your own named mathematical constants for use in your calculations. This is handy for common values such as degrees to radians conversions, pi, e, speed of light, weights & measures conversions, atomic weights, or whatever other values you refer to often. When MathPad is searching for the value of a variable, it first searches the text of the current record being edited. If the variable is not declared anywhere in the current record, MathPad then tries to look for a record named "Constants", and if it exists, will also search that record for the variable as well. Only if the variable does not exist in either the current record or the Constants record will MathPad generate an Undeclared Variable error.
To define your own named constants, just create a record with the title "Constants", and then define as many variables in that record as you like. You must declare each constant with the standard variable suffix ":" (input and output variable types don't apply), and you should enter the value as a floating point number with as many decimal places as possible for best accuracy when used.
An equation is simply two mathematical expressions joined with the "=" character. When you tap the Solve button, MathPad will scan your text for equations to solve by looking for any "=" characters. When it finds one, it then has to determine the boundaries of the equation in your text. By default, MathPad will assume that the equation has been written on a line by itself, and that its ends are therefore marked by the previous and following newline characters. If your equation needs to span more than one line, or if you want to put other text on the same line before or after the equation, you must explicitly mark the boundaries of the equation by surrounding it in curly braces, like this "Example: { x + 5 = y }". These braces are not required if the equation automatically wraps to another line, only if you explicitly insert a newline character. Within an equation, you can use spaces and tabs as desired to make things more readable, except that variable names, function names, and multi-character operators like "**" or "<<" must not be broken up.
These commands let you control where within the text of the current record the display is scrolled to, so that it automatically jumps to a particular page of the text when you select the record from the main display (and when the "Clear Input Variables" menu option is selected), and to another page of the text after the Solve button is tapped. You can use this to clean up the display for more convenient use by setting up a separate area in the text for entering input values, and another area in the text for displaying output results, so that you don't have to see all the equations and other variables in the record. To set where the display will be positioned when the record is entered, put the command "--Input--" on a line in the record. The display will automatically be scrolled so that the following line of text is the first line on the display (with the "--Input--" command just off the top edge) when the record is entered or the input variables are cleared. The cursor will be placed at the first input variable, if any. To set where the display will be positioned after the Solve button is tapped, use the command "--Output--". You may need to add extra blank lines to the end of your record to allow it to be scrolled down far enough to go to the position you've specified; if your position command is too close to the end of the record, the display will simply be scrolled to the bottom of the record and the line with the command will still be visible.
Finally, any text surrounded by double quotes, "like this", is considered a comment and is ignored. You don't need to mark all of your comments or notes this way, since MathPad only pays attention to equations, but it can be useful if you want to use "=" or other characters with special meanings in your notes.
If you just want to perform a simple calculation instead of solving an equation, you have two options. You can write any mathematical expression surrounded by back-slant characters, e.g. "\ 2**32 - 1 \", and MathPad will solve the expression and replace it with the answer in your text. Or, you can write an incomplete equation such as "2**32 - 1 =", and MathPad will insert the answer at the = sign. These simple calculations can use any operators, functions, or variables you like, except that any variables used must already have known values, since they're not phrased in a way which would let MathPad solve for any unknowns. If any unknown variables are used, MathPad will simply leave the expression untouched.
To solve an equation for an unknown, you just write in the equation(s), declare storage space for any variables you use, and fill in any known values. When you tap Solve, MathPad will fill in the values of any unknown variables used in your equation(s) which it was able to solve for.
Write the following text into a MathPad record:
TVM (mortgage) mint = yint / 100 / 12 pmt = pv / ((1 - (1 + mint) ** -n) / mint) pmt: 1000 pv: yint: 7.2 (yearly interest as percentage) n: 360 mint->> (monthly interest as fraction)
This sets up the standard time value of money formula and calculates what value of house can be bought with a monthly payment of $1000 on a 30-year mortgage at 7.2% interest per year. When you tap Solve, MathPad will locate the equations and solve the first one for the unknown variable mint. This reduces the number of unknowns in the second equation to 1, so it then solves that equation for the unknown variable pv. To solve for a different variable, just erase its value and tap Solve again. You can easily play around with changing different values and solving for any unknown as desired. Note the use of the "->>" precision output variable type for mint; this is necessary because we need mint to be computed with full precision regardless of the current output format set in the Details window (below).
The Details window lets you delete the record, set the category for the record, mark the record as private, or set the output number format options. The Decimal Places option sets the desired precision of any answers which MathPad prints into your record. You can select from 0 to 14 decimal places of accuracy in your results. MathPad always computes all results to 15 decimal places, and then rounds the result to the precision selected when printing. The Strip Zeros option tells MathPad whether it should remove any trailing zeros from the result. For example, when calculating in dollars, you'd set Decimal Places to 2 and turn Strip Zeros off. If you're using any intermediate variables which will be used in other equations (such as "mint" in the example above), remember to override these output format settings to force the values to be computed in full precision using "::" or "->>"; see the Variables section for details.
These are the error messages which MathPad might display when you tap Solve:
The PalmPilot Desktop software creates a directory named something like C:\Pilot\<username>\Backup, and stores backup copies of your system preferences and other settings there whenever you Hotsync. MathPad marks its equation database as requiring this kind of backup, so all of your equations will be automatically backed up as a file named MathPadDB.pdb in this directory. Warning: Hotsync version 1.0 has a bug which causes it to only back up the first 32 files installed on your Pilot. Anyone still using 1.0 should consider getting the free 1.1 upgrade from USR's web site, especially if they have a lot of stuff installed.
Should your Pilot require a hard reset or suffer battery failure, it could lose its memory. If this happens, just do a Hotsync after fixing the problem, and all files in the backup directory will be automatically reinstalled. What many don't realize is that you can stick application .PRC files into this directory yourself, and they'll be automatically reinstalled after the reset as well. The only problem is that the apps you put there are deleted after the restore, so you'll need to recopy them back into the backup directory again afterwards.
What I've done on my system is create a C:\Pilot\Huebner\Apps directory, and whenever I find a new app that I want to keep around, I copy it into this directory and into the Backup directory. If my Pilot loses its memory, I do a Hotsync and everything is automatically reinstalled. Then I just copy the contents of the App directory back into the Backup directory so that it'll be ready again for the next time.
If your Pilot loses its memory and you haven't prepared like this, it's not a disaster; it just means you have to go back and re-install all the .PRC files you had before using the Install Tool. It's a drag, but no real loss. Either way, your equations will have been automatically backed up and then restored, giving you one less thing to worry about.
A problem has been discovered with how HotSync handles reinstallation of the MathPadDB.pdb database file. For some reason yet to be determined, HotSync on the Pilot sometimes (often? always?) fails with a Fatal Error if you try to reinstall the MathPad database file with MathPad.prc already installed. There's no problem if MathPad.prc is installed after the database file, only if the database is installed with the application already in place. To avoid this problem, you must delete the MathPad application from your Pilot before reinstalling a backed up MathPad database, and then reinstall MathPad.prc after the database.
With the Windows 95 version of the desktop software you can still reinstall both files during the same HotSync operation, but you must make sure to delete MathPad from your Pilot before the HotSync, and you must select the database file with the install tool before you select the MathPad.prc application file. HotSync will then install the files in the order in which you selected them, so the database will be installed first. I don't know if the Mac install tool also installs in the selected order, so on a Mac it may be necessary to install each file during a separate HotSync to be safe.
Note that this problem does not seem to affect the automatic reinstallation that takes place on the first HotSync after a hard reset or memory failure. It appears that when doing a full restore, HotSync makes a special effort to reinstall all the backed up database files first, before reinstalling the backed up application files, perhaps to avoid this very problem. This problem only occurs when you use the install tool to manually install a non-resource (*.PDB) database.
If anyone knows if this problem also affects other programs that use PDB-type non-resource database files, I'd like to hear about it. At this point I'm not really sure if it's a bug in HotSync that we might be able to have Palm patch, or something specific to MathPad that I haven't found yet.
Two utility programs are included with MathPad to give you access to the equation records stored in the backed up MathPad database file on your PC. MpExport copies the records from the database file to a plain text file that you can edit with your favorite editor, print, give or email to others, etc. MpImport copies the records from a plain text file back into your MathPad database file, which you can then reinstall on your Pilot using the standard install tool (see the Reinstalling section above).
Windows executables for these utilities are included, plus simple ANSI-standard C source code for other platforms. Since these programs need to be portable, they're executed from the command line (MS-DOS window or whatever). If some obliging Mac owner could compile the provided code on their system and send me a .SIT file, I'd be happy to include that executable as well. Unix users should be able to just do a "cc mpexport.c -o mpexport" or equivalent to generate a native executable for their system.
I decided to write these export/import utilites rather than doing a fancy desktop app and conduit for two main reasons: 1) Palm has made it insanely difficult to write conduits, and 2) this way, the solution works on all platforms, instead of being restricted to Windows systems (since I have no way to create any Mac or Unix software).
MpExport is very simple to use. Copy MPEXPORT.EXE into a standard directory in your search path, open a command line window, go to the directory where your Pilot files are backed up (usually C:\Pilot\<username>\Backup) and enter "mpexport mathpaddb.pdb mathpad.txt" to create a simple text file named "mathpad.txt" containing all the records in "mathpaddb.pdb". This output text file will be created if necessary, or overwritten if it already exists. You can then edit this text file with Notepad or any other standard text editor, print it, cut records from it to paste into an email message, or whatever.
Windows users might want to make an icon to run the program automatically if you expect to be using it often, perhaps writing the text file out to your C:\Windows\Desktop directory to have the exported text file pop up on your desktop for easy access.
If you edit the text file, be sure to stick to the record format which MpExport used when it wrote the file, so that MpImport will know how to read it back in again. The Category and Places lines are optional, but must be in the order and format exported if used. The record separator line must appear between records, and must be copied exactly as exported.
MpImport is a bit more complicated to use than MpExport. When you run it, you have the option of either making the changes directly to your backed up database file, or of writing a new database file which incorporates the changes so that the current database is left alone as insurance. You would make the changes to the current file by entering "mpimport mathpaddb.pdb mathpad.txt", or you'd write a new file by entering "mpimport mathpaddb.pdb mathpad.txt newmpdb.pdb". Note that MpImport can't create a new MathPad database from scratch; it requires an existing MathPad database as a starting point and then incorporates the text file records into that. This ensures that your categories, registration data, etc. are carried forward correctly from one database to the next.
MpImport works by copying the entire contents of the text file you specify into your MathPad database file. You should edit the file before running MpImport to make sure that it contains only the records you actually want to import. As it processes each record in the text file, it checks to see if a record with the same title already exists in your current database. If not, it goes ahead and adds it to the database automatically. If there's already a record by that name, and it's different than the one in the text file, it asks you whether it should overwrite the current version of that record in your database. If you say yes, the old version of the record in your database is replaced by the version from the text file. If you say no, the new version from the text file is added to your database alongside the original. When a record is added to your database, MpImport automatically adds that record's category to your database's category list if necessary. If your category list is already full (16 categories is the limit, including Unfiled), MpImport marks the new record as Unfiled instead.
After importing the text records into your database, just install the updated database in your Pilot using the standard install tool. Due to a problem with HotSync, it's currently necessary to delete the entire MathPad program and database from your Pilot before installing the updated database. The MathPad.prc application file must be reinstalled in your Pilot after installation of the database file. This can still be done during a single HotSync session, as long as you select the files for installation in the correct order. See the Reinstalling section above
As you'd probably expect after reading this far through this nice manual I went to the trouble of writing, MathPad is shareware. It's not, however, crippleware or constantly-in-your-face-ware or even plead&whineware. I don't like those sorts of programs when I download them, so I won't distribute one myself. The only "persuasion" MathPad applies is that it will discreetly and tactfully remind you to pay for what you've gotten every couple of weeks. I figure this is enough to help the decent people who intend to pay for it (eventually) remember to do so, whereas no amount of goading and kvetching will impress those who've consciously decided to steal it.
If you like MathPad enough to give it a permanent home in your Pilot, you may register it for the entirely reasonable low price of $10 to $12 US (depending on processing surcharge). Registered users will receive a code to turn off the registration reminders (which will work with all future updates), and are automatically notified by email when new versions are available. They also enjoy the smug satisfaction of knowing that they're helping to encourage the production of fine software like this for their Pilot, and (more to the point) that they're helping to encourage me to continue supporting and improving it instead of giving up on the whole thing in disgust.
In an attempt to make it as easy as possible for you to give me your money, I've set up 4 ways to register MathPad. The cost of registration varies somewhat depending on the method used. I'm charging such a low price for my software that I can't just absorb the stiff fees some companies impose, but rather than raise my prices across the board, I've decided to pass on my cost of using each payment system and let you choose for yourself.
If you send cash, use an opaque security-printed or brown paper envelope so you won't tempt the mail handlers into theft. Specify the name you want to register MathPad under if different from that on the check and/or envelope, and please include an email address so I can send you your registration code and update notices.
MathPad is protected by copyright law, and is licensed, not sold. You're allowed and encouraged to use and redistribute MathPad in its original form, as officially distributed by me, but not to distribute registered or modified copies. You're allowed to use but not distribute one registered copy per registration fee paid. MathPad is guaranteed to work pretty much as described in this documentation, with no seriously impairing bugs, or I'll fix the bug or return your money. No other warranties or remedies are applicable.
SOFTWARE PRODUCT LICENSE. This software is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. It is licensed for use, not sold. You are allowed to use and distribute the software in its original, unmodified form as desired. You are limited to one registered copy of the software per registration fee paid, installed on a single PalmPilot organizer at any one time. You may not reverse engineer, decompile, disassemble, or modify the software. LIMITED WARRANTY. I warrant that the software will perform substantially in accordance with these accompanying written materials when installed on a PalmPilot organizer running OS versions 2.0 through 2.0.4. CUSTOMER REMEDIES. My entire liability and your exclusive remedy shall be, at my option, either (a) return of the price paid, or (b) repair or replacement of the software that does not meet this Limited Warranty. This Limited Warranty is void if failure of the software has resulted from accident, abuse, or misapplication. NO OTHER WARRANTIES. To the maximum extent permitted by applicable law, I disclaim all other warranties, either express or implied. NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall I be liable for any damages whatsoever arising out of the use of or inability to use this product. My entire liability under any provision of this agreement shall be limited to the amount actually paid by you for the software.
Version 1.11, October 14th, 1997: Fixed (I think) a subtle stack overflow bug that caused erratic Fatal Errors during or after solving equations with nested parenthesis or function calls. I'm pretty sure this is solid now; please let me know if you're still seeing this problem.
Version 1.1, October 1st, 1997: Added date and time functions, comparison and logical operators, and If and Choose functions. Added two utility programs, MpExport and MpImport, which copy equation records between a backed up MathPad database file and a plain text file on your PC so you can share equations with other users, edit long records with a text editor, etc. Windows executables for these utilities are included, plus simple ANSI-standard C source code for other platforms. Added a confirmation breakpoint variable flag for the crew at Baylor. Now allows use of the "_" character in variable names. Fixed a problem that caused the root finder to stop converging too early in some cases, which could result in slightly inaccurate answers when solving for a variable. Fixed a problem with updating the scroll arrows after a Solve. Fixed the automatic selection of uppercase shift mode when creating a new record. Added the operator precedence chart to the Tips window in the record view.
Version 1.01, August 24th, 1997: Fixed a problem that caused some math library routines to lock up or die with Fatal Exception errors under some obscure conditions. Fixed the preferences dialog frame.
Version 1.0, August 19th, 1997: Major update. Added trig and log functions via new MathLib shared library (freely usable in your own programs!). New mathematical constants lookup page, ability to specify solver search limits, display positioning controls, and large font option. Now returns to last position when launched (for easier cut & paste and use with SwitchHack). Fixed 0! bug, problem with scientific notation constants in expressions, and problem when one variable name matched the end of another.
Version 0.82alpha, May 30th, 1997: Fixed the infinite solutions bug (I think), improved handling of undeclared variables, added ability to designate variables as "input only" (automatically cleared when record loaded or by menu command) or "output only" (automatically cleared when Solve is tapped, thus always solved for), and added Undo Last Solve menu command.
Version 0.81alpha, May 29th, 1997: Fixed a last-minute typo that caused problems solving for small fractions under some conditions, preventing MathPad from solving the mortgage example for the interest rate.
Version 0.8alpha, May 28th, 1997: Original release.