summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/sseq
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-13 00:07:38 +0000
committerKarl Berry <karl@freefriends.org>2006-01-13 00:07:38 +0000
commit559bef22a0a6678726bab21871cdc991fd6e6e1e (patch)
tree173a7ea53e7e5e53643f10eecb6118abc430abe2 /Master/texmf-dist/tex/latex/sseq
parent574ac31af09708587fc784b607ce9a0842a9dd69 (diff)
sseq
git-svn-id: svn://tug.org/texlive/trunk@1342 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/sseq')
-rw-r--r--Master/texmf-dist/tex/latex/sseq/sseq.sty798
1 files changed, 798 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/sseq/sseq.sty b/Master/texmf-dist/tex/latex/sseq/sseq.sty
new file mode 100644
index 00000000000..17ae3957ccd
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/sseq/sseq.sty
@@ -0,0 +1,798 @@
+%%
+%% This is file `sseq.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% sseq.dtx (with options: `package')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from sseq.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file sseq.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+
+\NeedsTeXFormat{LaTeX2e}
+
+\ProvidesPackage{sseq}
+
+\RequirePackage{ifthen,calc,pifont}
+
+\newboolean{usesps}
+\setboolean{usesps}{true}
+\newboolean{usescolor}
+\setboolean{usescolor}{true}
+\newboolean{debug}
+\setboolean{debug}{false}
+
+\DeclareOption{ps}{\setboolean{usesps}{true}}
+\DeclareOption{nops}{\setboolean{usesps}{false}}
+\DeclareOption{color}{\setboolean{usescolor}{true}}
+\DeclareOption{nocolor}{\setboolean{usescolor}{false}}
+\DeclareOption{debug}{\setboolean{debug}{true}}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{xy}}
+
+\ProcessOptions
+
+\ifx\xyloaded\undefined \RequirePackage[curve,frame]{xy} \fi
+
+\ifthenelse{\boolean{usesps}}{\xyrequire{ps}}{}
+\ifthenelse{\boolean{usescolor}}{\xyrequire{color}}{}
+
+\newsavebox{\sseqcircledone}
+\newsavebox{\sseqcircledtwo}
+\newsavebox{\sseqcircledthree}
+\newsavebox{\sseqcircledfour}
+\newsavebox{\sseqcircledfive}
+\newsavebox{\sseqcircledsix}
+\newsavebox{\sseqcircledseven}
+\newsavebox{\sseqcircledeight}
+\newsavebox{\sseqcirclednine}
+\sbox{\sseqcircledone}{\ding{192}}
+\sbox{\sseqcircledtwo}{\ding{193}}
+\sbox{\sseqcircledthree}{\ding{194}}
+\sbox{\sseqcircledfour}{\ding{195}}
+\sbox{\sseqcircledfive}{\ding{196}}
+\sbox{\sseqcircledsix}{\ding{197}}
+\sbox{\sseqcircledseven}{\ding{198}}
+\sbox{\sseqcircledeight}{\ding{199}}
+\sbox{\sseqcirclednine}{\ding{200}}
+\newboolean{sseqhasfinishedpos}
+\setboolean{sseqhasfinishedpos}{true}
+\newboolean{sseqhasopenconn}
+\setboolean{sseqhasopenconn}{false}
+\newboolean{sseqclip}
+\setboolean{sseqclip}{true}
+\newboolean{sseqprevclip}\setboolean{sseqprevclip}{false}
+\newboolean{sseqcurrclip}\setboolean{sseqcurrclip}{false}
+
+\def\sseqconncommand{}
+
+\ifthenelse{\boolean{usescolor}}
+{
+ \newxyColor{sseqgr}{0.65}{gray}{}
+ \newxycolor{ssred}{Red}
+ \newxycolor{ssblack}{Black}
+}{}
+\newcommand{\ssconncolor}{ssblack}
+\newcommand{\sslabelcolor}{ssblack}
+\newcommand{\ssplacecolor}{ssblack}
+\def\ssoldconncolor{ssblack}
+
+%% ^^A Initialization
+\newcount\sseqxstart \sseqxstart=0
+\newcount\sseqystart \sseqystart=0
+\newcount\sseqxstep \sseqxstep=2
+\newcount\sseqystep \sseqystep=2
+\newdimen\sseqentrysize \sseqentrysize=0.4cm
+\newif\ifssclipped
+
+\newtoks\sseqcmdlist
+\sseqcmdlist={}
+
+\def\currprefix{}
+
+\def\sseqcurrentname{}
+
+\long\def\ntimes#1#2{
+\ifnum#1>0
+ #2
+ \count0=#1
+ \advance\count0 by -1
+ \edef\tmpcnt{\the\count0}
+ \ntimes{\tmpcnt}{#2}
+\fi
+}
+
+\newif\ifforcondition
+
+\long\def\for#1=#2\to#3\do#4\od{
+#1=#2
+\loop
+\ifnum#1>#3\forconditionfalse\else\forconditiontrue\fi
+\ifforcondition
+ #4
+ \advance #1 by 1
+ \repeat
+}
+
+\def\putxyq#1{\toks0={#1}%
+ \edef\act{\noexpand\sseqcmdlist={\the\sseqcmdlist \the\toks0}}
+ \act
+}
+\def\putxy#1{%
+ \edef\act{\noexpand\sseqcmdlist={\the\sseqcmdlist #1}}
+ \act
+}
+
+\def\sseqwritecolor#1{
+\ifthenelse{\boolean{usescolor}}{
+ \putxy {[#1]}
+}{}
+}
+
+\def\sseqconcludeconnection{
+\sseqconncommand
+\setboolean{sseqhasopenconn}{false}
+}
+
+\def\dropvarname#1#2{\csname sseqdrop#1,#2\endcsname}
+
+\def\ifuniquedrop#1#2{
+\edef\tmpval{\dropvarname{#1}{#2}}
+\expandafter\ifx\tmpval1
+}
+
+\def\ifnodrop#1#2{
+\edef\tmpval{\dropvarname{#1}{#2}}
+\expandafter\ifx\tmpval\relax
+}
+
+\def\ssdroperrormsg#1#2{
+ \ifnodrop{#1}{#2}
+ \PackageError{sseq}{cannot open position (#1,#2): nothing dropped yet}{You cannot draw any connection until you have drawn the source.}
+ \else
+ \PackageError{sseq}{cannot open position (#1,#2): multiple drops}{You cannot specify this position by coordinates. Instead, name it.}
+ \fi
+}
+
+\def\ssopenposition#1#2{
+\ifuniquedrop{#1}{#2}
+ \def\sseqcurrentname{ss(#1,#2)1}
+ \putxy{"\sseqcurrentname"}
+\else \ssdroperrormsg{#1}{#2}
+\fi
+\setboolean{sseqhasfinishedpos}{false}
+}
+
+\newcommand{\ssassertsource}{
+\ifthenelse{\boolean{sseqhasfinishedpos}}{
+\ssopenposition{\the\sseqposx}{\the\sseqposy}
+}
+{}
+}
+
+\newcommand{\ssputsemicolon}{
+\putxy{;}
+\ifthenelse{\boolean{sseqcurrclip}}{
+ \setboolean{sseqprevclip}{true}}{
+ \setboolean{sseqprevclip}{false}}
+}
+
+\newcommand{\ssfinishpos}{
+\ifthenelse{\boolean{sseqhasfinishedpos}}{}{
+\setboolean{sseqhasfinishedpos}{true}
+\ssputsemicolon
+}
+\ifthenelse{\boolean{sseqhasopenconn}}
+{
+ \ssopenposition{\the\sseqposx}{\the\sseqposy}
+ \sseqconcludeconnection
+ \ifthenelse{\boolean{sseqhasfinishedpos}}{}{
+ \setboolean{sseqhasfinishedpos}{true}
+ \ssputsemicolon}
+}{}
+}
+
+\newcommand{\ssnewpos}{
+\ssfinishpos
+\setboolean{sseqhasfinishedpos}{false}
+}
+
+\def\ssifposinclippingregion#1#2{
+ \ssclippedtrue
+ \ifthenelse{\boolean{sseqclip}}{
+ \ifnum#1<\sseqxstart \ssclippedfalse \fi
+ \ifnum#1<\sseqxend \else \ssclippedfalse \fi
+ \ifnum#2<\sseqystart \ssclippedfalse \fi
+ \ifnum#2<\sseqyend \else \ssclippedfalse \fi
+ }{}
+ \ifssclipped
+}
+
+\def\sseqrearrange#1#2#3#4#5{
+\dimen0 = \csname sseqcoordx<#1,#2>#3\endcsname
+\dimen1 = \csname sseqcoordy<#1,#2>#3\endcsname
+\advance\dimen0 by #4
+\advance\dimen1 by #5
+\expandafter\edef\csname sseqcoordx<#1,#2>#3\endcsname{\the\dimen0}
+\expandafter\edef\csname sseqcoordy<#1,#2>#3\endcsname{\the\dimen1}
+}
+
+\def\sseqstacking#1#2#3{ % ^^A (xpos, ypos, number of previous drops)
+ \dimen5=\sseqentrysize
+ \divide\dimen5 by 4
+ \dimen6=\dimen5
+ \multiply\dimen6 by -1
+ \count11=0
+ \for\count10=1 \to #3 \do
+ \if1\csname sseqwillmove<#1,#2>\the\count10 \endcsname
+ \advance\count11 by 1
+ \expandafter\count\the\count11=\count10
+ \fi
+ \od
+ % ^^A Now count11 contains the number of previously dropped objects that have to be rearranged.
+ \ifcase\count11
+ % ^^A 0
+ \PackageError{sseq}{This can't happen!}{Internal error. Contact the author.}
+ \or % ^^A 1
+ \sseqrearrange{#1}{#2}{\the\count1}{\the\dimen6}{\the\dimen5}
+ \advance\sseqx by \dimen5
+ \advance\sseqy by \dimen6
+ \or % ^^A 2
+ \sseqrearrange{#1}{#2}{\the\count2}{0pt}{\the\dimen5}
+ \sseqrearrange{#1}{#2}{\the\count2}{0pt}{\the\dimen5}
+ \advance\sseqy by \dimen6
+ \or % ^^A 3
+ \sseqrearrange{#1}{#2}{\the\count3}{\the\dimen6}{0pt}
+ \advance\sseqx by \dimen5
+ \else
+ \PackageError{sseq}{Too many drops at (#1,#2)}{The sseq.sty algorithm can only place up to four independent drops in one position.}
+ \fi
+}
+
+\newcommand{\ssplacespecial}[4]{
+\ifthenelse{\boolean{sseqhasfinishedpos}}{}{
+ \ssputsemicolon
+}
+\setboolean{sseqhasfinishedpos}{false}
+\sseqx=\sseqentrysize
+\multiply\sseqx \sseqxdir
+\multiply\sseqx by #1
+\advance\sseqx by \sseqhalfentry
+\advance\sseqx by \sseqoffsetx
+\advance\sseqx by \sseqoffx
+\sseqy=\sseqentrysize
+\multiply\sseqy \sseqydir
+\multiply\sseqy by #2
+\advance\sseqy by \sseqhalfentry
+\advance\sseqy by \sseqoffsety
+\advance\sseqy by \sseqoffy
+\expandafter\def\expandafter\tmpname\expandafter{\csname sseqdrop#1,#2\endcsname}
+\ifnodrop{#1}{#2}
+\expandafter\def\tmpname{1}
+\else
+ \edef\setcnt{\noexpand\count0=\tmpname}
+ \setcnt
+ \sseqstacking{#1}{#2}{\tmpname}
+ \advance\count0 by 1
+ \expandafter\edef\tmpname{\the\count0}
+\fi
+\putxy{<\csname sseqcoordx<#1,#2>\tmpname\endcsname,\csname sseqcoordy<#1,#2>\tmpname \endcsname>}
+\expandafter\edef\csname sseqcoordx<#1,#2>\tmpname\endcsname{\the\sseqx}
+\expandafter\edef\csname sseqcoordy<#1,#2>\tmpname\endcsname{\the\sseqy}
+\expandafter\def\csname sseqwillmove<#1,#2>\tmpname\endcsname{1}
+\setboolean{sseqcurrclip}{true}
+\ssifposinclippingregion{#1}{#2}
+ \setboolean{sseqcurrclip}{false}
+ \putxy{*#3}
+ \sseqwritecolor{\ssplacecolor}
+ \putxy{#4}
+\fi
+\edef\sseqcurrentname{ss(#1,#2)\tmpname}
+\putxy{="\sseqcurrentname"}
+\ifthenelse{\boolean{sseqhasopenconn}}{\sseqconcludeconnection}{}
+}
+
+\newcommand{\ssplace}[3]{
+\ssplacespecial{#1}{#2}{}{{#3}}
+}
+
+\newcommand{\ssplaceboxed}[3]{
+ \ifthenelse{\boolean{usescolor}}{
+ \ssplacespecial{#1}{#2}{+<2pt>[F:\ssplacecolor]}{{#3}}
+ }{
+ \ssplacespecial{#1}{#2}{+<2pt>}{{#3}}
+ }
+}
+
+\newcommand{\ssplacecircled}[3]{
+\ifthenelse{\equal{#3}{1}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledone}}}{
+ \ifthenelse{\equal{#3}{2}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledtwo}}}{
+ \ifthenelse{\equal{#3}{3}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledthree}}}{
+ \ifthenelse{\equal{#3}{4}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledfour}}}{
+ \ifthenelse{\equal{#3}{5}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledfive}}}{
+ \ifthenelse{\equal{#3}{6}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledsix}}}{
+ \ifthenelse{\equal{#3}{7}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledseven}}}{
+ \ifthenelse{\equal{#3}{8}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcircledeight}}}{
+ \ifthenelse{\equal{#3}{9}}{
+ \ssplacespecial{#1}{#2}{}{[o]{\copy\sseqcirclednine}}}{
+ \ifthenelse{\boolean{usescolor}}{
+ \ssplacespecial{#1}{#2}{+<3pt>}{[o][F:\ssplacecolor]{#3}}
+ }{
+ \ssplacespecial{#1}{#2}{+<3pt>}{[o]{#3}}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+}
+
+\newcommand{\ssbull}[2]{
+\ifthenelse{\boolean{usescolor}}{
+ \ssplacespecial{#1}{#2}{+<1.1mm>[o][F:\ssplacecolor]}{{}*[\ssplacecolor]\noexpand\frm{*}}
+ }{
+ \ssplacespecial{#1}{#2}{+<1.1mm>[o]}{{}*\noexpand\frm{*}}
+ }
+}
+
+\newcommand{\sscirc}[2]{
+\ssplacespecial{#1}{#2}{}{[o]-={\circ}}
+}
+
+\newcommand{\ssglobalname}[1]{\currprefix#1}
+
+\def\sssetglobalname#1{
+ \ssassertsource
+ \expandafter\edef\csname sseqpos<#1>\endcsname{\sseqcurrentname}
+ \expandafter\edef\csname sseqx<#1>\endcsname{\the\sseqposx}
+ \expandafter\edef\csname sseqy<#1>\endcsname{\the\sseqposy}
+}
+\newcommand{\ssmoveto}[2]{
+\ssfinishpos
+\sseqposx=#1
+\sseqposy=#2
+\ssifposinclippingregion{#1}{#2}
+ \setboolean{sseqcurrclip}{false}
+\fi
+}
+\newcommand{\ssmove}[2]{
+\count0=\sseqposx
+\advance\count0 by #1
+\count1=\sseqposy
+\advance\count1 by #2
+\ssmoveto{\count0}{\count1}
+}
+\newcommand{\ssdrop}[1]{
+\ssplace {\the\sseqposx} {\the\sseqposy} {#1}
+}
+\newcommand{\ssdropbull}{\ssbull {\the\sseqposx} {\the\sseqposy}}
+\newcommand{\ssdropboxed}[1]{
+\ssplaceboxed {\the\sseqposx} {\the\sseqposy} {#1}
+}
+\newcommand{\ssdropcircled}[1]{
+\ssplacecircled {\the\sseqposx} {\the\sseqposy} {#1}
+}
+\def\ssname#1{
+ \sssetglobalname{\ssglobalname{#1}}
+}
+\newcommand{\ssgoto}[1]{
+\ssabsgoto{\ssglobalname{#1}}
+}
+\newcommand{\ssprefix}[1]{
+ \edef\currprefix{\currprefix#1}
+}
+\newcommand{\ssresetprefix}{\def\currprefix{}}
+\newcommand{\ssabsgoto}[1]{
+\ssnewpos
+\edef\ssoldconncolor{\ssconncolor}
+\putxy{"\csname sseqpos<#1>\endcsname"}
+\sseqposx=\csname sseqx<#1>\endcsname
+\sseqposy=\csname sseqy<#1>\endcsname
+\ssifposinclippingregion{\the\sseqposx}{\the\sseqposy}
+ \setboolean{sseqcurrclip}{false}
+\fi
+}
+\newcommand{\ssdroplabel}[2][U]{
+\ssassertsource
+\ssifposinclippingregion{\the\sseqposx}{\the\sseqposy}
+ \putxy{="prev"}
+ \ifthenelse{\boolean{usescolor}}{
+ \ifthenelse{\equal{#1}{U}}{
+ \putxy{+U*[\sslabelcolor]!D{#2}}}{}
+ \ifthenelse{\equal{#1}{LU}}{
+ \putxy{+LU*[\sslabelcolor]!RD{#2}}}{}
+ \ifthenelse{\equal{#1}{RU}}{
+ \putxy{+RU*[\sslabelcolor]!LD{#2}}}{}
+ \ifthenelse{\equal{#1}{R}}{
+ \putxy{+R*[\sslabelcolor]!L{#2}}}{}
+ \ifthenelse{\equal{#1}{L}}{
+ \putxy{+L*[\sslabelcolor]!R{#2}}}{}
+ \ifthenelse{\equal{#1}{D}}{
+ \putxy{+D*[\sslabelcolor]!U{#2}}}{}
+ \ifthenelse{\equal{#1}{LD}}{
+ \putxy{+LD*[\sslabelcolor]!RU{#2}}}{}
+ \ifthenelse{\equal{#1}{RD}}{
+ \putxy{+RD*[\sslabelcolor]!LU{#2}}}{}
+ }{
+ \ifthenelse{\equal{#1}{U}}{
+ \putxy{+U*!D{#2}}}{}
+ \ifthenelse{\equal{#1}{LU}}{
+ \putxy{+LU*!RD{#2}}}{}
+ \ifthenelse{\equal{#1}{RU}}{
+ \putxy{+RU*!LD{#2}}}{}
+ \ifthenelse{\equal{#1}{R}}{
+ \putxy{+R*!L{#2}}}{}
+ \ifthenelse{\equal{#1}{L}}{
+ \putxy{+L*!R{#2}}}{}
+ \ifthenelse{\equal{#1}{D}}{
+ \putxy{+D*!U{#2}}}{}
+ \ifthenelse{\equal{#1}{LD}}{
+ \putxy{+LD*!RU{#2}}}{}
+ \ifthenelse{\equal{#1}{RD}}{
+ \putxy{+RD*!LU{#2}}}{}
+ }
+ \putxy{;"prev"}
+\fi
+}
+\newcommand{\ssdropextension}{
+\ssassertsource
+\expandafter\def\expandafter\tmpname\expandafter{\csname sseqdrop\the\sseqposx,\the\sseqposy\endcsname}
+\edef\setcnt{\noexpand\count0=\tmpname}
+\setcnt
+\advance\count0 by 1
+\expandafter\edef\tmpname{\the\count0}
+\setboolean{sseqcurrclip}{true}
+\ssifposinclippingregion{\the\sseqposx}{\the\sseqposy}
+ \setboolean{sseqcurrclip}{false}
+ \putxy{*+<1mm,1mm>\noexpand\frm{}*}
+ \sseqwritecolor{\ssplacecolor}
+ \putxyq{\cir{}}
+\fi
+\edef\sseqcurrentname{ss(\the\sseqposx,\the\sseqposy)\tmpname}
+\putxy{="\sseqcurrentname"}
+\ifthenelse{\boolean{sseqhasopenconn}}{\sseqconcludeconnection}{}
+}
+
+\newcommand{\ssprepareline}[2]{
+\ifthenelse{\boolean{sseqhasfinishedpos}}{
+ \ssopenposition{\the\sseqposx}{\the\sseqposy}
+}{}
+\advance\sseqposx by #1
+\advance\sseqposy by #2
+\setboolean{sseqhasopenconn}{true}
+\edef\ssoldconncolor{\ssconncolor}
+}
+
+\newcommand{\sspreparevoidline}[2]{
+\ifthenelse{\boolean{sseqhasfinishedpos}}{
+ \ssopenposition{\the\sseqposx}{\the\sseqposy}
+}{}
+\ifthenelse{\boolean{sseqhasfinishedpos}}{}{
+ \ssputsemicolon
+}
+\setboolean{sseqhasfinishedpos}{false}
+\sseqx=\sseqentrysize
+\multiply\sseqx \sseqxdir
+\multiply\sseqx by #1
+\sseqy=\sseqentrysize
+\multiply\sseqy \sseqydir
+\multiply\sseqy by #2
+\putxy{p+<\the\sseqx,\the\sseqy>}
+\edef\ssoldconncolor{\ssconncolor}
+}
+
+\def\sseqifconninclippingregion{%
+\ifthenelse{\boolean{sseqcurrclip}\and\boolean{sseqprevclip}}{
+ \ssclippedfalse}{
+ \ssclippedtrue
+ }
+ \ifssclipped
+}
+\newcommand{\ssstroke}{
+\ssassertsource
+\sseqifconninclippingregion
+ \putxy{**} \sseqwritecolor{\ssoldconncolor}
+ \putxyq{\dir{-}}
+\fi
+}
+\newcommand{\sscurve}[1]{
+\ssassertsource
+\sseqifconninclippingregion
+ \putxy{**} \sseqwritecolor{\ssoldconncolor}
+ \putxyq{\crv{:(.5,#1)}}
+\fi
+}
+\newcommand{\ssdashedstroke}{
+\ssassertsource
+\sseqifconninclippingregion
+ \putxy{**} \sseqwritecolor{\ssoldconncolor}
+ \putxyq{\dir{--}}
+\fi
+}
+\newcommand{\ssdashedcurve}[1]{
+\ssassertsource
+\sseqifconninclippingregion
+ \putxy{**} \sseqwritecolor{\ssoldconncolor}
+ \putxyq{\crv{~**\dir{--}:(.5,#1)}}
+\fi
+}
+\newcommand{\ssarrowhead}{
+\sseqifconninclippingregion
+ \putxy {?>*} \sseqwritecolor{\ssoldconncolor}
+ \putxyq{\dir{>}}
+\fi
+}
+\newcommand{\ssline}[2]{
+\ssprepareline{#1}{#2}
+\def\sseqconncommand{\ssstroke}
+}
+\newcommand{\sscurvedline}[3]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\sscurve{#3}}
+}
+\newcommand{\ssdashedline}[2]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\ssdashedstroke}
+}
+\newcommand{\sscurveddashedline}[3]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\ssdashedcurve{#3}}
+}
+\newcommand{\ssarrow}[2]{
+\ssprepareline{#1}{#2}
+\def\sseqconncommand{\ssstroke\ssarrowhead}
+}
+\newcommand{\sscurvedarrow}[3]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\sscurve{#3}\ssarrowhead}
+}
+\newcommand{\ssdashedarrow}[2]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\ssdashedstroke\ssarrowhead}
+}
+\newcommand{\sscurveddashedarrow}[3]{
+\ssprepareline{#1}{#2} \def\sseqconncommand{\ssdashedcurve{#3}\ssarrowhead}
+}
+
+\newcommand{\ssvoidline}[2]{
+\sspreparevoidline{#1}{#2}
+\ssstroke
+\putxy{,p}
+}
+\newcommand{\ssvoidarrow}[2]{
+\sspreparevoidline{#1}{#2}
+\ssstroke\ssarrowhead
+\putxy{,p}
+}
+\newcommand{\ssbullstring}[3]{
+\ifnum#3>0
+ \ifnum#3=1
+ \ssdropbull
+ \else
+ \ssdropbull
+ \ssline{#1}{#2}
+ \count0=#3
+ \advance\count0 by -1
+ \edef\sseqbullcnt{\the\count0}
+ \ssbullstring{#1}{#2}{\sseqbullcnt}
+\fi\fi
+}
+\newcommand{\ssinfbullstring}[3]{
+\ssbullstring{#1}{#2}{#3}
+\ssvoidarrow{#1}{#2}
+}
+\def\sseqdrawgrid#1#2{
+\sseqi=0
+\sseqj=0
+\loop
+ \sseqy=\sseqentrysize
+ \multiply \sseqy by \sseqj
+ \advance \sseqy by \sseqlabelbarwidth
+ %
+ \putxy{<\the\sseqlabelbarwidth,\the\sseqy>;<\the\sseqx,\the\sseqy>**}
+ \sseqwritecolor{sseqgr}
+ \putxyq{\dir {.},}
+ \advance\sseqj 1
+\ifnum\sseqj>#2 \else \repeat
+\sseqy = \sseqentrysize
+\multiply \sseqy by #2
+\advance \sseqy by \sseqlabelbarwidth
+\loop
+ \sseqx=\sseqentrysize
+ \multiply \sseqx by \sseqi
+ \advance \sseqx by \sseqlabelbarwidth
+ %
+ \putxy{<\the\sseqx,\the\sseqlabelbarwidth>;<\the\sseqx,\the\sseqy>**}
+ \sseqwritecolor{sseqgr}
+ \putxyq{\dir {.},}
+ \advance \sseqi 1
+\ifnum\sseqi>#1 \else \repeat
+}
+\def\sseqdrawlabels#1#2{
+\sseqi=\sseqxstart
+\sseqposx=\sseqxstart
+\multiply \sseqposx by -1
+\advance \sseqposx \sseqi
+\count0=\sseqxdir
+\multiply\count0 by \sseqxdir
+\multiply\count0 by \sseqxstep
+\count1=\sseqydir
+\multiply\count1 by \sseqydir
+\multiply\count1 by \sseqystep
+\loop
+ \sseqxx=\sseqentrysize
+ \multiply\sseqxx by \sseqposx
+ \advance\sseqxx by \sseqhalfentry
+ \advance\sseqxx by \sseqlabelbarwidth
+ \putxy { <\the\sseqxx,0pt>*}
+ \putxyq{\txt\sseqlabelfont}
+ \putxy {{\the\sseqi},}
+ \advance\sseqi by \sseqxstep
+ \advance\sseqposx by \count0
+\ifnum\sseqposx<#1 \repeat
+\sseqj=\sseqystart
+\sseqposy=\sseqj
+\multiply\sseqposy by -1
+\advance\sseqposy by \sseqj
+\loop
+ \sseqyy=\sseqentrysize
+ \multiply\sseqyy by \sseqposy
+ \advance\sseqyy by \sseqhalfentry
+ \advance\sseqyy by \sseqlabelbarwidth
+ \putxy { <0pt,\the\sseqyy>*}
+ \putxyq {\txt\sseqlabelfont}
+ \putxy{{\the\sseqj},}
+ \advance\sseqj by \sseqystep
+ \advance\sseqposy by \count1
+\ifnum\sseqposy<#2\repeat
+}
+
+\newenvironment{sseq}[2]{
+\begingroup
+\countdef\sseqxend=150 \sseqxend=\sseqxstart \advance\sseqxend by #1
+\countdef\sseqyend=151 \sseqyend=\sseqystart \advance\sseqyend by #2
+\dimendef\sseqoffx=200 \sseqoffx=0pt
+\dimendef\sseqoffy=201 \sseqoffy=0pt
+\dimendef\sseqoffsetx=202
+\dimendef\sseqoffsety=203
+\countdef\sseqi=152 \sseqi=0
+\countdef\sseqj=153 \sseqj=0
+\countdef\sseqxdir=154
+\countdef\sseqposx=155
+\countdef\sseqposy=156
+\countdef\sseqydir=157
+\dimendef\sseqlabelbarwidth=204
+\dimendef\sseqhalfentry=205
+\dimendef\sseqx=206
+\dimendef\sseqy=207
+\dimendef\sseqxx=208
+\dimendef\sseqyy=209
+\dimendef\sseqlabelwidth=210
+\dimendef\sseqrightlabelwidth=211
+\dimendef\sseqlabelsize=212
+
+\ifnum\sseqxstep<0 \sseqxdir=-1 \else \sseqxdir=1 \fi
+\ifnum\sseqystep<0 \sseqydir=-1 \else \sseqydir=1 \fi
+\def\sseqlabelfontsize{12}
+\edef\sseqsavecnto{\the\count0}
+\edef\sseqsavecnti{\the\count1}
+\edef\sseqsavecntii{\the\count2}
+\edef\sseqsavecntiii{\the\count3}
+\edef\sseqsavecntiv{\the\count4}
+\edef\sseqsavecntv{\the\count5}
+\edef\sseqsavecntvi{\the\count6}
+\edef\sseqsavecntvii{\the\count7}
+\edef\sseqsavecntviii{\the\count8}
+\edef\sseqsavecntix{\the\count9}
+\sseqlabelwidth=14pt
+\sseqrightlabelwidth=10pt
+\ifnum\sseqxstart<0
+ \advance\sseqlabelwidth by 8pt
+ \ifnum\sseqxstart<-9
+ \advance\sseqlabelwidth by 6pt
+ \ifnum\sseqxstart<-99
+ \advance\sseqlabelwidth by 6pt
+ \fi
+ \fi
+\fi
+\ifnum\sseqxend>10
+ \advance\sseqrightlabelwidth by 6pt
+ \ifnum\sseqxend>100
+ \advance\sseqrightlabelwidth by 6pt
+ \fi
+\fi
+\ifnum\sseqrightlabelwidth>\sseqlabelwidth
+ \sseqlabelwidth=\sseqrightlabelwidth
+\fi
+\sseqlabelsize=10pt
+\count0=\sseqentrysize
+\multiply \count0 by 160
+\divide \count0 by \sseqlabelwidth
+\multiply \sseqlabelsize by \count0
+\divide \sseqlabelsize by 100
+\ifdim\sseqlabelsize<11pt
+ \def\sseqlabelfontsize{10}
+ \ifdim\sseqlabelsize<9.5pt
+ \def\sseqlabelfontsize{9}
+ \ifdim\sseqlabelsize<8.5pt
+ \def\sseqlabelfontsize{8}
+ \fi
+ \fi
+\fi
+\edef\sz{\the\sseqlabelsize}
+\putxyq {\font \sseqlabelfont = cmtt}
+\putxy{\sseqlabelfontsize\space at \the\sseqlabelsize\space}
+\sseqlabelbarwidth=\sseqlabelsize
+\divide\sseqlabelbarwidth by 2
+\dimen0=\sseqentrysize
+\multiply\dimen0 by -1
+\multiply\dimen0 by \sseqxdir
+\multiply\dimen0 by \sseqxstart
+\sseqoffsetx=\sseqlabelbarwidth
+\advance\sseqoffsetx by \dimen0
+\dimen0=\sseqentrysize
+\multiply\dimen0 by -1
+\multiply\dimen0 by \sseqydir
+\multiply\dimen0 by \sseqystart
+\sseqoffsety=\sseqlabelbarwidth
+\advance\sseqoffsety by \dimen0
+\sseqhalfentry=\sseqentrysize
+\divide\sseqhalfentry by 2
+\sseqx=\sseqentrysize
+\multiply \sseqx by #1
+\advance \sseqx by \sseqlabelbarwidth
+\sseqy=\sseqentrysize
+\multiply \sseqy by \sseqj
+\advance \sseqy by \sseqlabelbarwidth
+\sseqxx=\sseqx
+\sseqyy=\sseqy
+\advance\sseqxx by \sseqhalfentry
+\advance\sseqyy by \sseqhalfentry
+\putxyq {\xy}
+\sseqdrawgrid{#1}{#2}
+\sseqdrawlabels{#1}{#2}
+\sseqposx=0
+\sseqposy=0
+}
+{
+\relax
+\ssfinishpos
+\putxyq{\endxy}
+\bigskip
+\edef\lst{\the\sseqcmdlist}
+\ifthenelse{\boolean{debug}}{\show\lst}{}
+\count0=\sseqsavecnto
+\count1=\sseqsavecnti
+\count2=\sseqsavecntii
+\count3=\sseqsavecntiii
+\count4=\sseqsavecntiv
+\count5=\sseqsavecntv
+\count6=\sseqsavecntvi
+\count7=\sseqsavecntvii
+\count8=\sseqsavecntviii
+\count9=\sseqsavecntix
+\the\sseqcmdlist
+\endgroup
+\bigskip
+}
+\endinput
+%%
+%% End of file `sseq.sty'.