home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume24 / gnucalc / part39 < prev    next >
Text File  |  1991-10-31  |  57KB  |  1,344 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i087:  gnucalc - GNU Emacs Calculator, v2.00, Part39/56
  4. Message-ID: <1991Oct31.214712.2839@sparky.imd.sterling.com>
  5. X-Md4-Signature: 9b416ed166b003463af7e0476aa6901b
  6. Date: Thu, 31 Oct 1991 21:47:12 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 87
  11. Archive-name: gnucalc/part39
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 39; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. (@pxref{Selecting Subformulas}).  Use matrix mode when operating on
  38. your formula normally; then, to apply scalar mode to a certain part
  39. of the formula without affecting the rest just select that part,
  40. change into scalar mode and press @kbd{=} to resimplify the part
  41. under this mode, then change back to matrix mode before deselecting.
  42. X
  43. @node Automatic Recomputation, Working Message, Matrix Mode, Calculation Modes
  44. @subsection Automatic Recomputation
  45. X
  46. @noindent
  47. The @dfn{evaluates-to} operator, @samp{=>}, has the special
  48. property that any @samp{=>} formulas on the stack are recomputed
  49. whenever variable values or mode settings that might affect them
  50. are changed.  @xref{Evaluates-To Operator}.
  51. X
  52. @kindex m C
  53. @pindex calc-auto-recompute
  54. The @kbd{m C} (@code{calc-auto-recompute}) command turns this
  55. automatic recomputation on and off.  If you turn it off, Calc will
  56. not update @samp{=>} operators on the stack (nor those in the
  57. attached Embedded Mode buffer, if there is one).  They will not
  58. be updated unless you explicitly do so by pressing @kbd{=} or until
  59. you press @kbd{m C} to turn recomputation back on.  (While automatic
  60. recomputation is off, you can think of @kbd{m C m C} as a command
  61. to update all @samp{=>} operators while leaving recomputation off.)
  62. X
  63. To update @samp{=>} operators in an Embedded buffer while
  64. automatic recomputation is off, use @kbd{M-# u}.
  65. @xref{Embedded Mode}.
  66. X
  67. @node Working Message, , Automatic Recomputation, Calculation Modes
  68. @subsection Working Messages
  69. X
  70. @noindent
  71. @cindex Performance
  72. @cindex Working messages
  73. Since the Calculator is written entirely in Emacs Lisp, which is not
  74. designed for heavy numerical work, many operations are quite slow.
  75. The Calculator normally displays the message @samp{Working...} in the
  76. echo area during any command that may be slow.  In addition, iterative
  77. operations such as square roots and trigonometric functions display the
  78. intermediate result at each step.  Both of these types of messages can
  79. be disabled if you find them distracting.
  80. X
  81. @kindex m w
  82. @pindex calc-working
  83. Type @kbd{m w} (@code{calc-working}) with a numeric prefix of 0 to
  84. disable all ``working'' messages.  Use a numeric prefix of 1 to enable
  85. only the plain @samp{Working...} message.  Use a numeric prefix of 2 to
  86. see intermediate results as well.  With no numeric prefix this displays
  87. the current mode.@refill
  88. X
  89. @node Simplification Modes, Declarations, Calculation Modes, Mode Settings
  90. @section Simplification Modes
  91. X
  92. @noindent
  93. The current @dfn{simplification mode} controls how numbers and formulas
  94. are ``normalized'' when being taken from or pushed onto the stack.
  95. Some normalizations are unavoidable, such as rounding floating-point
  96. results to the current precision, and reducing fractions to simplest
  97. form.  Others, such as simplifying a formula like @cite{a+a} (or @cite{2+3}),
  98. are done by default but can be turned off when necessary.
  99. X
  100. When you press a key like @kbd{+} when @cite{2} and @cite{3} are on the
  101. stack, Calc pops these numbers, normalizes them, creates the formula
  102. @cite{2+3}, normalizes it, and pushes the result.  Of course the standard
  103. rules for normalizing @cite{2+3} will produce the result @cite{5}.
  104. X
  105. Simplification mode commands consist of the lower-case @kbd{m} prefix key
  106. followed by a shifted letter.
  107. X
  108. @kindex m O
  109. @pindex calc-no-simplify-mode
  110. The @kbd{m O} (@code{calc-no-simplify-mode}) command turns off all optional
  111. simplifications.  These would leave a formula like @cite{2+3} alone.  In
  112. fact, nothing except simple numbers are ever affected by normalization
  113. in this mode.
  114. X
  115. @kindex m N
  116. @pindex calc-num-simplify-mode
  117. The @kbd{m N} (@code{calc-num-simplify-mode}) command turns off simplification
  118. of any formulas except those for which all arguments are constants.  For
  119. example, @cite{1+2} is simplified to @cite{3}, and @cite{a+(2-2)} is
  120. simplified to @cite{a+0} but no further, since one argument of the sum
  121. is not a constant.  Unfortunately, @cite{(a+2)-2} is @emph{not} simplified
  122. because the top-level @samp{-} operator's arguments are not both
  123. constant numbers (one of them is the formula @samp{a+2}).
  124. A constant is a number or other numeric object (such as a constant
  125. error form or modulo form), or a vector all of whose
  126. elements are constant.@refill
  127. X
  128. @kindex m D
  129. @pindex calc-default-simplify-mode
  130. The @kbd{m D} (@code{calc-default-simplify-mode}) command restores the
  131. default simplifications for all formulas.  This includes some easy and
  132. fast simplifications such as @cite{a+0} to @cite{a}, and @cite{a + 2 a}
  133. to @cite{3 a}.
  134. X
  135. @kindex m B
  136. @pindex calc-bin-simplify-mode
  137. The @kbd{m B} (@code{calc-bin-simplify-mode}) mode applies the default
  138. simplifications to a result and then, if the result is an integer,
  139. uses the @kbd{b c} (@code{calc-clip}) command to clip the integer according
  140. to the current binary word size.  @xref{Binary Functions}.  Real numbers
  141. are rounded to the nearest integer and then clipped; other kinds of
  142. results (after the default simplifications) are left alone.
  143. X
  144. @kindex m A
  145. @pindex calc-alg-simplify-mode
  146. The @kbd{m A} (@code{calc-alg-simplify-mode}) mode does algebraic
  147. simplification; it applies all the default simplifications, and also
  148. the more powerful (and slower) simplifications made by @kbd{a s}
  149. (@code{calc-simplify}).  @xref{Algebra}.
  150. X
  151. @kindex m E
  152. @pindex calc-ext-simplify-mode
  153. The @kbd{m E} (@code{calc-ext-simplify-mode}) mode does ``extended''
  154. algebraic simplification, as by the @kbd{a e} (@code{calc-simplify-extended})
  155. command.  @xref{Algebra}.
  156. X
  157. @kindex m U
  158. @pindex calc-units-simplify-mode
  159. The @kbd{m U} (@code{calc-units-simplify-mode}) mode does units
  160. simplification; it applies the command @kbd{u s}
  161. (@code{calc-simplify-units}), which in turn
  162. is a superset of @code{calc-simplify}.  In this mode, variable names
  163. which are identifiable as unit names (like @samp{mm} for ``millimeters'')
  164. are simplified with their unit definitions in mind.@refill
  165. X
  166. A common technique is to set the simplification mode down to the lowest
  167. amount of simplification you will allow to be applied automatically, then
  168. use manual commands like @code{calc-clean} or @code{calc-simplify} to
  169. perform higher types of simplifications on demand.  @xref{Algebraic
  170. Definitions}, for another sample use of no-simplification mode.@refill
  171. X
  172. @node Declarations, Display Modes, Simplification Modes, Mode Settings
  173. @section Declarations
  174. X
  175. @noindent
  176. A @dfn{declaration} is a statement you make that promises you will
  177. use a certain variable or function in a restricted way.  This may
  178. give Calc the freedom to do things that it couldn't do if it had to
  179. take the fully general situation into account.
  180. X
  181. @menu
  182. * Declaration Basics::
  183. * Kinds of Declarations::
  184. * Functions for Declarations::
  185. @end menu
  186. X
  187. @node Declaration Basics, Kinds of Declarations, Declarations, Declarations
  188. @subsection Declaration Basics
  189. X
  190. @noindent
  191. @kindex s d
  192. @pindex calc-declare-variable
  193. The @kbd{s d} (@code{calc-declare-variable}) command is the easiest
  194. way to make a declaration for a variable.  This command prompts for
  195. the variable name, then prompts for the declaration.  The default
  196. at the declaration prompt is the previous declaration, if any.
  197. You can edit this declaration, or press @kbd{C-k} to erase it and
  198. type a new declaration.  (Or, erase it and press @key{RET} to clear
  199. the declaration, effectively ``undeclaring'' the variable.)
  200. X
  201. A declaration is in general a vector of @dfn{type symbols} and
  202. @dfn{range} values.  If there is only one type symbol or range value,
  203. you can write it directly rather than enclosing it in a vector.
  204. For example, @kbd{s d foo RET real RET} declares @code{foo} to
  205. be a real number, and @kbd{s d bar RET [int, const, [1..6]] RET}
  206. declares @code{bar} to be an integer constant between 1 and 6.
  207. (Actually, you can omit the outermost brackets and Calc will
  208. provide them for you: @kbd{s d bar RET int, const, [1..6] RET}.)
  209. X
  210. @cindex @code{Decls} variable
  211. @vindex Decls
  212. Declarations in Calc are kept in a special variable called @code{Decls}.
  213. This variable encodes the set of all outstanding declarations in
  214. the form of a matrix.  Each row has two elements:  A variable or
  215. vector of variables declared by that row, and the declaration
  216. specifier as described above.  You can use the @kbd{s D} command to
  217. edit this variable if you wish to see all the declarations at once.
  218. @xref{Operations on Variables}, for a description of this command
  219. and the @kbd{s p} command that allows you to save your declarations
  220. permanently if you wish.
  221. X
  222. Items being declared can also be function calls.  The arguments in
  223. the call are ignored; the effect is to say that this function returns
  224. values of the declared type for any valid arguments.  The @kbd{s d}
  225. command declares only variables, so if you wish to make a function
  226. declaration you will have to edit the @code{Decls} matrix yourself.
  227. X
  228. For example, the declaration matrix
  229. X
  230. @group
  231. @smallexample
  232. [ [ foo,       real       ]
  233. X  [ [j, k, n], int        ]
  234. X  [ f(1,2,3),  [0 .. inf) ] ]
  235. @end smallexample
  236. @end group
  237. X
  238. @noindent
  239. declares that @code{foo} represents a real number, @code{j}, @code{k}
  240. and @code{n} represent integers, and the function @code{f} always
  241. returns a real number in the interval shown.
  242. X
  243. @vindex All
  244. If there is a declaration for the variable @code{All}, then that
  245. declaration applies to all variables that are not otherwise declared.
  246. It does not apply to function names.  For example, using the row
  247. @samp{[All, real]} says that all your variables are real unless they
  248. are explicitly declared without @code{real} in some other row.
  249. The @kbd{s d} command declares @code{All} if you give a blank
  250. response to the variable-name prompt.
  251. X
  252. @node Kinds of Declarations, Functions for Declarations, Declaration Basics, Declarations
  253. @subsection Kinds of Declarations
  254. X
  255. @noindent
  256. The type-specifier part of a declaration (that is, the second prompt
  257. in the @kbd{s d} command) can be a type symbol, an interval, or a
  258. vector consisting of zero or more type symbols followed by zero or
  259. more intervals or numbers that represent the set of possible values
  260. for the variable.
  261. X
  262. @group
  263. @smallexample
  264. [ [ a, [1, 2, 3, 4, 5] ]
  265. X  [ b, [1 .. 5]        ]
  266. X  [ c, [int, 1 .. 5]   ] ]
  267. @end smallexample
  268. @end group
  269. X
  270. Here @code{a} is declared to contain one of the five integers shown;
  271. @code{b} is any number in the interval from 1 to 5 (any real number
  272. since we haven't specified), and @code{c} is any integer in that
  273. interval.  Thus the declarations for @code{a} and @code{c} are
  274. nearly equivalent (see below).
  275. X
  276. The type-specifier can be the empty vector @samp{[]} to say that
  277. nothing is known about a given variable's value.  This is the same
  278. as not declaring the variable at all except that it overrides any
  279. @code{All} declaration which would otherwise apply.
  280. X
  281. The initial value of @code{Decls} is the empty vector @samp{[]}.
  282. If @code{Decls} has no stored value or if the value stored in it
  283. is not valid, it is ignored and there are no declarations as far
  284. as Calc is concerned.  (The @kbd{s d} command will replace such a
  285. malformed value with a fresh empty matrix, @samp{[]}, before recording
  286. the new declaration.)  Unrecognized type symbols are ignored.
  287. X
  288. The following type symbols are recognized to describe what sorts of
  289. numbers will be stored in a variable:
  290. X
  291. @table @code
  292. @item int
  293. Integers.
  294. @item numint
  295. Numerical integers.  (Integers or integer-valued floats.)
  296. @item frac
  297. Fractions.  (Rational numbers which are not integers.)
  298. @item rat
  299. Rational numbers.  (Either integers or fractions.)
  300. @item float
  301. Floating-point numbers.
  302. @item real
  303. Real numbers.  (Integers, fractions, or floats.  Actually,
  304. intervals and error forms with real components also count as
  305. reals here.)
  306. @item pos
  307. Positive real numbers.  (Strictly greater than zero.)
  308. @item nonneg
  309. Nonnegative real numbers.  (Greater than or equal to zero.)
  310. @item number
  311. Numbers.  (Real or complex.)
  312. @end table
  313. X
  314. Calc uses this information to determine when certain simplifications
  315. of formulas are safe.  For example, @samp{(x^y)^z} can not be
  316. simplified to @samp{x^(y z)} in general; for example,
  317. @samp{((-3)^2)^1:2} is 3, but @samp{(-3)^(2*1:2) = (-3)^1} is @i{-3}.
  318. However, this simplification @emph{is} safe if @code{z} is known
  319. to be an integer, or if @code{x} is known to be a nonnegative
  320. real number.  If you have given declarations that allow Calc to
  321. deduce either of these facts, Calc will perform this simplification
  322. of the formula.
  323. X
  324. Calc can apply a certain amount of logic when using declarations.
  325. For example, @samp{(x^y)^(2n+1)} will be simplified if @code{n}
  326. has been declared @code{int}; Calc knows that an integer times an
  327. integer, plus an integer, must always be an integer.  (In fact,
  328. Calc would simplify @samp{(-x)^(2n+1)} to @samp{-(x^(2n+1))} since
  329. it is able to determine that @samp{2n+1} must be an odd integer.)
  330. X
  331. Similarly, @samp{(abs(x)^y)^z} will be simplified to @samp{abs(x)^(y z)}
  332. because Calc knows that the @code{abs} function always returns a
  333. nonnegative real.  If you had a @code{myabs} function that also had
  334. this property, you could get Calc to recognize it by adding the row
  335. @samp{[myabs(), nonneg]} to the @code{Decls} matrix.
  336. X
  337. One instance of this simplification is @samp{sqrt(x^2)} (since the
  338. @code{sqrt} function is effectively a one-half power).  Normally
  339. Calc leaves this formula alone.  After the command
  340. @kbd{s d x RET real RET}, however, it can simplify the formula to
  341. @samp{abs(x)}.  And after @kbd{s d x RET nonneg RET}, Calc can
  342. simplify this formula all the way to @samp{x}.
  343. X
  344. If there are any intervals or real numbers in the type specifier,
  345. they comprise the set of possible values that the variable or
  346. function being declared can have.  In particular, the type symbol
  347. @code{real} is effectively the same as the range @samp{[-inf .. inf]}
  348. (note that infinity is included in the range of possible values);
  349. @code{pos} is the same as @samp{(0 .. inf]}, and @code{nonneg} is
  350. the same as @samp{[0 .. inf]}.  Saying @samp{[real, [-5 .. 5]]} is
  351. redundant because the fact that the variable is real can be
  352. deduced just from the interval, but @samp{[int, [-5 .. 5]]} and
  353. @samp{[rat, [-5 .. 5]]} are useful combinations.
  354. X
  355. Note that the vector of intervals or numbers is in the same format
  356. used by Calc's set-manipulation commands.  @xref{Set Operations}.
  357. X
  358. The type specifier @samp{[1, 2, 3]} is equivalent to
  359. @samp{[numint, 1, 2, 3]}, @emph{not} to @samp{[int, 1, 2, 3]}.
  360. In other words, the range of possible values means only that
  361. the variable's value must be numerically equal to a number in
  362. that range, but not that it must be equal in type as well.
  363. Calc's set operations act the same way; @samp{in(2, [1., 2., 3.])}
  364. and @samp{in(1.5, [1:2, 3:2, 5:2])} both report ``true.''
  365. X
  366. If you use a conflicting combination of type specifiers, the
  367. results are unpredictable.  An example is @samp{[pos, [0 .. 5]]},
  368. where the interval does not lie in the range described by the
  369. type symbol.
  370. X
  371. ``Real'' declarations mostly affect simplifications involving powers
  372. like the one described above.  Another case where they are used
  373. is in the @kbd{a P} command which returns a list of all roots of a
  374. polynomial; if the variable has been declared real, only the real
  375. roots (if any) will be included in the list.
  376. X
  377. ``Integer'' declarations are used for simplifications which are valid
  378. only when certain values are integers (such as @samp{(x^y)^z}
  379. shown above).
  380. X
  381. Another command that makes use of declarations is @kbd{a s}, when
  382. simplifying equations and inequalities.  It will cancel @code{x}
  383. from both sides of @samp{a x = b x} only if it is sure @code{x}
  384. is non-zero, say, because it has a @code{pos} declaration.
  385. To declare specifically that @code{x} is real and non-zero,
  386. use @samp{[[-inf .. 0), (0 .. inf]]}.  (There is no way in the
  387. current notation to say that @code{x} is nonzero but not necessarily
  388. real.)  The @kbd{a e} command does ``unsafe'' simplifications,
  389. including cancelling @samp{x} from the equation when @samp{x} is
  390. not known to be nonzero.
  391. X
  392. Another set of type symbols distinguish between scalars and vectors.
  393. X
  394. @table @code
  395. @item scalar
  396. The value is not a vector.
  397. @item vector
  398. The value is a vector.
  399. @item matrix
  400. The value is a matrix (a rectangular vector of vectors).
  401. @end table
  402. X
  403. These type symbols can be combined with the other type symbols
  404. described above; @samp{[int, matrix]} describes an object which
  405. is a matrix of integers.
  406. X
  407. Scalar/vector declarations are used to determine whether certain
  408. algebraic operations are safe.  For example, @samp{[a, b, c] + x}
  409. is normally not simplified to @samp{[a + x, b + x, c + x]}, but
  410. it will be if @code{x} has been declared @code{scalar}.  On the
  411. other hand, multiplication is usually assumed to be commutative,
  412. but the terms in @samp{x y} will never be exchanged if both @code{x}
  413. and @code{y} are known to be vectors or matrices.  (Calc currently
  414. never distinguishes between @code{vector} and @code{matrix}
  415. declarations.)
  416. X
  417. @xref{Matrix Mode}, for a discussion of ``matrix mode'' and
  418. ``scalar mode,'' which are similar to declaring @samp{[All, matrix]}
  419. or @samp{[All, scalar]} but much more convenient.
  420. X
  421. One more type symbol that is recognized is used with the @kbd{H a d}
  422. command for taking total derivatives of a formula.  @xref{Calculus}.
  423. X
  424. @table @code
  425. @item const
  426. The value is a constant with respect to other variables.
  427. @end table
  428. X
  429. Calc does not check the declarations for a variable when you store
  430. a value in it.  However, storing @i{-3.5} in a variable that has
  431. been declared @code{pos}, @code{int}, or @code{matrix} may have
  432. unexpected effects; Calc may evaluate @samp{sqrt(x^2)} to @cite{3.5}
  433. if it substitutes the value first, or to @cite{-3.5} if @code{x}
  434. was declared @code{pos} and the formula @samp{sqrt(x^2)} is
  435. simplified to @samp{x} before the value is substituted.  Before
  436. using a variable for a new purpose, it is best to use @kbd{s d}
  437. or @kbd{s D} to check to make sure you don't still have an old
  438. declaration for the variable that will conflict with its new meaning.
  439. X
  440. @node Functions for Declarations, , Kinds of Declarations, Declarations
  441. @subsection Functions for Declarations
  442. X
  443. @noindent
  444. Calc has a set of functions for accessing the current declarations
  445. in a convenient manner.  These functions return 1 if the argument
  446. can be shown to have the specified property, or 0 if the argument
  447. can be shown @emph{not} to have that property; otherwise they are
  448. left unevaluated.  These functions are suitable for use with rewrite
  449. rules (@pxref{Conditional Rewrite Rules}) or programming constructs
  450. (@pxref{Conditionals in Macros}).  They can be entered only using
  451. algebraic notation.  @xref{Logical Operations}, for functions
  452. that perform other tests not related to declarations.
  453. X
  454. For example, @samp{dint(17)} returns 1 because 17 is an integer, as
  455. do @samp{dint(n)} and @samp{dint(2 n - 3)} if @code{n} has been declared
  456. @code{int}, but @samp{dint(2.5)} and @samp{dint(n + 0.5)} return 0.
  457. Calc consults knowledge of its own built-in functions as well as your
  458. own declarations: @samp{dint(floor(x))} returns 1.
  459. X
  460. @tindex dint
  461. @tindex dnumint
  462. @tindex dnatnum
  463. The @code{dint} function checks if its argument is an integer.
  464. The @code{dnatnum} function checks if its argument is a natural
  465. number, i.e., a nonnegative integer.  The @code{dnumint} function
  466. checks if its argument is numerically an integer, i.e., either an
  467. integer or an integer-valued float.  Note that these and the other
  468. data type functions also accept vectors or matrices composed of
  469. suitable elements, and that real infinities @samp{inf} and @samp{-inf}
  470. are considered to be integers for the purposes of these functions.
  471. X
  472. @tindex drat
  473. The @code{drat} function checks if its argument is rational, i.e.,
  474. an integer or fraction.  Infinities count as rational, but intervals
  475. and error forms do not.
  476. X
  477. @tindex dreal
  478. The @code{dreal} function checks if its argument is real.  This
  479. includes integers, fractions, floats, real error forms, and intervals.
  480. X
  481. @tindex dimag
  482. The @code{dimag} function checks if its argument is imaginary,
  483. i.e., is mathematically equal to a real number times @cite{i}.
  484. X
  485. @tindex dpos
  486. @tindex dneg
  487. @tindex dnonneg
  488. The @code{dpos} function checks for positive (but nonzero) reals.
  489. The @code{dneg} function checks for negative reals.  The @code{dnonneg}
  490. function checks for nonnegative reals, i.e., reals greater than or
  491. equal to zero.  Note that the @kbd{a s} command can simplify an
  492. expression like @cite{x > 0} to 1 or 0 using @code{dpos}, and that
  493. @kbd{a s} is effectively applied to all conditions in rewrite rules,
  494. so the actual functions @code{dpos}, @code{dneg}, and @code{dnonneg}
  495. are rarely necessary.
  496. X
  497. @tindex dnonzero
  498. The @code{dnonzero} function checks that its argument is nonzero.
  499. This includes all nonzero real or complex numbers, all intervals that
  500. do not include zero, all nonzero modulo forms, vectors all of whose
  501. elements are nonzero, and variables or formulas whose values can be
  502. deduced to be nonzero.  It does not include error forms, since they
  503. represent values which could be anything including zero.  (This is
  504. also the set of objects considered ``true'' in conditional contexts.)
  505. X
  506. @tindex deven
  507. @tindex dodd
  508. The @code{deven} function returns 1 if its argument is known to be
  509. an even integer (or integer-valued float); it returns 0 if its argument
  510. is known not to be even (because it is known to be odd or a non-integer).
  511. This is a convenient shorthand for using @kbd{a s} to simplify a test
  512. of the form @samp{x % 2 = 0}.  There is also an analogous @code{dodd}
  513. function.
  514. X
  515. @tindex drange
  516. The @code{drange} function returns a set (an interval or a vector
  517. of intervals and/or numbers; @pxref{Set Operations}) that describes
  518. the set of possible values of its argument.  If the argument is
  519. a variable or a function with a declaration, the range is copied
  520. from the declaration.  Otherwise, the possible signs of the
  521. expression are determined using a method similar to @code{dpos},
  522. etc., and a suitable set like @samp{[0 .. inf]} is returned.  If
  523. the expression is not provably real, the @code{drange} function
  524. remains unevaluated.
  525. X
  526. @tindex dscalar
  527. The @code{dscalar} function returns 1 if its argument is provably
  528. scalar, or 0 if its argument is provably non-scalar.  It is left
  529. unevaluated if this cannot be determined.  (If matrix mode or scalar
  530. mode are in effect, this function returns 1 or 0, respectively,
  531. if it has no other information.)  When Calc interprets a condition
  532. (say, in a rewrite rule) it considers an unevaluated formula to be
  533. ``false.''  Thus, @samp{dscalar(a)} is ``true'' only if @code{a} is
  534. provably scalar, and @samp{!dscalar(a)} is ``true'' only if @code{a}
  535. is provably non-scalar; both are ``false'' if there is insufficient
  536. information to tell.
  537. X
  538. @node Display Modes, Language Modes, Declarations, Mode Settings
  539. @section Display Modes
  540. X
  541. @noindent
  542. The commands in this section are two-key sequences beginning with the
  543. @kbd{d} prefix.  The @kbd{d l} (@code{calc-line-numbering}) and @kbd{d b}
  544. (@code{calc-line-breaking}) commands are described elsewhere;
  545. @pxref{Stack Basics} and @pxref{Normal Language Modes}, respectively.
  546. Display formats for vectors and matrices are also covered elsewhere;
  547. @pxref{Vector and Matrix Formats}.@refill
  548. X
  549. One thing all display modes have in common is their treatment of the
  550. @kbd{H} prefix.  This prefix causes any mode command that would normally
  551. refresh the stack to leave the stack display alone.  The word ``Dirty''
  552. will appear in the mode line when Calc thinks the stack display may not
  553. reflect the latest mode settings.
  554. X
  555. @kindex d RET
  556. @pindex calc-refresh-top
  557. The @kbd{d RET} (@code{calc-refresh-top}) command reformats the
  558. top stack entry according to all the current modes.  Positive prefix
  559. arguments reformat the top @var{n} entries; negative prefix arguments
  560. reformat the specified entry, and a prefix of zero is equivalent to
  561. @kbd{d SPC} (@code{calc-refresh}), which reformats the entire stack.
  562. For example, @kbd{H d s M-2 d RET} changes to scientific notation
  563. but reformats only the top two stack entries in the new mode.
  564. X
  565. The @kbd{I} prefix has another effect on the display modes.  The mode
  566. is set only temporarily; the top stack entry is reformatted according
  567. to that mode, then the original mode setting is restored.  In other
  568. words, @kbd{I d s} is equivalent to @kbd{H d s d RET H d @var{(old mode)}}.
  569. X
  570. @menu
  571. * Radix Modes::
  572. * Grouping Digits::
  573. * Float Formats::
  574. * Complex Formats::
  575. * Fraction Formats::
  576. * HMS Formats::
  577. * Date Formats::
  578. * Truncating the Stack::
  579. * Justification::
  580. * Labels::
  581. @end menu
  582. X
  583. @node Radix Modes, Grouping Digits, Display Modes, Display Modes
  584. @subsection Radix Modes
  585. X
  586. @noindent
  587. @cindex Radix display
  588. @cindex Non-decimal numbers
  589. @cindex Decimal and non-decimal numbers
  590. Calc normally displays numbers in decimal (@dfn{base-10} or @dfn{radix-10})
  591. notation.  Calc can actually display in any radix from two (binary) to 36.
  592. When the radix is above 10, the letters @samp{A} to @samp{Z} are used as
  593. digits.  When entering such a number, letter keys are interpreted as
  594. potential digits rather than terminating numeric entry mode.
  595. X
  596. @kindex d 2
  597. @kindex d 8
  598. @kindex d 6
  599. @kindex d 0
  600. @cindex Hexadecimal integers
  601. @cindex Octal integers
  602. The key sequences @kbd{d 2}, @kbd{d 8}, @kbd{d 6}, and @kbd{d 0} select
  603. binary, octal, hexadecimal, and decimal as the current display radix,
  604. respectively.  Numbers can always be entered in any radix, though the
  605. current radix is used as a default if you press @kbd{#} without any initial
  606. digits.  A number entered without a @kbd{#} is @emph{always} interpreted
  607. as decimal.@refill
  608. X
  609. @kindex d r
  610. @pindex calc-radix
  611. To set the radix generally, use @kbd{d r} (@code{calc-radix}) and enter
  612. an integer from 2 to 36.  You can specify the radix as a numeric prefix
  613. argument; otherwise you will be prompted for it.
  614. X
  615. @kindex d z
  616. @pindex calc-leading-zeros
  617. @cindex Leading zeros
  618. Integers normally are displayed with however many digits are necessary to
  619. represent the integer and no more.  The @kbd{d z} (@code{calc-leading-zeros})
  620. command causes integers to be padded out with leading zeros according to the
  621. current binary word size.  (@xref{Binary Functions}, for a discussion of
  622. word size.)  If the absolute value of the word size is @cite{w}, all integers
  623. are displayed with at least enough digits to represent @c{$2^w-1$}
  624. @cite{(2^w)-1} in the
  625. current radix.  (Larger integers will still be displayed in their entirety.)
  626. X
  627. @node Grouping Digits, Float Formats, Radix Modes, Display Modes
  628. @subsection Grouping Digits
  629. X
  630. @noindent
  631. @kindex d g
  632. @pindex calc-group-digits
  633. @cindex Grouping digits
  634. @cindex Digit grouping
  635. Long numbers can be hard to read if they have too many digits.  For
  636. example, the factorial of 30 is 33 digits long!  Press @kbd{d g}
  637. (@code{calc-group-digits}) to enable @dfn{grouping} mode, in which digits
  638. are displayed in clumps of 3 or 4 (depending on the current radix)
  639. separated by commas.
  640. X
  641. The @kbd{d g} command toggles grouping on and off.
  642. With a numerix prefix of 0, this command displays the current state of
  643. the grouping flag; with a @kbd{C-u} prefix, it pushes the grouping state
  644. onto the stack; with an argument of minus one it disables grouping; with
  645. a positive argument @cite{N} it enables grouping on every @cite{N}
  646. digits.  For floating-point numbers, grouping normally occurs only
  647. before the decimal point.  A negative prefix argument @cite{-N} enables
  648. grouping every @cite{N} digits both before and after the decimal point.@refill
  649. X
  650. @kindex d ,
  651. @pindex calc-group-char
  652. The @kbd{d ,} (@code{calc-group-char}) command allows you to choose any
  653. character as the grouping separator.  The default is the comma character.
  654. If you find it difficult to read vectors of large integers grouped with
  655. commas, you may wish to use spaces or some other character instead.
  656. This command takes the next character you type, whatever it is, and
  657. uses it as the digit separator.  As a special case, @kbd{d , \} selects
  658. @samp{\,} (@TeX{}'s thin-space symbol) as the digit separator.
  659. X
  660. Please note that grouped numbers will not generally be parsed correctly
  661. if re-read in textual form, say by the use of @kbd{M-# y} and @kbd{M-# g}.
  662. (@xref{Kill and Yank}, for details on these commands.)  One exception is
  663. the @samp{\,} separator, which doesn't interfere with parsing because it
  664. is ignored by @TeX{} language mode.
  665. X
  666. @node Float Formats, Complex Formats, Grouping Digits, Display Modes
  667. @subsection Float Formats
  668. X
  669. @noindent
  670. Floating-point quantities are normally displayed in standard decimal
  671. form, with scientific notation used if the exponent is especially high
  672. or low.  All significant digits are normally displayed.  The commands
  673. in this section allow you to choose among several alternative display
  674. formats for floats.
  675. X
  676. @kindex d n
  677. @pindex calc-normal-notation
  678. The @kbd{d n} (@code{calc-normal-notation}) command selects the normal
  679. display format.  All significant figures in a number are displayed.
  680. With a positive numeric prefix, numbers are rounded if necessary to
  681. that number of significant digits.  With a negative numerix prefix,
  682. the specified number of significant digits less than the current
  683. precision is used.  (Thus @kbd{C-u -2 d n} displays 10 digits if the
  684. current precision is 12.)
  685. X
  686. @kindex d f
  687. @pindex calc-fix-notation
  688. The @kbd{d f} (@code{calc-fix-notation}) command selects fixed-point
  689. notation.  The numeric argument is the number of digits after the
  690. decimal point, zero or more.  This format will relax into scientific
  691. notation if a nonzero number would otherwise have been rounded all the
  692. way to zero.  Specifying a negative number of digits is the same as
  693. for a positive number, except that small nonzero numbers will be rounded
  694. to zero rather than switching to scientific notation.
  695. X
  696. @kindex d s
  697. @pindex calc-sci-notation
  698. The @kbd{d s} (@code{calc-sci-notation}) command selects scientific
  699. notation.  A positive argument sets the number of significant figures
  700. displayed, of which one will be before and the rest after the decimal
  701. point.  A negative argument works the same as for @kbd{d n} format.
  702. The default is to display all significant digits.
  703. X
  704. @kindex d e
  705. @pindex calc-eng-notation
  706. The @kbd{d e} (@code{calc-eng-notation}) command selects engineering
  707. notation.  This is similar to scientific notation except that the
  708. exponent is rounded down to a multiple of three, with from one to three
  709. digits before the decimal point.  An optional numeric prefix sets the
  710. number of significant digits to display, as for @kbd{d s}.
  711. X
  712. It is important to distinguish between the current @emph{precision} and
  713. the current @emph{display format}.  After the commands @kbd{C-u 10 p}
  714. and @kbd{C-u 6 d n} the Calculator computes all results to ten
  715. significant figures but only displays six.  (In fact, intermediate
  716. calculations are often carried to one or two more significant figures,
  717. but values placed on the stack are always rounded down to ten figures.)
  718. Numbers are never actually rounded to the display precision for storage,
  719. except by commands like @kbd{C-k} and @kbd{M-# y} which operate on the
  720. actual displayed text in the Calculator buffer.
  721. X
  722. @kindex d .
  723. @pindex calc-point-char
  724. The @kbd{d .} (@code{calc-point-char}) command controls the character used
  725. as a decimal point.  Normally this is a period; users in some countries
  726. may wish to change this to a comma.  Note that this is only a display
  727. style; on entry, periods must always be used to denote floating-point
  728. numbers, and commas to separate elements in a list.
  729. X
  730. @node Complex Formats, Fraction Formats, Float Formats, Display Modes
  731. @subsection Complex Formats
  732. X
  733. @noindent
  734. @kindex d c
  735. @pindex calc-complex-notation
  736. There are three supported notations for complex numbers in rectangular
  737. form.  The default is as a pair of real numbers enclosed in parentheses
  738. and separated by a comma: @samp{(a,b)}.  The @kbd{d c}
  739. (@code{calc-complex-notation}) command selects this style.@refill
  740. X
  741. @kindex d i
  742. @pindex calc-i-notation
  743. @kindex d j
  744. @pindex calc-j-notation
  745. The other notations are @kbd{d i} (@code{calc-i-notation}), in which
  746. numbers are displayed in @samp{a+bi} form, and @kbd{d j}
  747. (@code{calc-j-notation}) which displays the form @samp{a+bj} preferred
  748. in some disciplines.@refill
  749. X
  750. @cindex @code{i} variable
  751. @vindex i
  752. Complex numbers are normally entered in @samp{(a,b)} format.
  753. If you enter @samp{2+3i} as an algebraic formula, it will be stored as
  754. the formula @samp{2 + 3 * i}.  However, if you use @kbd{=} to evaluate
  755. this formula and you have not changed the variable @samp{i}, the @samp{i}
  756. will be interpreted as @samp{(0,1)} and the formula will be simplified
  757. to @samp{(2,3)}.  Other commands (like @code{calc-sin}) will @emph{not}
  758. interpret the formula @samp{2 + 3 * i} as a complex number.
  759. @xref{Variables}, under ``special constants.''@refill
  760. X
  761. @node Fraction Formats, HMS Formats, Complex Formats, Display Modes
  762. @subsection Fraction Formats
  763. X
  764. @noindent
  765. @kindex d o
  766. @pindex calc-over-notation
  767. Display of fractional numbers is controlled by the @kbd{d o}
  768. (@code{calc-over-notation}) command.  By default, a number like
  769. eight thirds is displayed in the form @samp{8:3}.  The @kbd{d o} command
  770. prompts for a one- or two-character format.  If you give one character,
  771. that character is used as the fraction separator.  Common separators are
  772. @samp{:} and @samp{/}.  (During input of numbers, the @kbd{:} key must be
  773. used regardless of the display format; in particular, the @kbd{/} is used
  774. for RPN-style division, @emph{not} for entering fractions.)
  775. X
  776. If you give two characters, fractions use ``integer-plus-fractional-part''
  777. notation.  For example, the format @samp{+/} would display eight thirds
  778. as @samp{2+2/3}.  If two colons are present in a number being entered,
  779. the number is interpreted in this form.
  780. X
  781. It is also possible to follow the one- or two-character format with
  782. a number.  For example:  @samp{:10} or @samp{+/3}.  In this case,
  783. Calc adjusts all fractions that are displayed to have the specified
  784. denominator, if possible.  Otherwise it adjusts the denominator to
  785. be a multiple of the specified value.  For example, in @samp{:6} mode
  786. the fraction @cite{1:6} will be unaffected, but @cite{2:3} will be
  787. displayed as @cite{4:6}, @cite{1:2} will be displayed as @cite{3:6},
  788. and @cite{1:8} will be displayed as @cite{3:24}.  Integers are also
  789. affected by this mode:  3 is displayed as @cite{18:6}.  Note that the
  790. format @samp{:1} writes fractions the same as @samp{:}, but it writes
  791. integers as @cite{n:1}.
  792. X
  793. The fraction format does not affect the way fractions or integers are
  794. stored, only the way they appear on the screen.  The fraction format
  795. never affects floats.
  796. X
  797. @node HMS Formats, Date Formats, Fraction Formats, Display Modes
  798. @subsection HMS Formats
  799. X
  800. @noindent
  801. @kindex d h
  802. @pindex calc-hms-notation
  803. The @kbd{d h} (@code{calc-hms-notation}) command controls the display of
  804. HMS (hours-minutes-seconds) forms.  It prompts for a string which
  805. consists basically of an ``hours'' marker, optional punctuation, a
  806. ``minutes'' marker, more optional punctuation, and a ``seconds'' marker.
  807. Punctuation is zero or more spaces, commas, or semicolons.  The hours
  808. marker is one or more non-punctuation characters.  The minutes and
  809. seconds markers must be single non-punctuation characters.
  810. X
  811. The default HMS format is @samp{@@ ' "}, producing HMS values of the form
  812. @samp{23@@ 30' 15.75"}.  The format @samp{deg, ms} would display this same
  813. value as @samp{23deg, 30m15.75s}.  During numeric entry, the @kbd{h} or @kbd{o}
  814. keys are recognized as synonyms for @kbd{@@} regardless of display format.
  815. The @kbd{m} and @kbd{s} keys are recognized as synonyms for @kbd{'} and
  816. @kbd{"}, respectively, but only if an @kbd{@@} (or @kbd{h} or @kbd{o}) has
  817. already been typed; otherwise, they have their usual meanings
  818. (@kbd{m-} prefix and @kbd{s-} prefix).  Thus, @kbd{5 "}, @kbd{0 @@ 5 "}, and
  819. @kbd{0 h 5 s} are some of the ways to enter the quantity ``five seconds.''
  820. The @kbd{'} key is recognized as ``minutes'' only if @kbd{@@} (or @kbd{h} or
  821. @kbd{o}) has already been pressed; otherwise it means to switch to algebraic
  822. entry.
  823. X
  824. @node Date Formats, Truncating the Stack, HMS Formats, Display Modes
  825. @subsection Date Formats
  826. X
  827. @noindent
  828. @kindex d d
  829. @pindex calc-date-notation
  830. The @kbd{d d} (@code{calc-date-notation}) command controls the display
  831. of date forms (@pxref{Date Forms}).  It prompts for a string which
  832. contains letters that represent the various parts of a date and time.
  833. To show which parts should be omitted when the form represents a pure
  834. date with no time, parts of the string can be enclosed in @samp{< >}
  835. marks.  If you don't include @samp{< >} markers in the format, Calc
  836. guesses at which parts, if any, should be omitted when formatting
  837. pure dates.
  838. X
  839. The default format is:  @samp{<H:mm:SSpp >Www Mmm D, YYYY}.
  840. An example string in this format is @samp{3:32pm Wed Jan 9, 1991}.
  841. If you enter a blank format string, this default format is
  842. reestablished.
  843. X
  844. Calc uses @samp{< >} notation for nameless functions as well as for
  845. dates.  @xref{Specifying Operators}.  To avoid confusion with nameless
  846. functions, your date formats should avoid using the @samp{#} character.
  847. X
  848. @menu
  849. * Date Formatting Codes::
  850. * Free-Form Dates::
  851. * Standard Date Formats::
  852. @end menu
  853. X
  854. @node Date Formatting Codes, Free-Form Dates, Date Formats, Date Formats
  855. @subsubsection Date Formatting Codes
  856. X
  857. @noindent
  858. When displaying a date, the current date format is used.  All
  859. characters except for letters and @samp{<} and @samp{>} are
  860. copied literally when dates are formatted.  The portion between
  861. @samp{< >} markers is omitted for pure dates, or included for
  862. date/time forms.  Letters are interpreted according to the table
  863. below.
  864. X
  865. When dates are read in during algebraic entry, Calc first tries to
  866. match the input string to the current format either with or without
  867. the time part.  The punctuation characters (including spaces) must
  868. match exactly; letter fields must correspond to suitable text in
  869. the input.  If this doesn't work, Calc checks if the input is a
  870. simple number; if so, the number is interpreted as a number of days
  871. since Jan 1, 1 AD.  Otherwise, Calc tries a much more relaxed and
  872. flexible algorithm which is described in the next section.
  873. X
  874. Weekday names are ignored during reading.
  875. X
  876. Two-digit year numbers are interpreted as lying in the range
  877. from 1941 to 2039.  Years outside that range are always
  878. entered and displayed in full.  Year numbers with a leading
  879. @samp{+} sign are always interpreted exactly, allowing the
  880. entry and display of the years 1 through 99 AD.
  881. X
  882. Here is a complete list of the formatting codes for dates:
  883. X
  884. @table @asis
  885. @item Y
  886. Year:  ``91'' for 1991, ``7'' for 2007, ``+23'' for 23 AD.
  887. @item YY
  888. Year:  ``91'' for 1991, ``07'' for 2007, ``+23'' for 23 AD.
  889. @item BY
  890. Year:  ``91'' for 1991, `` 7'' for 2007, ``+23'' for 23 AD.
  891. @item YYY
  892. Year:  ``1991'' for 1991, ``23'' for 23 AD.
  893. @item YYYY
  894. Year:  ``1991'' for 1991, ``+23'' for 23 AD.
  895. @item aa
  896. Year:  ``ad'' or ``''.
  897. @item AA
  898. Year:  ``AD'' or ``''.
  899. @item aaa
  900. Year:  ``ad '' or ``''.  (Note trailing space.)
  901. @item AAA
  902. Year:  ``AD '' or ``''.
  903. @item aaaa
  904. Year:  ``a.d.'' or ``''.
  905. @item AAAA
  906. Year:  ``A.D.'' or ``''.
  907. @item bb
  908. Year:  ``bc'' or ``''.
  909. @item BB
  910. Year:  ``BC'' or ``''.
  911. @item bbb
  912. Year:  `` bc'' or ``''.  (Note leading space.)
  913. @item BBB
  914. Year:  `` BC'' or ``''.
  915. @item bbbb
  916. Year:  ``b.c.'' or ``''.
  917. @item BBBB
  918. Year:  ``B.C.'' or ``''.
  919. @item M
  920. Month:  ``8'' for August.
  921. @item MM
  922. Month:  ``08'' for August.
  923. @item BM
  924. Month:  `` 8'' for August.
  925. @item MMM
  926. Month:  ``AUG'' for August.
  927. @item Mmm
  928. Month:  ``Aug'' for August.
  929. @item MMMM
  930. Month:  ``AUGUST'' for August.
  931. @item Mmmm
  932. Month:  ``August'' for August.
  933. @item D
  934. Day:  ``7'' for 7th day of month.
  935. @item DD
  936. Day:  ``07'' for 7th day of month.
  937. @item BD
  938. Day:  `` 7'' for 7th day of month.
  939. @item W
  940. Weekday:  ``0'' for Sunday, ``6'' for Saturday.
  941. @item WWW
  942. Weekday:  ``SUN'' for Sunday.
  943. @item Www
  944. Weekday:  ``Sun'' for Sunday.
  945. @item WWWW
  946. Weekday:  ``SUNDAY'' for Sunday.
  947. @item Wwww
  948. Weekday:  ``Sunday'' for Sunday.
  949. @item d
  950. Day of year:  ``34'' for Feb. 3.
  951. @item ddd
  952. Day of year:  ``034'' for Feb. 3.
  953. @item bdd
  954. Day of year:  `` 34'' for Feb. 3.
  955. @item h
  956. Hour:  ``5'' for 5 AM; ``17'' for 5 PM.
  957. @item hh
  958. Hour:  ``05'' for 5 AM; ``17'' for 5 PM.
  959. @item bh
  960. Hour:  `` 5'' for 5 AM; ``17'' for 5 PM.
  961. @item H
  962. Hour:  ``5'' for 5 AM and 5 PM.
  963. @item HH
  964. Hour:  ``05'' for 5 AM and 5 PM.
  965. @item BH
  966. Hour:  `` 5'' for 5 AM and 5 PM.
  967. @item p
  968. AM/PM:  ``a'' or ``p''.
  969. @item P
  970. AM/PM:  ``A'' or ``P''.
  971. @item pp
  972. AM/PM:  ``am'' or ``pm''.
  973. @item PP
  974. AM/PM:  ``AM'' or ``PM''.
  975. @item pppp
  976. AM/PM:  ``a.m.'' or ``p.m.''.
  977. @item PPPP
  978. AM/PM:  ``A.M.'' or ``P.M.''.
  979. @item m
  980. Minutes:  ``7'' for 7.
  981. @item mm
  982. Minutes:  ``07'' for 7.
  983. @item bm
  984. Minutes:  `` 7'' for 7.
  985. @item s
  986. Seconds:  ``7'' for 7;  ``7.23'' for 7.23.
  987. @item ss
  988. Seconds:  ``07'' for 7;  ``07.23'' for 7.23.
  989. @item bs
  990. Seconds:  `` 7'' for 7;  `` 7.23'' for 7.23.
  991. @item SS
  992. Optional seconds:  ``07'' for 7;  blank for 0.
  993. @item BS
  994. Optional seconds:  `` 7'' for 7;  blank for 0.
  995. @item N
  996. Numeric date/time:  ``726842.25'' for 6:00am Wed Jan 9, 1991.
  997. @item n
  998. Numeric date:  ``726842'' for any time on Wed Jan 9, 1991.
  999. @item J
  1000. Julian date/time:  ``2448265.75'' for 6:00am Wed Jan 9, 1991.
  1001. @item j
  1002. Julian date:  ``2448266'' for any time on Wed Jan 9, 1991.
  1003. @item U
  1004. Unix time:  ``663400800'' for 6:00am Wed Jan 9, 1991.
  1005. @item X
  1006. Brackets suppression.  An ``X'' at the front of the format
  1007. causes the surrounding @samp{< >} delimiters to be omitted
  1008. when formatting dates.  Note that the brackets are still
  1009. required for algebraic entry.
  1010. @end table
  1011. X
  1012. If ``SS'' or ``BS'' (optional seconds) is preceded by a colon, the
  1013. colon is also omitted if the seconds part is zero.
  1014. X
  1015. If ``bb,'' ``bbb'' or ``bbbb'' or their upper-case equivalents
  1016. appear in the format, then negative year numbers are displayed
  1017. without a minus sign.  Note that ``aa'' and ``bb'' are mutually
  1018. exclusive.  Some typical usages would be @samp{YYYY AABB};
  1019. @samp{AAAYYYYBBB}; @samp{YYYYBBB}.
  1020. X
  1021. The formats ``YY,'' ``YYYY,'' ``MM,'' ``DD,'' ``ddd,'' ``hh,'' ``HH,''
  1022. ``mm,'' ``ss,'' and ``SS'' actually match any number of digits during
  1023. reading unless several of them are strung together with no punctuation
  1024. in between, in which case the input must have exactly as many digits as
  1025. there are letters in the format.
  1026. X
  1027. The ``j,'' ``J,'' and ``U'' formats do not make any time zone
  1028. adjustment.  They effectively use @samp{julian(x,0)} and
  1029. @samp{unixtime(x,0)} to make the conversion; @pxref{Date Arithmetic}.
  1030. X
  1031. @node Free-Form Dates, Standard Date Formats, Date Formatting Codes, Date Formats
  1032. @subsubsection Free-Form Dates
  1033. X
  1034. @noindent
  1035. When reading a date form during algebraic entry, Calc falls back
  1036. on the algorithm described here if the input does not exactly
  1037. match the current date format.  This algorithm generally
  1038. ``does the right thing'' and you don't have to worry about it,
  1039. but it is described here in full detail for the curious.
  1040. X
  1041. Calc does not distinguish between upper- and lower-case letters
  1042. while interpreting dates.
  1043. X
  1044. First, the time portion, if present, is located somewhere in the
  1045. text and then removed.  The remaining text is then interpreted as
  1046. the date.
  1047. X
  1048. A time is of the form @samp{hh:mm:ss}, possibly with the seconds
  1049. part omitted and possibly with an AM/PM indicator added to indicate
  1050. 12-hour time.  If the AM/PM is present, the minutes may also be
  1051. omitted.  The AM/PM part may be any of the words @samp{am},
  1052. @samp{pm}, @samp{noon}, or @samp{midnight}; each of these may be
  1053. abbreviated to one letter, and the alternate forms @samp{a.m.},
  1054. @samp{p.m.}, and @samp{mid} are also understood.  Obviously
  1055. @samp{noon} and @samp{midnight} are allowed only on 12:00:00.
  1056. The words @samp{noon}, @samp{mid}, and @samp{midnight} are also
  1057. recognized with no number attached.
  1058. X
  1059. If there is no AM/PM indicator, the time is interpreted in 24-hour
  1060. format.
  1061. X
  1062. To read the date portion, all words and numbers are isolated
  1063. from the string; other characters are ignored.  All words must
  1064. be either month names or day-of-week names (the latter of which
  1065. are ignored).  Names can be written in full or as three-letter
  1066. abbreviations.
  1067. X
  1068. Large numbers, or numbers with @samp{+} or @samp{-} signs,
  1069. are interpreted as years.  If one of the other numbers is
  1070. greater than 12, then that must be the day and the remaining
  1071. number in the input is therefore the month.  Otherwise, Calc
  1072. assumes the month, day and year are in the same order that they
  1073. appear in the current date format.  If the year is omitted, the
  1074. current year is taken from the system clock.
  1075. X
  1076. If there are too many or too few numbers, or any unrecognizable
  1077. words, then the input is rejected.
  1078. X
  1079. If there are any large numbers (of five digits or more) other than
  1080. the year, they are ignored on the assumption that they are something
  1081. like Julian dates that were included along with the traditional
  1082. date components when the date was formatted.
  1083. X
  1084. One of the words @samp{ad}, @samp{a.d.}, @samp{bc}, or @samp{b.c.}
  1085. may optionally be used; the latter two are equivalent to a
  1086. minus sign on the year value.
  1087. X
  1088. If you always enter a four-digit year, and use a name instead
  1089. of a number for the month, there is no danger of ambiguity.
  1090. X
  1091. @node Standard Date Formats, , Free-Form Dates, Date Formats
  1092. @subsubsection Standard Date Formats
  1093. X
  1094. @noindent
  1095. There are actually ten standard date formats, numbered 0 through 9.
  1096. Entering a blank line at the @kbd{d d} command's prompt gives
  1097. you format number 1, Calc's usual format.  You can enter any digit
  1098. to select the other formats.
  1099. X
  1100. To create your own standard date formats, give a numeric prefix
  1101. argument from 0 to 9 to the @kbd{d d} command.  The format you
  1102. enter will be recorded as the new standard format of that
  1103. number, as well as becoming the new current date format.
  1104. You can save your formats permanently with the @kbd{m m}
  1105. command (@pxref{Mode Settings}).
  1106. X
  1107. @table @asis
  1108. @item 0
  1109. @samp{N}  (Numerical format)
  1110. @item 1
  1111. @samp{<H:mm:SSpp >Www Mmm D, YYYY}  (American format)
  1112. @item 2
  1113. @samp{D Mmm YYYY<, h:mm:SS>}  (European format)
  1114. @item 3
  1115. @samp{Www Mmm BD< hh:mm:ss> YYYY}  (Unix written date format)
  1116. @item 4
  1117. @samp{M/D/Y< H:mm:SSpp>}  (American slashed format)
  1118. @item 5
  1119. @samp{D.M.Y< h:mm:SS>}  (European dotted format)
  1120. @item 6
  1121. @samp{M-D-Y< H:mm:SSpp>}  (American dashed format)
  1122. @item 7
  1123. @samp{D-M-Y< h:mm:SS>}  (European dashed format)
  1124. @item 8
  1125. @samp{j<, h:mm:ss>}  (Julian day plus time)
  1126. @item 9
  1127. @samp{YYddd< hh:mm:ss>}  (Year-day format)
  1128. @end table
  1129. X
  1130. @node Truncating the Stack, Justification, Date Formats, Display Modes
  1131. @subsection Truncating the Stack
  1132. X
  1133. @noindent
  1134. @kindex d t
  1135. @pindex calc-truncate-stack
  1136. @cindex Truncating the stack
  1137. @cindex Narrowing the stack
  1138. The @kbd{d t} (@code{calc-truncate-stack}) command moves the @samp{.}@:
  1139. line that marks the top-of-stack up or down in the Calculator buffer.
  1140. The number right above that line is considered to the be at the top of
  1141. the stack.  Any numbers below that line are ``hidden'' from all stack
  1142. operations.  This is similar to the Emacs ``narrowing'' feature, except
  1143. that the values below the @samp{.} are @emph{visible}, just temporarily
  1144. frozen.  This feature allows you to keep several independent calculations
  1145. running at once in different parts of the stack, or to apply a certain
  1146. command to an element buried deep in the stack.@refill
  1147. X
  1148. Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor
  1149. is on.  Thus, this line and all those below it become hidden.  To un-hide
  1150. these lines, move down to the end of the buffer and press @kbd{d t}.
  1151. With a positive numeric prefix argument @cite{n}, @kbd{d t} hides the
  1152. bottom @cite{n} values in the buffer.  With a negative argument, it hides
  1153. all but the top @cite{n} values.  With an argument of zero, it hides zero
  1154. values, i.e., moves the @samp{.} all the way down to the bottom.@refill
  1155. X
  1156. @kindex d [
  1157. @pindex calc-truncate-up
  1158. @kindex d ]
  1159. @pindex calc-truncate-down
  1160. The @kbd{d [} (@code{calc-truncate-up}) and @kbd{d ]}
  1161. (@code{calc-truncate-down}) commands move the @samp{.} up or down one
  1162. line at a time (or several lines with a prefix argument).@refill
  1163. X
  1164. @node Justification, Labels, Truncating the Stack, Display Modes
  1165. @subsection Justification
  1166. X
  1167. @noindent
  1168. @kindex d <
  1169. @pindex calc-left-justify
  1170. @kindex d =
  1171. @pindex calc-center-justify
  1172. @kindex d >
  1173. @pindex calc-right-justify
  1174. Values on the stack are normally left-justified in the window.  You can
  1175. control this arrangement by typing @kbd{d <} (@code{calc-left-justify}),
  1176. @kbd{d >} (@code{calc-right-justify}), or @kbd{d =}
  1177. (@code{calc-center-justify}).  For example, in right-justification mode,
  1178. stack entries are displayed flush-right against the right edge of the
  1179. window.@refill
  1180. X
  1181. If you change the width of the Calculator window you may have to type
  1182. @kbd{d SPC} (@code{calc-refresh}) to re-align right-justified or centered
  1183. text.
  1184. X
  1185. Right-justification is especially useful together with fixed-point
  1186. notation (see @code{d f}; @code{calc-fix-notation}).  With these modes
  1187. together, the decimal points on numbers will always line up.
  1188. X
  1189. With a numeric prefix argument, the justification commands give you
  1190. a little extra control over the display.  The argument specifies the
  1191. horizontal ``origin'' of a display line.  It is also possible to
  1192. specify a maximum line width using the @kbd{d b} command (@pxref{Normal
  1193. Language Modes}).  For reference, the precise rules for formatting and
  1194. breaking lines are given below.  Notice that the interaction between
  1195. origin and line width is slightly different in each justification
  1196. mode.
  1197. X
  1198. In left-justified mode, the line is indented by a number of spaces
  1199. given by the origin (default zero).  If the result is longer than the
  1200. maximum line width, if given, or too wide to fit in the Calc window
  1201. otherwise, then it is broken into lines which will fit; each broken
  1202. line is indented to the origin.
  1203. X
  1204. In right-justified mode, lines are shifted right so that the rightmost
  1205. character is just before the origin, or just before the current
  1206. window width if no origin was specified.  If the line is too long
  1207. for this, then it is broken; the current line width is used, if
  1208. specified, or else the origin is used as a width if that is
  1209. specified, or else the line is broken to fit in the Calc window.
  1210. X
  1211. In centering mode, the origin is the column number of the center of
  1212. each stack entry.  If a line width is specified, lines will not be
  1213. allowed to go past that width; Calc will either indent less or
  1214. break the lines if necessary.  If no origin is specified, half the
  1215. line width or Calc window width is used.
  1216. X
  1217. Note that, in each case, if line numbering is enabled the display
  1218. is indented an additional four spaces to make room for the line
  1219. number.  The width of the line number is taken into account when
  1220. positioning according to the current Calc window width, but not
  1221. when positioning by explicit origins and widths.  In the latter
  1222. case, the display is formatted as specified, and then uniformly
  1223. shifted over four spaces to fit the line numbers.
  1224. X
  1225. @node Labels, , Justification, Display Modes
  1226. @subsection Labels
  1227. X
  1228. @noindent
  1229. @kindex d @{
  1230. @pindex calc-left-label
  1231. @kindex d @}
  1232. @pindex calc-right-label
  1233. The @kbd{d @{} (@code{calc-left-label}) command prompts for a string,
  1234. then displays that string to the left of every stack entry.  If the
  1235. entries are left-justified (@pxref{Justification}), then they will
  1236. appear immediately after the label (unless you specified an origin
  1237. greater than the length of the label).  If the entries are centered
  1238. or right-justified, the label appears on the far left and does not
  1239. affect the horizontal position of the stack entry.
  1240. X
  1241. Give a blank string (with @kbd{d @{ @key{RET}}) to turn the label off.
  1242. X
  1243. The @kbd{d @}} (@code{calc-right-label}) command similarly adds a
  1244. label on the righthand side.  It does not affect positioning of
  1245. the stack entries unless they are right-justified.  Also, if both
  1246. a line width and an origin are given in right-justified mode, the
  1247. stack entry is justified to the origin and the righthand label is
  1248. justified to the line width.
  1249. X
  1250. One application of labels would be to add equation numbers to
  1251. formulas you are manipulating in Calc and then copying into a
  1252. document (possibly using Embedded Mode).  The equations would
  1253. typically be centered, and the equation numbers would be on the
  1254. left or right as you prefer.
  1255. X
  1256. @node Language Modes, Calc Mode Line, Display Modes, Mode Settings
  1257. @section Language Modes
  1258. X
  1259. @noindent
  1260. The commands in this section change Calc to use a different notation for
  1261. entry and display of formulas, corresponding to the conventions of some
  1262. other common language such as Pascal or @TeX{}.  Objects displayed on the
  1263. stack or yanked from the Calculator to an editing buffer will be formatted
  1264. in the current language; objects entered in algebraic entry or yanked from
  1265. another buffer will be interpreted according to the current language.
  1266. X
  1267. The current language has no effect on things written to or read from the
  1268. trail buffer, nor does it affect numeric entry.  Only algebraic entry is
  1269. affected.  You can make even algebraic entry ignore the current language
  1270. and use the standard notation by giving a numeric prefix, e.g., @kbd{C-u '}.
  1271. X
  1272. For example, suppose the formula @samp{2*a[1] + atan(a[2])} occurs in a C
  1273. program; elsewhere in the program you need the derivatives of this formula
  1274. with respect to @samp{a[1]} and @samp{a[2]}.  First, type @kbd{d C}
  1275. to switch to C notation.  Now use @code{C-u M-# g} to grab the formula
  1276. into the Calculator, @kbd{a d a[1] @key{RET}} to differentiate with respect
  1277. to the first variable, and @kbd{M-# y} to yank the formula for the derivative
  1278. back into your C program.  Press @kbd{U} to undo the differentiation and
  1279. repeat with @kbd{a d a[2] @key{RET}} for the other derivative.
  1280. X
  1281. Without being switched into C mode first, Calc would have misinterpreted
  1282. the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that
  1283. @code{atan} was equivalent to Calc's built-in @code{arctan} function,
  1284. and would have written the formula back with notations (like implicit
  1285. multiplication) which would not have been legal for a C program.
  1286. X
  1287. As another example, suppose you are maintaining a C program and a @TeX{}
  1288. document, each of which needs a copy of the same formula.  You can grab the
  1289. formula from the program in C mode, switch to @TeX{} mode, and yank the
  1290. formula into the document in @TeX{} math-mode format.
  1291. X
  1292. Language modes are selected by typing the letter @kbd{d} followed by a
  1293. shifted letter key.
  1294. X
  1295. @menu
  1296. * Normal Language Modes::
  1297. * C FORTRAN Pascal::
  1298. * TeX Language Mode::
  1299. * Eqn Language Mode::
  1300. * Mathematica Language Mode::
  1301. * Maple Language Mode::
  1302. * Compositions::
  1303. @end menu
  1304. X
  1305. @node Normal Language Modes, C FORTRAN Pascal, Language Modes, Language Modes
  1306. @subsection Normal Language Modes
  1307. X
  1308. @noindent
  1309. @kindex d N
  1310. @pindex calc-normal-language
  1311. The @kbd{d N} (@code{calc-normal-language}) command selects the usual
  1312. notation for Calc formulas, as described in the rest of this manual.
  1313. Matrices are displayed in a multi-line tabular format, but all other
  1314. objects are written in linear form, as they would be typed from the
  1315. keyboard.
  1316. X
  1317. @kindex d O
  1318. @pindex calc-flat-language
  1319. @cindex Matrix display
  1320. The @kbd{d O} (@code{calc-flat-language}) command selects a language
  1321. identical with the normal one, except that matrices are written in
  1322. one-line form along with everything else.  In some applications this
  1323. form may be more suitable for yanking data into other buffers.
  1324. X
  1325. @kindex d b
  1326. @pindex calc-line-breaking
  1327. @cindex Line breaking
  1328. @cindex Breaking up long lines
  1329. Even in one-line mode, long formulas or vectors will still be split
  1330. across multiple lines if they exceed the width of the Calculator window.
  1331. SHAR_EOF
  1332. true || echo 'restore of calc.texinfo failed'
  1333. fi
  1334. echo 'End of  part 39'
  1335. echo 'File calc.texinfo is continued in part 40'
  1336. echo 40 > _shar_seq_.tmp
  1337. exit 0
  1338. exit 0 # Just in case...
  1339. -- 
  1340. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1341. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1342. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1343. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1344.