summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-09-25 22:22:25 +0000
committerKarl Berry <karl@freefriends.org>2011-09-25 22:22:25 +0000
commit2c266513a7d7727e1adbcbfca59d5e7dbfdfd2e0 (patch)
treea8f606660c9f134ae2cc80bc4c74219eb589bd29 /Master/texmf-dist/tex/generic
parent86e8221f09069b58618c78721f104b3628f8fb16 (diff)
petri-nets non-update to generic
git-svn-id: svn://tug.org/texlive/trunk@24088 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic')
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pndraw.sty152
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pndraw.tex623
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pnets.sty7
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pnets.tex5
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pntext.sty70
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pntext.tex75
-rw-r--r--Master/texmf-dist/tex/generic/petri-nets/pnversion.tex1
7 files changed, 933 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty b/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty
new file mode 100644
index 00000000000..5d9c82585fa
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty
@@ -0,0 +1,152 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pndraw}
+
+\newenvironment{petrinet}{\beginnet}{\endnet}
+
+%%
+%% running standard LaTeX
+%%
+
+\usepackage{ifpdf}
+
+\ifpdf
+ \relax
+\else
+ \input pndraw.tex
+ \endinput
+\fi
+
+%%
+%% running pdfLaTeX
+%%
+
+\message{ ** Petri-nets / draw commands ** }
+
+\input pnversion
+
+\usepackage{graphicx}
+
+\newcounter{pncount}
+\setcounter{pncount}{1}
+
+\catcode`\:=11
+
+%%
+%% check for write18
+%%
+
+\begingroup
+ \edef\test{\jobname.\the\year\the\month\the\day\the\time}
+ \immediate\write18{pn2pdf --test \test}
+ \IfFileExists\test{
+ \global\def\pnpdf:run ##1{\immediate\write18{pn2pdf ##1}}
+ \pnpdf:run{--delete \test}
+ }{
+ \newwrite\pnpdf:batch
+ \immediate\openout\pnpdf:batch=\jobname.bpn
+ \global\def\pnpdf:run ##1{\immediate\write\pnpdf:batch{pn2pdf ##1}}
+ \AtEndDocument{\pnpdf:run{--delete \jobname.bpn}}
+ }
+\endgroup
+
+\let\pnpdf:warn=\relax
+
+\newwrite\pnpdf:stream
+
+\def\pnpdf:open:always{%
+ \edef\pnpdf:file{\jobname-fig\thepncount.pn}%
+ \immediate\openout\pnpdf:stream=\pnpdf:file
+ \global\let\pnpdf:open=\relax}
+\global\let\pnpdf:open=\pnpdf:open:always
+
+\def\pnpdf:write #1{\pnpdf:open
+ \immediate\write\pnpdf:stream{#1}}
+
+\begingroup
+ \catcode`|=0
+ \catcode`[=1
+ \catcode`]=2
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\\=12
+ |long|gdef|pnpdf:read #1\end{petrinet}[|pnpdf:write[#1]|end[petrinet]]
+|endgroup
+
+{\catcode`\^^M=\active %
+\gdef\pnpdf:catcodes{\bgroup %
+ \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 %
+ \catcode`\&=12 \catcode`\#=12 \catcode`\^=12 %
+ \catcode`\%=12 \catcode`\ =12 \catcode`\_=12 %
+ \catcode`\~=12 \catcode`\\=12 \catcode`\^^M=\active \def^^M{^^J}}}
+
+{\catcode`\%=12 \catcode`\!=14 \catcode`\^^M=\active !
+ \gdef\beginnet{\pnpdf:write{\string\begin{petrinet}\string%}!
+ \catcode`\^^M=\active\let^^M=\relax !
+ \pnpdf:catcodes\pnpdf:read}}
+
+\def\show:net:always{%
+ \IfFileExists{\jobname-fig\thepncount.pdf}%
+ {\includegraphics{\jobname-fig\thepncount.pdf}}%
+ {\message{<missing \jobname-fig\thepncount.pdf>}%
+ \global\def\pnpdf:warn{\typeout{^^J*** Run "pn2pdf
+ --batch \jobname.bpn" in order to build the
+ figures^^J}}}}
+
+\def\endnet{\egroup
+ \pnpdf:write{\string\end{petrinet}}%
+ \immediate\closeout\pnpdf:stream
+ \global\let\pnpdf:open=\pnpdf:open:always
+ \pnpdf:run{\jobname-fig\thepncount.pn}%
+ \show:net\addtocounter{pncount}{1}}
+
+\let\show:net=\show:net:always
+\def\savenet{\global\def\show:net{\global\let\show:net\show:net:always}}
+
+\def\shownet{\addtocounter{pncount}{-1}\show:net:always
+ \addtocounter{pncount}{1}}
+
+\def\everynet{\begingroup\afterassignment\endgroup\toks0}
+\def\everylabel{\begingroup\afterassignment\endgroup\toks0}
+\def\psset #1{}
+\def\nodessize #1{}
+\def\placesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\transsize{\begingroup\afterassignment\endgroup\dimen0}
+\def\storesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\modulesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\sourcesize{\begingroup\afterassignment\endgroup\dimen0}
+
+\AtBeginDocument{
+ \def\everynet{\bgroup\afterassignment\everynet:next\toks0}
+ \def\everynet:next{\pnpdf:write{\string\everynet{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\everylabel{\bgroup\afterassignment\everylabel:next\toks0}
+ \def\everylabel:next{\pnpdf:write{\string\everylabel{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\psset{\bgroup\afterassignment\psset:next\toks0}
+ \def\psset:next{\pnpdf:write{\string\psset{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\nodessize{\bgroup\afterassignment\nodessize:next\toks0}
+ \def\nodessize:next{\pnpdf:write{\string\nodessize{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\placesize{\bgroup\afterassignment\placesize:next\dim0}
+ \def\placesize:next{\edef\command{{\string\placesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\transsize{\bgroup\afterassignment\transsize:next\dim0}
+ \def\transsize:next{\edef\command{{\string\transsize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\storesize{\bgroup\afterassignment\storesize:next\dim0}
+ \def\storesize:next{\edef\command{{\string\storesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\modulesize{\bgroup\afterassignment\modulesize:next\dim0}
+ \def\modulesize:next{\edef\command{{\string\modulesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\sourcesize{\bgroup\afterassignment\sourcesize:next\dim0}
+ \def\sourcesize:next{\edef\command{{\string\sourcesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}}
+
+\AtEndDocument{\pnpdf:run{--delete \jobname.pre}
+ \pnpdf:warn}
+
+\catcode`\:=12
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex b/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex
new file mode 100644
index 00000000000..9433a4b7190
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex
@@ -0,0 +1,623 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\message{ ** Petri-nets / draw commands ** }
+\input pnversion
+
+\input pstricks
+\input pst-node
+
+\let\pst=\relax
+
+\catcode`\:=11
+
+%%
+%% option parsing facilities
+%%
+
+\def\expandonce{\expandafter\noexpand}
+
+\outer\def\newopt #1#2{% group/character (+ params and body)
+ \expandafter\ifx\csname setcode:#1\endcsname\relax
+ \expandafter\edef\csname setcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=12 \relax}%
+ \expandafter\edef\csname resetcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=\the\catcode`#2 \relax}%
+ \else
+ \expandafter\edef\csname setcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=12 \relax
+ \expandafter\expandonce\csname setcode:#1\endcsname}%
+ \expandafter\edef\csname resetcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=\the\catcode`#2 \relax
+ \expandafter\expandonce\csname resetcode:#1\endcsname}%
+ \fi
+ \edef\newopt:name{opt:#1\string#2}%
+ \expandafter\expandafter\def\csname\newopt:name\endcsname}
+
+\def\getopt #1#2{% group/macro to run after getting options
+ \def\getopt:end{\csname resetcode:#1\endcsname #2}%
+ \begingroup
+ \edef\getopt:group{opt:#1}%
+ \csname setcode:#1\endcsname
+ \nextopt}
+
+\let\endopt=\endgroup
+
+\def\nextopt{\begingroup
+ \futurelet\next\getopt:next}
+
+\def\getopt:next{\ifcat\next\string*%
+ \aftergroup\getopt:run
+ \else
+ \aftergroup\getopt:end
+ \fi \endgroup}
+
+\def\getopt:run #1{\edef\getopt:name{\getopt:group\string#1}%
+ \expandafter\csname\getopt:name\endcsname}
+
+%%
+%% misc setup
+%%
+
+% pstrick tunning
+\psset{unit=1cm,
+ xunit=1cm,
+ yunit=1cm,
+ linewidth=.5pt,
+ doublesep=.5pt,
+ dimen=iner,
+ labelsep=2pt,
+ arcangle=0,
+ arrowlength=1.4,
+ arrowinset=0,
+ arrowsize=2pt 2}
+
+% nodes sizes
+\newdimen\placesize
+\newdimen\transsize
+\newdimen\storesize
+\newdimen\modulesize
+\newdimen\sourcesize
+
+\def\nodessize #1{%
+ \placesize = #1
+ \transsize = #1
+ \storesize = #1
+ \modulesize = #1
+ \sourcesize = #1
+ \relax}
+
+\nodessize{5mm}
+
+% something to run before when a new net
+\newtoks\everynet \everynet={}
+
+% something to run before typesetting labels
+\newtoks\everylabel \everylabel={}
+
+%%
+%% begin/end a net
+%%
+
+\newopt{net}[#1]{\psset{#1}\nextopt}
+\newopt{net}(#1)(#2){\pspicture(#1)(#2)%
+ \def\net:bottom:left{#1}\def\net:top:right{#2}%
+ % adds white points in order to setup bounding box for a possible
+ % `dvips -E'
+ \rput(#1){{\white\vrule width 1sp height 1sp depth 0sp}}%
+ \rput(#2){{\white\vrule width 1sp height 1sp depth 0sp}}%
+ \the\everynet}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\beginnet{\leavevmode\hbox\bgroup%
+ \let\place=\net:place%
+ \let\trans=\net:trans%
+ \let\store=\net:store%
+ \let\module=\net:module%
+ \let\source=\net:source%
+ \let\text=\net:text%
+ \let\link=\net:link%
+ \let\arc=\net:arc%
+ \let\label=\net:label%
+ \let\showbb=\net:showbb%
+ \def\net:s{empty}%
+ \catcode`\^^M=\active\let^^M=\relax%
+ \getopt{net}\relax}}
+
+\let\begin:net=\beginnet
+
+\def\endnet{\endpspicture\endopt\egroup
+ \global\let\beginnet=\begin:net}
+
+\newbox\net:box
+
+\def\save:net\leavevmode{\global\setbox\net:box}
+
+\def\savenet{\def\beginnet{\expandafter\save:net\begin:net}}
+
+\def\shownet{{\setbox0\copy\net:box\unhbox0}}
+
+%%
+%% globally used for labels
+%%
+
+\def\net:math #1\net:endmath{$#1$}
+
+%%
+%% draws net bounding box
+%%
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:showbb #1^^M{% options (if any)
+ {\psframe#1(\net:bottom:left)(\net:top:right)}}}
+
+%%
+%% places
+%%
+
+\newopt{net:place}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:place}={\psset{doubleline=true}\nextopt}
+\newopt{net:place}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:place}[#1]{\psset{#1}\nextopt}
+
+\def\net:place{\getopt{net:place}\net:place:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:place:draw #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}%
+ \global\edef\net:y{#3}%
+ \global\def\net:s{circle}%
+ \cnode(#2,#3){.5\placesize}{#1}%
+ \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}}
+
+%%
+%% source
+%%
+
+\def\net:source{\getopt{net:trans}\net:source:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:source:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \placesize=\sourcesize \transsize=\sourcesize%
+ \place[dimen=outer]#1(#2,#3)
+ \trans #1(#2,#3)#4
+ \endopt}}
+
+%%
+%% transitions
+%%
+
+\newopt{net:trans}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:trans}={\psset{doubleline=true}\nextopt}
+\newopt{net:trans}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:trans}*{\let\net:trans:draw\net:trans:draw:rectangle
+ \nextopt}
+\newopt{net:trans}[#1]{\psset{#1}\nextopt}
+
+\def\net:trans{\let\net:trans:draw\net:trans:draw:square
+ \getopt{net:trans}\net:trans:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:trans:draw:square #1(#2,#3)#4^^M{% name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{square}%
+ \rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{%
+ \hbox to \transsize{\hss\vbox to \transsize{\vss}}}}}%
+ \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:trans:draw:rectangle #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{rectangle}%
+ {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 %
+ \advance\dimen0 by \dp0 \advance\dimen0 by 4pt %
+ \global\edef\net:h{\the\dimen0}\dimen0=\wd0 %
+ \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}%
+ \rput(#2,#3){\rnode{#1}{\psframebox[framesep=2pt]{%
+ \hbox{\net:math\the\everylabel #4\net:endmath}}}}\endopt}}
+
+%%
+%% module
+%%
+
+\def\net:module{\getopt{net:trans}\net:module:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:module:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \psclip{\rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{%
+ \hbox to \modulesize{\hss\vbox to \modulesize{\vss}}}}}}%
+ \pscustom{\moveto(#2,#3)%
+ \rlineto(-.2\modulesize,-.2\modulesize)%
+ \movepath(.5\modulesize,-.3\modulesize)}%
+ \endpsclip%
+ \transsize=\modulesize\trans #1(#2,#3)#4
+ \endopt}}
+
+%%
+%% store
+%%
+
+\def\net:store{\getopt{net:place}\net:store:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:store:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \placesize=\storesize%
+ \psclip{\cnode(#2,#3){.5\placesize}{ }}%
+ \pscustom{\moveto(#2,#3)%
+ \rlineto(.5\storesize,.5\storesize)%
+ \rlineto(-\storesize,-\storesize)%
+ \stroke\moveto(#2,#3)%
+ \rlineto(.5\storesize,-.5\storesize)%
+ \rlineto(-\storesize,\storesize)}%
+ \endpsclip%
+ \place #1(#2,#3)
+ \endopt}}
+
+%%
+%% free text
+%%
+
+\newopt{net:text}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:text}[#1]{\psset{#1}\nextopt}
+
+\def\net:text{\getopt{net:text}\net:text:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:text:draw #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}%
+ \global\def\net:s{rectangle}%
+ {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 %
+ \advance\dimen0 by \dp0 \advance\dimen0 by 4pt %
+ \global\edef\net:h{\the\dimen0}\dimen0=\wd0 %
+ \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}%
+ \rput(#2,#3){\rnode{#1}{\hbox{\net:math\the\everylabel %
+ #4\net:endmath}}}\endopt}}
+
+%%
+%% links
+%%
+
+\newopt{net:link}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:link}^{\def\net:link:put{\aput}\nextopt}
+\newopt{net:link}_{\def\net:link:put{\bput}\nextopt}
+\newopt{net:link}*{\def\net:link:put{\lput*}\nextopt}
+\newopt{net:link}={\psset{doubleline=true}\nextopt}
+\newopt{net:link}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:link}<#1>{\def\net:link:pos{(#1)}\nextopt}
+\newopt{net:link}[#1]{\psset{#1}\nextopt}
+\newopt{net:link}/#1/{\def\net:link:arrows{{#1}}\nextopt}
+
+\def\net:link{\def\net:link:put{\aput}\def\net:s{link}%
+ \def\net:link:arrows{{-}}%
+ \def\net:link:pos{(.5)}\def\net:link:opt{}%
+ \getopt{net:link}\net:link:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:link:draw #1#2#3^^M{% from/to/label
+ \expandafter\ncarc\net:link:arrows{#1}{#2}%
+ \expandafter\net:link:put\net:link:pos{%
+ \hbox{\net:math\the\everylabel #3\net:endmath}}\endopt}}
+
+\def\net:arc{\link/->/}
+
+%%
+%% additional labels
+%%
+
+% calls the right label macro
+
+\newopt{net:label}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+
+\def\net:label{\getopt{net:label}\net:label:call}
+
+\def\net:label:call{\edef\net:label:shape{net:label:\net:s}%
+ \expandafter\csname\net:label:shape\endcsname}
+
+% if no node or link has been drawn, we just ignore the label
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:empty #1^^M{}}
+
+% calculates angle which can be an integer, one or two letters.
+
+\def\net:setangle #1{\relax
+ \expandafter\ifx\csname net:angle:#1\endcsname\relax
+ \edef\net:angle{#1}%
+ \else\edef\net:angle{\csname net:angle:#1\endcsname}\fi}
+
+\def\net:angle:r{0}
+\def\net:angle:tr{45} \let\net:angle:rt=\net:angle:tr
+\def\net:angle:t{90}
+\def\net:angle:tl{135} \let\net:angle:lt=\net:angle:tl
+\def\net:angle:l{180}
+\def\net:angle:bl{225} \let\net:angle:lb=\net:angle:b
+\def\net:angle:b{270}
+\def\net:angle:br{315} \let\net:angle:rb=\net:angle:br
+
+% for a circle
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:circle #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \advance\placesize by \labelsep%
+ \uput{.5\placesize}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endopt}}
+
+% for a square
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:square #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \begingroup \dimen0=\net:angle pt%
+ \loop \ifdim\dimen0<-45pt \advance\dimen0 by 90pt \repeat%
+ \loop \ifdim\dimen0>45pt \advance\dimen0 by -90pt \repeat%
+ \edef\tmp{\expandafter\clear\the\dimen0}%
+ \cossin\cos\sin\tmp%
+ \realdiv\tmp=\sin/\cos%
+ \realmul\tmp=\tmp*\tmp%
+ \realadd\tmp=1+\tmp%
+ \realsqrt\tmp\tmp%
+ \realmul\tmp=.65*\tmp%
+ \uput{\tmp\transsize}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}}
+
+% for a rectangle
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:rectangle #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \begingroup \dimen0=\net:angle pt%
+ \loop \ifdim\dimen0<0pt \advance\dimen0 by 360pt \repeat%
+ \loop \ifdim\dimen0>360pt \advance\dimen0 by -360pt \repeat%
+ \ifdim\dimen0>180pt \advance\dimen0 by -180pt \fi%
+ \ifdim\dimen0>90pt \advance\dimen0 by -180pt \dimen0=-\dimen0 \fi%
+ \edef\tmp{\expandafter\clear\the\dimen0}%
+ \cossin\cos\sin\tmp%
+ \edef\w{\expandafter\clear\net:w}%
+ \edef\h{\expandafter\clear\net:h}%
+ \realmul\w=.4*\w% the test below is done using \w, this gives it a
+ \realmul\h=.6*\h% greater importance so is is balanced here.
+ \realmul\ww=\w*\w%
+ \realmul\hh=\h*\h%
+ \realadd\d=\ww+\hh%
+ \realsqrt\d\d%
+ \realmul\dcos=\cos*\d%
+ \ifdim\dcos pt < \w pt %
+ \realdiv\tmp=\h/\sin%
+ \else%
+ \realdiv\tmp=\w/\cos%
+ \fi%
+ \realmul\tmp=1.5*\tmp%
+ \uput{\tmp pt}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}}
+
+% for a link
+
+\def\net:label:link{\getopt{net:angle}\net:label:link:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:link:draw #1^^M{% from/to/label
+ \expandafter\net:link:put\net:link:pos{%
+ \hbox{\net:math\the\everylabel #1\net:endmath}}\endopt\endopt}}
+
+%%
+%% trigonometric and real number stuff
+%%
+
+% absolute value
+
+\def\realabs #1=|#2|{{%
+ \dregA=#2pt
+ \ifdim \dregA<0pt
+ \dregA=-\dregA
+ \fi
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% add two reals
+
+\def\realadd #1=#2+#3{{%
+ \dregA=#2pt
+ \dregB=#3pt
+ \advance\dregA by\dregB
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% substract two reals
+
+\def\realsub #1=#2-#3{%
+ \realadd#1=#2+{-#3}}
+
+% multiply two reals
+
+\def\realmul #1=#2*#3{{%
+ \dregA=#2pt
+ \dregA=#3\dregA
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% divide two reals
+
+\def\realdiv #1=#2/#3{{%
+ \dregA=#2pt\cregA=\dregA
+ \dregA=#3pt\cregB=\dregA
+ \intdiv\res=\cregA/\cregB
+ \global\edef\tmptrigoA{\res}}%
+ \edef#1{\tmptrigoA}}
+
+% radians -> degrees
+
+\def\todeg #1#2{% #1=deg(#2)
+ \realmul#1=#2*{180}%
+ \realdiv#1=#1/{3.14159265359}}
+
+% degrees -> radian
+
+\def\torad #1#2{% #1=rad(#2)
+ \realmul#1=#2*{3.14159265359}%
+ \realdiv#1=#1/{180}}
+
+% cosinus and sinus
+
+\def\cossin #1#2#3{{% #1=cos(#3) #2=sin(#3)
+ \dregA=#3pt
+ % be sure \dregA is in [-180,180]
+ \loop
+ \ifdim\dregA<-180pt
+ \advance\dregA by 360pt
+ \repeat
+ \loop
+ \ifdim\dregA>180pt
+ \advance\dregA by -360pt
+ \repeat
+ % let's go
+ \ifdim\dregA<-90pt
+ \advance\dregA by 90pt
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\negsin\cos\rad
+ \global\edef\tmptrigoA{\cos}%
+ \global\edef\tmptrigoB{-\negsin}%
+ \else\ifdim\dregA>90pt
+ \advance\dregA by -90pt
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\sin\negcos\rad
+ \global\edef\tmptrigoA{-\negcos}%
+ \global\edef\tmptrigoB{\sin}%
+ \else
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\cos\sin\rad
+ \global\edef\tmptrigoA{\cos}%
+ \global\edef\tmptrigoB{\sin}%
+ \fi\fi}%
+ \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}}
+
+% square root
+
+\def\realsqrt #1#2{{% #1=(#2)^{-1/2}
+ \edef\a{#2}%
+ \edef\an{#2}%
+ \loop
+ \realdiv\anA=\a/\an
+ \realadd\anB=\an+\anA
+ \realdiv\anA=\anB/2
+ \realsub\err=\an-\anA
+ \dregA=\err pt
+ \ifdim \dregA>0.0001pt
+ \edef\an{\anA}%
+ \repeat
+ \global\edef\tmptrigoA{\anA}}%
+ \edef#1{\tmptrigoA}}
+
+%% internal stuff
+
+\newdimen\dregA \newdimen\dregB % \newdimen\dregC
+%\newdimen\dregD \newdimen\dregE \newdimen\dregF
+
+\newcount\cregA \newcount\cregB \newcount\cregC
+\newcount\cregD \newcount\cregE % \newcount\cregF
+
+% arrays of numbers
+
+\def\setarray #1[#2]=#3{\expandafter
+ \edef\csname#1[#2]\endcsname{#3}}
+
+\def\getarray #1=#2[#3]{\edef\tmptrigoA{#2[#3]}%
+ \edef#1{\expandafter\csname\tmptrigoA\endcsname}}
+
+% remove trailing `pt'
+
+{\catcode`\p=12 \catcode`\t=12
+\global\def\clear #1pt{#1}}
+
+% divide two integers
+
+\def\intdiv #1=#2/#3{{%
+ \cregA=#2%
+ \cregB=#3%
+ \ifnum\cregB<0
+ \cregA=-\cregA
+ \cregB=-\cregB
+ \fi
+ \cregD=1
+ \ifnum\cregA<0
+ \cregA=-\cregA
+ \cregD=-1
+ \fi
+ \cregC=\cregA\divide\cregC by\cregB
+ \cregE=\cregC\multiply\cregE by\cregB
+ \advance\cregA by-\cregE
+ \cregE=-1
+ \loop
+ \advance\cregE by1
+ \ifnum\cregE<16
+ \multiply\cregC by2
+ \multiply\cregA by2
+ \ifnum\cregA<\cregB\else
+ \advance\cregC by1
+ \advance\cregA by-\cregB
+ \fi
+ \repeat
+ \divide\cregB by2
+ \ifnum\cregA<\cregB
+ \advance\cregC by1
+ \fi
+ \ifnum\cregD<0
+ \cregC=-\cregC
+ \fi
+ \dregA=\cregC sp
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% cordic algorithm to compute cos and sin
+
+\def\cordic #1#2#3{{% #1=cos(#3) #2=sin(#3) with #3 \in [-\pi/2,\pi/2]
+ % prepared values
+ \setarray e[0]={.785398163397448}%
+ \setarray e[1]={.463647609000806}%
+ \setarray e[2]={.244978663126864}%
+ \setarray e[3]={.124354994546761}%
+ \setarray e[4]={.0624188099959574}%
+ \setarray e[5]={.0312398334302683}%
+ \setarray e[6]={.0156237286204768}%
+ \setarray e[7]={.00781234106010111}%
+ \setarray e[8]={.00390623013196697}%
+ \setarray e[9]={.00195312251647882}%
+ \setarray e[10]={.000976562189559319}%
+ \setarray e[11]={.000488281211194898}%
+ \setarray e[12]={.000244140620149362}%
+ \setarray e[13]={.00012207031189367}%
+ % init
+ \def\xn{.607252935032446}%
+ \def\yn{0}%
+ \edef\zn{#3}%
+ \cregA=0
+ \cregB=1
+ % cordic loop
+ \loop
+ \realdiv\xtmp=\yn/\cregB
+ \realdiv\ytmp=\xn/\cregB
+ \getarray\ztmp=e[\the\cregA]%
+ \dregA=\zn pt
+ \ifdim\dregA<0pt
+ \realadd\xn=\xn+\xtmp
+ \realsub\yn=\yn-\ytmp
+ \realadd\zn=\zn+\ztmp
+ \else
+ \realsub\xn=\xn-\xtmp
+ \realadd\yn=\yn+\ytmp
+ \realsub\zn=\zn-\ztmp
+ \fi
+ \ifnum\cregA<13
+ \advance\cregA by1
+ \multiply\cregB by2
+ \repeat
+ % terminating
+ \global\edef\tmptrigoA{\xn}\global\edef\tmptrigoB{\yn}}%
+ \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}}
+
+%%
+%% end
+%%
+
+\catcode`\:=12
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnets.sty b/Master/texmf-dist/tex/generic/petri-nets/pnets.sty
new file mode 100644
index 00000000000..5949538e4d7
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pnets.sty
@@ -0,0 +1,7 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pnets}
+
+\usepackage{pntext}
+\usepackage{pndraw}
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnets.tex b/Master/texmf-dist/tex/generic/petri-nets/pnets.tex
new file mode 100644
index 00000000000..7e5e26203ed
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pnets.tex
@@ -0,0 +1,5 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\input pntext
+\input pndraw
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pntext.sty b/Master/texmf-dist/tex/generic/petri-nets/pntext.sty
new file mode 100644
index 00000000000..1f337cfe5d7
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pntext.sty
@@ -0,0 +1,70 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pntext}
+
+\typeout{ ** Petri-nets / text commands ** }
+
+% numbers sets
+
+\usepackage{amsfonts}
+
+\newcommand{\mathset}[1]{\relax\ifmmode\mathbb #1\else$\mathbb #1$\fi}
+\newcommand{\setN}{\mathset{N}}
+\newcommand{\setZ}{\mathset{Z}}
+\newcommand{\setQ}{\mathset{Q}}
+\newcommand{\setR}{\mathset{R}}
+\newcommand{\setC}{\mathset{C}}
+
+% places status
+
+\newcommand{\placestatus}[1]{{\sf #1}}
+\newcommand{\eplace}{\placestatus{e}}
+\newcommand{\iplace}{\placestatus{i}}
+\newcommand{\xplace}{\placestatus{x}}
+
+% synchronisation, restriction and tie
+
+\newcommand{\sy}{\relax
+ \ifmmode\mathop{\bf sy}\else{\bf sy}\fi}
+\newcommand{\rs}{\relax
+ \ifmmode\mathop{\bf rs}\else{\bf rs}\fi}
+\newcommand{\tie}{\relax
+ \ifmmode\mathop{\bf tie}\else{\bf tie}\fi}
+
+% scoping
+
+\newcommand{\lscope}{\relax
+ \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi}
+\newcommand{\Lscope}{\relax\ifmmode\left.\left.\fi}
+\newcommand{\rscope}{\relax
+ \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\rscope$\fi}
+\newcommand{\Rscope}{\relax\ifmmode\right.\right.\fi}
+\newcommand{\scope}{} % just to test its existence
+\def\scope #1#2{\relax
+ \ifmmode\lscope#1:#2\rscope\else$\lscope#1:#2\rscope$\fi}
+
+% choice operator
+
+\newcommand{\choice}{\relax\ifmmode
+ \mathop{\raise -.2ex\hbox{$\Box$}}\else{\raise -.2ex\hbox{$\Box$}}\fi}
+
+% B(PB)^2 logo
+
+\newcommand{\bpn}{\mbox{B(PN)$^2$}}
+
+% B(PN)^2 syntax
+
+\newcommand{\bpnkw}[1]{{\bf #1}} % keyword
+\newcommand{\bpnnt}[1]{{\sf #1}} % non-terminal
+
+% Mnet mapping function
+
+\newcommand{\mnet}{\mbox{\sf Mnet}}
+
+% Var and Val
+
+\newcommand{\Val}{\relax\ifmmode{V\mskip-1.6\thinmuskip al}%
+ \else{\it Val}\fi}
+\newcommand{\Var}{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}%
+ \else{\it Var}\fi}
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pntext.tex b/Master/texmf-dist/tex/generic/petri-nets/pntext.tex
new file mode 100644
index 00000000000..17e477c00de
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pntext.tex
@@ -0,0 +1,75 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\message{ ** Petri-nets / text commands ** }
+\input pnversion
+
+% math sets
+
+\newfam\setfam \def\setfont{\fam\setfam\tenset}
+\font\tenset=bbm10 \font\sevenset=bbm7 \font\fiveset=bbm5
+\textfont\setfam=\tenset
+\scriptfont\setfam=\sevenset
+\scriptscriptfont\setfam=\fiveset
+
+\def\mathset #1{{\setfont #1}}
+\def\setN{{\setfont N}}
+\def\setZ{{\setfont Z}}
+\def\setQ{{\setfont Q}}
+\def\setR{{\setfont R}}
+\def\setC{{\setfont C}}
+
+% places status
+
+\def\placestatus #1{{\ss #1}}
+\def\eplace{\placestatus{e}}
+\def\iplace{\placestatus{i}}
+\def\xplace{\placestatus{x}}
+
+% synchronisation, restriction and tie
+
+\def\sy{\relax
+ \ifmmode\mathop{\bf sy}\else{\bf sy}\fi}
+\def\rs{\relax
+ \ifmmode\mathop{\bf rs}\else{\bf rs}\fi}
+\def\tie{\relax
+ \ifmmode\mathop{\bf tie}\else{\bf tie}\fi}
+
+% scoping
+
+\def\lscope{\relax
+ \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi}
+\def\Lscope{\relax\ifmmode\left.\left.\fi}
+\def\rscope{\relax
+ \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\scope$\fi}
+\def\Rscope{\relax\ifmmode\right.\right.\fi}
+\def\scope #1#2{\lscope#1:#2\rscope}
+
+% choice operator
+
+\def\choice{\relax\ifmmode
+ \mathbin{\mathpalette\choicebody{}}%
+ \else${\choice}$\fi}
+
+\def\choicebody #1#2{\vcenter{\hrule
+ \hbox{\vrule$#1\phantom{*}$\vrule}\vss\hrule}}
+
+% B(PB)^2 logo
+
+\def\bpn{\hbox{B(PN)$^2$}}
+
+% B(PN)^2 syntax
+
+\def\bpnkw #1{{\bf #1}} % keyword
+\def\bpnnt #1{{\ss #1}} % non-terminal
+
+% Mnet mapping function
+
+\def\mnet{\hbox{\sf Mnet}}
+
+% Var and Val
+
+\def\Val{\relax\ifmmode{V\mskip-1.6\thinmuskip al}%
+ \else{\it Val}\fi}
+\def\Var{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}%
+ \else{\it Var}\fi}
diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex b/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex
new file mode 100644
index 00000000000..70a068282d8
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex
@@ -0,0 +1 @@
+\def\pnversion{2006-03-02}