Equating decomposition numbers for different~primes
Gordon James and Andrew Mathas
This paper shows that certain decomposition numbers for the Iwahori--Hecke algebras of the symmetric groups and the $q$--Schur algebras at different roots of unity in characteristic zero are equal. To prove our results we first establish the corresponding theorem for the canonical basis of the level one Fock space and then apply deep results of Ariki and Varagnolo and Vasserot.
equating.tex
%% Equating decomposition numbers for different primes  %%
%%                                                      %%
%%      Gordon James    and         Andrew Mathas       %%
%%    G.James@ic.ac.uk       A.Mathas@maths.usyd.edu.au %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% LaTeX2e file
\documentclass[twoside]{amsart}

\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{cite}
\usepackage{mathrsfs}
%\usepackage[timestamping]{supreprint}

\usepackage{pstricks,pst-node,pst-coil}
\psset{linewidth=0.4pt}  

%% looks a little bit better
\usepackage{booktabs}
\setlength{\arrayrulewidth}{.09em}

\makeatletter

%% author information
\address{\bigskip\hfil\begin{tabular}{l@{}}
            School of Mathematics and Statistics F07\\  
            University of Sydney,
            Sydney N.S.W. 2006.\hfill\qquad
                        {\tt mathas@maths.usyd.edu.au}\\  
            Australia.\hfill\qquad
                    {\tt www.maths.usyd.edu.au/u/mathas/}
          \end{tabular}}

\copyrightinfo{}{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\renewcommand{\labelenumi}{(\roman{enumi})}

%% citations
\def\citeform#1{{\bf #1}}
\def\citeleft{\begingroup\rm[}
\def\citeright{]\endgroup}

\let\atop\@@atop

\def\And{\text{\ and\ }}
\def\By{\text{\ by\ }}
\def\For{\text{\ for\ }}
\def\ForAll{\text{\ for all\ }}
\def\AndSome{\text{\ and some\ }}
\def\ForSome{\text{\ for some\ }}
\def\If{\text{\ if\ }}
\def\Or{\text{\ or\ }}
\def\Whenever{\text{\ whenever\ }}
\def\Where{\text{\ where\ }}
\def\Otherwise{\text{\ otherwise}}
\def\th{{\text{th}}}

% set constructors
\def\Set[#1]#2|#3|{\Big\{\ #2\ \Big| \
            \vcenter{\hsize #1mm\centering#3}\Big\}}

% Only the first | is treated specially.
{\catcode`\|=\active
  \gdef\set#1{\mathinner{\lbrace\,{\mathcode`\|"8000%
                                   \let|\midvert #1}\,\rbrace}}
}
\def\midvert{\egroup\mid\bgroup}

% to number equations
\def\Number#1{\refstepcounter{equation}
              \leqno(\theequation)\if*#1%
              \else\def\@currentlabel{{\rm\theequation}}\label{#1}%
              \fi}
\def\Dag{\ifmmode\leqno(\dag)\else$(\dag\)$\fi}
\def\DDag{\ifmmode\leqno(\ddag)\else$(\ddag\)$\fi}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\numberwithin{equation}{section}

\swapnumbers
\newtheorem{Definition}[equation]{Definition}
\newtheorem{Theorem}[equation]{Theorem}
\newtheorem{Proposition}[equation]{Proposition}
\newtheorem{Lemma}[equation]{Lemma}
\newtheorem{Corollary}[equation]{Corollary}
\newtheorem{Conjecture}[equation]{Conjecture}

\theoremstyle{remark}
\newtheorem{Remark}[equation]{Remark}
\newtheorem{Remarks}[equation]{Remarks}
\newtheorem{Example}[equation]{Example}

\newenvironment{Point}[1]%
  {\ifx*#1\let\pointlabel\relax\else\def\pointlabel{#1}\fi
   \refstepcounter{equation}\trivlist
   \item[\hskip\labelsep\bf\theequation
         \ifx\pointlabel\relax\else\space\pointlabel\space\fi]
   \ignorespaces\it
  }{\relax}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\let\DS\displaystyle
\let\MC\multicolumn
\let\SR\stackrel
\def\Prod{\displaystyle\prod}
\def\Sum{\displaystyle\sum}

\def\cf{{\it cf.\space}}
\def\ie{{\it i.e.\space}}

\def\){\big)}
\def\({\big(}
\let\>\rangle
\let\<\langle
\def\dis{\mathop{\stackrel{\scriptscriptstyle\bullet}{\cup}}}
\let\implies\Longrightarrow
\let\iso\cong
\let\incl\hookrightarrow
\let\ss\subseteq
\let\0\varnothing              %empty set

\let\realb@r\bar
\let\bar\overline

% dominance orders
\let\gedom\trianglerighteq
\let\gdom\vartriangleright

\def\Ann{\mathop{\rm Ann}\nolimits}
\def\End{\mathop{\rm End}\nolimits}
\def\Hom{\mathop{\rm Hom}\nolimits}
\def\Ind{\mathop{\rm Ind}\nolimits}
\def\Res{\mathop{\rm Res}\nolimits}

%% open faced symbols for common rings
\def\F{{\mathbb F}}
\def\N{{\mathbb N}}
\def\Z{{\mathbb Z}}
\def\Q{{\mathbb Q}}
\def\R{{\mathbb R}}
\def\C{{\mathbb C}}

\let\To\longrightarrow
\def\map#1#2{\,{:}\,#1\!\longrightarrow\!#2}
\def\mapsto{\!\longmapsto\!}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\author{Gordon James and Andrew Mathas} 
\title{Equating decomposition numbers for different~primes} 
\subjclass[2000]{20C08, 20C30, 33D80}
\def\addresses{
\bigskip\makeatletter\sc
  \begin{tabular}[t]{ll}
  G.~J.& Department of Mathematics, Imperial College\\
       & 180 Queen's Gate, London SW7 2BZ. U.K.\\
       & {\tt g.james@ic.ac.uk}\hfill
         {\tt www.ma.ic.ac.uk/$\sim$gdj/}\\[5pt]
  A.~M.&School of Mathematics F07, University of Sydney\\
       &Sydney N.S.W. 2006.\hfill\qquad
	                {\tt a.mathas@maths.usyd.edu.au}\\
       &Australia.\hfill\qquad
	            {\tt www.maths.usyd.edu.au/u/mathas/}
\end{tabular}
}

\def\A{\mathcal A}
\def\etuple#1{({#1}_0,\dots,{#1}_{e-1})}
\def\aF{{}^\alpha\!F}
\def\F{\mathscr F}
\def\H{\mathscr H}
\def\Sc{\mathscr S}
\def\Hei{\mathcal H_e}
\def\Hm{\mathcal H^-_e}
\def\Hmp{\mathcal H^-_{e+1}}
\def\k{{\tt k}}
\def\len(#1){\ell(#1)}
\def\Rad{\operatorname{Rad}}
\def\res{\operatorname{res}}
\def\Sym{\mathfrak S}
\def\Ue{{\bf U}_v(\widehat{\mathfrak{sl}}_e)}
\def\UeA{{\bf U}_\A(\widehat{\mathfrak{sl}}_e)}
\def\Uep{{\bf U}_v(\widehat{\mathfrak{sl}}_{e+1})}
\def\Ume{{\bf U}^-_v(\widehat{\mathfrak{sl}}_e)}
\def\UmeA{{\bf U}^-_\A(\widehat{\mathfrak{sl}}_e)}
\def\Umep{{\bf U}^-_v(\widehat{\mathfrak{sl}}_{e+1})}
\def\Upe{{\bf U}^+_v(\widehat{\mathfrak{sl}}_e)}
\def\Upep{{\bf U}^+_v(\widehat{\mathfrak{sl}}_{e+1})}
\def\V{\mathcal V}

\def\head{\operatorname{head}}
\def\spin{\operatorname{spin}}
\def\ribbon#1{\,\everypsbox{\scriptstyle}
         \pccoil[linewidth=0.3pt,coilarm=.17,coilheight=1.2,coilwidth=.1]
                {->}(0,0.1)(1,0.1)
         \rput(.5,.25){#1}
         \hspace*{11mm}\vrule height 2.2ex width 0pt
}
\def\sribbon#1{\,\everypsbox{\scriptscriptstyle}
         \pccoil[coilarm=.15,coilheight=1.2,coilwidth=.08]
                {->}(0,0.07)(0.8,0.07)
         \rput(0.4,.19){#1}
         \hspace*{8mm}\vrule height 1.6ex width 0pt
}

\def\myarrow#1{\,\ooalign{\raise1.2ex\hbox{\scriptsize\ \ $#1$}\crcr%
           $\xrightarrow{\phantom{\hbox{\scriptsize\ \ $#1$}}}$}\,}
\def\iarrow{\myarrow{i}}

\let\section=\subsection
\def\theequation{\arabic{subsection}.\arabic{equation}}
\def\thesection#1{\relax}
\makeatletter
\@addtoreset{equation}{subsection}
\makeatother

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\begin{document}
\begin{abstract}
This paper shows that certain decomposition numbers for the
Iwahori--Hecke algebras of the symmetric groups and the $q$--Schur
algebras at different roots of unity in characteristic zero are equal.
To prove our results we  first establish the corresponding theorem for
the canonical basis of the level one Fock space and then apply deep
results of Ariki and Varagnolo and Vasserot.
\end{abstract}
 
\maketitle

\section{Introduction}
Throughout this note we adopt the standard notation for the modular
representation theory of the symmetric groups, as can be found in
\cite{James,M:ULect}.

Consider the following two submatrices of the $p$--modular decomposition
matrices of the symmetric groups $\Sym_n$.
$$\begin{array}{l|*{9}{l}}
10,1   &1&&&&&&&&\\
9,2    &1&1&&&&&&&\\
7,4    &.&1&1&&&&&&\\
7,2^2  &1&1&1&1&&&&&\\
6,5    &.&.&1&.&1&&&&\\
6,2^2,1&1&1&1&1&1&1&&&\\
4^2,3  &.&.&1&1&1&.&1&&\\
4^2,2,1&.&1&1&1&\bf2&1&1&1\\
\multicolumn{10}c{n=11\And p=3}\\
\end{array}
\quad
\begin{array}{l|*{9}{l}@{}}
18,3    &1&&&&&&&&\\
17,4    &1&1&&&&&&&\\
13,8    &.&1&1&&&&&&\\
13,4^2  &1&1&1&1&&&&&\\
12,9    &.&.&1&.&1&&&&\\
12,4^2,1&1&1&1&1&1&1&&&\\
8^2,5   &.&.&1&1&1&.&1&&\\
8^2,4,1 &.&1&1&1&\bf1&1&1&1\\
\multicolumn{10}c{n=21\And p=5}\\
\end{array}$$
The two matrices are identical except for the labelling and the two bold 
faced entries (omitted entries are zero).

This paper was motivated by our attempts to compute the bold faced
entry in the matrix above for $n=21$ and $p=5$. At the outset we knew
that this number was either $1$ or $2$; however, we were unable to
determine which of these possibilities was correct. L\"ubeck and
M\"uller~\cite{LM:p=5} have shown that this multiplicity is
equal to~$1$ using computer calculations; see~\cite[\S5.3]{LN:p=5} 
for details.

Note that the partitions $(4^2,2,1)$ and $(8^2,4,1)$ both have
$p$--weight $3$ and $p$--core $(p-2,p-2)$ for $p=3$ and $p=5$
respectively. Martin and Russell~\cite{MartinRussell} have claimed that
all of the $p$--modular decomposition numbers of the symmetric group
of $p$--weight~$3$ are~$0$ or~$1$ when $p>3$; unfortunately, their
proof contains a gap when dealing with partitions with $p$--core
$(p-2,p-2)$. This particular case is still open when $p>5$; as a
consequence, the claim in~\cite{MartinRussell} that the decomposition
numbers are always $0$ or $1$ for partitions of $p$--weight~$3$ when
$p>3$ is in doubt.

In this paper we prove a general theorem which indicates why the
matrices above are very similar. This result is not about the
decomposition matrices of the symmetric groups but rather about the
closely related decomposition matrices of the $q$--Schur algebras
$\Sc_{\C,q}(n)$ at a complex root of unity. Our result shows that
certain decomposition numbers of $\Sc_{\C,q}(n)$ and $\Sc_{\C,q'}(m)$
are equal for specified $m>n$. The decomposition matrix for the
Iwahori--Hecke algebra $\H_{\C,q}(\Sym_n)$ is a submatrix of the
decomposition matrix of $\Sc_{\C,q}(n)$; so, in particular, our result
shows that for the Iwahori--Hecke algebras all of the decomposition
multiplicities above for $(n,e)=(11,3)$ and $(m,e')=(21,5)$ are equal
(in the Hecke algebra case the multiplicities $d_{(4^2,2,1),(6,5)}$,
when $e=3$, and $d_{(8^2,4,1),(12,9)}$, when $e=5$, are both equal
to~$1$).

\section{Abacuses and the $q$--Schur algebra} In order to state
our results we recall the abacus notation for partitions introduced
in~\cite{James:YoungD}. Fix an integer $e\ge2$. An {\sf $e$--abacus}
is an abacus with $e$ runners, which we label from left to right as
$\rho_0,\dots,\rho_{e-1}$. Number the bead positions on the abacus by
$0,1,2,\dots$ reading from left to right and then top to bottom; so
the bead positions on $\rho_r$ are numbered $r+me$ for $m\ge0$. We
order the beads on a given $e$--abacus according to their bead
positions.

Let $\lambda=(\lambda_1,\lambda_2,\dots)$ be a partition. The 
{\sf length} of $\lambda$ is the smallest integer $\len(\lambda)$ such
that $\lambda_i=0$ for all $i>\len(\lambda)$. If $k\ge\len(\lambda)$
then $\lambda$ has a (unique) $e$--abacus representation with $k$
beads; namely, the $e$--abacus with beads at positions $$\lambda_k,
\lambda_{k-1}+1,\dots,\lambda_2+k-2,\lambda_1+k-1.$$ The bead
positions on an abacus for $\lambda$ encode the first column hook
lengths, so this gives a natural bijection between the abacuses with
$k$ beads and the partitions of length at most $k$.  For our purposes
it is important that the $m^\th$ bead on an abacus for $\lambda$
corresponds to row $l=k-m+1$ of $\lambda$ (row $l$ of $\lambda$ is
empty if $l>\len(\lambda)$). 

In what follows we fix $k\ge0$ and (with few exceptions) consider
only abacuses with $k$ beads; or, equivalently, partitions of length
at most $k$.

We want to compare $e$--abacuses with $(e+1)$--abacuses. Fix an
integer $\alpha$ with $0\le\alpha\le e$. If $\lambda$ is a partition
with $\len(\lambda)\le k$ then $\lambda$ can be represented on an
$e$--abacus with $k$ beads. Let $\lambda^+$ be the partition
corresponding to the $(e+1)$--abacus obtained by inserting an {\it
empty} runner before $\rho_\alpha$ in the $e$--abacus for $\lambda$
(if $\alpha=e$ we insert an empty $e^\th$ runner). Let
$\rho_0^+,\dots,\rho_e^+$ be the runners of the $(e+1)$--abacus of
$\lambda^+$; then $\rho^+_r=\rho_r$ if $r<\alpha$, $\rho^+_\alpha$
is empty, and $\rho^+_r=\rho_{r-1}$ if $r>\alpha$.

Although our notation does not reflect this the partition $\lambda^+$
does depend upon both the choice of $\alpha$ and the choice of $k$. 

\begin{Example}
Suppose that $e=3$, $k=4$ and $\alpha=2$. Let
$\lambda=(4^2,3)$. Then the abacuses (with $4$ beads) for $\lambda$,
$\lambda^+$ and $\lambda^{++}=(\lambda^+)^+$ are as follows.
$$\begin{array}{@{\hskip 14mm}*3{c@{\hskip 12mm}}}
\begin{array}[t]{*3l}\MC3c{e=3}\\
  2 & 0 &1\\\hline
  \bullet&\cdot&\cdot\\
  \cdot&\bullet&\cdot\\
  \bullet&\bullet&\cdot\\
  \cdot&\cdot&\cdot
\end{array} & 
\begin{array}[t]{*4c}\MC4c{e'=4}\\
  0&1&2&3\\\hline
  \bullet&\cdot&\cdot&\cdot\\
  \cdot&\bullet&\cdot&\cdot\\
  \bullet&\bullet&\cdot&\cdot\\
  \cdot&\cdot&\cdot&\cdot
\end{array} &
\begin{array}[t]{*5c}\MC5c{e''=5}\\
  1&2&3&4&0\\\hline
  \bullet&\cdot&\cdot&\cdot&\cdot\\
  \cdot&\bullet&\cdot&\cdot&\cdot\\
  \bullet&\bullet&\cdot&\cdot&\cdot\\
  \cdot&\cdot&\cdot&\cdot&\cdot
\end{array} \\[8pt]
\lambda=(4^2,3) & \lambda^+=(6^2,4) & \lambda^{++}=(8^2,5)
\end{array}$$
We have labelled the runners by their residues which will be introduced
below.

The reader is invited to check that the partitions which label the
decomposition matrix for $n=21$ and $p=5$ in the introduction are
precisely the partitions $\lambda^{++}$ as $\lambda$ runs over the
corresponding partitions of $11$. We emphasize that the empty runner
can be inserted anywhere in the abacus.
\label{example}\end{Example}

We are now almost ready to describe our main result. As in the
introduction let~$q$ be a primitive $e^\th$ root of unity in $\C$ and
let $\Sc_{\C,q}(n)$ be the $q$--Schur algebra defined over the complex
numbers with parameter $q$; so $\Sc_{\C,q}(n)=\Sc_{\C,q}(n,n)$ in the
notation of Dipper and James~\cite{DJ:Schur}.

For each partition $\lambda$ of $n$ Dipper and James~\cite{DJ:qWeyl}
(see also \cite{M:ULect}), defined a right $\Sc_{\C,q}(n)$--module
$W^\lambda_q$, called a {\sf Weyl module}. There is a natural bilinear
form $\<\ ,\ \>$ on $W^\lambda_q$ and 
$\Rad W^\lambda_q
   =\set{x\in W^\lambda_q|\<x,y\>=0\ForAll y\in W^\lambda_q}$
is an $\Sc_{\C,q}(n)$--submodule of~$W^\lambda_q$; set
$L^\lambda_q=W^\lambda_q/\Rad W^\lambda_q$.  Dipper and James showed
that $L^\lambda_q$ is an absolutely irreducible $\Sc_{\C,q}(n)$--module
and, further, that every irreducible $\Sc_{\C,q}(n)$--module arises
uniquely in this way.  Let $[W^\lambda_q:L^\mu_q]$ be the multiplicity
of the simple module $L^\mu_q$ as a composition factor of
$W^\lambda_q$.

Let $q'$ be a primitive $(e+1)^{\text{st}}$ root of unity in $\C$.
Then we also have the $q'$--Schur algebra $\Sc_{\C,q'}(m)$ and modules
$W^\nu_{q'}$ and $L^\nu_{q'}$, for $\nu$ a partition of $m$. We shall
prove the following.

\begin{Theorem}
Suppose that $\lambda$ and $\mu$ are partitions of $n$ of
length at most $k$. Then 
$$[W^\lambda_q:L^\mu_q]=[W^{\lambda^+}_{q'}:L^{\mu^+}_{q'}].$$
\label{main}\end{Theorem}

It may not be clear to the reader that this result is really saying
that the decomposition matrices of the blocks containing $W^\lambda_q$
and $W^{\lambda^+}_{q'}$ are equal on those rows indexed by partitions
of length at most $k$, when we order the rows of these matrices in a
way compatible with dominance. This follows from
Lemma~\ref{bookkeeping} below.

Let $\H_{\C,q}(\Sym_n)$ be the Iwahori--Hecke algebra of
$\Sym_n$~\cite{M:ULect}. Then for each partition $\lambda$ there is an
$\H_{\C,q}(\Sym_n)$--module $S^\lambda_q$, called a Specht module,
which carries an associative bilinear form. Let
$D^\lambda_q=S^\lambda_q/\Rad S^\lambda_q$; then $D^\lambda_q$ is
either zero or absolutely irreducible and every irreducible
$\H_{\C,q}(\Sym_n)$--module arises uniquely in this way. Moreover,
$D^\lambda_q\ne0$ if and only if $\lambda$ is $e$--regular; that is,
if and only if no $e$ non--zero parts of $\lambda$ are equal.

There is a $q$--analogue of the Schur functor which maps $W^\lambda_q$
to $S^\lambda_q$ and $L^\lambda_q$ to $D^\lambda_q$ for each
$\lambda$; in particular, this shows that
$[W^\lambda_q:L^\mu_q]=[S^\lambda_q:D^\mu_q]$ whenever $\mu$ is
$e$--regular. Hence, from Theorem~\ref{main} we obtain the following:

\begin{Corollary}
Suppose that $\lambda$ and $\mu$ are partitions of $n$ of
length at most $k$ such that $\mu$ is $e$--regular. Then 
$[S^\lambda_q:D^\mu_q]=[S^{\lambda^+}_{q'}:D^{\mu^+}_{q'}].$
\label{regular main}\end{Corollary}

It is tempting to speculate that there is some form of category
equivalence underpinning these results. However, in general, there are
a different number of simple modules in the blocks for $\lambda$ and
$\lambda^+$, so these blocks are certainly not Morita equivalent.

Rather than prove our comparison theorem for decomposition numbers
directly we prove a stronger result relating the
LLT--polynomials~\cite{LLT,LT:Schur2}. We now recall the notation
needed to describe this.

\section{The Fock space and $\Ue$ --- the regular case}
Let $v$ be an indeterminate over $\C$. The {\sf Fock space} is the infinite
rank free $\C[v,v^{-1}]$--module
$\F=\bigoplus_{n\ge0}\bigoplus_{\lambda\vdash n}\C[v,v^{-1}]\lambda$.
The Fock space has a natural structure as a module for the affine
quantum group $\Ue$; we will describe how the negative part
$\Ume$ of $\Ue$ acts on $\F$ since this is all we shall need (full
details can be found in \cite{LLT,M:ULect}). 

The {\sf diagram} of a partition $\lambda$ is the set
$[\lambda]=\set{(c,d)\in\N^2|d\le\lambda_c}$. A {\sf node} is any ordered
pair $(c,d)\in\N^2$; in particular, all of the elements of $[\lambda]$
are nodes.  The {\sf $e$--residue} of the node $x=(c,d)$ is
$\res_e(x)=d-c\pmod e$; $x$ is an $i$--node if
$res_e(x)=i$.

A node $x$ is an {\sf addable} node of $\lambda$ if $[\lambda]\cup\{x\}$
is the diagram of a partition (and~$x\notin[\lambda]$); similarly, $x$
is {\sf removable} if $[\lambda]\setminus\{x\}$ is the diagram of a
partition (and~$x\in[\lambda]$). For $i=0,\dots,e-1$ let
$A_i(\lambda)$ be the set of addable $i$--nodes for~$\lambda$ 
and~$R_i(\lambda)$ be the set of removable $i$--nodes.  Given two nodes
$x=(c,d)$ and~$y=(a,b)$ say that $y$ is {\sf above} $x$ if $c>a$; if $y$
is above $x$ we write $y\succ x$.

In order to define the action of $\Ume$ on $\F$ for
$i=0,\dots e-1$ write $\lambda\iarrow\nu$ if $\nu$ is a partition of
$n+1$ and $[\nu]=[\lambda]\cup\{x\}$ for some addable $i$--node $x$.
Finally, we set
$N_i(\lambda,\nu)=\#A_i(\lambda,\nu)-\#R_i(\lambda,\nu)$ where
$A_i(\lambda,\nu)=\set{y\in A_i(\lambda)|y\succ x}$ and
$R_i(\lambda,\nu)=\set{y\in R_i(\lambda)|y\succ x}$. 

Let $F_0,\dots,F_{e-1}$ be the Chevalley generators of $\Ume$. Then
the action of~$\Ume$ on $\F$ is determined by 
$$ F_i\lambda=\sum_{\lambda\iarrow\nu}v^{N_i(\lambda,\nu)}\nu,
\Number{U-action}$$ 
for $0,1,\dots,e-1$.

Let $\Lambda_0,\dots,\Lambda_{e-1}$ be the fundamental weights of
$\Ue$ and let $L(\Lambda_0)$ be the
irreducible integrable highest weight module of high weight $\Lambda_0$. 
Then $L(\Lambda_0)\cong\Ue\0=\Ume\0$ as a $\Ue$--module~\cite{LLT},
where $\0\in\F$ is the empty partition.

Let $\rule[1.4ex]{.6em}{.1ex}$\ be the bar involution on $\UeA$,
Kostant--Lusztig $\A$--form of $\Ue$ (where $\A=\Z[v,v^{-1}]$). Then
Lascoux, Leclerc and Thibon~\cite{LLT} showed that $L(\Lambda_0)$ has
a basis $\set{B_\mu|\mu\ e\text{--regular}}$ which is uniquely
determined by the requirements that $\bar B_\mu=B_\mu$ and
$$B_\mu=\sum_{\substack{\lambda\vdash n\\\mu\gedom\lambda}}
                 b_{\lambda\mu}(v)\lambda$$
for some polynomials $b_{\lambda\mu}(v)\in\Z[v]$ such that
$b_{\mu\mu}(v)=1$ and $b_{\lambda\mu}(v)\in v\Z[v]$ whenever
$\lambda\ne\mu$. This basis is the Kashiwara--Lusztig canonical basis
of $L(\Lambda_0)$.

In particular, note that Lascoux, Leclerc and Thibon~\cite{LLT}
showed that $b_{\lambda\mu}(v)=0$ if either $|\lambda|\ne|\mu|$ or if
$\lambda$ and $\mu$ have different $e$--cores.

We want to compare the actions of $\Ue$ and $\Uep$ on the Fock space
$\F$. In order to distinguish between these two algebras let
$F_0^+,\dots,F_e^+$ be the Chevalley generators of $\Umep$, let
$\Lambda_0^+,\dots,\Lambda_e^+$ be its fundamental weights, and let
$\F^+\cong\F$ be the Fock space for the $\Uep$--action. Then
$L(\Lambda^+_0)\cong\Umep\0$ as a $\Uep$--module. Given an
$(e+1)$--regular partition $\nu$ let
$$B^+_\nu=\sum_{\nu\gedom\sigma} b^+_{\sigma\nu}(v)\sigma$$
be the corresponding canonical basis element of $L(\Lambda^+_0)\ss\F^+$.

We can now state a stronger version of Corollary~\ref{regular main}.

\begin{Theorem}
Suppose that $\lambda$ and $\mu$ are partitions
of $n$ of length at most $k$ and suppose that
$\mu$ is $e$--regular. Then
$b_{\lambda\mu}(v)=b_{\lambda^+\mu^+}^+(v)$.
\label{fock}\end{Theorem}

Ariki \cite[Prop.~4.3(2)]{Ariki:can} has shown that the polynomials
$b_{\lambda\mu}(v)$ at $v=1$ compute the decomposition multiplicities;
explicitly, $[S^\lambda_q:D^\mu_q]=b_{\lambda\mu}(1)$ and
$[S^{\lambda^+}_{q'}:D^{\mu^+}_{q'}]=b_{\lambda^+\mu^+}^+(1)$.
Consequently, Theorem~\ref{fock} implies Corollary~\ref{regular main}.
The result also hints at additional structure because, conjecturally,
the polynomials $b_{\lambda\mu}(v)$ and $b_{\lambda^+\mu^+}^+(v)$ also
describe the Jantzen filtrations of $S^\lambda_q$ and
$S^{\lambda^+}_{q'}$; see \cite{LLT,JM:Schaper}.

We prove Theorem~\ref{fock} directly using the LLT algorithm; in the
next section we will extend this argument to cope with the case where
$\mu$ is not necessarily $e$--regular.  

Fred Goodman has pointed out that Theorem~\ref{fock} can also be
deduced from~\cite[Theorem~5.3]{GW}. We remark that the origin of our
results, and those of Goodman and Wenzl, is that the
$b_{\lambda\mu}(v)$ are parabolic Kazhdan--Lusztig polynomials for the
parabolic subgroup $\Sym_k$ of the extended affine Weyl group
$\hat\Sym_k$ \cite{GW,VV,LT:Schur2}; in turn, the parabolic
Kazhdan--Lusztig polynomials are naturally indexed by the alcoves and,
generically, the alcove geometry does not depend on $k$ or $e$.

We begin the proof of Theorem~\ref{fock} with the following Lemma
which is largely book keeping. For example, the result implicitly
assumes that $\mu^+$ is $(e+1)$--regular.

\begin{Lemma}
Let $\lambda$ and $\mu$ be partitions of $n$ of length at
most $k$. Then
\begin{enumerate}
\item $\mu^+$ is $(e+1)$--regular;
\item $\lambda$ and $\mu$ have the same $e$--core if and only if
$\lambda^+$ and $\mu^+$ have the same $(e+1)$--core;
\item if $\lambda$ and $\mu$ have the same $e$--core then
$|\lambda^+|=|\mu^+|$; and,
\item $\lambda\gedom\mu$ if and only if $\lambda^+\gedom\mu^+$
\end{enumerate}\label{bookkeeping}
\end{Lemma}

\begin{proof}
A partition is $(e+1)$--regular if and only if its
$(e+1)$--abacus does not contain a string of $e+1$
consecutive beads. Hence, $\mu^+$ is $(e+1)$--regular since the runner
$\rho_\alpha^+$ is empty; this proves (i). (In fact, if $\mu$ is
$e$--regular then so is~$\mu^+$.)

Next, recall that the $e$--abacus for the $e$--core of $\lambda$ is
obtained by rearranging the beads on each runner of the $e$--abacus
for $\lambda$ in such a way that no bead has an empty bead position
above it. Hence, if $\kappa$ is the $e$--core of $\lambda$ then
$\kappa^+$ is the $(e+1)$--core of~$\lambda^+$, so (ii) follows.

For (iii) define $w$ by $|\lambda|=|\kappa|+we$; in
other words, $w$ is the $e$--weight of~$\lambda$. Now, $w$ can be read
off the $e$--abacus for $\lambda$ by adding up, for each bead $\beta$,
the number of empty bead positions which are above~$\beta$ and also
on the same runner.  Consequently, $w$ is also the $(e+1)$--weight of
$\lambda^+$; hence, $|\lambda^+|=|\kappa^+|+w(e+1)$. Lastly, since
$\kappa$ is also the $e$--core of $\mu$ it follows that $\mu$ is also
a partition of $e$--weight~$w$ and that
$|\mu^+|=|\kappa^+|+w(e+1)=|\lambda^+|$, as required.

Finally, let $\beta_1^\lambda<\dots<\beta^\lambda_k$
and  $\beta_1^\mu<\dots<\beta^\mu_k$ be the positions of the beads on
the $e$--abacuses for $\lambda$ and $\mu$ respectively. Then it is
easy to see that $\lambda\gedom\mu$ if and only if 
$\sum_{s=t}^k\beta^\lambda_s\ge\sum_{s=t}^k\beta^\mu_s$
for $t=1,\dots,k$. Rephrasing this condition in terms of the
$(e+1)$--abacuses of $\lambda^+$ and $\mu^+$ proves (iv).
\end{proof}

We remark that if $\lambda$ and $\mu$ are partitions of $n$ with
different $e$--cores then, in general, it is {\it not} true that
$|\lambda^+|=|\mu^+|$. 

Let $\F_{>k}$ be the $\C[v,v^{-1}]$--submodule of $\F$ spanned by the
partitions of length strictly greater than $k$. By (\ref{U-action})
$\F_{>k}$ is a $\Ume$--submodule of $\F$; it is not, however, a
$\Ue$--submodule. Therefore, $\F_k=\F/\F_{>k}$ is a $\Ume$--module.
We abuse notation and identify the elements of $\F$ with their images
in $\F_k$; with this understanding, $\set{\lambda|\len(\lambda)\le k}$
is a basis of $\F_k$. 

Similarly, $\F_k^+=\F^+/\F_{>k}^+$ is a $\Umep$--module.  We want to
compare the action of $\Ume$ on $\F_k$ with the action of $\Umep$ on
$\F^+_k$; to do this we reinterpret (\ref{U-action}) in terms of
abacuses.

Suppose $\lambda$ is a partition with $\len(\lambda)\le k$ and
consider the $e$--abacus of $\lambda$. For $0\le r<e$ define the
{\sf $e$--residue} of the runner $\rho_r$ to be the integer
$\res_e(\rho_r)$ determined by the following two conditions.
\begin{enumerate}
\item The $e$--residue of the runner which holds the last bead is
$\lambda_1-1\pmod e$.
\item Modulo $e$, the $e$--residues of the runners increase by $1$ from
left to right.
\end{enumerate}\noindent%
In Example~\ref{example} the runners are labelled by their $f$--residues for
$f=3,4$ and~$5$ respectively. Similarly, we define the
$(e+1)$--residues $\res_{e+1}(\rho^+_r)$, for $0\le r\le e$, of the
runners of the $(e+1)$--abacus for $\lambda^+$.

The $e$--residue of a bead $\beta$ is defined to be the $e$--residue
of the corresponding runner. As we have seen, the $k$ beads on the
$e$--abacus correspond to the first $k$ rows of $\lambda$ (in reverse
order); it is easy to see that the $e$--residue of a bead is equal to
the $e$--residue of the node at the end of the corresponding row of
$\lambda$. In particular, this implies that $e$--residues of the
runners depend only on the $e$--core of $\lambda$.

The operator $F_i$ acts on a partition $\lambda$ by adding nodes of
$e$--residue~$i$. Because the $e$--residues of the runners correspond
to the $e$--residues of nodes at the end of the rows of $\lambda$,
this is the same as moving a bead on the $e$--abacus of $\lambda$ from
the runner with $e$--residue $i-1$ to an adjacent empty position on
the runner with $e$--residue $i$.

Recall that in the definition of $\lambda^+$ we have fixed an integer
$\alpha $ with $0\le \alpha<e$. We now introduce a
$\C[v,v^{-1}]$--linear map $\aF_i\map{\F_k}{\F^+_k}$ for
$i=0,\dots,e-1$. To define $\aF_i$ it is enough to describe
$\aF_i\lambda$ for each partition~$\lambda$ with $\len(\lambda)\le k$.
As above, let $\rho_0,\dots,\rho_{e-1}$ be the runners of the
$e$--abacus of $\lambda$ (with~$k$ beads) and let
$\rho^+_0,\dots,\rho^+_e$ be the runners of the $(e+1)$--abacus for
$\lambda^+$. There is a unique $r$ such that $i=\res_e(\rho_r)$ (and
$0\le r<e$); set $j=\res_{e+1}(\rho^+_r)$. Define
$$\aF_i\lambda=\begin{cases} 
                   F^+_j\lambda^+,&\If 0\le r<\alpha,\\
                   F^+_{j+1}F^+_j\lambda^+,&\If r=\alpha,\\
                   F^+_{j+1}\lambda^+,&\If \alpha<r<e,
\end{cases}$$
where $j+1$ is understood modulo $e$. Similarly, we define the divided
powers $\aF_i^{(a)}$ for $a\ge1$; for example, when $r=\alpha$ we set
$\aF_i^{(a)}\lambda=F_{j+1}^{+(a)}F_j^{+(a)}\lambda^+$.

For our final piece of notation observe that
$\len(\lambda^+)\ge\len(\lambda)$ for any partition $\lambda$ (and if
$\lambda$ is a partition of length at most $k$ then
$\len(\lambda)\le\len(\lambda^+)\le k$). Therefore, we have a
well--defined $\C[v,v^{-1}]$--linear map $\Theta\map{\F_k}\F_k^+$
determined by $\Theta(\lambda)=\lambda^+$ for $\len(\lambda)\le k$. As
with $\lambda^+$, we emphasize that $\Theta$ depends upon
both~$\alpha$ and~$k$. The map~$\Theta$ is injective but not
surjective, having image the span of those partitions of length at
most $k$ which have an $(e+1)$--abacus with $k$ beads and with an
empty runner $\rho^+_\alpha$.

\begin{Lemma}
\label{commuting1}
Suppose that $0\le i<e$. Then the following diagram commutes.
$$\begin{array}{c}\\[-6pt]
\psmatrix[colsep=1cm,rowsep=1cm]
  \F_k & \F_k \\
       & \F^+_k
\endpsmatrix%\everypsbox{\scriptstyle}
\psset{nodesep=3pt,arrows=->}
\ncline{1,1}{1,2}\taput{F_i}
\ncline{1,1}{2,2}\tlput{\aF_i}
\ncline{1,2}{2,2}\trput{\Theta}
\end{array}$$
\end{Lemma}

\begin{proof}
It suffices to verify the lemma for a partition
$\lambda\in\F_k$. As above, let $\rho_r$ be the runner in the
$e$--abacus for $\lambda$ for which $i=\res_e(\rho_r)$ and set
$j=\res_{e+1}(\rho_r^+)$. 

First consider $F_i\lambda=\sum_\nu v^{N_i(\lambda,\nu)}\nu^+$. Recall
that the beads on the $e$--abacus for $\lambda$ are naturally indexed
by the rows of $\lambda$ and that the $e$--residue of a bead is
defined to be the $e$--residue of the node which is at the end of the
corresponding row. Therefore, an addable $i$--node of $\lambda$
corresponds to a node on runner~$r-1$ of the $e$--abacus which can be
moved to the adjacent position on runner $r$ (which must therefore be
empty).  Similarly, a removable $i$--node corresponds to a node on
runner $r$ which can be moved back to the adjacent position on runner
$r-1$; here, $r\pm 1$ is to be understood modulo~$e$. The addable and
removable nodes of $\lambda^+$ have analogous descriptions.

Fix a partition $\nu$ with $\lambda\iarrow\nu$ and write
$[\nu]=[\lambda]\cup\{x\}$.  Then there exists a node at position
$\beta_x$ on the runner $r-1$ of the $e$--abacus for $\lambda$ which
can be moved to the adjacent position on runner $r$ so as to give the
$e$--abacus for $\nu$. Then $N_i(\lambda,\nu)=A-B$, where
$A=\#\set{y\in A_i(\lambda)|y\succ x}$ and $B=\#\set{y\in
R_i(\lambda)|y\succ x}$.  If $y$ is an addable or removable node of
$\lambda$ then $y\succ x$ if and only if it corresponds to a bead at
position $\beta_y$ with $\beta_y>\beta_x$. Hence, $A$ is equal to the
number of beads on runner $\rho_{r-1}$ which come after $\beta_x$ such
that the adjacent position on $\rho_r$ is vacant; similarly, $B$ is
equal to the number of beads on $\rho_r$ which are after $\beta_x$
and for which the adjacent position on runner~$r-1$ is vacant. 

Now consider the $(e+1)$--abacuses for $\lambda^+$ and $\nu^+$. Assume
first that $r<\alpha$. Then the runners $\rho_{r-1}$ and $\rho_r$ for
$\lambda$ are the same as the runners $\rho^+_{r-1}$ and $\rho^+_r$
for $\lambda^+$ and so the last paragraph shows that the addable and
removable $i$--nodes for $\lambda$ correspond exactly to the addable
and removable $j$--nodes for $\lambda^+$. Hence,
$N_j(\lambda^+,\nu^+)=A-B=N_i(\lambda,\nu)$. Similarly, when
$r>\alpha$ the addable and removable $i$--nodes for $\lambda$
correspond to the addable and removable $(j+1)$--nodes for $\lambda^+$
and $N_i(\lambda,\nu)=N_{j+1}(\lambda^+,\nu^+)$.

Finally, consider the case when $r=\alpha$. This time runner
$\rho_{r-1}$ is equal to $\rho^+_{r-1}$ and runner $\rho_r$ is equal
to $\rho^+_{r+1}$; whereas runner $\rho^+_r=\rho^+_\alpha$ of
$\lambda^+$ is empty. Therefore, the addable and removable $i$--nodes
of $\lambda$ again correspond to addable and removable $j$--nodes
of $\lambda^+$ except that this time there are additional addable
$j$--nodes of $\lambda^+$ corresponding to the adjacent pairs of beads
on the runners $\rho_{r-1}$ and $\rho_r$ of the $e$--abacus of
$\lambda$.  Let $\sigma$ be the partition such that 
$\lambda^+\myarrow{\ j}\sigma\myarrow{j+1}\nu^+$. Since
$\rho_r^+$ is empty, $\lambda^+$ has no removable $j$--nodes.
Therefore, if we let $l$ be the number of pairs of adjacent beads on
runners $\rho_{r-1}$ and $\rho_r$ which are above $\beta_x$ then
$N_j(\lambda^+,\sigma)=A+l$. Next observe that $\sigma$ has a
single addable $(j+1)$--node (corresponding to the bead which we
just moved), and that the removable $(j+1)$--nodes of~$\sigma$
correspond to the removable $i$--nodes of $\lambda$ together with the
$l$ beads on runner~$\rho_r$ which we have already paired with an
adjacent bead on $\rho_{r-1}$; therefore,
$N_{j+1}(\sigma,\nu^+)=-(B+l)$.  Consequently,
$N_j(\lambda^+,\sigma)+N_{j+1}(\sigma,\nu^+)=A-B=N_i(\lambda,\nu)$ and
so we have $$F^+_{j+1}F^+_j\lambda^+ =\sum_{\nu^+}
v^{N_i(\lambda,\nu)}\nu^+ =\Theta( F_i\lambda ),$$ where the sum is
over those partitions $\nu^+$ for which there exists a partition
$\sigma$ such that $\lambda^+\myarrow{\ j}\sigma\myarrow{j+1}\nu^+$.
Note that there are additional terms in the expansion 
of~$F_j\lambda^+$ (corresponding to the pairs of adjacent beads on
runners $\rho_{r-1}$ and $\rho_r$ of the $e$--abacus for $\lambda$);
however, they all disappear when $F_{j+1}$ is applied because these
extra partitions do not have any addable $(j+1)$--nodes. This
completes the proof.  
\end{proof}

Now consider $L(\Lambda_0)_k=L(\Lambda_0)/\(L(\Lambda_0)\cap\F_k)$.
If $\mu$ is an $e$--regular partition with $\len(\mu)\le k$ let
$\tilde B_\mu=B_\mu+\F_{>k}$. As noted by Goodman and
Wenzl~\cite[Lemma~4.1]{GW}, the elements $\set{B_\mu|\mu \text{\ is
$e$--regular and\ }\len(\mu)\le k}$ give a basis of $L(\Lambda_0)_k$.

The bar involution induces a well--defined map on $\F_k$ via
$\bar{a+\F_{>k}}=\bar a+\F_{>k}$ for all $a\in\F$. It is easy to see
that $\tilde B_\mu$ is the unique element of~$\F_k$ which is bar
invariant and of the form $\mu+\sum_\lambda b_{\lambda\mu}(v)\lambda$
for some polynomials $b_{\lambda\mu}(v)\in v\Z[v]$, the sum being over
the partitions of length at most $k$.  

Similarly, 
$\set{\tilde B^+_\nu|\nu 
           \text{\ is $(e+1)$--regular and $\len(\nu)\le k$}}$,
where $\tilde B^+_\nu= B^+_\nu+\F^+_{>k}$, is a basis of the 
$\Umep$--module
$L(\Lambda_0^+)_k=L(\Lambda_0^+)/\(L(\Lambda_0^+)\cap\F^+_k)$.

\begin{Proposition}
Suppose that $\mu$ is an $e$--regular partition with at most $k$
rows. Then $\tilde B^+_{\mu^+}=\Theta(\tilde B_\mu)$.
\label{theta}
\end{Proposition}

\begin{proof}
Looking at the definitions, $\Theta(\tilde B_\mu)=\mu^+$ plus a
$q\Z[q]$--linear combination of less dominant terms. Therefore, it is
enough to show that $\Theta(\tilde B_\mu)$ is a bar invariant element
of $\F^+_k$. 

Let $\0\in\F_k$ be the image of the empty partition in $\F_k$.
Following Lascoux, Leclerc and Thibon~\cite[Lemma~6.4]{LLT} let
$(r_1^{a_1},\dots,r_s^{a_s})$ be the $e$--residue sequence of~$\mu$
corresponding to the $e$--ladders in the diagram of $\mu$. Then
$A_\mu=F_{r_s}^{(a_s)}\dots F_{r_1}^{(a_1)}\0$ is a bar invariant
element of $\F_k$ of the form $A_\mu=\mu+\sum_\lambda
a_{\lambda\mu}(v)\lambda$ where $a_{\lambda\mu}(v)\in\Z[v,v^{-1}]$ and
the sum is over partitions $\lambda$ of length a most $k$ such that
$\mu\gdom\lambda$. Therefore, there exist uniquely determined polynomials
$\alpha_{\sigma\mu}(v)\in\Z[v]$ such that
$\tilde B_\mu=A_\mu-\sum_\sigma \alpha_{\sigma\mu}(v)\tilde B_\sigma,$
where the sum is over $e$--regular partitions $\sigma$ such that
$\mu\gdom\sigma$ and $\len(\sigma)\le k$.

Now consider the element $A_\mu^+=\Theta(A_\mu)=\mu+\sum_\lambda
a_{\lambda\mu}(v)\lambda^+$ in $\F^+_k$. By the Lemma,
$A_\mu^+=\aF_{r_s}^{(a_s)}\dots\aF_{r_1}^{(a_1)}\0$; hence, $A^+_\mu$
is bar invariant. By induction on dominance 
$\tilde B_\sigma^+=\Theta(\tilde B_\sigma)$ for $\mu\gdom\sigma$. 
Therefore, the element
$\Theta(\tilde B_\mu)
  =A^+_\mu-\sum_\sigma \alpha_{\sigma\mu}(v)\tilde B_{\sigma^+}$
is also bar invariant. Consequently, 
$\tilde B^+_{\mu^+}=\Theta(\tilde B_\mu)$ as we wanted to show.
\end{proof}

It is easy to see ~\cite{LLT} that the polynomials
$b^+_{\sigma\tau}(v)$ are non--zero only if $\sigma$ and $\tau$ have
the same $(e+1)$--core.  Therefore, if $\mu$ is an $e$--regular
partition with $\len(\mu)\le k$ then
$\tilde B^+_{\mu^+}
        =\sum_{\mu\gedom\lambda}b^+_{\lambda^+\mu^+}(v)\lambda^+;$
on the other hand,
$\Theta(B_\mu)=\sum_{\mu\gedom\lambda}b_{\lambda\mu}(v)\lambda^+,$
where in both sums $\len(\lambda)\le k$. Hence, Theorem~\ref{fock}
follows from the Proposition.

\section{The main theorem}In this section we extend
Theorem~\ref{fock} to the case where~$\mu$ is not necessarily
$e$--regular; this will prove Theorem~\ref{main}.

The Fock space also admits an action from a {\sf Heisenberg algebra}
$\Hei$~\cite{LT:Schur2}.  The action of $\Hei$ on $\F$ commutes with
the action of $\Ue$ and it is useful because $\F$ is irreducible when
considered as a module for the algebra generated by the actions
of~$\Ue$ and $\Hei$ on~$\F$. In addition, the action of $\Hei$ allowed
Leclerc and Thibon \cite[\S7.9]{LT:Schur2} to extend the bar
involution to the whole of $\F$; in turn, this enabled them to extend
the canonical basis of $L(\Lambda_0)$ to give a basis
$\set{B_\mu|\mu\text{ a partition}}$ of~$\F$ where, the element
$B_\mu$ is again uniquely determined by the two conditions that 
$\bar B_\mu=B_\mu$ and
$$B_\mu=\sum_{\substack{\lambda\vdash n\\\mu\gedom\lambda}}
                 b_{\lambda\mu}(v)\lambda$$
for some polynomials $b_{\lambda\mu}(v)\in\Z[v]$ such that
$b_{\mu\mu}(v)=1$ and $b_{\lambda\mu}(v)\in v\Z[v]$ whenever
$\lambda\ne\mu$. We will show that Theorem~\ref{fock} generalizes to the
non--regular case.

As in the previous sections we are only interested in the action of a
subalgebra~$\Hm$ of $\Hei$; for the full story see
\cite[\S7.5]{LT:Schur2}. The algebra $\Hm$ is generated by elements
$\V_m$ for $m\ge0$; before we can describe how $\V_m$ acts on $\F$ we
need some more notation.

An {\sf $e$--ribbon}  is a connected strip of $e$--nodes which does not
contain a $2\times2$ square; more precisely, an $e$--ribbon is a set
of $e$ nodes $R=\{(a_1,b_1),\dots,(a_e,b_e)\}$ such that
$(a_{i+1},b_{i+1})$ is either $(a_i+1,b_i)$ or $(a_i,b_i-1)$, for
$i=1,\dots,e-1$. The {\sf head} of $R$ is the node $\head(R)=(a_1,b_1)$
and $\spin_e(R)=\#\set{1\le i<e|a_{i+1}=a_i+1}$ is the {\sf $e$--spin}
of $R$.

If $\lambda$ and $\nu$ are partitions then we write
$\lambda\ribbon{m:e}\nu$ if $[\lambda]\ss[\nu]$ and
$[\nu]\setminus[\lambda]$ is a disjoint union of $m$ $e$--ribbons such
that the head of each ribbon is either in the first row of $\lambda$
or is of the form $(i,j)$ where $(i-1,j)\in[\lambda]$. Lascoux,
Leclerc and Thibon (see \cite[\S4.1]{LT:Schur2}), call $\nu/\lambda$
an $e$--ribbon tableau of weight $(m)$ and they note that there is a
unique way of writing $[\nu]\setminus[\lambda]$ as a disjoint union of
ribbons; we will see this below when we reinterpret ribbons in terms
of abacuses. Finally, if~$\lambda\ribbon{m:e}\nu$ then 
$\spin_e(\nu/\lambda)$, the $e$--spin of $\nu/\lambda$, is the sum of
the $e$--spins of the ribbons in $[\nu]\setminus[\lambda]$.

For example, if $\lambda=(3)$ and $e=2$ then the partitions
$\nu$ with $\lambda\ribbon{2:2}\nu$ are
$$\psset{unit=3mm}
  \psline(0,2)(3,2)(3,3)(0,3)(0,2)
  \psline(1,2)(1,3)\psline(2,2)(2,3)
  \psline[linecolor=gray](3,2)(7,2)(7,3)(3,3)
  \psline[linecolor=gray](5,2)(5,3)
\hspace*{21mm}\qquad\qquad
  \psline(0,2)(3,2)(3,3)(0,3)(0,2)
  \psline(1,2)(1,3)\psline(2,2)(2,3)
  \psline[linecolor=gray](3,2)(5,2)(5,3)(3,3)
  \psline[linecolor=gray](0,2)(0,1)(2,1)(2,2)
\hspace*{15mm}\qquad\qquad
  \psline(0,2)(3,2)(3,3)(0,3)(0,2)
  \psline(1,2)(1,3)\psline(2,2)(2,3)
  \psline[linecolor=gray](0,2)(0,0)(2,0)(2,2)
  \psline[linecolor=gray](1,2)(1,0)
\hspace*{9mm}\vrule height 12mm width 0pt
$$
with spins $0$, $0$ and $2$ respectively.

The algebra $\Hm$ is the subalgebra of $\Hei$ generated by elements
$\V_m$ for $m\ge1$. For each $m$, $\V_m$ acts on the Fock space as the
$\C[v,v^{-1}]$--linear map determined by
$$\V_m\lambda=\sum_{\lambda\sribbon{m:e}\nu}
              (-v)^{-\spin_e(\nu/\lambda)}\nu$$
for all partitions $\lambda$. Observe that $\F_{>k}$ is a
$\Hm$--module; hence, there is a well--defined action of $\V_m$
on the quotient space $\F_k$. 

Similarly, there is an action of the negative Heisenberg algebra
$\Hmp$ on the Fock space $\F^+$ and this induces an action on
$\F^+_k$. We denote the generators of $\Hmp$ by $\V^+_m$
for $m\ge1$.

\begin{Lemma}
\label{commuting}
Suppose that $\lambda$ and $\nu$ are partitions of $n$ of
length at most $k$.
\begin{enumerate}
\item If $\lambda\ribbon{m:e}\nu$ then $\lambda$ and $\mu$ have 
the same $e$--core.
\item We have $\lambda\ribbon{m:e}\nu$ if and only if 
$\lambda^+\ribbon{m:e+1}\mu^+$; moreover, if $\lambda\ribbon{m:e}\nu$
then $\spin_e(\nu/\lambda)=\spin_{e+1}(\nu^+/\lambda^+)$.
\end{enumerate}
\end{Lemma}

\begin{proof}
The Lemma will follow once we reinterpret the condition
$\lambda\ribbon{m:e}\nu$ in terms of abacuses. Suppose that
$\lambda\ribbon{m:e}\nu$. Then $[\nu]\setminus[\lambda]$ is a disjoint
union of $e$--ribbons. Extend the partial order $\succ$ on the set of
nodes to a total order by defining $(a,b)\succ(c,d)$ if either $c>a$
or $c=a$ and $b>d$. Totally order the ribbons $R_1,\dots,R_m$ 
in~$[\nu]\setminus[\lambda]$ so that $i>j$ whenever
$\head(R_i)\succ\head(R_j)$. Then the condition that the head of $R_i$
is of the form $(a,b)$ with either $a=1$ or $(a-1,b)\in[\lambda]$ is
equivalent to saying that $[\nu]\setminus(R_1\cup\dots\cup R_i)$ is
the diagram of a partition for $i=1,\dots,m$. Hence, it is enough to
treat the case $m=1$. So let $R=R_1$ where $[\nu]=[\lambda]\cup R$. 

Now the ribbon $R$ is a rim hook and it is well--known that removing a
rim hook of length $e$ from $\nu$ is the same as moving a bead $\beta$
on an $e$--abacus for $\nu$ to the (empty) bead position on the same
runner which is in the preceding row. Further, by definition,
$\spin_e(\nu/\lambda)$ is the leg length of $R$ minus one and, in
terms of the $e$--abacus, the leg length of $R$ is equal to the number
of beads on the abacus which are between the old and new positions
of~$\beta$.  Similarly, the condition $\lambda^+\ribbon{m:e+1}\mu^+$
depends  only on the $(e+1)$--abacuses of $\nu^+$ and $\lambda^+$. As
the $e$ and $(e+1)$ abacuses differ only by the insertion of an empty
runner, all of the assertions of the Lemma now follow.
\end{proof}

\begin{Corollary}
\label{commuting2}
Suppose that $m\ge1$. Then the following diagram commutes.
$$\begin{array}{c}\\[-6pt]
\psmatrix[colsep=1cm,rowsep=1cm]
  \F_k & \F_k \\
  \F^+_k     & \F^+_k
  \psset{nodesep=3pt,arrows=->}
  \everypsbox{\scriptstyle}
  \ncline{1,1}{1,2}^{\V_m}
  \ncline{2,1}{2,2}_{\V^+_m}
  \ncline{1,2}{2,2}\trput{\Theta}
  \ncline{1,1}{2,1}\tlput{\Theta}
\endpsmatrix\\[5pt]
\end{array}$$
\end{Corollary}

\begin{proof}
As with Lemma~\ref{commuting} it suffices to check the result for a
partition $\lambda$ of length at most $k$.
By the definitions and the previous Lemma,
\begin{align*}
\Theta(\V_m\lambda)
  &=\sum_{\lambda\sribbon{m:e}\nu}(-v)^{-\spin_e(\nu/\lambda)}
        \Theta(\nu)\\
  &=\sum_{\lambda^+\sribbon{m:e+1}\nu^+}(-v)^{-\spin_{e+1}
                    (\nu^+/\lambda^+)}\nu^+\\
  &=\V^+_m\lambda^+.
\end{align*}
Therefore, $\V^+_m\(\Theta(\lambda)\)=\Theta\(\V_m \lambda\)$
and we're done.
\end{proof}

Let $\mu$ be a partition. As in the last section let $\tilde B_\mu$
and $\tilde B^+_\mu$ denote the image of $B_\mu\in\F$ and
$B^+_\mu\in\F^+$, respectively,  in $\F_k$ and $\F^+_k$. Then a basis of
$\F_k$ is given by the $\tilde B^\mu$ as $\mu$ runs over all
partitions of length at most $k$ and similarly for $\F^+_k$.

By Proposition~\ref{theta} we know that $\tilde
B^+_{\mu^+}=\Theta(B_\mu)$ whenever $\mu$ is an $e$--regular partition
with $\len(\mu)\le k$.  We can now drop the requirement that $\mu$
should be $e$--regular.

\begin{Proposition}
Suppose that $\mu$ is a partition with $\len(\mu)\le k$.
Then $\tilde B^+_{\mu^+}=\Theta(\tilde B_\mu)$. 
\end{Proposition}

\begin{proof}
As before, the element $\Theta(\tilde B_\mu)$ is equal to
$\mu^+$ plus a $q\Z[q]$--linear combination of less dominant terms, so
it is enough to show that $\Theta(\tilde B_\mu)$ is invariant under
the bar involution since $\tilde B^+_{\mu^+}$ is the unique bar
invariant element in $\F^+_k$ of this form.

By \cite[Prop.~7.6]{LT:Schur2} the bar involution on $\F$ is
completely determined by the conditions $\bar\0=\0$, 
$\bar{F_i^{(m)}x}=F_i^{(m)}\bar x$ and $\bar{\V_m x}=\V_m\bar x$, 
for all $x\in\F$, $0\le i<e$ and $m\ge1$. For each partition 
$\tau=(\tau_1,\dots,\tau_s)$ let
$\V_\tau=\V_{\tau_1}\dots\V_{\tau_s}$. Then
$$\F=\bigoplus_{\tau}\Ume\V_\tau\0$$ 
is a decomposition of $\F$ into a direct sum of irreducible
$\Ue$--modules (where~$\tau$ runs over all partitions of all integers);
see \cite[\S7.5]{LT:Schur2}. Moreover, the modules
$\Ume\V_\tau\0$, for different $\tau$, are all isomorphic as
$\Ume$--modules. Therefore, there exists a bar invariant
basis of $\F$ of the form $A_{\sigma\tau}=F_\sigma\V_\tau\0$ where
$F_\sigma\in\UmeA$, $\sigma$ is an $e$--regular partition and $\tau$
is an arbitrary partition (the elements~$F_\sigma$ are defined in
terms of $e$--residue sequences as in the proof of Proposition~\ref{theta}).
Consequently, we can write 
$\tilde B_\mu=\sum_{\sigma,\tau}a_{\sigma\tau}(v)A_{\sigma\tau}$ for
some bar invariant Laurent polynomials
$a_{\sigma\tau}(v)\in\Z[v,v^{-1}]$.  Now,
$A^+_{\sigma\tau}=\Theta(A_{\sigma\tau})
                 =\Theta(F_\sigma\V_\tau\0)
                 =\aF_\sigma\V_\tau^+\0$ 
by Lemma~\ref{commuting1} and Corollary~\ref{commuting2}; therefore,
$A^+_{\sigma\tau}$ is a bar invariant element of~$\F^+_k$. Hence,
$\Theta(\tilde B_\mu)
         =\sum_{\sigma,\tau}a_{\sigma\tau}(v)A^+_{\sigma\tau}$
is a bar invariant element of~$\F^+_k$, as we needed to show.
\end{proof}

\begin{Remark}
For each composition $\tau=(\tau_1,\dots,\tau_s)$ Leclerc and
Thibon~\cite{LT:Schur2} show that the action of the element
$\V_\tau=\V_{\tau_1}\dots\V_{\tau_s}$ upon~$\F$ is described by
certain polynomials associated with the ribbon tableaux of weight
$\tau$. This is completely analogous to the way in which the action of
$F_{r_s}^{(a_s)}\dots F_{r_1}^{(a_1)}$ on $\F$ can be described in
terms of polynomials associated with standard tableaux.
\end{Remark}

Comparing the coefficient of $\lambda^+$ in $\tilde B^+_{\mu^+}$ and
$\Theta(\tilde B_\mu)$ we obtain the following generalization of our
main theorem.

\begin{Theorem}
Suppose that $\lambda$ and $\mu$ are partitions of length at most
$k$. Then 
$$b_{\lambda\mu}(v)=b^+_{\lambda^+\mu^+}(v).$$
\label{polys}\end{Theorem}

In order to compute the polynomials $b_{\lambda\mu}(v)$ when $\mu$ is
not $e$--regular it is necessary to first invert the ``$R$--matrix''
which describes the bar involution on the basis of~$\F$ given by the
set of partitions. Computationally, this is quite time consuming; in
comparison the regular case is much easier, being essentially Gaussian
elimination. Corollary~\ref{polys} therefore gives a slightly more
efficient way of computing the polynomials
$b_{\lambda\mu}(v)=b^+_{\lambda^+\mu^+}(v)$ since $\mu^+$ is an
$(e+1)$--regular partition by Lemma~\ref{bookkeeping}(i).

Recall that $W^\lambda_q$ and $L^\mu_q$ are the Weyl modules and
simple modules, respectively, for the $q$--Schur algebra
$\Sc_{\C,q}(n,n)$.  Varagnolo and Vasserot~\cite{VV} have shown that
$[W^\lambda_q:L^\mu_q]=b_{\lambda\mu}(1)$; similarly,
$[W^{\lambda^+}_{q'}:L^{\mu^+}_{q'}]=b^+_{\lambda^+\mu^+}(1)$. 

\begin{Corollary}
Suppose that $\lambda$ and $\mu$ are partitions of length at
most~$k$.  Then 
$$[W^\lambda_q:L^\mu_q]=[W^{\lambda^+}_{q'}:L^{\mu^+}_{q'}]
                      =[S^{\lambda^+}_{q'}:D^{\mu^+}_{q'}].$$
\end{Corollary}

\begin{proof}
That
$[W^\lambda_q:L^\mu_q]=[W^{\lambda^+}_{q'}:L^{\mu^+}_{q'}]$ follows
directly from Theorem~\ref{polys} and the remarks above.
For the second claim, observe that the partition $\mu^+$ is
$(e+1)$--regular by Lemma~\ref{bookkeeping}(i); therefore, 
$D^{\mu^+}_{q'}\ne0$. Consequently, 
$[W^{\lambda^+}_{q'}:L^{\mu^+}_{q'}]
                      =[S^{\lambda^+}_{q'}:D^{\mu^+}_{q'}]$
by Schur--Weyl reciprocity.
\end{proof}

Standard Schur functor arguments yield the corresponding statements 
for the $q$--Schur algebras $\Sc_{\C,q}(n,r)$ and $\Sc_{\C,q'}(n,r)$; we leave the
details to the reader.

The last result is interesting because it shows that every
decomposition number for $\Sc_{\C,q}(n,n)$ is also a decomposition
number for some Hecke algebra $\H_{\C,q'}(\Sym_m)$. In contrast
Erdmann~\cite{Erd} has shown that in a given characteristic knowing
all decomposition numbers for the classical Schur algebras
(i.e.~$q=1$) is equivalent to knowing all decomposition numbers for
the symmetric groups (for all $n$ and for a fixed $p$).
Leclerc~\cite{Lec:DecCan} has proved the analogous result relating the
decomposition numbers of the $q$--Schur algebras $\Sc_{\C,q}(n,n)$ and
the Hecke algebras $\H_{\C,q}(\Sym_n)$ (for all $n$ and for a fixed
$q$). No such result is known in the cross characteristic case (i.e.
positive characteristic with $q\ne1$).

Finally, we remark that the full action of $\Ue$ on $\F_k$ and $\Uep$
on $\F^+_k$ are compatible via the map $\Theta$ (in order to make the
statement for $\Upe$ precise~$\F_k$ must be considered as a submodule
of $\F$, rather than a quotient). This can be proved using similar
arguments or, more simply, by invoking \cite[Prop.~7.9]{LT:Schur2}
which says that the actions of $\Ume$ and $\Upe$ on~$\F$ are adjoint
with respect to a natural scalar product on $\F$. The same argument
also proves the corresponding statements for the Heisenberg
algebras~$\Hei$ and $\mathcal H_{e+1}$.

\section{Examples}

Below we give part of the ``crystallised'' decomposition matrices
$\(b_{\lambda\mu}(v)\)$ of the $q$--Schur algebras $\Sc_{\C,q}(n)$
for $(e,n)=(2,6), (3,11), (4,16)$ and $(5,21)$.  By our results,
taking $k=4$ and $\alpha=2$, these submatrices are all the same. 
$$\begin{array}{*5l*{9}{c}}
\cdots&e=5     &e=4    &e=3    &e=2\\\cmidrule[1pt]{1-5}
      &18,3    &14,2   &10,1   &6      &1    &&&&&&&&\\
      &17,4    &13,3   &9,2    &5,1    &v    &1&&&&&&&\\
\cdots&13,8    &11,5   &7,4    &4,2    &.    &v    &1&  &&&&&\\
      &13,4^2  &10,3^2 &7,2^2  &4,1^2  &v    &v^{2}&v&1  &&&&&\\
      &12,9    &9,7    &6,5    &3^2    &.    &.    &v&. &1&&&&\\
      &12,4^2,1&9,3^2,1&6,2^2,1&3,1^3  &v^{2}&v    &v^{2}&v&v&1&&&\\
\cdots&8^2,5   &6^2,4  &4^2,3  &2^3    &.    &.    &v^{2}&v&v&.&1&&\\
      &8^2,4,1 &6^2,3,1&4^2,2,1&2^2,1^2&.    &v^{2}&v^{3}&v^{2}&v^{2}&v&v&1\\
\end{array}$$
Setting $v=1$ we recover the decomposition matrices of the
corresponding $q$--Schur algebras.  Note that when $e>2$ all of the
rows are indexed by partitions which are $e$--regular; therefore, in
these cases the matrix above is a submatrix of the decomposition
matrix for the corresponding Iwahori--Hecke algebra
$\H_{\C,q}(\Sym_n)$; in particular, setting $v=1$ we recover one of
the decomposition matrices from the introduction.
 
To emphasize the dependence on $k$ we again start with $(e,n)=(2,6)$
but now take $k=6$ (and $\alpha=2$); this yields the following
matrices.  {\small $$\begin{array}{*4l*{11}{c}} e=5     &e=4    &e=3
&e=2\\\cmidrule[1pt]{1-4}\\[-11pt] 21,6,3^2&   16,4,2^2&   11,2,1^2&
6      &1&&&&&&&&&&\\ 20,7,3^2&   15,5,2^2&   10,3,1^2&  5,1
&v&1&&&&&&&&&\\ 16,11,3^2&  12,8,2^2&    8,5,1^2&  4,2
&.&v&1&&&&&&&&\\ 16,7^2,3&   12,5^2,2&    8,3^2,1&  4,1^2
&v&v^{2}&v&1&&&&&&&\\ 15,12,3^2&  11,9,2^2&    7,6,1^2&  3,3
&.&.&v&.&1&&&&&&\\ 15,7^2,4&   11,5^2,3&    7,3^2,2&  3,1^3
&v^{2}&v&v^{2}&v&v&1&&&&&\\ 11^2,8,3&    8^2,6,2&    5^2,4,1&  2^3
&.&.&v^{2}&v&v&.&1&&&&\\ 11^2,7,4&
8^2,5,3&5^2,3,2&2^2,1^2&.&v^{2}&v^{3}&v^{2}&v^{2}&v&v&1&&&\\
11,7^2,4^2&8,5^2,3^2&
5,3^2,2^2&2,1^4&v^{2}&v^{3}&.&v&.&v^{2}&.&v&1&&\\
10,7^2,4^2,1&7,5^2,3^2,1&4,3^2,2^2,1&
1^6&v^{3}&.&.&v^{2}&.&.&.&.&v&1\\ \end{array}$$ }%

A consequence of Lemma~\ref{bookkeeping} is that all of these matrices
are the rows of decomposition matrices of the corresponding blocks
which are indexed by partitions with at most $k$ rows (where the
partitions indexing the rows are ordered in a way compatible with
dominance).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section*{Acknowledgement}
We would like to thank Fred Goodman for some useful discussions.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\let\em\it
\begin{thebibliography}{10}

\bibitem{Ariki:can}
{\sc S.~Ariki}, {\em On the decomposition numbers of the {Hecke} algebra of
  {$G(m,1,n)$}}, J.~Math. Kyoto Univ., {\bf 36} (1996), 789--808.

\bibitem{DJ:reps}
{\sc R.~Dipper and G.~James}, {\em Representations of {Hecke} algebras of
  general linear groups}, Proc. L.M.S. (3), {\bf 52} (1986), 20--52.

\bibitem{DJ:Schur}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, {\em The $q$--{Schur}
  algebra}, Proc. L.M.S. (3), {\bf 59} (1989), 23--50.

\bibitem{DJ:qWeyl}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, 
{\em $q$--{Tensor} space and $q$--{Weyl} modules}, Trans. A.M.S., 
{\bf 327} (1991), 251--282.

\bibitem{Erd}
{\sc K.~Erdmann}, {\em Decomposition numbers for symmetric groups and
  composition factors of {Weyl} modules}, J.~Algebra, {\bf 180} (1996),
  316--320.

\bibitem{GW}
{\sc F.~M. Goodman and H.~Wenzl}, {\em Crystal bases of quantum affine algebras
  and {Kazhdan--Lusztig} polynomials}, Int. Math. Res. Notes, {\bf 5} (1999),
  251--275.

\bibitem{James}
{\sc G.~D. James}, {\em The representation theory of the symmetric groups},
  SLN, {\bf 682}, Springer--Verlag, New York, 1978.

\bibitem{James:YoungD}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, {\em Some combinatorial
  results involving {Young} diagrams}, Proc. Camb. Phil. Soc., {\bf 83} (1978),
  1--10.

\bibitem{JM:Schaper}
{\sc G.~D. James and A.~Mathas}, {\em A $q$--analogue of the {Jantzen--Schaper}
  theorem}, Proc. L.M.S. (3), {\bf 74} (1997), 241--274.

\bibitem{LLT}
{\sc A.~Lascoux, B.~Leclerc, and J.-Y. Thibon}, {\em Hecke algebras at roots of
  unity and crystal bases of quantum affine algebras}, Comm. Math. Phys., {\bf
  181} (1996), 205--263.

\bibitem{Lec:DecCan}
{\sc B.~Leclerc}, {\em Decomposition numbers and canonical bases}, Algebr.
  Represent. Theory, {\bf 3} (2000), 277--287.

\bibitem{LT:Schur2}
{\sc B.~Leclerc and J.-Y. Thibon}, {\em {Littlewood--Richardson} coefficients
  and {Kazhdan--Lusztig} polynomials}, in Combinatorial methods in
  representation theory, M.~Kashiwara et~al., eds., Adv. Pure Math., {\bf 28},
  2000, 155--220.

\bibitem{LM:p=5}
{\sc F.~L\"ubeck and J.~M\"uller}, private communication.

\bibitem{LN:p=5}
{\sc F.~L\"ubeck and M.~Neunh{\"o}ffer}, {\em Enumerating large orbits
and direct condensation}, Experiment. Math., {\bf 10} (2001),
197--205.

\bibitem{MartinRussell}
{\sc S.~Martin and L.~Russell}, {\em Defect $3$ blocks of symmetric group
  algebras}, J.~Algebra, {\bf 213} (1999), 304--339.

\bibitem{M:ULect}
{\sc A.~Mathas}, {\em {Hecke algebras and Schur algebras of the symmetric
  group}}, Univ. Lecture Notes, {\bf 15}, A.M.S., 1999.

\bibitem{VV}
{\sc M.~Varagnolo and E.~Vasserot}, {\em On the decomposition matrices of the
  quantized {Schur} algebra}, Duke J.~Math., {\bf 100} (1999), 267--297.

\end{thebibliography}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\end{document}

pst-coil.tex
%% BEGIN pst-coil.tex
%%
%% Coils and zigzags with PSTricks 97.
%% See the PSTricks User's Guide for documentation.
%% For use with the PostScript header file `pst-coil.pro'.
%%
\def\fileversion{97 patch 2}
\def\filedate{1998/03/19}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% 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.
%%
\message{ v\fileversion, \filedate}
\csname PSTcoilsLoaded\endcsname
\let\PSTcoilsLoaded\endinput
\ifx\PSTricksLoaded\endinput\else
\def\next{\input pstricks.tex}\expandafter\next
\fi
\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11
\pstheader{pst-coil.pro}
\edef\pst@theheaders{\pst@theheaders,pst-coil.pro}
\def\pst@coildict{tx@CoilDict begin }
\def\psset@coilwidth#1{\pst@getlength{#1}\psk@coilwidth}
\psset@coilwidth{1cm}
\def\psset@coilheight#1{\pst@checknum{#1}\pscoilheight}
\psset@coilheight{1}
\def\psset@coilarmA#1{\pst@getlength{#1}\psk@coilarmA}
\def\psset@coilarmB#1{\pst@getlength{#1}\psk@coilarmB}
\def\psset@coilarm#1{%
\pst@getlength{#1}\psk@coilarmA
\let\psk@coilarmB\psk@coilarmA}
\psset@coilarm{.5cm}
\def\psset@coilaspect#1{\pst@getangle{#1}\psk@coilaspect}
\psset@coilaspect{45}
\def\psset@coilinc#1{\pst@getangle{#1}\psk@coilinc}
\psset@coilinc{10}
\def\pscoil{\def\pst@par{}\pst@object{pscoil}}
\def\pscoil@i{\pst@getarrows\pscoil@ii}
\def\pscoil@ii(#1){%
\@ifnextchar(%
{\pscoil@iii{1}(#1)}%
{\pscoil@iii{\z@}(0,0)(#1)}}
\def\pscoil@iii#1(#2)(#3){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#3}\pst@tempb
\pst@optcp{#1}\pst@tempa
\addto@pscode{%
\pst@tempa \pst@tempb
\psk@coilwidth \pscoilheight
\psk@coilarmA \psk@coilarmB
\psk@coilaspect \psk@coilinc
\pst@coildict \tx@Coil end}%
\showpointsfalse
\end@OpenObj}
\def\tx@CoilLoop{CoilLoop }
\def\tx@Coil{Coil }
\def\psCoil{\def\pst@par{}\pst@object{psCoil}}
\def\psCoil@i#1#2{%
\begin@AltOpenObj
\showpointsfalse
\pst@getangle{#1}\pst@tempa
\pst@getangle{#2}\pst@tempb
\addto@pscode{%
\pst@tempa
\pst@tempb
\psk@coilwidth
\pscoilheight
\psk@coilaspect
\psk@coilinc
\pst@coildict \tx@AltCoil end
\@nameuse{psls@\pslinestyle}}%
\end@OpenObj}
\def\tx@AltCoil{AltCoil }
\def\pszigzag{\def\pst@par{}\pst@object{pszigzag}}
\def\pszigzag@i{\pst@getarrows\pszigzag@ii}
\def\pszigzag@ii(#1){%
\@ifnextchar({\pszigzag@iii{1}(#1)}{\pszigzag@iii{\z@}(0,0)(#1)}}
\def\pszigzag@iii#1(#2)(#3){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#3}\pst@tempb
\pst@optcp{#1}\pst@tempa
\addto@pscode{%
\pst@tempa
\pst@tempb
\pscoilheight
\psk@coilwidth
\psk@coilarmA
\psk@coilarmB
\pst@coildict \tx@ZigZag end
\psline@iii
\tx@Line}%
\end@OpenObj}
\def\tx@ZigZag{ZigZag }
\def\nccoil{\pst@object{nccoil}}
\def\nccoil@i{\check@arrow{\nccoil@ii}}
\def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 2
4 2 roll
% DG/SR modification end
\psk@coilwidth \pscoilheight
\psk@coilarmA \psk@coilarmB
\psk@coilaspect \psk@coilinc
\pst@coildict \tx@Coil end
end}}
\def\pccoil{\def\pst@par{}\pst@object{pccoil}}
\def\pccoil@i{\pc@object\nccoil@ii}
\def\nczigzag{\pst@object{nczigzag}}
\def\nczigzag@i{\check@arrow{\nczigzag@ii}}
\def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 2
4 2 roll
% DG/SR modification end
\pscoilheight
\psk@coilwidth
\psk@coilarmA
\psk@coilarmB
\pst@coildict \tx@ZigZag end
\psline@iii
\tx@Line
end}}
\def\pczigzag{\def\pst@par{}\pst@object{pczigzag}}
\def\pczigzag@i{\pc@object\nczigzag@ii}
\catcode`\@=\TheAtCode\relax
\endinput
%%
%% END pst-coil.tex

pst-node.tex
%% BEGIN pst-node.tex
%%
%% Nodes with PSTricks 97.
%% See the betadoc documentation for usage. 
%% This uses the header file `pst-node.pro'.
%%
\def\fileversion{97 patch 11}
\def\filedate{2000/11/09}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% 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.
%%
\message{ v\fileversion, \filedate}
\csname PSTnodesLoaded\endcsname
\let\PSTnodesLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi\relax
\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11
\pstheader{pst-node.pro}
\def\pst@nodedict{tx@NodeDict begin }
\def\pst@zapspace#1 #2{%
#1%
\ifx#2\@empty\else\expandafter\pst@zapspace\fi
#2}
\def\pst@getnode#1#2{%
\pst@expandafter\pst@@getnode{#1},,\@nil#2}
\def\pst@@getnode#1,#2,#3\@nil#4{%
\ifx\@empty#3\@empty
\edef#4{/N@\pst@zapspace#1 \@empty\space}%
\else
\pst@cntg=#1\relax
\pst@cnth=#2\relax
\edef#4{/N@M-\ifnum\psmatrixcnt=\z@ 1\else\the\psmatrixcnt\fi
-\the\pst@cntg-\the\pst@cnth\space}%
\fi}
\def\tx@NewNode{NewNode }
\def\pst@newnode#1#2#3#4{%
% DG/SR modification begin - Nov.  9, 2000 - Patch 11
\pst@killglue
% DG/SR modification end
\leavevmode
\pst@getnode{#1}\pst@thenode
\pst@Verb{%
\pst@nodedict
{#3}
\ifx\psk@name\relax false \else \psk@name true \fi
\pst@thenode
#2
{#4}
\tx@NewNode
end}%
\global\let\psk@name\relax
\pstree@nodehook
\global\let\pstree@nodehook\relax}
\let\pstree@nodehook\relax
\newif\ifnodealign
\def\psset@nodealign#1{\@nameuse{nodealign#1}}
\psset@nodealign{false}
\def\pst@nodealign{%
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg2
\lower\pst@dimg}
\def\tx@InitPnode{InitPnode }
\def\pnode{\@ifnextchar({\pnode@}{\pnode@(0,0)}}
\def\pnode@(#1)#2{%
\pst@@getcoor{#1}%
\pst@newnode{#2}{10}{\pst@coor}{\tx@InitPnode}%
\ignorespaces}
\def\tx@InitCnode{InitCnode }
\def\cnode{\pst@object{cnode}}
\def\cnode@i{\@ifnextchar({\cnode@ii}{\cnode@ii(0,0)}}
\def\cnode@ii(#1)#2#3{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\pst@dimg=\psk@dimen\pslinewidth
\advance\pst@dimc-\pst@dimg
\advance\pst@dimc.5\pslinewidth
\ifnodealign
\kern\pst@dimc
\vrule width\z@ height \pst@dimc depth \pst@dimc
\fi
\pscircle@do(#1){#2}%
\pst@newnode{#3}{11}{\pst@coor \pst@number\pst@dimc}{\tx@InitCnode}%
% DG/SR modification begin - Jul. 30, 1997 - Patch 2
%\ifnodealign \kern\pst@dimc\egroup \fi}%
\ifnodealign\kern\pst@dimc\fi}%
% DG/SR modification end
\ignorespaces}
\def\Cnode{\pst@object{Cnode}}
\def\Cnode@i{\@ifnextchar({\Cnode@ii}{\Cnode@ii(0,0)}}
\def\Cnode@ii(#1)#2{\cnode@ii(#1){\psk@radius}{#2}}%
\def\cnodeput{\pst@object{cnodeput}}
\def\cnodeput@i{\@ifnextchar({\cnodeput@iii}{\cnodeput@ii}}
\def\cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cnodeput@iii}{\cnodeput@iii(\z@,\z@)}}
\def\cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiusfalse
\def\pst@nodehook{\cnodeput@iv{#2}}%
\pst@makebox{\cput@v{#1}}}
\def\cnodeput@iv#1{%
\pst@newnode{#1}{11}{\pscirclebox@iv \pst@number\pslinewidth add}%
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\Cnodeput{\pst@object{Cnodeput}}
\def\Cnodeput@i{\@ifnextchar({\Cnodeput@iii}{\Cnodeput@ii}}
\def\Cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\Cnodeput@iii}{\Cnodeput@iii(\z@,\z@)}}
\def\Cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiustrue
\def\pst@nodehook{\Cnodeput@iv{#2}}%
\pst@makebox{\cput@iv{#1}}}
\def\Cnodeput@iv#1{%
\pst@newnode{#1}{11}{%
\pst@number{\wd\pst@hbox} 2 div \pst@number\pst@dima % x y
\pst@number\pst@dimb \pst@number\pslinewidth \psk@dimen .5 sub mul sub }% r
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\circlenode{\pst@object{circlenode}}
\def\circlenode@i#1{\pst@makebox{\circlenode@ii{#1}}}
\def\circlenode@ii#1{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\cnodeput@iv{#1}%
\pscirclebox@iii
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\Circlenode{\pst@object{Circlenode}}
\def\Circlenode@i#1{\pst@makebox{\Circlenode@ii{#1}}}
\def\Circlenode@ii#1{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\Cnodeput@iv{#1}%
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\tx@GetRnodePos{GetRnodePos }
\def\tx@InitRnode{InitRnode }
\def\rnode{\@ifnextchar[{\rnode@i}{\def\pst@par{}\rnode@ii}}
\def\rnode@i[#1]{\def\pst@par{ref=#1}\rnode@ii}
\def\rnode@ii#1{\pst@makebox{\rnode@iii\rnode@iv{#1}}}
\def\rnode@iii#1#2{%
% DG modification begin - Jan. 1997
\leavevmode
% DG modification end
\begingroup
% DG/SR modification begin - Apr. 28, 1998 - Patch 6
\pst@useboxpar
% DG/SR modification end
#1%
\if@star\pst@starbox\fi
\ifnodealign\lower\pst@dimb\fi
\hbox{%
\pst@newnode{#2}{16}{%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\pst@number{\wd\pst@hbox}%
\pst@number\pst@dima
\pst@number\pst@dimb}%
{\tx@InitRnode}%
\box\pst@hbox}%
\endgroup}
\def\rnode@iv{%
\pst@dima=\psk@xref\wd\pst@hbox
\ifx\psk@yref\relax
\pst@dimb=\z@
\else
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\pst@dimb=\psk@yref\pst@dimb
\advance\pst@dimb-\dp\pst@hbox
\fi}
\def\psset@href#1{\pst@checknum{#1}\psk@href}
\psset@href{0}
\def\psset@vref#1{\def\psk@vref{#1}}
\psset@vref{.7ex}
\def\Rnode{\pst@object{Rnode}}
\def\Rnode@i#1{\pst@makebox{\rnode@iii\Rnode@ii{#1}}}
\def\Rnode@ii{%
% DG modification begin - Jan. 1997
%   - \begingroup removed  as it seems to doesn't work any more
%   - \Rnode doesn't process the optional parameter changes
%\begingroup
\use@par
% DG modification end
\pst@dima=\psk@href\wd\pst@hbox
\advance\pst@dima\wd\pst@hbox
\divide\pst@dima 2
\pssetlength\pst@dimb{\psk@vref}}
\def\tx@DiaNodePos{DiaNodePos }
\def\dianode{\pst@object{dianode}}
\def\dianode@i#1{\pst@makebox{\dianode@ii{#1}}}
\def\dianode@ii#1{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc 2 mul def
/h \pst@number\pst@dimd 2 mul def
/NodePos { \tx@DiaNodePos } def}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psdiabox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\tx@TriNodePos{TriNodePos }
\def\tx@InitTriNode{InitTriNode }
\def\trinode{\pst@object{trinode}}
\def\trinode@i#1{\pst@makebox{\trinode@ii{#1}}}
\def\trinode@ii#1{%
\begingroup
\pst@useboxpar
\pstribox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
\pst@number\pst@dimc
\pst@number\pst@dimd
\ifodd\psk@trimode
exch
\pst@number\pst@dima
\else
\pst@number\pst@dimb
\fi
\psk@trimode
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\tx@InitTriNode}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\pstribox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@tempa\fi
\box\pst@hbox
\endgroup}
\def\tx@OvalNodePos{OvalNodePos }
\def\ovalnode{\pst@object{ovalnode}}
\def\ovalnode@i#1{\pst@makebox{\ovalnode@ii{#1}}}
\def\ovalnode@ii#1{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc def
/h \pst@number\pst@dimd def
/NodePos { \tx@OvalNodePos } def}%
\unhbox\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psovalbox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\dotnode{\pst@object{dotnode}}
\def\dotnode@i{\@ifnextchar({\dotnode@ii}{\dotnode@ii(\z@,\z@)}}
\def\dotnode@ii(#1)#2{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pst@getdotsize
\pstree@nodehook
\ifnodealign
\pst@dima=\pst@dimg
\kern\pst@dima
\vrule width\z@ height \pst@dimh depth \pst@dimh
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/w \pst@number\pst@dimg def
/h \pst@number\pst@dimh def
/NodePos { \tx@OvalNodePos } def}%
\psdot@ii(#1)%
\ifnodealign\kern\pst@dima\fi}%
\ignorespaces}
\def\psset@framesize#1{\pst@expandafter\psset@@framesize{#1} \@nil}
\def\psset@@framesize#1 #2\@nil{%
\pssetlength\pst@dimg{#1}%
\divide\pst@dimg2
\edef\psk@framewidth{\pst@number\pst@dimg}%
\ifx\@empty#2\@empty
\let\psk@frameheight\psk@framewidth
\else
\pssetlength\pst@dimg{#2}%
\divide\pst@dimg2
\edef\psk@frameheight{\pst@number\pst@dimg}%
\fi}
\psset@framesize{10pt}
\def\fnode{\pst@object{fnode}}
\def\fnode@i{\@ifnextchar({\fnode@ii}{\fnode@ii(\z@,\z@)}}
\def\fnode@ii(#1)#2{%
\leavevmode
\pst@killglue
\hbox{%
\use@par
\begin@ClosedObj
\ifnodealign
\kern\psk@framewidth\p@
\vrule width\z@ height \psk@frameheight\p@ depth \psk@frameheight\p@
\edef\pst@coor{0 0 }%
\else
\pst@@getcoor{#1}%
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/d \psk@dimen .5 sub CLW mul neg def
/r \psk@framewidth d add def
/l r neg def
/u \psk@frameheight d add def
/d u neg def
/NodePos { \tx@GetRnodePos } def}%
\addto@pscode{%
/x2 \psk@framewidth CLW \psk@dimen mul sub def
/y2 \psk@frameheight CLW \psk@dimen mul sub def
\pst@coor 2 copy
y2 sub /y1 ED
x2 sub /x1 ED
y2 add /y2 ED
x2 add /x2 ED
\psk@cornersize
1 index 0 eq { pop pop \tx@Rect } { \tx@OvalFrame } ifelse}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\ifnodealign\kern\psk@framewidth\p@\fi}%
\ignorespaces}
\def\psset@nodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{0 }}
\def\psset@nodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{0 }}
\def\psset@nodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{0 }%
\def\psk@nodeseptypeB{0 }}
\psset@nodesep{0pt}
\def\psset@XnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{1 }}
\def\psset@XnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{1 }}
\def\psset@Xnodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{1 }%
\def\psk@nodeseptypeB{1 }}
\def\psset@YnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{2 }}
\def\psset@YnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{2 }}
\def\psset@Ynodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{2 }%
\def\psk@nodeseptypeB{2 }}
\def\psset@armA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{0 }}
\def\psset@armB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{0 }}
\def\psset@arm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{0 }%
\def\psk@armtypeB{0 }}
\psset@arm{10pt}
\def\psset@XarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{1 }}
\def\psset@XarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{1 }}
\def\psset@Xarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{1 }%
\def\psk@armtypeB{1 }}
\def\psset@YarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{2 }}
\def\psset@YarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{2 }}
\def\psset@Yarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{2 }%
\def\psk@armtypeB{2 }}
\def\psset@offsetA#1{\pst@getlength{#1}\psk@offsetA}
\def\psset@offsetB#1{\pst@getlength{#1}\psk@offsetB}
\def\psset@offset#1{\psset@offsetA{#1}\let\psk@offsetB\psk@offsetA}
\psset@offset{0pt}
\def\psset@angleA#1{\pst@getangle{#1}\psk@angleA}
\def\psset@angleB#1{\pst@getangle{#1}\psk@angleB}%
\def\psset@angle#1{%
\pst@getangle{#1}\psk@angleA
\let\psk@angleB\psk@angleA}
\psset@angle{0}
\def\psset@arcangleA#1{\pst@getangle{#1}\psk@arcangleA}
\def\psset@arcangleB#1{\pst@getangle{#1}\psk@arcangleB}%
\def\psset@arcangle#1{%
\pst@getangle{#1}\psk@arcangleA
\let\psk@arcangleB\psk@arcangleA}
\psset@arcangle{8}
\def\psset@ncurvA#1{\pst@checknum{#1}\psk@ncurvA}
\def\psset@ncurvB#1{\pst@checknum{#1}\psk@ncurvB}%
\def\psset@ncurv#1{\psset@ncurvA{#1}\let\psk@ncurvB\psk@ncurvA}
\psset@ncurv{.67}
\def\tx@GetCenter{GetCenter }
\def\tx@XYPos{XYPos }
\def\tx@GetEdge{GetEdge }
\def\tx@AddOffset{AddOffset }
\def\tx@GetEdgeA{GetEdgeA }
\def\tx@GetEdgeB{GetEdgeB }
\def\tx@GetArmA{GetArmA }
\def\tx@GetArmB{GetArmB }
\def\check@arrow#1#2{%
\check@@arrow#2-\@nil
\if@pst
\addto@par{arrows=#2}%
\def\next{#1}%
\else
\def\next{#1{#2}}%
\fi
\next}
\def\check@@arrow#1-#2\@nil{%
\ifx\@nil#2\@nil\@pstfalse\else\@psttrue\fi}
\def\tx@InitNC{InitNC }
\def\nc@object#1#2#3#4#5{%
\csname begin@#1Obj\endcsname
\showpointsfalse
\pst@getnode{#2}\pst@tempa
\pst@getnode{#3}\pst@tempb
\gdef\npos@default{#4 }%
\addto@pscode{%
/NCLW CLW def
\pst@nodedict
\psk@offsetA
\psk@offsetB neg
\psk@nodesepA
\psk@nodesepB
\psk@nodeseptypeA
\psk@nodeseptypeB
\pst@tempa
\pst@tempb
\tx@InitNC { #5 } if
end}%
\def\use@pscode{%
\pst@Verb{gsave \tx@STV newpath \pst@code\space grestore}%
\gdef\pst@code{}}%
\csname end@#1Obj\endcsname
\pst@shortput}
\def\npos@default{.5 }
\def\pc@object#1{%
\@ifnextchar({\pc@@object#1}{\pst@getarrows{\pc@@object#1}}}
\def\pc@@object#1(#2)(#3){%
\pnode(#2){@@A}\pnode(#3){@@B}%
#1{@@A}{@@B}}
\def\tx@LPutLine{LPutLine }
\def\tx@LPutLines{LPutLines }
\def\tx@BezierMidpoint{BezierMidpoint }
\def\tx@HPosBegin{HPosBegin }
\def\tx@HPosEnd{HPosEnd }
\def\tx@HPutLine{HPutLine }
\def\tx@HPutLines{HPutLines }
\def\tx@VPosBegin{VPosBegin }
\def\tx@VPosEnd{VPosEnd }
\def\tx@VPutLine{VPutLine }
\def\tx@VPutLines{VPutLines }
\def\tx@HPutCurve{HPutCurve }
\def\tx@NCCoor{NCCoor }
\def\tx@NCLine{NCLine }
\def\ncline{\pst@object{ncline}}
\def\ncline@i{\check@arrow{\ncline@ii}}
\def\ncline@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{\tx@NCLine}}
\def\pcline{\pst@object{pcline}}
\def\pcline@i{\pc@object\ncline@ii}
\def\ncLine{\pst@object{ncLine}}
\def\ncLine@i{\check@arrow{\ncLine@ii}}
\def\ncLine@ii#1#2{\nc@object{Open}{#1}{#2}{.5}%
% DG/SR modification begin - Apr. 14, 1999 - Patch 9
%{\tx@NCLine /LPutPos { xB xA yB yA \tx@LPutLine } def}}
{\tx@NCLine /LPutPos { xB yB xA yA \tx@LPutLine } def}}
% DG/SR modification end
\def\tx@NCLines{NCLines }
\def\nclines{\pst@object{nclines}}
\def\nclines@i{\check@arrow\nclines@ii}
\def\nclines@ii#1#2{%
\begingroup
\use@par
\def\pst@aftercoors{\nclines@iii{#1}{#2}}%
\def\pst@coors{}%
\pst@@getcoors}
\def\nclines@iii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
mark \pst@coors \tx@NCLines}%
\endgroup
\ignorespaces}
\def\tx@NCCurve{NCCurve }
\def\nccurve{\pst@object{nccurve}}
\def\nccurve@i{\check@arrow{\nccurve@ii}}
\def\nccurve@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
/AngleA \psk@angleA\space def /AngleB \psk@angleB\space def
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pccurve{\pst@object{pccurve}}
\def\pccurve@i{\pc@object\nccurve@ii}
\def\ncarc{\pst@object{ncarc}}
\def\ncarc@i{\check@arrow{\ncarc@ii}}
\def\ncarc@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
yB yA sub xB xA sub \tx@Atan dup
\psk@arcangleA\space add /AngleA ED
\psk@arcangleB\space sub 180 add /AngleB ED
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pcarc{\pst@object{pcarc}}
\def\pcarc@i{\pc@object\ncarc@ii}
\def\tx@NCAngles{NCAngles }
\def\ncangles{\pst@object{ncangles}}
\def\ncangles@i{\check@arrow{\ncangles@ii}}
\def\ncangles@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngles}}
\def\ncangles@iii{%
tx@Dict begin \psline@iii pop end
/AngleA \psk@angleA def
/AngleB \psk@angleB def
/ArmA \psk@armA def
/ArmB \psk@armB def
/ArmTypeA \psk@armtypeA def
/ArmTypeB \psk@armtypeB def }
\def\pcangles{\pst@object{pcangles}}
\def\pcangles@i{\pc@object\ncangles@ii}
\def\tx@NCAngle{NCAngle }
\def\ncangle{\pst@object{ncangle}}
\def\ncangle@i{\check@arrow{\ncangle@ii}}
\def\ncangle@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngle}}
\def\pcangle{\pst@object{pcangle}}
\def\pcangle@i{\pc@object\ncangle@ii}
\def\tx@NCBar{NCBar }
\def\ncbar{\pst@object{ncbar}}
\def\ncbar@i{\check@arrow{\ncbar@ii}}
\def\ncbar@ii#1#2{\nc@object{Open}{#1}{#2}{1.5}{%
\ncangles@iii /AngleB \psk@angleA def \tx@NCBar}}
\def\pcbar{\pst@object{pcbar}}
\def\pcbar@i{\pc@object\ncbar@ii}
\def\tx@NCDiag{NCDiag }
\def\ncdiag{\pst@object{ncdiag}}
\def\ncdiag@i{\check@arrow{\ncdiag@ii}}
\def\ncdiag@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCDiag}}
\def\pcdiag{\pst@object{pcdiag}}
\def\pcdiag@i{\pc@object\ncdiag@ii}
\def\tx@NCDiagg{NCDiagg }
\def\ncdiagg{\pst@object{ncdiagg}}
\def\ncdiagg@i{\check@arrow{\ncdiagg@ii}}
\def\ncdiagg@ii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{\ncangles@iii \tx@NCDiagg}}
\def\pcdiagg{\pst@object{pcdiagg}}
\def\pcdiagg@i{\pc@object\ncdiagg@ii}
\def\tx@NCLoop{NCLoop }
\def\psset@loopsize#1{\pst@getlength{#1}\psk@loopsize}
\psset@loopsize{1cm}
\def\ncloop{\pst@object{ncloop}}
\def\ncloop@i{\check@arrow{\ncloop@ii}}
\def\ncloop@ii#1#2{%
\nc@object{Open}{#1}{#2}{2.5}%
{\ncangles@iii /loopsize \psk@loopsize def \tx@NCLoop}}
\def\pcloop{\pst@object{pcloop}}
\def\pcloop@i{\pc@object\ncloop@ii}
\def\tx@NCCircle{NCCircle }
\def\nccircle{\pst@object{nccircle}}
\def\nccircle@i{\check@arrow{\nccircle@ii}}
\def\nccircle@ii#1#2{%
\pssetlength\pst@dima{#2}%
\nc@object{Open}{#1}{#1}{.5}{%
/AngleA \psk@angleA def
/r \pst@number\pst@dima def
\tx@NCCircle \psarc@v end}}
\def\tx@NCBox{NCBox }
\def\ncbox{\pst@object{ncbox}}
\def\ncbox@i{\check@arrow{\ncbox@ii}}
\def\ncbox@ii#1#2{%
\def\pst@linetype{2}%
\nc@object{Closed}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
\psk@boxheight \psk@boxdepth
\tx@NCBox}}
\def\pcbox{\pst@object{pcbox}}
\def\pcbox@i{\pc@object\ncbox@ii}
\def\tx@NCArcBox{NCArcBox }
\def\psset@boxheight#1{\pst@getlength{#1}\psk@boxheight}
\def\psset@boxdepth#1{\pst@getlength{#1}\psk@boxdepth}
\def\psset@boxsize#1{%
\psset@boxheight{#1}%
\let\psk@boxdepth\psk@boxheight}
\psset@boxsize{.4cm}
\def\ncarcbox{\pst@object{ncarcbox}}
\def\ncarcbox@i{\check@arrow{\ncarcbox@ii}}
\def\ncarcbox@ii#1#2{%
\def\pst@linetype{1}%
\nc@object{Closed}{#1}{#2}{.5}{%
\psk@arcangleA \psk@boxheight \psk@boxdepth \pst@number\pslinearc
\tx@NCArcBox}}
\def\pcarcbox{\pst@object{pcarcbox}}
\def\pcarcbox@i{\pc@object\ncarcbox@ii}
\def\tx@Tfan{Tfan }
% Changed according pst-beta.bug December 3, 1993
% nrot=:<angle> does not work when : is active.
\begingroup
\catcode`\:=13
\gdef\pst@activerot{\def:{\string:}}
\endgroup
\def\psset@nrot#1{%
\begingroup
\pst@activerot
\pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil
\global\let\pst@tempg\psk@rot
\endgroup
\let\psk@nrot\pst@tempg}
\def\psset@@nrot:#1\@nil{%
\psset@@rot#1\@nil
\edef\psk@rot{NAngle \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\psset@nrot{0}
\def\tx@LPutCoor{LPutCoor }
\def\tx@LPut{LPut }
\def\psset@npos#1{%
\def\pst@tempa{#1}%
\ifx\pst@tempa\@empty
\def\psk@npos{\npos@default}%
\else
\pst@checknum{#1}\psk@npos
\fi}
\psset@npos{}
\def\ncput{\pst@object{ncput}}
\def\ncput@i{\pst@killglue\pst@makebox{\ncput@ii}}
\def\ncput@ii{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\ncput@iii{%
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@npos def
\tx@LPut
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}}
\def\naput{\pst@object{naput}}
\def\naput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 add}}}
\def\naput@ii#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\def\psk@refangle{#1 }%
\let\psk@rot\psk@nrot
\uput@vii
{exch pop add a \tx@PtoC h1 add exch w1 add exch }%
{tx@Dict /NCLW known { NCLW add } if }%
\ncput@iii
\endgroup
\pst@shortput}
\def\nbput{\pst@object{nbput}}
\def\nbput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 sub}}}
\def\psset@tpos#1{%
\pst@checknum{#1}\psk@tpos
\ifdim\psk@tpos \p@<\z@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\else
\ifdim\psk@tpos \p@>\p@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\fi
\fi}
\psset@tpos{.5}
\def\tvput{\pst@object{tvput}}
\def\tvput@i{\pst@makebox{\psput@tput{H}{1}}}
\def\tlput{\pst@object{tlput}}
\def\tlput@i{\pst@makebox{\psput@tput{H}{true}}}
\def\trput{\pst@object{trput}}
\def\trput@i{\pst@makebox{\psput@tput{H}{false}}}
\def\thput{\pst@object{thput}}
\def\thput@i{\pst@makebox{\psput@tput{V}{1}}}
\def\taput{\pst@object{taput}}
\def\taput@i{\pst@makebox{\psput@tput{V}{true}}}
\def\tbput{\pst@object{tbput}}
\def\tbput@i{\pst@makebox{\psput@tput{V}{false}}}
\def\tx@HPutAdjust{HPutAdjust }
\def\tx@VPutAdjust{VPutAdjust }
\def\psput@tput#1#2{%
\begingroup
\use@par
\pst@tputmakesmall
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@tpos \pst@tposflip def
tx@NodeDict /HPutPos known
{ #1PutPos }
{ CP /Y ED /X ED /NAngle 0 def /NCLW 0 def }
ifelse
/Sin NAngle sin def
/Cos NAngle cos def
/s \pst@number\pslabelsep NCLW add def
/l \pst@number\pst@dima def
/r \pst@number\pst@dimb def
/h \pst@number\pst@dimc def
/d \pst@number\pst@dimd def
% DG/SR modification begin - Sep. 26, 1997 - Patch 4
%\ifnum1=0#2\else
\ifnum1=0#2 \else
% DG/SR modification end
/flag #2 def
\csname tx@#1PutAdjust\endcsname
\fi
\tx@LPutCoor
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}%
\endgroup
\pst@shortput}
\def\pst@tposflip{}
\def\pst@tputmakesmall{%
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimg=\psk@href\pst@dimg
\pst@dimb\pst@dima
\advance\pst@dima\pst@dimg % leftsize
\advance\pst@dimb-\pst@dimg % rightsize
\pst@dimd=\psk@vref\relax
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc-\pst@dimd % height
\advance\pst@dimd\dp\pst@hbox % depth
\setbox\pst@hbox=\hbox to\z@{%
\kern-\pst@dima\vbox to\z@{\vss\box\pst@hbox\vskip-\pst@dimd}\hss}}
\def\MakeShortNab#1#2{%
  \def\pst@shortput@nab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\naput
    \else
      \ifx#2\next
        \let\pst@tempg\nbput
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortNab{^}{_}
\def\MakeShortTablr#1#2#3#4{%
  \def\pst@shortput@tablr{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\taput
    \else
      \ifx#2\next
        \let\pst@tempg\tbput
      \else
        \ifx#3\next
          \let\pst@tempg\tlput
        \else
          \ifx#4\next
            \let\pst@tempg\trput
          \else
            \ifx\@sptoken\next
              \let\pst@tempg\pst@shortput
            \fi
          \fi
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTablr{^}{_}{<}{>}
\def\MakeShortTab#1#2{%
  \def\pst@shortput@tab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \def\pst@tempg{%
        \@nameuse{%
          t\ifodd\psk@treemode\ifpstreeflip b\else a\fi
          \else\ifpstreeflip r\else l\fi\fi put}}%
    \else
      \ifx#2\next
        \def\pst@tempg{%
          \@nameuse{%
            t\ifodd\psk@treemode\ifpstreeflip a\else b\fi
            \else\ifpstreeflip l\else r\fi\fi put}}%
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTab{^}{_}
\def\psset@shortput#1{%
\def\pst@tempg{#1}%
\ifx\pst@tempg\@none
\let\pst@shortput\ignorespaces
\else
\@ifundefined{pst@shortput@#1}%
{\@pstrickserr{Bad short put: `#1'}\@ehpa}%
{\edef\pst@shortput{\noexpand\afterassignment\expandafter\noexpand
\csname pst@shortput@#1\endcsname\noexpand\let\noexpand\next}}%
\fi}
\psset@shortput{none}
\def\lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\lput@i}{\lput@ii}}}
\def\lput@i[#1]{\addto@par{ref=#1}\lput@ii}
\def\lput@ii{\@ifnextchar({\lput@iv}{\lput@iii}}
\def\lput@iii#1{\addto@par{nrot=#1}\@ifnextchar({\lput@iv}{\ncput@i}}
\def\lput@iv(#1){\addto@par{npos=#1}\ncput@i}
\def\mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\mput@i}{\ncput@i}}}
\def\mput@i[#1]{\addto@par{ref=#1}\ncput@i}
\def\Lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Lput@ii}{\Lput@i}}}
\def\Lput@i#1{\addto@par{labelsep=#1}\Lput@ii}
\def\Lput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Lput@iv}{\Lput@iii}}
\def\Lput@iii#1{\addto@par{nrot={#1}}\@ifnextchar({\Lput@iv}{\Lput@v}}
\def\Lput@iv(#1){\addto@par{npos=#1}\Lput@v}
\def\Lput@v{\pst@killglue\pst@makebox{\Lput@vi}}
\def\Lput@vi{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\Mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Mput@ii}{\Mput@i}}}
\def\Mput@i#1{\addto@par{labelsep=#1}\Mput@ii}
\def\Mput@ii[#1]{\addto@par{ref={#1}}\Lput@v}
\def\aput@#1{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\aput@i#1}{\aput@ii#1}}}
\def\aput@i#1[#2]{\addto@par{labelsep=#2}\aput@ii#1}
\def\aput@ii#1{\@ifnextchar({\aput@iv#1}{\aput@iii#1}}
\def\aput@iii#1#2{\addto@par{nrot=#2}\@ifnextchar({\aput@iv#1}{#1}}
\def\aput@iv#1(#2){\addto@par{npos=#2}#1}
\def\aput{\aput@\naput@i}
\def\bput{\aput@\nbput@i}
\def\Aput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Aput@i}{\naput@i}}}
\def\Aput@i[#1]{\addto@par{labelsep=#1}\naput@i}
\def\Bput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Bput@i}{\nbput@i}}}
\def\Bput@i[#1]{\addto@par{labelsep=#1}\nbput@i}
\def\node@coor#1;#2\@nil{%
\pst@getnode{#1}\pst@tempg
\edef\pst@coor{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \pst@tempg load \tx@GetCenter }
{ 0 0 }
ifelse
end }}
\def\Node@coor[#1]#2;#3\@nil{%
\begingroup
\psset{#1}%
\@ifnextchar\bgroup{\Node@@@coor}{\Node@@coor}#2\@nil
\endgroup
\let\pst@coor\pst@tempg}
\def\Node@@coor#1\@nil{%
\pst@getnode{#1}\pst@tempg
\xdef\pst@tempg{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \psk@nodesepA \psk@angleA
\pst@tempg load \psk@nodeseptypeA \tx@GetEdge
\psk@offsetA \psk@angleA \tx@AddOffset
\pst@tempg load \tx@GetCenter
3 -1 roll add 3 1 roll add exch }
{ CP }
ifelse
end }}%
\def\Node@@@coor#1{%
\pst@@getcoor{#1}%
\def\psk@angleA{%
\pst@tempg load \tx@GetCenter \pst@coor
3 -1 roll sub 3 1 roll sub neg \tx@Atan}%
\Node@@coor}
\def\nput{\pst@object{nput}}
\def\nput@i#1#2{\pst@killglue\pst@makebox{\nput@ii{#1}{#2}}}
\def\nput@ii#1#2{%
\begingroup
\use@par
\psset@refangle{#1}%
\let\psk@angleA\psk@refangle
\edef\psk@nodesepA{\pst@number\pslabelsep}%
\def\psk@nodeseptypeA{0 }%
\pslabelsep\z@
\uput@vi
\Node@@coor#2\@nil
\let\pst@coor\pst@tempg
\leavevmode
\psput@special\pst@hbox
\endgroup
\ignorespaces}
\newcount\psrow
\newcount\pscol
\newcount\psmatrixcnt
\newskip\psrowsep
\newskip\pscolsep
\def\psset@colsep#1{\pssetlength\pscolsep{#1}}
\def\psset@rowsep#1{\pssetlength\psrowsep{#1}}
\psset@colsep{1.5cm}
\psset@rowsep{1.5cm}
\newif\ifpsmatrix
% DG/SR modification begin - Nov. 27, 1998 - Patch 8
%\let\mscount\@multicnt
\ifx\mscount\@undefined\let\mscount\@multicnt\fi
% DG/SR modification end
\def\psmatrix{%
  \begingroup
{\ifnum0=`}\fi % Don't want to expand any &.
\@ifnextchar[{\psmatrix@i}{\ifnum0=`{\fi}{}\psmatrix@ii}}
\def\psmatrix@i[#1]{%
\ifnum0=`{\fi}{}%
\psset{#1}%
\psmatrix@ii}
\def\psmatrix@ii{%
\KillGlue
\edef\psm@beginmath{%
\ifmmode$\m@th\ifinner\textstyle\else\displaystyle\fi\fi}%
\edef\psm@endmath{\ifmmode$\fi}%
\let\\\psm@cr
\advance\psmatrixcnt 1
\def\psm@thenode{M-\the\psmatrixcnt-\the\psrow-\the\pscol}%
\tabskip\z@
\psrow1
\pscol\z@
\psset@shortput{tablr}%
\leavevmode
\vbox\bgroup\halign\bgroup&%
\begingroup
\global\advance\pscol 1
\csname psrowhook\romannumeral\psrow\endcsname
\csname pscolhook\romannumeral\pscol\endcsname
\psm@beginnode##\psm@endnode\endgroup
\cr}
\def\endpsmatrix{%
\crcr\egroup\unskip\egroup
\endgroup}
\def\psm@cr{{\ifnum0=`}\fi\@ifnextchar[{\psm@@cr}{\psm@@@cr{}}}
\def\psm@@cr[#1]{\psm@@@cr{\vskip#1\relax}}
\def\psm@@@cr#1{%
\ifnum0=`{\fi}{}\cr
\noalign{%
\global\advance\psrow 1
\global\pscol\z@
\vskip\psrowsep
#1}}
\def\psm@beginnode{%
\@ifnextchar\psm@endnode
{\let\psm@endnode@i\relax\setbox\pst@hbox=\hbox{}}%
{\pst@object{psm@beginnode}}}
\def\psm@beginnode@i{%
\setbox\pst@hbox=\hbox\bgroup
\psm@beginmath
\begingroup
\ignorespaces}
\def\psm@endnode@i{%
\unskip
\endgroup
\psm@endmath
\egroup
\use@par
\@psttrue}
\def\psm@endnode{%
\@pstfalse
\psm@endnode@i
\ifnum\pscol>1 \hskip\pscolsep \fi
\psk@mnodesize
\hfil
\nodealigntrue
\if@pst
\csname mnode@\psk@mnode\endcsname
\else
\csname mnode@\psk@emnode\endcsname
\fi
\psk@mcol
\psk@@mnodesize}
% DG/SR modification begin - Sep. 3, 1999 - Patch 10 - From Michael Sharpe
%\def\psspan#1{\mscount#1\relax\loop\ifnum\mscount>\@ne \sp@n\repeat}
\def\psspan#1{\global\mscount#1\relax\pstloop\ifnum\mscount>\@ne\sp@n\repeat}
\def\pstloop#1\repeat{\gdef\pstiterate{#1\relax\expandafter\pstiterate\fi}%
\pstiterate
\let\pstiterate\relax}
% DG/SR modification end
\def\psset@name#1{\pst@getnode{#1}\psk@name}
\let\psk@name\relax
\def\psset@mcol#1{%
\ifx r#1\relax
\let\psk@mcol\relax
\else
\ifx l#1\relax
\let\psk@mcol\hfill
\else
\let\psk@mcol\hfil
\fi
\fi}
\psset@mcol{c}
\def\psset@mnodesize#1{%
\pssetlength\pst@dimg{#1}%
\ifdim\pst@dimg<\z@
\let\psk@mnodesize\relax
\let\psk@@mnodesize\relax
\else
\edef\psk@mnodesize{\noexpand\hbox to\number\pst@dimg sp\noexpand\bgroup}%
\let\psk@@mnodesize\egroup
\fi}
\psset@mnodesize{-1pt}
\def\mnode@R{\rnode@iii\Rnode@ii{\psm@thenode}}
\def\mnode@r{\rnode@iii\rnode@iv{\psm@thenode}}
\def\mnode@oval{\ovalnode@ii{\psm@thenode}}
\def\mnode@tri{\trinode@ii{\psm@thenode}}
\def\mnode@dia{\dianode@ii{\psm@thenode}}
\def\mnode@C{{\nodealigntrue\cnode@ii(\z@,\z@){\psk@radius}{\psm@thenode}}}
\def\mnode@f{{\nodealigntrue\fnode@ii(\z@,\z@){\psm@thenode}}}
\def\mnode@circle{\circlenode@ii{\psm@thenode}}
\def\mnode@p{\pnode(\z@,\z@){\psm@thenode}}
% DG/SR modification begin - Jul. 22, 1997 - Patch 1
\def\mnode@dot{\dotnode@ii(\z@,\z@){\psm@thenode}}
% DG/SR modification end
\def\mnode@none{\box\pst@hbox}
\def\psset@mnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@mnode{#1}}}
\def\psset@emnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@emnode{#1}}}
\psset@mnode{R}
\psset@emnode{none}
%%%% FROM pst-coil.tex
\def\nccoil{\pst@object{nccoil}}
\def\nccoil@i{\check@arrow{\nccoil@ii}}
\def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\psk@coilwidth \pscoilheight
\psk@coilarmA \psk@coilarmB
\psk@coilaspect \psk@coilinc
\pst@coildict \tx@Coil end
end}}
\def\nczigzag{\pst@object{nczigzag}}
\def\nczigzag@i{\check@arrow{\nczigzag@ii}}
\def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\pscoilheight
\psk@coilwidth
\psk@coilarmA
\psk@coilarmB
\pst@coildict \tx@ZigZag end
\psline@iii
\tx@Line
end}}
\catcode`\@=\TheAtCode\relax
\endinput
%%
%% END pst-node.tex

pstricks.tex
%% BEGIN: pstricks.tex
%%
%% PostScript macros for Generic TeX: main input file for PSTricks 97.
%% See the PSTricks User's Guide for description.
%% This uses the header file `pstricks.pro'.
%%
\def\fileversion{97 patch 14}
\def\filedate{1999/12/23}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% 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.
%%
\csname PSTricksLoaded\endcsname
\let\PSTricksLoaded\endinput
\edef\PstAtCode{\the\catcode`\@}
\catcode`\@=11\relax
\expandafter\ifx\csname @latexerr\endcsname\relax
\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
#1\endcsname\relax#2\else#3\fi}
\def\@namedef#1{\expandafter\def\csname #1\endcsname}
\def\@nameuse#1{\csname #1\endcsname}
\def\@eha{%
Your command was ignored.^^J
Type \space I <command> <return> \space to replace
it with another command,^^J
or \space <return> \space to continue without it.}
\def\@spaces{\space\space\space\space}
\def\typeout#1{\immediate\write\@unused{#1}}
\alloc@7\write\chardef\sixt@@n\@unused
\def\@empty{}
\def\@gobble#1{}
\def\@nnil{\@nil}
\def\@ifnextchar#1#2#3{%
\let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
\def\@ifnch{%
\ifx\@tempc\@sptoken
\let\@tempd\@xifnch
\else
\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
\fi
\@tempd}
\begingroup
\def\:{\global\let\@sptoken= } \:
\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
\endgroup
\fi
\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
\def\@pstrickserr#1#2{%
\begingroup
\newlinechar`\^^J
\edef\pst@tempc{#2}%
\expandafter\errhelp\expandafter{\pst@tempc}%
\typeout{%
PSTricks error. \space See User's Guide for further information.^^J
\@spaces\@spaces\@spaces\@spaces
Type \space H <return> \space for immediate help.}%
\errmessage{#1}%
\endgroup}
\def\@ehpa{%
Your command was ignored. Default value substituted.^^J
Type \space <return> \space to procede.}
\def\@ehpb{%
Your command was ignored. Will recover best I can.^^J
Type \space <return> \space to procede.}
\def\@ehpc{%
You better fix this before proceding.^^J
See the PSTricks User's Guide or ask your system administrator for help.^^J
Type \space X <return> \space to quit.}
\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
\newdimen\pst@dima
\newdimen\pst@dimb
\newdimen\pst@dimc
\newdimen\pst@dimd
\newdimen\pst@dimg
\newdimen\pst@dimh
\newbox\pst@hbox
\newbox\pst@boxg
\newcount\pst@cnta
\newcount\pst@cntb
\newcount\pst@cntc
\newcount\pst@cntd
\newcount\pst@cntg
\newcount\pst@cnth
\newif\if@pst
\newtoks\pst@toks
\newif\if@star
\def\pst@ifstar#1{%
\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
\def\pst@expandafter#1#2{%
\def\next{#1}%
\edef\@tempa{#2}%
\ifx\@tempa\@empty
\@pstrickserr{Unexpected empty argument!}\@ehpb
\def\@tempa{\@empty}%
\fi
\expandafter\next\@tempa}
\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
\def\pst@pyth#1#2#3{%
\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
\def\pst@@pyth#1#2#3{%
\ifdim4#1>9#2%
#3=#1\advance#3 .2122#2%
\else
#3=.8384#1\advance#3 .5758#2%
\fi}
\def\pst@divide#1#2#3{%
\pst@@divide{#1}{#2}%
\pst@dimtonum\pst@dimg{#3}}
\def\pst@@divide#1#2{%
\pst@dimg=#1\relax
\pst@dimh=#2\relax
\pst@cntg=\pst@dimh
\pst@cnth=67108863
\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
\divide\pst@dimg\pst@cntg}
\def\pst@@@divide{%
\ifnum
\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
\multiply\pst@dimg\sixt@@n
\else
\divide\pst@cntg\sixt@@n
\fi}
\def\pst@configerr#1{%
\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
% % \begin{macrocode}
\def\pstVerb#1{\pst@configerr\pstVerb}
\def\pstverb#1{\pst@configerr\pstverb}
\def\pstverbscale{\pst@configerr\pstverbscale}
\def\pstrotate{\pst@configerr\pstrotate}
\def\pstheader#1{\pst@configerr\pstheader}
\def\pstdriver{\pst@configerr\pstdriver}
\@ifundefined{pstcustomize}%
{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
\input pstricks.con
\newif\ifPSTricks
\PSTrickstrue
\def\PSTricksOff{%
\def\pstheader##1{}%
\def\pstverb##1{}%
\def\pstVerb##1{}%
\PSTricksfalse}
\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
\pstheader{pstricks.pro}
\def\pst@dict{tx@Dict begin }
\def\pst@theheaders{pstricks.pro}
\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
\def\tx@Atan{Atan }
\def\tx@Div{Div }
\def\tx@NET{NET }
\def\tx@Pyth{Pyth }
\def\tx@PtoC{PtoC }
\def\tx@PathLength@{PathLength@ }
\def\tx@PathLength{PathLength }
\pst@dimg=\pstunit\relax
\ifdim\pst@dimg=1bp
\def\pst@stp{.996264 dup scale}
\else
\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
\fi
\def\tx@STP{STP }
\def\tx@STV{STV }
\def\pst@number#1{\pst@@dimtonum#1\space}
\def\pst@checknum#1#2{%
\edef\next{#1}%
\ifx\next\@empty
\let\pst@num\z@
\else
\expandafter\pst@@checknum\next..\@nil
\fi
\ifnum\pst@num=\z@
\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
\def#2{0 }%
\else
\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
\expandafter\@gobble\the\pst@cnth\space}%
\fi}
\def\pst@@checknum{%
\@ifnextchar-%
{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
{\let\pst@num\@ne\pst@@@checknum}}
\def\pst@@@checknum#1.#2.#3\@nil{%
\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
\def\pst@@@@checknum#1\relax\@nil{%
\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
\def\pst@getnumii#1 #2 #3\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph}
\def\pst@getnumiii#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi}
\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\pst@checknum{#4}\pst@tempj}
\def\pst@getdimnum#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pst@checknum{#2}\pst@tempg}
% DG/SR modification begin - Jan. 7, 1998 - Patch 9
% Missing from pstricks.bug 0.93
%\def\pst@getscale#1#2{%
%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
%\@psttrue
%\ifdim\pst@tempg\p@=\z@
%\@pstrickserr{Bad scaling argument `#1'}\@ehpa
%\def\pst@tempg{1 }%
%\@pstfalse
%\fi
%\ifdim\pst@temph\p@=\z@
%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi
%\def\pst@temph{1 }%
%\fi
%\edef#2{\pst@tempg\space \pst@temph\space scale }%
%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@
%\def#2{}%
%\fi\fi}
\def\pst@getscale#1#2{%
\edef\pst@tempg{#1}%
\ifx\pst@tempg\@none
\def#2{}%
\else
\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
\ifdim\pst@tempg\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\ifdim\pst@temph\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\edef#2{\pst@tempg\space \pst@temph\space scale }%
\fi
\fi
\fi}
% DG/SR modification end
\def\pst@getint#1#2{%
\pst@cntg=#1\relax
\edef#2{\the\pst@cntg\space}}
\begingroup
\catcode`\{=12
\catcode`\}=12
\catcode`\[=1
\catcode`\]=2
\gdef\pslbrace[{ ]
\gdef\psrbrace[} ]
\endgroup
\def\@newcolor#1#2{%
\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
\expandafter\edef\csname color@#1\endcsname{#2}%
\ignorespaces}
\def\pst@color#1{%
\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
\def\pst@currentcolor{0 setgray}
\def\altcolormode{%
\def\pst@color##1{%
\pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
\def\pst@endcolor{\pstVerb{\pst@grestore}}}
\def\pst@grestore{%
currentpoint
matrix currentmatrix
currentfont
grestore
setfont
setmatrix
moveto}
\def\pst@usecolor#1{\csname color@#1\endcsname\space}
\def\newgray#1#2{%
\pst@checknum{#2}\pst@tempg
\@newcolor{#1}{\pst@tempg setgray}}
\def\newrgbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
\def\newhsbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
\def\newcmykcolor#1#2{%
\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
\newgray{black}{0}
\newgray{darkgray}{.25}
\newgray{gray}{.5}
\newgray{lightgray}{.75}
\newgray{white}{1}
\newrgbcolor{red}{1 0 0}
\newrgbcolor{green}{0 1 0}
\newrgbcolor{blue}{0 0 1}
\newrgbcolor{yellow}{1 1 0}
\newrgbcolor{cyan}{0 1 1}
\newrgbcolor{magenta}{1 0 1}
\def\psset#1{\@psset#1,\@nil\ignorespaces}
\def\@psset#1,{%
\@@psset#1==\@nil
\@ifnextchar\@nil{\@gobble}{\@psset}}
\def\@@psset#1=#2=#3\@nil{%
\@ifundefined{psset@#1}%
{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
{\@nameuse{psset@#1}{#2}}}%
\def\psset@style#1{%
\@ifundefined{pscs@#1}%
{\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
{\@nameuse{pscs@#1}}}
\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
\def\@none{none}
\def\pst@getcolor#1#2{%
\@ifundefined{color@#1}%
{\@pstrickserr{Color `#1' not defined}\@eha}%
{\edef#2{#1}}}
\newdimen\psunit \psunit 1cm
\newdimen\psxunit \psxunit 1cm
\newdimen\psyunit \psyunit 1cm
\let\psrunit\psunit
\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
\def\pssetlength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psaddtolength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
\advance#1 #2\@psunit}
\def\pssetxlength#1#2{%
\let\@psunit\psxunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\pssetylength#1#2{%
\let\@psunit\psyunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psset@unit#1{%
\pssetlength\psunit{#1}%
\psxunit=\psunit
\psyunit=\psunit}
\def\psset@runit#1{\pssetlength\psrunit{#1}}
\def\psset@xunit#1{\pssetxlength\psxunit{#1}}
\def\psset@yunit#1{\pssetylength\psyunit{#1}}
\def\pst@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\pst@number\pst@dimg}}
\def\pst@@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\number\pst@dimg sp}}
\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
\def\pst@coor{0 0 }
\def\pst@getcoors#1#2{%
\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
\def\pst@coors{}%
\pst@@getcoors}
\def\pst@@getcoors(#1){%
\pst@@getcoor{#1}%
\edef\pst@coors{\pst@coor\pst@coors}%
\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
\def\pst@angle{0 }
\def\cartesian@coor#1,#2,#3\@nil{%
\pssetxlength\pst@dimg{#1}%
\pssetylength\pst@dimh{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\NormalCoor{%
\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
\def\pst@@getangle##1{%
\pst@checknum{##1}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
\NormalCoor
\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
\def\@degrees[#1]{%
\pst@checknum{#1}\pst@tempg
\edef\pst@angleunit{360 \pst@tempg div mul }%
\ignorespaces}
\def\radians{\def\pst@angleunit{57.2956 mul }}
\def\pst@angleunit{}
\def\SpecialCoor{%
\def\pst@@getcoor##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@coor\pst@tempg||\@nil}%
\def\pst@@getangle##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@angle\pst@tempg\@empty)\@nil}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
\begingroup
\catcode`\|=13
\catcode`\;=13
\catcode`\!=13
\gdef\pst@activecoor{%
\def|{\string|}%
\def;{\string;}%
\def!{\string!}}
\endgroup
\def\special@coor#1|#2|#3\@nil{%
\ifx#3|\relax
\mixed@coor{#1}{#2}%
\else
\special@@coor#1;;\@nil
\fi}
\def\special@@coor#1{%
\ifcat#1a\relax
\def\next{\node@coor#1}%
\else
\ifx#1[\relax
\def\next{\Node@coor[}%
\else
\ifx#1!\relax
\def\next{\raw@coor}%
\else
\def\next{\special@@@coor#1}%
\fi
\fi
\fi
\next}
\def\special@@@coor#1;#2;#3\@nil{%
\ifx#3;\relax
\polar@coor{#1}{#2}%
\else
\cartesian@coor#1,\relax,\@nil
\fi}
\def\mixed@coor#1#2{%
\begingroup
% DG/SR modification begin - Oct. 27, 1997 - Patch 6
%\specialcoor@ii#1;;\@nil
%\let\pst@tempa\pst@coor
%\specialcoor@ii#2;;\@nil
\special@@coor#1;;\@nil
\let\pst@tempa\pst@coor
\special@@coor#2;;\@nil
% DG/SR modification end
\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
\endgroup
\let\pst@coor\pst@tempg}
\def\polar@coor#1#2{%
\pssetlength\pst@dimg{#1}%
\pst@@getangle{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
\def\raw@coor#1;#2\@nil{%
\edef\pst@coor{%
#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
\def\node@coor#1\@nil{%
\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
\def\pst@coor{0 0 }}
\def\Node@coor{\node@coor}
\def\special@angle#1#2)#3\@nil{%
\ifx!#1\relax
\edef\pst@angle{#2 \pst@angleunit}%
\else
\ifx(#1\relax
\pst@@getcoor{#2}%
\edef\pst@angle{\pst@coor exch \tx@Atan}%
\else
\pst@checknum{#1#2}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}%
\fi
\fi}
\def\Cartesian{%
\def\cartesian@coor##1,##2,##3\@nil{%
\pssetxlength\pst@dimg{##1}%
\pssetylength\pst@dimh{##2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
\@ifnextchar({\Cartesian@}{}}
\def\Cartesian@(#1,#2){%
\pssetxlength\psxunit{#1}%
\pssetylength\psyunit{#2}%
\ignorespaces}
\def\Polar{%
\def\psput@cartesian{\psput@special}%
\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
\def\psset@origin#1{%
\pst@@getcoor{#1}%
\edef\psk@origin{\pst@coor \tx@NET }}
\def\psk@origin{}
\newif\ifswapaxes
\def\psset@swapaxes#1{%
\@nameuse{@pst#1}%
\if@pst
\def\psk@swapaxes{-90 rotate -1 1 scale }%
\else
\def\psk@swapaxes{}%
\fi}
\psset@swapaxes{false}
\newif\ifshowpoints
\def\psset@showpoints#1{\@nameuse{showpoints#1}}
\psset@showpoints{false}
\let\pst@setrepeatarrowsflag\relax
\def\psset@border#1{%
\pst@getlength{#1}\psk@border
\pst@setrepeatarrowsflag}
\psset@border{0pt}
\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
\psset@bordercolor{white}
\newif\ifpsdoubleline
\def\psset@doubleline#1{%
\@nameuse{psdoubleline#1}%
\pst@setrepeatarrowsflag}
\psset@doubleline{false}
\def\psset@doublesep#1{\def\psdoublesep{#1}}
\psset@doublesep{1.25\pslinewidth}
\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
\psset@doublecolor{white}
\newif\ifpsshadow
\def\psset@shadow#1{%
\@nameuse{psshadow#1}%
\pst@setrepeatarrowsflag}
\psset@shadow{false}
\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
\psset@shadowsize{3pt}
\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
\psset@shadowangle{-45}
\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
\psset@shadowcolor{darkgray}
\def\pst@repeatarrowsflag{\z@}
\def\pst@setrepeatarrowsflag{%
\edef\pst@repeatarrowsflag{%
\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
\ifpsshadow 1\else \z@\fi\fi\fi}}
\def\psls@none{}
\newdimen\pslinewidth
\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
\psset@linewidth{.8pt}
\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
\psset@linecolor{black}
\def\psls@solid{0 setlinecap stroke }
\def\pst@missing{%
\z@
\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
\def\psset@dash#1{%
\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil
\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\psset@@dash#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pssetlength\pst@dimh{#2}}
\psset@dash{5pt 3pt}
\newif\ifpsdashadjust
\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
\psset@dashadjust{true}
\def\psls@dashed{%
\ifpsdashadjust
\psk@dash \pst@linetype\space \tx@DashLine
\else
[ \psk@dash ] 0 setdash stroke
\fi}
\def\tx@DashLine{DashLine }
\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
\psset@dotsep{3pt}
\def\psls@dotted{%
\ifpsdashadjust
\psk@dotsep \pst@linetype\space \tx@DotLine
\else
[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
\fi}
\def\tx@DotLine{DotLine }
\def\psset@linestyle#1{%
\@ifundefined{psls@#1}%
{\@pstrickserr{Line style `#1' not defined}\@eha}%
{\edef\pslinestyle{#1}}}
\psset@linestyle{solid}
\def\psfs@none{}
\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
\psset@fillcolor{white}
\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}}
\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
\psset@hatchwidth{.8pt}
\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
\psset@hatchsep{4pt}
\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
\psset@hatchcolor{black}
\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
\psset@hatchangle{45}
\def\pst@linefill{%
\psk@hatchangle rotate
\psk@hatchwidth SLW
\pst@usecolor\pshatchcolor
\psk@hatchsep \tx@LineFill}
\def\psfs@vlines{\pst@fill\pst@linefill}
\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}}
\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
\def\tx@LineFill{LineFill }
\def\psset@fillstyle#1{%
\edef\pst@tempg{#1}\def\pst@temph{none}%
\ifx\pst@tempg\pst@temph
\let\psk@fillstyle\relax
\else
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
\fi}
\def\psset@addfillstyle#1{%
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{%
\expandafter\noexpand\psk@fillstyle
\expandafter\noexpand\csname psfs@#1\endcsname}}}
\psset@fillstyle{none}
\def\psset@arrows#1{%
\begingroup
\pst@activearrows
\xdef\pst@tempg{#1}%
\endgroup
\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
\if@pst\else
\@pstrickserr{Bad arrows specification: #1}\@ehpa
\fi}
\def\psset@@arrows#1-#2\@empty#3\@nil{%
\@psttrue
\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
\expandafter\next\pst@arrowtable,#1-#1,\@nil
\@ifundefined{psas@\pst@tempg}%
{\@pstfalse\def\psk@arrowA{}}%
{\let\psk@arrowA\pst@tempg}%
\@ifundefined{psas@#2}%
{\@pstfalse\def\psk@arrowB{}}%
{\def\psk@arrowB{#2}}}
\def\psk@arrowA{}
\def\psk@arrowB{}
\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
\begingroup
\catcode`\<=13
\catcode`\>=13
\catcode`\|=13
\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
\endgroup
\def\tx@BeginArrow{BeginArrow }
\def\tx@EndArrow{EndArrow }
\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
\psset@arrowscale{1}
\def\psset@arrowsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
\psset@arrowsize{1.5pt 2}
\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
\psset@arrowlength{1.4}
\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
\psset@arrowinset{.4}
\def\tx@Arrow{Arrow }
\@namedef{psas@>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
0 h T
gsave
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP
grestore
CP newpath moveto
2 copy
L
stroke
moveto}
\@namedef{psas@<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@<<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP newpath moveto 0 a neg L stroke 0 h neg T
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\def\psset@tbarsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
\psset@tbarsize{2pt 5}
\def\tx@Tbar{Tbar }
\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
\@namedef{psas@>|}{%
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>|*}{%
0 CLW -2 div T
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
\psset@bracketlength{.15}
\def\tx@Bracket{Bracket }
\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
\psset@rbracketlength{.15}
\def\tx@RoundBracket{RoundBracket }
\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
\def\psas@c{1 \psas@@c}
\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
\def\psas@C{2 \psas@@c}
\def\psas@@c{%
setlinecap
0 0 moveto
0 CLW 2 div L
stroke
0 0 moveto}
\def\psas@{}
\psset@arrows{-}
\def\tx@SD{SD }
\def\tx@EndDot{EndDot }
\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
\def\pst@par{}
\def\addto@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
\fi}
\def\addbefore@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\toks@{#1}%
\pst@toks\expandafter{\pst@par}%
\edef\pst@par{\the\toks@,\the\pst@toks}%
\fi}
\def\use@par{%
\ifx\pst@par\@empty\else
\expandafter\@psset\pst@par,\@nil
\def\pst@par{}%
\fi}
\def\pst@object#1{%
\pst@ifstar{%
\@ifnextchar[%
{\pst@@object{#1}}%
{\def\pst@par{}\@nameuse{#1@i}}}}
\def\pst@@object#1[#2]{%
\def\pst@par{#2}%
\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
\def\newpsobject#1#2#3{%
\@ifundefined{#2@i}%
{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
\@namedef{#1}{\pst@object{#1}}%
\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
\ignorespaces}
\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
\def\begin@ClosedObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\solid@star
\ifpsdoubleline \pst@setdoublesep \fi
\init@pscode}
\def\end@ClosedObj{%
\ifpsshadow \pst@closedshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifshowpoints
% DG modification begin - Mar. 4, 1995
%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
\pst@OpenShowPoints
% DG modification end
\fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@OpenObj{%
\begin@ClosedObj
\let\pst@linetype\pst@arrowtype
\pst@addarrowdef}
\def\begin@AltOpenObj{%
\begin@ClosedObj
\def\pst@repeatarrowsflag{\z@}%
\def\pst@linetype{0}}
\def\end@OpenObj{%
\ifpsshadow \pst@openshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
\ifshowpoints \pst@OpenShowPoints \fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@SpecialObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\init@pscode}
\def\end@SpecialObj{%
\use@pscode
\endgroup
\ignorespaces}
\def\pst@code{}%
\def\init@pscode{%
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
\def\use@pscode{%
\pstverb{%
\pst@dict
\tx@STP
\pst@newpath
\psk@origin
\psk@swapaxes
\pst@code
end}%
\gdef\pst@code{}}
\def\pst@newpath{newpath }
\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
\def\KillGlue{\let\pst@killglue\pst@@killglue}
\def\DontKillGlue{\let\pst@killglue\relax}
\DontKillGlue
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
\def\pst@setdoublesep{%
\pst@getlength\psdoublesep\psdoublesep
\pslinewidth=2\pslinewidth
\advance\pslinewidth\psdoublesep\p@
\let\pst@setdoublesep\relax}
\def\tx@Shadow{Shadow }
\def\pst@closedshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
gsave fill grestore
stroke
grestore
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}}
\def\pst@openshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
\ifx\psk@fillstyle\relax\else
gsave fill grestore
\fi
stroke}%
\pst@repeatarrows
\addto@pscode{grestore}
\ifx\psk@fillstyle\relax\else
\addto@pscode{%
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}
\fi}
\def\pst@addborder{%
\addto@pscode{%
gsave
\psk@border 2 mul
CLW add SLW
\pst@usecolor\psbordercolor
stroke
grestore}}
\def\pst@stroke{%
\ifx\pslinestyle\@none\else
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor
\@nameuse{psls@\pslinestyle}
grestore}%
\fi}
\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
\def\pst@doublestroke{%
\addto@pscode{%
gsave
\psdoublesep SLW
\pst@usecolor\psdoublecolor
stroke
grestore}}
\def\pst@arrowtype{%
\ifx\psk@arrowB\@empty 0 \else -2 \fi
\ifx\psk@arrowA\@empty 0 \else -1 \fi
add}
\def\pst@addarrowdef{%
\addto@pscode{%
/ArrowA {
\ifx\psk@arrowA\@empty
\pst@oplineto
\else
\pst@arrowdef{A}
moveto
\fi
} def
/ArrowB {
\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
} def}}
\def\pst@arrowdef#1{%
\ifnum\pst@repeatarrowsflag>\z@
/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
\fi
\tx@BeginArrow
\psk@arrowscale
\@nameuse{psas@\@nameuse{psk@arrow#1}}
\tx@EndArrow}
\def\pst@repeatarrows{%
\addto@pscode{%
gsave
\ifx\psk@arrowA\@empty\else
ArrowAc ArrowA pop pop
\fi
\ifx\psk@arrowB\@empty\else
ArrowBc ArrowB pop pop pop pop
\fi
grestore}}
\def\pst@OpenShowPoints{%
\addto@pscode{%
gsave
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
Points aload length 2 div 2 sub cvi /N ED
N 0 ge
{ \ifx\psk@arrowA\@empty
Dot
\else
pop pop
\fi
N { Dot } repeat
\ifx\psk@arrowB\@empty
Dot
\else
pop pop
\fi }
{ N 2 mul { pop } repeat }
ifelse
grestore}}
\def\pscustom{\pst@object{pscustom}}
\long\def\pscustom@i#1{%
\begin@SpecialObj
\solid@star
\let\pst@ifcustom\iftrue
\let\begin@ClosedObj\begin@CustomObj
\let\end@ClosedObj\endgroup
\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
\let\end@OpenObj\endgroup
\let\begin@AltOpenObj\begin@CustomObj
\def\begin@SpecialObj{%
\begingroup
\pst@misplaced{special graphics object}%
\def\addto@pscode####1{}
\let\end@SpecialObj\endgroup}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\pst@repeatarrowsflag{\z@}%
\let\pst@setrepeatarrowsflag\relax
\showpointsfalse
\let\showpointstrue\relax
\def\pst@linetype{\pslinetype}%
\let\psset@liftpen\psset@@liftpen
\psset@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\def\pst@optcp##1##2{%
\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
\let\caddto@pscode\addto@pscode
\def\cuse@par##1{{\use@par##1}}%
\the\pst@customdefs
\setbox\pst@hbox=\hbox{#1}%
\psk@fillstyle
\pst@stroke
\end@SpecialObj}
\def\begin@CustomObj{%
\begingroup
\use@par
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\pst@oplineto{moveto }
\def\pst@cp{}
\def\pst@optcp#1#2{}
\def\psset@liftpen#1{}
\def\psset@@liftpen#1{%
\ifcase#1\relax
\def\psk@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{1}%
\def\pst@cp{}%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{2}%
\def\pst@cp{}%
\def\pst@oplineto{moveto }%
\fi}
\psset@liftpen{0}
\def\psk@liftpen{-1}
\def\psset@linetype#1{%
\pst@getint{#1}\pslinetype
\ifnum\pst@dimg<-3
\@pstrickserr{linetype must be greater than -3}\@ehpa
\def\pslinetype{0}%
\fi}
\psset@linetype{0}
\def\caddto@pscode#1{%
\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
\let\cuse@par\caddto@pscode
\def\tx@MSave{%
/msavemtrx
[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
def }
\def\tx@MRestore{%
tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
{ /msavematrx [ msavematrx aload pop setmatrix ] def }
if }
\newtoks\pst@customdefs
\pst@customdefs{%
\def\newpath{\addto@pscode{newpath}}%
\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\closepath{\addto@pscode{closepath}}%
\def\gsave{\begingroup\addto@pscode{gsave}}%
\def\grestore{\endgroup\addto@pscode{grestore}}%
% DG/SR modification begin - May 12, 1997 - Patch 2
%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
% DG/SR modification end
\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
\def\msave{\addto@pscode{\tx@MSave}}%
\def\mrestore{\addto@pscode{\tx@MRestore}}%
\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
\def\stroke{\pst@object{stroke}}%
\def\fill{\pst@object{fill}}%
\def\openshadow{\pst@object{openshadow}}%
\def\closedshadow{\pst@object{closedshadow}}%
% DG/SR modification begin - Jan. 7, 1998 - Patch 8
%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
% DG/SR modification end
\def\lineto{\pst@onecoor{lineto}}%
\def\rlineto{\pst@onecoor{rlineto}}%
\def\curveto{\pst@threecoor{curveto}}%
\def\rcurveto{\pst@threecoor{rcurveto}}%
\def\code#1{\addto@pscode{#1}}%
\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
\def\rcoor{\pst@getcoors{}{}}%
\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
\def\setcolor#1{%
\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
\let\file\pst@rawfile
} % END \pst@customdefs
\def\closedshadow@i{\cuse@par\pst@closedshadow}
\def\openshadow@i{\cuse@par\pst@openshadow}
\def\stroke@i{\cuse@par\pst@stroke}%
\def\fill@i{\cuse@par\psk@fillstyle}%
\def\pst@onecoor#1(#2){%
\pst@@getcoor{#2}%
\addto@pscode{\pst@coor #1}}
\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
\begingroup
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#4}\pst@tempb
% DG/SR modification begin - Aug.  4, 1999 - Patch 11
%\pst@getcoor{#6}\pst@tembc
\pst@getcoor{#6}\pst@tempc
% DG/SR modification end
\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
\endgroup}
\def\pst@rawfile#1{%
\begingroup
\def\do##1{\catcode`##1=12\relax}"
\dospecials
\catcode`\%=14
\pst@@rawfile{#1}%
\endgroup}
\def\pst@@rawfile#1{%
\immediate\openin1 #1
\ifeof1
\@pstrickserr{File `#1' not found}\@ehpa
\else
\immediate\read1 to \pst@tempg
\loop
\ifeof1 \@pstfalse\else\@psttrue\fi
\if@pst
\addto@pscode\pst@tempg
\immediate\read1 to \pst@tempg
\repeat
\fi
\immediate\closein1\relax}
\def\tx@NArray{NArray }
\def\tx@NArray{NArray }
\def\tx@Line{Line }
\def\tx@Arcto{Arcto }
\def\tx@CheckClosed{CheckClosed }
\def\tx@Polygon{Polygon }
\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle}
\psset@gangle{0}
\def\tx@Diamond{Diamond }
\def\psdiamond{\pst@object{psdiamond}}
\def\psdiamond@i(#1){%
\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
\def\psdiamond@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj}
\def\tx@Triangle{Triangle }
\def\pstriangle{\pst@object{pstriangle}}
\def\pstriangle@i(#1){%
\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
\def\pstriangle@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\tx@CCA{CCA }
\def\tx@CCA{CCA }
\def\tx@CC{CC }
\def\tx@IC{IC }
\def\tx@BOC{BOC }
\def\tx@NC{NC }
\def\tx@EOC{EOC }
\def\tx@BAC{BAC }
\def\tx@NAC{NAC }
\def\tx@EAC{EAC }
\def\tx@OpenCurve{OpenCurve }
\def\tx@AltCurve{AltCurve }
\def\tx@ClosedCurve{ClosedCurve }
\def\psset@curvature#1{%
\edef\pst@tempg{#1 }%
\expandafter\psset@@curvature\pst@tempg * * * \@nil}
\def\psset@@curvature#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
\psset@curvature{1 .1 0}
\def\pscurve{\pst@object{pscurve}}
\def\pscurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\pscurve@ii}}
\def\pscurve@ii{%
\addto@pscode{%
\pst@cp
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@OpenCurve}%
\end@OpenObj}
\def\psecurve{\pst@object{psecurve}}
\def\psecurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psecurve@ii}}
\def\psecurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@AltCurve}%
\end@OpenObj}
\def\psccurve{\pst@object{psccurve}}
\def\psccurve@i{%
\begin@ClosedObj
\pst@getcoors[\psccurve@ii}
\def\psccurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@ClosedCurve}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@dotsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@@dotsize{\pst@number\pst@dimg}%
\let\psk@@@dotsize\pst@tempg
\edef\psk@dotsize{%
/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
\psset@dotsize{2pt 2}
\def\psset@dotscale#1{%
\pst@getscale{#1}\psk@dotscale
\ifx\psk@dotscale\@empty
\def\psk@xdotscale{1 }%
\def\psk@ydotscale{1 }%
\else
\let\psk@xdotscale\pst@tempg
\let\psk@ydotscale\pst@temph
\fi}
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
%\psset@dotscale{1}
% DG/SR modification end
\def\pst@Getangle#1#2{%
\pst@getangle{#1}\pst@tempg
\def\pst@temph{0. }%
\ifx\pst@tempg\pst@temph
\def#2{}%
\else
\edef#2{\pst@tempg\space rotate }%
\fi}
\def\psset@dotangle#1{%
\pst@getangle{#1}\psk@@dotangle
\ifdim\psk@@dotangle\p@=\z@
\let\psk@dotangle\@empty
\else
% DG/SR modification begin - Aug. 8, 1997 - Patch 4
%\edef\psk@dotangle{\psk@@dotangle rotate }
\edef\psk@dotangle{\psk@@dotangle rotate }%
% DG/SR modification end
\fi}
\psset@dotangle{0}
\def\pst@getdotsize{%
\pst@dimg=\psk@@@dotsize\pslinewidth
\advance\pst@dimg\psk@@dotsize\p@
\pst@dimh=\psk@ydotscale\pst@dimg
\pst@dimg=\psk@xdotscale\pst@dimg
\divide\pst@dimh 2
\divide\pst@dimg 2\relax}
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
\psset@dotscale{1}
% DG/SR modification end
\def\psdot{\pst@object{psdot}}
\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
\def\psdot@ii(#1){%
\begin@SpecialObj
\pst@@getcoor{#1}%
\addto@pscode{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}%
\pst@coor Dot}%
\end@SpecialObj}
\def\psdots{\pst@object{psdots}}
\def\psdots@i{%
\begin@SpecialObj
\pst@getcoors[\psdots@ii}
\def\psdots@ii{%
\addto@pscode{false \tx@NArray \psdots@iii}%
\end@SpecialObj}
\def\psdots@iii{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat}
% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997
\def\tx@SQ{SQ }
\def\tx@ST{ST }
\def\tx@SP{SP }
\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}}
\@namedef{psds@o}{%
/r2 DS CLW sub def
\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}}
\@namedef{psds@square*}{%
/r1 DS .886 mul def
\pst@gdot{r1 \tx@SQ}}
\@namedef{psds@square}{%
/r1 DS .886 mul def /r2 r1 CLW sub def
\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
\@namedef{psds@triangle*}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST}}
\@namedef{psds@triangle}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
/y2 y1 CLW add def /x2 y2 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
\@namedef{psds@pentagon*}{%
/r1 DS 1.149 mul def
\pst@gdot{r1 \tx@SP}}
\@namedef{psds@pentagon}{%
DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
\@namedef{psds@+}{%
/DS DS 1.253 mul def
\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
\@namedef{psds@|}{%
\psk@tbarsize CLW mul add 2 div /DS ED
\pst@gdot{0 DS moveto 0 DS neg L stroke}}
% DG: end dead code?
\def\psset@dotstyle#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{Dot style `#1' not defined}\@eha}%
{\edef\psk@dotstyle{#1}}}
\psset@dotstyle{*}
\def\tx@FontDot{FontDot }
\def\newpsfontdot#1[#2]#3#4{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
% DG/SR modification begin - Dec. 12, 1999 - Patch 14
%/Dot { moveto #4 show } bind def }}
/Dot { moveto gsave \psk@dotscale #4 show grestore } bind def }}
% DG/SR modification end
\def\newpsfontdotH#1[#2]#3#4#5{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot {
moveto
\iftrue
% DG/SR modification begin - Dec. 23, 1999 - Patch 14
%gsave \pst@usecolor\psfillcolor #5 show grestore
%\fi
%#4 show
gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore
\fi
gsave \psk@dotscale #4 show grestore
% DG/SR modification end
} bind def }}
\pstheader{pst-dots.pro}
\newpsfontdot{*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
\newpsfontdotH{o}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
\newpsfontdotH{Bo}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
\newpsfontdotH{triangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
\newpsfontdotH{Btriangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
\newpsfontdot{triangle*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
\newpsfontdotH{square}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
\newpsfontdotH{Bsquare}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
\newpsfontdot{square*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
\newpsfontdotH{pentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
\newpsfontdotH{Bpentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
\newpsfontdot{pentagon*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14
%\newpsfontdot{diamond*}%
%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
%\newpsfontdot{diamond}%
%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
% D.G. modification begin - Jan. 17, 2000
\newpsfontdotH{diamond}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
\newpsfontdotH{Bdiamond}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
\newpsfontdot{diamond*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
% DG/SR modification end
\newpsfontdot{oplus}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>}
\newpsfontdot{otimes}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>}
\newpsfontdot{x}%
[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>}
\newpsfontdot{+}%
[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>}
\newpsfontdot{asterisk}%
[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>}
\newpsfontdot{B+}%
[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>}
\newpsfontdot{Basterisk}%
[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>}
\newpsfontdot{|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
% DG/SR modification end
\newpsfontdot{B|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)}
[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}
% DG/SR modification end
\iffalse
\newpsfontdot{*}%
[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>}
\newpsfontdot{o}%
[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>}
\newpsfontdot{Bo}%
[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>}
\fi
\newdimen\pslinearc
\def\psset@linearc#1{\pssetlength\pslinearc{#1}}
\psset@linearc{0pt}
\def\psline{\pst@object{psline}}
\def\psline@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psline@ii}}
\def\psline@ii{%
\addto@pscode{\pst@cp \psline@iii \tx@Line}%
\end@OpenObj}
\def\psline@iii{%
\ifdim\pslinearc>\z@
/r \pst@number\pslinearc def
/Lineto { \tx@Arcto } def
\else
/Lineto /lineto load def
\fi
\ifshowpoints true \else false \fi}
\def\qline(#1)(#2){%
\def\pst@par{}%
\begin@SpecialObj
\def\pst@linetype{0}%
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
\pst@tempa moveto \pst@coor L
\@nameuse{psls@\pslinestyle}}%
\end@SpecialObj}
\def\pspolygon{\pst@object{pspolygon}}
\def\pspolygon@i{%
\begin@ClosedObj
\def\pst@cp{}%
\pst@getcoors[\pspolygon@ii}
\def\pspolygon@ii{%
\addto@pscode{\psline@iii \tx@Polygon}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
\psset@framearc{0}
\def\psset@cornersize#1{%
\pst@expandafter\psset@@cornersize{#1}\@nil}
\def\psset@@cornersize#1#2\@nil{%
\if #1a\relax
\def\psk@cornersize{\pst@number\pslinearc false }%
\else
\def\psk@cornersize{\psk@framearc true }%
\fi}
\psset@cornersize{relative}
\def\tx@Rect{Rect }
\def\tx@OvalFrame{OvalFrame }
\def\tx@Frame{Frame }
\def\psset@dimen#1{%
\pst@expandafter\psset@@dimen{#1}\@nil}
\def\psset@@dimen#1#2\@nil{%
\if #1o\relax
\def\psk@dimen{.5 }%
\else
\if #1m\relax
\def\psk@dimen{0 }%
\else
\if #1i\relax
\def\psk@dimen{-.5 }%
\fi
\fi
\fi}
\psset@dimen{outer}
\def\psframe{\pst@object{psframe}}
\def\psframe@i(#1){%
\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
\def\psframe@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj}
\def\tx@BezierNArray{BezierNArray }
\def\tx@OpenBezier{OpenBezier }
\def\tx@ClosedBezier{ClosedBezier }
\def\tx@BezierShowPoints{BezierShowPoints }
\def\psbezier{\pst@object{psbezier}}
\def\psbezier@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psbezier@ii}}
\def\psbezier@ii{%
\addto@pscode{%
% DG/SR modification begin - Apr. 28, 1997 - Patch 1
% \psbezier doesn't work inside \pscustom
%\pst@cp
% DG/SR modification end
\ifshowpoints true \else false \fi
\tx@OpenBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\end@OpenObj}
\def\pscbezier{\pst@object{pscbezier}}
\def\pscbezier@i{%
\begin@ClosedObj
\pst@getcoors[\pscbezier@ii}
\def\pscbezier@ii{%
\addto@pscode{%
\ifshowpoints true \else false \fi
\tx@ClosedBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\chardef\pst@linetype=1
\end@ClosedObj}
\def\tx@Parab{Parab }
\def\parabola{\pst@object{parabola}}
\def\parabola@i{\pst@getarrows\parabola@ii}
\def\parabola@ii#1(#2)#3(#4){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@@getcoor{#4}%
\addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
\end@OpenObj}
\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
\psset@gridwidth{.8pt}
\def\psset@griddots#1{%
\pst@cntg=#1\relax
\edef\psk@griddots{\the\pst@cntg}}
\psset@griddots{0}
\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
\psset@gridcolor{black}
\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
\psset@subgridwidth{.4pt}
\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
\psset@subgridcolor{gray}
\def\psset@subgriddots#1{%
\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
\psset@subgriddots{0}
\def\psset@subgriddiv#1{%
\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
\psset@subgriddiv{5}
\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
\psset@gridlabels{10pt}
\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
\psset@gridlabelcolor{black}
\def\tx@Grid{Grid }
\def\psgrid{\pst@object{psgrid}}
\def\psgrid@i{\@ifnextchar(%
{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
\def\psgrid@ii(#1){\@ifnextchar(%
{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
\def\psgrid@iii(#1)(#2){\@ifnextchar(%
{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
\def\psgrid@iv(#1)(#2)(#3){%
\begin@SpecialObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\pst@@getcoor{#3}%
\ifnum\psk@subgriddiv>1
\addto@pscode{gsave
\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
\psk@subgriddiv\space \psk@subgriddots\space
{} 0 \tx@Grid grestore}%
\fi
\addto@pscode{gsave
\psk@gridwidth SLW \pst@usecolor\psgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
\psk@gridlabels \tx@Grid grestore}%
\end@SpecialObj}
\newif\ifpsmathbox
\psmathboxtrue
\def\pst@mathflag{\z@}
\newtoks\everypsbox
\let\pst@thisbox\relax
\long\def\pst@makenotverbbox#1#2{%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox=\hbox{%
\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
{\pst@thisbox\the\everypsbox#2}%
\ifnum\pst@mathflag>\z@$\fi}%
#1}
\def\pst@makeverbbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\afterassignment\pst@beginbox
\setbox\pst@hbox\hbox}
\def\pst@beginbox{%
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\bgroup\aftergroup\pst@endbox
\pst@thisbox
\the\everypsbox}
\def\pst@endbox{%
\ifnum\pst@mathflag>\z@$\fi
\egroup
\pst@afterbox}
\def\pst@makebox{\pst@@makebox}
\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
\psverbboxfalse
\def\pst@longbox{%
\def\pst@makebox{%
\gdef\pst@makebox{\pst@@makebox}%
\pst@makelongbox}}
\def\pst@makelongbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox\hbox\bgroup
\aftergroup\pst@afterbox
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\begingroup
\pst@thisbox
\the\everypsbox}
\def\pst@endlongbox{%
\endgroup
\ifnum\pst@mathflag>\z@$\fi
\egroup}
\def\pslongbox#1#2{%
\@namedef{#1}{\pst@longbox#2}%
\@namedef{end#1}{\pst@endlongbox}}
\newdimen\psframesep
\def\psset@framesep#1{\pssetlength\psframesep{#1}}
\psset@framesep{3pt}
\newif\ifpsboxsep
\def\psset@boxsep#1{\@nameuse{psboxsep#1}}
\psset@boxsep{true}
\def\pst@useboxpar{%
\use@par
\if@star
\let\pslinecolor\psfillcolor
\solid@star
\let\solid@star\relax
\fi
\ifpsdoubleline \pst@setdoublesep \fi}
\def\psframebox{\pst@object{psframebox}}
\def\psframebox@i{\pst@makebox\psframebox@ii}
\def\psframebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\pslinewidth
\advance\pst@dima by \psframesep
\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
\setbox\pst@hbox=\hbox{%
\ifpsboxsep\kern\pst@dima\fi
\begin@ClosedObj
\addto@pscode{%
\psk@cornersize
\pst@number\pst@dima neg
\pst@number\pst@dimb neg
\pst@number\pst@dimc
\pst@number\pst@dimd
.5
\tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\box\pst@hbox
\ifpsboxsep\kern\pst@dima\fi}%
\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
\leavevmode\box\pst@hbox
\endgroup}
\def\psdblframebox{\pst@object{psdblframebox}}
\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
\def\psclip#1{%
\leavevmode
\begingroup
\begin@psclip
\begingroup
\def\use@pscode{%
\pstVerb{%
\pst@dict
/mtrxc CM def
CP CP T
\tx@STV
\psk@origin
\psk@swapaxes
newpath
\pst@code
clip
newpath
mtrxc setmatrix
moveto
0 setgray
end}%
\gdef\pst@code{}}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
\hbox to\z@{#1}%
\endgroup
\def\endpsclip{%
\end@psclip
\endgroup}%
\ignorespaces}
\def\endpsclip{\pst@misplaced\endpsclip}
\let\begin@psclip\relax
\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
\def\AltClipMode{%
\def\end@psclip{\pstVerb{\pst@grestore}}%
\def\begin@psclip{\pstVerb{gsave}}}
\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
% DG modification begin - Apr. 3, 1997
% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
% DG modification end
\def\clipbox@@#1{%
\pssetlength\pst@dimg{#1}%
\leavevmode\hbox{%
\begin@psclip
\pst@Verb{%
CM \tx@STV CP T newpath
/a \pst@number\pst@dimg def
/w \pst@number{\wd\pst@hbox}a add def
/d \pst@number{\dp\pst@hbox}a add neg def
/h \pst@number{\ht\pst@hbox}a add def
a neg d moveto
a neg h L
w h L
w d L
closepath
clip
newpath
0 0 moveto
setmatrix}%
\unhbox\pst@hbox
\end@psclip}}
\def\psshadowbox{\pst@object{psshadowbox}}
\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
\def\psshadowbox@ii{%
\begingroup
\pst@useboxpar
\psshadowtrue
\psboxseptrue
\def\psk@shadowangle{-45 }%
\setbox\pst@hbox=\hbox{\psframebox@ii}%
\pst@dimh=\psk@shadowsize\p@
\pst@dimh=.7071\pst@dimh
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pst@dimh
\dp\pst@hbox=\pst@dimg
\pst@dimg=\wd\pst@hbox
\advance\pst@dimg\pst@dimh
\wd\pst@hbox=\pst@dimg
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox{\pst@object{pscirclebox}}
\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
\def\pscirclebox@ii{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscirclebox@iii
\box\pst@hbox}%
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox@iii{%
\if@star
\pslinewidth\z@
\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
newpath \pscirclebox@iv \tx@SD end}%
\else
\begin@ClosedObj
\def\pst@linetype{4}\showpointsfalse
\addto@pscode{%
\pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
\end@ClosedObj
\fi}
\def\pscirclebox@iv{%
\pst@number{\wd\pst@hbox}2 div
\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
\tx@Pyth \pst@number\psframesep add }
\def\pscirclebox@sep{%
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\divide\pst@dimb 2
\pst@dima=.5\wd\pst@hbox
\pst@pyth\pst@dima\pst@dimb\pst@dimc
\advance\pst@dimc\pslinewidth
\advance\pst@dimc\psframesep
\advance\pst@dimb-\pst@dimc
\setbox\pst@hbox=\hbox to2\pst@dimc{%
\hss
\vbox{\kern-\pst@dimb\box\pst@hbox}%
\hss}%
\advance\pst@dimb-\dp\pst@hbox
\dp\pst@hbox=-\pst@dimb}
\let\pst@nodehook\relax
\def\psCirclebox{\pst@object{psCirclebox}}
\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
\def\psCirclebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psCirclebox@sep{%
\pst@dimc=\pst@dimb
\advance\pst@dimb-\pst@dima
\advance\pst@dima\pst@dimc
\setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
\hss
\vrule width \z@ depth \pst@dimb height \pst@dima
\box\pst@hbox
\hss}}%
\def\psovalbox{\pst@object{psovalbox}}
\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
\def\psovalbox@ii{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\ifpsboxsep\psovalbox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psovalbox@iii{%
\psovalbox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
0 360
\pst@number\pst@dimc CLW 2 div sub
\pst@number\pst@dimd CLW 2 div sub
\pst@number\pst@dima
\pst@number\pst@dimb
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj
\unhbox\pst@hbox}}
\def\psovalbox@iv{%
\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
\pst@dima=.5\wd\pst@hbox
\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
\pst@dimd=.707\pst@dimd
\advance\pst@dimd\pst@dimc
\advance\pst@dimc.707\wd\pst@hbox}
\def\psovalbox@sep{%
\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\pst@dimg=\pst@dimd
\advance\pst@dimg-\pst@dimb
\dp\pst@hbox=\pst@dimg
\advance\pst@dimd\pst@dimb
\ht\pst@hbox=\pst@dimd}
\def\psdiabox{\pst@object{psdiabox}}
\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
\def\psdiabox@ii{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\ifpsboxsep\psdiabox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psdiabox@iv{%
\pst@dimg=.707\pslinewidth
\advance\pst@dimg.707\psframesep
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimc=\pst@dima
\advance\pst@dimc\pst@dimg
\pst@dimd=\ht\pst@hbox
\advance\pst@dimd\dp\pst@hbox
\divide\pst@dimd 2
\pst@dimb=\pst@dimd
\advance\pst@dimb-\dp\pst@hbox
\advance\pst@dimd\pst@dimg}
\def\psdiabox@iii{%
\psdiabox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
0
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj
\box\pst@hbox}}
\def\psdiabox@sep{%
\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\multiply\pst@dimd 2
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\advance\pst@dimd-2\pst@dimb
\dp\pst@hbox\pst@dimd}
\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
\def\psset@@trimode#1#2#3\@nil{%
\let\pst@tempg#1\relax
\ifx\pst@tempg*%
\let\psk@@trimode\@empty
\let\pst@tempg#2\relax
\else
\let\psk@@trimode\relax
\fi
\edef\psk@trimode{%
\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2
\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}}
\psset@trimode{U}
\def\pstribox{\pst@object{pstribox}}
\def\pstribox@i{\pst@makebox{\pstribox@ii}}
\def\pstribox@ii{%
\begingroup
\pst@useboxpar
\pstribox@iii
\ifpsboxsep\pstribox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pstribox@iii{%
\pstribox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc \pst@number\pst@dimd
\ifodd\psk@trimode exch \fi
\psk@trimode -90 mul
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj
\box\pst@hbox}}
\def\pstribox@iv{%
\pst@dimh=\pslinewidth
\advance\pst@dimh\psframesep
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg 2
\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes.
\ifodd\psk@trimode
\pst@dimb\pst@dimg
\else
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\fi
\ifcase\psk@trimode
\pst@dimb=-\dp\pst@hbox
\advance\pst@dimb-\pst@dimh
\or
\pst@dima=-\pst@dimh
\or
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\pst@dimh
\or
\pst@dima=\wd\pst@hbox
\advance\pst@dima\pst@dimh
\fi
\pst@dimd=\dp\pst@hbox
\advance\pst@dimd\ht\pst@hbox
\ifx\psk@@trimode\relax
\pst@dimc=\wd\pst@hbox
\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
\multiply\pst@dimc 2
\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
\multiply\pst@dimd 2
\else
\ifodd\psk@trimode
\advance\pst@dimd 1.1547\wd\pst@hbox
\advance\pst@dimd 3.4641\pst@dimh
\pst@dimc=.866\pst@dimd
\else
\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
\advance\pst@dimd 3\pst@dimh
\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
\fi
\fi}
\def\pstribox@sep{%
\ifodd\psk@trimode
\advance\pst@dimb.5\pst@dimd
\ht\pst@hbox=\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox=\pst@dimd
\else
\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
\global\pst@dimg=.5\pst@dimc
\fi
\ifcase\psk@trimode
\dp\pst@hbox-\pst@dimb
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\or
\pst@dimg=.5\wd\pst@hbox
\global\advance\pst@dimg-\pst@dima
\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
\or
\ht\pst@hbox\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox\pst@dimd
\or
\pst@dimg=\pst@dimc
\advance\pst@dimg-\pst@dima
\global\advance\pst@dimg.5\wd\pst@hbox
\setbox\pst@hbox\hbox to \pst@dimc{%
\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
\fi}
\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
\def\psset@arcsep#1{%
\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
\psset@arcsep{0}
\def\tx@ArcArrow{ArcArrow }
\def\psarc{\pst@object{psarc}}
\def\psarc@i{%
\@ifnextchar({\psarc@iii}{\psarc@ii}}
\def\psarc@ii#1{\addto@par{arrows=#1}%
\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
\def\psarc@iii(#1)#2#3#4{%
\begin@OpenObj
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\pssetlength\pst@dima{#2}%
\addto@pscode{\psarc@iv \psarc@v}%
\gdef\psarc@type{0}%
\showpointsfalse
\end@OpenObj}
\def\psarc@iv{%
\pst@coor /y ED /x ED
/r \pst@number\pst@dima def
/c 57.2957 r \tx@Div def
/angleA
\pst@tempa
\psk@arcsepA c mul 2 div
\ifcase \psarc@type add \or sub \fi
def
/angleB
\pst@tempb
\psk@arcsepB c mul 2 div
\ifcase \psarc@type sub \or add \fi
def
\ifshowpoints\psarc@showpoints\fi
\ifx\psk@arrowA\@empty
\ifnum\psk@liftpen=2
r angleA \tx@PtoC
y add exch x add exch
moveto
\fi
\fi}
\def\psarc@v{%
x y r
angleA
\ifx\psk@arrowA\@empty\else
{ ArrowA CP }
{ \ifcase\psarc@type add \or sub \fi }
\tx@ArcArrow
\fi
angleB
\ifx\psk@arrowB\@empty\else
{ ArrowB }
{ \ifcase\psarc@type sub \or add \fi }
\tx@ArcArrow
\fi
\ifcase\psarc@type arc \or arcn \fi}
\def\psarc@type{0}
\def\psarc@showpoints{%
gsave
newpath
x y moveto
x y r \pst@tempa \pst@tempb
\ifcase\psarc@type arc \or arcn \fi
closepath
CLW 2 div SLW
[ \psk@dash\space ] 0 setdash stroke
grestore }
\def\psarcn{\pst@object{psarcn}}
\def\psarcn@i{\def\psarc@type{1}\psarc@i}
\def\pscircle{\pst@object{pscircle}}
\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
\def\pscircle@do(#1)#2{%
\if@star
{\use@par\qdisk(#1){#2}}%
\else
\begin@ClosedObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\def\pst@linetype{4}%
\addto@pscode{%
\pst@coor
\pst@number\pst@dimc
\psk@dimen CLW mul sub
0 360 arc
closepath}%
\showpointsfalse
\end@ClosedObj
\fi
\ignorespaces}
\def\qdisk(#1)#2{%
\def\pst@par{}%
\begin@SpecialObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimg{#2}%
\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
\end@SpecialObj}
\def\psset@radius#1{\pst@@getlength{#1}\psk@radius}
\psset@radius{.25cm}
\def\psCircle{\pst@object{psCircle}}
\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
\def\pswedge{\pst@object{pswedge}}
\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
\def\pswedge@ii(#1)#2#3#4{%
\begin@ClosedObj
\pssetlength\pst@dimc{#2}
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\def\pst@linetype{1}%
\addto@pscode{%
\pst@coor
2 copy
moveto
\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
\pst@tempa \pst@tempb
arc
closepath}%
\showpointsfalse
\end@ClosedObj}
\def\tx@Ellipse{Ellipse }
\def\psellipse{\pst@object{psellipse}}
\def\psellipse@i(#1){\@ifnextchar(%
{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
\def\psellipse@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
0 360
\pst@coor
\ifdim\psk@dimen\p@=\z@\else
\psk@dimen CLW mul
dup 4 -1 roll sub neg 3 1 roll sub
\fi
\pst@tempa
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
\long\def\multips@iii(#1)(#2)#3#4{%
\begingroup
\use@par
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\pst@cnta=#3\relax
\init@pscode
\addto@pscode{%
\pst@tempa T \the\pst@cnta\space \pslbrace
gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
\hbox to\z@{%
\def\init@pscode{%
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}%
\def\use@pscode{\addto@pscode{grestore}}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
#4}%
\addto@pscode{grestore \pst@coor T \psrbrace repeat}%
\leavevmode
\use@pscode
\endgroup
\ignorespaces}
\def\scalebox#1{\pst@makebox{\@scalebox{#1}}}
\def\@scalebox#1{%
\begingroup
\pst@getscale{#1}\pst@tempa
\let\pst@tempc\pst@tempg
\let\pst@tempd\pst@temph
\@@scalebox
\endgroup}
\def\@@scalebox{%
\leavevmode
\hbox{%
\ifdim\pst@tempd\p@<\z@
\pst@dimg=\pst@tempd\ht\pst@hbox
\pst@dimh=\pst@tempd\dp\pst@hbox
\dp\pst@hbox=-\pst@dimg
\ht\pst@hbox=-\pst@dimh
\else
\ht\pst@hbox=\pst@tempd\ht\pst@hbox
\dp\pst@hbox=\pst@tempd\dp\pst@hbox
\fi
\pst@dima=\pst@tempc\wd\pst@hbox
\ifdim\pst@dima<\z@\kern-\pst@dima\fi
\pst@Verb{CP CP translate \pst@tempa \tx@NET}%
\hbox to \z@{\box\pst@hbox\hss}%
\pst@Verb{%
CP CP translate
1 \pst@tempc div 1 \pst@tempd div scale
\tx@NET}%
\ifdim\pst@dima>\z@\kern\pst@dima\fi}}
\pslongbox{Scalebox}{\scalebox}
\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}}
\def\@scaleboxto(#1,#2){%
\begingroup
\pssetlength\pst@dima{#1}%
\pssetlength\pst@dimb{#2}%
\ifdim\pst@dima=\z@\else
\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
\edef\pst@tempc{\pst@tempc\space}%
\fi
\ifdim\pst@dimb=\z@
\ifdim\pst@dima=\z@
\@pstrickserr{%
\string\scaleboxto\space dimensions cannot both be zero}\@ehpa
\def\pst@tempa{}%
\def\pst@tempc{1 }%
\def\pst@tempd{1 }%
\else
\let\pst@tempd\pst@tempc
\fi
\else
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc\dp\pst@hbox
\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
\edef\pst@tempd{\pst@tempd\space}%
\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
\fi
\edef\pst@tempa{\pst@tempc \pst@tempd scale }%
\@@scalebox
\endgroup}
\pslongbox{Scaleboxto}{\scaleboxto}
\def\tx@Rot{Rot }
\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
\def\@rotateleft#1{%
\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{90 \tx@Rot}
\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
\pst@Verb{-90 \tx@Rot}}}}
\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
\def\@rotateright#1{%
\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{-90 \tx@Rot}
\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
\pst@Verb{90 \tx@Rot}}}}
\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
\def\@rotatedown#1{%
\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
\pst@Verb{180 \tx@Rot}%
\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
\pst@Verb{-180 \tx@Rot}}}}
\pslongbox{Rotateleft}{\rotateleft}
\pslongbox{Rotateright}{\rotateright}
\pslongbox{Rotatedown}{\rotatedown}
\def\pst@starbox{%
\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
\def\pst@@makesmall#1{%
\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
\def\pst@@@makesmall#1{%
\pst@dimh=\psk@xref\wd#1%
\ifx\psk@yref\relax
\pst@dimg=\dp#1%
\else
\pst@dimg=\psk@yref\ht#1%
\advance\pst@dimg\psk@yref\dp#1%
\fi
\setbox#1=\hbox to\z@{%
\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
\def\psset@@ref#1#2,#3,#4\@nil{%
\def\psk@xref{.5}%
\def\psk@yref{.5}%
\let\pst@makesmall\pst@@@makesmall
\ifx\@empty#3\@empty
\@nameuse{getref@#1}%
\@nameuse{getref@#2}%
\else
\pst@checknum{#1#2}\psk@xref
\pst@checknum{#3}\psk@yref
\fi}
\def\getref@c{\let\pst@makesmall\pst@@makesmall}
\def\getref@t{\def\psk@yref{1}}
\def\getref@b{\def\psk@yref{0}}
\def\getref@B{\let\psk@yref\relax}
\def\getref@l{\def\psk@xref{0}}
\def\getref@r{\def\psk@xref{1}}
\psset@ref{c}
\def\psset@rot#1{%
\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
\def\psset@@rot#1\@nil{%
\def\next##1@#1=##2@##3\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@rot
\else
\def\psk@rot{##2}%
\fi}%
\expandafter\next\pst@rottable @#1=\relax @\@nil}
\def\psset@@@rot#1#2\@nil{%
\psset@@rot#2\@nil
\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\def\pst@rotlist{mark RAngle /a ED cleartomark a neg }
\def\pst@rottable{%
@0=%
@U=%
@L=90 %
@D=180 %
@R=-90 %
@N=\pst@rotlist
@W=\pst@rotlist 90 add %
@S=\pst@rotlist 180 add %
@E=\pst@rotlist 90 sub }
\psset@rot{0}
\def\tx@RotBegin{RotBegin }
\def\tx@RotEnd{RotEnd }
\def\pst@rotate#1#2{%
\ifx#1\@empty\else
\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
\fi}
\def\psput@cartesian#1{%
\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
\def\psput@special#1{%
\hbox{%
\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
\box#1%
\pst@Verb{\tx@PutEnd}}}
\def\tx@PutCoor{PutCoor }
\def\tx@PutBegin{PutBegin }
\def\tx@PutEnd{PutEnd }
\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii}
\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
\def\rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\multirput{%
\def\pst@par{}%
\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
\def\multirput@iv(#1){%
\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
\def\multirput@v(#1,#2)(#3,#4)#5{%
\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
\def\multirput@vi(#1,#2)(#3,#4)#5{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\pssetxlength\pst@dima{#1}%
\pssetylength\pst@dimb{#2}%
\pssetxlength\pst@dimc{#3}%
\pssetylength\pst@dimd{#4}%
\pst@cntg=#5\relax
\pst@cnth=\@ne
\leavevmode
\loop
\vbox to \z@{%
\vss
\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
\vskip\pst@dimb}%
\ifnum\pst@cntg>\pst@cnth
\advance\pst@dima\pst@dimc
\advance\pst@dimb\pst@dimd
\advance\pst@cnth\@ne
\repeat
\endgroup
\ignorespaces}
\newif\if@fixedradius
\def\cput{\pst@object{cput}}
\def\cput@i{\@fixedradiusfalse\cput@ii}
\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
\def\cput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}}
\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
\def\cput@v#1{%
\begingroup
\use@par
\setbox\pst@hbox=\hbox{%
\psboxsepfalse
\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}%
\pst@@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Cput{\pst@object{Cput}}
\def\Cput@i{\@fixedradiustrue\cput@ii}
\newdimen\pslabelsep
\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
\psset@labelsep{5pt}
\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil}
\def\psset@@refangle#1\@nil{%
\def\next##1@#1=##2"##3@##4\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@refangle
\def\psk@uputref{}%
\else
\def\psk@refangle{##2 }%
\def\psk@uputref{##3}%
\fi}%
\expandafter\next\pst@refangletable @#1=\relax"@\@nil}
\def\pst@refangletable{%
@r=0"20%
@u=90"02%
@l=180"10%
@d=-90"01%
@ur=45"22%
@ul=135"12%
@dr=-135"21%
@dl=-45"11}
\psset@refangle{0}
% DG/SR modification begin - Mar. 24, 1999 - Patch 10
%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} 
% DG/SR modification end
\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
\def\uput@ii[#1]{%
\addto@par{refangle={#1}}%
\@ifnextchar({\uput@iv}{\uput@iii}}
\def\uput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
\def\uput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\uput@vi
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\uput@vi{%
\ifx\psk@uputref\@empty
\uput@vii\tx@UUput{}%
\else
\ifx\psk@rot\@empty
\expandafter\uput@viii\psk@uputref
\else
\uput@vii\tx@UUput{}%
\fi
\fi}
\def\uput@vii#1#2{%
\edef\pst@coor{%
\pst@number\pslabelsep
#2%
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi
\tx@Uput #1}%
\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
\setbox\pst@hbox=\psput@special\pst@hbox
\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi}
\def\uput@viii#1#2{%
\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
\setbox\pst@hbox=\vbox to\z@{%
\ifnum#2=1 \vskip\pslabelsep\else\vss\fi
\hbox to\z@{%
\ifnum#1=2 \hskip\pslabelsep\else\hss\fi
\box\pst@hbox
\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
\def\tx@Uput{Uput }
\def\tx@UUput{UUput }
\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
\def\Rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Rput@vi{%
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pslabelsep
\dp\pst@hbox=\pst@dimg
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg\pslabelsep
\ht\pst@hbox=\pst@dimg
\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
\def\oldpsput{%
\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
\def\oldpsput@iii<#1>{\rput@iii{#1}}
\def\OldPsput{\let\psput\oldpsput}
\def\NewPsput{\let\psput\rput}
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{%
\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
\def\pst@@picture[#1]#2(#3,#4){%
\@ifnextchar({\pst@@@picture[#1](#3,#4)}%
{\pst@@@picture[#1](0,0)(#3,#4)}}
\def\pst@@@picture[#1](#2,#3)(#4,#5){%
\pssetxlength\pst@dima{#2}%
\pssetylength\pst@dimb{#3}%
\pssetxlength\pst@dimc{#4}%
\pssetylength\pst@dimd{#5}%
\ifdim\pst@dima>\pst@dimc
\pst@dimg=\pst@dima
\pst@dima=\pst@dimc
\pst@dimc=\pst@dimg
\fi
\ifdim\pst@dimb>\pst@dimd
\pst@dimg=\pst@dimb
\pst@dimb=\pst@dimd
\pst@dimd=\pst@dimg
\fi
\def\pst@tempa{#1}%
\setbox\pst@hbox=\hbox\bgroup
\begingroup\KillGlue
\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\pst@killglue
\endgroup
\egroup
\ifdim\wd\pst@hbox=\z@\else
%\@pstrickserr{Extraneous space in the pspicture environment}%
%{Type \space <return> \space to procede.}%
\fi
\ht\pst@hbox=\pst@dimd
\dp\pst@hbox=-\pst@dimb
\setbox\pst@hbox=\hbox{%
\kern-\pst@dima
\ifx\pst@tempa\@empty\else
\advance\pst@dimd-\pst@dimb
\pst@dimd=\pst@tempa\pst@dimd
\advance\pst@dimd\pst@dimb
\lower\pst@dimd
\fi
\box\pst@hbox
\kern\pst@dimc}%
\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
\leavevmode\box\pst@hbox
\endgroup}
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
\def\tx@BeginOL{BeginOL }
\def\tx@InitOL{InitOL }
\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
\def\AltOverlayMode{%
\def\pst@initoverlay##1{%
\pst@Verb{%
\tx@InitOL
/Visible { initclip } def
/Invisible {
CP newpath OLUnit itransform moveto clip newpath moveto
} def
/TheOL (##1) def}}}
\def\pst@overlay#1{%
\edef\curr@overlay{#1}%
\pst@Verb{(#1) BOL}%
\aftergroup\pst@endoverlay}
\def\pst@endoverlay{%
\pst@Verb{(\curr@overlay) BOL}}
\def\curr@overlay{all}
\newbox\theoverlaybox
\def\overlaybox{%
\global\setbox\theoverlaybox=\hbox\bgroup
\begingroup
\let\psoverlay\pst@overlay
\def\overlaybox{%
\@pstrickserr{Overlays cannot be nested}\@eha}%
\def\putoverlaybox{%
\@pstrickserr{You must end the overlay box
before using \string\putoverlaybox}}%
\psoverlay{main}%
\ignorespaces}
\def\endoverlaybox{\endgroup\egroup}
\def\putoverlaybox#1{%
\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
\def\psoverlay{\@pstrickserr{\string\psoverlay\space
can only be used after \string\overlaybox}}
\ifx\pstcustomize\relax \input pstricks.con \fi
\catcode`\@=\PstAtCode\relax
%
\endinput
%%
%% END: pstricks.tex

math0111140.extracted_bib
\begin{thebibliography}{10}

\bibitem{Ariki:can}
{\sc S.~Ariki}, {\em On the decomposition numbers of the {Hecke} algebra of
  {$G(m,1,n)$}}, J.~Math. Kyoto Univ., {\bf 36} (1996), 789--808.

\bibitem{DJ:reps}
{\sc R.~Dipper and G.~James}, {\em Representations of {Hecke} algebras of
  general linear groups}, Proc. L.M.S. (3), {\bf 52} (1986), 20--52.

\bibitem{DJ:Schur}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, {\em The $q$--{Schur}
  algebra}, Proc. L.M.S. (3), {\bf 59} (1989), 23--50.

\bibitem{DJ:qWeyl}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, 
{\em $q$--{Tensor} space and $q$--{Weyl} modules}, Trans. A.M.S., 
{\bf 327} (1991), 251--282.

\bibitem{Erd}
{\sc K.~Erdmann}, {\em Decomposition numbers for symmetric groups and
  composition factors of {Weyl} modules}, J.~Algebra, {\bf 180} (1996),
  316--320.

\bibitem{GW}
{\sc F.~M. Goodman and H.~Wenzl}, {\em Crystal bases of quantum affine algebras
  and {Kazhdan--Lusztig} polynomials}, Int. Math. Res. Notes, {\bf 5} (1999),
  251--275.

\bibitem{James}
{\sc G.~D. James}, {\em The representation theory of the symmetric groups},
  SLN, {\bf 682}, Springer--Verlag, New York, 1978.

\bibitem{James:YoungD}
\leavevmode\vrule height 2pt depth -1.6pt width 23pt, {\em Some combinatorial
  results involving {Young} diagrams}, Proc. Camb. Phil. Soc., {\bf 83} (1978),
  1--10.

\bibitem{JM:Schaper}
{\sc G.~D. James and A.~Mathas}, {\em A $q$--analogue of the {Jantzen--Schaper}
  theorem}, Proc. L.M.S. (3), {\bf 74} (1997), 241--274.

\bibitem{LLT}
{\sc A.~Lascoux, B.~Leclerc, and J.-Y. Thibon}, {\em Hecke algebras at roots of
  unity and crystal bases of quantum affine algebras}, Comm. Math. Phys., {\bf
  181} (1996), 205--263.

\bibitem{Lec:DecCan}
{\sc B.~Leclerc}, {\em Decomposition numbers and canonical bases}, Algebr.
  Represent. Theory, {\bf 3} (2000), 277--287.

\bibitem{LT:Schur2}
{\sc B.~Leclerc and J.-Y. Thibon}, {\em {Littlewood--Richardson} coefficients
  and {Kazhdan--Lusztig} polynomials}, in Combinatorial methods in
  representation theory, M.~Kashiwara et~al., eds., Adv. Pure Math., {\bf 28},
  2000, 155--220.

\bibitem{LM:p=5}
{\sc F.~L\"ubeck and J.~M\"uller}, private communication.

\bibitem{LN:p=5}
{\sc F.~L\"ubeck and M.~Neunh{\"o}ffer}, {\em Enumerating large orbits
and direct condensation}, Experiment. Math., {\bf 10} (2001),
197--205.

\bibitem{MartinRussell}
{\sc S.~Martin and L.~Russell}, {\em Defect $3$ blocks of symmetric group
  algebras}, J.~Algebra, {\bf 213} (1999), 304--339.

\bibitem{M:ULect}
{\sc A.~Mathas}, {\em {Hecke algebras and Schur algebras of the symmetric
  group}}, Univ. Lecture Notes, {\bf 15}, A.M.S., 1999.

\bibitem{VV}
{\sc M.~Varagnolo and E.~Vasserot}, {\em On the decomposition matrices of the
  quantized {Schur} algebra}, Duke J.~Math., {\bf 100} (1999), 267--297.

\end{thebibliography}