ELEM.92G implements pre-calculus mathematics 
capabilities such as solution of simultaneous nonlinear 
equations, general regression, contour plots and plots of 
implicitly-defined functions.


                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.


