1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672 |
- ;;; calc-menu.el --- a menu for Calc
- ;; Copyright (C) 2007-2017 Free Software Foundation, Inc.
- ;; This file is part of GNU Emacs.
- ;; GNU Emacs is free software: you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation, either version 3 of the License, or
- ;; (at your option) any later version.
- ;; GNU Emacs is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;; GNU General Public License for more details.
- ;; You should have received a copy of the GNU General Public License
- ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
- ;;; Commentary:
- (defvar calc-arithmetic-menu
- (list "Arithmetic"
- (list "Basic"
- ["-(1:)" calc-change-sign
- :keys "n" :active (>= (calc-stack-size) 1)]
- ["(2:) + (1:)" calc-plus
- :keys "+" :active (>= (calc-stack-size) 2)]
- ["(2:) - (1:)" calc-minus
- :keys "-" :active (>= (calc-stack-size) 2)]
- ["(2:) * (1:)" calc-times
- :keys "*" :active (>= (calc-stack-size) 2)]
- ["(2:) / (1:)" calc-divide
- :keys "/" :active (>= (calc-stack-size) 2)]
- ["(2:) ^ (1:)" calc-power
- :keys "^" :active (>= (calc-stack-size) 2)]
- ["(2:) ^ (1/(1:))"
- (progn
- (require 'calc-ext)
- (let ((calc-inverse-flag t))
- (call-interactively 'calc-power)))
- :keys "I ^"
- :active (>= (calc-stack-size) 2)
- :help "The (1:)th root of (2:)"]
- ["abs(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-abs))
- :keys "A"
- :active (>= (calc-stack-size) 1)
- :help "Absolute value"]
- ["1/(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-inv))
- :keys "&"
- :active (>= (calc-stack-size) 1)]
- ["sqrt(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-sqrt))
- :keys "Q"
- :active (>= (calc-stack-size) 1)]
- ["idiv(2:,1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-idiv))
- :keys "\\"
- :active (>= (calc-stack-size) 2)
- :help "The integer quotient of (2:) over (1:)"]
- ["(2:) mod (1:)"
- (progn
- (require 'calc-misc)
- (call-interactively 'calc-mod))
- :keys "%"
- :active (>= (calc-stack-size) 2)
- :help "The remainder when (2:) is divided by (1:)"])
- (list "Rounding"
- ["floor(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-floor))
- :keys "F"
- :active (>= (calc-stack-size) 1)
- :help "The greatest integer less than or equal to (1:)"]
- ["ceiling(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-ceiling))
- :keys "I F"
- :active (>= (calc-stack-size) 1)
- :help "The smallest integer greater than or equal to (1:)"]
- ["round(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-round))
- :keys "R"
- :active (>= (calc-stack-size) 1)
- :help "The nearest integer to (1:)"]
- ["truncate(1:)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-trunc))
- :keys "I R"
- :active (>= (calc-stack-size) 1)
- :help "The integer part of (1:)"])
- (list "Complex Numbers"
- ["Re(1:)"
- (progn
- (require 'calc-cplx)
- (call-interactively 'calc-re))
- :keys "f r"
- :active (>= (calc-stack-size) 1)]
- ["Im(1:)"
- (progn
- (require 'calc-cplx)
- (call-interactively 'calc-im))
- :keys "f i"
- :active (>= (calc-stack-size) 1)]
- ["conj(1:)"
- (progn
- (require 'calc-cplx)
- (call-interactively 'calc-conj))
- :keys "J"
- :active (>= (calc-stack-size) 1)
- :help "The complex conjugate of (1:)"]
- ["length(1:)"
- (progn (require 'calc-arith)
- (call-interactively 'calc-abs))
- :keys "A"
- :active (>= (calc-stack-size) 1)
- :help "The length (absolute value) of (1:)"]
- ["arg(1:)"
- (progn
- (require 'calc-cplx)
- (call-interactively 'calc-argument))
- :keys "G"
- :active (>= (calc-stack-size) 1)
- :help "The argument (polar angle) of (1:)"])
- (list "Conversion"
- ["Convert (1:) to a float"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-float))
- :keys "c f"
- :active (>= (calc-stack-size) 1)]
- ["Convert (1:) to a fraction"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-fraction))
- :keys "c F"
- :active (>= (calc-stack-size) 1)])
- (list "Binary"
- ["Set word size"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-word-size))
- :keys "b w"]
- ["Clip (1:) to word size"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-clip))
- :keys "b c"
- :active (>= (calc-stack-size) 1)
- :help "Reduce (1:) modulo 2^wordsize"]
- ["(2:) and (1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-and))
- :keys "b a"
- :active (>= (calc-stack-size) 2)
- :help "Bitwise AND [modulo 2^wordsize]"]
- ["(2:) or (1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-or))
- :keys "b o"
- :active (>= (calc-stack-size) 2)
- :help "Bitwise inclusive OR [modulo 2^wordsize]"]
- ["(2:) xor (1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-xor))
- :keys "b x"
- :active (>= (calc-stack-size) 2)
- :help "Bitwise exclusive OR [modulo 2^wordsize]"]
- ["diff(2:,1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-diff))
- :keys "b d"
- :active (>= (calc-stack-size) 2)
- :help "Bitwise difference [modulo 2^wordsize]"]
- ["not (1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-not))
- :keys "b n"
- :active (>= (calc-stack-size) 1)
- :help "Bitwise NOT [modulo 2^wordsize]"]
- ["left shift(1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-lshift-binary))
- :keys "b l"
- :active (>= (calc-stack-size) 1)
- :help "Shift (1:)[modulo 2^wordsize] one bit left"]
- ["right shift(1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-rshift-binary))
- :keys "b r"
- :active (>= (calc-stack-size) 1)
- :help "Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"]
- ["arithmetic right shift(1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-rshift-arith))
- :keys "b R"
- :active (>= (calc-stack-size) 1)
- :help "Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"]
- ["rotate(1:)"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-rotate-binary))
- :keys "b t"
- :active (>= (calc-stack-size) 1)
- :help "Rotate (1:)[modulo 2^wordsize] one bit left"])
- "-------"
- ["Help on Arithmetic"
- (calc-info-goto-node "Arithmetic")])
- "Menu for Calc's arithmetic functions.")
- (defvar calc-scientific-function-menu
- (list "Scientific Functions"
- (list "Constants"
- ["pi"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-pi))
- :keys "P"]
- ["e"
- (progn
- (require 'calc-math)
- (let ((calc-hyperbolic-flag t))
- (call-interactively 'calc-pi)))
- :keys "H P"]
- ["phi"
- (progn
- (require 'calc-math)
- (let ((calc-inverse-flag t)
- (calc-hyperbolic-flag t))
- (call-interactively 'calc-pi)))
- :keys "I H P"
- :help "The golden ratio"]
- ["gamma"
- (progn
- (require 'calc-math)
- (let ((calc-inverse-flag t))
- (call-interactively 'calc-pi)))
- :keys "I P"
- :help "Euler's constant"])
- (list "Logs and Exps"
- ["ln(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-ln))
- :keys "L"
- :active (>= (calc-stack-size) 1)
- :help "The natural logarithm"]
- ["e^(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-exp))
- :keys "E"
- :active (>= (calc-stack-size) 1)]
- ["log(1:) [base 10]"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-log10))
- :keys "H L"
- :active (>= (calc-stack-size) 1)
- :help "The common logarithm"]
- ["10^(1:)"
- (progn
- (require 'calc-math)
- (let ((calc-inverse-flag t))
- (call-interactively 'calc-log10)))
- :keys "I H L"
- :active (>= (calc-stack-size) 1)]
- ["log(2:) [base(1:)]"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-log))
- :keys "B"
- :active (>= (calc-stack-size) 2)
- :help "The logarithm with an arbitrary base"]
- ["(2:) ^ (1:)"
- calc-power
- :keys "^"
- :active (>= (calc-stack-size) 2)])
- (list "Trigonometric Functions"
- ["sin(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-sin))
- :keys "S"
- :active (>= (calc-stack-size) 1)]
- ["cos(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-cos))
- :keys "C"
- :active (>= (calc-stack-size) 1)]
- ["tan(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-tan))
- :keys "T"
- :active (>= (calc-stack-size) 1)]
- ["arcsin(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arcsin))
- :keys "I S"
- :active (>= (calc-stack-size) 1)]
- ["arccos(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arccos))
- :keys "I C"
- :active (>= (calc-stack-size) 1)]
- ["arctan(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arctan))
- :keys "I T"
- :active (>= (calc-stack-size) 1)]
- ["arctan2(2:,1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arctan2))
- :keys "f T"
- :active (>= (calc-stack-size) 2)]
- "--Angle Measure--"
- ["Radians"
- (progn
- (require 'calc-math)
- (calc-radians-mode))
- :keys "m r"
- :style radio
- :selected (eq calc-angle-mode 'rad)]
- ["Degrees"
- (progn
- (require 'calc-math)
- (calc-degrees-mode))
- :keys "m d"
- :style radio
- :selected (eq calc-angle-mode 'deg)]
- ["HMS"
- (progn
- (require 'calc-math)
- (calc-hms-mode))
- :keys "m h"
- :style radio
- :selected (eq calc-angle-mode 'hms)])
- (list "Hyperbolic Functions"
- ["sinh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-sinh))
- :keys "H S"
- :active (>= (calc-stack-size) 1)]
- ["cosh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-cosh))
- :keys "H C"
- :active (>= (calc-stack-size) 1)]
- ["tanh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-tanh))
- :keys "H T"
- :active (>= (calc-stack-size) 1)]
- ["arcsinh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arcsinh))
- :keys "I H S"
- :active (>= (calc-stack-size) 1)]
- ["arccosh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arccosh))
- :keys "I H C"
- :active (>= (calc-stack-size) 1)]
- ["arctanh(1:)"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-arctanh))
- :keys "I H T"
- :active (>= (calc-stack-size) 1)])
- (list "Advanced Math Functions"
- ["Gamma(1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-gamma))
- :keys "f g"
- :active (>= (calc-stack-size) 1)
- :help "The Euler Gamma function"]
- ["GammaP(2:,1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-inc-gamma))
- :keys "f G"
- :active (>= (calc-stack-size) 2)
- :help "The lower incomplete Gamma function"]
- ["Beta(2:,1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-beta))
- :keys "f b"
- :active (>= (calc-stack-size) 2)
- :help "The Euler Beta function"]
- ["BetaI(3:,2:,1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-inc-beta))
- :keys "f B"
- :active (>= (calc-stack-size) 3)
- :help "The incomplete Beta function"]
- ["erf(1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-erf))
- :keys "f e"
- :active (>= (calc-stack-size) 1)
- :help "The error function"]
- ["BesselJ(2:,1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-bessel-J))
- :keys "f j"
- :active (>= (calc-stack-size) 2)
- :help "The Bessel function of the first kind (of order (2:))"]
- ["BesselY(2:,1:)"
- (progn
- (require 'calc-funcs)
- (call-interactively 'calc-bessel-Y))
- :keys "f y"
- :active (>= (calc-stack-size) 2)
- :help "The Bessel function of the second kind (of order (2:))"])
- (list "Combinatorial Functions"
- ["gcd(2:,1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-gcd))
- :keys "k g"
- :active (>= (calc-stack-size) 2)]
- ["lcm(2:,1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-lcm))
- :keys "k l"
- :active (>= (calc-stack-size) 2)]
- ["factorial(1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-factorial))
- :keys "!"
- :active (>= (calc-stack-size) 1)]
- ["(2:) choose (1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-choose))
- :keys "k c"
- :active (>= (calc-stack-size) 2)]
- ["permutations(2:,1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-perm))
- :keys "H k c"
- :active (>= (calc-stack-size) 2)]
- ["Primality test for (1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-prime-test))
- :keys "k p"
- :active (>= (calc-stack-size) 1)
- :help "For large (1:), a probabilistic test"]
- ["Factor (1:) into primes"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-prime-factors))
- :keys "k f"
- :active (>= (calc-stack-size) 1)]
- ["Next prime after (1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-next-prime))
- :keys "k n"
- :active (>= (calc-stack-size) 1)]
- ["Previous prime before (1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-prev-prime))
- :keys "I k n"
- :active (>= (calc-stack-size) 1)]
- ["phi(1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-totient))
- :keys "k n"
- :active (>= (calc-stack-size) 1)
- :help "Euler's totient function"]
- ["random(1:)"
- (progn
- (require 'calc-comb)
- (call-interactively 'calc-random))
- :keys "k r"
- :active (>= (calc-stack-size) 1)
- :help "A random number >=1 and < (1:)"])
- "----"
- ["Help on Scientific Functions"
- (calc-info-goto-node "Scientific Functions")])
- "Menu for Calc's scientific functions.")
- (defvar calc-algebra-menu
- (list "Algebra"
- (list "Simplification"
- ["Simplify (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-simplify))
- :keys "a s"
- :active (>= (calc-stack-size) 1)]
- ["Simplify (1:) with extended rules"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-simplify-extended))
- :keys "a e"
- :active (>= (calc-stack-size) 1)
- :help "Apply possibly unsafe simplifications"])
- (list "Manipulation"
- ["Expand formula (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-expand-formula))
- :keys "a \""
- :active (>= (calc-stack-size) 1)
- :help "Expand (1:) into its defining formula, if possible"]
- ["Evaluate variables in (1:)"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-evaluate))
- :keys "="
- :active (>= (calc-stack-size) 1)]
- ["Make substitution in (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-substitute))
- :keys "a b"
- :active (>= (calc-stack-size) 1)
- :help
- "Substitute all occurrences of a sub-expression with a new sub-expression"])
- (list "Polynomials"
- ["Factor (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-factor))
- :keys "a f"
- :active (>= (calc-stack-size) 1)]
- ["Collect terms in (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-collect))
- :keys "a c"
- :active (>= (calc-stack-size) 1)
- :help "Arrange as a polynomial in a given variable"]
- ["Expand (1:)"
- (progn
- (require 'calc-alg)
- (call-interactively 'calc-expand))
- :keys "a x"
- :active (>= (calc-stack-size) 1)
- :help "Apply distributive law everywhere"]
- ["Find roots of (1:)"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-poly-roots))
- :keys "a P"
- :active (>= (calc-stack-size) 1)])
- (list "Calculus"
- ["Differentiate (1:)"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-derivative))
- :keys "a d"
- :active (>= (calc-stack-size) 1)]
- ["Integrate (1:) [indefinite]"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-integral))
- :keys "a i"
- :active (>= (calc-stack-size) 1)]
- ["Integrate (1:) [definite]"
- (progn
- (require 'calcalg2)
- (let ((var (read-string "Integration variable: ")))
- (calc-tabular-command 'calcFunc-integ "Integration"
- "intg" nil var nil nil)))
- :keys "C-u a i"
- :active (>= (calc-stack-size) 1)]
- ["Integrate (1:) [numeric]"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-num-integral))
- :keys "a I"
- :active (>= (calc-stack-size) 1)
- :help "Integrate using the open Romberg method"]
- ["Taylor expand (1:)"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-taylor))
- :keys "a t"
- :active (>= (calc-stack-size) 1)]
- ["Minimize (2:) [initial guess = (1:)]"
- (progn
- (require 'calcalg3)
- (call-interactively 'calc-find-minimum))
- :keys "a N"
- :active (>= (calc-stack-size) 2)
- :help "Find a local minimum"]
- ["Maximize (2:) [initial guess = (1:)]"
- (progn
- (require 'calcalg3)
- (call-interactively 'calc-find-maximum))
- :keys "a X"
- :active (>= (calc-stack-size) 2)
- :help "Find a local maximum"])
- (list "Solving"
- ["Solve equation (1:)"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-solve-for))
- :keys "a S"
- :active (>= (calc-stack-size) 1)]
- ["Solve equation (2:) numerically [initial guess = (1:)]"
- (progn
- (require 'calcalg3)
- (call-interactively 'calc-find-root))
- :keys "a R"
- :active (>= (calc-stack-size) 2)]
- ["Find roots of polynomial (1:)"
- (progn
- (require 'calcalg2)
- (call-interactively 'calc-poly-roots))
- :keys "a P"
- :active (>= (calc-stack-size) 1)])
- (list "Curve Fitting"
- ["Fit (1:)=[x values, y values] to a curve"
- (progn
- (require 'calcalg3)
- (call-interactively 'calc-curve-fit))
- :keys "a F"
- :active (>= (calc-stack-size) 1)])
- "----"
- ["Help on Algebra"
- (calc-info-goto-node "Algebra")])
- "Menu for Calc's algebraic facilities.")
- (defvar calc-graphics-menu
- (list "Graphics"
- ["Graph 2D [(1:)= y values, (2:)= x values]"
- (progn
- (require 'calc-graph)
- (call-interactively 'calc-graph-fast))
- :keys "g f"
- :active (>= (calc-stack-size) 2)]
- ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= x values]"
- (progn
- (require 'calc-graph)
- (call-interactively 'calc-graph-fast-3d))
- :keys "g F"
- :active (>= (calc-stack-size) 3)]
- "----"
- ["Help on Graphics"
- (calc-info-goto-node "Graphics")])
- "Menu for Calc's graphics.")
- (defvar calc-vectors-menu
- (list "Matrices/Vectors"
- (list "Matrices"
- ["(2:) + (1:)" calc-plus
- :keys "+" :active (>= (calc-stack-size) 2)]
- ["(2:) - (1:)" calc-minus
- :keys "-" :active (>= (calc-stack-size) 2)]
- ["(2:) * (1:)" calc-times
- :keys "*" :active (>= (calc-stack-size) 2)]
- ["(1:)^(-1)"
- (progn
- (require 'calc-arith)
- (call-interactively 'calc-inv))
- :keys "&"
- :active (>= (calc-stack-size) 1)]
- ["Create an identity matrix"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-ident))
- :keys "v i"]
- ["transpose(1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-transpose))
- :keys "v t"
- :active (>= (calc-stack-size) 1)]
- ["det(1:)"
- (progn
- (require 'calc-mtx)
- (call-interactively 'calc-mdet))
- :keys "V D"
- :active (>= (calc-stack-size) 1)]
- ["trace(1:)"
- (progn
- (require 'calc-mtx)
- (call-interactively 'calc-mtrace))
- :keys "V T"
- :active (>= (calc-stack-size) 1)]
- ["LUD decompose (1:)"
- (progn
- (require 'calc-mtx)
- (call-interactively 'calc-mlud))
- :keys "V L"
- :active (>= (calc-stack-size) 1)]
- ["Extract a row from (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-mrow))
- :keys "v r"
- :active (>= (calc-stack-size) 1)]
- ["Extract a column from (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-mcol))
- :keys "v c"
- :active (>= (calc-stack-size) 1)])
- (list "Vectors"
- ["Extract the first element of (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-head))
- :keys "v h"
- :active (>= (calc-stack-size) 1)]
- ["Extract an element from (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-mrow))
- :keys "v r"
- :active (>= (calc-stack-size) 1)]
- ["Reverse (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-reverse-vector))
- :keys "v v"
- :active (>= (calc-stack-size) 1)]
- ["Unpack (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-unpack))
- :keys "v u"
- :active (>= (calc-stack-size) 1)
- :help "Separate the elements of (1:)"]
- ["(2:) cross (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-cross))
- :keys "V C"
- :active (>= (calc-stack-size) 2)
- :help "The cross product in R^3"]
- ["(2:) dot (1:)"
- calc-mult
- :keys "*"
- :active (>= (calc-stack-size) 2)
- :help "The dot product"]
- ["Map a function across (1:)"
- (progn
- (require 'calc-map)
- (call-interactively 'calc-map))
- :keys "V M"
- :active (>= (calc-stack-size) 1)
- :help "Apply a function to each element"])
- (list "Vectors As Sets"
- ["Remove duplicates from (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-remove-duplicates))
- :keys "V +"
- :active (>= (calc-stack-size) 1)]
- ["(2:) union (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-set-union))
- :keys "V V"
- :active (>= (calc-stack-size) 2)]
- ["(2:) intersect (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-set-intersect))
- :keys "V ^"
- :active (>= (calc-stack-size) 2)]
- ["(2:) \\ (1:)"
- (progn
- (require 'calc-vec)
- (call-interactively 'calc-set-difference))
- :keys "V -"
- :help "Set difference"
- :active (>= (calc-stack-size) 2)])
- (list "Statistics On Vectors"
- ["length(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-count))
- :keys "u #"
- :active (>= (calc-stack-size) 1)
- :help "The number of data values"]
- ["sum(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-sum))
- :keys "u +"
- :active (>= (calc-stack-size) 1)
- :help "The sum of the data values"]
- ["max(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-max))
- :keys "u x"
- :active (>= (calc-stack-size) 1)
- :help "The maximum of the data values"]
- ["min(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-min))
- :keys "u N"
- :active (>= (calc-stack-size) 1)
- :help "The minimum of the data values"]
- ["mean(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-mean))
- :keys "u M"
- :active (>= (calc-stack-size) 1)
- :help "The average (arithmetic mean) of the data values"]
- ["mean(1:) with error"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-mean-error))
- :keys "I u M"
- :active (>= (calc-stack-size) 1)
- :help "The average (arithmetic mean) of the data values as an error form"]
- ["rms(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-rms))
- :keys "u R"
- :active (>= (calc-stack-size) 1)
- :help "The root mean square of the data values"]
- ["sdev(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-sdev))
- :keys "u S"
- :active (>= (calc-stack-size) 1)
- :help "The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"]
- ["variance(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-variance))
- :keys "H u S"
- :active (>= (calc-stack-size) 1)
- :help "The sample variance, sum((values - mean)^2)/(N-1)"]
- ["population sdev(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-pop-sdev))
- :keys "I u S"
- :active (>= (calc-stack-size) 1)
- :help "The population sdev, sqrt[sum((values - mean)^2)/N]"]
- ["population variance(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-pop-variance))
- :keys "H I u S"
- :active (>= (calc-stack-size) 1)
- :help "The population variance, sum((values - mean)^2)/N"]
- ["median(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-median))
- :keys "H u M"
- :active (>= (calc-stack-size) 1)
- :help "The median of the data values"]
- ["harmonic mean(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-harmonic-mean))
- :keys "H I u M"
- :active (>= (calc-stack-size) 1)]
- ["geometric mean(1:)"
- (progn
- (require 'calc-stat)
- (call-interactively 'calc-vector-geometric-mean))
- :keys "u G"
- :active (>= (calc-stack-size) 1)]
- ["arithmetic-geometric mean(1:)"
- (progn
- (require 'calc-stat)
- (let ((calc-hyperbolic-flag t))
- (call-interactively 'calc-vector-geometric-mean)))
- :keys "H u G"
- :active (>= (calc-stack-size) 1)]
- ;; ["RMS(1:)"
- ;; (progn (require 'calc-arith)
- ;; (call-interactively 'calc-abs))
- ;; :keys "A"
- ;; :active (>= (calc-stack-size) 1)
- ;; :help "The root-mean-square, or quadratic mean"]
- )
- ["Abbreviate long vectors"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-full-vectors))
- :keys "v ."
- :style toggle
- :selected (not calc-full-vectors)]
- "----"
- ["Help on Matrices/Vectors"
- (calc-info-goto-node "Matrix Functions")])
- "Menu for Calc's vector and matrix functions.")
- (defvar calc-units-menu
- (list "Units"
- ["Convert units in (1:)"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-convert-units ))
- :keys "u c"
- :active (>= (calc-stack-size) 1)]
- ["Convert temperature in (1:)"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-convert-temperature))
- :keys "u t"
- :active (>= (calc-stack-size) 1)]
- ["Simplify units in (1:)"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-simplify-units))
- :keys "u s"
- :active (>= (calc-stack-size) 1)]
- ["View units table"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-view-units-table))
- :keys "u V"]
- (list "Logarithmic Units"
- ["Convert (1:) to dB (power)"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-db))
- :keys "l d"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to dB (power) with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t))
- (call-interactively 'calc-db)))
- :keys "O l d"
- :active (>= (calc-stack-size) 2)]
- ["Convert (1:) to Np (power)"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-np))
- :keys "l n"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to Np (power) with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t))
- (call-interactively 'calc-np)))
- :keys "O l n"
- :active (>= (calc-stack-size) 2)]
- ["Convert (1:) to power quantity"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-lu-quant))
- :keys "l q"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to power quantity with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t))
- (call-interactively 'calc-lu-quant)))
- :keys "O l q"
- :active (>= (calc-stack-size) 2)]
- "----"
- ["Convert (1:) to dB (field)"
- (progn
- (require 'calc-units)
- (let ((calc-hyperbolic-flag t))
- (call-interactively 'calc-db)))
- :keys "H l d"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to dB (field) with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t)
- (calc-hyperbolic-flag t))
- (call-interactively 'calc-db)))
- :keys "O H l d"
- :active (>= (calc-stack-size) 2)]
- ["Convert (1:) to Np (field)"
- (progn
- (require 'calc-units)
- (let ((calc-hyperbolic-flag t))
- (call-interactively 'calc-np)))
- :keys "H l n"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to Np (field) with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t)
- (calc-hyperbolic-flag t))
- (call-interactively 'calc-np)))
- :keys "O H l d"
- :active (>= (calc-stack-size) 2)]
- ["Convert (1:) to field quantity"
- (progn
- (require 'calc-units)
- (let ((calc-hyperbolic-flag t))
- (call-interactively 'calc-lu-quant)))
- :keys "H l q"
- :active (>= (calc-stack-size) 1)]
- ["Convert (2:) to field quantity with reference level (1:)"
- (progn
- (require 'calc-units)
- (let ((calc-option-flag t)
- (calc-hyperbolic-flag))
- (call-interactively 'calc-lu-quant)))
- :keys "O H l q"
- :active (>= (calc-stack-size) 2)])
- (list "Musical Notes"
- ["Convert (1:) to scientific pitch notation"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-spn))
- :keys "l s"
- :active (>= (calc-stack-size) 1)]
- ["Convert (1:) to midi number"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-midi))
- :keys "l m"
- :active (>= (calc-stack-size) 1)]
- ["Convert (1:) to frequency"
- (progn
- (require 'calc-units)
- (call-interactively 'calc-freq))
- :keys "l f"
- :active (>= (calc-stack-size) 1)])
- "----"
- ["Help on Units"
- (calc-info-goto-node "Units")])
- "Menu for Calc's units functions.")
- (defvar calc-variables-menu
- (list "Variables"
- ["Store (1:) into a variable"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-store))
- :keys "s s"
- :active (>= (calc-stack-size) 1)]
- ["Recall a variable value"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-recall ))
- :keys "s r"]
- ["Edit the value of a variable"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-edit-variable))
- :keys "s e"]
- ["Exchange (1:) with a variable value"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-store-exchange))
- :keys "s x"
- :active (>= (calc-stack-size) 1)]
- ["Clear variable value"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-unstore))
- :keys "s u"]
- ["Evaluate variables in (1:)"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-evaluate))
- :keys "="
- :active (>= (calc-stack-size) 1)]
- ["Evaluate (1:), assigning a value to a variable"
- (progn
- (require 'calc-store)
- (call-interactively 'calc-let))
- :keys "s l"
- :active (>= (calc-stack-size) 1)
- :help "Evaluate (1:) under a temporary assignment of a variable"]
- "----"
- ["Help on Variables"
- (calc-info-goto-node "Store and Recall")])
- "Menu for Calc's variables.")
- (defvar calc-stack-menu
- (list "Stack"
- ["Remove (1:)"
- calc-pop
- :keys "DEL"
- :active (>= (calc-stack-size) 1)]
- ["Switch (1:) and (2:)"
- calc-roll-down
- :keys "TAB"
- :active (>= (calc-stack-size) 2)]
- ["Duplicate (1:)"
- calc-enter
- :keys "RET"
- :active (>= (calc-stack-size) 1)]
- ["Edit (1:)"
- (progn
- (require 'calc-yank)
- (call-interactively calc-edit))
- :keys "`"
- :active (>= (calc-stack-size) 1)]
- "----"
- ["Help on Stack"
- (calc-info-goto-node "Stack and Trail")])
- "Menu for Calc's stack functions.")
- (defvar calc-errors-menu
- (list "Undo"
- ["Undo"
- (progn
- (require 'calc-undo)
- (call-interactively 'calc-undo))
- :keys "U"]
- ["Redo"
- (progn
- (require 'calc-undo)
- (call-interactively 'calc-redo))
- :keys "D"]
- "----"
- ["Help on Undo"
- (progn
- (calc-info-goto-node "Introduction")
- (Info-goto-node "Undo"))]))
- (defvar calc-modes-menu
- (list "Modes"
- ["Precision"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-precision))
- :keys "p"
- :help "Set the precision for floating point calculations"]
- ["Fraction mode"
- (progn
- (require 'calc-frac)
- (call-interactively 'calc-frac-mode))
- :keys "m f"
- :style toggle
- :selected calc-prefer-frac
- :help "Leave integer quotients as fractions"]
- ["Symbolic mode"
- (lambda ()
- (interactive)
- (require 'calc-mode)
- (calc-symbolic-mode nil))
- :keys "m s"
- :style toggle
- :selected calc-symbolic-mode
- :help "Leave functions producing inexact answers in symbolic form"]
- ["Infinite mode"
- (lambda ()
- (interactive)
- (require 'calc-mode)
- (calc-infinite-mode nil))
- :keys "m i"
- :style toggle
- :selected calc-infinite-mode
- :help "Let expressions like 1/0 produce infinite results"]
- ["Abbreviate long vectors"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-full-vectors))
- :keys "v ."
- :style toggle
- :selected (not calc-full-vectors)]
- (list "Simplification"
- ["No simplification mode"
- (progn
- (require 'calc-mode)
- (calc-no-simplify-mode t))
- :keys "m O"
- :style radio
- :selected (eq calc-simplify-mode 'none)
- :help "No simplifications are done automatically"]
- ["Numeric simplification mode"
- (progn
- (require 'calc-mode)
- (calc-num-simplify-mode t))
- :keys "m N"
- :style radio
- :selected (eq calc-simplify-mode 'num)
- :help "Only numeric simplifications are done automatically"]
- ["Basic simplification mode"
- (progn
- (require 'calc-mode)
- (calc-basic-simplify-mode t))
- :keys "m I"
- :style radio
- :selected (eq calc-simplify-mode nil)
- :help "Only basic simplifications are done automatically"]
- ["Binary simplification mode"
- (progn
- (require 'calc-mode)
- (calc-bin-simplify-mode t))
- :keys "m B"
- :style radio
- :selected (eq calc-simplify-mode 'binary)
- :help "Basic simplifications with binary clipping are done automatically"]
- ["Algebraic simplification mode"
- (progn
- (require 'calc-mode)
- (calc-alg-simplify-mode t))
- :keys "m A"
- :style radio
- :selected (eq calc-simplify-mode 'alg)
- :help "Standard algebraic simplifications are done automatically"]
- ["Extended simplification mode"
- (progn
- (require 'calc-mode)
- (calc-ext-simplify-mode t))
- :keys "m E"
- :style radio
- :selected (eq calc-simplify-mode 'ext)
- :help "Extended (unsafe) simplifications are done automatically"]
- ["Units simplification mode"
- (progn
- (require 'calc-mode)
- (calc-units-simplify-mode t))
- :keys "m U"
- :style radio
- :selected (eq calc-simplify-mode 'units)
- :help "Algebraic and unit simplifications are done automatically"])
- (list "Angle Measure"
- ["Radians"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-radians-mode))
- :keys "m r"
- :style radio
- :selected (eq calc-angle-mode 'rad)]
- ["Degrees"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-degrees-mode))
- :keys "m d"
- :style radio
- :selected (eq calc-angle-mode 'deg)]
- ["HMS"
- (progn
- (require 'calc-math)
- (call-interactively 'calc-hms-mode))
- :keys "m h"
- :style radio
- :selected (eq calc-angle-mode 'hms)])
- (list "Radix"
- ["Decimal"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-decimal-radix))
- :keys "d 0"
- :style radio
- :selected (and (= calc-number-radix 10)
- (not calc-twos-complement-mode))]
- ["Binary"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-binary-radix))
- :keys "d 2"
- :style radio
- :selected (and (= calc-number-radix 2)
- (not calc-twos-complement-mode))]
- ["Octal"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-octal-radix))
- :keys "d 8"
- :style radio
- :selected (and (= calc-number-radix 8)
- (not calc-twos-complement-mode))]
- ["Hexadecimal"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-hex-radix))
- :keys "d 6"
- :style radio
- :selected (and (= calc-number-radix 16)
- (not calc-twos-complement-mode))]
- ["Other"
- (progn
- (require 'calc-bin)
- (call-interactively 'calc-radix))
- :keys "d r"
- :style radio
- :selected (and
- (not calc-twos-complement-mode)
- (not
- (or
- (= calc-number-radix 10)
- (= calc-number-radix 2)
- (= calc-number-radix 8)
- (= calc-number-radix 16))))]
- ["--Two's Complement--"
- (lambda () ())
- :style radio
- :selected nil]
- ["Binary"
- (progn
- (require 'calc-bin)
- (call-interactively
- (lambda () (interactive) (calc-binary-radix t))))
- :keys "C-u d 2"
- :style radio
- :selected (and (= calc-number-radix 2)
- calc-twos-complement-mode)]
- ["Octal"
- (progn
- (require 'calc-bin)
- (call-interactively
- (lambda () (interactive) (calc-octal-radix t))))
- :keys "C-u d 8"
- :style radio
- :selected (and (= calc-number-radix 8)
- calc-twos-complement-mode)]
- ["Hexadecimal"
- (progn
- (require 'calc-bin)
- (call-interactively
- (lambda () (interactive) (calc-hex-radix t))))
- :keys "C-u d 6"
- :style radio
- :selected (and (= calc-number-radix 16)
- calc-twos-complement-mode)])
- (list "Float Format"
- ["Normal"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-normal-notation))
- :keys "d n"
- :style radio
- :selected (eq (car-safe calc-float-format) 'float)]
- ["Fixed point"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-fix-notation))
- :keys "d f"
- :style radio
- :selected (eq (car-safe calc-float-format) 'fix)]
- ["Scientific notation"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-sci-notation))
- :keys "d s"
- :style radio
- :selected (eq (car-safe calc-float-format) 'sci)]
- ["Engineering notation"
- (progn
- (require 'calc-mode)
- (call-interactively 'calc-eng-notation))
- :keys "d e"
- :style radio
- :selected (eq (car-safe calc-float-format) 'eng)])
- (list "Complex Format"
- ["Default"
- (progn
- (require 'calc-cplx)
- (calc-complex-notation))
- :style radio
- :selected (not calc-complex-format)
- :keys "d c"
- :help "Display complex numbers as ordered pairs."]
- ["i notation"
- (progn
- (require 'calc-cplx)
- (calc-i-notation))
- :style radio
- :selected (eq calc-complex-format 'i)
- :keys "d i"
- :help "Display complex numbers as a+bi."]
- ["j notation"
- (progn
- (require 'calc-cplx)
- (calc-i-notation))
- :style radio
- :selected (eq calc-complex-format 'j)
- :keys "d j"
- :help "Display complex numbers as a+bj."]
- ["Other"
- (calc-complex-notation)
- :style radio
- :selected (and calc-complex-format
- (not (eq calc-complex-format 'i))
- (not (eq calc-complex-format 'j)))
- :active nil]
- "----"
- ["Polar mode"
- (progn
- (require 'calc-cplx)
- (calc-polar-mode nil))
- :style toggle
- :selected (eq calc-complex-mode 'polar)
- :keys "m p"
- :help "Prefer polar form for complex numbers."])
- (list "Algebraic"
- ["Normal"
- (progn
- (require 'calc-mode)
- (cond
- (calc-incomplete-algebraic-mode
- (calc-algebraic-mode t))
- (calc-algebraic-mode
- (calc-algebraic-mode nil))))
- :style radio
- :selected (not calc-algebraic-mode)]
- ["Algebraic mode"
- (progn
- (require 'calc-mode)
- (if (or
- calc-incomplete-algebraic-mode
- (not calc-algebraic-mode))
- (calc-algebraic-mode nil)))
- :keys "m a"
- :style radio
- :selected (and calc-algebraic-mode
- (not calc-incomplete-algebraic-mode))
- :help "Keys which start numeric entry also start algebraic entry"]
- ["Incomplete algebraic mode"
- (progn
- (require 'calc-mode)
- (unless calc-incomplete-algebraic-mode
- (calc-algebraic-mode t)))
- :keys "C-u m a"
- :style radio
- :selected calc-incomplete-algebraic-mode
- :help "Only ( and [ begin algebraic entry"]
- ["Total algebraic mode"
- (progn
- (require 'calc-mode)
- (unless (eq calc-algebraic-mode 'total)
- (calc-total-algebraic-mode nil)))
- :keys "m t"
- :style radio
- :selected (eq calc-algebraic-mode 'total)
- :help "All regular letters and punctuation begin algebraic entry"])
- (list "Matrix"
- ["Off"
- (progn
- (require 'calc-mode)
- (calc-matrix-mode -1))
- :style radio
- :selected (eq calc-matrix-mode nil)
- :help "Variables are not assumed to be matrix or scalar"]
- ["Matrix mode"
- (progn
- (require 'calc-mode)
- (calc-matrix-mode -2))
- :style radio
- :selected (eq calc-matrix-mode 'matrix)
- :help "Variables are assumed to be matrices"]
- ["Square matrix mode"
- (progn
- (require 'calc-mode)
- (calc-matrix-mode '(4)))
- :style radio
- :selected (eq calc-matrix-mode 'sqmatrix)
- :help "Variables are assumed to be square matrices"]
- ["Dimensioned matrix mode"
- (let ((dim (string-to-number (read-from-minibuffer "Dimension: "))))
- (if (natnump dim)
- (progn
- (require 'calc-mode)
- (calc-matrix-mode dim))
- (error "The dimension must be a positive integer")))
- :style radio
- :selected (and (integerp calc-matrix-mode) (> calc-matrix-mode 0))
- :help "Variables are assumed to be NxN matrices"]
- ["Scalar mode"
- (progn
- (require 'calc-mode)
- (calc-matrix-mode 0))
- :style radio
- :selected (eq calc-matrix-mode 'scalar)
- :help "Variables are assumed to be scalars"])
- (list "Language"
- ["Normal"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-normal-language))
- :keys "d N"
- :style radio
- :selected (eq calc-language nil)]
- ["Big"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-big-language))
- :keys "d B"
- :style radio
- :selected (eq calc-language 'big)
- :help "Use textual approximations to various mathematical notations"]
- ["Flat"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-flat-language))
- :keys "d O"
- :style radio
- :selected (eq calc-language 'flat)
- :help "Write matrices on a single line"]
- ["C"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-c-language))
- :keys "d C"
- :style radio
- :selected (eq calc-language 'c)]
- ["Pascal"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-pascal-language))
- :keys "d P"
- :style radio
- :selected (eq calc-language 'pascal)]
- ["Fortran"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-fortran-language))
- :keys "d F"
- :style radio
- :selected (eq calc-language 'fortran)]
- ["TeX"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-tex-language))
- :keys "d T"
- :style radio
- :selected (eq calc-language 'tex)]
- ["LaTeX"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-latex-language))
- :keys "d L"
- :style radio
- :selected (eq calc-language 'latex)]
- ["Eqn"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-eqn-language))
- :keys "d E"
- :style radio
- :selected (eq calc-language 'eqn)]
- ["Yacas"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-yacas-language))
- :keys "d Y"
- :style radio
- :selected (eq calc-language 'yacas)]
- ["Maxima"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-maxima-language))
- :keys "d X"
- :style radio
- :selected (eq calc-language 'maxima)]
- ["Giac"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-giac-language))
- :keys "d A"
- :style radio
- :selected (eq calc-language 'giac)]
- ["Mma"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-mathematica-language))
- :keys "d M"
- :style radio
- :selected (eq calc-language 'math)]
- ["Maple"
- (progn
- (require 'calc-lang)
- (call-interactively 'calc-maple-language))
- :keys "d W"
- :style radio
- :selected (eq calc-language 'maple)])
- "----"
- ["Save mode settings" calc-save-modes :keys "m m"]
- "----"
- ["Help on Modes"
- (calc-info-goto-node "Mode settings")])
- "Menu for Calc's mode settings.")
- (defvar calc-help-menu
- (list "Help"
- ["Manual"
- calc-info
- :keys "h i"]
- ["Tutorial"
- calc-tutorial
- :keys "h t"]
- ["Summary"
- calc-info-summary
- :keys "h s"]
- "----"
- ["Help on Help"
- (progn
- (calc-info-goto-node "Introduction")
- (Info-goto-node "Help Commands"))])
- "Menu for Calc's help functions.")
- ;; Needed to make this file loadable in isolation.
- ;; Another option would be to use calc-load-hook.
- (require 'calc)
- (easy-menu-define
- calc-menu
- calc-mode-map
- "Menu for Calc."
- (list "Calc"
- :visible '(eq major-mode 'calc-mode)
- calc-arithmetic-menu
- calc-scientific-function-menu
- calc-algebra-menu
- calc-graphics-menu
- calc-vectors-menu
- calc-units-menu
- calc-variables-menu
- calc-stack-menu
- calc-errors-menu
- calc-modes-menu
- calc-help-menu
- ["Reset"
- (progn
- (require 'calc-ext)
- (call-interactively 'calc-reset))
- :help "Reset Calc to its initial state"]
- ["Quit" calc-quit]))
- (provide 'calc-menu)
|