% -- circus.sty version 1 -------------------------------------------------
% Comments, complaints, and suggestions to
%
% Jim.Woodcock@comlab.ox.ac.uk
%
% Acknowledgements to Jim Davies and Mike Spivey.
%
% Changed on 04.07.02 by Ana Cavalcanti to include: \circnameset
% Changed on 09.12.02 by Leo Freitas to include: \circstate
% Changed on 17.09.03 by Leo Freitas
%
% Adjustment to include zed-csp instead of zed and csp
% Adjustment on options because the new version zed-csp doesn't contain the necessary options commands
% Changed on 22.09.03 by Leo Freitas to include new macros and options
%
% -- circus.sty -----------------------------------------------------------
\def\fileversion{1.0}
\def\filedate{01/07/17}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{circus}[{\filedate\space\fileversion\space circus package}]
% -- options -----------------------------------------------------------
\newif\if@cm@ \@cm@false
\newif\if@lucida@ \@lucida@false
\newif\if@times@ \@times@false
\newif\if@color@ \@color@false
\newif\if@csp@ \@csp@false
\newif\if@zed@ \@zed@false
%\RequirePackage{ifthen}
%\newboolean{boxed}
%\setboolean{boxed}{true}
\DeclareOption{cm}{\@cm@true\@lucida@false\@times@false}
\DeclareOption{lucida}{\@cm@false\@lucida@true\@times@false}
\DeclareOption{times}{\@cm@false\@lucida@false\@times@true}
\DeclareOption{color}{\@color@true}
\DeclareOption{zed}{\@zed@true}
\DeclareOption{csp}{\@csp@true}
%\DeclareOption{boxed}{\setboolean{boxed}{true}}
\ExecuteOptions{cm}
\ProcessOptions
\RequirePackageWithOptions{zed}
\@ifpackageloaded{csp}{\relax}{%
\RequirePackageWithOptions{csp}}
%\RequirePackage{my-a4}
%-- New BREAK Commmands from oz.sty -- (BEGIN) LEO
\newcount\interzedlinepenalty \interzedlinepenalty=10000 %never break
\newcount\preboxpenalty \preboxpenalty=0 %break easily
\newcount\forcepagepenalty \forcepagepenalty=-10000 %always break
\interdisplaylinepenalty=100 %break sometimes
\def\znewpage{\also\noalign{\penalty\forcepagepenalty}\also}
\def\zbreak{\also\noalign{\penalty\interdisplaylinepenalty\vskip-\jot}\also}
\def\Zbreak{\also\noalign{\penalty\interdisplaylinepenalty}\also}
\def\ZBREAK{\Also\noalign{\penalty\interdisplaylinepenalty}\Also}
%-- New BREAK Commmands from oz.sty -- (END) LEO
\def\fuzz{{\large\it f\kern0.1em}{\normalsize\sc uzz}}
\let\Fuzz=\fuzz
\makeatletter
\def\demo{\par\vbox\bgroup\begingroup\quote}
\def\gives{\endquote\endgroup\egroup}
\def\enddemo{\global\@ignoretrue}
\def\symtab{\setbox0=\vbox\bgroup \def\\{\cr}
\halign\bgroup\strut$##$\hfil&\quad##\hfil\cr}
\def\endsymtab{\crcr\egroup\egroup \dimen0=\ht0 \divide\dimen0 by2
\advance\dimen0 by\ht\strutbox \splittopskip=\ht\strutbox
\vbadness=10000 \predisplaypenalty=0
$$\halign{##\cr\hbox to\linewidth{%
\valign{##\vfil\cr
\setbox1=\vsplit0 to\dimen0 \unvbox1\cr
\noalign{\hfil}\unvbox0\cr
\noalign{\hfil}}}\cr
\noalign{\prevdepth=\dp\strutbox}}$$
\global\@ignoretrue}
\makeatother
%%ignore \block \endblock
\newcommand{\mathsl}[1]{\hbox{\slshape #1}}
\newcommand{\Circus}{{\sf\slshape Circus}}
\newcommand{\circdo}{\mathbf{do}}
\newcommand{\circod}{\mathbf{od}}
\newcommand{\circstate}{\mathbf{state}}
\newif\ifuseCircusCounters
\useCircusCounterstrue
\ifuseCircusCounters
\newcounter{circusCtr}
\newcounter{circusopCtr}
\newcounter{circusactionCtr}
\newcounter{circuschannelCtr}
\newcounter{circusprocessCtr}
\newcounter{circusmuCtr}
\newcounter{circusvarCtr}
\fi
\newcommand{\circbegin}{\mathbf{begin}}
\newcommand{\circchannel}{\mathbf{channel}\ifuseCircusCounters \stepcounter{circuschannelCtr}\fi}
\newcommand{\circchannelfrom}{\mathbf{channelfrom}}
%\newcommand{\circstate}{\mathbf{state}}
\newcommand{\circchannelset}{\mathbf{channelset}}
\newcommand{\circnameset}{\mathbf{nameset}}
\newcommand{\circcon}{\mathbf{con}}
\newcommand{\circelse}{[\!]}
\newcommand{\circend}{\mathbf{end}}
\newcommand{\circfi}{\mathbf{fi}}
\newcommand{\circif}{\mathbf{if}}
\newcommand{\circmu}{\mu \ifuseCircusCounters \stepcounter{circusmuCtr} \fi}
\newcommand{\circprocess}{\mathbf{process}\ifuseCircusCounters \stepcounter{circusprocessCtr} \fi}
\newcommand{\circthen}{\rightarrow}
\newcommand{\circvar}{\mathbf{var}\ifuseCircusCounters \stepcounter{circusvarCtr} \fi}
\newcommand{\circval}{\mathbf{val}}
\newcommand{\circres}{\mathbf{res}}
\newcommand{\circvres}{\mathbf{vres}}
%\newcommand{\boolean}{{\mathbb B}}
\newcommand{\freetype}[1]{\mathsf{#1}}
\newcommand{\Semi}{\hbox{\large ;}}
\renewcommand{\IF}{\circif_{Z}\;}
\newcommand{\circseq}{~\Semi~}
\newcommand{\circguard}{~\hbox{\&}~}
\newcommand{\lchanset}{\{\!|}
\newcommand{\rchanset}{|\!\}}
\newcommand{\linter}{|\!|\hspace{-4pt}[}
\newcommand{\rinter}{]\hspace{-4pt}|\!|}
\def\II{\hbox{\texttt{\slshape I \kern -7.5pt I}}}
\def\circledR{{\mathhexbox\msafam@72 }}
%\def \keyword#1 {\z@op{\mbox{\textrm{#1}}}}
%\def \SECTION {\keyword{section}}
%\def \parents {\keyword{parents}}
\def \SECTION {{\mbox{\textrm{\textbf{section}}}}}
\def \parents {{\mbox{\textrm{\textbf{parents}}}}}
%\newenvironment{zsection}{}{}
%\renewenvironment{zsection}{\vspace{10pt}\noindent\textbf{BEGIN SECTION}\begin{quote}}{\end{quote}\textbf{END SECTION}\vspace{5pt}}
\newcounter{openIssues}
\setcounter{openIssues}{0}
\newenvironment{issue}[1][\ ]{\addtocounter{openIssues}{1}\vspace{10pt}\noindent\textbf{BEGIN ISSUE (\arabic{openIssues}):}\ #1\begin{quote}\em}{\end{quote}\textbf{END ISSUE (\arabic{openIssues})}\ $\Box$\vspace{5pt}}%
\newcommand{\grammar}[1]{\texttt{#1}}
\newcommand{\code}[1]{\textsf{#1}}
\newcommand{\circindex}{\odot}
\newcommand{\lcircindex}{\lfloor}
\newcommand{\rcircindex}{\rfloor}
%\def\schema#1{\@ifnextchar[{\@schema{#1}}{\@nschema{#1}}}
%\def\@schema#1[#2]{\@nschema{#1[#2]}}
%\def\@nschema#1{\@narrow\axdef\omit\@topline{$\strut#1$}\cr}
%
%\newenvironment{circusprocess}[2][10pt]%
% {\@ifnextchar[}%
%\ifthenelse{\boolean{boxed}}
% {%
% \newenvironment{circusprocess}[1][10pt]%
% {\hspace{#1}\begin{boxedminipage}{0.8\linewidth}}%
% {\end{boxedminipage}\ignorespacesafterend}%
% }{%
% \newenvironment{circusprocess}[1][10pt]%
% {\hspace{#1}\begin{minipage}{0.8\linewidth}}%
% {\end{minipage}\ignorespacesafterend}
% }
%\newenvironment{procheader}%
% {\zedindent=0pt\begin{zed}\circprocess\ }%
% {\end{zed}\zedindent=\leftmargini\ignorespacesafterend}
\newenvironment{circus}{\begin{zed}\ifuseCircusCounters \stepcounter{circusCtr} \fi}{\end{zed}\ignorespacesafterend}
\newenvironment{circusop}{\ifuseCircusCounters \stepcounter{circusopCtr}\fi}{}
\newenvironment{circusaction}{\begin{zed}\ifuseCircusCounters \stepcounter{circusactionCtr} \fi}{\end{zed}\ignorespacesafterend}
%\newenvironment{mainaction}%
% {\begin{zed}@}%
% {\\ \hspace{-\zedindent}\circend\end{zed}\ignorespacesafterend}
\newcommand{\circdef}{\defs}
\newcommand{\circhide}{\hide}
\newcommand{\lcircguard}{\langle}
\newcommand{\rcircguard}{\rangle}
\newcommand{\lcircrename}{[}
\newcommand{\rcircrename}{]}
\newcommand{\universe}{\mathbb U}
% Hack: reduce space after schema by overriding \endzed in zed.sty. This file should be included AFTER zed.sty.
%\renewcommand{\endzed}{\crcr\egroup$$\vspace{-2em}\global\@ignoretrue}
\setlength{\zedtab}{1.3em}
\newcommand{\Skip}{\mathsl{Skip}}
\newcommand{\Stop}{\mathsl{Stop}}
\newcommand{\Chaos}{\mathsl{Chaos}}
\newcommand{\prefixcolon}{:}
\newcommand{\circspot}{\spot}