1 ;;; calc-menu.el --- a menu for Calc
3 ;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
5 ;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
7 ;; This file is part of GNU Emacs.
9 ;; GNU Emacs is free software: you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation, either version 3 of the License, or
12 ;; (at your option) any later version.
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
24 (defvar calc-arithmetic-menu
27 ["-(1:)" calc-change-sign
28 :keys
"n" :active
(>= (calc-stack-size) 1)]
29 ["(2:) + (1:)" calc-plus
30 :keys
"+" :active
(>= (calc-stack-size) 2)]
31 ["(2:) - (1:)" calc-minus
32 :keys
"-" :active
(>= (calc-stack-size) 2)]
33 ["(2:) * (1:)" calc-times
34 :keys
"*" :active
(>= (calc-stack-size) 2)]
35 ["(2:) / (1:)" calc-divide
36 :keys
"/" :active
(>= (calc-stack-size) 2)]
37 ["(2:) ^ (1:)" calc-power
38 :keys
"^" :active
(>= (calc-stack-size) 2)]
42 (let ((calc-inverse-flag t
))
43 (call-interactively 'calc-power
)))
45 :active
(>= (calc-stack-size) 2)
46 :help
"The (1:)th root of (2:)"]
50 (call-interactively 'calc-abs
))
52 :active
(>= (calc-stack-size) 1)
53 :help
"Absolute value"]
57 (call-interactively 'calc-inv
))
59 :active
(>= (calc-stack-size) 1)]
63 (call-interactively 'calc-sqrt
))
65 :active
(>= (calc-stack-size) 1)]
69 (call-interactively 'calc-idiv
))
71 :active
(>= (calc-stack-size) 2)
72 :help
"The integer quotient of (2:) over (1:)"]
76 (call-interactively 'calc-mod
))
78 :active
(>= (calc-stack-size) 2)
79 :help
"The remainder when (2:) is divided by (1:)"])
84 (call-interactively 'calc-floor
))
86 :active
(>= (calc-stack-size) 1)
87 :help
"The greatest integer less than or equal to (1:)"]
91 (call-interactively 'calc-ceiling
))
93 :active
(>= (calc-stack-size) 1)
94 :help
"The smallest integer greater than or equal to (1:)"]
98 (call-interactively 'calc-round
))
100 :active
(>= (calc-stack-size) 1)
101 :help
"The nearest integer to (1:)"]
104 (require 'calc-arith
)
105 (call-interactively 'calc-trunc
))
107 :active
(>= (calc-stack-size) 1)
108 :help
"The integer part of (1:)"])
109 (list "Complex Numbers"
113 (call-interactively 'calc-re
))
115 :active
(>= (calc-stack-size) 1)]
119 (call-interactively 'calc-im
))
121 :active
(>= (calc-stack-size) 1)]
125 (call-interactively 'calc-conj
))
127 :active
(>= (calc-stack-size) 1)
128 :help
"The complex conjugate of (1:)"]
130 (progn (require 'calc-arith
)
131 (call-interactively 'calc-abs
))
133 :active
(>= (calc-stack-size) 1)
134 :help
"The length (absolute value) of (1:)"]
138 (call-interactively 'calc-argument
))
140 :active
(>= (calc-stack-size) 1)
141 :help
"The argument (polar angle) of (1:)"])
143 ["Convert (1:) to a float"
146 (call-interactively 'calc-float
))
148 :active
(>= (calc-stack-size) 1)]
149 ["Convert (1:) to a fraction"
152 (call-interactively 'calc-fraction
))
154 :active
(>= (calc-stack-size) 1)])
159 (call-interactively 'calc-word-size
))
161 ["Clip (1:) to word size"
164 (call-interactively 'calc-clip
))
166 :active
(>= (calc-stack-size) 1)
167 :help
"Reduce (1:) modulo 2^wordsize"]
171 (call-interactively 'calc-and
))
173 :active
(>= (calc-stack-size) 2)
174 :help
"Bitwise AND [modulo 2^wordsize]"]
178 (call-interactively 'calc-or
))
180 :active
(>= (calc-stack-size) 2)
181 :help
"Bitwise inclusive OR [modulo 2^wordsize]"]
185 (call-interactively 'calc-xor
))
187 :active
(>= (calc-stack-size) 2)
188 :help
"Bitwise exclusive OR [modulo 2^wordsize]"]
192 (call-interactively 'calc-diff
))
194 :active
(>= (calc-stack-size) 2)
195 :help
"Bitwise difference [modulo 2^wordsize]"]
199 (call-interactively 'calc-not
))
201 :active
(>= (calc-stack-size) 1)
202 :help
"Bitwise NOT [modulo 2^wordsize]"]
206 (call-interactively 'calc-lshift-binary
))
208 :active
(>= (calc-stack-size) 1)
209 :help
"Shift (1:)[modulo 2^wordsize] one bit left"]
213 (call-interactively 'calc-rshift-binary
))
215 :active
(>= (calc-stack-size) 1)
216 :help
"Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"]
217 ["arithmetic right shift(1:)"
220 (call-interactively 'calc-rshift-arith
))
222 :active
(>= (calc-stack-size) 1)
223 :help
"Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"]
227 (call-interactively 'calc-rotate-binary
))
229 :active
(>= (calc-stack-size) 1)
230 :help
"Rotate (1:)[modulo 2^wordsize] one bit left"])
232 ["Help on Arithmetic"
233 (calc-info-goto-node "Arithmetic")])
234 "Menu for Calc's arithmetic functions.")
236 (defvar calc-scientific-function-menu
237 (list "Scientific Functions"
242 (call-interactively 'calc-pi
))
247 (let ((calc-hyperbolic-flag t
))
248 (call-interactively 'calc-pi
)))
253 (let ((calc-inverse-flag t
)
254 (calc-hyperbolic-flag t
))
255 (call-interactively 'calc-pi
)))
257 :help
"The golden ratio"]
261 (let ((calc-inverse-flag t
))
262 (call-interactively 'calc-pi
)))
264 :help
"Euler's constant"])
265 (list "Logs and Exps"
269 (call-interactively 'calc-ln
))
271 :active
(>= (calc-stack-size) 1)
272 :help
"The natural logarithm"]
276 (call-interactively 'calc-exp
))
278 :active
(>= (calc-stack-size) 1)]
282 (call-interactively 'calc-log10
))
284 :active
(>= (calc-stack-size) 1)
285 :help
"The common logarithm"]
289 (let ((calc-inverse-flag t
))
290 (call-interactively 'calc-log10
)))
292 :active
(>= (calc-stack-size) 1)]
293 ["log(2:) [base(1:)]"
296 (call-interactively 'calc-log
))
298 :active
(>= (calc-stack-size) 2)
299 :help
"The logarithm with an arbitrary base"]
303 :active
(>= (calc-stack-size) 2)])
304 (list "Trigonometric Functions"
308 (call-interactively 'calc-sin
))
310 :active
(>= (calc-stack-size) 1)]
314 (call-interactively 'calc-cos
))
316 :active
(>= (calc-stack-size) 1)]
320 (call-interactively 'calc-tan
))
322 :active
(>= (calc-stack-size) 1)]
326 (call-interactively 'calc-arcsin
))
328 :active
(>= (calc-stack-size) 1)]
332 (call-interactively 'calc-arccos
))
334 :active
(>= (calc-stack-size) 1)]
338 (call-interactively 'calc-arctan
))
340 :active
(>= (calc-stack-size) 1)]
344 (call-interactively 'calc-arctan2
))
346 :active
(>= (calc-stack-size) 2)]
354 :selected
(eq calc-angle-mode
'rad
)]
361 :selected
(eq calc-angle-mode
'deg
)]
368 :selected
(eq calc-angle-mode
'hms
)])
369 (list "Hyperbolic Functions"
373 (call-interactively 'calc-sinh
))
375 :active
(>= (calc-stack-size) 1)]
379 (call-interactively 'calc-cosh
))
381 :active
(>= (calc-stack-size) 1)]
385 (call-interactively 'calc-tanh
))
387 :active
(>= (calc-stack-size) 1)]
391 (call-interactively 'calc-arcsinh
))
393 :active
(>= (calc-stack-size) 1)]
397 (call-interactively 'calc-arccosh
))
399 :active
(>= (calc-stack-size) 1)]
403 (call-interactively 'calc-arctanh
))
405 :active
(>= (calc-stack-size) 1)])
406 (list "Advanced Math Functions"
410 (call-interactively 'calc-gamma
))
412 :active
(>= (calc-stack-size) 1)
413 :help
"The Euler Gamma function"]
416 (require 'calc-funcs
)
417 (call-interactively 'calc-inc-gamma
))
419 :active
(>= (calc-stack-size) 2)
420 :help
"The lower incomplete Gamma function"]
423 (require 'calc-funcs
)
424 (call-interactively 'calc-beta
))
426 :active
(>= (calc-stack-size) 2)
427 :help
"The Euler Beta function"]
430 (require 'calc-funcs
)
431 (call-interactively 'calc-inc-beta
))
433 :active
(>= (calc-stack-size) 3)
434 :help
"The incomplete Beta function"]
437 (require 'calc-funcs
)
438 (call-interactively 'calc-erf
))
440 :active
(>= (calc-stack-size) 1)
441 :help
"The error function"]
444 (require 'calc-funcs
)
445 (call-interactively 'calc-bessel-J
))
447 :active
(>= (calc-stack-size) 2)
448 :help
"The Bessel function of the first kind (of order (2:))"]
451 (require 'calc-funcs
)
452 (call-interactively 'calc-bessel-Y
))
454 :active
(>= (calc-stack-size) 2)
455 :help
"The Bessel function of the second kind (of order (2:))"])
456 (list "Combinatorial Functions"
460 (call-interactively 'calc-gcd
))
462 :active
(>= (calc-stack-size) 2)]
466 (call-interactively 'calc-lcm
))
468 :active
(>= (calc-stack-size) 2)]
472 (call-interactively 'calc-factorial
))
474 :active
(>= (calc-stack-size) 1)]
478 (call-interactively 'calc-choose
))
480 :active
(>= (calc-stack-size) 2)]
481 ["permutations(2:,1:)"
484 (call-interactively 'calc-perm
))
486 :active
(>= (calc-stack-size) 2)]
487 ["Primality test for (1:)"
490 (call-interactively 'calc-prime-test
))
492 :active
(>= (calc-stack-size) 1)
493 :help
"For large (1:), a probabilistic test"]
494 ["Factor (1:) into primes"
497 (call-interactively 'calc-prime-factors
))
499 :active
(>= (calc-stack-size) 1)]
500 ["Next prime after (1:)"
503 (call-interactively 'calc-next-prime
))
505 :active
(>= (calc-stack-size) 1)]
506 ["Previous prime before (1:)"
509 (call-interactively 'calc-prev-prime
))
511 :active
(>= (calc-stack-size) 1)]
515 (call-interactively 'calc-totient
))
517 :active
(>= (calc-stack-size) 1)
518 :help
"Euler's totient function"]
522 (call-interactively 'calc-random
))
524 :active
(>= (calc-stack-size) 1)
525 :help
"A random number >=1 and < (1:)"])
527 ["Help on Scientific Functions"
528 (calc-info-goto-node "Scientific Functions")])
529 "Menu for Calc's scientific functions.")
531 (defvar calc-algebra-menu
533 (list "Simplification"
537 (call-interactively 'calc-simplify
))
539 :active
(>= (calc-stack-size) 1)]
540 ["Simplify (1:) with extended rules"
543 (call-interactively 'calc-simplify-extended
))
545 :active
(>= (calc-stack-size) 1)
546 :help
"Apply possibly unsafe simplifications"])
548 ["Expand formula (1:)"
551 (call-interactively 'calc-expand-formula
))
553 :active
(>= (calc-stack-size) 1)
554 :help
"Expand (1:) into its defining formula, if possible"]
555 ["Evaluate variables in (1:)"
558 (call-interactively 'calc-evaluate
))
560 :active
(>= (calc-stack-size) 1)]
561 ["Make substitution in (1:)"
564 (call-interactively 'calc-substitute
))
566 :active
(>= (calc-stack-size) 1)
568 "Substitute all occurrences of a sub-expression with a new sub-expression"])
573 (call-interactively 'calc-factor
))
575 :active
(>= (calc-stack-size) 1)]
576 ["Collect terms in (1:)"
579 (call-interactively 'calc-collect
))
581 :active
(>= (calc-stack-size) 1)
582 :help
"Arrange as a polynomial in a given variable"]
586 (call-interactively 'calc-expand
))
588 :active
(>= (calc-stack-size) 1)
589 :help
"Apply distributive law everywhere"]
590 ["Find roots of (1:)"
593 (call-interactively 'calc-poly-roots
))
595 :active
(>= (calc-stack-size) 1)])
597 ["Differentiate (1:)"
600 (call-interactively 'calc-derivative
))
602 :active
(>= (calc-stack-size) 1)]
603 ["Integrate (1:) [indefinite]"
606 (call-interactively 'calc-integral
))
608 :active
(>= (calc-stack-size) 1)]
609 ["Integrate (1:) [definite]"
612 (let ((var (read-string "Integration variable: ")))
613 (calc-tabular-command 'calcFunc-integ
"Integration"
614 "intg" nil var nil nil
)))
616 :active
(>= (calc-stack-size) 1)]
617 ["Integrate (1:) [numeric]"
620 (call-interactively 'calc-num-integral
))
622 :active
(>= (calc-stack-size) 1)
623 :help
"Integrate using the open Romberg method"]
624 ["Taylor expand (1:)"
627 (call-interactively 'calc-taylor
))
629 :active
(>= (calc-stack-size) 1)]
630 ["Minimize (2:) [initial guess = (1:)]"
633 (call-interactively 'calc-find-minimum
))
635 :active
(>= (calc-stack-size) 2)
636 :help
"Find a local minimum"]
637 ["Maximize (2:) [initial guess = (1:)]"
640 (call-interactively 'calc-find-maximum
))
642 :active
(>= (calc-stack-size) 2)
643 :help
"Find a local maximum"])
645 ["Solve equation (1:)"
648 (call-interactively 'calc-solve-for
))
650 :active
(>= (calc-stack-size) 1)]
651 ["Solve equation (2:) numerically [initial guess = (1:)]"
654 (call-interactively 'calc-find-root
))
656 :active
(>= (calc-stack-size) 2)]
657 ["Find roots of polynomial (1:)"
660 (call-interactively 'calc-poly-roots
))
662 :active
(>= (calc-stack-size) 1)])
663 (list "Curve Fitting"
664 ["Fit (1:)=[x values, y values] to a curve"
667 (call-interactively 'calc-curve-fit
))
669 :active
(>= (calc-stack-size) 1)])
672 (calc-info-goto-node "Algebra")])
673 "Menu for Calc's algebraic facilities.")
676 (defvar calc-graphics-menu
678 ["Graph 2D [(1:)= y values, (2:)= x values]"
680 (require 'calc-graph
)
681 (call-interactively 'calc-graph-fast
))
683 :active
(>= (calc-stack-size) 2)]
684 ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= x values]"
686 (require 'calc-graph
)
687 (call-interactively 'calc-graph-fast-3d
))
689 :active
(>= (calc-stack-size) 3)]
692 (calc-info-goto-node "Graphics")])
693 "Menu for Calc's graphics.")
696 (defvar calc-vectors-menu
697 (list "Matrices/Vectors"
699 ["(2:) + (1:)" calc-plus
700 :keys
"+" :active
(>= (calc-stack-size) 2)]
701 ["(2:) - (1:)" calc-minus
702 :keys
"-" :active
(>= (calc-stack-size) 2)]
703 ["(2:) * (1:)" calc-times
704 :keys
"*" :active
(>= (calc-stack-size) 2)]
707 (require 'calc-arith
)
708 (call-interactively 'calc-inv
))
710 :active
(>= (calc-stack-size) 1)]
711 ["Create an identity matrix"
714 (call-interactively 'calc-ident
))
719 (call-interactively 'calc-transpose
))
721 :active
(>= (calc-stack-size) 1)]
725 (call-interactively 'calc-mdet
))
727 :active
(>= (calc-stack-size) 1)]
731 (call-interactively 'calc-mtrace
))
733 :active
(>= (calc-stack-size) 1)]
734 ["LUD decompose (1:)"
737 (call-interactively 'calc-mlud
))
739 :active
(>= (calc-stack-size) 1)]
740 ["Extract a row from (1:)"
743 (call-interactively 'calc-mrow
))
745 :active
(>= (calc-stack-size) 1)]
746 ["Extract a column from (1:)"
749 (call-interactively 'calc-mcol
))
751 :active
(>= (calc-stack-size) 1)])
753 ["Extract the first element of (1:)"
756 (call-interactively 'calc-head
))
758 :active
(>= (calc-stack-size) 1)]
759 ["Extract an element from (1:)"
762 (call-interactively 'calc-mrow
))
764 :active
(>= (calc-stack-size) 1)]
768 (call-interactively 'calc-reverse-vector
))
770 :active
(>= (calc-stack-size) 1)]
774 (call-interactively 'calc-unpack
))
776 :active
(>= (calc-stack-size) 1)
777 :help
"Separate the elements of (1:)"]
781 (call-interactively 'calc-cross
))
783 :active
(>= (calc-stack-size) 2)
784 :help
"The cross product in R^3"]
788 :active
(>= (calc-stack-size) 2)
789 :help
"The dot product"]
790 ["Map a function across (1:)"
793 (call-interactively 'calc-map
))
795 :active
(>= (calc-stack-size) 1)
796 :help
"Apply a function to each element"])
797 (list "Vectors As Sets"
798 ["Remove duplicates from (1:)"
801 (call-interactively 'calc-remove-duplicates
))
803 :active
(>= (calc-stack-size) 1)]
807 (call-interactively 'calc-set-union
))
809 :active
(>= (calc-stack-size) 2)]
810 ["(2:) intersect (1:)"
813 (call-interactively 'calc-set-intersect
))
815 :active
(>= (calc-stack-size) 2)]
819 (call-interactively 'calc-set-difference
))
821 :help
"Set difference"
822 :active
(>= (calc-stack-size) 2)])
823 (list "Statistics On Vectors"
827 (call-interactively 'calc-vector-count
))
829 :active
(>= (calc-stack-size) 1)
830 :help
"The number of data values"]
834 (call-interactively 'calc-vector-sum
))
836 :active
(>= (calc-stack-size) 1)
837 :help
"The sum of the data values"]
841 (call-interactively 'calc-vector-max
))
843 :active
(>= (calc-stack-size) 1)
844 :help
"The maximum of the data values"]
848 (call-interactively 'calc-vector-min
))
850 :active
(>= (calc-stack-size) 1)
851 :help
"The minimum of the data values"]
855 (call-interactively 'calc-vector-mean
))
857 :active
(>= (calc-stack-size) 1)
858 :help
"The average (arithmetic mean) of the data values"]
859 ["mean(1:) with error"
862 (call-interactively 'calc-vector-mean-error
))
864 :active
(>= (calc-stack-size) 1)
865 :help
"The average (arithmetic mean) of the data values as an error form"]
869 (call-interactively 'calc-vector-sdev
))
871 :active
(>= (calc-stack-size) 1)
872 :help
"The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"]
876 (call-interactively 'calc-vector-variance
))
878 :active
(>= (calc-stack-size) 1)
879 :help
"The sample variance, sum((values - mean)^2)/(N-1)"]
880 ["population sdev(1:)"
883 (call-interactively 'calc-vector-pop-sdev
))
885 :active
(>= (calc-stack-size) 1)
886 :help
"The population sdev, sqrt[sum((values - mean)^2)/N]"]
887 ["population variance(1:)"
890 (call-interactively 'calc-vector-pop-variance
))
892 :active
(>= (calc-stack-size) 1)
893 :help
"The population variance, sum((values - mean)^2)/N"]
897 (call-interactively 'calc-vector-median
))
899 :active
(>= (calc-stack-size) 1)
900 :help
"The median of the data values"]
904 (call-interactively 'calc-vector-harmonic-mean
))
906 :active
(>= (calc-stack-size) 1)]
907 ["geometric mean(1:)"
910 (call-interactively 'calc-vector-geometric-mean
))
912 :active
(>= (calc-stack-size) 1)]
913 ["arithmetic-geometric mean(1:)"
916 (let ((calc-hyperbolic-flag t
))
917 (call-interactively 'calc-vector-geometric-mean
)))
919 :active
(>= (calc-stack-size) 1)]
921 ;; (progn (require 'calc-arith)
922 ;; (call-interactively 'calc-abs))
924 ;; :active (>= (calc-stack-size) 1)
925 ;; :help "The root-mean-square, or quadratic mean"]
927 ["Abbreviate long vectors"
930 (call-interactively 'calc-full-vectors
))
933 :selected
(not calc-full-vectors
)]
935 ["Help on Matrices/Vectors"
936 (calc-info-goto-node "Matrix Functions")])
937 "Menu for Calc's vector and matrix functions.")
939 (defvar calc-units-menu
941 ["Convert units in (1:)"
943 (require 'calc-units
)
944 (call-interactively 'calc-convert-units
))
946 :active
(>= (calc-stack-size) 1)]
947 ["Convert temperature in (1:)"
949 (require 'calc-units
)
950 (call-interactively 'calc-convert-temperature
))
952 :active
(>= (calc-stack-size) 1)]
953 ["Simplify units in (1:)"
955 (require 'calc-units
)
956 (call-interactively 'calc-simplify-units
))
958 :active
(>= (calc-stack-size) 1)]
961 (require 'calc-units
)
962 (call-interactively 'calc-view-units-table
))
964 (list "Logarithmic Units"
965 ["Convert (1:) to dB (power)"
967 (require 'calc-units
)
968 (call-interactively 'calc-db
))
970 :active
(>= (calc-stack-size) 1)]
971 ["Convert (2:) to dB (power) with reference level (1:)"
973 (require 'calc-units
)
974 (let ((calc-option-flag t
))
975 (call-interactively 'calc-db
)))
977 :active
(>= (calc-stack-size) 2)]
978 ["Convert (1:) to Np (power)"
980 (require 'calc-units
)
981 (call-interactively 'calc-np
))
983 :active
(>= (calc-stack-size) 1)]
984 ["Convert (2:) to Np (power) with reference level (1:)"
986 (require 'calc-units
)
987 (let ((calc-option-flag t
))
988 (call-interactively 'calc-np
)))
990 :active
(>= (calc-stack-size) 2)]
991 ["Convert (1:) to power quantity"
993 (require 'calc-units
)
994 (call-interactively 'calc-lu-quant
))
996 :active
(>= (calc-stack-size) 1)]
997 ["Convert (2:) to power quantity with reference level (1:)"
999 (require 'calc-units
)
1000 (let ((calc-option-flag t
))
1001 (call-interactively 'calc-lu-quant
)))
1003 :active
(>= (calc-stack-size) 2)]
1005 ["Convert (1:) to dB (field)"
1007 (require 'calc-units
)
1008 (let ((calc-hyperbolic-flag t
))
1009 (call-interactively 'calc-db
)))
1011 :active
(>= (calc-stack-size) 1)]
1012 ["Convert (2:) to dB (field) with reference level (1:)"
1014 (require 'calc-units
)
1015 (let ((calc-option-flag t
)
1016 (calc-hyperbolic-flag t
))
1017 (call-interactively 'calc-db
)))
1019 :active
(>= (calc-stack-size) 2)]
1020 ["Convert (1:) to Np (field)"
1022 (require 'calc-units
)
1023 (let ((calc-hyperbolic-flag t
))
1024 (call-interactively 'calc-np
)))
1026 :active
(>= (calc-stack-size) 1)]
1027 ["Convert (2:) to Np (field) with reference level (1:)"
1029 (require 'calc-units
)
1030 (let ((calc-option-flag t
)
1031 (calc-hyperbolic-flag t
))
1032 (call-interactively 'calc-np
)))
1034 :active
(>= (calc-stack-size) 2)]
1035 ["Convert (1:) to field quantity"
1037 (require 'calc-units
)
1038 (let ((calc-hyperbolic-flag t
))
1039 (call-interactively 'calc-lu-quant
)))
1041 :active
(>= (calc-stack-size) 1)]
1042 ["Convert (2:) to field quantity with reference level (1:)"
1044 (require 'calc-units
)
1045 (let ((calc-option-flag t
)
1046 (calc-hyperbolic-flag))
1047 (call-interactively 'calc-lu-quant
)))
1049 :active
(>= (calc-stack-size) 2)])
1050 (list "Musical Notes"
1051 ["Convert (1:) to scientific pitch notation"
1053 (require 'calc-units
)
1054 (call-interactively 'calc-spn
))
1056 :active
(>= (calc-stack-size) 1)]
1057 ["Convert (1:) to midi number"
1059 (require 'calc-units
)
1060 (call-interactively 'calc-midi
))
1062 :active
(>= (calc-stack-size) 1)]
1063 ["Convert (1:) to frequency"
1065 (require 'calc-units
)
1066 (call-interactively 'calc-freq
))
1068 :active
(>= (calc-stack-size) 1)])
1071 (calc-info-goto-node "Units")])
1072 "Menu for Calc's units functions.")
1074 (defvar calc-variables-menu
1076 ["Store (1:) into a variable"
1078 (require 'calc-store
)
1079 (call-interactively 'calc-store
))
1081 :active
(>= (calc-stack-size) 1)]
1082 ["Recall a variable value"
1084 (require 'calc-store
)
1085 (call-interactively 'calc-recall
))
1087 ["Edit the value of a variable"
1089 (require 'calc-store
)
1090 (call-interactively 'calc-edit-variable
))
1092 ["Exchange (1:) with a variable value"
1094 (require 'calc-store
)
1095 (call-interactively 'calc-store-exchange
))
1097 :active
(>= (calc-stack-size) 1)]
1098 ["Clear variable value"
1100 (require 'calc-store
)
1101 (call-interactively 'calc-unstore
))
1103 ["Evaluate variables in (1:)"
1106 (call-interactively 'calc-evaluate
))
1108 :active
(>= (calc-stack-size) 1)]
1109 ["Evaluate (1:), assigning a value to a variable"
1111 (require 'calc-store
)
1112 (call-interactively 'calc-let
))
1114 :active
(>= (calc-stack-size) 1)
1115 :help
"Evaluate (1:) under a temporary assignment of a variable"]
1117 ["Help on Variables"
1118 (calc-info-goto-node "Store and Recall")])
1119 "Menu for Calc's variables.")
1121 (defvar calc-stack-menu
1126 :active
(>= (calc-stack-size) 1)]
1127 ["Switch (1:) and (2:)"
1130 :active
(>= (calc-stack-size) 2)]
1134 :active
(>= (calc-stack-size) 1)]
1137 (require 'calc-yank
)
1138 (call-interactively calc-edit
))
1140 :active
(>= (calc-stack-size) 1)]
1143 (calc-info-goto-node "Stack and Trail")])
1144 "Menu for Calc's stack functions.")
1146 (defvar calc-errors-menu
1150 (require 'calc-undo
)
1151 (call-interactively 'calc-undo
))
1155 (require 'calc-undo
)
1156 (call-interactively 'calc-redo
))
1161 (calc-info-goto-node "Introduction")
1162 (Info-goto-node "Undo"))]))
1164 (defvar calc-modes-menu
1169 (call-interactively 'calc-precision
))
1171 :help
"Set the precision for floating point calculations"]
1174 (require 'calc-frac
)
1175 (call-interactively 'calc-frac-mode
))
1178 :selected calc-prefer-frac
1179 :help
"Leave integer quotients as fractions"]
1183 (require 'calc-mode
)
1184 (calc-symbolic-mode nil
))
1187 :selected calc-symbolic-mode
1188 :help
"Leave functions producing inexact answers in symbolic form"]
1192 (require 'calc-mode
)
1193 (calc-infinite-mode nil
))
1196 :selected calc-infinite-mode
1197 :help
"Let expressions like 1/0 produce infinite results"]
1198 ["Abbreviate long vectors"
1200 (require 'calc-mode
)
1201 (call-interactively 'calc-full-vectors
))
1204 :selected
(not calc-full-vectors
)]
1205 (list "Simplification"
1206 ["No simplification mode"
1208 (require 'calc-mode
)
1209 (calc-no-simplify-mode t
))
1212 :selected
(eq calc-simplify-mode
'none
)
1213 :help
"No simplifications are done automatically"]
1214 ["Numeric simplification mode"
1216 (require 'calc-mode
)
1217 (calc-num-simplify-mode t
))
1220 :selected
(eq calc-simplify-mode
'num
)
1221 :help
"Only numeric simplifications are done automatically"]
1222 ["Basic simplification mode"
1224 (require 'calc-mode
)
1225 (calc-basic-simplify-mode t
))
1228 :selected
(eq calc-simplify-mode nil
)
1229 :help
"Only basic simplifications are done automatically"]
1230 ["Binary simplification mode"
1232 (require 'calc-mode
)
1233 (calc-bin-simplify-mode t
))
1236 :selected
(eq calc-simplify-mode
'binary
)
1237 :help
"Basic simplifications with binary clipping are done automatically"]
1238 ["Algebraic simplification mode"
1240 (require 'calc-mode
)
1241 (calc-alg-simplify-mode t
))
1244 :selected
(eq calc-simplify-mode
'alg
)
1245 :help
"Standard algebraic simplifications are done automatically"]
1246 ["Extended simplification mode"
1248 (require 'calc-mode
)
1249 (calc-ext-simplify-mode t
))
1252 :selected
(eq calc-simplify-mode
'ext
)
1253 :help
"Extended (unsafe) simplifications are done automatically"]
1254 ["Units simplification mode"
1256 (require 'calc-mode
)
1257 (calc-units-simplify-mode t
))
1260 :selected
(eq calc-simplify-mode
'units
)
1261 :help
"Algebraic and unit simplifications are done automatically"])
1262 (list "Angle Measure"
1265 (require 'calc-math
)
1266 (call-interactively 'calc-radians-mode
))
1269 :selected
(eq calc-angle-mode
'rad
)]
1272 (require 'calc-math
)
1273 (call-interactively 'calc-degrees-mode
))
1276 :selected
(eq calc-angle-mode
'deg
)]
1279 (require 'calc-math
)
1280 (call-interactively 'calc-hms-mode
))
1283 :selected
(eq calc-angle-mode
'hms
)])
1288 (call-interactively 'calc-decimal-radix
))
1291 :selected
(and (= calc-number-radix
10)
1292 (not calc-twos-complement-mode
))]
1296 (call-interactively 'calc-binary-radix
))
1299 :selected
(and (= calc-number-radix
2)
1300 (not calc-twos-complement-mode
))]
1304 (call-interactively 'calc-octal-radix
))
1307 :selected
(and (= calc-number-radix
8)
1308 (not calc-twos-complement-mode
))]
1312 (call-interactively 'calc-hex-radix
))
1315 :selected
(and (= calc-number-radix
16)
1316 (not calc-twos-complement-mode
))]
1320 (call-interactively 'calc-radix
))
1324 (not calc-twos-complement-mode
)
1327 (= calc-number-radix
10)
1328 (= calc-number-radix
2)
1329 (= calc-number-radix
8)
1330 (= calc-number-radix
16))))]
1331 ["--Two's Complement--"
1339 (lambda () (interactive) (calc-binary-radix t
))))
1342 :selected
(and (= calc-number-radix
2)
1343 calc-twos-complement-mode
)]
1348 (lambda () (interactive) (calc-octal-radix t
))))
1351 :selected
(and (= calc-number-radix
8)
1352 calc-twos-complement-mode
)]
1357 (lambda () (interactive) (calc-hex-radix t
))))
1360 :selected
(and (= calc-number-radix
16)
1361 calc-twos-complement-mode
)])
1362 (list "Float Format"
1365 (require 'calc-mode
)
1366 (call-interactively 'calc-normal-notation
))
1369 :selected
(eq (car-safe calc-float-format
) 'float
)]
1372 (require 'calc-mode
)
1373 (call-interactively 'calc-fix-notation
))
1376 :selected
(eq (car-safe calc-float-format
) 'fix
)]
1377 ["Scientific notation"
1379 (require 'calc-mode
)
1380 (call-interactively 'calc-sci-notation
))
1383 :selected
(eq (car-safe calc-float-format
) 'sci
)]
1384 ["Engineering notation"
1386 (require 'calc-mode
)
1387 (call-interactively 'calc-eng-notation
))
1390 :selected
(eq (car-safe calc-float-format
) 'eng
)])
1391 (list "Complex Format"
1394 (require 'calc-cplx
)
1395 (calc-complex-notation))
1397 :selected
(not calc-complex-format
)
1399 :help
"Display complex numbers as ordered pairs."]
1402 (require 'calc-cplx
)
1405 :selected
(eq calc-complex-format
'i
)
1407 :help
"Display complex numbers as a+bi."]
1410 (require 'calc-cplx
)
1413 :selected
(eq calc-complex-format
'j
)
1415 :help
"Display complex numbers as a+bj."]
1417 (calc-complex-notation)
1419 :selected
(and calc-complex-format
1420 (not (eq calc-complex-format
'i
))
1421 (not (eq calc-complex-format
'j
)))
1426 (require 'calc-cplx
)
1427 (calc-polar-mode nil
))
1429 :selected
(eq calc-complex-mode
'polar
)
1431 :help
"Prefer polar form for complex numbers."])
1435 (require 'calc-mode
)
1437 (calc-incomplete-algebraic-mode
1438 (calc-algebraic-mode t
))
1439 (calc-algebraic-mode
1440 (calc-algebraic-mode nil
))))
1442 :selected
(not calc-algebraic-mode
)]
1445 (require 'calc-mode
)
1447 calc-incomplete-algebraic-mode
1448 (not calc-algebraic-mode
))
1449 (calc-algebraic-mode nil
)))
1452 :selected
(and calc-algebraic-mode
1453 (not calc-incomplete-algebraic-mode
))
1454 :help
"Keys which start numeric entry also start algebraic entry"]
1455 ["Incomplete algebraic mode"
1457 (require 'calc-mode
)
1458 (unless calc-incomplete-algebraic-mode
1459 (calc-algebraic-mode t
)))
1462 :selected calc-incomplete-algebraic-mode
1463 :help
"Only ( and [ begin algebraic entry"]
1464 ["Total algebraic mode"
1466 (require 'calc-mode
)
1467 (unless (eq calc-algebraic-mode
'total
)
1468 (calc-total-algebraic-mode nil
)))
1471 :selected
(eq calc-algebraic-mode
'total
)
1472 :help
"All regular letters and punctuation begin algebraic entry"])
1476 (require 'calc-mode
)
1477 (calc-matrix-mode -
1))
1479 :selected
(eq calc-matrix-mode nil
)
1480 :help
"Variables are not assumed to be matrix or scalar"]
1483 (require 'calc-mode
)
1484 (calc-matrix-mode -
2))
1486 :selected
(eq calc-matrix-mode
'matrix
)
1487 :help
"Variables are assumed to be matrices"]
1488 ["Square matrix mode"
1490 (require 'calc-mode
)
1491 (calc-matrix-mode '(4)))
1493 :selected
(eq calc-matrix-mode
'sqmatrix
)
1494 :help
"Variables are assumed to be square matrices"]
1495 ["Dimensioned matrix mode"
1496 (let ((dim (string-to-number (read-from-minibuffer "Dimension: "))))
1499 (require 'calc-mode
)
1500 (calc-matrix-mode dim
))
1501 (error "The dimension must be a positive integer")))
1503 :selected
(and (integerp calc-matrix-mode
) (> calc-matrix-mode
0))
1504 :help
"Variables are assumed to be NxN matrices"]
1507 (require 'calc-mode
)
1508 (calc-matrix-mode 0))
1510 :selected
(eq calc-matrix-mode
'scalar
)
1511 :help
"Variables are assumed to be scalars"])
1515 (require 'calc-lang
)
1516 (call-interactively 'calc-normal-language
))
1519 :selected
(eq calc-language nil
)]
1522 (require 'calc-lang
)
1523 (call-interactively 'calc-big-language
))
1526 :selected
(eq calc-language
'big
)
1527 :help
"Use textual approximations to various mathematical notations"]
1530 (require 'calc-lang
)
1531 (call-interactively 'calc-flat-language
))
1534 :selected
(eq calc-language
'flat
)
1535 :help
"Write matrices on a single line"]
1538 (require 'calc-lang
)
1539 (call-interactively 'calc-c-language
))
1542 :selected
(eq calc-language
'c
)]
1545 (require 'calc-lang
)
1546 (call-interactively 'calc-pascal-language
))
1549 :selected
(eq calc-language
'pascal
)]
1552 (require 'calc-lang
)
1553 (call-interactively 'calc-fortran-language
))
1556 :selected
(eq calc-language
'fortran
)]
1559 (require 'calc-lang
)
1560 (call-interactively 'calc-tex-language
))
1563 :selected
(eq calc-language
'tex
)]
1566 (require 'calc-lang
)
1567 (call-interactively 'calc-latex-language
))
1570 :selected
(eq calc-language
'latex
)]
1573 (require 'calc-lang
)
1574 (call-interactively 'calc-eqn-language
))
1577 :selected
(eq calc-language
'eqn
)]
1580 (require 'calc-lang
)
1581 (call-interactively 'calc-yacas-language
))
1584 :selected
(eq calc-language
'yacas
)]
1587 (require 'calc-lang
)
1588 (call-interactively 'calc-maxima-language
))
1591 :selected
(eq calc-language
'maxima
)]
1594 (require 'calc-lang
)
1595 (call-interactively 'calc-giac-language
))
1598 :selected
(eq calc-language
'giac
)]
1601 (require 'calc-lang
)
1602 (call-interactively 'calc-mathematica-language
))
1605 :selected
(eq calc-language
'math
)]
1608 (require 'calc-lang
)
1609 (call-interactively 'calc-maple-language
))
1612 :selected
(eq calc-language
'maple
)])
1614 ["Save mode settings" calc-save-modes
:keys
"m m"]
1617 (calc-info-goto-node "Mode settings")])
1618 "Menu for Calc's mode settings.")
1620 (defvar calc-help-menu
1634 (calc-info-goto-node "Introduction")
1635 (Info-goto-node "Help Commands"))])
1636 "Menu for Calc's help functions.")
1638 ;; Needed to make this file loadable in isolation.
1639 ;; Another option would be to use calc-load-hook.
1647 :visible
'(eq major-mode
'calc-mode
)
1648 calc-arithmetic-menu
1649 calc-scientific-function-menu
1662 (call-interactively 'calc-reset
))
1663 :help
"Reset Calc to its initial state"]
1664 ["Quit" calc-quit
]))
1666 (provide 'calc-menu
)