summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/bardiag/example
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-04-07 16:40:25 +0000
committerKarl Berry <karl@freefriends.org>2011-04-07 16:40:25 +0000
commit4e239d6efe51876caaa5faa36bdfc9398b9122dc (patch)
treee2c50b0526c477cb1a88e38ed2862eea8d47ce96 /Master/texmf-dist/doc/latex/bardiag/example
parentccb4f088deca18af597bba24553e8e664daa0498 (diff)
bardiag doc update
git-svn-id: svn://tug.org/texlive/trunk@22013 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/bardiag/example')
-rw-r--r--Master/texmf-dist/doc/latex/bardiag/example/barddoc.sty39
-rw-r--r--Master/texmf-dist/doc/latex/bardiag/example/bardiag.bar82
-rw-r--r--Master/texmf-dist/doc/latex/bardiag/example/bardiag.cfg126
-rw-r--r--Master/texmf-dist/doc/latex/bardiag/example/bardiag.sty699
-rw-r--r--Master/texmf-dist/doc/latex/bardiag/example/pstfp.sty1137
5 files changed, 0 insertions, 2083 deletions
diff --git a/Master/texmf-dist/doc/latex/bardiag/example/barddoc.sty b/Master/texmf-dist/doc/latex/bardiag/example/barddoc.sty
deleted file mode 100644
index b7c7ca78b4c..00000000000
--- a/Master/texmf-dist/doc/latex/bardiag/example/barddoc.sty
+++ /dev/null
@@ -1,39 +0,0 @@
-\usepackage[a4paper,nohead]{geometry}
-\usepackage{bardiag}
-%\usepackage{showkeys}
-
-\usepackage{graphicx}
-\usepackage{subfigure}
-
-\usepackage{verbatim}
-
-\usepackage{makeidx}
-
-\usepackage{listings}
-
-\lstset{
- %language=[LaTeX]TeX,
- basicstyle=\small\ttfamily,
- numbers=left,
- numberstyle=\small,
- stringstyle=\ttfamily,
- commentstyle=\itshape,
- stepnumber=1
-}
-
-%\usepackage{xr}
-%\externaldocument{bardiag2}
-
-
-\renewcommand \thefigure {\thesection.\arabic{figure}}
-\newcommand{\mysection}[1]{\section{{#1}}\setcounter{figure}{0}}
-%-------------------------------------------------------
-\newcommand{\barvers}{0.5 }
-
-\newcommand{\bard}{{ \texttt{bardiag} }}
-\newcommand{\pst}{{ \texttt{PSTricks} }}
-\newcommand{\figref}[1]{Fig.\ref{#1}}
-\newcommand{\pac}[1]{{\texttt{#1}}}
-
-\date{December 10, 2003}
-\author{R. Stepanyan\\rstepanyan@yahoo.com}
diff --git a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.bar b/Master/texmf-dist/doc/latex/bardiag/example/bardiag.bar
deleted file mode 100644
index be523f105e2..00000000000
--- a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.bar
+++ /dev/null
@@ -1,82 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% bar primitives
-\newcommand{\barRect}[6][fillstyle=solid]
-{
- {\psframe[linestyle=none,fillcolor=#6,#1](#2,#3)(#4,#5)}
-}
-% - - - - - -
-\newcommand{\xtd}{0}
-\newcommand{\ytd}{0}
-\newcommand{\xtda}{0}
-\newcommand{\ytda}{0}
-\newcommand{\xtdb}{0}
-\newcommand{\ytdb}{0}
-
-\newcommand{\barTDRect}[6][fillstyle=solid]
-{
-%
- \psframe[linestyle=solid,fillcolor=#6,#1](#2,#3)(#4,#5)
-
- % let's draw polygons: left and upper
- % left-> (#4;#3)(#4+\bdar\tdhor;#3+\dbar\tdver)
- % (#4+\dbar\tdhor;#5+\dbar\tdver)(#4;#5)
- % right->(#4;#5)(#4+\dbar\tdhor;#5+\dbar\tdver)
- % (#3+\dbar\tdhor;#5+\dbar\tdver)(#2;#3)
- %
-
- \FPmul{\xtd}{\dbar}{\tdhor}
- \FPmul{\ytd}{\dbar}{\tdver}
-
- \FPfadd{\xtda}{#2}{\xtd}
- \FPfadd{\xtdb}{#4}{\xtd}
- \FPfadd{\ytda}{#3}{\ytd}
- \FPfadd{\ytdb}{#5}{\ytd}
-
- \pspolygon[linestyle=solid,fillcolor=#6,#1](#4,#3)(\xtdb,\ytda)(\xtdb,\ytdb)(#4,#5)(#4,#3)
- \pspolygon[linestyle=solid,fillcolor=#6,#1](#4,#5)(\xtdb,\ytdb)(\xtda,\ytdb)(#2,#5)(#4,#5)
-}
-
-\newcommand{\elRx}{0}
-\newcommand{\elRy}{0}
-\newcommand{\barCylinder}[6][none]
-{
- \FPmul{\xtd}{\dbar}{\tdx}
- \FPmul{\ytd}{\dbar}{\tdy}
-
- \FPdiv{\elRx}{\dbar}{2}
- \FPdiv{\elRy}{\ytd}{2}
-
- \ifthenelse{\bdorientation = \bdvert}
- {
- \FPfadd{\tmpvar}{#2}{#4}
- \FPdiv{\xtda}{\tmpvar}{2} % Xcenter of the bottom ellipse
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytda}{\tmpvar}{#3} % Ycenter of the bottom ellipse
- % Draw the bottom ellipse
- \psellipse[fillstyle=solid,fillcolor=#6](\xtda,\ytda)(\elRx,\elRy)
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytdb}{\tmpvar}{#5} % Ycenter of the top ellipse
- % Draw the rectangle
- \psframe[fillstyle=solid,fillcolor=#6,linecolor=#6](#2,\ytda)(#4,\ytdb)
- \psline(#2,\ytda)(#2,\ytdb)
- \psline(#4,\ytda)(#4,\ytdb)
- % Draw the top ellipse
- \psellipse[fillstyle=solid,fillcolor=#6](\xtda,\ytdb)(\elRx,\elRy)
- }
- { \FPfadd{\tmpvar}{#3}{#5}
- \FPdiv{\ytda}{\tmpvar}{2}
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\xtda}{\tmpvar}{#2}
- % Draw the left ellipse
- \psellipse[fillstyle=solid,fillcolor=#6](\xtda,\ytda,)(\elRy,\elRx)
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytdb}{\tmpvar}{#4}
- % Draw the rectangle
- \psframe[fillstyle=solid,fillcolor=#6,linecolor=#6](\xtda,#3)(\ytdb,#5)
- \psline(\xtda,#3)(\ytdb,#3)
- \psline(\xtda,#5)(\ytdb,#5)
- % Draw the right ellipse
- \psellipse[fillstyle=solid,fillcolor=#6](\ytdb,\ytda)(\elRy,\elRx)
- }
-}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.cfg b/Master/texmf-dist/doc/latex/bardiag/example/bardiag.cfg
deleted file mode 100644
index b5910c14424..00000000000
--- a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.cfg
+++ /dev/null
@@ -1,126 +0,0 @@
-% New colors defined
-\definecolor{brown}{rgb}{.65, .16, .16}
-
-\definecolor{lightblue}{rgb}{.68, .85, .9}
-\definecolor{lightred}{rgb}{1.0, .65, .65}
-
-\definecolor{darkyellow}{rgb}{0.6, 0.6, 0.3}
-
-\definecolor{palegreen}{rgb}{.6, .98, .6}
-\definecolor{pink}{rgb}{1, .75, .8}
-\definecolor{wheat}{rgb}{.96, .87, .7}
-\definecolor{verylightgray}{gray}{0.95}
-
-
-\newcommand{\arrowheight}{\dbar}
-\newcommand{\arrowwidth}{\dbar}
-
-\newcommand{\ARbot}{0}
-\newcommand{\RECTmid}{0}
-\newcommand{\RECTwidth}{0.7} % 70% from \dbar
-\newcommand{\RECTleft}{0}
-\newcommand{\RECTright}{0}
-
-\newcommand{\mytempx}{0}
-\newcommand{\mytempxx}{0}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Additional bar primitives %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\newcommand{\barArrowRect}[6][fillstyle=solid]
-{\ifthenelse{\bdorientation = \bdvert}
- {\FPfadd{\mytempx}{#2}{#4}
- \FPdiv{\RECTmid}{\mytempx}{2}
-
- \FPfsub{\ARbot}{#5}{\arrowheight}
-
- \FPmul{\mytempx}{\dbar}{\RECTwidth}
- \FPdiv{\mytempxx}{\mytempx}{2}
- \FPfsub{\RECTleft}{\RECTmid}{\mytempxx}
- \FPfadd{\RECTright}{\RECTmid}{\mytempxx}
-
- \psframe[linestyle=none,fillcolor=#6,linecolor=#6,#1](\RECTleft,#3)(\RECTright,\ARbot)
- \pspolygon[fillcolor=#6,linecolor=#6,#1](#2,\ARbot)(\RECTmid,#5)(#4,\ARbot)(#2,\ARbot)
- }
- {\FPfadd{\mytempx}{#3}{#5}
- \FPdiv{\RECTmid}{\mytempx}{2}
- \FPfsub{\ARbot}{#4}{\arrowheight}
- \FPmul{\mytempx}{\dbar}{\RECTwidth}
- \FPdiv{\mytempxx}{\mytempx}{2}
- \FPfsub{\RECTleft}{\RECTmid}{\mytempxx}
- \FPfadd{\RECTright}{\RECTmid}{\mytempxx}
- \psframe[linestyle=none,fillcolor=#6,linecolor=#6,#1](#2,\RECTleft)(\ARbot,\RECTright)
- \pspolygon[fillcolor=#6,linecolor=#6,#1](\ARbot,#3)(#4,\RECTmid)(\ARbot,#5)(\ARbot,#3)
- }
-}
-%---------------------------------------
-\newcommand{\barGradRect}[6][fillstyle=gradient]
-{\ifthenelse{\bdorientation = \bdvert}
- {\psframe[gradbegin=#6,gradend=white,gradmidpoint=1,gradangle=45,
- fillstyle=gradient,linestyle=none,linecolor=#6](#2,#3)(#4,#5)
- }
- {\psframe[gradbegin=#6,gradend=white,gradmidpoint=1,gradangle=-45,
- fillstyle=gradient,linestyle=none,linecolor=#6](#2,#3)(#4,#5)
- }
-}
-
-\newcommand{\barGradMidRect}[6][fillstyle=gradient]
-{\ifthenelse{\bdorientation = \bdvert}
- {\psframe[gradbegin=#6,gradend=white,gradmidpoint=0.3,gradangle=90,
- fillstyle=gradient,linestyle=none,linecolor=#6](#2,#3)(#4,#5)
- }
- {\psframe[gradbegin=#6,gradend=white,gradmidpoint=0.3,gradangle=0,
- fillstyle=gradient,linestyle=none,linecolor=#6](#2,#3)(#4,#5)
- }
-}
-%---------------------------------------
-\newcommand{\barGradCylinder}[6][fillstyle=gradient]
-{ \FPmul{\xtd}{\dbar}{\tdx}
- \FPmul{\ytd}{\dbar}{\tdy}
-
- \FPdiv{\elRx}{\dbar}{2}
- \FPdiv{\elRy}{\ytd}{2}
-
- \ifthenelse{\bdorientation = \bdvert}
- {
- \FPfadd{\tmpvar}{#2}{#4}
- \FPdiv{\xtda}{\tmpvar}{2} % Xcenter of the bottom ellipse
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytda}{\tmpvar}{#3} % Ycenter of the bottom ellipse
- \newpsstyle{gradcylstyle}{gradbegin=#6,gradend=white,gradmidpoint=0.25,gradangle=90,fillstyle=gradient,linestyle=none,linecolor=#6}
- % Draw the bottom ellipse
- \psellipse[style=gradcylstyle](\xtda,\ytda)(\elRx,\elRy)
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytdb}{\tmpvar}{#5} % Ycenter of the top ellipse
- % Draw the rectangle
- \psframe[style=gradcylstyle](#2,\ytda)(#4,\ytdb)
- % Draw the top ellipse
- \psellipse[fillstyle=solid,fillcolor=#6,linecolor=#6](\xtda,\ytdb)(\elRx,\elRy)
- }
- { \FPfadd{\tmpvar}{#3}{#5}
- \FPdiv{\ytda}{\tmpvar}{2}
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\xtda}{\tmpvar}{#2}
- \newpsstyle{gradcylstyle}{gradbegin=#6,gradend=white,gradmidpoint=0.25,gradangle=0,fillstyle=gradient,linestyle=none,linecolor=#6}
- % Draw the left ellipse
- \psellipse[style=gradcylstyle](\xtda,\ytda,)(\elRy,\elRx)
- \FPdiv{\tmpvar}{\ytd}{2}
- \FPfadd{\ytdb}{\tmpvar}{#4}
- % Draw the rectangle
- \psframe[style=gradcylstyle](\xtda,#3)(\ytdb,#5)
- % Draw the right ellipse
- \psellipse[fillstyle=solid,fillcolor=#6,linecolor=#6](\ytdb,\ytda)(\elRy,\elRx)
- }
-}
-%---------------------------------------
-\newcommand{\barCoil}[6][qq]
-{\ifthenelse{\bdorientation = \bdvert}
- {\FPfadd{\mytempx}{#2}{#4}
- \FPdiv{\RECTmid}{\mytempx}{2}
- \pscoil[linecolor=#6,linewidth=3pt]{->}(\RECTmid,#3)(\RECTmid,#5)
- }
- {\FPfadd{\mytempx}{#3}{#5}
- \FPdiv{\RECTmid}{\mytempx}{2}
- \pscoil[linecolor=#5,linewidth=3pt]{->}(#2,\RECTmid)(#4,\RECTmid)
- }
-}
diff --git a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.sty b/Master/texmf-dist/doc/latex/bardiag/example/bardiag.sty
deleted file mode 100644
index 2fad655f838..00000000000
--- a/Master/texmf-dist/doc/latex/bardiag/example/bardiag.sty
+++ /dev/null
@@ -1,699 +0,0 @@
-%% =============================================
-%% IMPORTANT NOTICE:
-%%
-%% This program can be redistributed and/or modified under the terms
-%% of the LaTeX Project Public License Distributed from CTAN
-%% archives in directory macros/latex/base/lppl.txt; either
-%% version 1 of the License, or any later version.
-%%
-%% Only a few abbreviated comments remain here to describe the usage.
-%% Documentation can be found in bardiag.ps or/and bardiag.tex files
-%% =============================================
-%% Copyright 2003 Roman Stepanyan
-%% E-mail: rstepanyan@yahoo.com
-
-
-%TODO
-% Error ``whiskers'': do NOT work with \subtopbaritem !!!!
-
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-%
-\ProvidesPackage{bardiag}[2003/12/10 version 0.5]
-\def\bardiag{BagDiag}
-% This package allows to draw bar diagrams.
-% It is inspired by and build on top of PSTricks
-%
-%
-% Changelog
-% 2003/12/10 version 0.5 (compatible with 0.4, but "shapes"-macroses
-% (bars) have to accept an optional argument!)
-% "fillstyle" can be supplied to \baritem and friends
-% as an optional argument: \baritem[fillstyle=vlines*,linecolor=red]{}...
-% bardiag DOES NOT load pst-all anymore, only the necessary stuff
-% use \barspergroup{N} to make life easier (thanks to Kris Dumont)
-%
-%
-% 2003/06/29 version 0.4 (compatible with 0.3)
-% Error ``whiskers'' are added
-%
-% 2003/06/20 version 0.3 (compatible with 0.2)
-% ``Horizontal bars'' mode is added.
-%
-% 2003/05/23 version 0.2 (not compatible with 0.1)
-% Code is completely rewritten.
-% All parameters can be real numbers (not integers) thanks to fp.sty
-% A lot of changes in the interface.
-%
-% 2003/05/10 version 0.1
-% 0.first version :)
-
-
-\RequirePackage{calc}
-\RequirePackage{pstfp}
-\RequirePackage{fp-snap}
-
-
-\RequirePackage{pstricks}
-\RequirePackage{pstcol}
-\RequirePackage{pst-grad}
-\RequirePackage{multido}
-
-\RequirePackage{ifthen}
-
-% * what should be changed through \renewcommand or \setlength
-% @ arguments of functions
-% + internal variables
-
-
-%----------------------------------------
-% Horizontal or vertical bars
-\newcommand{\bdvert}{0}
-\newcommand{\bdhor}{1}
-\newcommand{\bdorientation}{\bdvert}
-
-% Each group is assumed to consist of this number of bars
-% (subtopbars not included)
-% use \barspergroup{N} to change
-\newcommand{\nbarsingroup}{1}
-\newcommand{\barspergroup}[1]{\renewcommand{\nbarsingroup}{#1}}
-% Sizes of the diag
-%
-\newcommand{\diagheight}{10} % units @
-\newcommand{\diagwidth}{10} % units @
-\newlength{\bottomheight} % cm @
-% units of length
-\newlength{\xunitlength} % cm @
-\newlength{\yunitlength} % cm @
-% of the bar
-\newcommand{\dbar}{1} % units @
-\newcommand{\dx}{2} % units @
-%-----------------------------------------
-% Sizes related to ticks and levellines
-%
-\newcommand{\betweenticks}{1} % units *
-\newcommand{\numberofticks}{1}% +
-\newcommand{\MAXnumberofticks}{20}% *
-%
-% frame and stuff
-\newlength{\ticklength} %
-\setlength{\ticklength}{2mm} % cm *
-\newlength{\leftshift}
-\setlength{\leftshift}{\ticklength+2mm}
- % cm *
-\newlength{\frameXleft}
-\setlength{\frameXleft}{\leftshift}
-\newlength{\frameYbottom}
-\setlength{\frameYbottom}{0pt}
-\newlength{\tickrightedge} % cm +
-% text
-\newlength{\textoffset} %
-\setlength{\textoffset}{-0.2cm}%cm *
-%caption
-\newlength{\captionoffset}
-\setlength{\captionoffset}{1.5cm}
-%-----------------------------------------
-% ``Counter''-like variables for bars
-\newcommand{\xval}{1} % units +
-\newcommand{\xxval}{1} % units +
-\newcommand{\xhalf}{1} % units +
-%
-% and subbars
-\newcounter{subbar}
-%
-% Number on bars
-% numbers (0,1)
-\newcommand\shownumbers{1} % *
- % otherwise no numbers will appear
-\newcommand\numbercolor{\black\bf} % *
-\newcommand{\belowtop}{0} % constant
-\newcommand{\overtop}{1} % constant
-\newcommand{\bottom}{2} % constant
-\newcommand\placenumber{\belowtop} % *
- % can be: \belowtop, \overtop, \bottom
-\newlength{\numberoffset}
-\setlength{\numberoffset}{2\textoffset} % cm *
-\newlength{\lefttextoffset}
-\setlength{\lefttextoffset}{\leftshift+2mm} % cm *
-% Angle of the text written below (if vertical bars)
-% or to the left (if horizontal) of the item-bars
-\newcommand{\barlabelangle}{90} % *
-% The same, but for label next to the level line
-\newcommand{\ticklabelangle}{0} % *
-%----------------------------------------
-% Legend-related vars
-\newcommand{\legendShadow}{0} % *
- % shadow color
-\definecolor{legShCol}{gray}{.5}
-\newcommand{\legendShadowColor}{legShCol} % *
-%----------------------------------------
-% 3D related stuff
-\newcommand{\frameTD}{0} % 3D or not frame % *
-\newcommand{\tdx}{0.4} % depth of 3d % *
-\newcommand{\tdy}{1.0} % *
-\newcommand{\tdhor}{\tdx} % +
-\newcommand{\tdver}{\tdy} % +
-%-----------------------------------------
-% Error ``whiskers''
-\newcommand{\barerrorterm}{*-|} % *
-\newpsstyle{barerrorstyle}{linewidth=2pt,linecolor=black}
-%-----------------------------------------
-% Styles
-\definecolor{frameBGgray}{gray}{0.9}
-\newpsstyle{diagframestyle}{linewidth=1pt,linecolor=black,fillstyle=none}
-\newpsstyle{tickstyle}{linewidth=1pt,linecolor=black}
-\newpsstyle{levellinestyle}{linewidth=0.2pt,linecolor=blue}
-\newpsstyle{diagTDframestyle}{linewidth=1pt,linecolor=black,fillstyle=none}
-\newpsstyle{diagbgframestyle}{linewidth=1pt,linecolor=black,fillcolor=frameBGgray}
-%-----------------------------------------
-\newcommand{\tmpvar}{1}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Commands to begin a bar diagram
-% \bardiagbegin -> flat frame
-% \bardiagTDbegin -> 3D frame
-\newlength{\bgx} % +
-\newlength{\bgy} % +
-\newlength{\bgxa} % +
-\newlength{\bgya} % +
-%
-\newcommand{\bardiagrambegin}[7]
-{ % 1 2 3 4 5 6 7
- % width, height,bottom(cm), dbar, dx, xunit, yunit
- % height(#1) and width(#2) can be any real numbers,
- % they are in units of (#6) & (#7)
-
- \renewcommand{\nbarsingroup}{1}
-
- % Default \tdy is 5% from the height of the diag
- \FPdiv{\tmpvar}{#2}{\dbar}%
- \FPmul{\tdy}{0.05}{\tmpvar}%
- %
- \ifthenelse{\bdorientation = \bdvert}%
- { \renewcommand{\diagheight}{#2}%
- \renewcommand{\diagwidth}{#1}%
- \setlength{\bottomheight}{#3}%
- \renewcommand{\dbar}{#4}%
- \renewcommand{\dx}{#5}%
- \setlength{\xunitlength}{#6}%
- \setlength{\yunitlength}{#7}%
- %
- \renewcommand{\tdhor}{\tdx}%
- \renewcommand{\tdver}{\tdy}%
- %
- \setlength{\frameXleft}{\leftshift}
- \setlength{\frameYbottom}{0pt}
- %
- \renewcommand{\barlabelangle}{90}
- %\renewcommand{\ticklabelangle}{0}
- }%
- { \renewcommand{\diagheight}{#1}%
- \renewcommand{\diagwidth}{#2}%
- \setlength{\bottomheight}{#3}%
- \renewcommand{\dbar}{#4}%
- \renewcommand{\dx}{#5}%
- \setlength{\xunitlength}{#7}%
- \setlength{\yunitlength}{#6}%
- %
- \renewcommand{\tdhor}{\tdy}%
- \renewcommand{\tdver}{\tdx}%
- %
- \setlength{\frameXleft}{0pt}
- \setlength{\frameYbottom}{\leftshift}
- %
- \renewcommand{\barlabelangle}{0}
- %\renewcommand{\ticklabelangle}{0}
- }%
- %
- %- - - - - - - - - - - - - - - - - - - -
- % Take care of ticks (not to draw)
- \ifthenelse{\bdorientation = \bdvert}%
- { \FPdiv{\tmpvar}{\diagheight}{\betweenticks}}%
- { \FPdiv{\tmpvar}{\diagwidth}{\betweenticks}}%
- \FPtrunc{\numberofticks}{\tmpvar}{0}%
- \ifthenelse{\numberofticks > \MAXnumberofticks}%
- { \typeout{----- \bardiag WARNING: }%
- \typeout{Too LARGE number of ticks: \numberofticks. Falling back to \MAXnumberofticks.}%
- \typeout{TIP: try to change the betweenticks parameter.}%
- \typeout{If you DO want such a large number of ticks,}%
- \typeout{change the MAXnumberofticks parameter.}%
- \typeout{Ignore this warning if you do not use ticks.}%
- \typeout{-----}%
- \renewcommand{\numberofticks}{\MAXnumberofticks}%
- \FPdiv{\betweenticks}{\diagheight}{\numberofticks}%
- }%
- {}%
- %- - - - - - - - - - - - - - - - - - - -
- % Compute center of the diagram
- \FPdiv{\hordiagcenter}{\diagwidth}{2}%
- \FPdiv{\vertdiagcenter}{\diagheight}{2}%
- %
- %- - - - - - - - - - - - - - - - - - - -
- %
- \psset{xunit=\xunitlength,yunit=\yunitlength}%
- \ifthenelse{\frameTD = 0}
- {\begin{pspicture}(-\captionoffset,-\bottomheight)(\diagwidth,\diagheight)}
- {\setlength{\bgya}{\yunitlength*\real{\diagheight}+\yunitlength*\real{\dbar}*\real{\tdver}}
- \begin{pspicture}(-\captionoffset,-\bottomheight)(\diagwidth,\bgya)
- }
- %\showgrid %#For debug purposes
- \psset{fillstyle=solid}%
- \renewcommand{\xval}{0}%
- \setlength{\tickrightedge}{-\leftshift+\ticklength}%
- \ifthenelse{\frameTD = 0}%
- {\renewcommand{\legendShadow}{0}%
- % let's draw a frame
- \psframe[style=diagframestyle](-\frameXleft,-\frameYbottom)(\diagwidth,\diagheight)%
- }%
- {\renewcommand{\legendShadow}{1}%
- % background frame
- \setlength{\bgx}{-\frameXleft+\xunitlength*\real{\dbar}*\real{\tdhor}}%
- \setlength{\bgxa}{\frameXleft+\bgx+\xunitlength*\real{\diagwidth}}%
- \setlength{\bgy}{\yunitlength*\real{\dbar}*\real{\tdver}-\frameYbottom}%
- \setlength{\bgya}{\bgy+\yunitlength*\real{\diagheight}+\frameYbottom}
- % let's draw it
- \psframe[style=diagbgframestyle](\bgx,\bgy)(\bgxa,\bgya)%
- \psline(-\frameXleft,\diagheight)(\bgx,\bgya)%
- \psline(-\frameXleft,-\frameYbottom)(\bgx,\bgy)%
- \psline(\diagwidth,-\frameYbottom)(\bgxa,\bgy)%
- \psline(\diagwidth,\diagheight)(\bgxa,\bgya)%
- % let's draw the foreground frame
- \psframe[style=diagTDframestyle](-\frameXleft,-\frameYbottom)(\diagwidth,\diagheight)%
- }%
-}%
-% - - - - - - - - - - - - - - - - - -
-\newcommand{\bardiagramend}[2]
-{ \ifthenelse{\frameTD = 1}
- { % let's draw the frame ones again
- \psframe[style=diagTDframestyle](-\frameXleft,-\frameYbottom)(\diagwidth,\diagheight)
- }{}
- \ifthenelse{\bdorientation = \bdvert}
- { \rput[c](\hordiagcenter,-0.9\bottomheight){{#1}}
- \rput[c]{90}(-\captionoffset,\vertdiagcenter){{#2}} % ???? -2cm ?
- }
- { \rput[c](\hordiagcenter,-0.9\bottomheight){{#2}}
- \rput[c]{90}(-\captionoffset,\vertdiagcenter){{#1}} % ???? -2cm ?
- }
- \end{pspicture}
-}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% BARITEMS:
-\newcommand{\ActiveBarPrimitive}{\barRect}
-
-\newcommand{\subtopx}{0}
-\newcommand{\subtopy}{0}
-
-\newcommand{\baritem}[4][fillstyle=solid]{%
- % the first (optional) argument is "psstyle options": default=solid
- % [style], name, value, color
- %
- % \xval and \xxval are left and right edges of a bar
- % \xhalf is its center
- %
- \FPfadd{\xxval}{\xval}{\dbar}
- \FPfadd{\tmpvar}{\xval}{\xxval}
- \FPdiv{\xhalf}{\tmpvar}{2}% ?????????? Get rid of it?
-
-
- %
- % Now we call smth, which draws a ``bar''
- % it can be rectangular, cylindrical, 2 or 3d - we do not know
- % I plan \barRect; \barTDRect; \barCylinder; more???
- % It takes 5 arguments:
- % \something{\xval}{\yval}{\xxval}{\yyval}{color}
- %
- %
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- {\ActiveBarPrimitive[#1]{\xval}{0}{\xxval}{#3}{#4}}%
- {\ActiveBarPrimitive[#1]{0}{\xval}{#3}{\xxval}{#4}}%
- %
- %
- \printnumber{\xhalf}{#3}{0}{#3}
- %
- \FPset{\subtopx}{\xval}
- \FPset{\subtopy}{#3}
- %
- \FPfadd{\tmpvar}{\xval}{\dx}
- \FPset{\xval}{\tmpvar}
- %
- % \xhalf := \xhalf + \dbar * (\nbarsingroup - 1)/2
-
- \FPfsub{\tmpvar}{\nbarsingroup}{1}
- \FPdiv{\tmpvar}{\tmpvar}{2}
- \FPmul{\tmpvar}{\tmpvar}{\dbar}
- \FPfadd{\xhalf}{\xhalf}{\tmpvar}
-
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- {\printbarlabel{\xhalf}{\textoffset}{\barlabelangle}{#2}}%
- {\printbarlabel{\textoffset}{\xhalf}{\barlabelangle}{#2}}%
- \setcounter{subbar}{1}
-}
-
-\newcommand{\barmidx}{0}
-\newcommand{\barerrormargins}[2] % To make asymmetric margins
-% 1st = upper Dy; 2nd = bottom Dy
-{%
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- { \FPdiv{\tmpvar}{\dbar}{2}
- \FPfadd{\barmidx}{\subtopx}{\tmpvar}
- \FPfadd{\tmpvar}{\subtopy}{#1}
- \psline[style=barerrorstyle]{\barerrorterm}(\barmidx,\subtopy)(\barmidx,\tmpvar)
- %
- \FPdiv{\tmpvar}{\dbar}{2}
- \FPfadd{\barmidx}{\subtopx}{\tmpvar}
- \FPfsub{\tmpvar}{\subtopy}{#2}
- \psline[style=barerrorstyle]{\barerrorterm}(\barmidx,\subtopy)(\barmidx,\tmpvar)
- }
- { \FPdiv{\tmpvar}{\dbar}{2}
- \FPfadd{\barmidx}{\subtopx}{\tmpvar}
- \FPfadd{\tmpvar}{\subtopy}{#1}
- \psline[style=barerrorstyle]{\barerrorterm}(\subtopy,\barmidx)(\tmpvar,\barmidx)
- %
- \FPdiv{\tmpvar}{\dbar}{2}
- \FPfadd{\barmidx}{\subtopx}{\tmpvar}
- \FPfsub{\tmpvar}{\subtopy}{#2}
- \psline[style=barerrorstyle]{\barerrorterm}(\subtopy,\barmidx)(\tmpvar,\barmidx)
- }
-}
-%%%%%%%%%%%%%
-\newcommand{\barerror}[1] % To make symmetric margins
-{
- \barerrormargins{#1}{#1}
-}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% SUBITEMS
-\newcommand{\subxval}{0}
-\newcommand{\subxxval}{0}
-
-
-\newcommand{\subbaritem}[4][fillstyle=solid]{
- % [style], name, value, color
- %
- % \subxval and \subxxval are left and right edges of a bar
- % \subxhalf is its center
- %
- \FPfsub{\subxxval}{\xval}{\dx}
- \FPmul{\tmpvar}{\dbar}{\thesubbar}
- \FPfadd{\subxval}{\subxxval}{\tmpvar}
-
- \FPfadd{\subxxval}{\subxval}{\dbar}
-
- \FPfadd{\tmpvar}{\subxval}{\subxxval}
- \FPdiv{\subxhalf}{\tmpvar}{2}% ?????????? Get rid of it?
- %
- % Now we call smth, which draws a ``bar''
- % it can be rectangular, cylindrical, 2 or 3d - we do not know
- % I plan \barRect; \barTDRect; \barCylinder; ???
- % It takes 5 arguments:
- % \something{\xval}{\yval}{\xxval}{\yyval}{color}
- %
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- {\ActiveBarPrimitive[#1]{\subxval}{0}{\subxxval}{#3}{#4}}%
- {\ActiveBarPrimitive[#1]{0}{\subxval}{#3}{\subxxval}{#4}}%
- %
- %
- \printnumber{\subxhalf}{#3}{0}{#3}
-
- \FPset{\subtopx}{\subxval}
- \FPset{\subtopy}{#3}
-
- %\rput[r]{90}(\subxhalf,\textoffset){#2}
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- {\printbarlabel{\subxhalf}{\textoffset}{\barlabelangle}{#2}}%
- {\printbarlabel{\textoffset}{\subxhalf}{\barlabelangle}{#2}}%
- \addtocounter{subbar}{1}
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TOP SUBITEMS
-
-\newcommand{\subtopxx}{0} % +
-\newcommand{\subtopyy}{0} % +
-\newcommand{\subtopxhalf}{0}% +
-
-\newcommand{\subtopbaritem}[4][fillstyle=solid]{
- % [style], name, value, color
- %
- %
- % \subtopxhalf is the center
- %
- \FPfadd{\subtopxx}{\subtopx}{\dbar}
-
- \FPfadd{\subtopyy}{\subtopy}{#3}
-
- \FPfadd{\tmpvar}{\subtopx}{\subtopxx}
- \FPdiv{\subtopxhalf}{\tmpvar}{2}%
- %
- \ifthenelse{\bdorientation = \bdvert}%is it vertical or horizontal?
- {\ActiveBarPrimitive[#1]{\subtopx}{\subtopy}{\subtopxx}{\subtopyy}{#4}}%
- {\ActiveBarPrimitive[#1]{\subtopy}{\subtopx}{\subtopyy}{\subtopxx}{#4}}%
- %
- %
- \printnumber{\subtopxhalf}{#3}{\subtopy}{\subtopyy}
- %
- % it is not supposed to print any label, so,
- % we do not need to tae care of it.
- %\rput[r]{90}(\subxhalf,\textoffset){#1}
- %\addtocounter{subbar}{1}
- %
- \FPset{\subtopy}{\subtopyy}
-}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Bar primitives
-\input{bardiag.bar}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Legend
-\newlength{\legendXo} % this one is an argument of diagLegendbegin
-\newlength{\legendYo} % the same
-\newlength{\legendWidth} % the same
-\newlength{\legendHeight} % this will be computed
-%
-\newlength{\legenditemheight}\setlength{\legenditemheight}{7mm}
-\newlength{\legendspacer}\setlength{\legendspacer}{3mm}
-\newlength{\legendRectWidth}\setlength{\legendRectWidth}{6mm}
-\newlength{\legendRectHeight}\setlength{\legendRectHeight}{4mm}
-%
-\newcommand{\diagLegendoptions}[3]
-{ % 1 2 3
- % bgcolor framecolor framelinewidth
- \newpsstyle{diagLegenditemstyle}{fillstyle=solid,fillcolor=#1,linecolor=#1}
- \newpsstyle{diagLegendframetyle}{fillstyle=none,linecolor=#2,linewidth=#3}
-}
-%First we call \diagLegendoptions
-\diagLegendoptions{white}{black}{0.5pt}
-%
-\newlength{\lixcoor}
-\newlength{\liycoor}
-\newlength{\lixxcoor}
-\newlength{\liyycoor}
-%
-\newlength{\liix} % where to put the rectangle with color
-\newlength{\liiix} % where to put the text
-%
-\newcommand{\diagLegendbegin}[3]
-{% 1 2 3
- % Xo(units) Yo(un) Width(un)
- % (Xo,Yo) are coordinates of the left-up corner
- \ifthenelse{\bdorientation = \bdvert}%
- {
- \setlength{\legendXo}{\xunitlength*\real{#1}}
- \setlength{\legendYo}{\yunitlength*\real{#2}}
- \setlength{\legendWidth}{\xunitlength*\real{#3}}
- \setlength{\legendHeight}{0cm}
- %
- \setlength{\lixcoor}{\legendXo}
- \setlength{\lixxcoor}{\legendXo+\legendWidth}
- \setlength{\liycoor}{\legendYo}
- %
- \setlength{\liix}{\lixcoor+\legendspacer}
- \setlength{\liiix}{\liix+\legendRectWidth+\legendspacer}
- }
- {
- \setlength{\legendXo}{\xunitlength*\real{#2}}
- \setlength{\legendYo}{\yunitlength*\real{#1}}
- \setlength{\legendWidth}{\yunitlength*\real{#3}}
- \setlength{\legendHeight}{0cm}
- %
- \setlength{\lixcoor}{\legendXo}
- \setlength{\lixxcoor}{\legendXo+\legendWidth}
- \setlength{\liycoor}{\legendYo}
- %
- \setlength{\liix}{\lixcoor+\legendspacer}
- \setlength{\liiix}{\liix+\legendRectWidth+\legendspacer}
- }
-}
-
-\newlength{\lShX}
-\newlength{\lShXxx}
-\newlength{\lShY}
-\newlength{\lShYyy}
-
-\newcommand{\diagLegendend}
-{ \ifthenelse{\legendShadow = 1}
- {\setlength{\lShX}{\legendXo+\xunitlength*\dbar*\real{\tdhor}}
- \setlength{\lShXxx}{\lixxcoor+\xunitlength*\dbar*\real{\tdhor}}
- \setlength{\lShY}{\liycoor+\yunitlength*\dbar*\real{\tdver}}
- \setlength{\lShYyy}{\legendYo+\yunitlength*\dbar*\real{\tdver}}
- \psframe[fillstyle=solid,linecolor=\legendShadowColor,fillcolor=\legendShadowColor](\lShX,\legendYo)(\lShXxx,\lShYyy)
- \psframe[fillstyle=solid,linecolor=\legendShadowColor,fillcolor=\legendShadowColor](\lixxcoor,\lShY)(\lShXxx,\lShYyy)
- }
- {}
- \psframe[style=diagLegendframetyle](\legendXo,\liycoor)(\lixxcoor,\legendYo)
-}
-
-
-\newlength{\legendRectXo}
-\newlength{\legendRectX}
-\newlength{\legendRectYo}
-\newlength{\legendRectY}
-%
-\newcommand{\legendPutRect}[2][fillstyle=solid]
-{
- \setlength{\legendRectXo}{\liix}
- \setlength{\legendRectYo}{(\liyycoor+\liycoor-\legendRectHeight)/2}
- %\setlength{\legendRectYo}{(\liyycoor+\liycoor)/2-\legendRectHeight}
- \setlength{\legendRectX}{\legendRectXo+\legendRectWidth}
- \setlength{\legendRectY}{\legendRectYo+\legendRectHeight}
- \psframe[fillcolor=#2,#1](\legendRectXo,\legendRectYo)(\legendRectX,\legendRectY)
-}
-
-
-\newlength{\legendiyc}
-\newcommand{\diagLegenditem}[3][fillstyle=solid]
-{% [1] 2 3
- % style item_text color
- \addtolength{\legendHeight}{\legenditemheight}
- \setlength{\liyycoor}{\liycoor}
- \addtolength{\liycoor}{-\legenditemheight}
- \psframe[style=diagLegenditemstyle](\lixcoor,\liycoor)(\lixxcoor,\liyycoor)
- \legendPutRect[#1]{#3}
- \setlength{\legendiyc}{(\liycoor+\liyycoor)/2}
- \rput[l](\liiix,\legendiyc){#2}
-}
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Util
-\newcommand{\outputparameters}
-{\rput[lt](0,-2\bottomheight){\parbox{10cm}{
- \begin{tabular}{p{5cm}p{5cm}}
- Width: & \diagwidth \\\hline
- Height: &\diagheight \\\hline
- Width of a bar:& \dx \\\hline
- Distance between bars:& \dbar\\\hline\hline
- %X unit length: & \ratio{\xunitlength}{1cm}\\\hline
- %Y unit length: & \ratio{\yunitlength}{1cm}\\\hline
- TICKS:\\
- Between ticks: & \betweenticks\\
- Number of ticks:&\numberofticks (computed)\\ \hline\hline
- LAST VALS:\\
- xval: & \xval\\
- dbar: & \dbar\\
- xxval:& \xxval\\
- xhalf:& \xhalf\\
- tmpvar:&\tmpvar\\
- \end{tabular}}}
-}
-%--------------------------------------------------------------------
-
-\newlength{\ycoordnum}
-%
-\newcommand\printnumber[4]
-{ % 1 2 3 4
- % center of the bar, text(number) (will be centered), bottom y, top y
- %
- % we compute the y-position of the text depending on
- % the value of the \placenumber parameter
- % it can be: \belowtop, \overtop, \bottom
-\ifthenelse{\bdorientation = \bdvert}
-{
- \ifthenelse{\placenumber = \overtop}
- {\setlength{\ycoordnum}{\yunitlength*\real{#4}-\numberoffset}
- \ifthenelse{\shownumbers = 1}
- {\rput[bc](#1,\ycoordnum){\numbercolor #2}}{}
- }
- {%else
- \ifthenelse{\placenumber = \bottom}
- {\setlength{\ycoordnum}{\yunitlength*\real{#3}-\numberoffset}
- \ifthenelse{\shownumbers = 1}
- {\rput[bc](#1,\ycoordnum){\numbercolor #2}}
- {}
- }
- % default->\belowtop
- {\setlength{\ycoordnum}{{\yunitlength*\real{#4}}+\numberoffset}
- \ifthenelse{\shownumbers = 1 \AND \lengthtest{\ycoordnum > -\numberoffset}}
- {\rput[tc](#1,\ycoordnum){\numbercolor #2}}{}
- }
- }
-}
-{%else, i.e. if it is horisontal
- %if fact, ``y-coordinate'' \ycoordnum is now along the horizontal axis
- \ifthenelse{\placenumber = \overtop}
- {
- \setlength{\ycoordnum}{\xunitlength*\real{#4}-\numberoffset}
- \ifthenelse{\shownumbers = 1}
- {\rput[l](\ycoordnum,#1){\numbercolor #2}}{}
- }
- {%else
- \ifthenelse{\placenumber = \bottom}
- {\setlength{\ycoordnum}{\xunitlength*\real{#3}-\numberoffset}
- \ifthenelse{\shownumbers = 1}
- {\rput[l](\ycoordnum,#1){\numbercolor #2}}
- {}
- }
- % default->\belowtop
- {\setlength{\ycoordnum}{{\xunitlength*\real{#4}}+\numberoffset}
- \ifthenelse{\shownumbers = 1 \AND \lengthtest{\ycoordnum > -\numberoffset}}
- {\rput[r](\ycoordnum,#1){\numbercolor #2}}{}
- } %\rput[tc](\ycoordnum,#1){\numbercolor #2}
- }
-}
-}
-%--------------------------------------------------------------------
-
-\newlength{\ytick}
-\newcommand{\whattoprint}{0}
-%
-\newcommand{\drawlevellines}
-{\ifthenelse{\bdorientation = \bdvert}
- {\rput[c]{\ticklabelangle}(-\lefttextoffset,0){0}}% this is 0
- {\rput[c]{\ticklabelangle}(0,-\lefttextoffset){0}}
- % let's draw ticks; then lines;
- % they are controlled by \betweenticks variable
- % on its basis we have computed \numberofticks above (in \diagbegin)
- %
- \multido{\n=1+1}{\numberofticks}{%
- \ifthenelse{\bdorientation = \bdvert}
- {\setlength{\ytick}{\yunitlength*\real{\betweenticks}*\n}
- % tick itself
- \psline[style=tickstyle](-\leftshift,\ytick)(\tickrightedge,\ytick)
- % level lines
- \psline[style=levellinestyle](\tickrightedge,\ytick)(\diagwidth,\ytick)
- % numbers!
- \FPmul{\whattoprint}{\n}{\betweenticks}
- \FPclip{\whattoprint}{\whattoprint}
- \rput[r](-\lefttextoffset,\ytick){\whattoprint}
- }
- {\setlength{\ytick}{\xunitlength*\real{\betweenticks}*\n}
- \psline[style=tickstyle](\ytick,-\leftshift)(\ytick,\tickrightedge)
- \psline[style=levellinestyle](\ytick,\tickrightedge)(\ytick,\diagheight)
- \FPmul{\whattoprint}{\n}{\betweenticks}
- \FPclip{\whattoprint}{\whattoprint}
- \rput[c](\ytick,-\lefttextoffset){\whattoprint}
- }
- }
-}
-%- - - - - - - - - - - - - - - - - - - -
-\newcommand{\printbarlabel}[4]{
- % x, y, angle, text
- \ifthenelse{ #3 = 0 \AND \bdorientation = \bdvert}
- {\rput[tc]{#3}(#1,#2){{#4}}}
- {\rput[r]{#3}(#1,#2){{#4}}}
-}
-%--------------------------------------------------------------------
-%
-\InputIfFileExists{bardiag.cfg}
- {\typeout{BarDiag: Local configuration file bardiag.cfg loaded}}
- {\typeout{BarDiag: No local configuration loaded}}
-%
-%--------------------------------------------------------------------
diff --git a/Master/texmf-dist/doc/latex/bardiag/example/pstfp.sty b/Master/texmf-dist/doc/latex/bardiag/example/pstfp.sty
deleted file mode 100644
index a7785ac7dcd..00000000000
--- a/Master/texmf-dist/doc/latex/bardiag/example/pstfp.sty
+++ /dev/null
@@ -1,1137 +0,0 @@
-% This is (almost) exact copy of
-% fp-basic.sty package (Michael Mehlich)
-%
-% It is patched to work with multido.sty
-% FPadd -> FPfadd
-% FPsub -> FPfsub
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{pstfp}[2003/05/10]
-
-
-
-%version information
-\def\FP@basicversion{1.2d}
-\message{%
- `(Patched) Basic Fixed Point Arithmetic',\space\space%
-
- Version \FP@basicversion%
- \space(C) Michael Mehlich%
-
- \space Patched by R. Stepanyan%
- \space\space\space\space\space\space\space%
- \space\space\space\space\space\space%
-}
-
-%fixed point arithmetic with values between (including)
-% -999999999999999999.999999999999999999
-% and +999999999999999999.999999999999999999
-
-
-% to suppress messages
-\let\FP@save@message\message
-\def\message#1{}
-
-
-%%%public area (macros which may be used)%%%
-
-%introduce and print new values
-\def\FPset#1#2{\FP@set[#1|#2]}
-\def\FPprint#1{\FP@print[#1]}
-
-%binary operations
-\def\FPfadd#1#2#3{\FP@callc\FP@add#1{#2}{#3}+\relax} % #1 := #2+#3
-\def\FPdiv#1#2#3{\FP@callc\FP@div#1{#2}{#3}} % #1 := #2/#3
-\def\FPmul#1#2#3{\FP@callc\FP@mul#1{#2}{#3}} % #1 := #2*#3
-\def\FPfsub#1#2#3{\FP@callc\FP@add#1{#2}{-#3}-\relax}% #1 := #2-#3
-%unary operations
-\def\FPabs#1#2{\FP@calld\FP@abs#1{#2}} % #1 := abs(#2)
-\def\FPneg#1#2{\FP@calld\FP@neg#1{#2}} % #1 := -#2
-\def\FPsgn#1#2{\FP@calld\FP@sgn#1{#2}} % #1 := sgn(#2)
-%binary relations
-\def\FPiflt#1#2{\FP@callb\FP@iflt{#1}{#2}+\relax} % #1 < #2 ?
-\def\FPifeq#1#2{\FP@callb\FP@ifeq{#1}{#2}} % #1 = #2 ?
-\def\FPifgt#1#2{\FP@callb\FP@iflt{#2}{#1}-\relax} % #1 > #2 ?
-%unary relations
-\def\FPifneg#1{\FP@calla\FP@ifneg{#1}} % #1 < 0 ?
-\def\FPifpos#1{\FP@calla\FP@ifpos{#1}} % #1 >= 0 ?
-\def\FPifzero#1{\FP@calla\FP@ifzero{#1}} % #1 = 0 ?
-\def\FPifint#1{\FP@calla\FP@ifint{#1}} % #1 is integer ?
-%repeat last test
-%\ifFPtest % repeat last test
-
-%%%private fp-area (don't use these macros)%%%
-
-% To debug FP functions (enable intermediate messages on computations)
-\newif\ifFPdebug
-\FPdebugfalse
-\def\FP@debug#1{\ifFPdebug\typeout{FP debug: #1}\fi}
-
-%conditional printing of messages (only if \FPmessagestrue defined)
-\newif\ifFPmessages
-\FPmessagestrue
-\def\FP@beginmessage#1{\ifFPmessages\message{( FP-#1}\fi}
-\def\FP@endmessage#1{\ifFPmessages\message{)}\fi}
-\def\FP@errmessage#1{\errmessage{FP error: #1!}}
-\def\FP@warnmessage#1{\message{FP warning: #1!}}
-
-%allocation of registers
-
-\countdef\FP@actcounter=10 % register 0 for counter
-\ifnum\FP@actcounter<60\relax%
- \FP@actcounter=60%
-\fi
-
-\newcount\FP@xs %sign of 1st value
-\newcount\FP@xia%integer part of 1st value
-\newcount\FP@xib%integer part of 1st value
-\newcount\FP@xfa%fractional part of 1st value
-\newcount\FP@xfb%fractional part of 1st value
-
-\countdef\FP@ys=5 %sign of 2nd value
-\countdef\FP@yia=6%integer part of 2nd value
-\countdef\FP@yib=7%integer part of 2nd value
-\countdef\FP@yfa=8%fractional part of 2nd value
-\countdef\FP@yfb=9%fractional part of 2nd value
-
-\countdef\FP@xk=10 %registers for splitting 1st value
-\countdef\FP@xl=11
-\countdef\FP@xm=12
-\countdef\FP@xn=13
-\countdef\FP@xo=14
-\countdef\FP@xp=15
-\countdef\FP@xq=16
-\countdef\FP@xr=17
-\countdef\FP@xz=18
-\countdef\FP@xt=19
-\countdef\FP@xu=20
-\countdef\FP@xv=21
-
-\countdef\FP@yk=22 %registers for splitting 2nd value
-\countdef\FP@yl=23
-\countdef\FP@ym=24
-\countdef\FP@yn=25
-\countdef\FP@yo=26
-\countdef\FP@yp=27
-\countdef\FP@yq=28
-\countdef\FP@yr=29
-\countdef\FP@yz=30
-\countdef\FP@yt=31
-\countdef\FP@yu=32
-\countdef\FP@yv=33
-
-\newcount\FP@rega %auxiliary registers
-\newcount\FP@regb
-\countdef\FP@regc=36
-\countdef\FP@regd=37
-\countdef\FP@rege=38
-
-\countdef\FP@rs=39 %result registers
-\countdef\FP@ria=40
-\countdef\FP@rib=41
-\countdef\FP@rfa=42
-\countdef\FP@rfb=43
-
-\newcount\FP@regs %local auxiliary registers
-\countdef\FP@count=45
-\countdef\FP@res=46
-\countdef\FP@shift=47
-\newcount\FP@times
-\countdef\FP@prod=49
-
-%set values
-\def\FP@set[#1#2|#3#4]{%
- \ifx#3\@undefined%
- \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\FP@tmp\expandafter\expandafter\expandafter{\csname #3#4\endcsname}%
- \else\ifcat\noexpand#3\relax%
- \expandafter\def\expandafter\FP@tmp\expandafter{#3#4}%
- \else\ifcat#32\relax%
- \expandafter\def\expandafter\FP@tmp\expandafter{#3#4}%
- \else%
- \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\FP@tmp\expandafter\expandafter\expandafter{\csname #3#4\endcsname}%
- \fi\fi\fi%
- \ifx#1\@undefined%
- \let#1\FP@tmp%
- \else\ifcat\noexpand#1\relax%
- \let#1\FP@tmp%
- \else%
- \expandafter\let\csname #1#2\endcsname\FP@tmp%
- \fi\fi%
-}
-
-%print values
-\def\FP@print[#1#2]{%
- \ifx#1\@undefined%
- \csname #1#2\endcsname%
- \else\ifcat\noexpand#1\relax%
- #1#2%
- \else\ifcat#12\relax%
- #1#2%
- \else%
- \csname #1#2\endcsname%
- \fi\fi\fi%
-}
-
-%auxiliary macros which may be used in all of the following macros
-\newif\ifFP@test
-
-\def\FP@ignorenext#1{}
-\def\FP@first#1#2\relax{#1}
-\def\FP@swallow#1\relax{}
-
-\def\ifFP@zero#1{%
- \ifnum%
- \expandafter\ifnum\csname FP@#1ia\endcsname=0 0\else1\fi%
- \expandafter\ifnum\csname FP@#1ib\endcsname=0 0\else1\fi%
- \expandafter\ifnum\csname FP@#1fa\endcsname=0 0\else1\fi%
- \expandafter\ifnum\csname FP@#1fb\endcsname=0 0\else1\fi%
- =0\relax%
-}
-
-%read value
-
-\def\FP@correctintcounter#1\relax{%
- {\edef\FP@tmp{#1}%
- \FP@count=0\relax%
- \loop%
- \edef\FP@tmpa{\expandafter\FP@first\FP@tmp\noexpand\relax}%
- \expandafter\ifx\FP@tmpa0\relax%
- \advance\FP@count1\relax%
- \edef\FP@tmp{\expandafter\FP@ignorenext\FP@tmp}%
- \repeat%
- \ifnum\FP@count>18\relax%
- \FP@errmessage{Overflow}%
- \fi%
- \expandafter\if!\FP@tmp!%
- \advance\FP@count-18\relax%
- \FP@count=-\FP@count%
- \loop%
- \ifnum\FP@count>0\relax%
- \FP@regc=\FP@rega%
- \divide\FP@rega10\relax\multiply\FP@rega10\relax%
- \advance\FP@regc-\FP@rega\multiply\FP@regc100000000\relax%
- \divide\FP@rega10\relax%
- \divide\FP@regb10\relax\advance\FP@regb\FP@regc%
- \advance\FP@count-1\relax%
- \repeat%
- \global\FP@rega=\FP@rega%
- \global\FP@regb=\FP@regb%
- \else%
- \FP@errmessage{Number too big}%
- \fi%
- }%
-}
-\def\FP@@setintcounter#1#2#3#4#5#6#7#8#9{%
- \FP@regb=#1#2#3#4#5#6#7#8#9\relax%
- \FP@correctintcounter%
-}
-\def\FP@setintcounter#1#2#3#4#5#6#7#8#9{%
- \FP@rega=#1#2#3#4#5#6#7#8#9\relax%
- \FP@@setintcounter%
-}
-
-\def\FP@@setfractcounter#1#2#3#4#5#6#7#8#9{%
- \FP@regb=#1#2#3#4#5#6#7#8#9\relax%
- \FP@swallow%
-}
-\def\FP@setfractcounter#1#2#3#4#5#6#7#8#9{%
- \FP@rega=#1#2#3#4#5#6#7#8#9\relax%
- \FP@@setfractcounter%
-}
-
-\def\FP@getsign#1\relax{%
- {\FP@regs=1\relax%
- \edef\FP@tmp{#1}%
- \loop%
- \edef\FP@tmpa{\expandafter\FP@first\FP@tmp\noexpand\relax}%
- \expandafter\ifx\FP@tmpa-\relax%
- \multiply\FP@regs-1\relax%
- \fi%
- \ifnum\expandafter\ifx\FP@tmpa-1\else0\fi\expandafter\ifx\FP@tmpa+1\else0\fi>0%
- \edef\FP@tmp{\expandafter\FP@ignorenext\FP@tmp}%
- \repeat%
- \global\let\FP@tmp\FP@tmp%
- \global\FP@regs=\FP@regs%
- }%
-}
-
-\def\FP@removeleadingzeros#1\relax{%
- {\edef\FP@tmp{#1}%
- \loop%
- \edef\FP@tmpa{\expandafter\FP@first\FP@tmp\noexpand\relax}%
- \expandafter\ifx\FP@tmpa0\relax%
- \edef\FP@tmp{\expandafter\FP@ignorenext\FP@tmp}%
- \repeat%
- \global\let\FP@tmp\FP@tmp%
- }%
-}
-
-\newif\ifFP@nonstop
-\def\FP@strip#1{%
- {\edef\FP@tmp{#1}%
- \edef\FP@tmpb{}%
- \ifx\FP@tmp\@empty\else%
- \FP@nonstoptrue%
- \loop%
- \edef\FP@tmpa{\expandafter\FP@first\FP@tmp\noexpand\relax}%
- \expandafter\ifx\FP@tmpa-\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa+\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa0\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa1\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa2\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa3\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa4\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa5\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa6\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa7\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa8\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \expandafter\ifx\FP@tmpa9\relax\edef\FP@tmpb{\FP@tmpb\FP@tmpa}\else%
- \ifx\FP@tmpa\@empty\FP@nonstopfalse\else%
- \ifx\FP@tmpa\space\FP@nonstopfalse\else%
- \FP@errmessage{Illegal character \FP@tmpa\space found in float number}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \edef\FP@tmp{\expandafter\FP@ignorenext\FP@tmp}%
- \ifx\FP@tmp\@empty\FP@nonstopfalse\fi%
- \ifFP@nonstop%
- \repeat%
- \fi%
- \global\let\FP@tmp\FP@tmpb%
- }%
-}
-
-\def\FP@readvalue#1#2#3{%
- % #1 macro family to catch the value
- % #2.#3 value
- %
- % regular expression [+|-]*[d]_0^18.[d]*
- %
- \FP@strip{#2}%
- %sign
- \expandafter\FP@getsign\FP@tmp\relax%
- \csname FP@#1s\endcsname=\FP@regs%
- %
- %integer part
- \FP@removeleadingzeros\FP@tmp\relax%
- \expandafter\FP@setintcounter\FP@tmp000000000000000000\relax%
- \csname FP@#1ia\endcsname=\FP@rega%
- \csname FP@#1ib\endcsname=\FP@regb%
- %
- %fractional part
- \FP@strip{#3}%
- \expandafter\FP@setfractcounter\FP@tmp000000000000000000\relax%
- \csname FP@#1fa\endcsname=\FP@rega%
- \csname FP@#1fb\endcsname=\FP@regb%
- %
- %correct sign
- \ifnum\FP@rega=0\relax%
- \ifnum\FP@regb=0\relax%
- \expandafter\ifnum\csname FP@#1ib\endcsname=0\relax%
- \expandafter\ifnum\csname FP@#1ia\endcsname=0\relax%
- \csname FP@#1s\endcsname=1\relax%
- \fi%
- \fi%
- \fi%
- \fi%
-}
-
-%store value in macro
-
-\def\FP@store#1#2{%
- % #1 macro
- % #2 macro family (value) to store
- %
- \ifFP@zero{#2}%
- \csname FP@#2s\endcsname=1\relax%
- \fi%
- \expandafter\ifnum\csname FP@#2s\endcsname<0\relax%
- \edef#1{-}%
- \else%
- \edef#1{}%
- \fi%
- \expandafter\ifnum\csname FP@#2ia\endcsname=0\relax%
- \expandafter\ifnum\csname FP@#2ib\endcsname=0\relax%
- \edef#1{#10}%
- \else%
- \edef#1{#1\expandafter\the\csname FP@#2ib\endcsname}%
- \fi%
- \else%
- \expandafter\advance\csname FP@#2ib\endcsname1000000000\relax%
- \edef#1{#1\expandafter\the\csname FP@#2ia\endcsname\expandafter\FP@ignorenext\the\csname FP@#2ib\endcsname}%
- \fi%
- \expandafter\advance\csname FP@#2fa\endcsname1000000000\relax%
- \expandafter\advance\csname FP@#2fb\endcsname1000000000\relax%
- \edef#1{#1\noexpand.\expandafter\FP@ignorenext\the\csname FP@#2fa\endcsname\expandafter\FP@ignorenext\the\csname FP@#2fb\endcsname}%
-}
-
-%macros to expand some arguments
-
-\def\FP@calla#1#2{%
- % #1 macro to call
- % #2 value
- % expand the value and split them into the integer and the fractional part
- \edef\next{\noexpand#1#2..\noexpand\relax}%
- \next%
-}
-
-\def\FP@callb#1#2#3{%
- % #1 macro to call
- % #2 1st value
- % #3 2nd value
- % expand the values and split them into the integer and the fractional parts
- \edef\next{\noexpand#1#2..\noexpand\relax#3..\noexpand\relax}%
- \next%
-}
-
-\def\FP@callc#1#2#3#4{%
- % #1 macro to call
- % #2 macro, which gets the result
- % #3 1st value
- % #4 2nd value
- % expand the values and split them into the integer and the fractional parts
- \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}%
- \next%
-}
-
-\def\FP@calld#1#2#3{%
- % #1 macro to call
- % #2 macro, which gets the result
- % #3 value
- \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax}%
- \next%
-}
-
-\def\FP@calle#1#2#3#4{%
- % #1 macro to call
- % #2 macro, which gets the first result
- % #3 macro, which gets the second result
- % #4 value
- \edef\next{\noexpand#1\noexpand#2\noexpand#3#4..\noexpand\relax}%
- \next%
-}
-
-%add two values
-
-\def\FP@add#1#2.#3.#4\relax#5.#6.#7\relax#8\relax{%
- % #1 macro, which gets the result
- % #2 integer part of 1st value
- % #3 fractional part of 1st value
- % #4 dummy to swallow everthing after the 2nd '.'
- % #5 integer part of 2nd value
- % #6 fractional part of 2nd value
- % #7 dummy to swallow everthing after the 2nd '.'
- %
- {\ifx#8+\relax%
- \FP@beginmessage{ADD}%
- \else%
- \FP@beginmessage{SUB}%
- \fi%
- %
- \FP@readvalue{x}{#2}{#3}%
- \FP@readvalue{y}{#5}{#6}%
- %
- \ifnum\FP@xs=\FP@ys%
- \advance\FP@xfb\FP@yfb%
- \advance\FP@xfa\FP@yfa%
- \ifnum\FP@xfb<1000000000\relax\else%
- \advance\FP@xfb-1000000000\relax%
- \advance\FP@xfa1\relax%
- \fi%
- \advance\FP@xib\FP@yib%
- \ifnum\FP@xfa<1000000000\relax\else%
- \advance\FP@xfa-1000000000\relax%
- \advance\FP@xib1\relax%
- \fi%
- \advance\FP@xia\FP@yia%
- \ifnum\FP@xib<1000000000\relax\else%
- \advance\FP@xib-1000000000\relax%
- \advance\FP@xia1\relax%
- \fi%
- \ifnum\FP@xia<1000000000\relax\else%
- \FP@errmessage{Overflow}%
- \fi%
- \FP@store\FP@tmp{x}%
- \else%
- \advance\FP@xfb-\FP@yfb%
- \ifnum\FP@xfb<0\relax%
- \advance\FP@yfa1\relax%
- \advance\FP@xfb1000000000\relax%
- \fi%
- \advance\FP@xfa-\FP@yfa%
- \ifnum\FP@xfa<0\relax%
- \advance\FP@yib1\relax%
- \advance\FP@xfa1000000000\relax%
- \fi%
- \advance\FP@xib-\FP@yib%
- \ifnum\FP@xib<0\relax%
- \advance\FP@yia1\relax%
- \advance\FP@xib1000000000\relax%
- \fi%
- \advance\FP@xia-\FP@yia%
- \ifnum\FP@xia<0\relax%
- \FP@xs=-\FP@xs%
- \ifnum\FP@xfb=0\relax\else%
- \advance\FP@xfb-1000000000\relax\FP@xfb=-\FP@xfb%
- \advance\FP@xfa1\relax%
- \fi%
- \ifnum\FP@xfa=0\relax\else%
- \advance\FP@xfa-1000000000\relax\FP@xfa=-\FP@xfa%
- \advance\FP@xib1\relax%
- \fi%
- \ifnum\FP@xib=0\relax\else%
- \advance\FP@xib-1000000000\relax\FP@xib=-\FP@xib%
- \advance\FP@xia1\relax%
- \fi%
- \relax\FP@xia=-\FP@xia%
- \fi%
- \FP@store\FP@tmp{x}%
- \fi%
- %
- \global\let\FP@tmp\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- \let#1\FP@tmp%
-}
-
-%multiply two values
-
-\def\FP@firstnine#1#2#3#4#5#6#7#8#9{%
- \FP@res=#1#2#3#4#5#6#7#8#9\relax%
-}
-\def\FP@@ninesplit#1\relax#2\end#3{%
- #1%
- \edef#3{#2}%
-}
-\def\FP@ninesplit#1{%
- \edef#1{\expandafter\FP@firstnine\FP@rd}%
- \expandafter\FP@@ninesplit#1\end#1\relax%
-}
-
-\def\FP@split#1#2#3#4{%
- % #1 highest three digits
- % #2 medium three digits
- % #3 least three digits
- % #4 counter
- \FP@regc=#4%
- \divide\FP@regc1000000\relax%
- #1=\FP@regc%
- \multiply\FP@regc-1000000\relax\advance\FP@regc#4%
- #3=\FP@regc%
- \divide\FP@regc1000\relax%
- #2=\FP@regc%
- \multiply\FP@regc-1000\relax\advance\FP@regc#3%
- #3=\FP@regc%
-}
-
-\def\FP@@mul#1#2#3{%
- \FP@regc=\csname FP@x#1\endcsname%
- \multiply\FP@regc\csname FP@y#2\endcsname%
- \advance\FP@prod\FP@regc%
- %
- \ifx#3\relax%
- \let\next=\relax%
- \else%
- \let\next=\FP@@mul%
- \fi%
- \next#3%
-}
-
-\def\FP@saveshift{%
- % save rightmost three digits
- \FP@regc=\FP@prod%
- \divide\FP@prod1000\relax%
- \multiply\FP@prod1000\relax%
- \advance\FP@regc-\FP@prod%
- \advance\FP@regc1000\relax%
- \edef\FP@rd{\expandafter\FP@ignorenext\the\FP@regc\FP@rd}%
- %
- \divide\FP@prod1000\relax%
-}
-
-\def\FP@mul#1#2.#3.#4\relax#5.#6.#7\relax{%
- % #1 macro, which gets the result
- % #2 integer part of 1st value
- % #3 fractional part of 1st value
- % #4 dummy to swallow everthing after the 2nd '.'
- % #5 integer part of 2nd value
- % #6 fractional part of 2nd value
- % #7 dummy to swallow everthing after the 2nd '.'
- %
- % split value in various parts
- % x y = 123 456 789 123 456 789 . 123 456 789 123 456 789
- % -> xk xl xm xn xo xp xq xr xs xt xu xv
- % -> yk yl ym yn yo yp yq yr ys yt yu yv
- % multiply these parts and save the result wrt the necessary shifts
- %
- {\FP@beginmessage{MUL}%
- %
- \FP@readvalue{x}{#2}{#3}%
- \FP@readvalue{y}{#5}{#6}%
- %
- %sign
- \multiply\FP@xs\FP@ys%
- \FP@rs=\FP@xs%
- %
- % split parts
- \FP@split\FP@xk\FP@xl\FP@xm\FP@xia\FP@split\FP@xn\FP@xo\FP@xp\FP@xib%
- \FP@split\FP@xq\FP@xr\FP@xz\FP@xfa\FP@split\FP@xt\FP@xu\FP@xv\FP@xfb%
- \FP@split\FP@yk\FP@yl\FP@ym\FP@yia\FP@split\FP@yn\FP@yo\FP@yp\FP@yib%
- \FP@split\FP@yq\FP@yr\FP@yz\FP@yfa\FP@split\FP@yt\FP@yu\FP@yv\FP@yfb%
- %
- \FP@prod=0\relax%
- \edef\FP@rd{}%
- %
- %compute result
- \FP@@mul vv \relax\FP@saveshift%
- \FP@@mul vu uv \relax\FP@saveshift%
- \FP@@mul uu vt tv \relax\FP@saveshift%
- \FP@@mul ut tu vz zv \relax\FP@saveshift%
- \FP@@mul tt zu uz rv vr \relax\FP@saveshift%
- \FP@@mul zt tz ur ru vq qv \relax\FP@saveshift%
- \FP@@mul zz rt tr uq qu vp pv \relax\FP@saveshift%
- \FP@@mul zr rz tq qt up pu vo ov \relax\FP@saveshift%
- \FP@@mul rr qz zq tp pt uo ou vn nv \relax\FP@saveshift%
- \FP@@mul rq qr zp pz to ot un nu vm mv \relax\FP@saveshift%
- \FP@@mul qq rp pr zo oz tn nt um mu vl lv \relax\FP@saveshift%
- \FP@@mul qp pq ro or zn nz tm mt ul lu kv vk \relax\FP@saveshift%
- \FP@@mul pp oq qo rn nr zm mz tl lt ku uk \relax\FP@saveshift%
- \FP@@mul op po nq qn rm mr zl lz tk kt \relax\FP@saveshift%
- \FP@@mul oo pn np mq qm rl lr kz zk \relax\FP@saveshift%
- \FP@@mul no on mp pm lq ql kr rk \relax\FP@saveshift%
- \FP@@mul nn mo om pl lp qk kq \relax\FP@saveshift%
- \FP@@mul mn nm lo ok pk kp \relax\FP@saveshift%
- \FP@@mul mm ln nl ko ok \relax\FP@saveshift%
- \FP@@mul lm ml kn nk \relax\FP@saveshift%
- \FP@@mul ll km mk \relax\FP@saveshift%
- \FP@@mul kl lk \relax\FP@saveshift%
- \FP@@mul kk \relax\FP@saveshift\FP@saveshift%
- \FP@ninesplit\FP@rd%
- \ifnum\FP@res=0\relax%
- \FP@ninesplit\FP@rd%
- \ifnum\FP@res=0\relax%
- \FP@ninesplit\FP@rd\FP@ria=\FP@res%
- \FP@ninesplit\FP@rd\FP@rib=\FP@res%
- \FP@ninesplit\FP@rd\FP@rfa=\FP@res%
- \FP@ninesplit\FP@rd\FP@rfb=\FP@res%
- \FP@store\FP@tmp{r}%
- \else%
- \FP@errmessage{Overflow}%
- \fi%
- \else%
- \FP@errmessage{Overflow}%
- \fi%
- %
- \global\let\FP@tmp\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- %
- \let#1\FP@tmp%
-}
-
-%divide one value by another one
-
-\def\FP@divten#1{%
- \expandafter\FP@regc\csname FP@#1ia\endcsname%
- \expandafter\divide\csname FP@#1ia\endcsname10\relax%
- \expandafter\FP@regb\csname FP@#1ia\endcsname%
- \multiply\FP@regb10\relax%
- \advance\FP@regc-\FP@regb%
- \multiply\FP@regc100000000\relax%
- %
- \expandafter\FP@rega\csname FP@#1ib\endcsname%
- \expandafter\divide\csname FP@#1ib\endcsname10\relax%
- \expandafter\FP@regb\csname FP@#1ib\endcsname%
- \multiply\FP@regb10\relax%
- \advance\FP@rega-\FP@regb%
- \multiply\FP@rega100000000\relax%
- \expandafter\advance\csname FP@#1ib\endcsname\FP@regc%
- %
- \expandafter\FP@regc\csname FP@#1fa\endcsname%
- \expandafter\divide\csname FP@#1fa\endcsname10\relax%
- \expandafter\FP@regb\csname FP@#1fa\endcsname%
- \multiply\FP@regb10\relax%
- \advance\FP@regc-\FP@regb%
- \multiply\FP@regc100000000\relax%
- \expandafter\advance\csname FP@#1fa\endcsname\FP@rega%
- %
- \expandafter\divide\csname FP@#1fb\endcsname10\relax%
- \expandafter\advance\csname FP@#1fb\endcsname\FP@regc%
-}
-
-\def\FP@multen#1{%
- \expandafter\multiply\csname FP@#1ia\endcsname10\relax%
- \expandafter\ifnum\csname FP@#1ib\endcsname<100000000\relax%
- \else%
- \expandafter\FP@regc\csname FP@#1ib\endcsname%
- \divide\FP@regc100000000%
- \expandafter\advance\csname FP@#1ia\endcsname\FP@regc%
- \multiply\FP@regc100000000%
- \expandafter\advance\csname FP@#1ib\endcsname-\FP@regc%
- \fi%
- \expandafter\multiply\csname FP@#1ib\endcsname10\relax%
- \expandafter\ifnum\csname FP@#1fa\endcsname<100000000\relax%
- \else%
- \expandafter\FP@regc\csname FP@#1fa\endcsname%
- \divide\FP@regc100000000%
- \expandafter\advance\csname FP@#1ib\endcsname\FP@regc%
- \multiply\FP@regc100000000%
- \expandafter\advance\csname FP@#1fa\endcsname-\FP@regc%
- \fi%
- \expandafter\multiply\csname FP@#1fa\endcsname10\relax%
- \expandafter\ifnum\csname FP@#1fb\endcsname<100000000\relax%
- \else%
- \expandafter\FP@regc\csname FP@#1fb\endcsname%
- \divide\FP@regc100000000%
- \expandafter\advance\csname FP@#1fa\endcsname\FP@regc%
- \multiply\FP@regc100000000%
- \expandafter\advance\csname FP@#1fb\endcsname-\FP@regc%
- \fi%
- \expandafter\multiply\csname FP@#1fb\endcsname10\relax%
-}
-
-\def\FP@counttimes{%
- {\global\FP@times=0\relax%
- \loop%
- \ifnum%
- \ifnum\FP@xia>\FP@yia1%
- \else\ifnum\FP@xia<\FP@yia0%
- \else%
- \ifnum\FP@xib>\FP@yib1%
- \else\ifnum\FP@xib<\FP@yib0%
- \else%
- \ifnum\FP@xfa>\FP@yfa1%
- \else\ifnum\FP@xfa<\FP@yfa0%
- \else%
- \ifnum\FP@xfb>\FP@yfb1%
- \else\ifnum\FP@xfb<\FP@yfb0%
- \else%
- 1%
- \fi\fi%
- \fi\fi%
- \fi\fi%
- \fi\fi%
- =1\relax%
- \global\advance\FP@times1\relax%
- \global\advance\FP@xfb-\FP@yfb%
- \ifnum\FP@xfb<0\relax%
- \global\advance\FP@xfb1000000000\relax%
- \global\advance\FP@xfa-1\relax%
- \fi%
- \global\advance\FP@xfa-\FP@yfa%
- \ifnum\FP@xfa<0\relax%
- \global\advance\FP@xfa1000000000\relax%
- \global\advance\FP@xib-1\relax%
- \fi%
- \global\advance\FP@xib-\FP@yib%
- \ifnum\FP@xib<0\relax%
- \global\advance\FP@xib1000000000\relax%
- \global\advance\FP@xia-1\relax%
- \fi%
- \global\advance\FP@xia-\FP@yia%
- \repeat%
- }%
-}
-
-\def\FP@div#1#2.#3.#4\relax#5.#6.#7\relax{%
- % #1 macro, which gets the result
- % #2 integer part of 1st value
- % #3 fractional part of 1st value
- % #4 dummy to swallow everthing after the 2nd '.'
- % #5 integer part of 2nd value
- % #6 fractional part of 2nd value
- % #7 dummy to swallow everthing after the 2nd '.'
- %
- % algorithmic idea (for x>0, y>0)
- % - %determine \FP@shift such that y*10^\FP@shift <100000000<=y*10^(\FP@shift+1)
- % - %determine \FP@shift' such that x*10^\FP@shift'<100000000<=x*10^(\FP@shift+1)
- % - x=x*\FP@shift'
- % - y=y*\FP@shift
- % - \FP@shift=\FP@shift-\FP@shift'
- % - res=0
- % - while y>0 %fixed-point representation!
- % - \FP@times=0
- % - while x>y
- % - \FP@times=\FP@times+1
- % - x=x-y
- % - end
- % - y=y/10
- % - res=10*res+\FP@times/1000000000
- % - end
- % - %shift the result according to \FP@shift
- %
- {\FP@beginmessage{DIV}%
- %
- \FP@readvalue{x}{#2}{#3}%
- \FP@readvalue{y}{#5}{#6}%
- %
- %sign
- \multiply\FP@xs\FP@ys%
- \FP@rs=\FP@xs%
- %
- %compute division
- \ifFP@zero{y}%
- \FP@errmessage{Division by zero}%
- \else%
- \ifFP@zero{x}\def\next##1{\edef\FP@tmp{0}}\else\def\next##1{##1}\fi%
- \next%
- {\FP@shift=0\relax%
- \loop%
- \ifnum\FP@yia<100000000\relax%
- \FP@multen{y}%
- \advance\FP@shift1\relax%
- \repeat%
- \loop%
- \ifnum\FP@xia<100000000\relax%
- \FP@multen{x}%
- \advance\FP@shift-1\relax%
- \repeat%
- \FP@ria=0\FP@rib=0\FP@rfa=0\FP@rfb=0\relax%
- \loop%
- \ifFP@zero{y}\else%
- \FP@counttimes%divides x by \FP@times*y
- \FP@divten{y}%
- \FP@multen{r}%
- \advance\FP@rfb\FP@times%
- \ifnum\FP@rfb<1000000000\relax\else%
- \advance\FP@rfa1\advance\FP@rfb-1000000000\relax%
- \ifnum\FP@rfa<1000000000\relax\else%
- \advance\FP@rib1\advance\FP@rfa-1000000000\relax%
- \ifnum\FP@rib<1000000000\relax\else%
- \advance\FP@ria1\advance\FP@rib-1000000000\relax%
- \fi%
- \fi%
- \fi%
- \repeat%
- \loop%
- \ifnum\FP@shift>17%
- \advance\FP@shift-1\relax%
- \ifnum\FP@ria<100000000\else\FP@ria=-1\fi%
- \ifnum\FP@ria<0\FP@ria=-1\fi%
- \FP@multen{r}%
- \repeat%
- \ifnum\FP@ria<1000000000\else\FP@ria=-1\fi%
- \loop%
- \ifnum\FP@shift<17%
- \advance\FP@shift1\relax%
- \FP@divten{r}%
- \repeat%
- \ifnum\FP@ria<0\relax%
- \FP@errmessage{Overflow}%
- \else%
- \FP@store\FP@tmp{r}%
- \fi%
- }%
- \fi%
- %
- \global\let\FP@tmp=\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- \let#1\FP@tmp%
-}
-
-%absolute value
-
-\def\FP@abs#1#2.#3.#4\relax{%
- % #1 macro, which gets the result
- % #2 integer part of value
- % #3 fractional part of value
- % #4 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{ABS}%
- %
- \FP@readvalue{x}{#2}{#3}%
- \FP@xs=1\relax%
- \FP@store\FP@tmp{x}%
- %
- \global\let\FP@tmp\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- \let#1\FP@tmp%
-}
-
-%negate value
-
-\def\FP@neg#1#2.#3.#4\relax{%
- % #1 macro, which gets the result
- % #2 integer part of value
- % #3 fractional part of value
- % #4 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{NEG}%
- %
- \FP@readvalue{x}{#2}{#3}%
- \multiply\FP@xs-1\relax%
- \FP@store\FP@tmp{x}%
- %
- \global\let\FP@tmp\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- \let#1\FP@tmp%
-}
-
-%sign of value
-
-\def\FP@sgn#1#2.#3.#4\relax{%
- % #1 macro, which gets the result
- % #2 integer part of value
- % #3 fractional part of value
- % #4 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{SGN}%
- %
- \FP@readvalue{x}{#2}{#3}%
- %
- \ifFP@zero{x}%
- \edef\FP@tmp{0}%
- \else%
- \edef\FP@tmp{\the\FP@xs}%
- \fi%
- %
- \global\let\FP@tmp\FP@tmp%
- %
- \FP@endmessage{}%
- }%
- \let#1\FP@tmp%
-}
-
-%test if 1st value is less than 2nd value
-
-\def\FP@iflt#1.#2.#3\relax#4.#5.#6\relax#7\relax{%
- % #1 integer part of 1st value
- % #2 fractional part of 1st value
- % #3 dummy to swallow everthing after the 2nd '.'
- % #4 integer part of 2nd value
- % #5 fractional part of 2nd value
- % #6 dummy to swallow everthing after the 2nd '.'
- %
- {\ifx#7+\relax%
- \FP@beginmessage{LT?}%
- \else%
- \FP@beginmessage{GT?}%
- \fi%
- %
- \FP@readvalue{x}{#1}{#2}%
- \FP@readvalue{y}{#4}{#5}%
- %
- \ifnum\FP@xs<\FP@ys%
- \FP@testtrue%
- \else\ifnum\FP@xs>\FP@ys%
- \FP@testfalse%
- \else%
- \ifnum\FP@xs>0\relax%
- \ifnum\FP@xia<\FP@yia%
- \FP@testtrue%
- \else\ifnum\FP@xia>\FP@yia%
- \FP@testfalse%
- \else%
- \ifnum\FP@xib<\FP@yib%
- \FP@testtrue%
- \else\ifnum\FP@xib>\FP@yib%
- \FP@testfalse%
- \else%
- \ifnum\FP@xfa<\FP@yfa%
- \FP@testtrue%
- \else\ifnum\FP@xfa>\FP@yfa%
- \FP@testfalse%
- \else%
- \ifnum\FP@xfb<\FP@yfb%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- \fi\fi%
- \fi\fi%
- \fi\fi%
- \else%
- \ifnum\FP@xia>\FP@yia%
- \FP@testtrue%
- \else\ifnum\FP@xia<\FP@yia%
- \FP@testfalse%
- \else%
- \ifnum\FP@xib>\FP@yib%
- \FP@testtrue%
- \else\ifnum\FP@xib<\FP@yib%
- \FP@testfalse%
- \else%
- \ifnum\FP@xfa>\FP@yfa%
- \FP@testtrue%
- \else\ifnum\FP@xfa<\FP@yfa%
- \FP@testfalse%
- \else%
- \ifnum\FP@xfb>\FP@yfb%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- \fi\fi%
- \fi\fi%
- \fi\fi%
- \fi%
- \fi\fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}
-
-%test if two values are equal
-
-\def\FP@ifeq#1.#2.#3\relax#4.#5.#6\relax{%
- % #1 integer part of 1st value
- % #2 fractional part of 1st value
- % #3 dummy to swallow everthing after the 2nd '.'
- % #4 integer part of 2nd value
- % #5 fractional part of 2nd value
- % #6 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{EQ?}%
- %
- \FP@readvalue{x}{#1}{#2}%
- \FP@readvalue{y}{#4}{#5}%
- %
- \ifnum\FP@xs=\FP@ys%
- \ifnum\FP@xia=\FP@yia%
- \ifnum\FP@xib=\FP@yib%
- \ifnum\FP@xfa=\FP@yfa%
- \ifnum\FP@xfb=\FP@yfb%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- \else%
- \FP@testfalse%
- \fi%
- \else%
- \FP@testfalse%
- \fi%
- \else%
- \FP@testfalse%
- \fi%
- \else%
- \FP@testfalse%
- \fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}
-
-%test if value is negative
-
-\def\FP@ifneg#1.#2.#3\relax{%
- % #1 integer part of value
- % #2 fractional part of value
- % #3 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{NEG?}%
- %
- \FP@readvalue{x}{#1}{#2}%
- %
- \ifnum\FP@xs<0\relax%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}
-
-%test if value is positive
-
-\def\FP@ifpos#1.#2.#3\relax{%
- % #1 integer part of value
- % #2 fractional part of value
- % #3 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{POS?}%
- %
- \FP@readvalue{x}{#1}{#2}%
- %
- \ifnum\FP@xs<0\relax%
- \FP@testfalse%
- \else%
- \FP@testtrue%
- \fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}
-
-%test if value is equal to zero
-
-\def\FP@ifzero#1.#2.#3\relax{%
- % #1 integer part of value
- % #2 fractional part of value
- % #3 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{ZERO?}%
- %
- \FP@readvalue{x}{#1}{#2}%
- %
- \ifFP@zero{x}%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}
-
-%test if value is an integer
-
-\def\FP@ifint#1.#2.#3\relax{%
- % #1 integer part of value
- % #2 fractional part of value
- % #3 dummy to swallow everthing after the 2nd '.'
- %
- {\FP@beginmessage{INT?}%
- %
- \FP@readvalue{x}{#1}{#2}%
- %
- \ifnum\FP@xfa=0\relax%
- \ifnum\FP@xfb=0\relax%
- \FP@testtrue%
- \else%
- \FP@testfalse%
- \fi%
- \else%
- \FP@testfalse%
- \fi%
- %
- \global\let\ifFP@test\ifFP@test%
- %
- \FP@endmessage{}%
- }%
- \let\ifFPtest\ifFP@test%
- %
- \ifFPtest%
-}