%%
%% This is file `circ.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% circ.dtx  (with options: `code')
%% CIRC is a LaTeX package to typeset circuit and optics diagrams.
%% Copyright (C) 1997,1998,2003  Sebastian Tannert and Andreas Tille
%% 
%%   This program is free software; you can redistribute it and/or modify
%%   it under the terms of the GNU General Public License as published by
%%   the Free Software Foundation; either version 2 of the License, or
%%   (at your option) any later version.
%% 
%%   This program is distributed in the hope that it will be useful,
%%   but WITHOUT ANY WARRANTY; without even the implied warranty of
%%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%%   GNU General Public License for more details.
%% 
%%   You should have received a copy of the GNU General Public License
%%   along with this program; if not, write to the Free Software
%%   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
%% 
%% For error reports concerning UNCHANGED versions of this file no
%% more than one year old, see CIRC.DVI after installation.
%% If installation fails search thru this file for 'bug'.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{circ}
    [1997/04/23 v1.0d for typeset circuit diagrams]
\DeclareOption*{\InputIfFileExists{\CurrentOption.def}{}%
  {\PackageError{CIRC}{File \CurrentOption.def not found.}%
                {Check spelling or think about the
                location of file.\MessageBreak
                I tried to load macros for the CIRC package.}}}
\def\freecirc{\chardef\CIRCinternals\the\catcode`\*\catcode`\*=11
              \chardef\cc@lb\the\catcode`\[
              \chardef\cc@rb\the\catcode`\]
              \chardef\cc@at\the\catcode`\@
              \catcode`\[=11\catcode`\]=11\catcode`\@=11 }
\def\protectcirc{\catcode`\[=\cc@lb\catcode`\]=\cc@rb\catcode`\@=\cc@at
                 \catcode`\*=\CIRCinternals\relax}
\freecirc
\newif\ifshowpoints
\showpointsfalse
\newif\iflab*
\lab*true
\newif\ifval*
\val*true
\newif\ifld*
\ld*false
\newif\ifcc*
\cc*false
\newif\ifpin
\pintrue
\newif\ifxoutofgrid
\newif\ifyoutofgrid
\xoutofgridfalse
\youtofgridfalse
\newif\ifcen*
\cen*false
\newif\ifhvcen*
\hvcen*false
\newif\ifcheck*
\newdimen\X*max
\newdimen\X*min
\newdimen\*X*
\newdimen\*Y*
\newdimen\**X
\newdimen\**Y
\newdimen\***X
\newdimen\***Y
\newbox\*bbox
\newbox\box*
\newdimen\ic*
\newdimen\ht*
\newdimen\wd*
\newdimen\dp*
\newcount\cc*
\newdimen\*spc
\newtoks\ldd*   %linke untere Beschriftung
\newtoks\rud*   %rechte obere Beschriftung
\newtoks\llpos*
\newtoks\ldpos*
\newtoks\rlpos*
\newtoks\rdpos*
\newtoks\ulpos*
\newtoks\udpos*
\newtoks\dlpos*
\newtoks\ddpos*
\newcount\cnta*
\newcount\cntb*
\newtoks\name*  %Bauelementname
\newtoks\ld*pin   %Bezeichnung linker Anschlu"s
\newtoks\ru*pin   % ...
\newtoks\m*pin    % ...
\newtoks\rmacros
\newdimen\outerspace
\newtoks\*Ilist
\newtoks\*Olist

\newdimen\pin*spc
\newdimen\pin*ind
\newdimen\io*ind
\newdimen\mid*ind
\newdimen\pinnum*spc
\def\CIRCredef{}
\def\safedef#1{\expandafter\ifx\csname#1\endcsname\relax
\toks0{\expandafter\def\csname#1\endcsname}\else
\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
\expandafter\expandafter
{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
\the\toks0}
\def\safedefs#1{\expandafter\ifx\csname#1\endcsname\relax
\toks0{\expandafter\def\csname#1\endcsname}\else
\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
\expandafter\expandafter
{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
\the\toks0 }
\def\getc*#1 {\advance\cc* by #1%
  \ifcc*
     \toks0\ldd*\ldd*\rud*\rud*\toks0
     \ifval*
       \iflab*\val*true\else\val*false\fi
       \lab*true
     \else
       \iflab*\val*true\else\val*false\fi
      \lab*false
     \fi
  \fi
  \global\setbox\box*=\hbox{\char\cc*\/\global\ic*=\lastkern\unkern}%
  \global\ht*\ht\box*\global\wd*\wd\box*\global\dp*\dp\box*}
\def\check*max#1{\dimen0=#1\advance\dimen0\*X*
               \ifdim\dimen0>\X*max\global\X*max\dimen0\fi}
\def\check*X{\ifcheck*\ifdim\*X*<\X*min\global\X*min\*X*\fi
                      \ifdim\*X*>\X*max\global\X*max\*X*\fi\fi}
\def\check*min#1{\dimen0=-#1\advance\dimen0\*X*
               \ifdim\dimen0<\X*min\global\X*min\dimen0\fi}
\def\check*#1{\check*min{#1}\check*max{#1}}
\def\check*cen{\ifcen*\errhelp{Use `\hcenterto' or `\vcenterto'.}%
  \errmessage{You can't use `\string\centerto' to center `\the\name*'}\fi}
\def\put*box{\hbox to 0pt{\kern\*X*\raise\*Y*\box\*bbox\hss}}
\def\hc*#1{\hbox to 0pt{\hss#1\hss}}
\def\vc*#1{\vbox to 0pt{\vss#1\vss}}
\def\tlap#1{\vbox to 0pt{\vss#1}}
\def\blap#1{\vbox to 0pt{#1\vss}}
\def\ac*#1{\vc*{\hc*{#1}}}
\def\reset*ifs{\ld*false\cen*false\hvcen*false\lab*true\val*true\cc*false}
\def\store*XY#1{\ifshowpoints\message{#1}\fi
  \expandafter\xdef\csname#1\endcsname{\*X*\the\*X*\*Y*\the\*Y*}}
\def\save*XY{\**X\*X*\**Y\*Y*}
\def\save*xy{\***X\*X*\***Y\*Y*}
\def\restore*XY{\*X*\**X\*Y*\**Y}
\def\restore*xy{\*X*\***X\*Y*\***Y}
\def\diff*XY{\advance\**X-\*X*\advance\**Y-\*Y*}
\def\centerto#1 {\cen*true\save*XY\frompin#1: }
\def\hcenterto#1 {\hvcen*true\**Y\*Y*\frompin#1: \*Y*\**Y}
\def\vcenterto#1 {\hvcen*true\**X\*X*\frompin#1: \*X*\**X}
\def\do*Ilist{\ifshowpoints\message{|<}\fi
  \check*true
  \save*XY\the\*Ilist\ifshowpoints\message{>|}\fi\restore*XY\*Ilist={}}
\def\shift*Ilist#1{\ifshowpoints\message{|<}\fi
  \check*false
  \save*XY\the\*Ilist\frompin{\the\name*#1}
  \ifshowpoints\message{| shift \the\name*#1 |}\fi
  \advance\**X\**X\advance\**X-\*X*\*X*\**X
  \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
  \check*true
  \save*XY\the\*Ilist\restore*XY
  \ifshowpoints\message{>|}\fi\*Ilist={}}
\def\shift*IOlist#1{\ifshowpoints\message{|<}\fi
  \check*false
  \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
  \frompin{\the\name*#1}
  \ifshowpoints\message{| shift \the\name*#1 |}\fi
  \advance\**X\**X\advance\**X-\*X*\*X*\**X
  \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
  \check*true
  \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
  \restore*XY\ifshowpoints\message{>|}\fi\*Ilist={}\*Olist={}}
\def\Ladd*x#1#2{\dimen9=#2%
  \edef\next{{\the#1\advance\*X*\the\dimen9 }}%
  \global#1\next}
\def\Ladd*y#1#2{\dimen9=#2%
  \edef\next{{\the#1\advance\*Y*\the\dimen9 }}%
  \global#1\next}
\def\Lstore*#1#2{\edef\next{{\the#1\noexpand\store*XY{\the\name*#2}}}%
  \global#1\next}
\def\Lstopos*#1{\global#1\expandafter{\the#1\save*xy}}
\def\Lrstpos*#1{\global#1\expandafter{\the#1\restore*xy}}
\def\LX*check#1{\global#1\expandafter{\the#1\check*X}}
\def\add*x{\Ladd*x\*Ilist}
\def\add*y{\Ladd*y\*Ilist}
\def\store*{\Lstore*\*Ilist}
\def\stopos*{\Lstopos*\*Ilist}
\def\rstpos*{\Lrstpos*\*Ilist}
\def\X*check{\LX*check\*Ilist}
\def\Cadd*#1{\Ladd*y#1{-\pin*spc}}
\def\Cstore*#1#2{\ifx{#2}*\else\Lstore*#1{#2}\fi}
\def\frompin#1 {\expandafter\ifx\csname#1\endcsname\relax
  \errhelp{Check spelling! Look up in the description of circuits.}%
  \errmessage{Point >#1< is not defined}\else\csname#1\endcsname\fi}
\let\atpin\frompin
\def\h*twopins#1{\getc*#1 \ifcen*\*Y*\**Y\hvcen*true\fi
\wd\box*=.5\wd*
\advance\ht*\*spc
\X*check\store*{\the\ld*pin}\add*x{.5\wd*}\store*:\add*x{.5\wd*}%
\store*{\the\ru*pin}\X*check
\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
\labelfont
\setbox0=\hbox{\the\rud*}\setbox1=\hbox{\the\ldd*}%
\**X\*X*\advance\*X*.5\wd*
\iflab*\check*{.5\wd0}\fi%
\ifval*\check*{.5\wd1}\fi%
\*X*\**X
\setbox\*bbox=\hbox{\box\box*
  \iflab*\raise\ht*\hc*{\unhbox0}\fi
  \ifval*\lower\dp*\vtop{\kern\*spc\hc*{\unhbox1}}\fi
  \add*cmds}%
\put*box
\ifld*\else\advance\*X*\wd*\fi\reset*ifs}
\def\v*twopins#1{\getc*#1 \ifcen*\*X*\**X\hvcen*true\fi
\labelfont
\setbox0=\hbox{\ifval*\the\ldd*\kern\*spc\fi\kern\dp*}\dimen1\wd0
\setbox1=\hbox{\kern\wd*\iflab*\kern\*spc\the\rud*\fi}\dimen0\wd1
\dp0=0pt\dp1=0pt
\wd\box*=0pt\dp\box*=0pt
\setbox\*bbox=\hbox{\box\box*
  \raise.5\ht*\hbox{\vc*{\hbox{\llap{\box0}\rlap{\box1}}}\add*cmds}}%
\store*{\the\ld*pin}\add*y{.5\ht*}\store*:\add*y{.5\ht*}\store*{\the\ru*pin}%
\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
\check*X
\check*max{\dimen0}%
\check*min{\dimen1}%
\put*box
\ifld*\else\advance\*Y*\ht*\fi\reset*ifs}
\def\ii*#1 {\if#1h\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
            \if#1v\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
            \if#1u\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
            \if#1d\ld*pin{b}\ru*pin{t}\ld*true\v*twopins1\relax\else
            \if#1l\ld*pin{l}\ru*pin{r}\ld*true\h*twopins0\relax\else
            \if#1r\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
                  \errhelp{Direction >h<, >v<, >l<, >u<, >r< or >d< expected.}%
                  \errmessage{Bad direction specified! You typed:>#1<.}%
                  \fi\fi\fi\fi\fi\fi}
\def\change*pins{\toks0\ld*pin\ld*pin\ru*pin\ru*pin\toks0}
\def\CiRCl{1}\def\CiRCr{2}\def\CiRCu{3}\def\CiRCd{4}
\def\CiRCL{5}\def\CiRCR{6}\def\CiRCU{7}\def\CiRCD{8}
\def\CIRCiErr{\PackageError{CIRC}{Internal Error}%
              {You are great, please send all files to the author and wait for
               answer.}}
\def\iv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
               \ifnum\cnta*=0
               \PackageError{CIRC}{Bad direction}%
                 {Please check spelling}\fi
               \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
                 \ifcase\cnta*
                 \CIRCiErr\or\<\change*pins\h*twopins2\relax
                               \or\h*twopins0\relax
                               \or\v*twopins1\relax
                               \or\change*pins\<\v*twopins3\relax\else
                 \PackageError{CIRC}{Bad direction}%
                   {Please check spelling, only [l r u d] expected}\fi\or
                 \ifcase\cnta*
                 \CIRCiErr\or\<\h*twopins0\relax
                          \or\change*pins\h*twopins2\relax
                          \or\change*pins\v*twopins3\relax
                          \or\<\v*twopins1\relax\else
                 \PackageError{CIRC}{Bad direction}%
                   {Please check spelling, only [l r u d] expected}\fi\fi}
\def\iviv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
               \ifnum\cnta*=0
               \PackageError{CIRC}{Bad direction}%
                 {Please check spelling}\fi
               \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
                 \ifcase\cnta*
                 \CIRCiErr\or\<\change*pins\h*twopins6\relax
                          \or\h*twopins0\relax
                          \or\v*twopins5\relax
                          \or\change*pins\<\v*twopins3\relax
                          \or\<\change*pins\h*twopins2\relax
                          \or\h*twopins4\relax
                          \or\v*twopins1\relax
                          \or\change*pins\<\v*twopins7\relax\fi\or
                 \ifcase\cnta*
                 \CIRCiErr\or\<\h*twopins0\relax
                          \or\change*pins\h*twopins6\relax
                          \or\change*pins\v*twopins3\relax
                          \or\<\v*twopins5\relax
                          \or\<\h*twopins4\relax
                          \or\change*pins\h*twopins2\relax
                          \or\change*pins\v*twopins7\relax
                          \or\<\v*twopins1\relax\fi\fi}
\def\lviii*#1{\store*{\the\m*pin}\X*check
              \add*x\wd*\stopos*\add*y{-\dp*}\store*{\the\ld*pin}\X*check
              \rstpos*\add*y\ht*\store*{\the\ru*pin}\rstpos*
              \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
              \rstpos*\add*x\ic*\X*check
              \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
              \setbox\*bbox=\hbox{\labelfont
                \the\llpos*\box\box*\the\ldpos*}\put*box}
\def\rviii*#1{\store*{\the\m*pin}\X*check
              \add*x{-\wd*}\stopos*\add*y\ht*\store*{\the\ru*pin}\X*check
              \rstpos*\add*y{-\dp*}\store*{\the\ld*pin}\rstpos*
              \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
              \rstpos*\add*x{-\ic*}\X*check
              \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
              \setbox\*bbox=\hbox{\labelfont
                \the\rdpos*\box\box*\the\rlpos*}\put*box}
\def\dviii*#1{\store*{\the\m*pin}%
              \add*y\dp*\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
              \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
              \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
              \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
              \wd\box*=0pt\dp\box*=0pt
              \setbox\*bbox=\hbox{\labelfont
                \the\dlpos*\box\box*\the\ddpos*}\put*box}
\def\uviii*#1{\store*{\the\m*pin}%
              \add*y{-\ht*}\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
              \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
              \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
              \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
              \wd\box*=0pt\ht\box*=0pt
              \setbox\*bbox=\hbox{\labelfont
                \the\ulpos*\box\box*\the\udpos*}\put*box}
\def\viii*#1 #2 {\check*cen
                 \if#2l            \getc*0 \lviii*{#1}\else
                 \if#2r            \getc*1 \rviii*{#1}\else
                 \if#2d            \getc*3 \dviii*{#1}\else
                 \if#2u            \getc*2 \uviii*{#1}\else
                 \if#2L\change*pins\getc*4 \lviii*{#1}\else
                 \if#2R\change*pins\getc*5 \rviii*{#1}\else
                 \if#2D\change*pins\getc*7 \dviii*{#1}\else
                 \if#2U\change*pins\getc*6 \uviii*{#1}\else
                 \errhelp{Direction >l<, >r<, >u<, >d<, >L<, >R<, >U< or >D<
                          expected.}%
                 \errmessage{Bad direction >#2<}\fi\fi\fi\fi\fi\fi\fi\fi
                 \reset*ifs}
\def\CIRCpintoN#1{\if\the\ld*pin#1 1\else
                   \if\the\ru*pin#1 2\else
                    \if\the\m*pin#1 3\else
                      \PackageError{CIRC}{Bad pin name}%
                      {Please check spelling or look up in the documentation}
\fi\fi\fi}
\def\cdef#1 #2 #3#4 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\cc*#4 #3\ii*}}
\def\cdefiv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\m*pin{@}%
   \ld*pin{#5}\ru*pin{#6}\cc*#4 #3\iv*}}
\def\cdefivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
   \cc*#3 #2\iv*}}
\def\cdefiviv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\ru*pin{#6}\m*pin{@}%
   \cc*#4 #3\iviv*}}
\def\cdefivivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
   \cc*#3 #2\iviv*}}
\def\cdefNL#1 #2#3 {\safedef{#1}##1 ##2 {%
   \name*{#1##1}\rud*{}\ldd*{##2}\cc*#3 #2\ii*}}
\def\cdefviii#1 #2 #3#4 #5 #6 #7 {\safedef{#1}##1 ##2 {\name*{#1##1}%
   \rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#4 #3\viii*}}
\def\cwdef#1 #2 {\safedef{#1}##1 ##2 {\cc*#2
                 \cnta*##1\toks2{}\toks4{}\dimen2=##1em\test*xygrid
                 \csname line*##2\endcsname}}
\def\black*boxii#1 #2 #3 #4 #5 #6 #7 {\check*cen
  \if#7h\getc*0
  \store*{P1}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
  \add*y\ht*\store*{P4}\rstpos*\add*y{-\dp*}\store*{P2}\rstpos*
  \add*x{.5\wd*}\X*check\store*{P3}%
  \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
  \setbox\*bbox=\hbox{\ifpin\pinnumberfont
    \setbox0=\hbox{#3\kern\*spc}\check*min{\wd0}%
    \raise\pinnum*spc\llap{#3\kern\*spc}%
    \setbox0=\hbox{\kern\*spc\kern\wd*#5}\check*max{\wd0}\wd0=0pt
    \raise\pinnum*spc\box0
    \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#6}\check*max{\wd0}\wd0=0pt
    \dimen0\ht*\advance\dimen0\*spc
    \raise\dimen0\box0
    \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#4}\check*max{\wd0}\wd0=0pt
    \dimen0\dp*\advance\dimen0\*spc
    \lower\dimen0\vtop{\kern0pt\box0}\fi
    \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
  \else\if#7v\getc*1
  \store*{P4}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
  \add*y\ht*\store*{P3}\rstpos*\add*y{-\dp*}\store*{P1}\rstpos*
  \add*x{.5\wd*}\X*check\store*{P2}%
  \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
  \setbox\*bbox=\hbox{\ifpin\pinnumberfont
    \setbox0=\hbox{#6\kern\*spc}\check*min{\wd0}%
    \raise\pinnum*spc\llap{#6\kern\*spc}%
    \setbox0=\hbox{\kern\*spc\kern\wd*#4}\check*max{\wd0}\wd0=0pt
    \raise\pinnum*spc\box0
    \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#5}\check*max{\wd0}\wd0=0pt
    \dimen0\ht*\advance\dimen0\*spc
    \raise\dimen0\box0
    \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#3}\check*max{\wd0}\wd0=0pt
    \dimen0\dp*\advance\dimen0\*spc
    \lower\dimen0\vtop{\kern0pt\box0}\fi
    \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
  \else\errhelp{Direction >h< or >v< expected.}%
  \errmessage{ >#1<  Bad direction specified}\fi\fi}
\def\black*box#1 #2 #3 #4 #5 #6 {\black*boxii{#1} {#2} {#3} {#4} {#5} {#6} h }
\def\sym*box#1 #2 {\check*cen
  \getc*0
  \store*{P1}\X*check\stopos*
  \add*x{.5\wd*}\store*:\add*x{.5\wd*}\store*{P3}\X*check\rstpos*
  \add*y{-1em}\store* b
  \add*x{\wd*}\store* e\rstpos*
  \add*y{1em}\store* a
  \add*x{\wd*}\store* f\rstpos*
  \add*x{.5\wd*}\stopos*
  \add*y\ht*\store*{P4}%
  \add*x{1em}\store* g
  \rstpos*\add*y\ht*
  \add*x{-1em}\store* h
  \rstpos*\add*y{-\dp*}\store*{P2}%
  \add*x{1em}\store* d
  \rstpos*\add*y{-\dp*}%
  \add*x{-1em}\store* c
  \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
  \setbox\*bbox=
    \hbox{\hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box
    \reset*ifs}
\def\bbdef#1 #2#3 {\safedef{#1}##1
{\name*{#1##1}\cc*#3 #2\black*box}}
\def\bbdefNeT#1 #2#3 #4 {\safedef{#1}##1
{\name*{#1##1}\cc*#3#2\black*box{#4} }}
\def\bbdefNeTii#1 #2#3 #4 {\safedef{#1}##1
{\name*{#1##1}\cc*#3#2\black*boxii{#4} }}
\def\sbdef#1 #2#3 #4 {\safedef{#1}##1
{\name*{#1##1}\cc*#3#2\sym*box{#4} }}
\cwdef        wire   {128\c*fnt}
\cwdef        dashed {120\c*fnt}
\def\line*r{\check*X\ifnum\cnta*=0\else\check*max{\dimen2}\ifxoutofgrid
  \advance\dimen2-.5\fontdimen6\c*fnt\fi
  \setbox\*bbox=\hbox{\ifxoutofgrid\else\char\cc*\fi\advance\cc*1%
                      \loop\ifnum\cnta*>1\char\cc*
                      \advance\cnta*-1\repeat}\put*box
  \advance\*X*.5\dimen2\the\toks2\advance\*X*.5\dimen2
  \advance\cc*2\setbox\*bbox=\hbox{\char\cc*}\put*box\xoutofgridfalse\fi}
\def\line*l{\advance\*X*-\dimen2
            \ifxoutofgrid\advance\*X*.5\fontdimen6\c*fnt\fi
            \**X\*X*\line*r\*X*\**X}
\def\line*u{\check*X\ifnum\cnta*=0\else\advance\cc*4\ifyoutofgrid
  \advance\dimen2-.5\fontdimen6\c*fnt\fi
  \setbox\box*=\hbox{\char\cc*}\advance\cc*-1%
  \setbox\*bbox=\vbox{\loop\ifnum\cnta*>1\copy\box*
                      \advance\cnta*-1\repeat
                      \ifyoutofgrid\else\hbox{\char\cc*}\fi}\put*box
  \advance\*Y*.5\dimen2\the\toks4\advance\*Y*.5\dimen2
  \advance\cc*2\setbox\*bbox=\vbox{\hbox{\char\cc*}}\put*box\youtofgridfalse\fi}
\def\line*d{\advance\*Y*-\dimen2
            \ifyoutofgrid\advance\*Y*.5\fontdimen6\c*fnt\fi
            \**Y\*Y*\line*u\*Y*\**Y}
\def\test*xygrid{\dimen9\fontdimen6\c*fnt\count@\dimen9
                \cntb*\*X*\divide\cntb*\count@
                \dimen0\*X*\advance\dimen0-\cntb*\dimen9
                \advance\dimen9-.1pt
                \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
                \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \xoutofgridtrue\fi\fi
                \cntb*\*Y*\divide\cntb*\count@
                \dimen0\*Y*\advance\dimen0-\cntb*\fontdimen6\c*fnt
                \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
                \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \youtofgridtrue\fi\fi}
\def\bundle#1 #2 #3 {\cc*136\c*fnt\cnta*#2\dimen2=#2em
                     \toks2{\setbox\box*=\hbox{\char134}%
                     \setbox\*bbox=\rlap{\raise\ht\box*
                     \hc*{\labelfont#1}\unhbox\box*}\put*box}%
                     \toks4{\setbox\*bbox=\hbox{\char135\labelfont
                     \vc*{\hbox{#1}}}%
                     \check*max{\wd\*bbox}\put*box}%
                     \test*xygrid\csname line*#3\endcsname}
\def\wwire#1 #2 #3 {\cc*112\c*fnt\cnta*#2\dimen2=#2em
                    \toks2{\setbox\*bbox=\rlap{\raise\*spc
                    \hc*{\labelfont#1}}\put*box}%
                    \toks4{\setbox\*bbox=\hbox{\kern\*spc\labelfont
                    \vc*{\hbox{#1}}}%
                    \check*max{\wd\*bbox}\put*box}%
                    \test*xygrid\csname line*#3\endcsname}
\def\by#1 {\def\by*cmd{#1}}
\by{\wire}
\def\calc*u{\cnta*\fontdimen6\c*fnt\advance\dimen0 .5\fontdimen6\c*fnt
            \cntb*\dimen0\divide\cntb*\cnta*}
\def\vtopin#1 {\save*XY\frompin{#1} \test*xygrid
               \dimen0\**Y\advance\dimen0-\*Y*\restore*XY
               \ifdim\dimen0<0pt\dimen0-\dimen0
               \calc*u\by*cmd {\cntb*} u
               \else\calc*u\by*cmd {\cntb*} d \fi}
\def\htopin#1 {\save*XY\frompin{#1} \test*xygrid
               \dimen0\**X\advance\dimen0-\*X*\restore*XY
               \ifdim\dimen0<0pt\dimen0-\dimen0
               \calc*u\by*cmd {\cntb*} r
               \else\calc*u\by*cmd {\cntb*} l \fi}
\safedef{Utext}#1 from #2 to #3 {{%
  \frompin{#2} \save*XY\frompin{#3} \diff*XY
    \ifdim\**X=0pt
      \setbox1=\hbox{\c*fnt\char132}%
      \ifdim\**Y<0pt
        \dimen0-\**Y
        \setbox0=\hbox{\c*fnt\char'373}\advance\dimen0-\ht0\dp0=0pt
        \calc*u
        \setbox\*bbox=
          \vtop to -\**Y{\vfill\box0\loop\ifnum\cntb*>2\copy1
            \advance\cntb*-1\repeat\vfill}%
      \else
        \dimen0\**Y
        \setbox0=\hbox{\c*fnt\char'371}\advance\dimen0-\ht0\dp0=0pt
        \calc*u
        \setbox\*bbox=
          \vbox to \**Y{\vfill\loop\ifnum\cntb*>2\copy1
            \advance\cntb*-1\repeat\box0\vfill}%
      \fi
      \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
    \else
    \ifdim\**Y=0pt
      \ifdim\**X<0pt
        \dimen0-\**X
        \setbox0=\hbox{\c*fnt\char'372}\advance\dimen0-\wd0
        \calc*u
        \setbox\*bbox=\llap{\hbox to -\**X{\hfill\loop\ifnum\cntb*>2\char129
          \advance\cntb*-1\repeat\box0\hfill}}%
      \else
        \dimen0\**X
        \setbox0=\hbox{\c*fnt\char'370}\advance\dimen0-\wd0
        \calc*u
        \setbox\*bbox=\hbox to \**X{\hfill\box0\loop\ifnum\cntb*>2\char129
          \advance\cntb*-1\repeat\hfill}%
      \fi
      \put*box\advance\*X*.5\**X\advance\*Y*\*spc\put\hc*{#1}
    \else\errhelp{Only horizontal or vertical labeling allowed.}%
    \errmessage{Bad points!}\fi\fi}}
\safedef{centertext}#1 from #2 to #3 {%
  {\frompin{#2} \save*XY\frompin{#3} \diff*XY
    \ifdim\**X=0pt
      \advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
    \else
    \ifdim\**Y=0pt
      \advance\*X*.5\**X\put\hc*{#1}
    \else\errhelp{Only horizontal or vertical labeling allowed.}%
    \errmessage{Bad points}\fi\fi}}
\def\from#1 #2 {\c*fnt\*X*=#1em\*Y*=#2em\check*X}
\let\at\from
\def\moverel#1 #2 {\c*fnt\advance\*X* #1em\advance\*Y* #2em\check*X}
\let\shift\moverel
\safedef{put}#1 {\setbox\*bbox=\hbox{\ctextfont#1}\check*X
                 \check*max{\wd\*bbox}\put*box}

\safedef{P}#1 {\store*XY{P#1}\check*X\reset*ifs}
\safedefs{_} #1 #2 {\c*fnt\cnta*=0\csname CiRC#2\endcsname\relax
               \ifnum\cnta*=0\relax
               \PackageError{CIRC}{Bad direction}{Please check spelling}\fi
               \ifcase \cnta* \relax
               \or \advance\*X* -#1em
               \or \advance\*X*  #1em
               \or \advance\*Y*  #1em
               \or \advance\*Y* -#1em
               \or \advance\*X* -#1em
               \or \advance\*X*  #1em
               \or \advance\*Y*  #1em
               \or \advance\*Y* -#1em \fi}
\def\nl{\lab*false}
\def\nv{\val*false}
\def\cc{\cc*true}
\def\clr*acmds{\global\let\add*cmds\relax}
\def\*fdef#1 {\expandafter\xdef\csname#1\endcsname{\the\toks0}}
\newtoks\CIRCfinit
\CIRCfinit={}
\def\addCIRCfont#1 {\expandafter\CIRCfinit=\expandafter{\the\CIRCfinit
                    \expandafter\font\csname CIRC#1\endcsname=#1 scaled \*mag}}
\def\CIusefont#1#2#3{\fontencoding{\encodingdefault}\fontfamily{#1}%
                     \fontseries{\seriesdefault}\fontshape{\shapedefault}%
                     \fontsize{#2}{#3}\selectfont}
\def\circuit#1 {\PackageInfo{CIRC}{`\CIRCredef' redefined}%
    \let\add*cmds\relax
    \*Ilist{}\*Olist{}\check*true
    \xdef\*mag{\magstep{#1}}%
    \global\X*max-\maxdimen
    \global\X*min\maxdimen
\ifcase#1 % magstep 0
    \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
    \*fdef outlabelfont
    \*fdef labelfont
    \*fdef ctextfont
    \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
    \*fdef symfont
    \toks0={\CIusefont{\rmdefault}{7}{8pt}}%
    \*fdef pinnumberfont
    \*fdef functionfont
    \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
    \*fdef circlabelfont
    \toks0={\CIusefont{\sfdefault}{8}{9.5pt}}%
    \*fdef inlabelfont
\or       % magstep 1
    \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
    \*fdef outlabelfont
    \*fdef labelfont
    \*fdef ctextfont
    \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
    \*fdef symfont
    \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
    \*fdef pinnumberfont
    \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
    \*fdef functionfont
    \*fdef circlabelfont
    \toks0={\CIusefont{\sfdefault}{9}{11pt}}%
    \*fdef inlabelfont
\or       % magstep 2
    \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
    \*fdef outlabelfont
    \*fdef labelfont
    \*fdef ctextfont
    \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
    \*fdef symfont
    \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
    \*fdef pinnumberfont
    \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
    \*fdef functionfont
    \*fdef circlabelfont
    \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
    \*fdef inlabelfont
\or       % magstep 3
    \toks0={\CIusefont{\rmdefault}{17.28}{22pt}}%
    \*fdef outlabelfont
    \*fdef labelfont
    \*fdef ctextfont
    \toks0={\CIusefont{\sfdefault}{17.28}{22pt}}%
    \*fdef symfont
    \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
    \*fdef pinnumberfont
    \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
    \*fdef functionfont
    \*fdef circlabelfont
    \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
    \*fdef inlabelfont
\or       % magstep 4
    \toks0={\CIusefont{\rmdefault}{20.74}{25pt}}%
    \*fdef outlabelfont
    \*fdef labelfont
    \*fdef ctextfont
    \toks0={\CIusefont{\sfdefault}{20.74}{25pt}}%
    \*fdef symfont
    \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
    \*fdef pinnumberfont
    \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
    \*fdef functionfont
    \*fdef circlabelfont
    \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
    \*fdef inlabelfont
\else\errhelp{0 ... 4 expected.}\errmessage{Bad magnification!}\fi
{\outlabelfont
\global\*spc 0.4em}%
\font\c*fnt=cirest      scaled \*mag
\font\c*fntb=cicirc     scaled \*mag
\font\c*fntd=cidiod     scaled \*mag
\font\c*fntt=cibimos    scaled \*mag
\font\c*fntw=ciwidko    scaled \*mag
\font\c*fnts=cisym      scaled \*mag
\outerspace1mm
\pinnum*spc.7mm
\pin*ind\fontdimen12\c*fntb
\pin*spc\fontdimen13\c*fntb
\io*ind\fontdimen14\c*fntb
\mid*ind\fontdimen16\c*fntb
\X*min\maxdimen
\X*max-\maxdimen
\the\CIRCfinit
\begingroup
  \the\rmacros
  \let\.\junction
  \def\- ##1 ##2 {\wire##1 ##2 }%
  \def\= ##1 ##2 ##3 {\bundle##1 ##2 ##3 }%
  \def\<{\ld*true}%
\parindent0pt
\offinterlineskip\setbox\*bbox=\hbox\bgroup\at 0 0 }
\def\endcircuit{\egroup\leavevmode
                \hbox{\kern-\X*min\unhbox\*bbox\kern\X*max}\endgroup
                \PackageInfo{CIRC}{`\CIRCredef' restored}}
\safedef{fallingEdge}{{\c*fnts\char3}}
\safedef{raisingEdge}{{\c*fnts\char2}}
\safedef{spike}{{\c*fnts\char4}}
\safedef{ispike}{{\c*fnts\char12}}
\safedef{squarePulse}{{\c*fnts\char1}}
\safedef{squarePulses}{{\c*fnts\char5}}
\safedef{sawtoothPuls}{{\c*fnt\char6}}
\def\CIRCLogo{\c*fnt\cc*0\getc*252 \check*max{.5\wd*}\check*min{.5\wd*}%
  \setbox\*bbox=\hbox to \wd*{\hss\lower\ht*\hbox to 0pt{\hss
  \symfont\raise1.5ex\rlap{\kern1ex CIRC}\box\box*}\hss}\put*box\reset*ifs}
\protectcirc
\ProcessOptions
\endinput
%%
%% End of file `circ.sty'.
