1 ;;; calc-ext.el --- various extension functions for Calc
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 Free Software Foundation, Inc.
5 ;; Author: David Gillespie <daveg@synaptics.com>
6 ;; Maintainers: D. Goel <deego@gnufans.org>
7 ;; Colin Walters <walters@debian.org>
9 ;; This file is part of GNU Emacs.
11 ;; GNU Emacs is distributed in the hope that it will be useful,
12 ;; but WITHOUT ANY WARRANTY. No author or distributor
13 ;; accepts responsibility to anyone for the consequences of using it
14 ;; or for whether it serves any particular purpose or works at all,
15 ;; unless he says so in writing. Refer to the GNU Emacs General Public
16 ;; License for full details.
18 ;; Everyone is granted permission to copy, modify and redistribute
19 ;; GNU Emacs, but only under the conditions described in the
20 ;; GNU Emacs General Public License. A copy of this license is
21 ;; supposed to have been given to you along with GNU Emacs so you
22 ;; can know your rights and responsibilities. It should be in a
23 ;; file named COPYING. Among other things, the copyright notice
24 ;; and this notice must be preserved on all copies.
33 (setq calc-extensions-loaded t
)
35 ;;; This function is the autoload "hook" to cause this file to be loaded.
37 (defun calc-extensions ()
38 "This function is part of the autoload linkage for parts of Calc."
41 ;;; Auto-load calc.el part, in case this part was loaded first.
42 (if (fboundp 'calc-dispatch
)
43 (and (eq (car-safe (symbol-function 'calc-dispatch
)) 'autoload
)
44 (load (nth 1 (symbol-function 'calc-dispatch
))))
46 (and (eq (car-safe (symbol-function 'calc
)) 'autoload
)
47 (load (nth 1 (symbol-function 'calc
))))
48 (error "Main part of Calc must be present in order to load this file")))
52 (defvar math-simplifying nil
)
53 (defvar math-living-dangerously nil
) ; true if unsafe simplifications are okay.
54 (defvar math-integrating nil
)
56 (defvar math-rewrite-selections nil
)
58 (defvar math-compose-level
0)
59 (defvar math-comp-selected nil
)
60 (defvar math-comp-tagged nil
)
61 (defvar math-comp-sel-hpos nil
)
62 (defvar math-comp-sel-vpos nil
)
63 (defvar math-comp-sel-cpos nil
)
64 (defvar math-compose-hash-args nil
)
66 ;;; The following was made a function so that it could be byte-compiled.
67 (defun calc-init-extensions ()
69 (define-key calc-mode-map
":" 'calc-fdiv
)
70 (define-key calc-mode-map
"\\" 'calc-idiv
)
71 (define-key calc-mode-map
"|" 'calc-concat
)
72 (define-key calc-mode-map
"!" 'calc-factorial
)
73 (define-key calc-mode-map
"C" 'calc-cos
)
74 (define-key calc-mode-map
"E" 'calc-exp
)
75 (define-key calc-mode-map
"H" 'calc-hyperbolic
)
76 (define-key calc-mode-map
"I" 'calc-inverse
)
77 (define-key calc-mode-map
"J" 'calc-conj
)
78 (define-key calc-mode-map
"L" 'calc-ln
)
79 (define-key calc-mode-map
"N" 'calc-eval-num
)
80 (define-key calc-mode-map
"P" 'calc-pi
)
81 (define-key calc-mode-map
"Q" 'calc-sqrt
)
82 (define-key calc-mode-map
"R" 'calc-round
)
83 (define-key calc-mode-map
"S" 'calc-sin
)
84 (define-key calc-mode-map
"T" 'calc-tan
)
85 (define-key calc-mode-map
"U" 'calc-undo
)
86 (define-key calc-mode-map
"X" 'calc-call-last-kbd-macro
)
87 (define-key calc-mode-map
"o" 'calc-realign
)
88 (define-key calc-mode-map
"p" 'calc-precision
)
89 (define-key calc-mode-map
"w" 'calc-why
)
90 (define-key calc-mode-map
"x" 'calc-execute-extended-command
)
91 (define-key calc-mode-map
"y" 'calc-copy-to-buffer
)
93 (define-key calc-mode-map
"(" 'calc-begin-complex
)
94 (define-key calc-mode-map
")" 'calc-end-complex
)
95 (define-key calc-mode-map
"[" 'calc-begin-vector
)
96 (define-key calc-mode-map
"]" 'calc-end-vector
)
97 (define-key calc-mode-map
"," 'calc-comma
)
98 (define-key calc-mode-map
";" 'calc-semi
)
99 (define-key calc-mode-map
"`" 'calc-edit
)
100 (define-key calc-mode-map
"=" 'calc-evaluate
)
101 (define-key calc-mode-map
"~" 'calc-num-prefix
)
102 (define-key calc-mode-map
"<" 'calc-scroll-left
)
103 (define-key calc-mode-map
">" 'calc-scroll-right
)
104 (define-key calc-mode-map
"{" 'calc-scroll-down
)
105 (define-key calc-mode-map
"}" 'calc-scroll-up
)
106 (define-key calc-mode-map
"\C-k" 'calc-kill
)
107 (define-key calc-mode-map
"\M-k" 'calc-copy-as-kill
)
108 (define-key calc-mode-map
"\C-w" 'calc-kill-region
)
109 (define-key calc-mode-map
"\M-w" 'calc-copy-region-as-kill
)
110 (define-key calc-mode-map
"\C-y" 'calc-yank
)
111 (define-key calc-mode-map
"\C-_" 'calc-undo
)
112 (define-key calc-mode-map
"\C-xu" 'calc-undo
)
113 (define-key calc-mode-map
"\M-\C-m" 'calc-last-args
)
115 (define-key calc-mode-map
"a" nil
)
116 (define-key calc-mode-map
"a?" 'calc-a-prefix-help
)
117 (define-key calc-mode-map
"aa" 'calc-apart
)
118 (define-key calc-mode-map
"ab" 'calc-substitute
)
119 (define-key calc-mode-map
"ac" 'calc-collect
)
120 (define-key calc-mode-map
"ad" 'calc-derivative
)
121 (define-key calc-mode-map
"ae" 'calc-simplify-extended
)
122 (define-key calc-mode-map
"af" 'calc-factor
)
123 (define-key calc-mode-map
"ag" 'calc-poly-gcd
)
124 (define-key calc-mode-map
"ai" 'calc-integral
)
125 (define-key calc-mode-map
"am" 'calc-match
)
126 (define-key calc-mode-map
"an" 'calc-normalize-rat
)
127 (define-key calc-mode-map
"ap" 'calc-poly-interp
)
128 (define-key calc-mode-map
"ar" 'calc-rewrite
)
129 (define-key calc-mode-map
"as" 'calc-simplify
)
130 (define-key calc-mode-map
"at" 'calc-taylor
)
131 (define-key calc-mode-map
"av" 'calc-alg-evaluate
)
132 (define-key calc-mode-map
"ax" 'calc-expand
)
133 (define-key calc-mode-map
"aA" 'calc-abs
)
134 (define-key calc-mode-map
"aF" 'calc-curve-fit
)
135 (define-key calc-mode-map
"aI" 'calc-num-integral
)
136 (define-key calc-mode-map
"aM" 'calc-map-equation
)
137 (define-key calc-mode-map
"aN" 'calc-find-minimum
)
138 (define-key calc-mode-map
"aP" 'calc-poly-roots
)
139 (define-key calc-mode-map
"aS" 'calc-solve-for
)
140 (define-key calc-mode-map
"aR" 'calc-find-root
)
141 (define-key calc-mode-map
"aT" 'calc-tabulate
)
142 (define-key calc-mode-map
"aX" 'calc-find-maximum
)
143 (define-key calc-mode-map
"a+" 'calc-summation
)
144 (define-key calc-mode-map
"a-" 'calc-alt-summation
)
145 (define-key calc-mode-map
"a*" 'calc-product
)
146 (define-key calc-mode-map
"a\\" 'calc-poly-div
)
147 (define-key calc-mode-map
"a%" 'calc-poly-rem
)
148 (define-key calc-mode-map
"a/" 'calc-poly-div-rem
)
149 (define-key calc-mode-map
"a=" 'calc-equal-to
)
150 (define-key calc-mode-map
"a#" 'calc-not-equal-to
)
151 (define-key calc-mode-map
"a<" 'calc-less-than
)
152 (define-key calc-mode-map
"a>" 'calc-greater-than
)
153 (define-key calc-mode-map
"a[" 'calc-less-equal
)
154 (define-key calc-mode-map
"a]" 'calc-greater-equal
)
155 (define-key calc-mode-map
"a." 'calc-remove-equal
)
156 (define-key calc-mode-map
"a{" 'calc-in-set
)
157 (define-key calc-mode-map
"a&" 'calc-logical-and
)
158 (define-key calc-mode-map
"a|" 'calc-logical-or
)
159 (define-key calc-mode-map
"a!" 'calc-logical-not
)
160 (define-key calc-mode-map
"a:" 'calc-logical-if
)
161 (define-key calc-mode-map
"a_" 'calc-subscript
)
162 (define-key calc-mode-map
"a\"" 'calc-expand-formula
)
164 (define-key calc-mode-map
"b" nil
)
165 (define-key calc-mode-map
"b?" 'calc-b-prefix-help
)
166 (define-key calc-mode-map
"ba" 'calc-and
)
167 (define-key calc-mode-map
"bc" 'calc-clip
)
168 (define-key calc-mode-map
"bd" 'calc-diff
)
169 (define-key calc-mode-map
"bl" 'calc-lshift-binary
)
170 (define-key calc-mode-map
"bn" 'calc-not
)
171 (define-key calc-mode-map
"bo" 'calc-or
)
172 (define-key calc-mode-map
"bp" 'calc-pack-bits
)
173 (define-key calc-mode-map
"br" 'calc-rshift-binary
)
174 (define-key calc-mode-map
"bt" 'calc-rotate-binary
)
175 (define-key calc-mode-map
"bu" 'calc-unpack-bits
)
176 (define-key calc-mode-map
"bw" 'calc-word-size
)
177 (define-key calc-mode-map
"bx" 'calc-xor
)
178 (define-key calc-mode-map
"bB" 'calc-log
)
179 (define-key calc-mode-map
"bD" 'calc-fin-ddb
)
180 (define-key calc-mode-map
"bF" 'calc-fin-fv
)
181 (define-key calc-mode-map
"bI" 'calc-fin-irr
)
182 (define-key calc-mode-map
"bL" 'calc-lshift-arith
)
183 (define-key calc-mode-map
"bM" 'calc-fin-pmt
)
184 (define-key calc-mode-map
"bN" 'calc-fin-npv
)
185 (define-key calc-mode-map
"bP" 'calc-fin-pv
)
186 (define-key calc-mode-map
"bR" 'calc-rshift-arith
)
187 (define-key calc-mode-map
"bS" 'calc-fin-sln
)
188 (define-key calc-mode-map
"bT" 'calc-fin-rate
)
189 (define-key calc-mode-map
"bY" 'calc-fin-syd
)
190 (define-key calc-mode-map
"b#" 'calc-fin-nper
)
191 (define-key calc-mode-map
"b%" 'calc-percent-change
)
193 (define-key calc-mode-map
"c" nil
)
194 (define-key calc-mode-map
"c?" 'calc-c-prefix-help
)
195 (define-key calc-mode-map
"cc" 'calc-clean
)
196 (define-key calc-mode-map
"cd" 'calc-to-degrees
)
197 (define-key calc-mode-map
"cf" 'calc-float
)
198 (define-key calc-mode-map
"ch" 'calc-to-hms
)
199 (define-key calc-mode-map
"cp" 'calc-polar
)
200 (define-key calc-mode-map
"cr" 'calc-to-radians
)
201 (define-key calc-mode-map
"cC" 'calc-cos
)
202 (define-key calc-mode-map
"cF" 'calc-fraction
)
203 (define-key calc-mode-map
"c%" 'calc-convert-percent
)
205 (define-key calc-mode-map
"d" nil
)
206 (define-key calc-mode-map
"d?" 'calc-d-prefix-help
)
207 (define-key calc-mode-map
"d0" 'calc-decimal-radix
)
208 (define-key calc-mode-map
"d2" 'calc-binary-radix
)
209 (define-key calc-mode-map
"d6" 'calc-hex-radix
)
210 (define-key calc-mode-map
"d8" 'calc-octal-radix
)
211 (define-key calc-mode-map
"db" 'calc-line-breaking
)
212 (define-key calc-mode-map
"dc" 'calc-complex-notation
)
213 (define-key calc-mode-map
"dd" 'calc-date-notation
)
214 (define-key calc-mode-map
"de" 'calc-eng-notation
)
215 (define-key calc-mode-map
"df" 'calc-fix-notation
)
216 (define-key calc-mode-map
"dg" 'calc-group-digits
)
217 (define-key calc-mode-map
"dh" 'calc-hms-notation
)
218 (define-key calc-mode-map
"di" 'calc-i-notation
)
219 (define-key calc-mode-map
"dj" 'calc-j-notation
)
220 (define-key calc-mode-map
"dl" 'calc-line-numbering
)
221 (define-key calc-mode-map
"dn" 'calc-normal-notation
)
222 (define-key calc-mode-map
"do" 'calc-over-notation
)
223 (define-key calc-mode-map
"dp" 'calc-show-plain
)
224 (define-key calc-mode-map
"dr" 'calc-radix
)
225 (define-key calc-mode-map
"ds" 'calc-sci-notation
)
226 (define-key calc-mode-map
"dt" 'calc-truncate-stack
)
227 (define-key calc-mode-map
"dw" 'calc-auto-why
)
228 (define-key calc-mode-map
"dz" 'calc-leading-zeros
)
229 (define-key calc-mode-map
"dB" 'calc-big-language
)
230 (define-key calc-mode-map
"dD" 'calc-redo
)
231 (define-key calc-mode-map
"dC" 'calc-c-language
)
232 (define-key calc-mode-map
"dE" 'calc-eqn-language
)
233 (define-key calc-mode-map
"dF" 'calc-fortran-language
)
234 (define-key calc-mode-map
"dM" 'calc-mathematica-language
)
235 (define-key calc-mode-map
"dN" 'calc-normal-language
)
236 (define-key calc-mode-map
"dO" 'calc-flat-language
)
237 (define-key calc-mode-map
"dP" 'calc-pascal-language
)
238 (define-key calc-mode-map
"dT" 'calc-tex-language
)
239 (define-key calc-mode-map
"dU" 'calc-unformatted-language
)
240 (define-key calc-mode-map
"dW" 'calc-maple-language
)
241 (define-key calc-mode-map
"d[" 'calc-truncate-up
)
242 (define-key calc-mode-map
"d]" 'calc-truncate-down
)
243 (define-key calc-mode-map
"d." 'calc-point-char
)
244 (define-key calc-mode-map
"d," 'calc-group-char
)
245 (define-key calc-mode-map
"d\"" 'calc-display-strings
)
246 (define-key calc-mode-map
"d<" 'calc-left-justify
)
247 (define-key calc-mode-map
"d=" 'calc-center-justify
)
248 (define-key calc-mode-map
"d>" 'calc-right-justify
)
249 (define-key calc-mode-map
"d{" 'calc-left-label
)
250 (define-key calc-mode-map
"d}" 'calc-right-label
)
251 (define-key calc-mode-map
"d'" 'calc-display-raw
)
252 (define-key calc-mode-map
"d " 'calc-refresh
)
253 (define-key calc-mode-map
"d\r" 'calc-refresh-top
)
254 (define-key calc-mode-map
"d@" 'calc-toggle-banner
)
256 (define-key calc-mode-map
"f" nil
)
257 (define-key calc-mode-map
"f?" 'calc-f-prefix-help
)
258 (define-key calc-mode-map
"fb" 'calc-beta
)
259 (define-key calc-mode-map
"fe" 'calc-erf
)
260 (define-key calc-mode-map
"fg" 'calc-gamma
)
261 (define-key calc-mode-map
"fh" 'calc-hypot
)
262 (define-key calc-mode-map
"fi" 'calc-im
)
263 (define-key calc-mode-map
"fj" 'calc-bessel-J
)
264 (define-key calc-mode-map
"fn" 'calc-min
)
265 (define-key calc-mode-map
"fr" 'calc-re
)
266 (define-key calc-mode-map
"fs" 'calc-sign
)
267 (define-key calc-mode-map
"fx" 'calc-max
)
268 (define-key calc-mode-map
"fy" 'calc-bessel-Y
)
269 (define-key calc-mode-map
"fA" 'calc-abssqr
)
270 (define-key calc-mode-map
"fB" 'calc-inc-beta
)
271 (define-key calc-mode-map
"fE" 'calc-expm1
)
272 (define-key calc-mode-map
"fF" 'calc-floor
)
273 (define-key calc-mode-map
"fG" 'calc-inc-gamma
)
274 (define-key calc-mode-map
"fI" 'calc-ilog
)
275 (define-key calc-mode-map
"fL" 'calc-lnp1
)
276 (define-key calc-mode-map
"fM" 'calc-mant-part
)
277 (define-key calc-mode-map
"fQ" 'calc-isqrt
)
278 (define-key calc-mode-map
"fS" 'calc-scale-float
)
279 (define-key calc-mode-map
"fT" 'calc-arctan2
)
280 (define-key calc-mode-map
"fX" 'calc-xpon-part
)
281 (define-key calc-mode-map
"f[" 'calc-decrement
)
282 (define-key calc-mode-map
"f]" 'calc-increment
)
284 (define-key calc-mode-map
"g" nil
)
285 (define-key calc-mode-map
"g?" 'calc-g-prefix-help
)
286 (define-key calc-mode-map
"ga" 'calc-graph-add
)
287 (define-key calc-mode-map
"gb" 'calc-graph-border
)
288 (define-key calc-mode-map
"gc" 'calc-graph-clear
)
289 (define-key calc-mode-map
"gd" 'calc-graph-delete
)
290 (define-key calc-mode-map
"gf" 'calc-graph-fast
)
291 (define-key calc-mode-map
"gg" 'calc-graph-grid
)
292 (define-key calc-mode-map
"gh" 'calc-graph-header
)
293 (define-key calc-mode-map
"gk" 'calc-graph-key
)
294 (define-key calc-mode-map
"gj" 'calc-graph-juggle
)
295 (define-key calc-mode-map
"gl" 'calc-graph-log-x
)
296 (define-key calc-mode-map
"gn" 'calc-graph-name
)
297 (define-key calc-mode-map
"gp" 'calc-graph-plot
)
298 (define-key calc-mode-map
"gq" 'calc-graph-quit
)
299 (define-key calc-mode-map
"gr" 'calc-graph-range-x
)
300 (define-key calc-mode-map
"gs" 'calc-graph-line-style
)
301 (define-key calc-mode-map
"gt" 'calc-graph-title-x
)
302 (define-key calc-mode-map
"gv" 'calc-graph-view-commands
)
303 (define-key calc-mode-map
"gx" 'calc-graph-display
)
304 (define-key calc-mode-map
"gz" 'calc-graph-zero-x
)
305 (define-key calc-mode-map
"gA" 'calc-graph-add-3d
)
306 (define-key calc-mode-map
"gC" 'calc-graph-command
)
307 (define-key calc-mode-map
"gD" 'calc-graph-device
)
308 (define-key calc-mode-map
"gF" 'calc-graph-fast-3d
)
309 (define-key calc-mode-map
"gG" 'calc-argument
)
310 (define-key calc-mode-map
"gH" 'calc-graph-hide
)
311 (define-key calc-mode-map
"gK" 'calc-graph-kill
)
312 (define-key calc-mode-map
"gL" 'calc-graph-log-y
)
313 (define-key calc-mode-map
"gN" 'calc-graph-num-points
)
314 (define-key calc-mode-map
"gO" 'calc-graph-output
)
315 (define-key calc-mode-map
"gP" 'calc-graph-print
)
316 (define-key calc-mode-map
"gR" 'calc-graph-range-y
)
317 (define-key calc-mode-map
"gS" 'calc-graph-point-style
)
318 (define-key calc-mode-map
"gT" 'calc-graph-title-y
)
319 (define-key calc-mode-map
"gV" 'calc-graph-view-trail
)
320 (define-key calc-mode-map
"gX" 'calc-graph-geometry
)
321 (define-key calc-mode-map
"gZ" 'calc-graph-zero-y
)
322 (define-key calc-mode-map
"g\C-l" 'calc-graph-log-z
)
323 (define-key calc-mode-map
"g\C-r" 'calc-graph-range-z
)
324 (define-key calc-mode-map
"g\C-t" 'calc-graph-title-z
)
326 (define-key calc-mode-map
"h" 'calc-help-prefix
)
328 (define-key calc-mode-map
"j" nil
)
329 (define-key calc-mode-map
"j?" 'calc-j-prefix-help
)
330 (define-key calc-mode-map
"ja" 'calc-select-additional
)
331 (define-key calc-mode-map
"jb" 'calc-break-selections
)
332 (define-key calc-mode-map
"jc" 'calc-clear-selections
)
333 (define-key calc-mode-map
"jd" 'calc-show-selections
)
334 (define-key calc-mode-map
"je" 'calc-enable-selections
)
335 (define-key calc-mode-map
"jl" 'calc-select-less
)
336 (define-key calc-mode-map
"jm" 'calc-select-more
)
337 (define-key calc-mode-map
"jn" 'calc-select-next
)
338 (define-key calc-mode-map
"jo" 'calc-select-once
)
339 (define-key calc-mode-map
"jp" 'calc-select-previous
)
340 (define-key calc-mode-map
"jr" 'calc-rewrite-selection
)
341 (define-key calc-mode-map
"js" 'calc-select-here
)
342 (define-key calc-mode-map
"jv" 'calc-sel-evaluate
)
343 (define-key calc-mode-map
"ju" 'calc-unselect
)
344 (define-key calc-mode-map
"jC" 'calc-sel-commute
)
345 (define-key calc-mode-map
"jD" 'calc-sel-distribute
)
346 (define-key calc-mode-map
"jE" 'calc-sel-jump-equals
)
347 (define-key calc-mode-map
"jI" 'calc-sel-isolate
)
348 (define-key calc-mode-map
"jJ" 'calc-conj
)
349 (define-key calc-mode-map
"jL" 'calc-commute-left
)
350 (define-key calc-mode-map
"jM" 'calc-sel-merge
)
351 (define-key calc-mode-map
"jN" 'calc-sel-negate
)
352 (define-key calc-mode-map
"jO" 'calc-select-once-maybe
)
353 (define-key calc-mode-map
"jR" 'calc-commute-right
)
354 (define-key calc-mode-map
"jS" 'calc-select-here-maybe
)
355 (define-key calc-mode-map
"jU" 'calc-sel-unpack
)
356 (define-key calc-mode-map
"j&" 'calc-sel-invert
)
357 (define-key calc-mode-map
"j\r" 'calc-copy-selection
)
358 (define-key calc-mode-map
"j\n" 'calc-copy-selection
)
359 (define-key calc-mode-map
"j\010" 'calc-del-selection
)
360 (define-key calc-mode-map
"j\177" 'calc-del-selection
)
361 (define-key calc-mode-map
"j'" 'calc-enter-selection
)
362 (define-key calc-mode-map
"j`" 'calc-edit-selection
)
363 (define-key calc-mode-map
"j+" 'calc-sel-add-both-sides
)
364 (define-key calc-mode-map
"j-" 'calc-sel-sub-both-sides
)
365 (define-key calc-mode-map
"j*" 'calc-sel-mult-both-sides
)
366 (define-key calc-mode-map
"j/" 'calc-sel-div-both-sides
)
367 (define-key calc-mode-map
"j\"" 'calc-sel-expand-formula
)
369 (define-key calc-mode-map
"k" nil
)
370 (define-key calc-mode-map
"k?" 'calc-k-prefix-help
)
371 (define-key calc-mode-map
"ka" 'calc-random-again
)
372 (define-key calc-mode-map
"kb" 'calc-bernoulli-number
)
373 (define-key calc-mode-map
"kc" 'calc-choose
)
374 (define-key calc-mode-map
"kd" 'calc-double-factorial
)
375 (define-key calc-mode-map
"ke" 'calc-euler-number
)
376 (define-key calc-mode-map
"kf" 'calc-prime-factors
)
377 (define-key calc-mode-map
"kg" 'calc-gcd
)
378 (define-key calc-mode-map
"kh" 'calc-shuffle
)
379 (define-key calc-mode-map
"kl" 'calc-lcm
)
380 (define-key calc-mode-map
"km" 'calc-moebius
)
381 (define-key calc-mode-map
"kn" 'calc-next-prime
)
382 (define-key calc-mode-map
"kp" 'calc-prime-test
)
383 (define-key calc-mode-map
"kr" 'calc-random
)
384 (define-key calc-mode-map
"ks" 'calc-stirling-number
)
385 (define-key calc-mode-map
"kt" 'calc-totient
)
386 (define-key calc-mode-map
"kB" 'calc-utpb
)
387 (define-key calc-mode-map
"kC" 'calc-utpc
)
388 (define-key calc-mode-map
"kE" 'calc-extended-gcd
)
389 (define-key calc-mode-map
"kF" 'calc-utpf
)
390 (define-key calc-mode-map
"kK" 'calc-keep-args
)
391 (define-key calc-mode-map
"kN" 'calc-utpn
)
392 (define-key calc-mode-map
"kP" 'calc-utpp
)
393 (define-key calc-mode-map
"kT" 'calc-utpt
)
395 (define-key calc-mode-map
"m" nil
)
396 (define-key calc-mode-map
"m?" 'calc-m-prefix-help
)
397 (define-key calc-mode-map
"ma" 'calc-algebraic-mode
)
398 (define-key calc-mode-map
"md" 'calc-degrees-mode
)
399 (define-key calc-mode-map
"mf" 'calc-frac-mode
)
400 (define-key calc-mode-map
"mg" 'calc-get-modes
)
401 (define-key calc-mode-map
"mh" 'calc-hms-mode
)
402 (define-key calc-mode-map
"mi" 'calc-infinite-mode
)
403 (define-key calc-mode-map
"mm" 'calc-save-modes
)
404 (define-key calc-mode-map
"mp" 'calc-polar-mode
)
405 (define-key calc-mode-map
"mr" 'calc-radians-mode
)
406 (define-key calc-mode-map
"ms" 'calc-symbolic-mode
)
407 (define-key calc-mode-map
"mt" 'calc-total-algebraic-mode
)
408 (define-key calc-mode-map
"\emt" 'calc-total-algebraic-mode
)
409 (define-key calc-mode-map
"\em\et" 'calc-total-algebraic-mode
)
410 (define-key calc-mode-map
"mv" 'calc-matrix-mode
)
411 (define-key calc-mode-map
"mw" 'calc-working
)
412 (define-key calc-mode-map
"mx" 'calc-always-load-extensions
)
413 (define-key calc-mode-map
"mA" 'calc-alg-simplify-mode
)
414 (define-key calc-mode-map
"mB" 'calc-bin-simplify-mode
)
415 (define-key calc-mode-map
"mC" 'calc-auto-recompute
)
416 (define-key calc-mode-map
"mD" 'calc-default-simplify-mode
)
417 (define-key calc-mode-map
"mE" 'calc-ext-simplify-mode
)
418 (define-key calc-mode-map
"mF" 'calc-settings-file-name
)
419 (define-key calc-mode-map
"mM" 'calc-more-recursion-depth
)
420 (define-key calc-mode-map
"mN" 'calc-num-simplify-mode
)
421 (define-key calc-mode-map
"mO" 'calc-no-simplify-mode
)
422 (define-key calc-mode-map
"mR" 'calc-mode-record-mode
)
423 (define-key calc-mode-map
"mS" 'calc-shift-prefix
)
424 (define-key calc-mode-map
"mU" 'calc-units-simplify-mode
)
425 (define-key calc-mode-map
"mX" 'calc-load-everything
)
427 (define-key calc-mode-map
"r" nil
)
428 (define-key calc-mode-map
"r?" 'calc-r-prefix-help
)
430 (define-key calc-mode-map
"s" nil
)
431 (define-key calc-mode-map
"s?" 'calc-s-prefix-help
)
432 (define-key calc-mode-map
"sc" 'calc-copy-variable
)
433 (define-key calc-mode-map
"sd" 'calc-declare-variable
)
434 (define-key calc-mode-map
"se" 'calc-edit-variable
)
435 (define-key calc-mode-map
"si" 'calc-insert-variables
)
436 (define-key calc-mode-map
"sl" 'calc-let
)
437 (define-key calc-mode-map
"sm" 'calc-store-map
)
438 (define-key calc-mode-map
"sn" 'calc-store-neg
)
439 (define-key calc-mode-map
"sp" 'calc-permanent-variable
)
440 (define-key calc-mode-map
"sr" 'calc-recall
)
441 (define-key calc-mode-map
"ss" 'calc-store
)
442 (define-key calc-mode-map
"st" 'calc-store-into
)
443 (define-key calc-mode-map
"su" 'calc-unstore
)
444 (define-key calc-mode-map
"sx" 'calc-store-exchange
)
445 (define-key calc-mode-map
"sA" 'calc-edit-AlgSimpRules
)
446 (define-key calc-mode-map
"sD" 'calc-edit-Decls
)
447 (define-key calc-mode-map
"sE" 'calc-edit-EvalRules
)
448 (define-key calc-mode-map
"sF" 'calc-edit-FitRules
)
449 (define-key calc-mode-map
"sG" 'calc-edit-GenCount
)
450 (define-key calc-mode-map
"sH" 'calc-edit-Holidays
)
451 (define-key calc-mode-map
"sI" 'calc-edit-IntegLimit
)
452 (define-key calc-mode-map
"sL" 'calc-edit-LineStyles
)
453 (define-key calc-mode-map
"sP" 'calc-edit-PointStyles
)
454 (define-key calc-mode-map
"sR" 'calc-edit-PlotRejects
)
455 (define-key calc-mode-map
"sS" 'calc-sin
)
456 (define-key calc-mode-map
"sT" 'calc-edit-TimeZone
)
457 (define-key calc-mode-map
"sU" 'calc-edit-Units
)
458 (define-key calc-mode-map
"sX" 'calc-edit-ExtSimpRules
)
459 (define-key calc-mode-map
"s+" 'calc-store-plus
)
460 (define-key calc-mode-map
"s-" 'calc-store-minus
)
461 (define-key calc-mode-map
"s*" 'calc-store-times
)
462 (define-key calc-mode-map
"s/" 'calc-store-div
)
463 (define-key calc-mode-map
"s^" 'calc-store-power
)
464 (define-key calc-mode-map
"s|" 'calc-store-concat
)
465 (define-key calc-mode-map
"s&" 'calc-store-inv
)
466 (define-key calc-mode-map
"s[" 'calc-store-decr
)
467 (define-key calc-mode-map
"s]" 'calc-store-incr
)
468 (define-key calc-mode-map
"s:" 'calc-assign
)
469 (define-key calc-mode-map
"s=" 'calc-evalto
)
471 (define-key calc-mode-map
"t" nil
)
472 (define-key calc-mode-map
"t?" 'calc-t-prefix-help
)
473 (define-key calc-mode-map
"tb" 'calc-trail-backward
)
474 (define-key calc-mode-map
"td" 'calc-trail-display
)
475 (define-key calc-mode-map
"tf" 'calc-trail-forward
)
476 (define-key calc-mode-map
"th" 'calc-trail-here
)
477 (define-key calc-mode-map
"ti" 'calc-trail-in
)
478 (define-key calc-mode-map
"tk" 'calc-trail-kill
)
479 (define-key calc-mode-map
"tm" 'calc-trail-marker
)
480 (define-key calc-mode-map
"tn" 'calc-trail-next
)
481 (define-key calc-mode-map
"to" 'calc-trail-out
)
482 (define-key calc-mode-map
"tp" 'calc-trail-previous
)
483 (define-key calc-mode-map
"tr" 'calc-trail-isearch-backward
)
484 (define-key calc-mode-map
"ts" 'calc-trail-isearch-forward
)
485 (define-key calc-mode-map
"ty" 'calc-trail-yank
)
486 (define-key calc-mode-map
"t[" 'calc-trail-first
)
487 (define-key calc-mode-map
"t]" 'calc-trail-last
)
488 (define-key calc-mode-map
"t<" 'calc-trail-scroll-left
)
489 (define-key calc-mode-map
"t>" 'calc-trail-scroll-right
)
490 (define-key calc-mode-map
"t{" 'calc-trail-backward
)
491 (define-key calc-mode-map
"t}" 'calc-trail-forward
)
492 (define-key calc-mode-map
"t." 'calc-full-trail-vectors
)
493 (define-key calc-mode-map
"tC" 'calc-convert-time-zones
)
494 (define-key calc-mode-map
"tD" 'calc-date
)
495 (define-key calc-mode-map
"tI" 'calc-inc-month
)
496 (define-key calc-mode-map
"tJ" 'calc-julian
)
497 (define-key calc-mode-map
"tM" 'calc-new-month
)
498 (define-key calc-mode-map
"tN" 'calc-now
)
499 (define-key calc-mode-map
"tP" 'calc-date-part
)
500 (define-key calc-mode-map
"tT" 'calc-tan
)
501 (define-key calc-mode-map
"tU" 'calc-unix-time
)
502 (define-key calc-mode-map
"tW" 'calc-new-week
)
503 (define-key calc-mode-map
"tY" 'calc-new-year
)
504 (define-key calc-mode-map
"tZ" 'calc-time-zone
)
505 (define-key calc-mode-map
"t+" 'calc-business-days-plus
)
506 (define-key calc-mode-map
"t-" 'calc-business-days-minus
)
508 (define-key calc-mode-map
"u" 'nil
)
509 (define-key calc-mode-map
"u?" 'calc-u-prefix-help
)
510 (define-key calc-mode-map
"ua" 'calc-autorange-units
)
511 (define-key calc-mode-map
"ub" 'calc-base-units
)
512 (define-key calc-mode-map
"uc" 'calc-convert-units
)
513 (define-key calc-mode-map
"ud" 'calc-define-unit
)
514 (define-key calc-mode-map
"ue" 'calc-explain-units
)
515 (define-key calc-mode-map
"ug" 'calc-get-unit-definition
)
516 (define-key calc-mode-map
"up" 'calc-permanent-units
)
517 (define-key calc-mode-map
"ur" 'calc-remove-units
)
518 (define-key calc-mode-map
"us" 'calc-simplify-units
)
519 (define-key calc-mode-map
"ut" 'calc-convert-temperature
)
520 (define-key calc-mode-map
"uu" 'calc-undefine-unit
)
521 (define-key calc-mode-map
"uv" 'calc-enter-units-table
)
522 (define-key calc-mode-map
"ux" 'calc-extract-units
)
523 (define-key calc-mode-map
"uV" 'calc-view-units-table
)
524 (define-key calc-mode-map
"uC" 'calc-vector-covariance
)
525 (define-key calc-mode-map
"uG" 'calc-vector-geometric-mean
)
526 (define-key calc-mode-map
"uM" 'calc-vector-mean
)
527 (define-key calc-mode-map
"uN" 'calc-vector-min
)
528 (define-key calc-mode-map
"uS" 'calc-vector-sdev
)
529 (define-key calc-mode-map
"uU" 'calc-undo
)
530 (define-key calc-mode-map
"uX" 'calc-vector-max
)
531 (define-key calc-mode-map
"u#" 'calc-vector-count
)
532 (define-key calc-mode-map
"u+" 'calc-vector-sum
)
533 (define-key calc-mode-map
"u*" 'calc-vector-product
)
535 (define-key calc-mode-map
"v" 'nil
)
536 (define-key calc-mode-map
"v?" 'calc-v-prefix-help
)
537 (define-key calc-mode-map
"va" 'calc-arrange-vector
)
538 (define-key calc-mode-map
"vb" 'calc-build-vector
)
539 (define-key calc-mode-map
"vc" 'calc-mcol
)
540 (define-key calc-mode-map
"vd" 'calc-diag
)
541 (define-key calc-mode-map
"ve" 'calc-expand-vector
)
542 (define-key calc-mode-map
"vf" 'calc-vector-find
)
543 (define-key calc-mode-map
"vh" 'calc-head
)
544 (define-key calc-mode-map
"vi" 'calc-ident
)
545 (define-key calc-mode-map
"vk" 'calc-cons
)
546 (define-key calc-mode-map
"vl" 'calc-vlength
)
547 (define-key calc-mode-map
"vm" 'calc-mask-vector
)
548 (define-key calc-mode-map
"vn" 'calc-rnorm
)
549 (define-key calc-mode-map
"vp" 'calc-pack
)
550 (define-key calc-mode-map
"vr" 'calc-mrow
)
551 (define-key calc-mode-map
"vs" 'calc-subvector
)
552 (define-key calc-mode-map
"vt" 'calc-transpose
)
553 (define-key calc-mode-map
"vu" 'calc-unpack
)
554 (define-key calc-mode-map
"vv" 'calc-reverse-vector
)
555 (define-key calc-mode-map
"vx" 'calc-index
)
556 (define-key calc-mode-map
"vA" 'calc-apply
)
557 (define-key calc-mode-map
"vC" 'calc-cross
)
558 (define-key calc-mode-map
"vD" 'calc-mdet
)
559 (define-key calc-mode-map
"vE" 'calc-set-enumerate
)
560 (define-key calc-mode-map
"vF" 'calc-set-floor
)
561 (define-key calc-mode-map
"vG" 'calc-grade
)
562 (define-key calc-mode-map
"vH" 'calc-histogram
)
563 (define-key calc-mode-map
"vI" 'calc-inner-product
)
564 (define-key calc-mode-map
"vJ" 'calc-conj-transpose
)
565 (define-key calc-mode-map
"vL" 'calc-mlud
)
566 (define-key calc-mode-map
"vM" 'calc-map
)
567 (define-key calc-mode-map
"vN" 'calc-cnorm
)
568 (define-key calc-mode-map
"vO" 'calc-outer-product
)
569 (define-key calc-mode-map
"vR" 'calc-reduce
)
570 (define-key calc-mode-map
"vS" 'calc-sort
)
571 (define-key calc-mode-map
"vT" 'calc-mtrace
)
572 (define-key calc-mode-map
"vU" 'calc-accumulate
)
573 (define-key calc-mode-map
"vV" 'calc-set-union
)
574 (define-key calc-mode-map
"vX" 'calc-set-xor
)
575 (define-key calc-mode-map
"v^" 'calc-set-intersect
)
576 (define-key calc-mode-map
"v-" 'calc-set-difference
)
577 (define-key calc-mode-map
"v~" 'calc-set-complement
)
578 (define-key calc-mode-map
"v:" 'calc-set-span
)
579 (define-key calc-mode-map
"v#" 'calc-set-cardinality
)
580 (define-key calc-mode-map
"v+" 'calc-remove-duplicates
)
581 (define-key calc-mode-map
"v&" 'calc-inv
)
582 (define-key calc-mode-map
"v<" 'calc-matrix-left-justify
)
583 (define-key calc-mode-map
"v=" 'calc-matrix-center-justify
)
584 (define-key calc-mode-map
"v>" 'calc-matrix-right-justify
)
585 (define-key calc-mode-map
"v." 'calc-full-vectors
)
586 (define-key calc-mode-map
"v/" 'calc-break-vectors
)
587 (define-key calc-mode-map
"v," 'calc-vector-commas
)
588 (define-key calc-mode-map
"v[" 'calc-vector-brackets
)
589 (define-key calc-mode-map
"v]" 'calc-matrix-brackets
)
590 (define-key calc-mode-map
"v{" 'calc-vector-braces
)
591 (define-key calc-mode-map
"v}" 'calc-matrix-brackets
)
592 (define-key calc-mode-map
"v(" 'calc-vector-parens
)
593 (define-key calc-mode-map
"v)" 'calc-matrix-brackets
)
594 ;; We can't rely on the automatic upper->lower conversion because
595 ;; in the global map V is explicitly bound, so we need to bind it
596 ;; explicitly as well :-( --stef
597 (define-key calc-mode-map
"V" (lookup-key calc-mode-map
"v"))
599 (define-key calc-mode-map
"z" 'nil
)
600 (define-key calc-mode-map
"z?" 'calc-z-prefix-help
)
602 (define-key calc-mode-map
"Z" 'nil
)
603 (define-key calc-mode-map
"Z?" 'calc-shift-Z-prefix-help
)
604 (define-key calc-mode-map
"ZC" 'calc-user-define-composition
)
605 (define-key calc-mode-map
"ZD" 'calc-user-define
)
606 (define-key calc-mode-map
"ZE" 'calc-user-define-edit
)
607 (define-key calc-mode-map
"ZF" 'calc-user-define-formula
)
608 (define-key calc-mode-map
"ZG" 'calc-get-user-defn
)
609 (define-key calc-mode-map
"ZI" 'calc-user-define-invocation
)
610 (define-key calc-mode-map
"ZK" 'calc-user-define-kbd-macro
)
611 (define-key calc-mode-map
"ZP" 'calc-user-define-permanent
)
612 (define-key calc-mode-map
"ZS" 'calc-edit-user-syntax
)
613 (define-key calc-mode-map
"ZT" 'calc-timing
)
614 (define-key calc-mode-map
"ZU" 'calc-user-undefine
)
615 (define-key calc-mode-map
"Z[" 'calc-kbd-if
)
616 (define-key calc-mode-map
"Z:" 'calc-kbd-else
)
617 (define-key calc-mode-map
"Z|" 'calc-kbd-else-if
)
618 (define-key calc-mode-map
"Z]" 'calc-kbd-end-if
)
619 (define-key calc-mode-map
"Z<" 'calc-kbd-repeat
)
620 (define-key calc-mode-map
"Z>" 'calc-kbd-end-repeat
)
621 (define-key calc-mode-map
"Z(" 'calc-kbd-for
)
622 (define-key calc-mode-map
"Z)" 'calc-kbd-end-for
)
623 (define-key calc-mode-map
"Z{" 'calc-kbd-loop
)
624 (define-key calc-mode-map
"Z}" 'calc-kbd-end-loop
)
625 (define-key calc-mode-map
"Z/" 'calc-kbd-break
)
626 (define-key calc-mode-map
"Z`" 'calc-kbd-push
)
627 (define-key calc-mode-map
"Z'" 'calc-kbd-pop
)
628 (define-key calc-mode-map
"Z=" 'calc-kbd-report
)
629 (define-key calc-mode-map
"Z#" 'calc-kbd-query
)
635 (define-key calc-mode-map
(format "c%c" x
) 'calc-clean-num
)
636 (define-key calc-mode-map
(format "j%c" x
) 'calc-select-part
)
637 (define-key calc-mode-map
(format "r%c" x
) 'calc-recall-quick
)
638 (define-key calc-mode-map
(format "s%c" x
) 'calc-store-quick
)
639 (define-key calc-mode-map
(format "t%c" x
) 'calc-store-into-quick
)
640 (define-key calc-mode-map
(format "u%c" x
) 'calc-quick-units
)))
643 (or calc-emacs-type-19
(progn
645 (while (and (<= i ?z
) (vectorp calc-mode-map
))
646 (if (eq (car-safe (aref calc-mode-map i
)) 'keymap
)
647 (aset calc-mode-map i
648 (cons 'keymap
(cons (cons ?\e
(aref calc-mode-map i
))
649 (cdr (aref calc-mode-map i
))))))
652 (setq calc-alg-map
(copy-sequence calc-mode-map
)
653 calc-alg-esc-map
(copy-sequence esc-map
))
656 (or (memq i
'(?
' ?
` ?
= ??
))
657 (aset calc-alg-map i
'calc-auto-algebraic-entry
))
658 (or (memq i
'(?
# ?x ?
0 ?
1 ?
2 ?
3 ?
4 ?
5 ?
6 ?
7 ?
8 ?
9))
659 (aset calc-alg-esc-map i
(aref calc-mode-map i
)))
661 (define-key calc-alg-map
"\e" calc-alg-esc-map
)
662 (define-key calc-alg-map
"\e\t" 'calc-roll-up
)
663 (define-key calc-alg-map
"\e\C-m" 'calc-last-args-stub
)
664 (define-key calc-alg-map
"\e\177" 'calc-pop-above
)
667 ;; The following is a relic for backward compatability only.
668 ;; The calc-define property list is now the recommended method.
669 (if (and (boundp 'calc-ext-defs
)
673 (message "Evaluating calc-ext-defs...")
674 (eval (cons 'progn calc-ext-defs
))
675 (setq calc-ext-defs nil
)))
677 ;;;; (Autoloads here)
678 (mapcar (function (lambda (x)
679 (mapcar (function (lambda (func)
680 (autoload func
(car x
)))) (cdr x
))))
683 ("calc-alg" calc-Need-calc-alg calc-has-rules
684 calc-modify-simplify-mode calcFunc-collect calcFunc-esimplify
685 calcFunc-islin calcFunc-islinnt calcFunc-lin calcFunc-linnt
686 calcFunc-simplify calcFunc-subst math-beforep
687 math-build-polynomial-expr math-expand-formula math-expr-contains
688 math-expr-contains-count math-expr-depends math-expr-height
689 math-expr-subst math-expr-weight math-integer-plus math-is-linear
690 math-is-multiple math-is-polynomial math-linear-in math-multiple-of
691 math-need-std-simps math-poly-depends math-poly-mix math-poly-mul
692 math-poly-simplify math-poly-zerop math-polynomial-base
693 math-polynomial-p math-recompile-eval-rules math-simplify
694 math-simplify-exp math-simplify-extended math-simplify-sqrt
695 math-to-simple-fraction
)
697 ("calcalg2" calc-Need-calc-alg-2 calcFunc-asum calcFunc-deriv
698 calcFunc-ffinv calcFunc-finv calcFunc-fsolve calcFunc-gpoly
699 calcFunc-integ calcFunc-poly calcFunc-prod calcFunc-roots
700 calcFunc-solve calcFunc-sum calcFunc-table calcFunc-taylor
701 calcFunc-tderiv math-expr-calls math-integral-q02 math-integral-q12
702 math-integral-rational-funcs math-lcm-denoms math-looks-evenp
703 math-poly-all-roots math-prod-rec math-reject-solution math-solve-eqn
704 math-solve-for math-sum-rec math-try-integral
)
706 ("calcalg3" calc-Need-calc-alg-3 calcFunc-efit calcFunc-fit
707 calcFunc-fitdummy calcFunc-fitparam calcFunc-fitvar
708 calcFunc-hasfitparams calcFunc-hasfitvars calcFunc-maximize
709 calcFunc-minimize calcFunc-ninteg calcFunc-polint calcFunc-ratint
710 calcFunc-root calcFunc-wmaximize calcFunc-wminimize calcFunc-wroot
711 calcFunc-xfit math-find-minimum math-find-root math-ninteg-evaluate
712 math-ninteg-midpoint math-ninteg-romberg math-poly-interp
)
714 ("calc-arith" calc-Need-calc-arith calcFunc-abs calcFunc-abssqr
715 calcFunc-add calcFunc-ceil calcFunc-decr calcFunc-deven calcFunc-dimag
716 calcFunc-dint calcFunc-div calcFunc-dnatnum calcFunc-dneg
717 calcFunc-dnonneg calcFunc-dnonzero calcFunc-dnumint calcFunc-dodd
718 calcFunc-dpos calcFunc-drange calcFunc-drat calcFunc-dreal
719 calcFunc-dscalar calcFunc-fceil calcFunc-ffloor calcFunc-float
720 calcFunc-fround calcFunc-frounde calcFunc-froundu calcFunc-ftrunc
721 calcFunc-idiv calcFunc-incr calcFunc-mant calcFunc-max calcFunc-min
722 calcFunc-mod calcFunc-mul calcFunc-neg calcFunc-percent calcFunc-pow
723 calcFunc-relch calcFunc-round calcFunc-rounde calcFunc-roundu
724 calcFunc-scf calcFunc-sub calcFunc-xpon math-abs math-abs-approx
725 math-add-objects-fancy math-add-or-sub math-add-symb-fancy
726 math-ceiling math-combine-prod math-combine-sum math-div-by-zero
727 math-div-objects-fancy math-div-symb-fancy math-div-zero
728 math-float-fancy math-floor-fancy math-floor-special math-guess-if-neg
729 math-intv-constp math-known-evenp math-known-imagp math-known-integerp
730 math-known-matrixp math-known-negp math-known-nonnegp
731 math-known-nonposp math-known-nonzerop math-known-num-integerp
732 math-known-oddp math-known-posp math-known-realp math-known-scalarp
733 math-max math-min math-mod-fancy math-mul-float math-mul-objects-fancy
734 math-mul-or-div math-mul-symb-fancy math-mul-zero math-neg-fancy
735 math-neg-float math-okay-neg math-possible-signs math-possible-types
736 math-pow-fancy math-pow-mod math-pow-of-zero math-pow-zero
737 math-quarter-integer math-round math-setup-declarations math-sqr
738 math-sqr-float math-trunc-fancy math-trunc-special
)
740 ("calc-bin" calc-Need-calc-bin calcFunc-and calcFunc-ash
741 calcFunc-clip calcFunc-diff calcFunc-lsh calcFunc-not calcFunc-or
742 calcFunc-rash calcFunc-rot calcFunc-rsh calcFunc-xor math-clip
743 math-compute-max-digits math-convert-radix-digits math-float-parts
744 math-format-bignum-binary math-format-bignum-hex
745 math-format-bignum-octal math-format-bignum-radix math-format-binary
746 math-format-radix math-format-radix-float math-integer-log2
747 math-power-of-2 math-radix-float-power
)
749 ("calc-comb" calc-Need-calc-comb calc-report-prime-test
750 calcFunc-choose calcFunc-dfact calcFunc-egcd calcFunc-fact
751 calcFunc-gcd calcFunc-lcm calcFunc-moebius calcFunc-nextprime
752 calcFunc-perm calcFunc-prevprime calcFunc-prfac calcFunc-prime
753 calcFunc-random calcFunc-shuffle calcFunc-stir1 calcFunc-stir2
754 calcFunc-totient math-init-random-base math-member math-prime-test
757 ("calccomp" calc-Need-calc-comp calcFunc-cascent calcFunc-cdescent
758 calcFunc-cheight calcFunc-cwidth math-comp-ascent math-comp-descent
759 math-comp-height math-comp-width math-compose-expr
760 math-composition-to-string math-stack-value-offset-fancy
761 math-vector-is-string math-vector-to-string
)
763 ("calc-cplx" calc-Need-calc-cplx calcFunc-arg calcFunc-conj
764 calcFunc-im calcFunc-polar calcFunc-re calcFunc-rect math-complex
765 math-fix-circular math-imaginary math-imaginary-i math-normalize-polar
766 math-polar math-want-polar
)
768 ("calc-embed" calc-Need-calc-embed calc-do-embedded
769 calc-do-embedded-activate calc-embedded-evaluate-expr
770 calc-embedded-modes-change calc-embedded-var-change
)
772 ("calc-fin" calc-Need-calc-fin calc-to-percentage calcFunc-ddb
773 calcFunc-fv calcFunc-fvb calcFunc-fvl calcFunc-irr calcFunc-irrb
774 calcFunc-nper calcFunc-nperb calcFunc-nperl calcFunc-npv calcFunc-npvb
775 calcFunc-pmt calcFunc-pmtb calcFunc-pv calcFunc-pvb calcFunc-pvl
776 calcFunc-rate calcFunc-rateb calcFunc-ratel calcFunc-sln calcFunc-syd
)
778 ("calc-forms" calc-Need-calc-forms calcFunc-badd calcFunc-bsub
779 calcFunc-date calcFunc-day calcFunc-dsadj calcFunc-hms
780 calcFunc-holiday calcFunc-hour calcFunc-incmonth calcFunc-incyear
781 calcFunc-intv calcFunc-julian calcFunc-makemod calcFunc-minute
782 calcFunc-month calcFunc-newmonth calcFunc-newweek calcFunc-newyear
783 calcFunc-now calcFunc-pwday calcFunc-sdev calcFunc-second
784 calcFunc-time calcFunc-tzconv calcFunc-tzone calcFunc-unixtime
785 calcFunc-weekday calcFunc-year calcFunc-yearday math-combine-intervals
786 math-date-parts math-date-to-dt math-div-mod math-dt-to-date
787 math-format-date math-from-business-day math-from-hms math-make-intv
788 math-make-mod math-make-sdev math-mod-intv math-normalize-hms
789 math-normalize-mod math-parse-date math-read-angle-brackets
790 math-setup-add-holidays math-setup-holidays math-setup-year-holidays
791 math-sort-intv math-to-business-day math-to-hms
)
793 ("calc-frac" calc-Need-calc-frac calc-add-fractions
794 calc-div-fractions calc-mul-fractions calcFunc-fdiv calcFunc-frac
797 ("calc-funcs" calc-Need-calc-funcs calc-prob-dist calcFunc-bern
798 calcFunc-besJ calcFunc-besY calcFunc-beta calcFunc-betaB
799 calcFunc-betaI calcFunc-erf calcFunc-erfc calcFunc-euler
800 calcFunc-gamma calcFunc-gammaG calcFunc-gammaP calcFunc-gammaQ
801 calcFunc-gammag calcFunc-ltpb calcFunc-ltpc calcFunc-ltpf
802 calcFunc-ltpn calcFunc-ltpp calcFunc-ltpt calcFunc-utpb calcFunc-utpc
803 calcFunc-utpf calcFunc-utpn calcFunc-utpp calcFunc-utpt
804 math-bernoulli-number math-gammap1-raw
)
806 ("calc-graph" calc-Need-calc-graph calc-graph-show-tty
)
808 ("calc-help" calc-Need-calc-help
)
810 ("calc-incom" calc-Need-calc-incom calc-digit-dots
)
812 ("calc-keypd" calc-Need-calc-keypd calc-do-keypad
813 calc-keypad-x-left-click calc-keypad-x-middle-click
814 calc-keypad-x-right-click
)
816 ("calc-lang" calc-Need-calc-lang calc-set-language
817 math-read-big-balance math-read-big-rec
)
819 ("calc-map" calc-Need-calc-map calc-get-operator calcFunc-accum
820 calcFunc-afixp calcFunc-anest calcFunc-apply calcFunc-call
821 calcFunc-fixp calcFunc-inner calcFunc-map calcFunc-mapa calcFunc-mapc
822 calcFunc-mapd calcFunc-mapeq calcFunc-mapeqp calcFunc-mapeqr
823 calcFunc-mapr calcFunc-nest calcFunc-outer calcFunc-raccum
824 calcFunc-reduce calcFunc-reducea calcFunc-reducec calcFunc-reduced
825 calcFunc-reducer calcFunc-rreduce calcFunc-rreducea calcFunc-rreducec
826 calcFunc-rreduced calcFunc-rreducer math-build-call
827 math-calcFunc-to-var math-multi-subst math-multi-subst-rec
828 math-var-to-calcFunc
)
830 ("calc-mtx" calc-Need-calc-mat calcFunc-det calcFunc-lud calcFunc-tr
831 math-col-matrix math-lud-solve math-matrix-inv-raw math-matrix-lud
832 math-mul-mat-vec math-mul-mats math-row-matrix
)
834 ("calc-math" calc-Need-calc-math calcFunc-alog calcFunc-arccos
835 calcFunc-arccosh calcFunc-arcsin calcFunc-arcsincos calcFunc-arcsinh
836 calcFunc-arctan calcFunc-arctan2 calcFunc-arctanh calcFunc-cos
837 calcFunc-cosh calcFunc-deg calcFunc-exp calcFunc-exp10 calcFunc-expm1
838 calcFunc-hypot calcFunc-ilog calcFunc-isqrt calcFunc-ln calcFunc-lnp1
839 calcFunc-log calcFunc-log10 calcFunc-nroot calcFunc-rad calcFunc-sin
840 calcFunc-sincos calcFunc-sinh calcFunc-sqr calcFunc-sqrt calcFunc-tan
841 calcFunc-tanh math-arccos-raw math-arcsin-raw math-arctan-raw
842 math-arctan2-raw math-cos-raw math-exp-minus-1-raw math-exp-raw
843 math-from-radians math-from-radians-2 math-hypot math-infinite-dir
844 math-isqrt-small math-ln-raw math-nearly-equal math-nearly-equal-float
845 math-nearly-zerop math-nearly-zerop-float math-nth-root
846 math-sin-cos-raw math-sin-raw math-sqrt math-sqrt-float math-sqrt-raw
847 math-tan-raw math-to-radians math-to-radians-2
)
849 ("calc-mode" calc-Need-calc-mode math-get-modes-vec
)
851 ("calc-poly" calc-Need-calc-poly calcFunc-apart calcFunc-expand
852 calcFunc-expandpow calcFunc-factor calcFunc-factors calcFunc-nrat
853 calcFunc-pcont calcFunc-pdeg calcFunc-pdiv calcFunc-pdivide
854 calcFunc-pdivrem calcFunc-pgcd calcFunc-plead calcFunc-pprim
855 calcFunc-prem math-accum-factors math-atomic-factorp
856 math-div-poly-const math-div-thru math-expand-power math-expand-term
857 math-factor-contains math-factor-expr math-factor-expr-part
858 math-factor-expr-try math-factor-finish math-factor-poly-coefs
859 math-factor-protect math-mul-thru math-padded-polynomial
860 math-partial-fractions math-poly-degree math-poly-deriv-coefs
861 math-poly-gcd-frac-list math-poly-modulus-rec math-ratpoly-p
862 math-to-ratpoly math-to-ratpoly-rec
)
864 ("calc-prog" calc-Need-calc-prog calc-default-formula-arglist
865 calc-execute-kbd-macro calc-finish-user-syntax-edit
866 calc-fix-token-name calc-fix-user-formula calc-read-parse-table
867 calc-read-parse-table-part calc-subsetp calc-write-parse-table
868 calc-write-parse-table-part calcFunc-constant calcFunc-eq calcFunc-geq
869 calcFunc-gt calcFunc-if calcFunc-in calcFunc-integer calcFunc-istrue
870 calcFunc-land calcFunc-leq calcFunc-lnot calcFunc-lor calcFunc-lt
871 calcFunc-negative calcFunc-neq calcFunc-nonvar calcFunc-real
872 calcFunc-refers calcFunc-rmeq calcFunc-typeof calcFunc-variable
873 math-body-refers-to math-break math-composite-inequalities
874 math-do-defmath math-handle-for math-handle-foreach
875 math-normalize-logical-op math-return
)
877 ("calc-rewr" calc-Need-calc-rewr calcFunc-match calcFunc-matches
878 calcFunc-matchnot calcFunc-rewrite calcFunc-vmatches
879 math-apply-rewrites math-compile-patterns math-compile-rewrites
880 math-flatten-lands math-match-patterns math-rewrite
883 ("calc-rules" calc-CommuteRules calc-DistribRules calc-FactorRules
884 calc-FitRules calc-IntegAfterRules calc-InvertRules calc-JumpRules
885 calc-MergeRules calc-Need-calc-rules calc-NegateRules
886 calc-compile-rule-set
)
888 ("calc-sel" calc-Need-calc-sel calc-auto-selection
889 calc-delete-selection calc-encase-atoms calc-find-assoc-parent-formula
890 calc-find-parent-formula calc-find-sub-formula calc-prepare-selection
891 calc-preserve-point calc-replace-selections calc-replace-sub-formula
892 calc-roll-down-with-selections calc-roll-up-with-selections
895 ("calcsel2" calc-Need-calc-sel-2
)
897 ("calc-stat" calc-Need-calc-stat calc-vector-op calcFunc-agmean
898 calcFunc-vcorr calcFunc-vcount calcFunc-vcov calcFunc-vflat
899 calcFunc-vgmean calcFunc-vhmean calcFunc-vmax calcFunc-vmean
900 calcFunc-vmeane calcFunc-vmedian calcFunc-vmin calcFunc-vpcov
901 calcFunc-vprod calcFunc-vpsdev calcFunc-vpvar calcFunc-vsdev
902 calcFunc-vsum calcFunc-vvar math-flatten-many-vecs
)
904 ("calc-store" calc-Need-calc-store calc-read-var-name
905 calc-store-value calc-var-name
)
907 ("calc-stuff" calc-Need-calc-stuff calc-explain-why calcFunc-clean
908 calcFunc-pclean calcFunc-pfloat calcFunc-pfrac
)
910 ("calc-trail" calc-Need-calc-trail
)
912 ("calc-undo" calc-Need-calc-undo
)
914 ("calc-units" calc-Need-calc-units calcFunc-usimplify
915 math-build-units-table math-build-units-table-buffer
916 math-check-unit-name math-convert-temperature math-convert-units
917 math-extract-units math-remove-units math-simplify-units
918 math-single-units-in-expr-p math-to-standard-units
919 math-units-in-expr-p
)
921 ("calc-vec" calc-Need-calc-vec calcFunc-append calcFunc-appendrev
922 calcFunc-arrange calcFunc-cnorm calcFunc-cons calcFunc-cross
923 calcFunc-ctrn calcFunc-cvec calcFunc-diag calcFunc-find
924 calcFunc-getdiag calcFunc-grade calcFunc-head calcFunc-histogram
925 calcFunc-idn calcFunc-index calcFunc-mcol calcFunc-mdims
926 calcFunc-mrcol calcFunc-mrow calcFunc-mrrow calcFunc-pack
927 calcFunc-rcons calcFunc-rdup calcFunc-rev calcFunc-rgrade
928 calcFunc-rhead calcFunc-rnorm calcFunc-rsort calcFunc-rsubvec
929 calcFunc-rtail calcFunc-sort calcFunc-subscr calcFunc-subvec
930 calcFunc-tail calcFunc-trn calcFunc-unpack calcFunc-unpackt
931 calcFunc-vcard calcFunc-vcompl calcFunc-vconcat calcFunc-vconcatrev
932 calcFunc-vdiff calcFunc-vec calcFunc-venum calcFunc-vexp
933 calcFunc-vfloor calcFunc-vint calcFunc-vlen calcFunc-vmask
934 calcFunc-vpack calcFunc-vspan calcFunc-vunion calcFunc-vunpack
935 calcFunc-vxor math-check-for-commas math-clean-set math-copy-matrix
936 math-dimension-error math-dot-product math-flatten-vector math-map-vec
937 math-map-vec-2 math-mat-col math-mimic-ident math-prepare-set
938 math-read-brackets math-reduce-cols math-reduce-vec math-transpose
)
940 ("calc-yank" calc-Need-calc-yank calc-alg-edit calc-clean-newlines
941 calc-do-grab-rectangle calc-do-grab-region calc-finish-stack-edit
942 calc-force-refresh calc-locate-cursor-element calc-show-edit-buffer
)
946 (mapcar (function (lambda (x)
947 (mapcar (function (lambda (cmd)
948 (autoload cmd
(car x
) nil t
))) (cdr x
))))
951 ("calc-alg" calc-alg-evaluate calc-apart calc-collect calc-expand
952 calc-expand-formula calc-factor calc-normalize-rat calc-poly-div
953 calc-poly-div-rem calc-poly-gcd calc-poly-rem calc-simplify
954 calc-simplify-extended calc-substitute
)
956 ("calcalg2" calc-alt-summation calc-derivative
957 calc-dump-integral-cache calc-integral calc-num-integral
958 calc-poly-roots calc-product calc-solve-for calc-summation
959 calc-tabulate calc-taylor
)
961 ("calcalg3" calc-curve-fit calc-find-maximum calc-find-minimum
962 calc-find-root calc-poly-interp
)
964 ("calc-arith" calc-abs calc-abssqr calc-ceiling calc-decrement
965 calc-floor calc-idiv calc-increment calc-mant-part calc-max calc-min
966 calc-round calc-scale-float calc-sign calc-trunc calc-xpon-part
)
968 ("calc-bin" calc-and calc-binary-radix calc-clip calc-decimal-radix
969 calc-diff calc-hex-radix calc-leading-zeros calc-lshift-arith
970 calc-lshift-binary calc-not calc-octal-radix calc-or calc-radix
971 calc-rotate-binary calc-rshift-arith calc-rshift-binary calc-word-size
974 ("calc-comb" calc-choose calc-double-factorial calc-extended-gcd
975 calc-factorial calc-gamma calc-gcd calc-lcm calc-moebius
976 calc-next-prime calc-perm calc-prev-prime calc-prime-factors
977 calc-prime-test calc-random calc-random-again calc-rrandom
978 calc-shuffle calc-totient
)
980 ("calc-cplx" calc-argument calc-complex-notation calc-i-notation
981 calc-im calc-j-notation calc-polar calc-polar-mode calc-re
)
983 ("calc-embed" calc-embedded-copy-formula-as-kill
984 calc-embedded-duplicate calc-embedded-edit calc-embedded-forget
985 calc-embedded-kill-formula calc-embedded-mark-formula
986 calc-embedded-new-formula calc-embedded-next calc-embedded-previous
987 calc-embedded-select calc-embedded-update-formula calc-embedded-word
988 calc-find-globals calc-show-plain
)
990 ("calc-fin" calc-convert-percent calc-fin-ddb calc-fin-fv
991 calc-fin-irr calc-fin-nper calc-fin-npv calc-fin-pmt calc-fin-pv
992 calc-fin-rate calc-fin-sln calc-fin-syd calc-percent-change
)
994 ("calc-forms" calc-business-days-minus calc-business-days-plus
995 calc-convert-time-zones calc-date calc-date-notation calc-date-part
996 calc-from-hms calc-hms-mode calc-hms-notation calc-inc-month
997 calc-julian calc-new-month calc-new-week calc-new-year calc-now
998 calc-time calc-time-zone calc-to-hms calc-unix-time
)
1000 ("calc-frac" calc-fdiv calc-frac-mode calc-fraction
1001 calc-over-notation calc-slash-notation
)
1003 ("calc-funcs" calc-bernoulli-number calc-bessel-J calc-bessel-Y
1004 calc-beta calc-erf calc-erfc calc-euler-number calc-inc-beta
1005 calc-inc-gamma calc-stirling-number calc-utpb calc-utpc calc-utpf
1006 calc-utpn calc-utpp calc-utpt
)
1008 ("calc-graph" calc-graph-add calc-graph-add-3d calc-graph-border
1009 calc-graph-clear calc-graph-command calc-graph-delete
1010 calc-graph-device calc-graph-display calc-graph-fast
1011 calc-graph-fast-3d calc-graph-geometry calc-graph-grid
1012 calc-graph-header calc-graph-hide calc-graph-juggle calc-graph-key
1013 calc-graph-kill calc-graph-line-style calc-graph-log-x
1014 calc-graph-log-y calc-graph-log-z calc-graph-name
1015 calc-graph-num-points calc-graph-output calc-graph-plot
1016 calc-graph-point-style calc-graph-print calc-graph-quit
1017 calc-graph-range-x calc-graph-range-y calc-graph-range-z
1018 calc-graph-show-dumb calc-graph-title-x calc-graph-title-y
1019 calc-graph-title-z calc-graph-view-commands calc-graph-view-trail
1020 calc-graph-zero-x calc-graph-zero-y
)
1022 ("calc-help" calc-a-prefix-help calc-b-prefix-help calc-c-prefix-help
1023 calc-d-prefix-help calc-describe-function calc-describe-key
1024 calc-describe-key-briefly calc-describe-variable calc-f-prefix-help
1025 calc-full-help calc-g-prefix-help calc-help-prefix
1026 calc-hyperbolic-prefix-help calc-inv-hyp-prefix-help
1027 calc-inverse-prefix-help calc-j-prefix-help calc-k-prefix-help
1028 calc-m-prefix-help calc-r-prefix-help calc-s-prefix-help
1029 calc-t-prefix-help calc-u-prefix-help calc-v-prefix-help
)
1031 ("calc-incom" calc-begin-complex calc-begin-vector calc-comma
1032 calc-dots calc-end-complex calc-end-vector calc-semi
)
1034 ("calc-keypd" calc-keypad-menu calc-keypad-menu-back
1037 ("calc-lang" calc-big-language calc-c-language calc-eqn-language
1038 calc-flat-language calc-fortran-language calc-maple-language
1039 calc-mathematica-language calc-normal-language calc-pascal-language
1040 calc-tex-language calc-unformatted-language
)
1042 ("calc-map" calc-accumulate calc-apply calc-inner-product calc-map
1043 calc-map-equation calc-map-stack calc-outer-product calc-reduce
)
1045 ("calc-mtx" calc-mdet calc-mlud calc-mtrace
)
1047 ("calc-math" calc-arccos calc-arccosh calc-arcsin calc-arcsinh
1048 calc-arctan calc-arctan2 calc-arctanh calc-conj calc-cos calc-cosh
1049 calc-degrees-mode calc-exp calc-expm1 calc-hypot calc-ilog
1050 calc-imaginary calc-isqrt calc-ln calc-lnp1 calc-log calc-log10
1051 calc-pi calc-radians-mode calc-sin calc-sincos calc-sinh calc-sqrt
1052 calc-tan calc-tanh calc-to-degrees calc-to-radians
)
1054 ("calc-mode" calc-alg-simplify-mode calc-algebraic-mode
1055 calc-always-load-extensions calc-auto-recompute calc-auto-why
1056 calc-bin-simplify-mode calc-break-vectors calc-center-justify
1057 calc-default-simplify-mode calc-display-raw calc-eng-notation
1058 calc-ext-simplify-mode calc-fix-notation calc-full-trail-vectors
1059 calc-full-vectors calc-get-modes calc-group-char calc-group-digits
1060 calc-infinite-mode calc-left-justify calc-left-label
1061 calc-line-breaking calc-line-numbering calc-matrix-brackets
1062 calc-matrix-center-justify calc-matrix-left-justify calc-matrix-mode
1063 calc-matrix-right-justify calc-mode-record-mode calc-no-simplify-mode
1064 calc-normal-notation calc-num-simplify-mode calc-point-char
1065 calc-right-justify calc-right-label calc-save-modes calc-sci-notation
1066 calc-settings-file-name calc-shift-prefix calc-symbolic-mode
1067 calc-total-algebraic-mode calc-truncate-down calc-truncate-stack
1068 calc-truncate-up calc-units-simplify-mode calc-vector-braces
1069 calc-vector-brackets calc-vector-commas calc-vector-parens
1072 ("calc-prog" calc-call-last-kbd-macro calc-edit-user-syntax
1073 calc-equal-to calc-get-user-defn calc-greater-equal calc-greater-than
1074 calc-in-set calc-kbd-break calc-kbd-else calc-kbd-else-if
1075 calc-kbd-end-for calc-kbd-end-if calc-kbd-end-loop calc-kbd-end-repeat
1076 calc-kbd-for calc-kbd-if calc-kbd-loop calc-kbd-pop calc-kbd-push
1077 calc-kbd-query calc-kbd-repeat calc-kbd-report calc-less-equal
1078 calc-less-than calc-logical-and calc-logical-if calc-logical-not
1079 calc-logical-or calc-not-equal-to calc-pass-errors calc-remove-equal
1080 calc-timing calc-user-define calc-user-define-composition
1081 calc-user-define-edit calc-user-define-formula
1082 calc-user-define-invocation calc-user-define-kbd-macro
1083 calc-user-define-permanent calc-user-undefine
)
1085 ("calc-rewr" calc-match calc-rewrite calc-rewrite-selection
)
1087 ("calc-sel" calc-break-selections calc-clear-selections
1088 calc-copy-selection calc-del-selection calc-edit-selection
1089 calc-enable-selections calc-enter-selection calc-sel-add-both-sides
1090 calc-sel-div-both-sides calc-sel-evaluate calc-sel-expand-formula
1091 calc-sel-mult-both-sides calc-sel-sub-both-sides
1092 calc-select-additional calc-select-here calc-select-here-maybe
1093 calc-select-less calc-select-more calc-select-next calc-select-once
1094 calc-select-once-maybe calc-select-part calc-select-previous
1095 calc-show-selections calc-unselect
)
1097 ("calcsel2" calc-commute-left calc-commute-right calc-sel-commute
1098 calc-sel-distribute calc-sel-invert calc-sel-isolate
1099 calc-sel-jump-equals calc-sel-merge calc-sel-negate calc-sel-unpack
)
1101 ("calc-stat" calc-vector-correlation calc-vector-count
1102 calc-vector-covariance calc-vector-geometric-mean
1103 calc-vector-harmonic-mean calc-vector-max calc-vector-mean
1104 calc-vector-mean-error calc-vector-median calc-vector-min
1105 calc-vector-pop-covariance calc-vector-pop-sdev
1106 calc-vector-pop-variance calc-vector-product calc-vector-sdev
1107 calc-vector-sum calc-vector-variance
)
1109 ("calc-store" calc-assign calc-copy-variable calc-declare-variable
1110 calc-edit-AlgSimpRules calc-edit-Decls calc-edit-EvalRules
1111 calc-edit-ExtSimpRules calc-edit-FitRules calc-edit-GenCount
1112 calc-edit-Holidays calc-edit-IntegLimit calc-edit-LineStyles
1113 calc-edit-PlotRejects calc-edit-PointStyles calc-edit-TimeZone
1114 calc-edit-Units calc-edit-variable calc-evalto calc-insert-variables
1115 calc-let calc-permanent-variable calc-recall calc-recall-quick
1116 calc-store calc-store-concat calc-store-decr calc-store-div
1117 calc-store-exchange calc-store-incr calc-store-into
1118 calc-store-into-quick calc-store-inv calc-store-map calc-store-minus
1119 calc-store-neg calc-store-plus calc-store-power calc-store-quick
1120 calc-store-times calc-subscript calc-unstore
)
1122 ("calc-stuff" calc-clean calc-clean-num calc-flush-caches
1123 calc-less-recursion-depth calc-more-recursion-depth calc-num-prefix
1124 calc-version calc-why
)
1126 ("calc-trail" calc-trail-backward calc-trail-first calc-trail-forward
1127 calc-trail-in calc-trail-isearch-backward calc-trail-isearch-forward
1128 calc-trail-kill calc-trail-last calc-trail-marker calc-trail-next
1129 calc-trail-out calc-trail-previous calc-trail-scroll-left
1130 calc-trail-scroll-right calc-trail-yank
)
1132 ("calc-undo" calc-last-args calc-redo calc-undo
)
1134 ("calc-units" calc-autorange-units calc-base-units
1135 calc-convert-temperature calc-convert-units calc-define-unit
1136 calc-enter-units-table calc-explain-units calc-extract-units
1137 calc-get-unit-definition calc-permanent-units calc-quick-units
1138 calc-remove-units calc-simplify-units calc-undefine-unit
1139 calc-view-units-table
)
1141 ("calc-vec" calc-arrange-vector calc-build-vector calc-cnorm
1142 calc-conj-transpose calc-cons calc-cross calc-diag
1143 calc-display-strings calc-expand-vector calc-grade calc-head
1144 calc-histogram calc-ident calc-index calc-mask-vector calc-mcol
1145 calc-mrow calc-pack calc-pack-bits calc-remove-duplicates
1146 calc-reverse-vector calc-rnorm calc-set-cardinality
1147 calc-set-complement calc-set-difference calc-set-enumerate
1148 calc-set-floor calc-set-intersect calc-set-span calc-set-union
1149 calc-set-xor calc-sort calc-subvector calc-tail calc-transpose
1150 calc-unpack calc-unpack-bits calc-vector-find calc-vlength
)
1152 ("calc-yank" calc-copy-as-kill calc-copy-region-as-kill
1153 calc-copy-to-buffer calc-edit calc-edit-cancel calc-edit-mode
1154 calc-kill calc-kill-region calc-yank
))))
1156 (defun calc-init-prefixes ()
1157 (if calc-shift-prefix
1159 (define-key calc-mode-map
"A" (lookup-key calc-mode-map
"a"))
1160 (define-key calc-mode-map
"B" (lookup-key calc-mode-map
"b"))
1161 (define-key calc-mode-map
"C" (lookup-key calc-mode-map
"c"))
1162 (define-key calc-mode-map
"D" (lookup-key calc-mode-map
"d"))
1163 (define-key calc-mode-map
"F" (lookup-key calc-mode-map
"f"))
1164 (define-key calc-mode-map
"G" (lookup-key calc-mode-map
"g"))
1165 (define-key calc-mode-map
"J" (lookup-key calc-mode-map
"j"))
1166 (define-key calc-mode-map
"K" (lookup-key calc-mode-map
"k"))
1167 (define-key calc-mode-map
"M" (lookup-key calc-mode-map
"m"))
1168 (define-key calc-mode-map
"S" (lookup-key calc-mode-map
"s"))
1169 (define-key calc-mode-map
"T" (lookup-key calc-mode-map
"t"))
1170 (define-key calc-mode-map
"U" (lookup-key calc-mode-map
"u")))
1171 (define-key calc-mode-map
"A" 'calc-abs
)
1172 (define-key calc-mode-map
"B" 'calc-log
)
1173 (define-key calc-mode-map
"C" 'calc-cos
)
1174 (define-key calc-mode-map
"D" 'calc-redo
)
1175 (define-key calc-mode-map
"F" 'calc-floor
)
1176 (define-key calc-mode-map
"G" 'calc-argument
)
1177 (define-key calc-mode-map
"J" 'calc-conj
)
1178 (define-key calc-mode-map
"K" 'calc-keep-args
)
1179 (define-key calc-mode-map
"M" 'calc-more-recursion-depth
)
1180 (define-key calc-mode-map
"S" 'calc-sin
)
1181 (define-key calc-mode-map
"T" 'calc-tan
)
1182 (define-key calc-mode-map
"U" 'calc-undo
)))
1184 (calc-init-extensions)
1191 (defun calc-clear-command-flag (f)
1192 (setq calc-command-flags
(delq f calc-command-flags
)))
1195 (defun calc-record-message (tag &rest args
)
1196 (let ((msg (apply 'format args
)))
1198 (calc-record msg tag
))
1199 (calc-clear-command-flag 'clear-message
))
1202 (defun calc-normalize-fancy (val)
1203 (let ((simp (if (consp calc-simplify-mode
)
1204 (car calc-simplify-mode
)
1205 calc-simplify-mode
)))
1206 (cond ((eq simp
'binary
)
1207 (let ((s (math-normalize val
)))
1209 (math-clip (math-round s
))
1212 (math-simplify val
))
1214 (math-simplify-extended val
))
1216 (math-simplify-units val
))
1218 (math-normalize val
)))))
1222 (if (boundp 'calc-help-map
)
1224 (setq calc-help-map
(make-keymap))
1225 (define-key calc-help-map
"b" 'calc-describe-bindings
)
1226 (define-key calc-help-map
"c" 'calc-describe-key-briefly
)
1227 (define-key calc-help-map
"f" 'calc-describe-function
)
1228 (define-key calc-help-map
"h" 'calc-full-help
)
1229 (define-key calc-help-map
"i" 'calc-info
)
1230 (define-key calc-help-map
"k" 'calc-describe-key
)
1231 (define-key calc-help-map
"n" 'calc-view-news
)
1232 (define-key calc-help-map
"s" 'calc-info-summary
)
1233 (define-key calc-help-map
"t" 'calc-tutorial
)
1234 (define-key calc-help-map
"v" 'calc-describe-variable
)
1235 (define-key calc-help-map
"\C-c" 'calc-describe-copying
)
1236 (define-key calc-help-map
"\C-d" 'calc-describe-distribution
)
1237 (define-key calc-help-map
"\C-n" 'calc-view-news
)
1238 (define-key calc-help-map
"\C-w" 'calc-describe-no-warranty
)
1239 (define-key calc-help-map
"?" 'calc-help-for-help
)
1240 (define-key calc-help-map
"\C-h" 'calc-help-for-help
))
1242 (defvar calc-prefix-help-phase
0)
1243 (defun calc-do-prefix-help (msgs group key
)
1244 (if calc-full-help-flag
1245 (list msgs group key
)
1248 (setq calc-prefix-help-phase
1249 (if (eq this-command last-command
)
1250 (%
(1+ calc-prefix-help-phase
) (1+ (length msgs
)))
1252 (let ((msg (nth calc-prefix-help-phase msgs
)))
1253 (message "%s" (if msg
1254 (concat group
": " msg
":"
1256 (- (apply 'max
(mapcar 'length msgs
))
1260 (concat " " (char-to-string key
)
1263 (if key
(format "%c-" key
) "")))))
1264 (setq calc-prefix-help-phase
0)
1267 (message "%s: %s: %c-" group
(car msgs
) key
)
1268 (message "%s: (none) %c-" group key
))
1269 (message "%s: %s" group
(car msgs
))))
1270 (and key
(calc-unread-command key
))))
1277 (defun calc-reset (arg)
1280 (or (eq major-mode
'calc-mode
)
1281 (calc-create-buffer))
1282 (if calc-embedded-info
1283 (calc-embedded nil
))
1285 (setq calc-stack nil
))
1286 (setq calc-undo-list nil
1288 (let (calc-stack calc-user-parse-tables calc-standard-date-formats
1289 calc-invocation-macro
)
1290 (mapcar (function (lambda (v) (set v nil
))) calc-local-var-list
)
1291 (mapcar (function (lambda (v) (set (car v
) (nth 1 v
))))
1292 calc-mode-var-list
))
1293 (calc-set-language nil nil t
)
1295 (calc-flush-caches t
)
1296 (run-hooks 'calc-reset-hook
))
1298 (let ((win (get-buffer-window (current-buffer))))
1301 (let ((height (- (window-height win
) 2)))
1302 (set-window-point win
(point))
1303 (or (= height calc-window-height
)
1304 (let ((swin (selected-window)))
1306 (enlarge-window (- calc-window-height height
))
1307 (select-window swin
)))))))
1308 (message "(Calculator reset)"))
1310 ;; What a pain; scroll-left behaves differently when called non-interactively.
1311 (defun calc-scroll-left (n)
1313 (setq prefix-arg
(or n
(/ (window-width) 2)))
1314 (call-interactively #'scroll-left
))
1316 (defun calc-scroll-right (n)
1318 (setq prefix-arg
(or n
(/ (window-width) 2)))
1319 (call-interactively #'scroll-right
))
1321 (defun calc-scroll-up (n)
1324 (scroll-up (or n
(/ (window-height) 2)))
1326 (if (pos-visible-in-window-p (max 1 (- (point-max) 2)))
1327 (if (eq major-mode
'calc-mode
)
1329 (goto-char (point-max))
1330 (set-window-start (selected-window)
1332 (forward-line (- (1- (window-height))))
1334 (forward-line -
1))))
1336 (defun calc-scroll-down (n)
1338 (or (pos-visible-in-window-p 1)
1339 (scroll-down (or n
(/ (window-height) 2)))))
1342 (defun calc-precision (n)
1343 (interactive "NPrecision: ")
1345 (if (< (prefix-numeric-value n
) 3)
1346 (error "Precision must be at least 3 digits")
1347 (calc-change-mode 'calc-internal-prec
(prefix-numeric-value n
)
1348 (and (memq (car calc-float-format
) '(float sci eng
))
1349 (< (nth 1 calc-float-format
)
1350 (if (= calc-number-radix
10) 0 1))))
1351 (calc-record calc-internal-prec
"prec"))
1352 (message "Floating-point precision is %d digits" calc-internal-prec
)))
1355 (defun calc-inverse (&optional n
)
1357 (calc-fancy-prefix 'calc-inverse-flag
"Inverse..." n
))
1359 (defconst calc-fancy-prefix-map
1360 (let ((map (make-sparse-keymap)))
1361 (define-key map
[t] 'calc-fancy-prefix-other-key)
1362 (define-key map (vector meta-prefix-char t) 'calc-fancy-prefix-other-key)
1363 (define-key map [switch-frame] nil)
1364 (define-key map [?\C-u] 'universal-argument)
1365 (define-key map [?0] 'digit-argument)
1366 (define-key map [?1] 'digit-argument)
1367 (define-key map [?2] 'digit-argument)
1368 (define-key map [?3] 'digit-argument)
1369 (define-key map [?4] 'digit-argument)
1370 (define-key map [?5] 'digit-argument)
1371 (define-key map [?6] 'digit-argument)
1372 (define-key map [?7] 'digit-argument)
1373 (define-key map [?8] 'digit-argument)
1374 (define-key map [?9] 'digit-argument)
1376 "Keymap used while processing calc-fancy-prefix.")
1378 (defvar calc-is-keypad-press nil)
1379 (defun calc-fancy-prefix (flag msg n)
1382 (calc-set-command-flag 'keep-flags)
1383 (calc-set-command-flag 'no-align)
1384 (setq prefix (set flag (not (symbol-value flag)))
1386 (message (if prefix msg "")))
1388 (not calc-is-keypad-press)
1389 (if (boundp 'overriding-terminal-local-map)
1390 (setq overriding-terminal-local-map calc-fancy-prefix-map)
1391 (let ((event (calc-read-key t)))
1392 (if (eq (setq last-command-char (car event)) ?\C-u)
1393 (universal-argument)
1394 (if (or (not (integerp last-command-char))
1395 (and (>= last-command-char 0) (< last-command-char ? )
1396 (not (memq last-command-char '(?\e)))))
1397 (calc-wrapper)) ; clear flags if not a Calc command.
1398 (if calc-emacs-type-19
1399 (setq last-command-event (cdr event)))
1400 (if (or (not (integerp last-command-char))
1401 (eq last-command-char ?-))
1402 (calc-unread-command)
1403 (digit-argument n))))))))
1405 (defun calc-fancy-prefix-other-key (arg)
1407 (if (or (not (integerp last-command-char))
1408 (and (>= last-command-char 0) (< last-command-char ? )
1409 (not (eq last-command-char meta-prefix-char))))
1410 (calc-wrapper)) ; clear flags if not a Calc command.
1411 (calc-unread-command)
1412 (setq overriding-terminal-local-map nil))
1414 (defun calc-invert-func ()
1416 (calc-select-buffer)
1417 (setq calc-inverse-flag (not (calc-is-inverse))
1418 calc-hyperbolic-flag (calc-is-hyperbolic)
1419 current-prefix-arg nil)))
1421 (defun calc-is-inverse ()
1424 (defun calc-hyperbolic (&optional n)
1426 (calc-fancy-prefix 'calc-hyperbolic-flag "Hyperbolic..." n))
1428 (defun calc-hyperbolic-func ()
1430 (calc-select-buffer)
1431 (setq calc-inverse-flag (calc-is-inverse)
1432 calc-hyperbolic-flag (not (calc-is-hyperbolic))
1433 current-prefix-arg nil)))
1435 (defun calc-is-hyperbolic ()
1436 calc-hyperbolic-flag)
1438 (defun calc-keep-args (&optional n)
1440 (calc-fancy-prefix 'calc-keep-args-flag "Keep args..." n))
1443 (defun calc-change-mode (var value &optional refresh option)
1445 (setq value (if value
1446 (> (prefix-numeric-value value) 0)
1447 (not (symbol-value var)))))
1448 (or (consp var) (setq var (list var) value (list value)))
1449 (if calc-inverse-flag
1451 (or refresh (error "Not a display-mode command"))
1452 (calc-check-stack 1)
1456 (setq old (cons (symbol-value (car v)) old))
1457 (set (car v) (car value))
1460 (calc-refresh-top 1)
1461 (calc-refresh-evaltos)
1462 (symbol-value (car var)))
1464 (setq old (nreverse old))
1466 (set (car v) (car old))
1469 (if (eq (car var) 'calc-language)
1470 (calc-set-language calc-language calc-language-option t)))))
1474 (or (equal (symbol-value (car v)) (car value))
1476 (set (car v) (car value))
1477 (if (eq (car v) 'calc-float-format)
1478 (setq calc-full-float-format
1479 (list (if (eq (car (car value)) 'fix)
1488 (or (and refresh (calc-do-refresh))
1489 (calc-refresh-evaltos))
1490 (and (eq calc-mode-save-mode 'save)
1491 (not (equal var '(calc-mode-save-mode)))
1492 (calc-save-modes))))
1493 (if calc-embedded-info (calc-embedded-modes-change var))
1494 (symbol-value (car var)))))
1496 (defun calc-toggle-banner ()
1497 "Toggle display of the friendly greeting calc normally shows above the stack."
1499 (setq calc-show-banner (not calc-show-banner))
1502 (defun calc-refresh-top (n)
1507 (let ((entry (calc-top n 'entry))
1508 (calc-undo-list nil) (calc-redo-list nil))
1509 (calc-pop-stack 1 n t)
1510 (calc-push-list (list (car entry)) n (list (nth 2 entry)))))
1514 (let ((entries (calc-top-list n 1 'entry))
1515 (calc-undo-list nil) (calc-redo-list nil))
1516 (calc-pop-stack n 1 t)
1517 (calc-push-list (mapcar 'car entries)
1519 (mapcar (function (lambda (x) (nth 2 x)))
1522 (defvar calc-refreshing-evaltos nil)
1523 (defvar calc-no-refresh-evaltos nil)
1524 (defun calc-refresh-evaltos (&optional which-var)
1525 (and calc-any-evaltos calc-auto-recompute (not calc-no-refresh-evaltos)
1526 (let ((calc-refreshing-evaltos t)
1527 (num (calc-stack-size))
1528 (calc-undo-list nil) (calc-redo-list nil)
1531 (setq value (calc-top num 'entry))
1532 (if (and (not (nth 2 value))
1533 (setq value (car value))
1534 (or (eq (car-safe value) 'calcFunc-evalto)
1535 (and (eq (car-safe value) 'vec)
1536 (eq (car-safe (nth 1 value)) 'calcFunc-evalto))))
1538 (setq new-val (math-normalize value))
1539 (or (equal new-val value)
1541 (calc-push-list (list new-val) num)
1542 (calc-pop-stack 1 (1+ num) t)))))
1543 (setq num (1- num)))))
1544 (and calc-embedded-active which-var
1545 (calc-embedded-var-change which-var)))
1547 (defun calc-push (&rest vals)
1548 (calc-push-list vals))
1550 (defun calc-pop-push (n &rest vals)
1551 (calc-pop-push-list n vals))
1553 (defun calc-pop-push-record (n prefix &rest vals)
1554 (calc-pop-push-record-list n prefix vals))
1557 (defun calc-evaluate (n)
1561 (setq n (calc-stack-size)))
1562 (calc-with-default-simplification
1564 (calc-pop-push-record-list 1 "eval"
1565 (math-evaluate-expr (calc-top (- n)))
1567 (calc-pop-push-record-list n "eval" (mapcar 'math-evaluate-expr
1568 (calc-top-list n)))))
1569 (calc-handle-whys)))
1572 (defun calc-eval-num (n)
1575 (let* ((nn (prefix-numeric-value n))
1576 (calc-internal-prec (cond ((>= nn 3) nn)
1577 ((< nn 0) (max (+ calc-internal-prec nn)
1579 (t calc-internal-prec)))
1580 (calc-symbolic-mode nil))
1581 (calc-with-default-simplification
1582 (calc-pop-push-record 1 "num" (math-evaluate-expr (calc-top 1)))))
1583 (calc-handle-whys)))
1586 (defun calc-execute-extended-command (n)
1588 (let* ((prompt (concat (calc-num-prefix-name n) "M-x "))
1589 (cmd (intern (completing-read prompt obarray 'commandp t "calc-"))))
1591 (command-execute cmd)))
1594 (defun calc-realign (&optional num)
1596 (if (and num (eq major-mode 'calc-mode))
1598 (calc-check-stack num)
1599 (calc-cursor-stack-index num)
1600 (and calc-line-numbering
1602 (if (and calc-embedded-info
1603 (eq (current-buffer) (aref calc-embedded-info 0)))
1605 (goto-char (aref calc-embedded-info 2))
1606 (if (save-excursion (set-buffer (aref calc-embedded-info 1))
1610 (if (get-buffer-window (current-buffer))
1611 (set-window-hscroll (get-buffer-window (current-buffer)) 0))))))
1613 (defvar math-cache-list nil)
1615 (defun calc-var-value (v)
1619 (if (symbolp (symbol-value v))
1620 (set v (funcall (symbol-value v)))
1621 (if (stringp (symbol-value v))
1622 (let ((val (math-read-expr (symbol-value v))))
1623 (if (eq (car-safe val) 'error)
1624 (error "Bad format in variable contents: %s" (nth 2 val))
1626 (symbol-value v)))))
1628 ;;; In the following table, ( OP LOPS ROPS ) means that if an OP
1629 ;;; term appears as the first argument to any LOPS term, or as the
1630 ;;; second argument to any ROPS term, then they should be treated
1631 ;;; as one large term for purposes of associative selection.
1632 (defconst calc-assoc-ops '( ( + ( + - ) ( + ) )
1637 ( calcFunc-land ( calcFunc-land )
1639 ( calcFunc-lor ( calcFunc-lor )
1640 ( calcFunc-lor ) ) ))
1643 (defvar var-CommuteRules 'calc-CommuteRules)
1644 (defvar var-JumpRules 'calc-JumpRules)
1645 (defvar var-DistribRules 'calc-DistribRules)
1646 (defvar var-MergeRules 'calc-MergeRules)
1647 (defvar var-NegateRules 'calc-NegateRules)
1648 (defvar var-InvertRules 'calc-InvertRules)
1651 (defconst calc-tweak-eqn-table '( ( calcFunc-eq calcFunc-eq calcFunc-neq )
1652 ( calcFunc-neq calcFunc-neq calcFunc-eq )
1653 ( calcFunc-lt calcFunc-gt calcFunc-geq )
1654 ( calcFunc-gt calcFunc-lt calcFunc-leq )
1655 ( calcFunc-leq calcFunc-geq calcFunc-gt )
1656 ( calcFunc-geq calcFunc-leq calcFunc-lt ) ))
1661 (defun calc-float (arg)
1664 (calc-unary-op "flt"
1665 (if (calc-is-hyperbolic) 'calcFunc-float 'calcFunc-pfloat)
1669 (defvar calc-gnuplot-process nil)
1672 (defun calc-gnuplot-alive ()
1673 (and calc-gnuplot-process
1675 (buffer-name calc-gnuplot-buffer)
1677 (buffer-name calc-gnuplot-input)
1678 (memq (process-status calc-gnuplot-process) '(run stop))))
1684 (defun calc-load-everything ()
1686 (calc-need-macros) ; calc-macs.el
1687 (calc-record-list nil) ; calc-misc.el
1688 (math-read-exprs "0") ; calc-aent.el
1691 (calc-Need-calc-alg-2)
1692 (calc-Need-calc-alg-3)
1693 (calc-Need-calc-alg)
1694 (calc-Need-calc-arith)
1695 (calc-Need-calc-bin)
1696 (calc-Need-calc-comb)
1697 (calc-Need-calc-comp)
1698 (calc-Need-calc-cplx)
1699 (calc-Need-calc-embed)
1700 (calc-Need-calc-fin)
1701 (calc-Need-calc-forms)
1702 (calc-Need-calc-frac)
1703 (calc-Need-calc-funcs)
1704 (calc-Need-calc-graph)
1705 (calc-Need-calc-help)
1706 (calc-Need-calc-incom)
1707 (calc-Need-calc-keypd)
1708 (calc-Need-calc-lang)
1709 (calc-Need-calc-map)
1710 (calc-Need-calc-mat)
1711 (calc-Need-calc-math)
1712 (calc-Need-calc-mode)
1713 (calc-Need-calc-poly)
1714 (calc-Need-calc-prog)
1715 (calc-Need-calc-rewr)
1716 (calc-Need-calc-rules)
1717 (calc-Need-calc-sel-2)
1718 (calc-Need-calc-sel)
1719 (calc-Need-calc-stat)
1720 (calc-Need-calc-store)
1721 (calc-Need-calc-stuff)
1722 (calc-Need-calc-trail)
1723 (calc-Need-calc-undo)
1724 (calc-Need-calc-units)
1725 (calc-Need-calc-vec)
1726 (calc-Need-calc-yank)
1728 (message "All parts of Calc are now loaded"))
1731 ;;; Vector commands.
1733 (defun calc-concat (arg)
1736 (if (calc-is-inverse)
1737 (if (calc-is-hyperbolic)
1738 (calc-enter-result 2 "apnd" (list 'calcFunc-append
1739 (calc-top 1) (calc-top 2)))
1740 (calc-enter-result 2 "|" (list 'calcFunc-vconcat
1741 (calc-top 1) (calc-top 2))))
1742 (if (calc-is-hyperbolic)
1743 (calc-binary-op "apnd" 'calcFunc-append arg '(vec))
1744 (calc-binary-op "|" 'calcFunc-vconcat arg '(vec) nil '|)))))
1746 (defun calc-append (arg)
1748 (calc-hyperbolic-func)
1752 (defconst calc-arg-values '( ( var ArgA var-ArgA ) ( var ArgB var-ArgB )
1753 ( var ArgC var-ArgC ) ( var ArgD var-ArgD )
1754 ( var ArgE var-ArgE ) ( var ArgF var-ArgF )
1755 ( var ArgG var-ArgG ) ( var ArgH var-ArgH )
1756 ( var ArgI var-ArgI ) ( var ArgJ var-ArgJ )
1759 (defun calc-invent-args (n)
1760 (nreverse (nthcdr (- (length calc-arg-values) n) (reverse calc-arg-values))))
1767 (defun calc-user-key-map ()
1768 (if calc-emacs-type-lucid
1769 (error "User-defined keys are not supported in Lucid Emacs"))
1770 (let ((res (cdr (lookup-key calc-mode-map "z"))))
1771 (if (eq (car (car res)) 27)
1775 (defun calc-z-prefix-help ()
1779 (kmap (sort (copy-sequence (calc-user-key-map))
1780 (function (lambda (x y) (< (car x) (car y))))))
1781 (flags (apply 'logior
1784 (calc-user-function-classify (car k))))
1786 (if (= (logand flags 8) 0)
1787 (calc-user-function-list kmap 7)
1788 (calc-user-function-list kmap 1)
1789 (setq msgs (cons buf msgs)
1791 (calc-user-function-list kmap 6))
1793 (setq msgs (cons buf msgs)))
1794 (calc-do-prefix-help (nreverse msgs) "user" ?z)))
1796 (defun calc-user-function-classify (key)
1797 (cond ((/= key (downcase key)) ; upper-case
1798 (if (assq (downcase key) (calc-user-key-map)) 9 1))
1799 ((/= key (upcase key)) 2) ; lower-case
1803 (defun calc-user-function-list (map flags)
1805 (let* ((key (car (car map)))
1806 (kind (calc-user-function-classify key))
1807 (func (cdr (car map))))
1808 (if (or (= (logand kind flags) 0)
1809 (not (symbolp func)))
1811 (let* ((name (symbol-name func))
1812 (name (if (string-match "\\`calc-" name)
1813 (substring name 5) name))
1814 (pos (string-match (char-to-string key) name))
1817 (if (= (logand kind 3) 0)
1818 (format "`%c' = %s" key name)
1821 (downcase (substring name 0 pos))
1823 (downcase (substring name (1+ pos))))
1827 (char-to-string (upcase key)))))
1828 (if (= (length buf) 0)
1829 (setq buf (concat (if (= flags 1) "SHIFT + " "")
1831 (if (> (+ (length buf) (length desc)) 58)
1832 (setq msgs (cons buf msgs)
1833 buf (concat (if (= flags 1) "SHIFT + " "")
1835 (setq buf (concat buf ", " desc))))))
1836 (calc-user-function-list (cdr map) flags))))
1840 (defun calc-shift-Z-prefix-help ()
1842 (calc-do-prefix-help
1843 '("Define, Undefine, Formula, Kbd-macro, Edit, Get-defn"
1844 "Composition, Syntax; Invocation; Permanent; Timing"
1845 "kbd-macros: [ (if), : (else), | (else-if), ] (end-if)"
1846 "kbd-macros: < > (repeat), ( ) (for), { } (loop)"
1847 "kbd-macros: / (break)"
1848 "kbd-macros: ` (save), ' (restore)")
1854 (defmacro math-defcache (name init form)
1855 (let ((cache-prec (intern (concat (symbol-name name) "-cache-prec")))
1856 (cache-val (intern (concat (symbol-name name) "-cache")))
1857 (last-prec (intern (concat (symbol-name name) "-last-prec")))
1858 (last-val (intern (concat (symbol-name name) "-last"))))
1860 (list 'setq cache-prec (if init (math-numdigs (nth 1 init)) -100))
1861 (list 'setq cache-val (list 'quote init))
1862 (list 'setq last-prec -100)
1863 (list 'setq last-val nil)
1864 (list 'setq 'math-cache-list
1866 (list 'quote cache-prec)
1868 (list 'quote last-prec)
1873 (list '= last-prec 'calc-internal-prec)
1876 (list 'math-normalize
1879 (list '>= cache-prec
1880 'calc-internal-prec)
1884 '((calc-internal-prec
1885 (+ calc-internal-prec
1889 '(+ calc-internal-prec 2)))
1891 last-prec 'calc-internal-prec))
1893 (put 'math-defcache 'lisp-indent-hook 2)
1895 ;;; Betcha didn't know that pi = 16 atan(1/5) - 4 atan(1/239). [F] [Public]
1896 (math-defcache math-pi (float (bigpos 463 238 793 589 653 592 141 3) -21)
1897 (math-add-float (math-mul-float '(float 16 0)
1898 (math-arctan-raw '(float 2 -1)))
1899 (math-mul-float '(float -4 0)
1901 (math-float '(frac 1 239))))))
1903 (math-defcache math-two-pi nil
1904 (math-mul-float (math-pi) '(float 2 0)))
1906 (math-defcache math-pi-over-2 nil
1907 (math-mul-float (math-pi) '(float 5 -1)))
1909 (math-defcache math-pi-over-4 nil
1910 (math-mul-float (math-pi) '(float 25 -2)))
1912 (math-defcache math-pi-over-180 nil
1913 (math-div-float (math-pi) '(float 18 1)))
1915 (math-defcache math-sqrt-pi nil
1916 (math-sqrt-float (math-pi)))
1918 (math-defcache math-sqrt-2 nil
1919 (math-sqrt-float '(float 2 0)))
1921 (math-defcache math-sqrt-12 nil
1922 (math-sqrt-float '(float 12 0)))
1924 (math-defcache math-sqrt-two-pi nil
1925 (math-sqrt-float (math-two-pi)))
1927 (math-defcache math-sqrt-e (float (bigpos 849 146 128 700 270 721 648 1) -21)
1928 (math-add-float '(float 1 0) (math-exp-minus-1-raw '(float 5 -1))))
1930 (math-defcache math-e nil
1931 (math-pow (math-sqrt-e) 2))
1933 (math-defcache math-phi nil
1934 (math-mul-float (math-add-float (math-sqrt-raw '(float 5 0)) '(float 1 0))
1937 (math-defcache math-gamma-const nil
1938 '(float (bigpos 495 467 917 632 470 369 709 646 776 267 677 848 348 672
1939 057 988 235 399 359 593 421 310 024 824 900 120 065 606
1940 328 015 649 156 772 5) -100))
1942 (defun math-half-circle (symb)
1943 (if (eq calc-angle-mode 'rad)
1949 (defun math-full-circle (symb)
1950 (math-mul 2 (math-half-circle symb)))
1952 (defun math-quarter-circle (symb)
1953 (math-div (math-half-circle symb) 2))
1955 (defvar math-expand-formulas nil)
1957 ;;;; Miscellaneous math routines.
1959 ;;; True if A is an odd integer. [P R R] [Public]
1960 (defun math-oddp (a)
1962 (and (memq (car a) '(bigpos bigneg))
1963 (= (% (nth 1 a) 2) 1))
1966 ;;; True if A is a small or big integer. [P x] [Public]
1967 (defun math-integerp (a)
1969 (memq (car-safe a) '(bigpos bigneg))))
1971 ;;; True if A is (numerically) a non-negative integer. [P N] [Public]
1972 (defun math-natnump (a)
1974 (eq (car-safe a) 'bigpos)))
1976 ;;; True if A is a rational (or integer). [P x] [Public]
1977 (defun math-ratp (a)
1979 (memq (car-safe a) '(bigpos bigneg frac))))
1981 ;;; True if A is a real (or rational). [P x] [Public]
1982 (defun math-realp (a)
1984 (memq (car-safe a) '(bigpos bigneg frac float))))
1986 ;;; True if A is a real or HMS form. [P x] [Public]
1987 (defun math-anglep (a)
1989 (memq (car-safe a) '(bigpos bigneg frac float hms))))
1991 ;;; True if A is a number of any kind. [P x] [Public]
1992 (defun math-numberp (a)
1994 (memq (car-safe a) '(bigpos bigneg frac float cplx polar))))
1996 ;;; True if A is a complex number or angle. [P x] [Public]
1997 (defun math-scalarp (a)
1999 (memq (car-safe a) '(bigpos bigneg frac float cplx polar hms))))
2001 ;;; True if A is a vector. [P x] [Public]
2002 (defun math-vectorp (a)
2003 (eq (car-safe a) 'vec))
2005 ;;; True if A is any vector or scalar data object. [P x]
2006 (defun math-objvecp (a) ; [Public]
2008 (memq (car-safe a) '(bigpos bigneg frac float cplx polar
2009 hms date sdev intv mod vec incomplete))))
2011 ;;; True if A is an object not composed of sub-formulas . [P x] [Public]
2012 (defun math-primp (a)
2014 (memq (car-safe a) '(bigpos bigneg frac float cplx polar
2015 hms date mod var))))
2017 ;;; True if A is numerically (but not literally) an integer. [P x] [Public]
2018 (defun math-messy-integerp (a)
2020 ((eq (car-safe a) 'float) (>= (nth 2 a) 0))
2021 ((eq (car-safe a) 'frac) (Math-integerp (math-normalize a)))))
2023 ;;; True if A is numerically an integer. [P x] [Public]
2024 (defun math-num-integerp (a)
2025 (or (Math-integerp a)
2026 (Math-messy-integerp a)))
2028 ;;; True if A is (numerically) a non-negative integer. [P N] [Public]
2029 (defun math-num-natnump (a)
2031 (eq (car-safe a) 'bigpos)
2032 (and (eq (car-safe a) 'float)
2033 (Math-natnump (nth 1 a))
2036 ;;; True if A is an integer or will evaluate to an integer. [P x] [Public]
2037 (defun math-provably-integerp (a)
2038 (or (Math-integerp a)
2039 (and (memq (car-safe a) '(calcFunc-trunc
2047 ;;; True if A is a real or will evaluate to a real. [P x] [Public]
2048 (defun math-provably-realp (a)
2050 (math-provably-integer a)
2051 (memq (car-safe a) '(abs arg))))
2053 ;;; True if A is a non-real, complex number. [P x] [Public]
2054 (defun math-complexp (a)
2055 (memq (car-safe a) '(cplx polar)))
2057 ;;; True if A is a non-real, rectangular complex number. [P x] [Public]
2058 (defun math-rect-complexp (a)
2059 (eq (car-safe a) 'cplx))
2061 ;;; True if A is a non-real, polar complex number. [P x] [Public]
2062 (defun math-polar-complexp (a)
2063 (eq (car-safe a) 'polar))
2065 ;;; True if A is a matrix. [P x] [Public]
2066 (defun math-matrixp (a)
2067 (and (Math-vectorp a)
2068 (Math-vectorp (nth 1 a))
2070 (let ((len (length (nth 1 a))))
2072 (while (and (setq a (cdr a))
2073 (Math-vectorp (car a))
2074 (= (length (car a)) len)))
2077 (defun math-matrixp-step (a len) ; [P L]
2079 (and (Math-vectorp (car a))
2080 (= (length (car a)) len)
2081 (math-matrixp-step (cdr a) len))))
2083 ;;; True if A is a square matrix. [P V] [Public]
2084 (defun math-square-matrixp (a)
2085 (let ((dims (math-mat-dimens a)))
2087 (= (car dims) (nth 1 dims)))))
2089 ;;; True if A is any scalar data object. [P x]
2090 (defun math-objectp (a) ; [Public]
2092 (memq (car-safe a) '(bigpos bigneg frac float cplx
2093 polar hms date sdev intv mod))))
2095 ;;; Verify that A is an integer and return A in integer form. [I N; - x]
2096 (defun math-check-integer (a) ; [Public]
2097 (cond ((integerp a) a) ; for speed
2098 ((math-integerp a) a)
2099 ((math-messy-integerp a)
2101 (t (math-reject-arg a 'integerp))))
2103 ;;; Verify that A is a small integer and return A in integer form. [S N; - x]
2104 (defun math-check-fixnum (a &optional allow-inf) ; [Public]
2105 (cond ((integerp a) a) ; for speed
2106 ((Math-num-integerp a)
2107 (let ((a (math-trunc a)))
2110 (if (or (Math-lessp (lsh -1 -1) a)
2111 (Math-lessp a (- (lsh -1 -1))))
2112 (math-reject-arg a 'fixnump)
2114 ((and allow-inf (equal a '(var inf var-inf)))
2116 ((and allow-inf (equal a '(neg (var inf var-inf))))
2118 (t (math-reject-arg a 'fixnump))))
2120 ;;; Verify that A is an integer >= 0 and return A in integer form. [I N; - x]
2121 (defun math-check-natnum (a) ; [Public]
2122 (cond ((natnump a) a)
2123 ((and (not (math-negp a))
2124 (Math-num-integerp a))
2126 (t (math-reject-arg a 'natnump))))
2128 ;;; Verify that A is in floating-point form, or force it to be a float. [F N]
2129 (defun math-check-float (a) ; [Public]
2130 (cond ((eq (car-safe a) 'float) a)
2131 ((Math-vectorp a) (math-map-vec 'math-check-float a))
2132 ((Math-objectp a) (math-float a))
2135 ;;; Verify that A is a constant.
2136 (defun math-check-const (a &optional exp-ok)
2137 (if (or (math-constp a)
2138 (and exp-ok math-expand-formulas))
2140 (math-reject-arg a 'constp)))
2143 ;;; Coerce integer A to be a small integer. [S I]
2144 (defun math-fixnum (a)
2147 (if (eq (car a) 'bigneg)
2148 (- (math-fixnum-big (cdr a)))
2149 (math-fixnum-big (cdr a)))
2153 (defun math-fixnum-big (a)
2155 (+ (car a) (* (math-fixnum-big (cdr a)) 1000))
2158 (defvar math-simplify-only nil)
2160 (defun math-normalize-fancy (a)
2161 (cond ((eq (car a) 'frac)
2162 (math-make-frac (math-normalize (nth 1 a))
2163 (math-normalize (nth 2 a))))
2165 (let ((real (math-normalize (nth 1 a)))
2166 (imag (math-normalize (nth 2 a))))
2167 (if (and (math-zerop imag)
2168 (not math-simplify-only)) ; oh, what a kludge!
2170 (list 'cplx real imag))))
2171 ((eq (car a) 'polar)
2172 (math-normalize-polar a))
2174 (math-normalize-hms a))
2176 (list 'date (math-normalize (nth 1 a))))
2178 (math-normalize-mod a))
2180 (let ((x (math-normalize (nth 1 a)))
2181 (s (math-normalize (nth 2 a))))
2182 (if (or (and (Math-objectp x) (not (Math-scalarp x)))
2183 (and (Math-objectp s) (not (Math-scalarp s))))
2184 (list 'calcFunc-sdev x s)
2185 (math-make-sdev x s))))
2187 (let ((mask (math-normalize (nth 1 a)))
2188 (lo (math-normalize (nth 2 a)))
2189 (hi (math-normalize (nth 3 a))))
2190 (if (if (eq (car-safe lo) 'date)
2191 (not (eq (car-safe hi) 'date))
2192 (or (and (Math-objectp lo) (not (Math-anglep lo)))
2193 (and (Math-objectp hi) (not (Math-anglep hi)))))
2194 (list 'calcFunc-intv mask lo hi)
2195 (math-make-intv mask lo hi))))
2197 (cons 'vec (mapcar 'math-normalize (cdr a))))
2198 ((eq (car a) 'quote)
2199 (math-normalize (nth 1 a)))
2200 ((eq (car a) 'special-const)
2201 (calc-with-default-simplification
2202 (math-normalize (nth 1 a))))
2204 (cons 'var (cdr a))) ; need to re-cons for selection routines
2205 ((eq (car a) 'calcFunc-if)
2206 (math-normalize-logical-op a))
2207 ((memq (car a) '(calcFunc-lambda calcFunc-quote calcFunc-condition))
2208 (let ((calc-simplify-mode 'none))
2209 (cons (car a) (mapcar 'math-normalize (cdr a)))))
2210 ((eq (car a) 'calcFunc-evalto)
2211 (setq a (or (nth 1 a) 0))
2212 (or calc-refreshing-evaltos
2213 (setq a (let ((calc-simplify-mode 'none)) (math-normalize a))))
2214 (let ((b (if (and (eq (car-safe a) 'calcFunc-assign)
2218 (list 'calcFunc-evalto
2220 (if (eq calc-simplify-mode 'none)
2222 (calc-with-default-simplification
2223 (math-evaluate-expr b))))))
2224 ((or (integerp (car a)) (consp (car a)))
2226 (math-normalize (car a))
2227 (error "Can't use multi-valued function in an expression")))))
2229 (defun math-normalize-nonstandard () ; uses "a"
2230 (if (consp calc-simplify-mode)
2232 (setq calc-simplify-mode 'none
2233 math-simplify-only (car-safe (cdr-safe a)))
2235 (and (symbolp (car a))
2236 (or (eq calc-simplify-mode 'none)
2237 (and (eq calc-simplify-mode 'num)
2238 (let ((aptr (setq a (cons
2240 (mapcar 'math-normalize (cdr a))))))
2241 (while (and aptr (math-constp (car aptr)))
2242 (setq aptr (cdr aptr)))
2244 (cons (car a) (mapcar 'math-normalize (cdr a))))))
2250 ;;; Normalize a bignum digit list by trimming high-end zeros. [L l]
2251 (defun math-norm-bignum (a)
2252 (let ((digs a) (last nil))
2254 (or (eq (car digs) 0) (setq last digs))
2255 (setq digs (cdr digs)))
2261 (defun math-bignum-test (a) ; [B N; B s; b b]
2267 ;;; Return 0 for zero, -1 for negative, 1 for positive. [S n] [Public]
2268 (defun calcFunc-sign (a &optional x)
2269 (let ((signs (math-possible-signs a)))
2270 (cond ((eq signs 4) (or x 1))
2272 ((eq signs 1) (if x (math-neg x) -1))
2273 ((math-looks-negp a) (math-neg (calcFunc-sign (math-neg a))))
2274 (t (calc-record-why 'realp a)
2276 (list 'calcFunc-sign a x)
2277 (list 'calcFunc-sign a))))))
2279 ;;; Return 0 if A is numerically equal to B, <0 if less, >0 if more.
2280 ;;; Arguments must be normalized! [S N N]
2281 (defun math-compare (a b)
2284 (memq (car a) '(var neg * /))
2288 ((and (integerp a) (Math-integerp b))
2290 (if (eq (car b) 'bigpos) -1 1)
2292 ((and (eq (car-safe a) 'bigpos) (Math-integerp b))
2293 (if (eq (car-safe b) 'bigpos)
2294 (math-compare-bignum (cdr a) (cdr b))
2296 ((and (eq (car-safe a) 'bigneg) (Math-integerp b))
2297 (if (eq (car-safe b) 'bigneg)
2298 (math-compare-bignum (cdr b) (cdr a))
2300 ((eq (car-safe a) 'frac)
2301 (if (eq (car-safe b) 'frac)
2302 (math-compare (math-mul (nth 1 a) (nth 2 b))
2303 (math-mul (nth 1 b) (nth 2 a)))
2304 (math-compare (nth 1 a) (math-mul b (nth 2 a)))))
2305 ((eq (car-safe b) 'frac)
2306 (math-compare (math-mul a (nth 2 b)) (nth 1 b)))
2307 ((and (eq (car-safe a) 'float) (eq (car-safe b) 'float))
2308 (if (math-lessp-float a b) -1 1))
2309 ((and (eq (car-safe a) 'date) (eq (car-safe b) 'date))
2310 (math-compare (nth 1 a) (nth 1 b)))
2311 ((and (or (Math-anglep a)
2312 (and (eq (car a) 'cplx) (eq (nth 2 a) 0)))
2314 (and (eq (car b) 'cplx) (eq (nth 2 b) 0))))
2315 (calcFunc-sign (math-add a (math-neg b))))
2316 ((and (eq (car-safe a) 'intv)
2317 (or (Math-anglep b) (eq (car-safe b) 'date)))
2318 (let ((res (math-compare (nth 2 a) b)))
2319 (cond ((eq res 1) 1)
2320 ((and (eq res 0) (memq (nth 1 a) '(0 1))) 1)
2321 ((eq (setq res (math-compare (nth 3 a) b)) -1) -1)
2322 ((and (eq res 0) (memq (nth 1 a) '(0 2))) -1)
2324 ((and (eq (car-safe b) 'intv)
2325 (or (Math-anglep a) (eq (car-safe a) 'date)))
2326 (let ((res (math-compare a (nth 2 b))))
2327 (cond ((eq res -1) -1)
2328 ((and (eq res 0) (memq (nth 1 b) '(0 1))) -1)
2329 ((eq (setq res (math-compare a (nth 3 b))) 1) 1)
2330 ((and (eq res 0) (memq (nth 1 b) '(0 2))) 1)
2332 ((and (eq (car-safe a) 'intv) (eq (car-safe b) 'intv))
2333 (let ((res (math-compare (nth 3 a) (nth 2 b))))
2334 (cond ((eq res -1) -1)
2335 ((and (eq res 0) (or (memq (nth 1 a) '(0 2))
2336 (memq (nth 1 b) '(0 1)))) -1)
2337 ((eq (setq res (math-compare (nth 2 a) (nth 3 b))) 1) 1)
2338 ((and (eq res 0) (or (memq (nth 1 a) '(0 1))
2339 (memq (nth 1 b) '(0 2)))) 1)
2342 (if (or (equal a '(var uinf var-uinf))
2343 (equal a '(var nan var-nan)))
2345 (let ((dira (math-infinite-dir a)))
2346 (if (math-infinitep b)
2347 (if (or (equal b '(var uinf var-uinf))
2348 (equal b '(var nan var-nan)))
2350 (let ((dirb (math-infinite-dir b)))
2351 (cond ((and (eq dira 1) (eq dirb -1)) 1)
2352 ((and (eq dira -1) (eq dirb 1)) -1)
2354 (cond ((eq dira 1) 1)
2358 (if (or (equal b '(var uinf var-uinf))
2359 (equal b '(var nan var-nan)))
2361 (let ((dirb (math-infinite-dir b)))
2362 (cond ((eq dirb 1) -1)
2365 ((and (eq (car-safe a) 'calcFunc-exp)
2366 (eq (car-safe b) '^)
2367 (equal (nth 1 b) '(var e var-e)))
2368 (math-compare (nth 1 a) (nth 2 b)))
2369 ((and (eq (car-safe b) 'calcFunc-exp)
2370 (eq (car-safe a) '^)
2371 (equal (nth 1 a) '(var e var-e)))
2372 (math-compare (nth 2 a) (nth 1 b)))
2373 ((or (and (eq (car-safe a) 'calcFunc-sqrt)
2374 (eq (car-safe b) '^)
2375 (or (equal (nth 2 b) '(frac 1 2))
2376 (equal (nth 2 b) '(float 5 -1))))
2377 (and (eq (car-safe b) 'calcFunc-sqrt)
2378 (eq (car-safe a) '^)
2379 (or (equal (nth 2 a) '(frac 1 2))
2380 (equal (nth 2 a) '(float 5 -1)))))
2381 (math-compare (nth 1 a) (nth 1 b)))
2382 ((eq (car-safe a) 'var)
2385 (if (and (consp a) (consp b)
2386 (eq (car a) (car b))
2387 (math-compare-lists (cdr a) (cdr b)))
2391 ;;; Compare two bignum digit lists, return -1 for A<B, 0 for A=B, 1 for A>B.
2392 (defun math-compare-bignum (a b) ; [S l l]
2395 (if (< (car a) (car b))
2397 (if (> (car a) (car b))
2403 (while (eq (car a) 0) (setq a (cdr a)))
2405 (while (eq (car b) 0) (setq b (cdr b)))
2408 (defun math-compare-lists (a b)
2409 (cond ((null a) (null b))
2411 (t (and (Math-equal (car a) (car b))
2412 (math-compare-lists (cdr a) (cdr b))))))
2414 (defun math-lessp-float (a b) ; [P F F]
2415 (let ((ediff (- (nth 2 a) (nth 2 b))))
2417 (if (>= ediff (+ calc-internal-prec calc-internal-prec))
2418 (if (eq (nth 1 a) 0)
2419 (Math-integer-posp (nth 1 b))
2420 (Math-integer-negp (nth 1 a)))
2421 (Math-lessp (math-scale-int (nth 1 a) ediff)
2423 (if (>= (setq ediff (- ediff))
2424 (+ calc-internal-prec calc-internal-prec))
2425 (if (eq (nth 1 b) 0)
2426 (Math-integer-negp (nth 1 a))
2427 (Math-integer-posp (nth 1 b)))
2428 (Math-lessp (nth 1 a)
2429 (math-scale-int (nth 1 b) ediff))))))
2431 ;;; True if A is numerically equal to B. [P N N] [Public]
2432 (defun math-equal (a b)
2433 (= (math-compare a b) 0))
2435 ;;; True if A is numerically less than B. [P R R] [Public]
2436 (defun math-lessp (a b)
2437 (= (math-compare a b) -1))
2439 ;;; True if A is numerically equal to the integer B. [P N S] [Public]
2440 ;;; B must not be a multiple of 10.
2441 (defun math-equal-int (a b)
2443 (and (eq (car-safe a) 'float)
2450 ;;; Return the dimensions of a matrix as a list. [l x] [Public]
2451 (defun math-mat-dimens (m)
2452 (if (math-vectorp m)
2453 (if (math-matrixp m)
2454 (cons (1- (length m))
2455 (math-mat-dimens (nth 1 m)))
2456 (list (1- (length m))))
2461 (defun calc-binary-op-fancy (name func arg ident unary)
2462 (let ((n (prefix-numeric-value arg)))
2464 (calc-enter-result n
2466 (list 'calcFunc-reduce
2467 (math-calcFunc-to-var func)
2468 (cons 'vec (calc-top-list-n n)))))
2471 (calc-enter-result 1 name (list unary (calc-top-n 1)))))
2474 (calc-enter-result 0 name ident)
2475 (error "Argument must be nonzero")))
2477 (let ((rhs (calc-top-n 1)))
2478 (calc-enter-result (- 1 n)
2483 (calc-top-list-n (- n) 2))))))))
2485 (defun calc-unary-op-fancy (name func arg)
2486 (let ((n (prefix-numeric-value arg)))
2487 (if (= n 0) (setq n (calc-stack-size)))
2489 (calc-enter-result n
2494 (calc-top-list-n n))))
2496 (calc-enter-result 1
2498 (list func (calc-top-n (- n)))
2501 (defvar var-Holidays '(vec (var sat var-sat) (var sun var-sun)))
2502 (defvar var-Decls (list 'vec))
2505 (defun math-inexact-result ()
2506 (and calc-symbolic-mode
2507 (signal 'inexact-result nil)))
2509 (defun math-overflow (&optional exp)
2510 (if (and exp (math-negp exp))
2512 (signal 'math-overflow nil)))
2514 (defun math-underflow ()
2515 (signal 'math-underflow nil))
2517 ;;; Compute the greatest common divisor of A and B. [I I I] [Public]
2518 (defun math-gcd (a b)
2519 (cond ((not (or (consp a) (consp b)))
2520 (if (< a 0) (setq a (- a)))
2521 (if (< b 0) (setq b (- b)))
2533 (if (Math-integer-negp a) (setq a (math-neg a)))
2534 (if (Math-integer-negp b) (setq b (math-neg b)))
2536 (if (Math-natnum-lessp a b)
2538 (while (and (consp a) (not (eq b 0)))
2551 ;;; Evaluate variables in an expression.
2552 (defun math-evaluate-expr (x) ; [Public]
2553 (if calc-embedded-info
2554 (calc-embedded-evaluate-expr x)
2555 (calc-normalize (math-evaluate-expr-rec x))))
2557 (defalias 'calcFunc-evalv 'math-evaluate-expr)
2559 (defun calcFunc-evalvn (x &optional prec)
2562 (or (math-num-integerp prec)
2563 (if (and (math-vectorp prec)
2565 (math-num-integerp (nth 1 prec)))
2566 (setq prec (math-add (nth 1 prec) calc-internal-prec))
2567 (math-reject-arg prec 'integerp)))
2568 (setq prec (math-trunc prec))
2569 (if (< prec 3) (setq prec 3))
2570 (if (> prec calc-internal-prec)
2572 (let ((calc-internal-prec prec))
2573 (calcFunc-evalvn x)))
2574 (let ((calc-internal-prec prec))
2575 (calcFunc-evalvn x))))
2576 (let ((calc-symbolic-mode nil))
2577 (math-evaluate-expr x))))
2579 (defun math-evaluate-expr-rec (x)
2581 (if (memq (car x) '(calcFunc-quote calcFunc-condition
2582 calcFunc-evalto calcFunc-assign))
2583 (if (and (eq (car x) 'calcFunc-assign)
2585 (list (car x) (nth 1 x) (math-evaluate-expr-rec (nth 2 x)))
2587 (if (eq (car x) 'var)
2588 (if (and (calc-var-value (nth 2 x))
2589 (not (eq (car-safe (symbol-value (nth 2 x)))
2591 (let ((val (symbol-value (nth 2 x))))
2592 (if (eq (car-safe val) 'special-const)
2593 (if calc-symbolic-mode
2600 (cons (car x) (mapcar 'math-evaluate-expr-rec (cdr x))))))
2603 (defmacro math-defsimplify (funcs &rest code)
2604 (append '(progn (math-need-std-simps))
2607 (list 'put (list 'quote func) ''math-simplify
2609 (list 'get (list 'quote func) ''math-simplify)
2612 (append '(lambda (expr))
2614 (if (symbolp funcs) (list funcs) funcs))))
2615 (put 'math-defsimplify 'lisp-indent-hook 1)
2617 (defun math-any-floats (expr)
2618 (if (Math-primp expr)
2620 (while (and (setq expr (cdr expr)) (not (math-any-floats (car expr)))))
2623 (defvar var-FactorRules 'calc-FactorRules)
2625 (defun math-map-tree (mmt-func mmt-expr &optional mmt-many)
2626 (or mmt-many (setq mmt-many 1000000))
2627 (math-map-tree-rec mmt-expr))
2629 (defun math-map-tree-rec (mmt-expr)
2631 (let ((mmt-done nil)
2633 (while (not mmt-done)
2634 (while (and (/= mmt-many 0)
2635 (setq mmt-nextval (funcall mmt-func mmt-expr))
2636 (not (equal mmt-expr mmt-nextval)))
2637 (setq mmt-expr mmt-nextval
2638 mmt-many (if (> mmt-many 0) (1- mmt-many) (1+ mmt-many))))
2639 (if (or (Math-primp mmt-expr)
2642 (setq mmt-nextval (cons (car mmt-expr)
2643 (mapcar 'math-map-tree-rec
2645 (if (equal mmt-nextval mmt-expr)
2647 (setq mmt-expr mmt-nextval))))))
2650 (defun math-is-true (expr)
2651 (if (Math-numberp expr)
2652 (not (Math-zerop expr))
2653 (math-known-nonzerop expr)))
2655 (defun math-const-var (expr)
2657 (eq (car expr) 'var)
2658 (or (and (symbolp (nth 2 expr))
2659 (boundp (nth 2 expr))
2660 (eq (car-safe (symbol-value (nth 2 expr))) 'special-const))
2661 (memq (nth 2 expr) '(var-inf var-uinf var-nan)))))
2663 (defmacro math-defintegral (funcs &rest code)
2664 (setq math-integral-cache nil)
2668 (list 'put (list 'quote func) ''math-integral
2670 (list 'get (list 'quote func) ''math-integral)
2673 (append '(lambda (u))
2675 (if (symbolp funcs) (list funcs) funcs))))
2676 (put 'math-defintegral 'lisp-indent-hook 1)
2678 (defmacro math-defintegral-2 (funcs &rest code)
2679 (setq math-integral-cache nil)
2683 (list 'put (list 'quote func) ''math-integral-2
2685 (list 'get (list 'quote func)
2689 (append '(lambda (u v))
2691 (if (symbolp funcs) (list funcs) funcs))))
2692 (put 'math-defintegral-2 'lisp-indent-hook 1)
2694 (defvar var-IntegAfterRules 'calc-IntegAfterRules)
2696 (defvar var-FitRules 'calc-FitRules)
2698 (defvar math-poly-base-variable nil)
2699 (defvar math-poly-neg-powers nil)
2700 (defvar math-poly-mult-powers 1)
2701 (defvar math-poly-frac-powers nil)
2702 (defvar math-poly-exp-base nil)
2704 (defun math-build-var-name (name)
2706 (setq name (intern name)))
2707 (if (string-match "\\`var-." (symbol-name name))
2708 (list 'var (intern (substring (symbol-name name) 4)) name)
2709 (list 'var name (intern (concat "var-" (symbol-name name))))))
2711 (defvar math-simplifying-units nil)
2712 (defvar math-combining-units t)
2714 ;;; Nontrivial number parsing.
2716 (defun math-read-number-fancy (s)
2719 ;; Integer+fractions
2720 ((string-match "^\\([0-9]*\\)[:/]\\([0-9]*\\)[:/]\\([0-9]*\\)$" s)
2721 (let ((int (math-match-substring s 1))
2722 (num (math-match-substring s 2))
2723 (den (math-match-substring s 3)))
2724 (let ((int (if (> (length int) 0) (math-read-number int) 0))
2725 (num (if (> (length num) 0) (math-read-number num) 1))
2726 (den (if (> (length num) 0) (math-read-number den) 1)))
2728 (math-integerp int) (math-integerp num) (math-integerp den)
2729 (not (math-zerop den))
2730 (list 'frac (math-add num (math-mul int den)) den)))))
2733 ((string-match "^\\([0-9]*\\)[:/]\\([0-9]*\\)$" s)
2734 (let ((num (math-match-substring s 1))
2735 (den (math-match-substring s 2)))
2736 (let ((num (if (> (length num) 0) (math-read-number num) 1))
2737 (den (if (> (length num) 0) (math-read-number den) 1)))
2738 (and num den (math-integerp num) (math-integerp den)
2739 (not (math-zerop den))
2740 (list 'frac num den)))))
2743 ((string-match "^\\(.*\\) *mod *\\(.*\\)$" s)
2744 (let* ((n (math-match-substring s 1))
2745 (m (math-match-substring s 2))
2746 (n (math-read-number n))
2747 (m (math-read-number m)))
2748 (and n m (math-anglep n) (math-anglep m)
2752 ((string-match "^\\(.*\\) *\\+/- *\\(.*\\)$" s)
2753 (let* ((x (math-match-substring s 1))
2754 (sigma (math-match-substring s 2))
2755 (x (math-read-number x))
2756 (sigma (math-read-number sigma)))
2757 (and x sigma (math-scalarp x) (math-anglep sigma)
2758 (list 'sdev x sigma))))
2760 ;; Hours (or degrees)
2761 ((or (string-match "^\\([^#^]+\\)[@oOhH]\\(.*\\)$" s)
2762 (string-match "^\\([^#^]+\\)[dD][eE]?[gG]?\\(.*\\)$" s))
2763 (let* ((hours (math-match-substring s 1))
2764 (minsec (math-match-substring s 2))
2765 (hours (math-read-number hours))
2766 (minsec (if (> (length minsec) 0) (math-read-number minsec) 0)))
2768 (math-num-integerp hours)
2769 (not (math-negp hours)) (not (math-negp minsec))
2770 (cond ((math-num-integerp minsec)
2771 (and (Math-lessp minsec 60)
2772 (list 'hms hours minsec 0)))
2773 ((and (eq (car-safe minsec) 'hms)
2774 (math-zerop (nth 1 minsec)))
2775 (math-add (list 'hms hours 0 0) minsec))
2779 ((string-match "^\\([^'#^]+\\)[mM']\\(.*\\)$" s)
2780 (let* ((minutes (math-match-substring s 1))
2781 (seconds (math-match-substring s 2))
2782 (minutes (math-read-number minutes))
2783 (seconds (if (> (length seconds) 0) (math-read-number seconds) 0)))
2784 (and minutes seconds
2785 (math-num-integerp minutes)
2786 (not (math-negp minutes)) (not (math-negp seconds))
2787 (cond ((math-realp seconds)
2788 (and (Math-lessp minutes 60)
2789 (list 'hms 0 minutes seconds)))
2790 ((and (eq (car-safe seconds) 'hms)
2791 (math-zerop (nth 1 seconds))
2792 (math-zerop (nth 2 seconds)))
2793 (math-add (list 'hms 0 minutes 0) seconds))
2797 ((string-match "^\\([^\"#^]+\\)[sS\"]$" s)
2798 (let ((seconds (math-read-number (math-match-substring s 1))))
2799 (and seconds (math-realp seconds)
2800 (not (math-negp seconds))
2801 (Math-lessp seconds 60)
2802 (list 'hms 0 0 seconds))))
2804 ;; Integer+fraction with explicit radix
2805 ((string-match "^\\([0-9]+\\)\\(#\\|\\^\\^\\)\\([0-9a-zA-Z]*\\)[:/]\\([0-9a-zA-Z]*\\)[:/]\\([0-9a-zA-Z]\\)$" s)
2806 (let ((radix (string-to-int (math-match-substring s 1)))
2807 (int (math-match-substring s 3))
2808 (num (math-match-substring s 4))
2809 (den (math-match-substring s 5)))
2810 (let ((int (if (> (length int) 0) (math-read-radix int radix) 0))
2811 (num (if (> (length num) 0) (math-read-radix num radix) 1))
2812 (den (if (> (length den) 0) (math-read-radix den radix) 1)))
2813 (and int num den (not (math-zerop den))
2815 (math-add num (math-mul int den))
2818 ;; Fraction with explicit radix
2819 ((string-match "^\\([0-9]+\\)\\(#\\|\\^\\^\\)\\([0-9a-zA-Z]*\\)[:/]\\([0-9a-zA-Z]*\\)$" s)
2820 (let ((radix (string-to-int (math-match-substring s 1)))
2821 (num (math-match-substring s 3))
2822 (den (math-match-substring s 4)))
2823 (let ((num (if (> (length num) 0) (math-read-radix num radix) 1))
2824 (den (if (> (length den) 0) (math-read-radix den radix) 1)))
2825 (and num den (not (math-zerop den)) (list 'frac num den)))))
2827 ;; Float with explicit radix and exponent
2828 ((or (string-match "^0*\\(\\([2-9]\\|1[0-4]\\)\\(#\\|\\^\\^\\)[0-9a-dA-D.]+\\)[eE]\\([-+]?[0-9]+\\)$" s)
2829 (string-match "^\\(\\([0-9]+\\)\\(#\\|\\^\\^\\)[0-9a-zA-Z.]+\\) *\\* *\\2\\.? *\\^ *\\([-+]?[0-9]+\\)$" s))
2830 (let ((radix (string-to-int (math-match-substring s 2)))
2831 (mant (math-match-substring s 1))
2832 (exp (math-match-substring s 4)))
2833 (let ((mant (math-read-number mant))
2834 (exp (math-read-number exp)))
2836 (math-mul mant (math-pow (math-float radix) exp))))))
2838 ;; Float with explicit radix, no exponent
2839 ((string-match "^\\([0-9]+\\)\\(#\\|\\^\\^\\)\\([0-9a-zA-Z]*\\)\\.\\([0-9a-zA-Z]*\\)$" s)
2840 (let ((radix (string-to-int (math-match-substring s 1)))
2841 (int (math-match-substring s 3))
2842 (fracs (math-match-substring s 4)))
2843 (let ((int (if (> (length int) 0) (math-read-radix int radix) 0))
2844 (frac (if (> (length fracs) 0) (math-read-radix fracs radix) 0))
2845 (calc-prefer-frac nil))
2847 (math-add int (math-div frac (math-pow radix (length fracs))))))))
2849 ;; Integer with explicit radix
2850 ((string-match "^\\([0-9]+\\)\\(#\\|\\^\\^\\)\\([0-9a-zA-Z]+\\)$" s)
2851 (math-read-radix (math-match-substring s 3)
2852 (string-to-int (math-match-substring s 1))))
2854 ;; C language hexadecimal notation
2855 ((and (eq calc-language 'c)
2856 (string-match "^0[xX]\\([0-9a-fA-F]+\\)$" s))
2857 (let ((digs (math-match-substring s 1)))
2858 (math-read-radix digs 16)))
2860 ;; Pascal language hexadecimal notation
2861 ((and (eq calc-language 'pascal)
2862 (string-match "^\\$\\([0-9a-fA-F]+\\)$" s))
2863 (let ((digs (math-match-substring s 1)))
2864 (math-read-radix digs 16)))
2866 ;; Fraction using "/" instead of ":"
2867 ((string-match "^\\([0-9]+\\)/\\([0-9/]+\\)$" s)
2868 (math-read-number (concat (math-match-substring s 1) ":"
2869 (math-match-substring s 2))))
2874 (defun math-read-radix (s r) ; [I X D]
2879 (while (and (< i (length s))
2880 (setq dig (math-read-radix-digit (elt s i)))
2882 (setq res (math-add (math-mul res r) dig)
2884 (and (= i (length s))
2889 ;;; Expression parsing.
2891 (defun math-read-expr (exp-str)
2894 (exp-keep-spaces nil)
2896 (while (setq exp-token (string-match "\\.\\.\\([^.]\\|.[^.]\\)" exp-str))
2897 (setq exp-str (concat (substring exp-str 0 exp-token) "\\dots"
2898 (substring exp-str (+ exp-token 2)))))
2899 (math-build-parse-table)
2901 (let ((val (catch 'syntax (math-read-expr-level 0))))
2903 (list 'error exp-old-pos val)
2904 (if (equal exp-token 'end)
2906 (list 'error exp-old-pos "Syntax error"))))))
2908 (defun math-read-plain-expr (exp-str &optional error-check)
2909 (let* ((calc-language nil)
2910 (math-expr-opers math-standard-opers)
2911 (val (math-read-expr exp-str)))
2913 (eq (car-safe val) 'error)
2914 (error "%s: %s" (nth 2 val) exp-str))
2918 (defun math-read-string ()
2919 (let ((str (read-from-string (concat exp-data "\""))))
2920 (or (and (= (cdr str) (1+ (length exp-data)))
2921 (stringp (car str)))
2922 (throw 'syntax "Error in string constant"))
2924 (append '(vec) (car str) nil)))
2928 ;;; They said it couldn't be done...
2930 (defun math-read-big-expr (str)
2931 (and (> (length calc-left-label) 0)
2932 (string-match (concat "^" (regexp-quote calc-left-label)) str)
2933 (setq str (concat (substring str 0 (match-beginning 0))
2934 (substring str (match-end 0)))))
2935 (and (> (length calc-right-label) 0)
2936 (string-match (concat (regexp-quote calc-right-label) " *$") str)
2937 (setq str (concat (substring str 0 (match-beginning 0))
2938 (substring str (match-end 0)))))
2939 (if (string-match "\\\\[^ \n|]" str)
2940 (if (eq calc-language 'tex)
2941 (math-read-expr str)
2942 (let ((calc-language 'tex)
2943 (calc-language-option nil)
2944 (math-expr-opers (get 'tex 'math-oper-table))
2945 (math-expr-function-mapping (get 'tex 'math-function-table))
2946 (math-expr-variable-mapping (get 'tex 'math-variable-table)))
2947 (math-read-expr str)))
2954 (while (setq new-pos (string-match "\n" str pos))
2955 (setq lines (cons (substring str pos new-pos) lines)
2957 (setq lines (nreverse (cons (substring str pos) lines))
2960 (setq width (max width (length (car p)))
2962 (if (math-read-big-bigp lines)
2964 (math-read-big-rec 0 0 width (length lines)))
2966 '(error 0 "Syntax error"))
2967 (math-read-expr str)))))
2969 (defun math-read-big-bigp (lines)
2973 (height (if (> (length (car lines)) 0) 1 0)))
2974 (while (and (cdr lines)
2979 (len (min (length l1) (length l2))))
2980 (if (> (length l2) 0)
2981 (setq height (1+ height)))
2982 (while (and (< i len)
2983 (or (memq (aref l1 i) '(?\ ?\- ?\_))
2984 (memq (aref l2 i) '(?\ ?\-))
2985 (and (memq (aref l1 i) '(?\| ?\,))
2986 (= (aref l2 i) (aref l1 i)))
2987 (and (eq (aref l1 i) ?\[)
2988 (eq (aref l2 i) ?\[)
2989 (let ((h2 (length l1)))
2990 (setq j (math-read-big-balance
2995 (and (eq (aref l1 i) ?\[)
2996 (eq (aref l2 i) ?\[)
2999 (setq lines (cdr lines)
3001 (or (and (> height 1)
3005 ;;; Nontrivial "flat" formatting.
3007 (defvar math-format-hash-args nil)
3008 (defvar calc-can-abbrev-vectors nil)
3010 (defun math-format-flat-expr-fancy (a prec)
3012 ((eq (car a) 'incomplete)
3013 (format "<incomplete %s>" (nth 1 a)))
3015 (if (or calc-full-trail-vectors (not calc-can-abbrev-vectors)
3017 (concat "[" (math-format-flat-vector (cdr a) ", "
3018 (if (cdr (cdr a)) 0 1000)) "]")
3020 (math-format-flat-expr (nth 1 a) 0) ", "
3021 (math-format-flat-expr (nth 2 a) 0) ", "
3022 (math-format-flat-expr (nth 3 a) 0) ", ..., "
3023 (math-format-flat-expr (nth (1- (length a)) a) 0) "]")))
3025 (concat (if (memq (nth 1 a) '(0 1)) "(" "[")
3026 (math-format-flat-expr (nth 2 a) 1000)
3028 (math-format-flat-expr (nth 3 a) 1000)
3029 (if (memq (nth 1 a) '(0 2)) ")" "]")))
3031 (concat "<" (math-format-date a) ">"))
3032 ((and (eq (car a) 'calcFunc-lambda) (> (length a) 2))
3034 (ap calc-arg-values)
3035 (math-format-hash-args (if (= (length a) 3) 1 t)))
3036 (while (and (cdr p) (equal (car p) (car ap)))
3037 (setq p (cdr p) ap (cdr ap)))
3040 (concat (math-format-flat-vector
3041 (nreverse (cdr (reverse (cdr a)))) ", " 0)
3044 (math-format-flat-expr (nth (1- (length a)) a) 0)
3047 (or (and math-format-hash-args
3048 (let ((p calc-arg-values) (v 1))
3049 (while (and p (not (equal (car p) a)))
3050 (setq p (and (eq math-format-hash-args t) (cdr p))
3053 (if (eq math-format-hash-args 1)
3055 (format "#%d" v)))))
3056 (symbol-name (nth 1 a))))
3057 ((and (memq (car a) '(calcFunc-string calcFunc-bstring))
3059 (math-vectorp (nth 1 a))
3060 (math-vector-is-string (nth 1 a)))
3061 (concat (substring (symbol-name (car a)) 9)
3062 "(" (math-vector-to-string (nth 1 a) t) ")"))
3064 (let ((op (math-assq2 (car a) math-standard-opers)))
3065 (cond ((and op (= (length a) 3))
3066 (if (> prec (min (nth 2 op) (nth 3 op)))
3067 (concat "(" (math-format-flat-expr a 0) ")")
3068 (let ((lhs (math-format-flat-expr (nth 1 a) (nth 2 op)))
3069 (rhs (math-format-flat-expr (nth 2 a) (nth 3 op))))
3071 (if (or (equal op "^") (equal op "_"))
3072 (if (= (aref lhs 0) ?-)
3073 (setq lhs (concat "(" lhs ")")))
3074 (setq op (concat " " op " ")))
3075 (concat lhs op rhs))))
3077 (concat "-" (math-format-flat-expr (nth 1 a) 1000)))
3079 (concat (math-remove-dashes
3080 (if (string-match "\\`calcFunc-\\([a-zA-Z0-9']+\\)\\'"
3081 (symbol-name (car a)))
3082 (math-match-substring (symbol-name (car a)) 1)
3083 (symbol-name (car a))))
3085 (math-format-flat-vector (cdr a) ", " 0)
3088 (defun math-format-flat-vector (vec sep prec)
3090 (let ((buf (math-format-flat-expr (car vec) prec)))
3091 (while (setq vec (cdr vec))
3092 (setq buf (concat buf sep (math-format-flat-expr (car vec) prec))))
3096 (defun math-format-nice-expr (x w)
3097 (cond ((and (eq (car-safe x) 'vec)
3099 (let ((ops '(vec calcFunc-assign calcFunc-condition
3100 calcFunc-schedule calcFunc-iterations
3102 (or (memq (car-safe (nth 1 x)) ops)
3103 (memq (car-safe (nth 2 x)) ops)
3104 (memq (car-safe (nth 3 x)) ops)
3105 calc-break-vectors)))
3106 (concat "[ " (math-format-flat-vector (cdr x) ",\n " 0) " ]"))
3108 (let ((str (math-format-flat-expr x 0))
3110 (or (string-match "\"" str)
3111 (while (<= (setq p (+ pos w)) (length str))
3112 (while (and (> (setq p (1- p)) pos)
3113 (not (= (aref str p) ? ))))
3115 (setq str (concat (substring str 0 p)
3119 (setq pos (+ pos w)))))
3122 (defun math-assq2 (v a)
3123 (while (and a (not (eq v (nth 1 (car a)))))
3127 (defun math-format-number-fancy (a prec)
3129 ((eq (car a) 'float) ; non-decimal radix
3130 (if (Math-integer-negp (nth 1 a))
3131 (concat "-" (math-format-number (math-neg a)))
3132 (let ((str (if (and calc-radix-formatter
3133 (not (memq calc-language '(c pascal))))
3134 (funcall calc-radix-formatter
3136 (math-format-radix-float a prec))
3137 (format "%d#%s" calc-number-radix
3138 (math-format-radix-float a prec)))))
3139 (if (and prec (> prec 191) (string-match "\\*" str))
3140 (concat "(" str ")")
3143 (setq a (math-adjust-fraction a))
3144 (if (> (length (car calc-frac-format)) 1)
3145 (if (Math-integer-negp (nth 1 a))
3146 (concat "-" (math-format-number (math-neg a)))
3147 (let ((q (math-idivmod (nth 1 a) (nth 2 a))))
3148 (concat (let ((calc-frac-format nil))
3149 (math-format-number (car q)))
3150 (substring (car calc-frac-format) 0 1)
3151 (let ((math-radix-explicit-format nil)
3152 (calc-frac-format nil))
3153 (math-format-number (cdr q)))
3154 (substring (car calc-frac-format) 1 2)
3155 (let ((math-radix-explicit-format nil)
3156 (calc-frac-format nil))
3157 (math-format-number (nth 2 a))))))
3158 (concat (let ((calc-frac-format nil))
3159 (math-format-number (nth 1 a)))
3160 (car calc-frac-format)
3161 (let ((math-radix-explicit-format nil)
3162 (calc-frac-format nil))
3163 (math-format-number (nth 2 a))))))
3165 (if (math-zerop (nth 2 a))
3166 (math-format-number (nth 1 a))
3167 (if (null calc-complex-format)
3168 (concat "(" (math-format-number (nth 1 a))
3169 ", " (math-format-number (nth 2 a)) ")")
3170 (if (math-zerop (nth 1 a))
3171 (if (math-equal-int (nth 2 a) 1)
3172 (symbol-name calc-complex-format)
3173 (if (math-equal-int (nth 2 a) -1)
3174 (concat "-" (symbol-name calc-complex-format))
3176 (math-compose-expr (list '* (nth 2 a) '(cplx 0 1)) prec)
3177 (concat (math-format-number (nth 2 a)) " "
3178 (symbol-name calc-complex-format)))))
3180 (math-compose-expr (list (if (math-negp (nth 2 a)) '- '+)
3182 (list 'cplx 0 (math-abs (nth 2 a))))
3184 (concat (math-format-number (nth 1 a))
3185 (if (math-negp (nth 2 a)) " - " " + ")
3187 (list 'cplx 0 (math-abs (nth 2 a))))))))))
3188 ((eq (car a) 'polar)
3189 (concat "(" (math-format-number (nth 1 a))
3190 "; " (math-format-number (nth 2 a)) ")"))
3193 (concat "-" (math-format-number (math-neg a)))
3194 (let ((calc-number-radix 10)
3195 (calc-leading-zeros nil)
3196 (calc-group-digits nil))
3197 (format calc-hms-format
3198 (let ((calc-frac-format '(":" nil)))
3199 (math-format-number (nth 1 a)))
3200 (let ((calc-frac-format '(":" nil)))
3201 (math-format-number (nth 2 a)))
3202 (math-format-number (nth 3 a))))))
3204 (concat (if (memq (nth 1 a) '(0 1)) "(" "[")
3205 (math-format-number (nth 2 a))
3207 (math-format-number (nth 3 a))
3208 (if (memq (nth 1 a) '(0 2)) ")" "]")))
3210 (concat (math-format-number (nth 1 a))
3212 (math-format-number (nth 2 a))))
3214 (math-format-flat-expr a 0))
3215 (t (format "%s" a))))
3217 (defun math-adjust-fraction (a)
3218 (if (nth 1 calc-frac-format)
3220 (if (Math-integerp a) (setq a (list 'frac a 1)))
3221 (let ((g (math-quotient (nth 1 calc-frac-format)
3223 (nth 1 calc-frac-format)))))
3224 (list 'frac (math-mul (nth 1 a) g) (math-mul (nth 2 a) g))))
3227 (defun math-format-bignum-fancy (a) ; [X L]
3228 (let ((str (cond ((= calc-number-radix 10)
3229 (math-format-bignum-decimal a))
3230 ((= calc-number-radix 2)
3231 (math-format-bignum-binary a))
3232 ((= calc-number-radix 8)
3233 (math-format-bignum-octal a))
3234 ((= calc-number-radix 16)
3235 (math-format-bignum-hex a))
3236 (t (math-format-bignum-radix a)))))
3237 (if calc-leading-zeros
3238 (let* ((calc-internal-prec 6)
3239 (digs (math-compute-max-digits (math-abs calc-word-size)
3243 (setq str (concat (make-string (- digs len) ?0) str)))))
3244 (if calc-group-digits
3245 (let ((i (length str))
3246 (g (if (integerp calc-group-digits)
3247 (math-abs calc-group-digits)
3248 (if (memq calc-number-radix '(2 16)) 4 3))))
3251 str (concat (substring str 0 i)
3253 (substring str i))))
3255 (if (and (/= calc-number-radix 10)
3256 math-radix-explicit-format)
3257 (if calc-radix-formatter
3258 (funcall calc-radix-formatter calc-number-radix str)
3259 (format "%d#%s" calc-number-radix str))
3263 (defun math-group-float (str) ; [X X]
3264 (let* ((pt (or (string-match "[^0-9a-zA-Z]" str) (length str)))
3265 (g (if (integerp calc-group-digits) (math-abs calc-group-digits) 3))
3267 (if (and (integerp calc-group-digits) (< calc-group-digits 0))
3268 (while (< (setq i (+ (1+ i) g)) (length str))
3269 (setq str (concat (substring str 0 i)
3272 i (+ i (1- (length calc-group-char))))))
3276 str (concat (substring str 0 i)
3278 (substring str i))))
3281 ;;; Users can redefine this in their .emacs files.
3282 (defvar calc-keypad-user-menu nil
3283 "If non-nil, this describes an additional menu for calc-keypad.
3284 It should contain a list of three rows.
3285 Each row should be a list of six keys.
3286 Each key should be a list of a label string, plus a Calc command name spec.
3287 A command spec is a command name symbol, a keyboard macro string, a
3288 list containing a numeric entry string, or nil.
3289 A key may contain additional specs for Inverse, Hyperbolic, and Inv+Hyp.")
3291 (run-hooks 'calc-ext-load-hook)
3293 ;;; arch-tag: 1814ba7f-a390-49dc-9e25-a5adc205e97e
3294 ;;; calc-ext.el ends here