diff options
author | Karl Berry <karl@freefriends.org> | 2019-12-17 23:24:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-12-17 23:24:25 +0000 |
commit | af44b62ae72030d27d75d2f6b9a3619fb2a54821 (patch) | |
tree | 693e7cced5af5306e67c3c81463a56c6b16f5892 /Master/texmf-dist/tex | |
parent | b85578ddb113fb36cfabf6478966066cc6226170 (diff) |
intcalc split from oberdiek (18dec19)
git-svn-id: svn://tug.org/texlive/trunk@53168 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/intcalc/intcalc.sty | 1734 |
1 files changed, 1734 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/intcalc/intcalc.sty b/Master/texmf-dist/tex/generic/intcalc/intcalc.sty new file mode 100644 index 00000000000..3e660fe2224 --- /dev/null +++ b/Master/texmf-dist/tex/generic/intcalc/intcalc.sty @@ -0,0 +1,1734 @@ +%% +%% This is file `intcalc.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% intcalc.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Project: intcalc +%% Version: 2019/12/15 v1.3 +%% +%% Copyright (C) +%% 2007 Heiko Oberdiek +%% 2016-2019 Oberdiek Package Support Group +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3c of this license or (at your option) any later +%% version. This version of this license is in +%% https://www.latex-project.org/lppl/lppl-1-3c.txt +%% and the latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% The Current Maintainers of this work are +%% Heiko Oberdiek and the Oberdiek Package Support Group +%% https://github.com/ho-tex/intcalc/issues +%% +%% +%% The Base Interpreter refers to any `TeX-Format', +%% because some files are installed in TDS:tex/generic//. +%% +%% This work consists of the main source file intcalc.dtx +%% and the derived files +%% intcalc.sty, intcalc.pdf, intcalc.ins, intcalc.drv, +%% intcalc-test1.tex, intcalc-test2.tex, intcalc-test3.tex, +%% intcalc-test4.tex. +%% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@intcalc.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{intcalc}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@intcalc.sty\endcsname +\ProvidesPackage{intcalc}% + [2019/12/15 v1.3 Expandable calculations with integers (HO)]% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname InCa@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\InCa@AtEnd{% + \InCa@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{42}{12}% * +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{11}% : (letter!) +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{63}{14}% ? (comment!) +\edef\InCa@AtEnd{\InCa@AtEnd\noexpand\endinput} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname InCa@TestMode\endcsname\relax +\else + \catcode63=9 % ? (ignore) +\fi +? \let\InCa@@TestMode\InCa@TestMode +\def\InCa@Abs#1#2!{% + \ifx#1-% + #2% + \else + #1#2% + \fi +} +\def\InCa@Sgn#1#2!{% + \ifx#1-% + -1% + \else + \ifx#10% + 0% + \else + 1% + \fi + \fi +} +\def\InCa@Min#1!#2!{% + \ifnum#1<#2 % + #1% + \else + #2% + \fi +} +\def\InCa@Max#1!#2!{% + \ifnum#1>#2 % + #1% + \else + #2% + \fi +} +\def\InCa@Cmp#1!#2!{% + \ifnum#1=#2 % + 0% + \else + \ifnum#1<#2 % + -% + \fi + 1% + \fi +} +\def\InCa@Fac#1!{% + \ifcase#1 1% 0! + \or 1% 1! + \or 2% 2! + \or 6% 3! + \or 24% 4! + \or 120% 5! + \or 720% 6! + \or 5040% 7! + \or 40320% 8! + \or 362880% 9! + \or 3628800% 10! + \or 39916800% 11! + \or 479001600% 12! + \else + \ifnum#1<\z@ + 0\IntCalcError:FacNegative% + \else + 0\IntCalcError:FacOverflow% + \fi + \fi +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname numexpr\endcsname\relax +\else + \def\intcalcNum#1{% + \the\numexpr#1\relax + }% + \def\intcalcInv#1{% + \number-\intcalcNum{#1} % + }% + \def\intcalcAbs#1{% + \number\expandafter\InCa@Abs\the\numexpr#1! % + }% + \def\intcalcSgn#1{% + \number\expandafter\InCa@Sgn\the\numexpr#1! % + }% + \def\intcalcMin#1#2{% + \number\expandafter\InCa@Min + \the\numexpr#1\expandafter!% + \the\numexpr#2! % + }% + \def\intcalcMax#1#2{% + \number\expandafter\InCa@Max + \the\numexpr#1\expandafter!% + \the\numexpr#2! % + }% + \def\intcalcCmp#1#2{% + \number\expandafter\InCa@Cmp + \the\numexpr#1\expandafter!\the\numexpr#2! % + }% + \def\intcalcInc#1{% + \the\numexpr#1+1\relax + }% + \def\intcalcDec#1{% + \the\numexpr#1-1\relax + }% + \def\IntCalcInc#1!{% + \the\numexpr#1+1\relax + }% + \def\IntCalcDec#1!{% + \the\numexpr#1-1\relax + }% + \def\intcalcAdd#1#2{% + \the\numexpr#1+(#2)\relax + }% + \def\intcalcSub#1#2{% + \the\numexpr#1-(#2)\relax + }% + \def\IntCalcAdd#1!#2!{% + \the\numexpr#1+#2\relax + }% + \def\IntCalcSub#1!#2!{% + \the\numexpr#1-#2\relax + }% + \def\intcalcShl#1{% + \the\numexpr(#1)*2\relax + }% + \def\intcalcShr#1{% + \number\expandafter\InCa@Shr\the\numexpr#1! % + }% + \def\IntCalcShl#1!{% + \the\numexpr#1*2\relax + }% + \def\IntCalcShr#1!{% + \the\numexpr\ifodd#1 (#1-1)\else#1\fi/2\relax + }% + \def\InCa@Shr#1#2!{% + \ifx#1-% + -\InCa@Shr#2!% + \else + \ifodd#1#2 % + \the\numexpr(#1#2-1)/2\relax + \else + \the\numexpr#1#2/2\relax + \fi + \fi + }% + \def\intcalcMul#1#2{% + \the\numexpr(#1)*(#2)\relax + }% + \def\IntCalcMul#1!#2!{% + \the\numexpr#1*#2\relax + }% + \def\intcalcSqr#1{% + \number\expandafter\InCa@Sqr\the\numexpr#1! % + }% + \def\InCa@Sqr#1!{% + \the\numexpr#1*#1\relax + }% + \def\intcalcFac#1{% + \number\expandafter\InCa@Fac\the\numexpr#1! % + }% + \def\intcalcPow#1#2{% + \number\expandafter\InCa@Pow + \the\numexpr#1\expandafter!% + \the\numexpr#2! % + }% + \def\InCa@Pow#1#2!#3#4!{% + \ifcase#3#4 % power = 0 + 1% + \or % power = 1 + #1#2% + \or % power = 2 + \the\numexpr#1#2*#1#2\relax + \else + \ifcase#1#2 % basis = 0, power <> 0 + 0% + \ifx#3-% power < 0 + 0\IntCalcError:DivisionByZero% + \fi + \or + 1% basis = 1 + \else + \ifnum#1#2=\m@ne % basis = -1 + \ifodd#3#4 % + -% + \fi + 1% + \else % |basis| > 1 + \ifx#3-% power < 0 + 0% + \else % power > 2 + \InCa@PowRec#1#2!#3#4!1!% + \fi + \fi + \fi + \fi + }% + \def\InCa@PowRec#1!#2!#3!{% + \ifnum#2=\@ne + \the\numexpr#1*#3\relax + \else + \ifodd#2 % + \expandafter\InCa@PowRec + \the\numexpr#1*#1\expandafter!% + \the\numexpr(#2-1)/2\expandafter!% + \the\numexpr#1*#3\expandafter\expandafter\expandafter!% + \else + \expandafter\InCa@PowRec + \the\numexpr#1*#1\expandafter!% + \the\numexpr(#2-1)/2\expandafter!% + \number#3\expandafter\expandafter\expandafter!% + \fi + \fi + }% + \def\intcalcDiv#1#2{% + \number\expandafter\InCa@Div + \the\numexpr#1\expandafter!% + \the\numexpr#2! % + }% + \def\InCa@Div#1!#2!{% + \ifcase#2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase#1 % + 0% + \else + \expandafter\InCa@@Div + \romannumeral 0% + \ifnum#1<\z@ + \expandafter-\number-#1% + \else + \expandafter+\number#1% + \fi + \expandafter!% + \romannumeral 0% + \ifnum#2<\z@ + \expandafter-\number-#2% + \else + \expandafter+\number#2% + \fi + !% + \fi + \fi + }% + \def\InCa@Temp#1{% + \def\IntCalcDiv##1!##2!{% + \number + \ifcase##2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase##1 % + 0% + \else + \the\numexpr(##1-(##2-1)/2)/##2\relax + \fi + \fi + #1% + }% + }% + \InCa@Temp{ }% + \def\InCa@@Div#1#2!#3#4!{% + #1#3% + \the\numexpr(#2-(#4-1)/2)/#4\relax + }% + \def\intcalcMod#1#2{% + \number\expandafter\InCa@Mod + \the\numexpr#1\expandafter!% + \the\numexpr#2! % + }% + \def\InCa@Mod#1!#2!{% + \ifcase#2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase#1 % + 0% + \else + \expandafter\InCa@@Mod + \romannumeral 0% + \ifnum#1<\z@ + \expandafter-\number-#1% + \else + \expandafter+\number#1% + \fi + \expandafter!% + \romannumeral 0% + \ifnum#2<\z@ + \expandafter-\number-#2% + \else + \expandafter+\number#2% + \fi + !% + \fi + \fi + }% + \def\InCa@Temp#1{% + \def\IntCalcMod##1!##2!{% + \number + \ifcase##2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase##1 % + 0% + \else + \the\numexpr##1-(##1-(##2-1)/2)/##2*##2\relax + \fi + \fi + #1% + }% + }% + \InCa@Temp{ }% + \def\InCa@@Mod#1#2!#3#4!{% + \if#3+% + \if#1+% + \the\numexpr#2-\InCa@@Div+#2!+#4!*#4\relax + \else + \expandafter\InCa@ModX + \the\numexpr-#2+\InCa@@Div+#2!+#4!*#4!#4!% + \fi + \else + -% + \if#1+% + \expandafter\InCa@ModX + \the\numexpr-#2+\InCa@@Div+#2!+#4!*#4!#4!% + \else + \the\numexpr#2-\InCa@@Div+#2!+#4!*#4\relax + \fi + \fi + }% + \def\InCa@ModX#1!#2!{% + \ifcase#1 % + 0% + \else + \the\numexpr#1+#2\relax + \fi + }% + \expandafter\InCa@AtEnd +\fi% +\def\intcalcNum#1{% + \number\expandafter\InCa@FirstOfOne\number#1! % +} +\def\intcalcInv#1{% + \number\expandafter\InCa@FirstOfOne\number-#1! % +} +\def\InCa@FirstOfOne#1!{#1} +\def\intcalcAbs#1{% + \number\expandafter\InCa@Abs\number#1! % +} +\def\intcalcSgn#1{% + \number\expandafter\InCa@Sgn\number#1! % +} +\def\intcalcMin#1#2{% + \number\expandafter\InCa@Min + \number\number#1\expandafter!\number#2! % +} +\def\intcalcMax#1#2{% + \number\expandafter\InCa@Max + \number\number#1\expandafter!\number#2! % +} +\def\intcalcCmp#1#2{% + \number\expandafter\InCa@Cmp + \number\number#1\expandafter!\number#2! % +}% +\def\intcalcInc#1{% + \number\expandafter\InCa@IncSwitch\number#1! % +} +\def\InCa@IncSwitch#1#2!{% + \ifx#1-% + -% + \csname InCa@Empty% + \InCa@Dec#2!% + \else + \csname InCa@Empty% + \InCa@Inc#1#2!% + \fi +} +\def\intcalcDec#1{% + \number\expandafter\InCa@DecSwitch\number#1! % +} +\def\InCa@DecSwitch#1#2!{% + \ifx#1-% + -% + \csname InCa@Empty% + \expandafter\InCa@Inc#2!% + \else + \ifx#10% + -1% + \else + \csname InCa@Empty% + \InCa@Dec#1#2!% + \fi + \fi +} +\def\IntCalcInc#1!{% + \number\csname InCa@Empty\InCa@Inc#1! % +} +\def\IntCalcDec#1!{% + \number\csname InCa@Empty\InCa@Dec#1! % +} +\def\InCa@Inc#1#2{% + \ifx#2!% + \csname InCa@IncDigit#1\endcsname1% + \else + \csname InCa@IncDigit#1% + \expandafter\InCa@Inc\expandafter#2% + \fi +} +\def\InCa@Temp#1#2{% + \expandafter\def\csname InCa@IncDigit#1\endcsname##1{% + \endcsname + 0% + \ifcase##1 % + #1% + \else + #2% + \fi + }% +} +\InCa@Temp 01 +\InCa@Temp 12 +\InCa@Temp 23 +\InCa@Temp 34 +\InCa@Temp 45 +\InCa@Temp 56 +\InCa@Temp 67 +\InCa@Temp 78 +\InCa@Temp 89 +\expandafter\def\csname InCa@IncDigit9\endcsname#1{% + \expandafter\endcsname + \ifcase#1 % + 09% + \else + 10% + \fi +} +\def\InCa@Dec#1#2{% + \ifx#2!% + \csname InCa@DecDigit#1\endcsname1% + \else + \csname InCa@DecDigit#1% + \expandafter\InCa@Dec\expandafter#2% + \fi +} +\def\InCa@Temp#1#2{% + \expandafter\def\csname InCa@DecDigit#1\endcsname##1{% + \endcsname + 0% + \ifcase##1 % + #1% + \else + #2% + \fi + }% +} +\InCa@Temp 98 +\InCa@Temp 87 +\InCa@Temp 76 +\InCa@Temp 65 +\InCa@Temp 54 +\InCa@Temp 43 +\InCa@Temp 32 +\InCa@Temp 21 +\InCa@Temp 10 +\expandafter\def\csname InCa@DecDigit0\endcsname#1{% + \expandafter\endcsname + \ifcase#1 % + 00% + \else + 19% + \fi +} +\def\intcalcAdd#1#2{% + \number + \expandafter\InCa@AddSwitch + \number\number#1\expandafter!% + \number#2! % +} +\def\intcalcSub#1#2{% + \number + \expandafter\InCa@AddSwitch + \number\number#1\expandafter!% + \number-\number#2! % +} +\def\InCa@AddSwitch#1!#2!{% + \ifnum#1<\z@ + \ifnum#2<\z@ + -% + \ifnum#1<#2 % + \expandafter\InCa@Add\number-#1\expandafter!% + \@gobble#2!% + \else + \expandafter\InCa@Add\number-#2\expandafter!% + \@gobble#1!% + \fi + \else + \ifnum-#1>#2 % + -% + \expandafter\InCa@Sub\@gobble#1!#2!% + \else + \expandafter\InCa@Sub\number#2\expandafter!% + \@gobble#1!% + \fi + \fi + \else + \ifnum#2<\z@ + \ifnum#1>-#2 % + \expandafter\InCa@Sub\number#1\expandafter!% + \@gobble#2!% + \else + -% + \expandafter\InCa@Sub\@gobble#2!#1!% + \fi + \else + \ifnum#1>#2 % + \InCa@Add#1!#2!% + \else + \InCa@Add#2!#1!% + \fi + \fi + \fi +} +\def\IntCalcAdd#1!#2!{% + \number\InCa@Add#1!#2! % +} +\def\IntCalcSub#1!#2!{% + \number\InCa@Sub#1!#2! % +} +\begingroup + \def\x#1{\endgroup + \let\InCa@Space= #1% + }% +\x{ } +\def\InCa@Add#1!#2!{% + \ifcase#2 % + #1% + \else + \InCa@@Add#1!#2!000000000\InCa@Space + \fi +} +\def\InCa@Sub#1!#2!{% + \ifnum#1=#2 % + 0% + \else + \InCa@@Sub#1!#2!000000000\InCa@Space + \fi +} +\def\InCa@@Add#1!#2#3!{% + \ifx\InCa@Empty#3\InCa@Empty + \@ReturnAfterElseFi{% + \InCa@@@Add!!#1!#2% + }% + \else + \@ReturnAfterFi{% + \InCa@@Add#1!#3!#2% + }% + \fi +} +\def\InCa@@Sub#1!#2#3!{% + \ifx\InCa@Empty#3\InCa@Empty + \@ReturnAfterElseFi{% + \InCa@@@Sub!!#1!#2% + }% + \else + \@ReturnAfterFi{% + \InCa@@Sub#1!#3!#2% + }% + \fi +} +\def\InCa@@@Add#1!#2!#3#4!#5{% + \ifx\InCa@Empty#4\InCa@Empty + \csname InCa@Empty% + \@ReturnAfterElseFi{% + \InCa@ProcessAdd#1#3!#5#2% + }% + \else + \@ReturnAfterFi{% + \InCa@@@Add#1#3!#5#2!#4!% + }% + \fi +} +\def\InCa@@@Sub#1!#2!#3#4!#5{% + \ifx\InCa@Empty#4\InCa@Empty + \csname @gobble% + \@ReturnAfterElseFi{% + \InCa@ProcessSub#1#3!#5#2% + }% + \else + \@ReturnAfterFi{% + \InCa@@@Sub#1#3!#5#2!#4!% + }% + \fi +} +\def\InCa@ProcessAdd#1#2!#3#4{% + \ifx\InCa@Empty#2\InCa@Empty + \csname InCa@AddDigit#1\endcsname#3% + \romannumeral0#4% + \else + \csname InCa@AddDigit#1\csname InCa@DigitCarry#3% + \@ReturnAfterFi{% + \InCa@ProcessAdd#2!#4% + }% + \fi +} +\def\InCa@ProcessSub#1#2!#3#4{% + \ifx\InCa@Empty#2\InCa@Empty + \csname InCa@SubDigit#1\endcsname#3% + \romannumeral0#4% + \else + \csname InCa@SubDigit#1\csname InCa@DigitCarry#3% + \@ReturnAfterFi{% + \InCa@ProcessSub#2!#4% + }% + \fi +} +\def\InCa@Temp#1#2{% + \expandafter\def\csname InCa@DigitCarry#1\endcsname##1{% + \ifcase##1 % + \endcsname#1% + \else + \endcsname#2% + \fi + }% +} +\InCa@Temp 01 +\InCa@Temp 12 +\InCa@Temp 23 +\InCa@Temp 34 +\InCa@Temp 45 +\InCa@Temp 56 +\InCa@Temp 67 +\InCa@Temp 78 +\InCa@Temp 89 +\InCa@Temp 9{{10}} +\expandafter\def\csname InCa@AddDigit0\endcsname#1{% + \ifnum#1>9 % + \endcsname10% + \else + \endcsname0#1% + \fi +} +\def\InCa@Temp#1#2#3{% + \expandafter\def\csname InCa@AddDigit#1\endcsname##1{% + \ifnum##1>#2 % + \endcsname 1% + \else + \endcsname 0% + \fi + \ifcase##1 #1% 0 + #3% + \else #1% 10 + \fi + }% +} +\InCa@Temp 18{% + \or 2% 1 + \or 3% 2 + \or 4% 3 + \or 5% 4 + \or 6% 5 + \or 7% 6 + \or 8% 7 + \or 9% 8 + \or 0% 9 +}% +\InCa@Temp 27{% + \or 3% 1 + \or 4% 2 + \or 5% 3 + \or 6% 4 + \or 7% 5 + \or 8% 6 + \or 9% 7 + \or 0% 8 + \or 1% 9 +}% +\InCa@Temp 36{% + \or 4% 1 + \or 5% 2 + \or 6% 3 + \or 7% 4 + \or 8% 5 + \or 9% 6 + \or 0% 7 + \or 1% 8 + \or 2% 9 +}% +\InCa@Temp 45{% + \or 5% 1 + \or 6% 2 + \or 7% 3 + \or 8% 4 + \or 9% 5 + \or 0% 6 + \or 1% 7 + \or 2% 8 + \or 3% 9 +}% +\InCa@Temp 54{% + \or 6% 1 + \or 7% 2 + \or 8% 3 + \or 9% 4 + \or 0% 5 + \or 1% 6 + \or 2% 7 + \or 3% 8 + \or 4% 9 +}% +\InCa@Temp 63{% + \or 7% 1 + \or 8% 2 + \or 9% 3 + \or 0% 4 + \or 1% 5 + \or 2% 6 + \or 3% 7 + \or 4% 8 + \or 5% 9 +}% +\InCa@Temp 72{% + \or 8% 1 + \or 9% 2 + \or 0% 3 + \or 1% 4 + \or 2% 5 + \or 3% 6 + \or 4% 7 + \or 5% 8 + \or 6% 9 +}% +\InCa@Temp 81{% + \or 9% 1 + \or 0% 2 + \or 1% 3 + \or 2% 4 + \or 3% 5 + \or 4% 6 + \or 5% 7 + \or 6% 8 + \or 7% 9 +}% +\InCa@Temp 90{% + \or 0% 1 + \or 1% 2 + \or 2% 3 + \or 3% 4 + \or 4% 5 + \or 5% 6 + \or 6% 7 + \or 7% 8 + \or 8% 9 +}% +\def\InCa@Temp#1#2{% + \expandafter\def\csname InCa@SubDigit#1\endcsname##1{% + \ifnum##1>#1 % + \endcsname 1% + \else + \endcsname 0% + \fi + \ifcase##1 #1% 0 + #2% + \else #1% 10 + \fi + }% +} +\InCa@Temp 0{% + \or 9% 1 + \or 8% 2 + \or 7% 3 + \or 6% 4 + \or 5% 5 + \or 4% 6 + \or 3% 7 + \or 2% 8 + \or 1% 9 +} +\InCa@Temp 1{% + \or 0% 1 + \or 9% 2 + \or 8% 3 + \or 7% 4 + \or 6% 5 + \or 5% 6 + \or 4% 7 + \or 3% 8 + \or 2% 9 +} +\InCa@Temp 2{% + \or 1% 1 + \or 0% 2 + \or 9% 3 + \or 8% 4 + \or 7% 5 + \or 6% 6 + \or 5% 7 + \or 4% 8 + \or 3% 9 +} +\InCa@Temp 3{% + \or 2% 1 + \or 1% 2 + \or 0% 3 + \or 9% 4 + \or 8% 5 + \or 7% 6 + \or 6% 7 + \or 5% 8 + \or 4% 9 +} +\InCa@Temp 4{% + \or 3% 1 + \or 2% 2 + \or 1% 3 + \or 0% 4 + \or 9% 5 + \or 8% 6 + \or 7% 7 + \or 6% 8 + \or 5% 9 +} +\InCa@Temp 5{% + \or 4% 1 + \or 3% 2 + \or 2% 3 + \or 1% 4 + \or 0% 5 + \or 9% 6 + \or 8% 7 + \or 7% 8 + \or 6% 9 +} +\InCa@Temp 6{% + \or 5% 1 + \or 4% 2 + \or 3% 3 + \or 2% 4 + \or 1% 5 + \or 0% 6 + \or 9% 7 + \or 8% 8 + \or 7% 9 +} +\InCa@Temp 7{% + \or 6% 1 + \or 5% 2 + \or 4% 3 + \or 3% 4 + \or 2% 5 + \or 1% 6 + \or 0% 7 + \or 9% 8 + \or 8% 9 +} +\InCa@Temp 8{% + \or 7% 1 + \or 6% 2 + \or 5% 3 + \or 4% 4 + \or 3% 5 + \or 2% 6 + \or 1% 7 + \or 0% 8 + \or 9% 9 +} +\InCa@Temp 9{% + \or 8% 1 + \or 7% 2 + \or 6% 3 + \or 5% 4 + \or 4% 5 + \or 3% 6 + \or 2% 7 + \or 1% 8 + \or 0% 9 +} +\def\intcalcShl#1{% + \number\expandafter\InCa@ShlSwitch\number#1! % +} +\def\InCa@ShlSwitch#1#2!{% + \ifx#1-% + -\csname InCa@Empty% + \InCa@Shl#2!% + \else + \csname InCa@Empty% + \InCa@Shl#1#2!% + \fi +} +\def\IntCalcShl#1!{% + \number + \csname InCa@Empty% + \InCa@Shl#1! % +} +\def\InCa@Shl#1#2{% + \ifx#2!% + \csname InCa@ShlDigit#1\endcsname0% + \else + \csname InCa@ShlDigit#1% + \@ReturnAfterFi{% + \InCa@Shl#2% + }% + \fi +} +\expandafter\def\csname InCa@ShlDigit0\endcsname{% + \endcsname0% +} +\def\InCa@Temp#1#2#3#4#5{% + \expandafter\def\csname InCa@ShlDigit#1\endcsname##1{% + \expandafter\endcsname + \ifcase##1 % + #2#3% + \else + #4#5% + \fi + }% +} +\InCa@Temp 10203 +\InCa@Temp 20405 +\InCa@Temp 30607 +\InCa@Temp 40809 +\InCa@Temp 51011 +\InCa@Temp 61213 +\InCa@Temp 71415 +\InCa@Temp 81617 +\InCa@Temp 91819 +\def\intcalcShr#1{% + \number\expandafter\InCa@ShrSwitch\number#1! % +} +\def\InCa@ShrSwitch#1#2!{% + \ifx#1-% + -\InCa@Shr#2!% + \else + \InCa@Shr#1#2!% + \fi +} +\def\IntCalcShr#1!{% + \number\InCa@Shr#1! % +} +\def\InCa@Shr#1#2{% + \InCa@ShrDigit#1!% + \ifx#2!% + \else + \@ReturnAfterFi{% + \ifodd#1 % + \@ReturnAfterElseFi{% + \InCa@Shr{1#2}% + }% + \else + \expandafter\InCa@Shr\expandafter#2% + \fi + }% + \fi +} +\def\InCa@ShrDigit#1!{% + \ifcase#1 0% 0 + \or 0% 1 + \or 1% 2 + \or 1% 3 + \or 2% 4 + \or 2% 5 + \or 3% 6 + \or 3% 7 + \or 4% 8 + \or 4% 9 + \or 5% 10 + \or 5% 11 + \or 6% 12 + \or 6% 13 + \or 7% 14 + \or 7% 15 + \or 8% 16 + \or 8% 17 + \or 9% 18 + \or 9% 19 + \fi +} +\def\InCa@Temp#1{% + \def\InCa@Tim##1##2{% + \number + \ifcase##2 % 0 + 0% + \or % 1 + ##1% + \else % 2-9 + \csname InCa@Empty% + \InCa@ProcessTim##2##1!% + \fi + #1% + }% +} +\InCa@Temp{ } +\def\InCa@ProcessTim#1#2#3{% + \ifx#3!% + \csname InCa@TimDigit#2\endcsname#10% + \else + \csname InCa@TimDigit#2\csname InCa@Param#1% + \@ReturnAfterFi{% + \InCa@ProcessTim#1#3% + }% + \fi +} +\def\InCa@Temp#1{% + \expandafter\def\csname InCa@Param#1\endcsname{% + \endcsname#1% + }% +} +\InCa@Temp 0% +\InCa@Temp 1% +\InCa@Temp 2% +\InCa@Temp 3% +\InCa@Temp 4% +\InCa@Temp 5% +\InCa@Temp 6% +\InCa@Temp 7% +\InCa@Temp 8% +\InCa@Temp 9% +\expandafter\def\csname InCa@TimDigit0\endcsname#1#2{% + \endcsname + 0#2% +} +\expandafter\def\csname InCa@TimDigit1\endcsname#1#2{% + \ifcase#2 % + \endcsname 0#1% + \else + \csname InCa@AddDigit#1\endcsname #2% + \fi +} +\def\InCa@Temp#1#2{% + \expandafter\def\csname InCa@TimDigit#1\endcsname##1{% + \expandafter\InCa@TimDigitCarry + \number + \ifcase##1 0% 0 + #2% + \fi + !% + }% +} +\InCa@Temp 2{% + \or 2% 1 + \or 4% 2 + \or 6% 3 + \or 8% 4 + \or 10% 5 + \or 12% 6 + \or 14% 7 + \or 16% 8 + \or 18% 9 +} +\InCa@Temp 3{% + \or 3% 1 + \or 6% 2 + \or 9% 3 + \or 12% 4 + \or 15% 5 + \or 18% 6 + \or 21% 7 + \or 24% 8 + \or 27% 9 +} +\InCa@Temp 4{% + \or 4% 1 + \or 8% 2 + \or 12% 3 + \or 16% 4 + \or 20% 5 + \or 24% 6 + \or 28% 7 + \or 32% 8 + \or 36% 9 +} +\InCa@Temp 5{% + \or 5% 1 + \or 10% 2 + \or 15% 3 + \or 20% 4 + \or 25% 5 + \or 30% 6 + \or 35% 7 + \or 40% 8 + \or 45% 9 +} +\InCa@Temp 6{% + \or 6% 1 + \or 12% 2 + \or 18% 3 + \or 24% 4 + \or 30% 5 + \or 36% 6 + \or 42% 7 + \or 48% 8 + \or 54% 9 +} +\InCa@Temp 7{% + \or 7% 1 + \or 14% 2 + \or 21% 3 + \or 28% 4 + \or 35% 5 + \or 42% 6 + \or 49% 7 + \or 56% 8 + \or 63% 9 +} +\InCa@Temp 8{% + \or 8% 1 + \or 16% 2 + \or 24% 3 + \or 32% 4 + \or 40% 5 + \or 48% 6 + \or 56% 7 + \or 64% 8 + \or 72% 9 +} +\InCa@Temp 9{% + \or 9% 1 + \or 18% 2 + \or 27% 3 + \or 36% 4 + \or 45% 5 + \or 54% 6 + \or 63% 7 + \or 72% 8 + \or 81% 9 +} +\def\InCa@TimDigitCarry#1!{% + \ifnum#1<10 % + \csname InCa@AddDigit#1\expandafter\endcsname + \else + \@ReturnAfterFi{% + \InCa@@TimDigitCarry#1!% + }% + \fi +} +\def\InCa@@TimDigitCarry#1#2!#3{% + \csname InCa@DigitCarry#1% + \csname InCa@AddDigit#2\endcsname #3% +} +\def\intcalcMul#1#2{% + \number + \expandafter\InCa@MulSwitch + \number\number#1\expandafter!% + \number#2! % +} +\def\InCa@MulSwitch#1!#2!{% + \ifnum#1<\z@ + \ifnum#2<\z@ + \ifnum#1<#2 % + \expandafter\InCa@Mul\number-#1\expandafter!% + \@gobble#2!% + \else + \expandafter\InCa@Mul\number-#2\expandafter!% + \@gobble#1!% + \fi + \else + -% + \ifnum-#1>#2 % + \expandafter\InCa@Mul\@gobble#1!#2!% + \else + \expandafter\InCa@Mul\number#2\expandafter!% + \@gobble#1!% + \fi + \fi + \else + \ifnum#2<\z@ + -% + \ifnum#1>-#2 % + \expandafter\InCa@Mul\number#1\expandafter!% + \@gobble#2!% + \else + \expandafter\InCa@Mul\@gobble#2!#1!% + \fi + \else + \ifnum#1>#2 % + \InCa@Mul#1!#2!% + \else + \InCa@Mul#2!#1!% + \fi + \fi + \fi +} +\def\IntCalcMul#1!#2!{% + \number\InCa@Mul#1!#2! % +} +\def\InCa@Mul#1!#2!{% + \ifcase#2 % + 0% + \or + #1% + \or + \csname InCa@Empty% + \expandafter\InCa@Shl#1!% + \else + \ifnum#2<10 % + \InCa@Tim{#1}#2% + \else + \InCa@ProcessMul!#2!#1!% + \fi + \fi +} +\def\InCa@ProcessMul#1!#2#3!#4!{% + \ifx\InCa@Empty#3\InCa@Empty + \expandafter\InCa@Add\number + #10\expandafter\expandafter\expandafter!% + \InCa@Tim{#4}#2!% + \else + \ifx\InCa@Empty#1\InCa@Empty + \expandafter\expandafter\expandafter\InCa@ProcessMul + \InCa@Tim{#4}#2!% + #3!#4!% + \else + \expandafter\InCa@ProcessMul\number + \expandafter\InCa@Add\number% + #10\expandafter\expandafter\expandafter!% + \InCa@Tim{#4}#2!!% + #3!#4!% + \fi + \fi +} +\def\intcalcSqr#1{% + \number\expandafter\InCa@Sqr\number#1! % +} +\def\InCa@Sqr#1#2!{% + \ifx#1-% + \InCa@Mul#2!#2!% + \else + \InCa@Mul#1#2!#1#2!% + \fi +} +\def\intcalcFac#1{% + \number\expandafter\InCa@Fac\number#1! % +} +\def\intcalcPow#1#2{% + \number\expandafter\InCa@Pow + \number\number#1\expandafter!% + \number#2! % +} +\def\InCa@Pow#1#2!#3#4!{% + \ifcase#3#4 % power = 0 + 1% + \or % power = 1 + #1#2% + \or % power = 2 + \ifx#1-% + \InCa@Mul#2!#2!% + \else + \InCa@Mul#1#2!#1#2!% + \fi + \else + \ifcase#1#2 % basis = 0, power <> 0 + 0% + \ifx#3-% power < 0 + 0\IntCalcError:DivisionByZero% + \fi + \or + 1% basis = 1 + \else + \ifnum#1#2=\m@ne % basis = -1 + \ifodd#3#4 % + -% + \fi + 1% + \else % |basis| > 1 + \ifx#3-% power < 0 + 0% + \else % power > 2 + \ifx#1-% basis < 0 + \ifodd#3#4 % + -% + \fi + \InCa@PowRec#2!#3#4!1!% + \else + \InCa@PowRec#1#2!#3#4!1!% + \fi + \fi + \fi + \fi + \fi +} +\def\InCa@PowRec#1!#2!#3!{% + \ifnum#2=\@ne + \ifnum#1>#3 % + \InCa@Mul#1!#3!% + \else + \InCa@Mul#3!#1!% + \fi + \else + \expandafter\InCa@PowRec + \number\InCa@Mul#1!#1!\expandafter!% + \number\intcalcShr{#2}\expandafter!% + \number + \ifodd#2 % + \ifnum#1>#3 % + \InCa@Mul#1!#3!% + \else + \InCa@Mul#3!#1!% + \fi + \else + #3% + \fi + \expandafter!% + \fi +} +\def\intcalcDiv#1#2{% + \number\expandafter\InCa@Div + \number\number#1\expandafter!% + \number#2! % +} +\def\InCa@Div#1!#2!{% + \ifcase#2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase#1 % + 0% + \else + \expandafter\InCa@DivSwitch + \number#1\expandafter!% + \number#2!% + \fi + \fi +} +\def\InCa@Temp#1{% + \def\IntCalcDiv##1!##2!{% + \number + \ifcase##2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase##1 % + 0% + \else + \InCa@@Div##1!##2!% + \fi + \fi + #1% + }% +} +\InCa@Temp{ }% +\def\InCa@DivSwitch#1!#2!{% + \ifnum#1<\z@ + \ifnum#2<\z@ + \expandafter\InCa@@Div\number-#1\expandafter!% + \@gobble#2!% + \else + -% + \expandafter\InCa@@Div\@gobble#1!#2!% + \fi + \else + \ifnum#2<\z@ + -% + \expandafter\InCa@@Div\number#1\expandafter!% + \@gobble#2!% + \else + \InCa@@Div#1!#2!% + \fi + \fi +} +\def\InCa@@Div#1!#2!{% + \ifnum#1>#2 % + \ifcase#2 % 0 already catched +? \IntCalcError:ThisCannotHappen% + \or % 1 + #1% + \or % 2 + \InCa@Shr#1!% + \else + \InCa@DivStart!#1!#2!#2!% + \fi + \else + \ifnum#1=#2 % + 1% + \else + 0% + \fi + \fi +} +\def\InCa@DivStart#1!#2#3!#4#5{% + \ifx#5!% + \@ReturnAfterElseFi{% + \InCa@DivStartI{#1#2}#3=!% + }% + \else + \@ReturnAfterFi{% + \InCa@DivStart{#1#2}!#3!#5% + }% + \fi +} +\def\InCa@DivStartI#1!#2!{% + \expandafter\InCa@DivStartII + \number#2\expandafter\expandafter\expandafter!% + \intcalcShl{#2}!% + #1!% +} +\def\InCa@DivStartII#1!#2!{% + \expandafter\InCa@DivStartIII + \number#1\expandafter!% + \number#2\expandafter\expandafter\expandafter!% + \intcalcShl{#2}!% +} +\def\InCa@DivStartIII#1!#2!#3!{% + \expandafter\InCa@DivStartIV + \number#1\expandafter!% + \number#2\expandafter!% + \number#3\expandafter!% + \number\InCa@Add#3!#2!\expandafter\expandafter\expandafter!% + \intcalcShl{#3}!% +} +\def\InCa@DivStartIV#1!#2!#3!#4!#5!#6!{% + \InCa@ProcessDiv#6!#1!#2!#3!#4!#5!/% +} +\def\InCa@ProcessDiv#1#2#3!#4!#5!#6!#7!#8!#9/{% + #9% + \ifnum#1<#4 % 0 + 0% + \ifx#2=% + \else + \InCa@ProcessDiv{#1#2}#3!#4!#5!#6!#7!#8!% + \fi + \else % 1-9 + \ifnum#1<#5 % 1 + 1% + \ifx#2=% + \else + \expandafter\InCa@ProcessDiv\expandafter{% + \number\InCa@Sub#1!#4!% + #2% + }#3!#4!#5!#6!#7!#8!% + \fi + \else % 2-9 + \ifnum#1<#7 % 2 3 4 5 + \ifnum#1<#6 % 2 3 + \@ReturnAfterElseFi{% + \expandafter\InCa@@ProcessDiv + \number\InCa@Sub#1!#5!!% + 23% + }% + \else % 4 5 + \@ReturnAfterFi{% + \expandafter\InCa@@ProcessDiv + \number\InCa@Sub#1!#6!!% + 45% + }% + \fi + #2#3!#4!#5!#6!#7!#8!% + \else % 6 7 8 9 + \ifnum#1<#8 % 6 7 + \@ReturnAfterElseFi{% + \expandafter\InCa@@ProcessDiv + \number\InCa@Sub#1!#7!!% + 67% + }% + \else % 8 9 + \@ReturnAfterFi{% + \expandafter\InCa@@ProcessDiv + \number\InCa@Sub#1!#8!!% + 89% + }% + \fi + #2#3!#4!#5!#6!#7!#8!% + \fi + \fi + \fi + \ifx#2=% + \expandafter\@gobble + \fi + /% +} +\def\InCa@@ProcessDiv#1!#2#3#4#5!#6!{% + \ifnum#1<#6 % + #2% + \@ReturnAfterElseFi{% + \ifx#4=% + \expandafter\InCa@CleanupIV + \else + \@ReturnAfterFi{% + \InCa@ProcessDiv{#1#4}#5!#6!% + }% + \fi + }% + \else + #3% + \@ReturnAfterFi{% + \ifx#4=% + \expandafter\InCa@CleanupIV + \else + \@ReturnAfterFi{% + \expandafter\InCa@ProcessDiv\expandafter{% + \number\InCa@Sub#1!#6! % + #4% + }#5!#6!% + }% + \fi + }% + \fi +} +\def\InCa@CleanupIV#1!#2!#3!#4!{} +\def\intcalcMod#1#2{% + \number\expandafter\InCa@Mod + \number\number#1\expandafter!% + \number#2! % +} +\def\InCa@Mod#1!#2!{% + \ifcase#2 % + 0\IntCalcError:DivisionByZero% + \else + \ifnum#2<\z@ + -% + \expandafter\InCa@Mod + \number-#1\expandafter!% + \number-#2!% + \else + \ifcase#1 % + 0% + \else + \ifcase#2 % 0 already catched +? \IntCalcError:ThisCannotHappen% + \or % 1 + 0% + \or % 2 + \ifodd#1 1\else 0\fi + \else + \ifnum#1<\z@ + \expandafter\InCa@ModShift + \number-% + \expandafter\InCa@Sub + \number\@gobble#1\expandafter!% + \number\intcalcMul{#2}{% + \expandafter\InCa@Div\@gobble#1!#2!% + }!% + !#2!% + \else + \expandafter\InCa@Sub\number#1\expandafter!% + \number\intcalcMul{#2}{\InCa@Div#1!#2!}!% + \fi + \fi + \fi + \fi + \fi +} +\def\InCa@Temp#1{% + \def\IntCalcMod##1!##2!{% + \number + \ifcase##2 % + 0\IntCalcError:DivisionByZero% + \else + \ifcase##1 % + 0% + \else + \ifcase##2 % 0 already catched +? \IntCalcError:ThisCannotHappen + \or % 1 + 0% + \or % 2 + \ifodd ##1 1\else 0\fi + \else + \expandafter\InCa@Sub\number##1\expandafter!% + \number\intcalcMul{##2}{\InCa@Div##1!##2!}!% + \fi + \fi + \fi + #1% + }% +} +\InCa@Temp{ }% +\def\InCa@ModShift#1!#2!{% + \ifnum#1<\z@ + \expandafter\InCa@Sub\number#2\expandafter!% + \@gobble#1!% + \else + #1% + \fi +} +\def\InCa@Empty{} +\expandafter\ifx\csname @gobble\endcsname\relax + \long\def\@gobble#1{}% +\fi +\long\def\@ReturnAfterFi#1\fi{\fi#1}% +\long\def\@ReturnAfterElseFi#1\else#2\fi{\fi#1}% +\InCa@AtEnd% +%% \section{Installation} +\endinput +%% +%% End of file `intcalc.sty'. |