UNIT.92G implements automatic units algebra and conversion. Printable Documentation for the TI-92 Program Library version 1.0 by David R. Stoutemyer Soft Warehouse, Inc. April, 1996 This document describes a collection of supplementary functions and subroutines that Dave Stoutemyer wrote for the TI-92. The current version of this library is down-loadable at http://www.derive.com. The library consists of an ASCII text version of this document README.TXT and three TI-Graph Link(tm) group files: UNIT.92G implements automatic units algebra and conversion. ELEM.92G implements pre-calculus mathematics capabilities such as solution of simultaneous nonlinear equations, general regression, contour plots and plots of implicitly-defined functions. ADV.92G implements more advanced mathematics capabilities such as symbolic solution of differential equations and vector calculus. Each group includes a corresponding "about...()" program that states the purpose of the folder, the copyright and abbreviated free copy provisions, then "installs" the folder by performing some housekeeping and setup tasks. This documentation and the group files are free for use with the TI-92. They are available on an "as is" basis with no express or implied warrantee. You have permission to redistribute them on a non-profit basis provided: a) the programs and functions are all locked before transmission and the distribution contains no spurious variables; b) you include a printed or computer-readable ASCII text form of this documentation; c) you include the corresponding about...() programs; d) any changes to the contents of the folder or this documentation are commented with the author's name; e) portions printed in a textbook or included with a supplementary textbook diskette mention the Soft Warehouse, Inc. copyright, mention where the latest full version can be obtained, and include only the portions that are relevant to the textbook. The intent of these provisions is to reduce the chance of missing needed portions, corruption of the programs, inclusion of spurious data, or distribution of obsolete versions. Accordingly, these provisions do not include permission to post these files elsewhere on the internet or any other electronic network from which the internet is accessible. These provisions also do not include permission to publish a diskette or printed version of any of the folders in their entirety or near-entirety. If you do not have access to the Internet World Wide Web and TI-Graph Link, find people who collectively do, and ask them to download the programs for you. The programs are not currently distributed in diskette or printed form. 1. CAPABILITIES, IN CUSTOM-TOOLBAR ORDER: 1.1 UNIT\ UNIT ALGEBRA AND CONVERSION: [F1] Miscellaneous ClrUnits (): Uses DelVar to clear all of the stored unit conversions from a folder. SetUnits (): Allows you to choose the desired result units for length, mass, time and temperature for a folder. SetCustm (): Let's you switch directly between all of the custom toolbars in these three folders and in others that you implement or obtain elsewhere. AboutUni (): Explains the purpose of the folder and abbreviated free copy provisions, then performs installation or reinstallation tasks if desired. [F2], [F3], ... These buttons provide the implemented physical constants and units for length, mass, etc. 1.2 ELEM\ PRE-CALCULUS MATHEMATICS: [F1] Miscellaneous: SetCustm (): Let's you switch directly between all of the custom toolbars in these three folders and in others that you implement or obtain elsewhere. AboutEle (): Explains the purpose of the folder and abbreviated free copy provisions, then performs installation or reinstallation tasks if desired. [F2] Numbers: ratFixN (fraction, numberOfDigits): Fix n display digits for fractions, with n as large as you want. HRatFixN (): Example and problem-entry help dialog for ratFixN(...), with a default example that computes pi to 20 digits. You can edit the entries to compute pi to more digits or to compute decimal fraction expansions of other fractions. basStr2n (digitString, itsBase): itsBase is an integer from two through thirty-six, and digitString is a string representing an integer in that base. (Use lower-case a for the digit ten, b for the digit eleven, etc.) Returns the corresponding base-ten integer. n2basStr (integer, outBase): outBase is an integer from two through thirty-six. Returns integer expressed as a digit string of base outBase. Hbase (): Example and problem-entry help dialog showing how to use the above two functions to convert digit strings between any two bases from two through thirty-six. [F3] Algebra: solvSiml (equationList, varEqualGuessList): Attempts to find an approximate numeric solution to the simultaneous non-linear or linear equations given by equationList, starting from the guess given by varEqualGuessList. HSolvSim (): Example and problem-entry help dialog for solvSiml(...). zeroSiml (expressionList, varEqualGuessList): Attempts to find an approximate simultaneous zero of the nonlinear or linear expressions given by expressionList, starting from the guess given by varEqualGuessList. HZeroSim (): Example and problem-entry help dialog for zeroSiml(...). polyDeg (polynomialInVariable, var): polynomialInVariable is polynomial in var. (polynomialInVariable can be non- polynomial in any other variables.) Returns the degree in var. polyDeg (0, var) returns -infinity. polyCoef (polynomialInVariable, var, exponent): polynomialInVariable is polynomial in var. (polynomialInVariable can be non-polynomial in any other variables.) Returns the coefficient of var^exponent. substN (expression, varList, valueList): Returns the limit of expression as the 1st variable in varList approaches the first value in valueList from above, then the 2nd variable approaches the second value, etc. Used to perform multivariate substitutions involving formal parameters, for which the "with" operator is inapplicable. [F4] Graphics: ImpPlot (equation, horizontalVar, verticalVar, numberOfHorizontalSubdivides, numberOfVerticalSubdivides): 2D graphs of curves implicitly defined by equations. HImpPlot (): Example and problem-entry help dialog for ImpPlot (...). Draws an example. CntrPlot (expression, horizontalVar, verticalVar, numberOfHorizontalSubdivides, numberOfVerticalSubdivides, ContourValueList): Plots contours where expression-value changes sign, for each value in ContourValueList. HCntrPlot (): Example and problem-entry help dialog for CntrPlot(...). Draws an example. ClrGr (): Switches to near-default full-screen function plotting mode, with a -7 to 7 by -3 to 3 square range that all of the full-screen help-dialog default examples are designed to fit well. Also does ClrGraph, ClrDraw, FnOff, and PlotsOff to avoid all vestiges of any previous function-plot images. [F5] Operations On Finite Sets stored as unsorted lists: isMember (element, list): Returns true if element occurs in list. Otherwise returns false. union (list1, list2): Returns list2 augmented by all of the elements of list1 that aren't members of list2. intersec (list1, list2): Returns all of the members of list1 that are also members of list2. setDfrnc (list1, list2): Returns all of the members of list1 that are not also members of list2. removDup (list): Returns list without any duplicate elements. HSet (): Example and problem-entry help dialog for set operations. [F6] Statistics: genReg (independentVars, expression, varEqualGuessList, dataMatrix): General (nonlinear or linear) least-squares regression of any expression to y(x) data, z(x, y) data, or any number of data variables, with any number of unknown parameters to determine. HGenReg (): Example and problem-entry help dialog for genReg(...). 1.3 ADV\ ADVANCED MATHEMATICS: [F1] Miscellaneous: SetCustm (): Let's you switch directly between all of the custom toolbars in these three folders and in others that you implement or obtain elsewhere. AboutAdv (): Explains the purpose of the folder and abbreviated free copy provisions, then performs installation or reinstallation tasks if desired. [F2] Algebra: polyCoef (polynomialInVar, var, exponent): polynomialInVar is polynomial in var. (polynomialInVar can be non-polynomial in any other variable.) Returns the coefficient of var^exponent. substN (expression, varList, valueList): Returns the limit of expression as the 1st variable in varList approaches the first value in valueList from above, then the 2nd variable approaches the second value, etc. Used to perform multivariate substitutions involving formal parameters, for which the "with" operator is inapplicable. [F3] Graphics: ClrGr (): Switches to near-default full-screen function plotting mode, with a -7 to 7 by -3 to 3 square range that all of the full-screen help-dialog default examples are designed to fit well. Also does ClrGraph, ClrDraw, FnOff, and PlotsOff to avoid all vestiges of any previous function-plot images. ClrGrSpl (): Switches to near-default left-right 1:1 split-screen function plotting mode, with a -3.5 to 3.5 by -3 to 3 square range that all of the split-screen help-dialog default examples are designed to fit well. Also does ClrGraph, ClrDraw, FnOff, and PlotsOff to avoid all vestiges of any previous function-plot images. [F4] Differentiation Applications: impDifN (equation, independentVar, dependentVar, n): Returns the nth derivative of the function implicitly defined by equation. HImpDifN (): Example and problem-entry help dialog for impDifN(...). curvatur (expression, var): Returns the curvature of expression with respect to var. HCurvatu (): Example and problem-entry help dialog for curvatur(...). cntrCurv (expression, var): Returns a 2-element list that is a parametric representation of the center of curvature of expression with respect to var. HCntrCur (): Example and problem-entry help dialog for cntrCurv(...). Graphs an example. oscCircl (expression, var, circleParameter): Returns a two- element list that is a parametric representation of the circle that osculates expression. HOscCirc (): Example and problem-entry help dialog for oscCircl(...). tanLine (expression, var, varValue): Returns an expression for the line that is tangent to expression at var = varValue. (In contrast, the built-in LineTan command draws the tangent line but doesn't reveal its formula.) HTanLine (): Example and problem-entry help dialog for tanLine(...). Graphs an example. prpendic (expression, var, varValue): Returns an expression for the line that is perpendicular to expression at var = varValue. HPrpendi (): Example and problem-entry help dialog for prpendic(...). Graphs an example. [F5] Integration Applications: lapTran (expression, timeVar): If the global variable s has no stored value, returns a symbolic expression for the Laplace transform of expression in terms of s. If s has a numeric value, returns the Laplace transform for that particular value. (To help determine inverse Laplace transform of an expression, expand the expression with respect to s, then look up the inverse transforms of the terms in a table.) HLapTran (): Example and problem-entry help dialog for lapTran(...). fourirCf (expression, var, lowerLimit, upperLimit, n): Returns the truncated Fourier series of expression for var from lowerLimit to upperLimit, through the nth harmonic. HFourirC (): Example and problem-entry help dialog for fourirCf(...). Graphs an example. plrArcLn (r(thetaVar), thetaVar, lowerLimit, upperLimit, weight(thetaVar)): Returns the weighted arc-displacement in polar coordinates, where var thetaVar varies from lowerLimit to upperLimit, with r(thetaVar) and weight(thetaVar) being expressions that might depend on thetaVar. Use weight 1 for an unweighted arc-displacement. HPlrArcL (): Example and problem-entry help dialog for plrArcLn(...). HPlrArea (): Example and problem-entry help dialog that helps set up an iterated integral to integrate a density over a region in polar coordinates. Use density 1 for an unweighted polar area. surfIntg (density, height, var1, lower1, upper1, var2, lower2(var1), upper2(var1)): Returns the integral of a density over surface whose height might vary with var1 and var2. var1 varies from lower1 to upper1, which must be independent of var1 and var2. var2 varies from expression lower2 to expression upper2, which might depend on var1. Use density 1 for a surface area. HSurfInt (): Example and problem-entry help dialog for surfIntg(...). Graphs an example. aCntroid (density, var1, lower1, upper1, var2, lower2(var1), upper2(var1)): Returns a 2-element list denoting the {var1, var2} coordinates of the centroid of a density over a 2D region. var1 varies from lower1 to upper1, which must be independent of var1 and var2. var2 varies from expression lower2 to expression upper2, which might depend on var1. Use density 1 for an area centroid. HACntroi (): Example and problem-entry help dialog for aCntroid(...). Graphs an example. aInertia (density, var1, lower1, upper1, var2, lower2(var1), upper2(var1)): Returns a 2-by-2 matrix denoting the inertia tensor of a density over a 2D region. var1 varies from lower1 to upper1, which must be independent of var1 and var2. var2 varies from expression lower2 to expression upper2, which might depend on var1. Use density 1 for an area inertia tensor. HAInerti (): Example and problem-entry help dialog for aInertia(...). Graphs an example. [F6] Ordinary Differential Equations: ode1IV (expressionForDeriv, indepVar, dependentVar, initValIndepVar, initValDepVar) expressionForDeriv is an expression for d(dependentVar, indepVar) in terms of those two vars. Their initial values can be any expressions, including variables that have no stored values. Returns a symbolic solution if it can determine one. Otherwise returns false, which doesn't mean that one doesn't exist. HODE1IV (): Example and problem-entry help dialog for ode1IV(...). ode1Gen (expressionForDeriv, indepVar, dependentVar, IntegrationConstant): Similar to ode1IV(...), except that ode1Gen(...) seeks a general solution in terms of IntegrationConstant, which is customarily a variable c that has no stored value. When comparing with textbook or manual solutions, note that general solutions are not unique: Non- equivalent general solutions can both satisfy the differential and depend on their different symbolic integration constants. Also, note that to solve an initial- value problem, it is more automatic and usually more assured of success to use ode1IV(...) than the classic textbook approach of using ode1Gen(...) followed by substitution of the initial conditions followed by an attempt to solve for the integration constant. HODE1Gen (): Example and problem-entry help dialog for ode1Gen(...). ode2IV (expnFor2ndDeriv, indepVar, depVar, varFor1stDeriv, initValIndepVar, initValDepVar, initVal1stDeriv): Similar to ode1IV(...), but for 2nd-order differential equations. expnForDeriv is an expression for d(depVar, indepVar, 2) in terms of those two vars and varFor1stDeriv. Their initial values can be any expressions, including variables that have no stored values. Returns a symbolic solution if it can determine one. Otherwise returns false, which doesn't mean that one doesn't exist. HODE2IV (): Example and problem-entry help dialog for ode2IV(...). ode2BV (expnFor2ndDeriv, indepVar, depVar, varFor1stDeriv, initValIndepVar, initValDepVar, finalValIndepVar, finalValDepVar): Similar to ode2IV(...), except for a 2- point boundary-value problem. HODE2BV (): Example and problem-entry help dialog for ode2BV(...). ode2Gen (expnFor2ndDeriv, indepVar, depVar, varFor1stDeriv, 1stIntegrationConstant, 2ndIntegrationConstant): Similar to ode2IV(...), but ode2Gen(...) seeks a general solution in terms of the two symbolic integration constants. In textbooks they are customarily variables c1 and c2 that have no stored values. However, these are reserved data-var column names on the TI-92, so you will have to use something else such as k1 and k2 or c[1] and c[2]. When comparing with textbook solutions, note that general solutions are not unique, as described for ode1Gen(...). HODE2Gen (): Example and problem-entry help dialog for ode2Gen(...). odesTay (expnList, indepVar, depVarList, initIndepVar, initDepVarList, deg): Returns a list of Taylor series for the solution of a system of 1st-order ODEs, truncated to degree deg. depVarList is a list of the independent variables, initDepVarList is a list of their corresponding initial values, and expnList is a list of expressions for their corresponding 1st derivatives. Textbooks explain how to convert systems of one or more higher-order ODEs into a system of 1st-order ODEs. HODEsTay (): Example and problem-entry help dialog for odesTay(...). DirField (expnFor1stDeriv, horizontalVar, verticalVar, numberOfHorizontalSubdivides, numberOfVerticalSubdivides): Draws the direction field. HDirFiel (): Example and problem-entry help dialog for DirField(...). Draws an example. ODESysLs (expnList, indepVar, depVarList, initIndepVar, initDepVarList, stepSize, nSteps): Approximate numeric solution of a system of 1st-order ordinary differential equations computed as lists. Stores the solution as global lists of numbers in the current folder, named with the first three characters of the variable names prefixed by DelMe. Textbooks explain how to convert systems of one or more higher-order ODEs into a system of 1st-order ODEs. HODESysL (): Example and problem-entry help dialog for ODESysLs(...). Plots an example. HODE2Lst (): Example and problem-entry help dialog for approximately solving a 2nd-order ordinary differential equation by converting it to a pair of 1st-order equations, then using ODESysLs(...). Plots an example [F7] Infinite Series: ratioTst (summand, sumVar): Conducts the ratio test for the convergence of an infinite series, returning one of the strings "converges", "diverges", or "unknown". HRatioTs (): Example and problem-entry help dialog for ratioTst(...). [F8][F2] Symbolic Solution of Sequence Equations: seq1Solv (p(n), r(n), n, nMin, ui): Attempts to return an exact symbolic expression for u(n) that satisfies the linear 1st- order sequence equation u(n) = p(n)*u(n-1) + r(n) with u(nMin) = ui. HSeq1Sol (): Example and problem-entry help dialog for seq1Solv(...). seq2Solv (k, c, r(n), n, nMin, {ui(nMin+1), ui(nMin)}): Attempts to return an exact symbolic expression for u(n) that satisfies the linear 2nd-order constant-coefficient sequence equation u(n) = k*u(n-1) + c*u(n-2) + r(n) with ui(nMin+1) being u(nMin+1) and ui(nMin) being u(nMin). HSeq2Sol (): Example and problem-entry help dialog for seq2Solv(...). [F8][F3] Matrix Eigen-problems: fCharPol (squareMatrix, var): Returns the factored characteristic polynomial of a square matrix, using var as the variable. The result indicates the eigenvalues and their multiplicities for the matrix. HFCharPo (): Example and problem-entry help dialog for fCharPol(...). eigenVec (squareMatrix, eigenVal): Returns an approximate unit eigenvector associated with the given eigenvalue. Use it up to m times to determine up to m independent eigenvectors for an eigenvalue of multiplicity m. Use fCharPol(...) to determine both the eigenvalues and their multiplicities. When comparing with textbook or manual eigenvectors, note that even unit eigenvectors corresponding to eigenvalues of multiplicity 1 are not unique: If u is a unit eigenvector, then so is -u. HEignVec (): Example and problem-entry help dialog for eigenVec(...) [F8][F4] Vector Calculus: grad (expression, varList): Returns the rectangular Cartesian n- dimensional gradient of expression with respect to the n coordinate variables in varList. HGrad (): Example and problem-entry help dialog for grad(...). div (expressionList, varList): Returns the rectangular Cartesian n-dimensional divergence of the "vector" represented by expressionList with respect to the n coordinate variables in varList. HDiv (): Example and problem-entry help dialog for div(...). curl (expressionList, varList): Returns the 3D rectangular Cartesian curl of the "vector" represented by expressionList with respect to the coordinate variables in varList. HCurl (): Example and problem-entry help dialog for curl(...). potentl (expressionList, xVar, yVar, zVar, xo, yo, zo): Returns the scalar potential of the 3D rectangular Cartesian gradient represented by expressionList, with the potential = 0 at {x0, y0, z0}. Warning: Doesn't verify that expressionList IS a gradient, so first see if curl (expressionList, {xVar, yVar, zVar}) simplifies to {0,0,0}, as it should for a gradient. HPotentl (): Example and problem-entry help dialog for potentl(...). gradCyln (expression, rVar, thetaVar, zVar): Returns the gradient of the cylindrical-polar expression. divCylin (expressionList, rVar, thetaVar, zVar): Returns the divergence of the cylindrical-polar "vector" represented by expressionList. curlCyln (expressionList, rVar, thetaVar, zVar): Returns the curl of the cylindrical-polar "vector" represented by expressionList. potCylin (expressionList, rVar, thetaVar, zVar, ro, thetao, zo): Returns the scalar potential of the cylindrical-polar gradient represented by expressionList, with the potential 0 at {ro, thetao, zo}. Warning: Doesn't verify that expressionList IS a gradient, so first see if curlCyln (expressionList, rVar, thetaVar, zVar) simplifies to {0,0,0}, as it should for a gradient. gradSphr (expression, rVar, thetaVar, phiVar): Returns the gradient of spherical expression. thetaVar is measured "East" from the positive x axis toward the positive y axis, and phiVar is measured "South" from the positive z axis "North pole". (Beware that thetaVar and phiVar are defined differently in some textbooks.) divSpher (expressionList, rVar, thetaVar, phiVar): Returns the divergence of the spherical "vector" represented by expressionList. curlSphr (expressionList, rVar, thetaVar, phiVar): Returns the curl of the spherical "vector" represented by expressionList. potSpher (expressionList, rVar, thetaVar, phiVar, ro, thetao, phio): Returns the scalar potential of the cylindrical- polar gradient represented by expressionList, with potential 0 at {ro, thetao, phio}. Warning: Doesn't verify that expressionList IS a gradient, so first see if curlSphr (expressionList, rVar, thetaVar, phiVar) simplifies to {0,0,0}, as it should for a gradient. [F8][F5] Special Functions: normal (number, mean, standardDeviation): Returns the approximate numeric cumulative normal probability distribution for number, with the indicated mean and standardDeviation. erf (number): Returns the approximate numeric error function of number. erfc (number): Returns the approximate complementary error function of number. gamma (complexNumber): Returns the approximate gamma function of complexNumber. chebyT (n, expression): Returns the nth Chebyshev polynomial of the 1st kind, evaluated at expression, where n is a non- negative integer. 2. HOW TO TRANSMIT ONE OF THE FOLDERS FROM A COMPUTER OR ANOTHER TI-92: After it is installed on a TI-92: units consumes about 8000 bytes. Installation of its toolbar and conversion factors requires about 7000 additional bytes. elem consumes about 13,000 bytes. Installation of its toolbar requires about 2000 additional bytes. adv consumes about 36,000 bytes. Installation of its toolbar requires about 5000 additional bytes. It is possible to transmit all three folders to a freshly reset TI-92, but there will be less than 7000 to 12000 bytes of Memory Free, depending upon which of the three toolbars is installed at any particular time. This is enough for superficial evaluation of the three folders, but not enough for most general purposes. Thus in the long term you will probably want to keep at most two of the folders on your unit simultaneously. Moreover, with adv\, you should not load either of the other two when you are also interested in running geometry, which requires a minimum of about 25,000 bytes of Memory Free. Before transmitting a folder, make sure that there are no spurious variables in the folder, and make sure that all of the functions and programs are locked. To work correctly, you must load into folders named unit, elem, and adv. Therefore: a) When transmitting between TI-92s, on the var-link screen of the TI-92 that will send the folder, CHECK THE FOLDER NAME rather than only the individual variables in that folder; or b) When transmitting from a computer to a TI-92 using TI-graph Link, make sure the RETAIN FOLDER box is checked. 3. HOW TO INSTALL OR RE-INSTALL A FOLDER: IT IS IMPORTANT THAT YOU ALWAYS AVOID MAKING ANY OF THESE THREE FOLDERS THE CURRENT FOLDER: If you attempt to invoke their functions or programs while any of these folders is current: a) many of the functions return an error string, and b) many of the programs display an error dialog. The reason for this design is that you are expected and encouraged to pass along these folders and this documentation to other people. Therefore, to help ensure that the folders are complete, free of superfluous variables, and consistent with this documentation, the functions and programs are designed to discourage you from connecting to their folders. This reduces the chance of unintentionally deleting any of their variables, and it reduces the chance of contaminating the folder with superfluous variables via STO, Define, etc. After receiving a folder: a) Make sure that none of these three folders is the current folder. b) For the unit folder, make current the folder in which you want the unit-conversion factors stored: For example, the main folder. c) From the home screen, press [2nd]var-link. d) highlight the program in that folder whose name starts with the prefix "about". e) press [ENTER] to insert that word and a left parenthesis on the entry line. f) Type the matching right parenthesis. g) Press [ENTER]. This should start the about...() program, which gives directions for the rest of the installation process. This process includes initializing or updating a variable called cstfldrs in the main folder, then locking that variable and installing the toolbar for the folder. DON'T MODIFY, UNLOCK, OR DELETE main\cstfldrs. The presence and correctness of main\custfldrs is crucial to the operation of the folders. For the unit folder, the installation process also locks some important matrices and sets up conversions to output units that you select from menus. Each about...() program indicates how many vars were originally in the folder. It is wise to check that against the var-link screen to help determine if you have received a subset or a copy that includes superfluous variables. 4. HOW TO USE THE FOLDERS: Each folder has four layers: The lowest auxiliary layer is a set of (perhaps shared) functions, subroutines, and matrices that are not listed on the custom toolbars. These vars are not intended for direct use by users. You can of course directly use these undocumented vars if you wish, but are probably of interest only to programmers. The next layer for the adv and elem folders is a set of user-level functions that each take input arguments and return a result for a common math application. This layer also includes a few programs where graphing or other necessary side effects preclude the full modularity of a function Members of the user-level layer can be invoked directly from the author line, or you can write programs and scripts that use them. The next layer is a set of help-dialog subroutines for the user-level functions and subroutines. They all take no arguments. Their naming convention is the prefix letter "h" followed by the first up to seven characters of the corresponding function or subroutine name that they help. Typically, the dialog states the purpose of the associated function or subroutine, then prompts for the desired values of its arguments. Default values provide an illustrative example, and it is wise to accept these defaults the first time to see what happens with a well-chosen example. The help subroutine then typically displays the associated function invocation and the corresponding result on the PrgmIO screen and/or graphs the result. To facilitate transferring the entry and result to the home screen for editing and/or scrollable inspection, the entry is typically assigned to the current-folder global variable named "entered", and the result is typically assigned to the current-folder global variable named "answer". This help layer provides the on-line documentation for the library, and it also serves as a convenient way to use the library without having to remember the roles of the function arguments and returned result. The top layer is a custom toolbar. The unit toolbar provides a convenient way to insert supported and correctly abbreviated unit names on the entry line. The elem and adv toolbars provide a convenient way to insert help-subroutine invocations or function templates on the entry line. On each drop-down menu, an indented template for a help subroutine often follows the corresponding function-invocation template. In a few cases there is only a help subroutine, because it generates a direct invocation of a built-in function. On the toolbar, only Prgms and built-in commands begin with a capital letter. Similar to the [2ND] CATALOG status line, the function templates include arguments that are words suggesting their roles. You should overwrite each such word with your desired argument. 5. HOW TO PURGE OR SWITCH CUSTOM TOOLBARS: Under the [F1]Misc button, each toolbar provides a SetCustm() entry. This program allows you to purge the current custom toolbar, which frees some memory. SetCustm() also permits you to switch directly to other custom toolbars: The program looks in the main folder for a variable named cstFldrs whose value is a list of folder names. In each of these folders it looks for a Prgm whose name starts with the prefix "Cstm" and ends with the folder name. For example, unit contains a program named CstmUnit(), elem contains a program named CstmElem(), and adv contains a program named CstmAdv(). SetCustm() then offers a dropdown menu choice between the alternatives that it found. If you choose "none", SetCustm() purges the current custom toolbar, if any. Otherwise SetCustm() runs the selected program, which installs the corresponding custom menu. (If you are a programming enthusiast, You can inspect one of the about...() programs and its helpers to see how to add your own Cstm...() programs to additional folders, and how to make your about...() program install them in the cstFldrs list in the main folder.) 6. DEBRIS As much as possible, the library avoids storing into global variables. However, previous sections explain how most of the help programs necessarily store into main-folder global variables named entered and answer. Also, some of the plotting programs necessarily store into current-folder variables named beginning with the prefix delMe, standing for "Delete Me". Such global values are of transient interest only, so you should delete them as soon as they are no longer of interest. If running any of the programs in elem or adv stores into any other global variable, it is a bug caused by forgetting to declare a variable local to a subroutine. Please report it on the form at the end of this documentation. Installation of units\ necessarily generates numerous variables in the current folder. These unit variables store computed conversion formulas to your chosen output units. When you are through using units for awhile, you can save significant space and distracting var-link clutter by deleting these variables. For this purpose, make current the folder having these variables, then use the ClrUnits() program listed in the unit toolbar. ClrUnits() knows exactly which variables to delete, and does so. 7. HOW TO PRUNE FOLDERS: It is wise to use the unmodified folders for awhile to become familiar with their capabilities. Many of you will be content to leave them as is indefinitely. THIS SECTION IS INTENDED ONLY FOR PROGRAMMING ENTHUSIASTS who want to prune or alter folders. The data for the unit conversions is stored in program cstmUnit() and in matrices. Inspection of those in the Program and Data/Matrix editors should make it clear how to add units or to delete unneeded units to save memory. Some of you will not want all of the capabilities in the elem\ or adv\ folders, and you can safely delete many of the items after they are loaded. The custom toolbars can help guide you in choosing deletions. You can safely delete any of the help-dialog Prgms. Collectively, they account for the most memory in the adv and elem folders. After you become familiar with a frequently-used user-level function or program, its custom-toolbar template might be sufficient to remind you how to use it. You can also safely delete any of the user-level functions or programs on the toolbar that aren't directly or indirectly invoked by others that you want to save. The same is true of auxiliary functions and subroutines not on the toolbar, but they are more likely to be widely used by other functions and programs in the folder. In particular, the about...() Prgms should not be deleted and the following user- level or auxiliary vars that occur in either or both elem\ and adv\ are widely used, so it is unwise to delete them: ChkDelVr, ClrGr, ClrGrSpl, DspEnAn2, DspEnAns, fChk..., grad, intDpLim, isMember, Pchk..., polyCoef, substN, tryShade, zeroSiml. For example, in the elem folder you could delete all of the toolbar number, graphics or statistics items. You could also delete all of the set applications except for isMember(). Similarly in the adv folder you could delete all of the toolbar derivative-applications, integral-applications, ODE, infinite-series, sequence, matrix, or special-functions. You could also delete all of the vector-calculus items except for grad(). If you do prune, you might want to edit CstmElem(), CstmAdv() or CstmUnit() to comment out or delete menu titles and/or items for deleted functions and programs. You can also entirely delete any of these three programs, but that makes the folders significantly harder to use. If you do make any changes to a folder, please don't forget to comment them with your name. For mere pruning, it is sufficient to add the line text "Modified by ..." after the EndDlog line in Prgm about...(). If you also change any other var, insert the comment "Modified by ..." near the beginning of its definition. Similarly if you insert a new var, insert the comment "Added by ..." near the beginning of its definition.