summaryrefslogtreecommitdiff
path: root/macros/generic/diagrams/circ/circ.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/diagrams/circ/circ.dtx')
-rw-r--r--macros/generic/diagrams/circ/circ.dtx6053
1 files changed, 6053 insertions, 0 deletions
diff --git a/macros/generic/diagrams/circ/circ.dtx b/macros/generic/diagrams/circ/circ.dtx
new file mode 100644
index 0000000000..1316a676e6
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.dtx
@@ -0,0 +1,6053 @@
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%*******************************************************************
+%*** Please run tex circ.dtx to install the CIRC package ***
+%*** or run latex circ.dtx to generate a documentation. ***
+%*******************************************************************
+%<*installation>
+% Hint: Comment the next line out to force installation under LaTeX.
+% \let\documentclass\relax
+\expandafter\ifx\csname documentclass\endcsname\relax \input docstrip
+\askforoverwritefalse\maxoutfiles{10} %<-- change this if you have problems
+% CIRC is a LaTeX package to typeset circuit and optics diagrams.
+% Copyright (C) 1997,1998,2003,2009 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, see <http://www.gnu.org/licenses/>.
+%
+% 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'.
+%
+%
+\preamble
+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'.
+\endpreamble
+
+ \keepsilent
+ \generate{
+ \file{circ.sty} {\from{circ.dtx}{code}}
+ \file{ic.def} {\from{circ.dtx}{ic}}
+ \file{gate.def} {\from{circ.dtx}{gate}}
+ \file{oldgate.def} {\from{circ.dtx}{oldgate}}
+ \file{box.def} {\from{circ.dtx}{box}}
+ \file{basic.def} {\from{circ.dtx}{basic}}
+ \file{optics.def} {\from{circ.dtx}{optics}}
+ \file{physics.def} {\from{circ.dtx}{ciphysic}}
+ \file{cisyms.tex} {\from{circ.dtx}{doc}}
+ \file{cidoc.tex} {\from{circ.dtx}{docsty}}
+ \file{circ.drv} {\from{circ.dtx}{driver}}
+ }
+\postamble
+\endpostamble
+ \generate{
+ \file{defcirc.mf} {\from{circ.dtx}{defcircmf}}
+ \file{csym.mf} {\from{circ.dtx}{csym}}
+ \file{cioptic.mf} {\from{circ.dtx}{optic}}
+ \file{ciphysic.mf} {\from{circ.dtx}{ciphysicmf}}
+ \file{ciwidko.mf} {\from{circ.dtx}{csywidko}}
+ \file{cidiod.mf} {\from{circ.dtx}{csydiod}}
+ \file{cirest.mf} {\from{circ.dtx}{csyrest}}
+ \file{cicirc.mf} {\from{circ.dtx}{csycirc}}
+ \file{cibimos.mf} {\from{circ.dtx}{csybimos}}
+ \file{cisym.mf} {\from{circ.dtx}{csysym}}
+ \file{index.hlp} {\from{circ.dtx}{indexhlp}}
+ }
+\message{*********************************************************************}
+\message{^^JNow you should copy all *.def *.sty-files to your TEXINPUT-directory.}
+\message{^^JPlease run "latex circ.drv" and read the section installation.}
+\message{^^JAfter generating the fonts, please rerun "latex circ.drv".}
+\message{^^JThen you will get a complete documentation.}
+\message{^^JFor generating an index please read the file index.hlp.}
+\message{*********************************************************************}
+\csname fi\endcsname\end\endinput\fi
+%</installation> end-metacomment \fi
+% \def\filedate{2003/06/13}
+%^^A last update: Fri 03-13-1998
+% \def\fileversion{v1.0f}
+%
+% \title{Package
+% \raise8mm\hbox{\expandafter\ifx\csname circfonts\endcsname\relax\else
+% \circuit2 \CIRCLogo \endcircuit\fi}\\[5mm]
+% \fileversion\ last revised \filedate}
+% {
+% \def\thefootnote{\fnsymbol{footnote}}
+% \author{Sebastian Tannert\footnote{macro code}\\
+% Andreas Tille\footnote{documentation, optics}}}%
+% \parskip 1mm\parindent0pt
+%
+% \font\manual=logo10
+% \def\MF{{\manual METAFONT}\xspace}
+% \def\MP{{\manual METAPOST}\xspace}
+% \def\META{{\manual META}\xspace}
+% \def\CIRC{{\sf CIRC}\xspace}
+% \def\CB#1{{\tt\char'134 #1}\index{#1@\string\texttt{\string\char'134 #1}}}
+% \def\warp#1{{\tt\char'134 #1}}
+% \def\Blank{{\tt\char32}}
+% \def\einruck{\hspace*{1cm}}
+% \def\example#1{\par\medskip\einruck#1\par\medskip}
+% \def\kohm{$\,$k$\Omega$}
+% \newcommand{\Descriptionlabel}[1]{\mbox{\textsf{#1}}\hfil}
+% \newenvironment{Description}[1]%
+% {\begin{list}{}%
+% {\renewcommand{\makelabel}{\Descriptionlabel}%
+% \setlength{\parsep}{0pt}%
+% \setlength{\itemsep}{0pt}%
+% \setlength{\itemindent}{0pt}%
+% \setlength{\topsep}{0pt}%
+% \setbox0=\hbox{\Descriptionlabel{#1}}%
+% \setlength{\labelwidth}{\wd0}%
+% \dimen0=\labelwidth\advance\dimen0 by \labelsep%
+% \setlength{\leftmargin}{\dimen0}}}%
+% {\end{list}}
+%
+% \batchmode
+% \iffalse First we have to check the fonts. \fi
+% \font\checkcircfonts=cirest
+% \dimen0=\fontdimen6\checkcircfonts
+% \ifdim\dimen0>0pt \def\circfonts{exist}\fi
+% \errorstopmode
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% The package \CIRC is a tool for typesetting circuit diagrams
+% and block schematics.
+% It defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC easily with
+% your own symbols, written in \MF.
+% \end{abstract}
+%
+% \vskip 15mm
+% \expandafter\ifx\csname circfonts\endcsname\relax\else
+%\begin{circuit}{0}
+%\.1 \- 1 r \nl\cc\R1 {R} r
+%\frompin .1 \- 3 l \- 2 d \nl\R9 {2R} d
+%\- 10 d \.7
+%\frompin .7 \- 3 l \cc\U0 {} - u
+%\frompin .1 \- 2 d \nl\cc\R2 {2\,R} d \nl\SW1 {} s U
+%\frompin SW1c \vtopin U0+ \.8
+%\frompin SW1o \vtopin U0- \.9
+%\frompin R1r \- 1 r
+%\.3 \- 1 r \nl\cc\R5 {R} r
+%\frompin .3 \- 2 d \nl\cc\R6 {2\,R} d \nl\SW3 {} s u
+%\frompin SW3c \vtopin U0- \.12
+%\frompin SW3o \vtopin U0+ \.13
+%\frompin R5r \- 1 r
+%\.4 \- 2 r \nl\cc\R7 {R$_1$= 2R} r
+%\frompin .4 \- 2 d \nl\cc\R8 {2\,R} d \nl\SW4 {} s U
+%\frompin SW4c \vtopin U0+ \htopin U0+
+%\frompin SW4o \vtopin U0- \.15
+%\frompin R7r \- 1 r \nl\whatI1 {I} s r
+%\- 1 r \.5 \- 1 r \nl\OV1 {} - {} {} {}
+%\frompin .5 \- 3 u \centerto OV1 \nl\cc\R10 {R$_2$} r
+%\frompin R10l \htopin .5
+%\atpin OV1O \.6 \vtopin R10r \htopin R10r
+%\frompin .6 \- 1 r \connection1 {$U_a$} c r
+%\frompin OV1+ \- 1 l \- 3 d \nl\cc\R11 {R$_3$} d
+%\frompin R11b \vtopin .7 \.8 \GND1 \frompin .7 \htopin .8
+%\end{circuit}\fi
+% \clearpage
+% \tableofcontents
+% \enlargethispage{.5cm}
+% \section{Introduction}
+%
+% In several sciences circuit diagrams are necessary in publications.
+% Perhaps there are some PostScript tools for typesetting them or
+% a drawing program has to be used.
+% With \CIRC it is now possible to typeset circuit diagrams using
+% \TeX\ commands. The commands
+% describe the logical structure of the wiring scheme and \TeX\
+% builds the connections according to this structure.
+%
+% \CIRC defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC with
+% your own symbols, written in \MF.
+%
+% \CIRC has been implemented as a turtle system. That means, there is
+% a current position from where the symbols and wires are drawn.
+% It is possible to choose the drawing direction and drawing position.
+%
+% \CIRC consists of commands in order to
+% \begin{Description}{position}
+% \item[draw] symbols and wires into the scheme,
+% \item[justify] symbols within the scheme,
+% \item[link] symbols with wires,
+% \item[position] symbols absolutely or relatively.
+% \end{Description}
+%
+% \section{Installation}
+%
+% Run |circ.ins| through \LaTeX. You will get a couple of
+% |*.mf| files. Use \MF to create |*.pk| fonts from all these files.
+% These steps depend on your installation.
+% For example, type:
+% \begin{verbatim}
+% mf \mode=localfont; input ciwidko.mf
+% gftopk ciwidko.300
+% \end{verbatim}
+% Do this with all the |*.mf| sources. Copy the resulting |*.tfm|
+% and |*.pk| files into appropriate directories.
+%
+% Copy the |*.sty|, |*.def| files, obtained from |circ.ins| into appropriate
+% directories in your |TEXINPUT| path.
+%
+% Read the documentation carefully.
+%
+% Enjoy \CIRC.
+%
+% We added a Makefile which is tested only under |Debian\GNU Linux|
+% (running |teTeX|). We would like to get comments whether it works
+% under other environments. {\bf Use it at your own risk!}. Type
+% \begin{verbatim}
+% make
+% \end{verbatim}
+% to get all files used by \CIRC. Before you type
+% \begin{verbatim}
+% make install
+% \end{verbatim}
+% you should check the correct PATH names in the Makefile. (Make sure
+% you run |make install| as root.) This will do the the following:
+% \begin{enumerate}
+% \item Delete old \CIRC files in |TEXINPUT| and |MFINPUT|.
+% \item Move the new |TEXINPUT| and |MFINPUT| to the appropriate
+% directories
+% \item Check the special.map file in the |Fontname| directory
+% whether there ary \CIRC related entries and create them
+% if failed. (This will ensure that \CIRC fonts will be
+% copied into reasonable directories when using |MakeTeXPK|
+% or |MakeTeXTFM|.)
+% \item Delete old PK and TFM files from \CIRC. (Using old TFM or
+% PK files is one of the "Top ten reasons" why failing \CIRC.)
+% \end{enumerate}
+% To get the documentation type
+% \begin{verbatim}
+% make doc
+% \end{verbatim}
+% (generally this is a good idea to create the needed fonts on the
+% fly).
+%
+% Once more: Please report any bug concerning this Makefile, because
+% this is the first test and not reliable at all.
+%
+%
+% \section{System requirements}
+%
+% \CIRC requires \LaTeXe\ and \MF.
+%
+%\section{Changes}
+% Unfortunately a change of the parameters for symbol drawing
+% commands had to be made. But now the rules are more consistent and
+% easier to remember. Please have a look at section~\ref{pars}.
+% Some new symbols were added and the font selection was modified
+% to work together with the slides class.
+% The appendix has a new design to be clearly arranged.
+% Font names have changed too.
+%
+% The |\<| command is obsolete now and should NOT used anymore.
+% A new |\_| command was defined, see section~\ref{position}.
+%
+% \section{Usage}
+%
+% \subsection{Preambel}
+%
+% \CIRC is divided into several parts. To use a part put the suitable
+% option in the |\usepackage| command. All parts are included
+% in the following example:
+%\example{\warp{usepackage[basic,box,gate,oldgate,ic,optics,physics]}\{|circ|\}}
+%
+% The parts contain:
+% \begin{Description}{physics\,:}
+% \item[basic\,:] a lot of symbols such as resistors, capacitors, switches,
+% diodes, transistors, etc.,
+% \item[box\,:] blackbox, oscilloscope, generator and amplifier,
+% \item[gate\,:] several logical circuits,
+% \item[oldgate\,:] old style logical gates,
+% \item[ic\,:] integrated circuits (flip flops, etc.) and
+% \item[optics\,:] the optical stuff with lenses, mirrors, etc.
+% (see section \ref{optic}),
+% \item[physics\,:] some mechanics stuff.
+% \end{Description}
+% A complete list of available symbols is given in the appendix.
+%
+% \subsection{Starting a circuit diagram}
+%
+% It is recommended to draw a sketch with pen and paper before using
+% \CIRC.
+%
+% Every circuit diagram is enclosed in the
+% |circuit| environment
+% \example{\CB{begin\{circuit\}}{\em size}}
+% where {\em size} is an integer
+% between 0 and 4 giving the size of symbols and describing text. A size
+% of 4 is useful for overhead foils.
+%
+% All \CIRC macros and the necessary parameters are separated by
+% spaces (\Blank). For a clearly arranged \CIRC diagram it is
+% advisable to put every command in a separate line (a linebreak
+% is interpreted as a blank as it is used in \TeX).
+%
+% \subsection{Drawing symbols}
+% \label{pars}
+% The table in the appendix contains a complete list of all
+% \CIRC symbols available and corresponding drawing commands.
+% The syntax of drawing commands is:
+% \example{\warp{}{\sf symbolname}{\em number\Blank
+% inscription\Blank{\tt[}specification\_parameter{\tt]}\Blank direction}}
+% or for more complex symbols:
+% \example{\warp{}{\sf symbolname}{\em number\Blank {\tt[}further\_parameters\tt ]}}
+% Note that you can leave out the blank between the symbol-command
+% and the following {\em number} parameter. This parameter has to
+% be unique in one drawing and is necessary for correct referring
+% (see |\atpin| in section \ref{poscmd}).
+%
+% The symbols can be classified into a lot of different symmetries
+% which are summarized in the appendix. There you will find more
+% detailed information about the parameters you have to use.
+% Generally the drawing direction of the symbol is given with the
+% {\em direction} parameter which is |l| (left), |r| (right),
+% |u| (up) or |d| (down).
+% If there exist 2 different alignments of a symbol for one
+% direction (e.g. if the LED-arrows show up or down) the second
+% alignment is chosen by capitalization of the {\em direction}
+% parameter (|L|, |R|, |U| or |D|).
+%
+%\iffalse
+% Due to the fact, that there are different symbols for different
+% drawing directions the right {\em direction} parameter is important.
+% The table in the appendix contains valid {\em direction} parameters
+% for every drawing command. This may be |h| (horizontal) or |v|
+% (vertical) for symbols with the symmetry two; |l| (left), |r| (right),
+% |u| (up) and |d| (down) for symbols with the symmetry four or
+% for symbols with the symmetry eight |l|, |L|, |r|, |R|, |u|, |U|,
+% |d| or |D|. The latter may need further {\em specification} parameter
+% in front of the {\em direction} parameter.
+% \fi
+% Symbols having two dissimilar or more connections may need
+% a further {\em specification} parameter in front of the {\em
+% direction} parameter.
+% This {\em specification} parameter marks the pin
+% that should be on the current drawing position (see variable resistor and
+% several transistors).
+%
+% In the appendix {\tt text} was used for the {\em inscription} and the
+% necessary {\em number} was set to {\tt n}. Note the position
+% at the symbol where the inscription is set.
+% The inscription can be suppressed by the \CB{nv} command in front
+% of the symbol-command.
+%
+% By default every \CIRC symbol is marked by a label.
+% This label consists of an abbreviation of the symbol indexed by
+% the {\em number}. To suppress
+% this labeling use \CB{nl} in front of the symbol-command.
+%
+% Another command affecting the inscription of a symbol is
+% \CB{cc}. It is also used in front of a symbol-command and causes the
+% change of label-position and inscription-position. By default the
+% inscription is typeset left or over the symbol while the labeling
+% is done right or under the symbol depending on the vertical or
+% horizontal orientation of the symbol.
+%
+% Some symbols need {\em further\_parameter}s. The usage
+% is selfdocumenting in the appendix table.
+%
+% Junctions can be made by the \CB{.} command
+% (\CB{junction})\footnote{Commands within
+% parenthesis are synonyms for the last introduced command.}.
+% The syntax is:
+% \example{\warp{.}{\em number}}
+% Every junction needs a {\em number} argument for further referencing.
+%
+% \subsection{Referencing symbols and pins}
+%
+% Some commands use reference parameters
+% to mark symbols or connections of symbols drawn before.
+%
+% The {\em symbol\_reference} parameters consist of two parts:
+% \example{{\sf symbolname}$\;${\em number}}
+%
+% The {\em pin\_reference} parameters consist of three parts:
+% \example{{\sf symbolname}$\;${\em number}$\;${\sf pinname}}
+% These three parts form the {\em reference} parameter.
+%
+% See the appendix for the pinnames, they are drawn nearby the pins.
+% If the symbol has no pregiven ones the standard names |l| for
+% the left connection, |r| for the right, |t| for the top and
+% |b| for the bottom one will be chosen.
+%
+% {\em Note that there is no blank between the parts!}
+%
+% For example, to refer to the \underline{l}eft connection of the
+% resistor with the {\em number} 1 the {\em pin\_reference} parameter
+% would be
+% \example{{\tt R1l}}
+% or to refer to the whole symbol the {\em symbol\_reference} is
+% \example{{\tt R1}\quad.}
+%
+%
+% At least it is possible to set markers which work like pin references.
+% \example{\CB{P}{\em number}}
+% sets a marker which can be referred to by |P|{\em number}.
+%
+% \subsection{Connecting symbols}
+%
+% Simple connections between the symbols can be made with the
+% \CB{-} command, which is an abbreviation of the \CB{wire}
+% command (see appendix). The syntax is
+% \example{\warp{-}\Blank{\em length}\Blank{\em direction}.}
+% The parameter {\em length} is an integer giving the number of
+% lengthsteps. In \CIRC wires are build as a queue of characters
+% 2.5\,mm each. Thus the length of wire is measured in multiples
+% of this length.
+%
+% The parameter {\em direction} determines the direction. Valid
+% values are |l| for left, |r| for right, |u| for up and |d| for
+% down. For instance, a wire is drawn to the left with a length of
+% 1\,cm (4 units) by typing
+% \example{\warp{-\Blank 4\Blank l}}
+%
+% There are some other line types to connect symbols. The command
+% \example{\CB{dashed}\Blank{\em length\Blank direction}}
+% draws a dashed line. It is written as the \warp{-} command.
+% With
+% \example{\CB{bundle}\Blank{\em text\Blank length\Blank direction} \\
+% \einruck\CB{wwire}\Blank{\em text\Blank length\Blank direction}}
+% a bundle of wire could be drawn or a pair of wire, respectively.
+% You can use \CB{=} as an abbreviation of |\wwire|.
+% The {\em text} may contain any comments.
+%
+% To connect the drawing position horizontally or vertically with
+% a certain pin of a symbol by using a reference, the useful
+% commands \CB{htopin} and \CB{vtopin} exist.
+% The syntax is:
+% \example{\warp{htopin}\Blank{\em pin\_reference} \\
+% \einruck\warp{vtopin}\Blank{\em pin\_reference}}
+% Provided that the resistor |R1| defined before by a |\R| command,
+% the command
+% \example{\warp{vtopin\Blank R1l}}
+% draws a vertical wire up to this height, where the resistor numbered
+% with |1| (|R1|) is situated. |\htopin| does the same but horizontally.
+%
+% The connection will be done by default with the \CB{wire} command.
+% To change the type of the connection use the \CB{by} command.
+% The syntax is:
+% \example{\warp{by\{}{\em command\/}|\}|}
+% where {\em command} can be one of the following: \CB{wire} (\CB{-}), \CB{dashed},
+% \mbox{\CB{bundle}\Blank{\em text}}, \mbox{\CB{wwire}\Blank{\em text}}
+% or \CB{oa} (which is declared in the optics part, see section \ref{optic}).
+%
+% For example, the command
+% \example{\warp{by\{}\warp{dashed\}}}
+% changes the drawing style from \warp{[hv]topin} to a dashed lines.
+% Do not forget to switch back to wires using
+% \example{\warp{by\{}\warp{wire\}}}
+% to end the dashed lines.
+%
+% Note that it is usually necessary to combine the |htopin|- and
+% |vtopin| commands, because these commands draw {\em only} horizontally
+% or vertically to the x- or the y-coordinates
+% of the given pin.
+%
+% \subsection{\label{poscmd}Positioning commands}
+% \label{position}
+% Positioning commands are used to change the current
+% drawing position.
+%
+% The direct positioning command \CB{at} (\CB{from}) sets the drawing position
+% to an absolute coordinate.
+% \example{\warp{at\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% sets the drawing position to the point ({\em x},{\em y}) in the coordinate
+% system, where {\em x} and {\em y} are integers counting the number of
+% arbitrary units (2.5\,mm). \CIRC starts drawing at $(0,0)$.
+%
+% It is recommended to avoid the absolute positioning of symbols, because
+% it tends to destroy the logical structure of the circuit diagram.
+%
+% The drawing position can be changed in relation to the current position
+% with the indirect positioning command \CB{moverel} (\CB{shift}).
+% \example{\warp{moverel\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% moves the drawing position {\em x} units to the right
+% and {\em y} units upwards.
+%
+% The command \CB{atpin} (\CB{frompin}) sets the drawing
+% position to a reference pin.
+% \example{\warp{atpin}\Blank{\em pin\_reference}}
+% allows further drawing starting from the reference pin. For example,
+% \example{\warp{atpin C2r}}
+% sets the drawing position to the right pin of the capacitor numbered 2.
+%
+% In a lot of cases a command like |\-| is useful, but it should
+% not draw the line. |\_| satisfy this need. As you know from
+% |\-| a {\em length} and a {\em direction} must be specified.
+%
+% \subsection{Justify commands}
+%
+% The command \CB{hcenterto} forces horizontal centering
+% according to a symbol referred to. The command \CB{vcenterto} does the
+% same but vertically.
+% The command \CB{centerto} centers the following symbol according to the
+% reference symbol
+% horizontally or vertically depending on the drawing direction of
+% the symbol beeing drawn.
+%
+% The syntax is:
+% \example{\warp{hcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{vcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{centerto}\Blank{\em symbol\_reference}}
+% For example,
+% \example{\warp{hcenterto L4}}
+% would force horizontal centering according to the coil numbered 4.
+%
+% \subsection{Text commands}
+%
+% The command
+% \example{\CB{put}|\{|{\em text}|\}|}
+% puts {\em text} at the current drawing position.
+% It can be used in the same way as the \warp{put} command of the
+% \LaTeX |picture| environment, but the coordinates have to be omitted
+% (because they are given by the current drawing position).
+%
+% To comment something the commands
+% \example{\CB{Utext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2} \\
+% \einruck\CB{centertext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2}}
+% can be used. \warp{centertext} prints {\em text} centered between
+% {\em pin\_reference1} and {\em pin\_reference2}.
+% \warp{Utext} additionally draws an arrow from
+% {\em pin\_reference1} to {\em pin\_reference2}.
+% Note that the reference pins must have the same x- or y-coordinate.
+%
+% To write overlapping information like the \TeX\ commands
+% \warp{rlap} and \warp{llap} the following commands are used:
+% \example{\CB{blap}|\{|{\em text}|\}| \\
+% \einruck\CB{tlap}|\{|{\em text}|\}|}
+% They put {\em text} which overlap to the bottom or the top, respectively.
+%
+% \expandafter\ifx\csname circfonts\endcsname\relax
+% \LARGE Please generate the fonts now. Then you will get a
+% complete documentation.\stop\fi
+%
+% \subsection{Example}
+%
+%A simple example is the diagram showing a circuit which is used for measuring
+%the amplification of current by a transistor.
+%\vskip 4mm
+%\begin{circuit}0
+%\npn1 {?} B l
+%\frompin npn1C
+%\- 1 u
+%\nl\A1 {$I_C$} u
+%\atpin npn1B
+%\- 1 l
+%\R1 {510\kohm} l
+%\- 1 l
+%\centerto A1
+%\nl\A2 {$I_B$} u
+%\frompin A2b
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u \.1
+%\frompin A2t
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u
+%\frompin npn1E
+%\- 1 d
+%\GND1
+%\end{circuit}
+%\vskip 4mm
+%
+%How to cope with such sketches?
+%
+%First of all, it is necessary to decide, which symbol should be the
+%first one.
+%The transistor seems to be a good choice to begin with in this
+%special case. The command \CB{npn} produces a npn-transistor
+%(see appendix); so the first line is
+%\example{\warp{npn1 {?} B l}}
+%which names the transistor |npn1| for further reference.
+%Instead of |{?}| any text describing the specific transistor
+%may be written. (Unfortunately this doesn't work today. See
+%future plans.) The third parameter |B| means, that the
+%\underline{b}ase of the transistor should be on the current
+%drawing position. Further more |C| for \underline{c}ollector
+%or |E| for the \underline{e}mitter contact would be possible.
+%The last parameter gives the direction, in this case the
+%base contact points to the \underline{l}eft (|l|).
+%
+%Use
+%\example{\warp{frompin npn1C}}
+%to continue drawing from the collector, and type
+%\example{\warp{- 1 u}}
+%to draw the needed wire \underline{u}pwards
+%to connect the amperemeter to measure $I_C$ which is created by the command
+%\example{\warp{nl}\warp{A1 \{\$I\_C\$\} u}}\qquad .
+%
+%The command \CB{nl} in front of the amperemeter avoids the default
+%inscription of "$I_1$" because this would not make any sense in this
+%case. Instead, the labeling is $I_C$. The last parameter {\tt u}
+%marks the direction (\underline{u}p).
+%
+%To draw the resistor connected with the base of the transistor
+%the proceeding is the same: use
+%
+%|\atpin npn1B |
+%to set drawing position (different from the current position),
+%
+%|\- 1 l |
+%to draw a piece of wire to the left and
+%
+%|\R1 {510\kohm} l |
+%for the resistor itself.
+%
+%A further horizontal piece of wire connects the resistor with the
+%second amperemeter: |\- 1 l |.
+%
+%The second amperemeter, measuring the current of the base ($I_B$),
+%would look nice at if drawn the same height as the first one,
+%measuring ($I_C$).
+%Measuring the length of wire needed to match the same height would be
+%difficult and a change of the diagram would cause further changes in
+%order to maintain the desired position.
+%Therefore it is advisable to use
+%\example{\CB{centerto} {\tt A1}\quad \warp{nl}\warp{A2 \{\$I\_B\$\} u}}
+%which leeds to the intended centering automatically. Because of the
+%\underline{u}p orientation of {\tt A2}, the centering is the same as
+%in the vertical direction.
+%
+%A vertical connection is needed to connect the amperemeter
+%with {$R_1$}. This may be done by
+%\example{\warp{frompin A2b} \\
+% \einruck\warp{vtopin R1l}}
+%which draw a wire down to the horizontal wire, starting at
+%|A2b|. Instead of the second line |\vtopin npn1B| would do the same job
+%because the horizontal position is irrelevant for \CB{vtopin}.
+%
+%To connect the two amperemeters the drawing position is set to |A1t|,
+%from where a wire is drawn upwards and a junction point is marked
+%at that point by using
+%\example{\warp{frompin A1t} \\
+% \einruck\warp{- 1 u} \\
+% \einruck\warp{.1}}
+%The commands for connecting the second amperemeter are:
+%\example{\warp{frompin A2t} \\
+% \einruck\warp{vtopin .1} \\
+% \einruck\warp{htopin .1}}
+%The combination of \CB{htopin} and \CB{vtopin} is very useful
+%to connect two points with an edge of wire.
+%The driving voltage is typeset by
+%\example{\warp{- 1 u} \\
+% \einruck\warp{cc}\warp{connection1 \{\$U\_b\$\} c u}}
+%because it looks better to put the inscription of the voltage on the
+%right. That is why the prefix \CB{cc} is used in front of
+%the \warp{connection} command.
+%
+%Finally the emitter contact leads to the ground:
+%\example{\warp{frompin npn1E} \\
+% \einruck\warp{- 1 d} \\
+% \einruck\warp{GND1}}
+%
+%The whole example once more in an overview:
+%\begin{verbatim}
+%\begin{circuit}0
+%\npn1 {?} B l % transistor
+%\frompin npn1C % draw from collector
+%\- 1 u % some wire
+%\nl\A1 {$I_C$} u % amperemeter for current of collector
+%\atpin npn1B % continue drawing from base
+%\- 1 l % some wire
+%\R1 {510\kohm} l % resistor
+%\- 1 l % some wire to the edge
+%\centerto A1 % draw centered to amperemeter 1
+%\nl\A2 {$I_B$} u % amperemeter 2
+%\frompin A2b % link amperemeter 2 with resistor
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u
+%\.1 % junction
+%\frompin A2t % wire to amperemeter 2
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u % driving voltage
+%\frompin npn1E
+%\- 1 d
+%\GND1 % ground
+%\end{circuit}
+%\end{verbatim}
+%
+%
+% \section{\label{optic}Optics}
+%
+% If the |optics| option is given in the |\usepackage| command, the
+% creation of simple optical diagrams is possible.
+%
+% The optical axis can be drawn with the \CB{oa} command, which
+% creates a dashed line.
+% The optical symbols
+% which are available are listed at the end of the appendix.
+%
+% Here is an example for using |optics|. With the knowledge
+% of drawing circuits the following code will speak for itself.
+% \vskip 4mm
+% \begin{circuit}{0}
+% \nl\Laser1 {} r
+% \oa 2 r
+% \Polar1 {} r
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r
+% \oa 2 r
+% \nl\Pinhole1 {} r
+% \oa 7 r
+% \cc\SLens2 {} r
+% \oa 1 r
+% \Polar2 {} r
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d
+% \atpin BSplit1+
+% \oa 2 r
+% \nl\Cam1 {camera} . r
+% \atpin BLens1: \shift 0 2 \P3
+% \atpin Pinhole1: \shift 0 2 \P4
+% \atpin SLens2: \shift 0 2 \P5
+% \Dtext{\small $f_1$} from P3 to P4
+% \Dtext{\small $f_2$} from P4 to P5
+% \atpin BSplit1.
+% \oa 5 d
+% \Mirror1 {} * R
+% \oa 2 r
+% \nl\ScrL1 {screen} h
+% \end{circuit}
+% Here is the code:
+%
+% \begin{verbatim}
+% \begin{circuit}{0}
+% \nl\Laser1 {} r % laser
+% \oa 2 r % optical axis
+% \Polar1 {} r % polarizer
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h % optical modulator
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r % 1st lens
+% \oa 2 r
+% \nl\Pinhole1 {} r % pinhole
+% \oa 7 r
+% \cc\SLens2 {} r % 2nd lens
+% \oa 1 r
+% \Polar2 {} r % analyzer
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d % beam splitter
+% \atpin BSplit1+ % continue drawing right
+% \oa 2 r
+% \nl\Cam1 {camera} . r % camera
+% \atpin BLens1: \shift 0 2 \P3 % mark middle of 1st lens
+% \atpin Pinhole1: \shift 0 2 \P4 % mark middle of pinhole
+% \atpin SLens2: \shift 0 2 \P5 % mark middle of 2nd lens
+% \Dtext{\small $f_1$} from P3 to P4 % f_1
+% \Dtext{\small $f_2$} from P4 to P5 % f_2
+% \atpin BSplit1. % second part of beam down
+% \oa 5 d
+% \Mirror1 {} * R % mirror
+% \oa 2 r
+% \nl\ScrL1 {screen} h % white screen
+% \end{circuit}
+% \end{verbatim}
+%
+%
+% \section{Some hints for \CIRC programmers}
+%
+% Here are some hints to add further symbols to \CIRC.
+%
+% Before creating any new symbol consult very carefully the file |csym.mf|.
+% It contains a lot of very useful definitions to simplify writing new symbols.
+% Examples for the use of these definitions are given in the files
+% |ciwidko.mf| and |optic.mf|.
+% When possible it is strongly recommended to use the \MF commands
+% \begin{Description}{|fourfourchars|}
+% \item[|twochars|] for symbols with the symmetry two,
+% \item[|fourchars|] for symmetry four and
+% \item[|fourfourchars|] for symmetry eight,
+% \end{Description}
+% because the definition of the corresponding \TeX\ command
+% will need only one line! If there are any problems with \MF{}
+% do not hesitate to contact the authors.
+%
+% A new option file with the extension |def|,
+% for instance |newcirc.def|, has to be created to include
+% the written symbols. To include the new definitions add
+% |newcirc| to the options in the \warp{usepackage} command:
+% \example{\warp{usepackage[basic,newcirc]\{circ\}}\qquad .}
+%
+% The \CIRC-command \CB{freecirc} has to be used to start the
+% definitions of new commands in the file |newcirc.def|.
+% This ensures, that the asterix (`*') becomes active, because
+% all internal \CIRC commands contain the asterix. It is comparable to
+% \LaTeX 's \warp{makeatletter}. The \CIRC-command \CB{protectcirc}
+% has to be used at the end of the file |newcirc.def|
+% in order to restore the former
+% behaviour (comparable to \warp{makeatother}).
+%
+% The \CB{cdef*} commands are strongly recommended to declare commands
+% with the new symbols, because only one line is needed for the definition.
+% The files |basic.def| or |optics.def| contain examples for \warp{cdef} and
+% related commands, which are defined in |circ.sty|.
+%
+% To ensure that the new symbols are inserted in the right
+% magnification the command \CB{extracircinit} may be used.
+% It can be used in the same way as \warp{opticfontinit} is used
+% in |optics.def|. Both are defined in |circ.sty| as \warp{relax}
+% and are called when a new diagram is initialized. If it is necessary
+% to do any operations before starting a circuit diagram, then
+% it is possible to redefine \warp{extracircinit} to do the job.
+%
+% \section{Future plans}
+% \CIRC is still under development. A lot of users need
+% additional symbols or have other wishes. In most of the cases there is
+% a quick solution, but to give \CIRC the ability to be an easy
+% extendable tool (and to add more potentiality) it has to be rewritten.
+% Until this is done there could happen the following steps:
+%\begin{itemize}
+%\item solve the problem of inscriptions for transistors
+%\item redesign some symbols and reimplement the \MF sources
+%\item rewrite the font selection to fix some ugly effects
+%\item add color support and build a \MP port
+%\item use the NFSS2 to make different linethicknesses available
+%\item describe the link between \TeX\ and \META
+%\item update the documentation every time
+%\end{itemize}
+%
+%
+% \section{Contacting the authors}
+% Any bug reports, remarks, proposals for new options and symbols,
+% any improvements to both the code or the documentation
+% as well as some nice postcards are welcome.
+%
+% \medskip
+% \begin{tabular}{@{}p{.5\hsize}@{}p{.5\hsize}@{}}
+% Sebastian Tannert & Andreas Tille \\
+% WEN 67.02.01.06 & Gartenstra\ss e 8 \\
+% Harbigstra\ss e 14 & D-38855 Wernigerode \\
+% D-14055 Berlin & \\
+% &\\
+% tannert@physik.hu-berlin.de & tille@physik.uni-halle.de
+% \end{tabular}
+% \iffalse Some changes to the layout for the appendix. \fi
+%\advance\textheight\topmargin
+%\advance\textheight60pt
+%\advance\textheight\headsep
+%\advance\textheight\headheight
+%\newpage
+%\topmargin-30pt
+%\headsep0pt
+%\headheight0pt
+%\oddsidemargin10pt
+%\parindent 0pt
+%\lineskip4mm
+%^^A last update: Fri 03-13-1998
+% \section{\appendixname}
+%\def\spc{\,\texttt{\char'40}\,}
+%\def\num{\textit{number}}
+%\def\len{\textit{length}}
+%\def\dir{\textit{direction}}
+%\def\txt{\textit{text}}
+%\def\lab#1{\textit{label} \textrm{#1}\spc}
+% The symmetries and there parameters:\\[1mm]
+% \catcode`\|=12
+% \begin{tabular}{l|l}
+% symmetrie & parameter set \\[1mm]\hline
+% $\mathcal{OP}$ & \num\spc\\[1mm]
+% $\mathcal{LI}$ & \len\spc\dir\spc\\[1mm]
+% $\mathcal{LB}$ & \num\spc\txt\spc\dir\spc\\[1mm]
+% $\mathcal{TXT}$ & \txt\spc\texttt{from}\spc
+% \textit{pin\_reference1}\spc\texttt{to}\spc\textit{pin\_reference2}\spc\\[1mm]
+% $\mathcal{SO}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{SX}$ & \num\spc\txt\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{SXY}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{S\mathrm{3}P}$ & \num\spc\txt\spc\textit{pin\_name}\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{GI}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\\[1mm]
+% $\mathcal{GII}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\\[1mm]
+% $\mathcal{BX}$ & \num\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{BXT}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{IC}$ & \num\spc\txt\spc\textit{pin\_name}\spc\textit{style\footnote{Today this should be empty, like \{\}.}}\spc\\[1mm]
+% \end{tabular}\vskip 10mm
+% \MakePercentComment\input{cisyms}\MakePercentIgnore
+% \advance\hsize-4cm
+% \oddsidemargin35pt
+% \newpage
+% \PrintIndex
+% \iffalse DON'T process driver definitions!
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\begin{filecontents}{circ.ist}
+delim_0 "\\hfill "
+delim_t "\\hbox to 7mm{\\hss}"
+\end{filecontents}
+\documentclass{ltxdoc}
+\usepackage[basic,box,gate,oldgate,ic,optics,physics]{circ}
+\usepackage{t1enc}
+\usepackage{xspace}
+\IndexPrologue{\section{Index}}
+\makeindex
+\begin{document}
+\DocInput{circ.dtx}
+\end{document}
+%</driver>
+% \fi
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%<*docsty>
+%\fi
+\chardef\backslash="5C
+\catcode`\|=12
+\parindent 2mm
+\lineskip 0pt
+\advance\textwidth by 39.4pt
+
+\def\lpin#1{\shift -1.1 0 \put{\tlap{\llap{\tt#1$\rfloor$}\vss}}}
+\def\bpin#1{\shift 0 -1.5 \put{\blap{\llap{\tt#1\hss}}}}
+\def\tpin#1{\shift 0 1.5 \put{\tlap{\llap{\tt#1\hss}}}}
+\def\rpin#1{\shift 1.1 0 \put{\tlap{\rlap{$\lfloor$\tt#1}\vss}}}
+
+\def\cdef#1 #2 #3#4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SXY}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cwdef#1 #2 #3 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+
+
+\def\cwwdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname {text} 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LB}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\NgateIIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1nI1} \lpin{I1} \atpin{#1nI2} \lpin{I2} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\gateIIO#1 #2#3 #4#5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3.8cm{\vskip 2mm
+ {\hsize 4.8cm \footnotesize #8\par}
+ \vfill
+ \hbox to 5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1n#5} \lpin{#5} \atpin{#1n#7} \lpin{#7} \atpin{#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 5cm height .1pt}%
+ \vrule width.1pt height 3.8cm depth 0pt}\linebreak[1]}
+
+\def\NgateIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b
+ \atpin{#1nI} \lpin{I} \atpin{#1nI} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #7\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #6\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiviv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #7\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #6\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefo#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{OP}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\optionline#1 {\vskip3mm
+ {\large Symbols provided by the option \fbox{\tt#1.def}}\\[3mm]}
+
+\def\bbdef#1 #2#3 #4 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #4\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \atpin{#1nP3} \rpin{P3}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeT#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeTii#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\sbdef#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\textdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0
+ \at 0 0 \P1 \at 6 0 \P2
+ \csname #1\endcsname {text} from P1 to P2 \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{TXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefviii#1 #2 #3#4 #5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #8\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : l
+ \atpin {#1n#5} \rpin{#5}
+ \atpin {#1n#6} \lpin{#6}
+ \atpin {#1n#7} \rpin{#7}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{S\mathrm{3}P}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\Ccirc#1 #2 #3#4{\noindent
+ \def\Clpin##1{\atpin{#1n##1} \lpin{##1} }
+ \def\Crpin##1{\atpin{#1n##1} \rpin{##1} }
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} #2 {} #4
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{IC}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+%\iffalse
+%</docsty>
+%\fi
+%^^A last update: Fri 03-13-1998
+% \newpage
+% {\Large\bf The code of \CIRC.}\\\vskip 1mm
+% \begin{macrocode}
+%<*code>
+\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.}}}
+% \end{macrocode}
+%
+% Sorry, but it's better to stop here.
+% The sourcecode is formatted worst. \endinput
+%
+% F"ur die interne Namensgebung m"ussen einige Zeichen
+% in ihrem Kategoriekode als Buchstaben (11) eingetragen werden.
+% Der jetzige Kode wird in Definitionen abgelegt.
+% Das betrifft die Zeichen \verb+* [ ] @+.
+%
+% \begin{macrocode*}
+\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
+% \end{macrocode*}
+%^^A last update: Fri 03-13-1998
+% Zu Testzwecken kann "uber \verb+\showpointstrue+ die
+% Anzeige aller definierter Anschlu"spunkte eingestellt werden.
+% \begin{macrocode}
+\newif\ifshowpoints
+\showpointsfalse
+% \end{macrocode}
+%
+% Alle mit * gekennzeichneten Schalter werden nach jeder Zeichenoperation
+% auf den entsprechenden Standardwert gesetzt.
+%
+% Die Darstellung der Beschriftung mit Schaltzeichentyp und Nummer
+% wird "uber \verb+\iflab+ getsteuert. *
+% \begin{macrocode}
+\newif\iflab*
+\lab*true
+% \end{macrocode}
+%
+% Schaltzeichenwerte k"onnen auch ausgeblendet werden. *
+% \begin{macrocode}
+\newif\ifval*
+\val*true
+% \end{macrocode}
+%
+% Die Zeichenrichtung wird durch \verb+\ifld+ bestimmt.
+% \begin{macrocode}
+\newif\ifld*
+\ld*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcc*
+\cc*false
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newif\ifpin
+\pintrue
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifxoutofgrid
+\newif\ifyoutofgrid
+\xoutofgridfalse
+\youtofgridfalse
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcen*
+\cen*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifhvcen*
+\hvcen*false
+% \end{macrocode}
+\newif\ifcheck*
+%
+% F"ur die Ermittlung der kleinsten Umschlie"senden Box werden die
+% beiden Variablen \verb+\X*max+ und \verb+\X*min+ bei jeder
+% Zeichenoperation aktualisiert. Sie enthalten die minimale und die
+% maximale Ausdehnung der Zeichenfl"ache in horizontaler Richtung.
+% \begin{macrocode}
+\newdimen\X*max
+\newdimen\X*min
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\*X*
+\newdimen\*Y*
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\**X
+\newdimen\**Y
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\***X
+\newdimen\***Y
+% \end{macrocode}
+%
+% In der Box \verb+\*bbox+ wird f"ur eine Zeichenoperation
+% das entsprechende horizontale Material gesammelt.
+% Diese Box wird dann durch \verb+\put*bbox+ entsprechend
+% der aktuellen Zeichenposition in die Box der entstehenden
+% Zeichnung "ubernommen.
+% \begin{macrocode}
+\newbox\*bbox
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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 % ...
+% \end{macrocode}
+%
+\newtoks\rmacros
+%
+% \begin{macrocode}
+\newdimen\outerspace
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\*Ilist
+\newtoks\*Olist
+% \end{macrocode}
+
+% \begin{macrocode}
+\newdimen\pin*spc
+\newdimen\pin*ind
+\newdimen\io*ind
+\newdimen\mid*ind
+\newdimen\pinnum*spc
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+\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 }
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\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*}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\check*max#1{\dimen0=#1\advance\dimen0\*X*
+ \ifdim\dimen0>\X*max\global\X*max\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*X{\ifcheck*\ifdim\*X*<\X*min\global\X*min\*X*\fi
+ \ifdim\*X*>\X*max\global\X*max\*X*\fi\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*min#1{\dimen0=-#1\advance\dimen0\*X*
+ \ifdim\dimen0<\X*min\global\X*min\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*#1{\check*min{#1}\check*max{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*cen{\ifcen*\errhelp{Use `\hcenterto' or `\vcenterto'.}%
+ \errmessage{You can't use `\string\centerto' to center `\the\name*'}\fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Jede Zeichenoperation ruft \verb+\put*box+ auf, dieses
+% Makro setzt die Box \verb+\*bbox+ an die aktuelle Zeichenposition.
+% \begin{macrocode}
+\def\put*box{\hbox to 0pt{\kern\*X*\raise\*Y*\box\*bbox\hss}}
+% \end{macrocode}
+%
+%
+% In Erweiterung zu \verb+\llap+ und \verb+\rlap+ werden
+% hier weitere Abk"urzungen definiert.
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+%
+%
+% Zur"ucksetzen der auf eine Zeichenoperation wirkenden Schalter.
+% \begin{macrocode}
+\def\reset*ifs{\ld*false\cen*false\hvcen*false\lab*true\val*true\cc*false}
+% \end{macrocode}
+%
+% Das Kernmakro f"ur die Speicherung von Anschlu"spunkten.
+% \begin{macrocode}
+\def\store*XY#1{\ifshowpoints\message{#1}\fi
+ \expandafter\xdef\csname#1\endcsname{\*X*\the\*X*\*Y*\the\*Y*}}
+% \end{macrocode}
+%
+% Retten der aktuellen Zeichenposition.
+% \begin{macrocode}
+\def\save*XY{\**X\*X*\**Y\*Y*}
+\def\save*xy{\***X\*X*\***Y\*Y*}
+% \end{macrocode}
+%
+% Wiederherstellen der aktuellen Zeichenposition
+% \begin{macrocode}
+\def\restore*XY{\*X*\**X\*Y*\**Y}
+\def\restore*xy{\*X*\***X\*Y*\***Y}
+% \end{macrocode}
+%
+% Abstand zwischen dem gespeichertem Punkt und dem aktuellen
+% in x- und y-Richtung bestimmen
+% \begin{macrocode}
+\def\diff*XY{\advance\**X-\*X*\advance\**Y-\*Y*}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Richtung ist durch die folgende Zeichenoperation bestimmt.
+% \begin{macrocode}
+\def\centerto#1 {\cen*true\save*XY\frompin#1: }
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle y-Position wird beibehalten.
+% \begin{macrocode}
+\def\hcenterto#1 {\hvcen*true\**Y\*Y*\frompin#1: \*Y*\**Y}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle x-Position wird beibehalten.
+% \begin{macrocode}
+\def\vcenterto#1 {\hvcen*true\**X\*X*\frompin#1: \*X*\**X}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\do*Ilist{\ifshowpoints\message{|<}\fi
+ \check*true
+ \save*XY\the\*Ilist\ifshowpoints\message{>|}\fi\restore*XY\*Ilist={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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={}}
+% \end{macrocode}
+%
+% \Ladd*x erweitert die Tokenliste \argi um Makros, die das
+% Dimensionsregister \XXX um \argii erh"ohen.
+% \argii wird als aktueller
+% Zahlenwert in die Tokenliste "ubernommen, \argiii wird
+% expandiert.
+% \begin{macrocode}
+\def\Ladd*x#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*X*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Ladd*y ist \verb+\Ladd*x+ in seiner Funktion gleich, das Makro
+% ver"andert jedoch \YYY.
+% \begin{macrocode}
+\def\Ladd*y#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*Y*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Lstore* f"ugt in die Tokenliste \argi Makros ein, die die Position unter
+% \argii speichern.
+% \begin{macrocode}
+\def\Lstore*#1#2{\edef\next{{\the#1\noexpand\store*XY{\the\name*#2}}}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Lstopos*#1{\global#1\expandafter{\the#1\save*xy}}
+\def\Lrstpos*#1{\global#1\expandafter{\the#1\restore*xy}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\LX*check#1{\global#1\expandafter{\the#1\check*X}}
+% \end{macrocode}
+%
+% Die folgenden Makros sind schon auf die Tokenliste \verb+\*Ilist+
+% festgelegt, da fast alle Anschlu"sdefinitionen nur eine Liste
+% benutzen.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cadd*#1{\Ladd*y#1{-\pin*spc}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cstore*#1#2{\ifx{#2}*\else\Lstore*#1{#2}\fi}
+% \end{macrocode}
+%
+% Um einen Anschlu"spunkt zur neuen Zeichenposition zu erkl"aren,
+% wird nur das entsprechende Makro aufgerufen, nachdem zuvor
+% getestet wurde ob es existiert.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% F"ur eine sch"onere Lesbarkeit wird neben {\em von Punkt}
+% auch noch {\em am Punkt} definiert.
+% \begin{macrocode}
+\let\atpin\frompin
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\change*pins{\toks0\ld*pin\ld*pin\ru*pin\ru*pin\toks0}
+% \end{macrocode}
+%
+\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.}}
+% \begin{macrocode}
+\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}
+%
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+%
+\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}
+%
+% \begin{macrocode}
+\def\cdef#1 #2 #3#4 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\cc*#4 #3\ii*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\cdefNL#1 #2#3 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\cc*#3 #2\ii*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\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*}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\cwdef#1 #2 {\safedef{#1}##1 ##2 {\cc*#2
+ \cnta*##1\toks2{}\toks4{}\dimen2=##1em\test*xygrid
+ \csname line*##2\endcsname}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\black*box#1 #2 #3 #4 #5 #6 {\black*boxii{#1} {#2} {#3} {#4} {#5} {#6} h }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdef#1 #2#3 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3 #2\black*box}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeT#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*box{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeTii#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*boxii{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sbdef#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\sym*box{#4} }}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% ^^A beschr p l1 l2 l3
+%
+% ^^A\cc*
+% ^^A\name*
+% ^^A\**pin
+% ^^A\ldd* -> innenbeschriftung
+%
+%</code>
+%<+gate>\ProvidesFile{gate.def}
+%<+gate>\freecirc
+%<*gate>
+% \begin{macrocode}
+\def\g*iio#1 #2 #3 #4 #5 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \stopos*\add*y\ic*\X*check\store*{\the\ru*pin}\rstpos*
+ \add*y{-\ic*}\store*{\the\ld*pin}\rstpos*
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \dimen0\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#3}}%
+ \dimen0-\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#4}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#5}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\g*io#1 #2 #3 #4 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \store*{\the\ld*pin}%
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \raise\pinnum*spc\rlap{\kern\pin*ind\hc*{#3}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#4}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIIO#1 #2#3 #4#5 #6 #7 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*gN#1{\raise\fontdimen10\c*fntb
+ \blap{\hc*{\kern\wd*\symfont\,#1}}%
+ \lower\dp*
+ \vtop{\kern\*spc\hc*{\labelfont\kern\wd*\the\rud*}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*OV{\ac*{\kern.8\wd*\ctextfont\the\rud*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I2}\m*pin{O}\ru*pin{I1}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIO#1 #2#3 #4#5 #6 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#4}\m*pin{#5}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I}\m*pin{O}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%</gate>
+%<*code>
+%^^A last update: Sat 06-13-2003
+%</code>
+%<*doc>
+\input cidoc
+\freecirc
+\hbox{\circuit0 \CIRCLogo \endcircuit\hskip3cm
+ \verb|\CIRCLogo|}\vskip5mm
+%</doc>
+%<*code,doc>
+\cwdef wire {128\c*fnt}
+%<+doc> {wire}
+\cwdef dashed {120\c*fnt}
+%<+doc> {dashed wire}
+%<+doc>\cwwdef bundle {bundle}
+%<+doc>\cwwdef wwire {double wire}
+%<+doc>\textdef Utext {text with arrow}
+%<+doc>\textdef centertext {centered text}
+%</code,doc>
+%<*basic>
+\ProvidesFile{basic.def}
+\freecirc
+\def\GND#1 {\setbox\*bbox=\hbox{\c*fnt\char254}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{GND#1}\store*XY{GND#1:}\reset*ifs}
+\def\gnd#1 {\setbox\*bbox=\hbox{\c*fnt\char253}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{gnd#1}\store*XY{gnd#1:}\reset*ifs}
+\def\junction#1 {\setbox\*bbox=\hbox{\c*fnt\char255}\check*{\wd\*bbox}\check*X
+ \put*box\store*XY{.#1:}\store*XY{junction#1:}%
+ \store*XY{junction#1}\store*XY{.#1}\reset*ifs}
+%</basic>
+%<*basic,doc>
+%<+doc>\optionline basic
+%<+doc>\cdefo GND ground
+%<+doc>\cdefo gnd ground
+%<+doc>\cdefo . junction \par
+\cdef R R \c*fntw 0
+%<+doc> {resistor}
+\cdef Rus R \c*fntw 24
+%<+doc> {US resistor}
+\cdefviii Rvar R \c*fntw 8 . S *
+%<+doc> {variable resistor}
+\cdefviii Rusvar R \c*fntw 32 . S *
+%<+doc> {variable resistor}
+\cdef C C \c*fntw 128
+%<+doc> {capacitor}
+\cdef Cvar C \c*fntw 130
+%<+doc> {variable capacitor}
+\cdefiv Cel C \c*fntw 136 - +
+%<+doc> {electrolytic capacitor}
+\cdefiv D D \c*fntd 0 K A
+%<+doc> {diode}
+\cdefiv ZD D \c*fntd 4 K A
+%<+doc> {Zener diode}
+\cdefiviv LED D \c*fntd 8 K A
+%<+doc> {light emitting diode}
+\cdefiv Dcap D \c*fntd 16 K A
+%<+doc> {capacitance variation diode}
+\cdefiv whatI I \c*fnt 248 d s
+%<+doc> {current flow}
+\cdefiv U U \c*fnt 16 + -
+%<+doc> {voltage source}
+\cdef varU U \c*fnt 44
+%<+doc> {voltage source, variant}
+\cdef varI I \c*fnt 46
+%<+doc> {current source variant}
+\cdefiv Uvar U \c*fnt 20 + -
+%<+doc> {variable voltage source}
+\cdef I I \c*fnt 12
+%<+doc> {current source}
+\cdef Ivar I \c*fnt 14
+%<+doc> {variable current source}
+\cdef V U {\def\add*cmds{\clr*acmds
+ \ac*{\symfont V}}\c*fnt}8
+%<+doc> {voltmeter}
+\cdef A I {\def\add*cmds{\clr*acmds
+ \ac*{\symfont A}}\c*fnt}8
+%<+doc> {amperemeter}
+\cdefiv L L \c*fnt 0 . *
+%<+doc> {coil}
+\cdef xtal Q \c*fnt 4
+%<+doc> {quartz crystal}
+\cdef La La \c*fnt 6
+%<+doc> {incandescent lamp} % electric bulb
+\cdef GasLa {} \c*fnt 40
+%<+doc> {gas lamp}
+\cdef S S \c*fnt 24
+%<+doc> {switch}
+\cdefviii SW S \c*fnt 32 o s c
+%<+doc> {changeover switch}
+\cdefivNL mconnection \c*fnt 232 o c
+%<+doc> {connection (pointed)}
+\cdefivNL connection \c*fnt 240 o c
+%<+doc> {connection (round empty)}
+\cdefivNL fconnection \c*fnt 244 o c
+%<+doc> {connection (round full)}
+\cdefiviv npnPH T \c*fntt 80 E C
+%<+doc> {phototransistor}
+\cdefviii npnEC T \c*fntt 0 E . C
+%<+doc> {npn-transistor without base}
+\cdefviii pnpEC T \c*fntt 8 E . C
+%<+doc> {pnp-transistor without base}
+\cdefviii npn T \c*fntt 16 E B C
+%<+doc> {npn-transistor}
+\cdefviii pnp T \c*fntt 24 E B C
+%<+doc> {pnp-transistor}
+\cdefviii nfet T \c*fntt 32 S G D
+%<+doc> {n-channel field effect transistor}
+\cdefviii pfet T \c*fntt 40 S G D
+%<+doc> {p-channel field effect transistor}
+\cdefviii nvmos T \c*fntt 48 S G D
+%<+doc> {}
+\cdefviii pvmos T \c*fntt 56 S G D
+%<+doc> {}
+\cdefviii namos T \c*fntt 64 S G D
+%<+doc> {}
+\cdefviii pamos T \c*fntt 72 S G D
+%<+doc> {}
+%<+basic>\protectcirc
+%</basic,doc>
+%<*gate,doc>
+%<+doc>\pagebreak
+%<+doc>\optionline gate
+\gateIIO OV \c*fntb 255 \ldd*OV + O -
+%<+doc> {operational amplifier}
+\gateIIO ov \c*fntb 254 \ldd*OV - O +
+%<+doc> {operational amplifier}
+%<+doc>
+\NgateIIO NAND \c*fntb 132 {$\&$}
+%<+doc> {NAND-gate}
+\NgateIIO AND \c*fntb 131 {$\&$}
+%<+doc> {AND-gate}
+\NgateIIO OR \c*fntb 131 {$\ge$1}
+%<+doc> {OR-gate}
+\NgateIIO NOR \c*fntb 132 {$\ge$1}
+%<+doc> {NOR-gate}
+\NgateIIO XOR \c*fntb 131 {$=$1}
+%<+doc> {XOR-gate}
+\NgateIIO XNOR \c*fntb 131 {$=$\vrule width 0pt height 1.5ex\,}
+%<+doc> {XNOR-gate}
+\NgateIO INV \c*fntb 130 {1\,}
+%<+doc> {NOT-gate}
+\NgateIO ST \c*fntb 128 {{\c*fnts\char7}}
+%<+doc> {Schmitt trigger}
+\NgateIO STINV \c*fntb 130 {{\c*fnts\char7}}
+%<+doc> {inverted Schmitt trigger}
+\NgateIO BUF \c*fntb 130 {{\c*fnts\char25}}
+%<+doc> {buffer}
+%<+gate>\protectcirc
+%</gate,doc>
+%<*oldgate,doc>
+%<+doc>\optionline oldgate
+%<+oldgate>\freecirc
+\NgateIIO oldAND \c*fntb 133 {}
+%<+doc> {old AND-gate}
+\NgateIIO oldNAND \c*fntb 134 {}
+%<+doc> {old NAND-gate}
+\NgateIIO oldOR \c*fntb 135 {}
+%<+doc> {old OR-gate}
+\NgateIIO oldNOR \c*fntb 136 {}
+%<+doc> {old NOR-gate}
+\NgateIIO oldXOR \c*fntb 137 {}
+%<+doc> {old XOR-gate}
+%<+oldgate>\protectcirc
+%</oldgate,doc>
+%<*box,doc>
+%<+box>\ProvidesFile{box.def}
+%<+box>\freecirc
+%<+doc>\optionline box
+\bbdef BBa \c*fntb 252
+%<+doc> {black box analog}
+\bbdef BBd \c*fntb 253
+%<+doc> {black box digital}
+%<+doc>\pagebreak
+\bbdefNeT oscillograph \c*fnt 142 {}
+%<+doc> {oscillograph}
+\bbdefNeT G \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char16}}
+%<+doc> {generator}
+\bbdefNeT Gvar \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char17}}
+%<+doc> {generator, variable}
+\bbdefNeT Impulse \c*fntb 250 \c*fnts\char13
+%<+doc> {generator, pulses}
+\bbdefNeT Amp \c*fntb 250 \c*fnts\char24
+%<+doc> {amplifier}
+\sbdef ACtoDC \c*fntb 251 \hbox{\raise.6\ht*\hbox{\c*fnts\char16}%
+ \lower.6\dp*\hbox{\symfont$=$}}
+%<+doc> {AC to DC converter}
+%<+box>\protectcirc
+%</box,doc>
+%<*doc>
+\optionline ic
+\Ccirc RSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc NRSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc DFF C {D flip flop}{\Clpin{C}\Clpin{D}\Crpin{Q}\Crpin{NQ}}
+\Ccirc JKMSFF R {JK master slave flip flop}{\Clpin{S}\Clpin{J}\Clpin{C}\Clpin{K}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc fff R {timer NE\,555}{\Clpin{IS}\Clpin{IT}\Clpin{R}\Crpin{OK}\Crpin{O}\Crpin{OD}}
+\Ccirc NULL i+ {nullor}{\Clpin{i+}\Clpin{i-}\Crpin{o+}\Crpin{o-}}
+%</doc>
+%^^A last update: Fri 03-13-1998
+%<*optics>
+% First lets define the header of module OPTICS.
+% \begin{macrocode}
+\ProvidesFile{optics.def}
+\freecirc
+% \end{macrocode}
+% \begin{macrocode}
+\safedef{Dtext}#1 from #2 to #3 {{
+ \frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \dimen0\**Y
+ \ifdim\**Y<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char9}\setbox1=\hbox{\char11}%
+ \c*fnt\setbox2=\hbox{\char132}\dp1=0pt
+ \advance\dimen0-\ht0\calc*u
+ \setbox\*bbox=
+ \vtop{\box1\loop\ifnum\cntb*>0\copy2
+ \advance\cntb*-1\repeat\box0}%
+ \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \advance\*X*\**X
+ \dimen0\**X
+ \ifdim\**X<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char8}\setbox1=\hbox{\char10}%
+ \c*fnt\advance\dimen0-\wd0\calc*u
+ \setbox\*bbox=\hbox{\box0\loop\ifnum\cntb*>0\advance\cntb*-1
+ \char129\repeat\box1}%
+ \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}}
+% \end{macrocode}
+%
+% We need a new font for the optic symbols.
+% \begin{macrocode}
+\addCIRCfont cioptic
+% \end{macrocode}
+%
+%</optics>
+%<*optics,doc>
+%<+doc>\optionline optics
+%<+doc>\textdef Dtext {text measuring a length}
+% \begin{macrocode}
+\cwdef oa {128\CIRCcioptic}
+%<+doc> {optical axis}
+\cdef SLens L \CIRCcioptic 0
+%<+doc> {thin lens}
+\cdefiv HSLens L \CIRCcioptic 2 | )
+%<+doc> {half thin lens}
+\cdef BLens L \CIRCcioptic 6
+%<+doc> {thick lens}
+\cdefiv HBLens L \CIRCcioptic 8 | )
+%<+doc> {half thick lens}
+\cdef VLens L \CIRCcioptic 12
+%<+doc> {concave lens}
+\cdefiv HVLens L \CIRCcioptic 14 | (
+%<+doc> {half concave lens}
+\cdefviii Mirror M \CIRCcioptic 85 * . +
+%<+doc> {mirror}
+\cdefviii BSplit BS \CIRCcioptic 36 * . +
+%<+doc> {beam splitter}
+\cdef Polar P \CIRCcioptic 44
+%<+doc> {polarizer}
+\cdef Pinhole {} \CIRCcioptic 46
+%<+doc> {pinhole}
+\cdefiv Cam {} \CIRCcioptic 66 . |
+%<+doc> {camera}
+\cdef ScrL {} \CIRCcioptic 72
+%<+doc> {screen, look at the left side}
+\cdef ScrR {} \CIRCcioptic 74
+%<+doc> {screen, look at the right side}
+\cdef ScrBL {} \CIRCcioptic 76
+%<+doc> {screen, look behind the left side}
+\cdef ScrBR {} \CIRCcioptic 78
+%<+doc> {screen, look behind the right side}
+\cdef ScrTL {} \CIRCcioptic 80
+%<+doc> {screen, look trough the left side}
+\cdef ScrTR {} \CIRCcioptic 82
+%<+doc> {screen, look trough the right side}
+\cdef Laser {} \CIRCcioptic 160
+%<+doc> {laser}
+\cdef PM {} \CIRCcioptic 162
+%<+doc> {photometer, -multiplyer, etc.}
+\bbdefNeTii OM \CIRCcioptic 164 {}
+%<+doc> {optical modulator}
+%</optics,doc>
+%<*optics>
+\protectcirc
+% \end{macrocode}
+%</optics>
+%^^A last update: Fri 03-13-1998
+%<*ciphysic>
+\freecirc
+\addCIRCfont ciphysic
+%</ciphysic>
+%<+doc>\optionline physics
+%<*ciphysic,doc>
+\cdef spring k \CIRCciphysic 0
+%<+doc> {spring}
+\cdef lspring k \CIRCciphysic 2
+%<+doc> {long spring}
+\cdef fdmass m \CIRCciphysic 4
+%<+doc> {mass with two forces; full drawn}
+\cdef dmass m \CIRCciphysic 6
+%<+doc> {mass with two forces; outlined}
+\cdefiv fmass m \CIRCciphysic 8 . *
+%<+doc> {mass; full drawn}
+\cdefiv mass m \CIRCciphysic 12 . *
+%<+doc> {mass; outlined}
+\cdefivNL wall \CIRCciphysic 16 . |
+%<+doc> {wall}
+\cdefivNL tile \CIRCciphysic 20 . *
+%<+doc> {tile}
+\cdef spinu S \CIRCciphysic 24
+%<+doc> {spin up}
+\cdef spind S \CIRCciphysic 26
+%<+doc> {spin down}
+%</ciphysic,doc>
+%<*ciphysic>
+\protectcirc
+%</ciphysic>
+%^^A last update: Fri 03-13-1998
+%<*doc>
+\protectcirc
+% \end{macrocode}
+%</doc>
+%<*code>
+%^^A last update: Fri 03-13-1998
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*l{\advance\*X*-\dimen2
+ \ifxoutofgrid\advance\*X*.5\fontdimen6\c*fnt\fi
+ \**X\*X*\line*r\*X*\**X}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*d{\advance\*Y*-\dimen2
+ \ifyoutofgrid\advance\*Y*.5\fontdimen6\c*fnt\fi
+ \**Y\*Y*\line*u\*Y*\**Y}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\by#1 {\def\by*cmd{#1}}
+\by{\wire}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\calc*u{\cnta*\fontdimen6\c*fnt\advance\dimen0 .5\fontdimen6\c*fnt
+ \cntb*\dimen0\divide\cntb*\cnta*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Die absolute Positionierung in einem Raster von 7\,pt wird durch
+% das direkte Setzen der aktuellen Zeichenposition realisiert.
+% Die x-, und y-Position bezieht sich dabei auf den Punkt der
+% ersten Zeichenoperation, dem die Werte $(0,0)$ zugeordnet wurden.
+% \begin{macrocode}
+\def\from#1 #2 {\c*fnt\*X*=#1em\*Y*=#2em\check*X}
+\let\at\from
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\moverel#1 #2 {\c*fnt\advance\*X* #1em\advance\*Y* #2em\check*X}
+\let\shift\moverel
+% \begin{macrocode}
+%
+% \begin{macrocode}
+\safedef{put}#1 {\setbox\*bbox=\hbox{\ctextfont#1}\check*X
+ \check*max{\wd\*bbox}\put*box}
+
+% \end{macrocode}
+\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}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\nl{\lab*false}
+\def\nv{\val*false}
+\def\cc{\cc*true}
+\def\clr*acmds{\global\let\add*cmds\relax}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\*fdef#1 {\expandafter\xdef\csname#1\endcsname{\the\toks0}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\CIRCfinit
+\CIRCfinit={}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\addCIRCfont#1 {\expandafter\CIRCfinit=\expandafter{\the\CIRCfinit
+ \expandafter\font\csname CIRC#1\endcsname=#1 scaled \*mag}}
+% \end{macrocode}
+% \begin{macrocode}
+\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 }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\endcircuit{\egroup\leavevmode
+ \hbox{\kern-\X*min\unhbox\*bbox\kern\X*max}\endgroup
+ \PackageInfo{CIRC}{`\CIRCredef' restored}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+\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}}
+%
+%^^A last update: Fri 03-13-1998
+% The last thing we define is the logo of CIRC.
+% This pretty small grey elephant was choosen and then digitized as a
+% result of a discussion about the incomming of new symbols into
+% CIRC. Idea by Andreas Tille.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Alle internen Buchstaben werden wieder auf ihren vormaligen
+% Kategoriekode gesetzt.
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+% Now we are ready to process all options of CIRC.
+% That means to load all modules.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%</code>
+%^^A last update: Fri 03-13-1998
+%<*ic>
+% \begin{macrocode}
+\ProvidesFile{ic.def}
+% \end{macrocode}
+% \begin{macrocode}
+\freecirc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**[#1 #2 #3 #4 {\cc*\cnta*\advance\cc*32 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}\char\cc*
+ \cc*\cnta*\advance\cc*97\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*48 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*#1
+ \X*check\Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\kern\io*ind\kern\mid*ind
+ \blap{\kern0pt\hc*{\functionfont{#5}}}}\char\cc*
+ \cc*\cnta*\advance\cc*96\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*16 \advance\cc*#1
+ \LX*check\*Olist\Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*64 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\iflab*\kern\io*ind\kern\mid*ind
+ \vtop{\kern\fontdimen17\c*fntb\kern\outerspace
+ \hc*{\circlabelfont{#5}}}\fi}\char\cc*
+ \cc*\cnta*\advance\cc*98\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*80 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*H#1 {\cc*\cnta*\X*check\Cadd*\*Ilist
+ \rlap{\kern\io*ind\kern\mid*ind\blap{\kern-\*spc\labelfont\hc*{#1\ }}}%
+ \char\cc*\cc*\cnta*\advance\cc*96\char\cc*\cc*\cnta*\advance\cc*16
+ \LX*check\*Olist\Cadd*\*Olist\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\C*init{\dimen4\*X*\dimen5\*Y*
+ \setbox\*bbox=\vtop\bgroup\c*fntb\cnta*=0 \ignorespaces}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\C*exit#1{\egroup\shift*IOlist{#1}\put*box\*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*o#1{$\overline{\hbox{#1}}$}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*|#1| {\hbox{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\JKMSFF#1 #2 #3 #4 {\name*{JKMSFF#1}\C*init
+\*|\*F[2 S {} S {} \*F]0 . {} {} |
+\*|\**[1 J {} 1J \**]1 Q $\neg$ {} |
+\*|\**[3 C {} C1 \**]0 . {} {} |
+\*|\**[1 K {} 1K \**]2 NQ $\neg$ {} |
+\*|\*L[2 R {} R {#2} \*L]0 . {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\DFF#1 #2 #3 #4 {\name*{DFF#1}\C*init
+\*|\*F[1 D {} 1D {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[3 C {} C1 {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\RSFF#1 #2 #3 #4 {\name*{RSFF#1}\C*init
+\*|\*F[1 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NRSFF#1 #2 #3 #4 {\name*{NRSFF#1}\C*init
+\*|\*F[2 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\fff#1 #2 #3 #4 {\name*{fff#1}\C*init
+\*|\*F[1 IS {6} IS { } \*F]1 OK OK 5 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\**[1 IT {2} IT \**]1 O O 3 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 R {4} R {#2} \*L]1 OD OD 7 |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NULL#1 #2 #3 #4 {\name*{NULL#1}\C*init
+\*|\*H{$\vcenter{\hbox{\c*fnts\char25}}\ \infty$} |
+\*|\**[1 i+ {} + \**]1 o+ + {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 i- {} $-$ {#2} \*L]1 o- $-$ {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+%</ic>
+%^^A last update: Fri 03-13-1998
+%<*ciphysicmf>
+font_identifier:="ciphysic";
+
+string optionname; optionname:="physics";
+
+input defcirc.mf;
+
+
+%% SPRING
+
+spring_lt#= 5CIu#;
+lspring_lt#= 7CIu#;
+spring_th#= 1CIu#;
+define_whole_pixels(lspring_lt,spring_lt,spring_th);
+spring_gap= .6CIu;
+spring_n=11;
+spring_swd=(spring_lt-2spring_gap)/spring_n;
+lspring_swd=(lspring_lt-2spring_gap)/spring_n;
+
+twopinchar("spring")("k")("spring")
+ (spring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(spring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+spring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(spring_lt,0);
+ pickup pensquare scaled normalline;
+ z[spring_n+2]=z0+(spring_lt,0);
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+twopinchar("lspring")("k")("long spring")
+ (lspring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(lspring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+lspring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(lspring_lt,0);
+ pickup pensquare scaled normalline;
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+%% MASS single/double
+
+dmass_lt#= 2CIu#;
+mass_r#= 1.5CIu#;
+define_whole_pixels(dmass_lt,mass_r);
+
+twopinchar("fdmass")("m")("mass with two forces; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ shiftpoint:=z1;
+ draw z0--z1;
+ z2=.5[z0,z1];
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+)
+
+twopinchar("dmass")("m")("mass with two forces; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ shiftpoint:=z3;
+ z4=z3-(.5(dmass_lt-mass_r),0);
+ draw z3--z4;
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+)
+
+twopincharfour("fmass")("m")(".")("*")("mass; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ z2=.5[z0,z1];
+ draw z0--z2;
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+
+ shiftpoint:=z1;
+)
+
+twopincharfour("mass")("m")(".")("*")("mass; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+
+ shiftpoint:=z3;
+)
+
+%% WALL
+
+wall_lt#= 1.5CIu#;
+wall_ht#= 2.5CIu#;
+define_whole_pixels(wall_ht, wall_lt);
+wall_f=1/3;
+wall_n=6;
+wall_alpha=40;
+
+twopincharfour("wall")("{}")(".")("|")("wall")
+ (wall_lt#,.5wall_ht#
+ +wall_lt#*(1-wall_f)*sind(wall_alpha),.5wall_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(wall_f*wall_lt,0);
+ draw z0--z1;
+ z1=.5[z2,z3]; y3-y2=wall_ht; x3=x2;
+ pickup pensquare scaled verythickline;
+ draw z2--z3;
+ path a;
+ a=(0,0)--(1-wall_f)*wall_lt*dir(wall_alpha);
+ pickup pencircle scaled normalline;
+ for i:=0 upto wall_n: draw a shifted (i/wall_n)[z2,z3]; endfor
+
+ shiftpoint:=z0+(wall_lt,0);
+)
+
+tile_lt#= 2CIu#;
+tile_ht#= .4CIu#;
+tile_f=0.1;
+
+define_whole_pixels(tile_lt,tile_ht);
+
+twopincharfour("tile")("{}")(".")("*")("tile")
+ (wall_lt#,.5tile_ht#,.5tile_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(tile_lt,0);
+ z2=tile_f[z0,z1];
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z1--z2;
+ shiftpoint:=z1;
+)
+
+spin_lt#= 2CIu#;
+spin_r#= .7CIu#;
+spin_ht#= 2CIu#;
+spin_alt= .5CIu;
+spin_awd= .1CIu;
+define_whole_pixels(spin_lt,spin_r, spin_ht);
+
+twopinchar("spinu")("S")("spin up")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3-spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+twopinchar("spind")("S")("spin down")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=-spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3+spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+endCIRCfont
+%</ciphysicmf>
+%^^A last update: Fri 03-13-1998
+%
+%<*csybimos>
+font_identifier:="cibimos";
+
+string optionname; optionname:="";
+
+input defcirc.mf;
+
+input csym;
+designsize:=1lLE#;
+
+def mosfet = % ok
+ z0=(0,0);
+ x1=x2=x3=x4;
+ y2-y1=mos_SD;
+ y4-y3=mos_sd;
+ .5[z2,z1]=.5[z4,z3];
+ y6=y4; y7=y3;
+ x4-x6=x3-x7;
+ .5[z8,z9]=.5[z6,z7]=z5;
+ x9=x8;
+ y8-y6=mos_soSD;
+ x10=x11;
+ x0+mos_Gsub=x10+mos_ox=x7;
+ x1-x0=mos_GSx;
+ y0=y10=y1+mos_GSy;
+ y6-y11=y10-y7;
+ z12=.5[z1,z2];
+ z6=.5[z13,z8];
+ z7=.5[z14,z9];
+ z15-z16=z8-z13;
+ z5=.5[z15,z16];
+ pickup pencircle scaled mos_rad;
+ drawdot round(z3);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z7;
+ draw z2--z4--z6;
+ draw z0--z10--z11;
+ draw z5--z12--z3;
+ pickup pensquare scaled thickline;
+enddef;
+
+def mosfet_V = % ok
+ mosfet;
+ draw z8--z9;
+enddef;
+
+def mosfet_A = % ok
+ mosfet;
+ draw z8--z13;
+ draw z9--z14;
+ draw z15--z16;
+enddef;
+
+def fet = % ok
+ z0=(0,0);
+ z1=z0+(fet_Gsub,0);
+ y2=y1;
+ x2=x3=x4=x0+fet_GSx;
+ y3=y2-fet_GSy;
+ z2-z3=z4-z5;
+ y4-y3=fet_SD;
+ y6=y5;
+ x1=x6;
+ x8=x7;
+ y8=y1-fet_soSD;
+ .5[z4,z3]=.5[z5,z2];
+ .5[z7,z8]=.5[z1,z6];
+ z9=z1-(fet_sarr+tri_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ draw z6--z5--z4;
+ pickup pensquare scaled thickline;
+ draw z7--z8;
+enddef;
+
+def transistor_without_basis = % "uberarbeiten
+ numeric pl;
+ pl:=.5(tst_ht-tst_iht);
+ z1-z2=(0,tst_iht);
+ z0=.5[z1,z2];
+ z3=tst_fac[z0,z1];
+ z4=tst_fac[z0,z2];
+ z5=z1+(tst_wd,0);
+ z6=z2+(tst_wd,0);
+ z7=z5+(0,pl);
+ z8=z6+(0,-pl);
+ z9=tst_dis[z4,z6];
+ pickup pensquare scaled normalline;
+ draw z1--z2;
+ draw z3--z5--z7;
+ draw z4--z6--z8;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z6-z4));
+enddef;
+
+def npn_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn_photo = % "uberarbeiten
+numeric pl;
+ z0=(0,0);
+ pl:=.5(tst_ht-tst_iht);
+ y0=y1=y2=y3;
+ x1=x0+tst_ht;
+ x2-x0=x1-x3=pl;
+ y5=y4=y6=y7=y8=y0+tst_wd;
+ x5-x6=tst_iht;
+ x4=.5[x5,x6]=.5[x0,x1];
+ x7=tst_fac[x4,x5];
+ x8=tst_fac[x4,x6];
+ z9=tst_dis[z2,z8];
+ pickup pensquare scaled normalline;
+ draw z0--z2--z8--z7--z3--z1;
+ draw z5--z6;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z8-z2));
+enddef;
+
+def pnp_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+def pnp = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+
+"Transistor NPN ohne Basis";
+eightchars(0)
+ (npn_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP ohne Basis";
+eightchars(8)
+ (pnp_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor NPN";
+eightchars(16)
+ (npn)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP";
+eightchars(24)
+ (pnp)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"FET n-Kanal";
+eightchars(32)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z1,tri_lt,tri_phi,180);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"FET p-Kanal";
+eightchars(40)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z9,tri_lt,tri_phi,0);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"MOSFET n-Kanal V";
+eightchars(48)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal V";
+eightchars(56)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET n-Kanal A";
+eightchars(64)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal A";
+eightchars(72)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+current_char_code:=80;
+
+twopincharfourfour("npnPH")("T")("E")("C")("photo transistor")
+ (tst_ht#,tst_wd#+1.6lLE#,0)
+(
+shiftpoint:=z1;
+npn_photo;
+lightarrows(z4+(.8lLE,1.7lLE),240);
+)
+
+end;
+%</csybimos>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csysym>
+input csym;
+designsize:=.5lLE#;
+
+def eqtriangle(expr l)=
+ x1=x2=x0=x3-l;
+ y3=y0;
+ z1-z2=(z3-z2) rotated 60;
+enddef;
+
+def sinus(expr A, k, s) =
+ j:=0;
+ for i:=0 step s until 360:
+ z[j]=(k*i,A*sind(i));
+ j:=j+1;
+ endfor
+ draw for i:=0 upto floor(360/s)-1: z[i].. endfor z[floor(360/s)];
+enddef;
+
+def disarrow =
+ z0=(0,0);
+ x0=x1=x2;
+ y1-y2=darr_ht;
+ .5[z1,z2]=z0;
+ y0=y3;
+ x3-x0=darr_lt;
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z1--z2;
+ triangle(z0,darr_rad,darr_phi,0);
+enddef;
+
+def trigger =
+ z0=(0,0);
+ x1=x2; x3=x4;
+ y2=y4=y5; y0=y1=y3;
+ x3-x1=.17sym;
+ x1-x0=x5-x4=.3sym;
+ y2-y1=sym;
+enddef;
+
+def impuls =
+ z0=(0,0);
+ y0=y1=y4=y5=y7=y8=y9;
+ x1-x0=x3-x2=x5-x4=x8-x7=.6sym;
+ x9-x0=x6-x2=.2sym;
+ x1=x2; x3=x4; x6=x7;
+ y2-y1=y3-y4=y6-y7=sym;
+ x10=x0; y11=y10=y2;
+ x11=x8;
+enddef;
+
+
+
+ "Rechteckimpuls";
+ beginchar(1,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ endchar;
+
+ "positive Flanke";
+ beginchar(2,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ endchar;
+
+ "negative Flanke";
+ beginchar(3,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z2--z3--z4--z5) shifted (x0-x1,0);
+ endchar;
+
+ "Nadelimpuls";
+ beginchar(4,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z0--z1--z2--z6--z7--z8);
+ endchar;
+
+ "inverser Nadelimpuls";
+ beginchar(12,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z10--z2--z1--z7--z6--z11);
+ endchar;
+
+ "Rechteckspannung";
+ beginchar(5,3.1sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ draw (z0--z1--z2--z3--z4--z5) shifted z4;
+ endchar;
+
+ "Rechteckimpulse";
+ beginchar(13,2.6sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z6--z7--z8;
+ draw (z0--z1--z2--z6--z7--z8) shifted z4;
+
+ endchar;
+
+ "S"&ditto&"agezahn";
+ beginchar(6,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z9--z3--z4--z5;
+ endchar;
+
+ "Trigger";
+ beginchar(7,.87sym#,sym#,0);
+ trigger
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z5;
+ draw z1--z3--z4;
+ endchar;
+
+ "Abstandsst"&ditto&"uck";
+ fourchars(8)(disarrow)(z0)(.5darr_ht#,darr_lt#,.5darr_ht#);
+
+"sinus wave";
+beginchar(16,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+endchar;
+
+"variable sinus wave";
+beginchar(17,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+ fillarrow((.8*sym,0),20/35*sym,15/35*sym,45,15/35*sym,15)();
+endchar;
+
+"symbol of amplifier";
+beginchar(24,cosd(30)*1.9sym#,.95sym#,.95sym#);
+ z0=(0,0);
+ eqtriangle(1.9sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+"symbol of buffer";
+beginchar(25,cosd(30)*1sym#,.5sym#,.5sym#);
+ z0=(0,0);
+ eqtriangle(1sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+bye;
+%</csysym>
+%
+%^^A last update: Fri 03-13-1998
+%<*defcircmf>
+mode_setup;
+font_coding_scheme:="CIRC symbols";
+
+message("CIRC %<*"&font_identifier_&">");
+message("CIRC \freecirc");
+message("CIRC \addCIRCfont "&font_identifier_);
+message("CIRC %</"&font_identifier_&">");
+message("CIRC %<+doc> \optionline "&optionname);
+message("CIRC %<*"&font_identifier_&",doc>");
+message("");
+
+inner bye;
+def endCIRCfont =
+ message("CIRC %</"&font_identifier_&",doc>");
+ message("CIRC %<*"&font_identifier_&">");
+ message("CIRC \protectcirc");
+ message("CIRC %</"&font_identifier_&">");
+ message("");
+ bye;
+enddef;
+
+CIu#:=7pt#; define_whole_pixels(CIu);
+% define all symbols by a 7pt grid --> CIRC unit
+
+current_char_code:=0;
+% start with character code 0
+
+pair shiftpoint;
+
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1CIu#;
+%export the CIRC unit to TeX
+
+extra_endchar:=extra_endchar & "labels(range 0 thru 100);";
+% for proofing mark all points
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+
+def twopinchar(text name, lab, doc)(expr wd, ht, dp)(text body) =
+ message("CIRC \cdef "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code));
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code, wd, ht, dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfourfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiviv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+%</defcircmf>
+%^^A last update: Sat 06-13-2003
+%
+%<*csywidko>
+input csym;
+designsize:=.5lLE#;
+
+def resistor =
+ numeric pl;
+ pl:=.5(res_lt-res_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(res_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,res_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z0+(res_x,-res_y);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z6--z7--z5--cycle;
+enddef;
+
+usR_iwd# = 3lLE#;
+usR_iht# = 1lLE#;
+usR_wd# = 4lLE#;
+usR_f = .25;
+define_pixels(usR_iwd, usR_iht, usR_wd);
+
+vardef usR =
+ z0=(0,0);
+ z1=z0;
+ y1=y2=y3=y4;
+ x2-x1=usR_wd;
+ x4-x3=usR_iwd;
+ .5[x1,x2]=.5[x3,x4];
+ y5=y7=y9;
+ y6=y8=y10;
+ y5-y6=usR_iht;
+ .5[y5,y6]=y1;
+ x7-x5=x9-x7=x11-x9=x8-x6=x10-x8;
+ x6=.5[x5,x7];
+ x8-x6=(usR_wd-usR_iwd);
+ x5-x3=usR_f*(x8-x6);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z5--z6--z7--z8--z9--z10--z4--z2;
+enddef;
+
+vardef usR_var =
+ {{
+ addxTF(shifted -z6 rotated -90);
+ usR;
+ pickup pensquare scaled normalline;
+ arrow(z6,.8res_ara,.5usR_iht,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def resistor_var =
+ {{
+ addxTF(shifted -z8 rotated -90);
+ resistor;
+ pickup pensquare scaled normalline;
+ arrow(z8,res_ara,0,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,cap_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def capacitor_var =
+ capacitor;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],cap_ara,cap_arb,cap_phi,arr_lt,arr_phi)();
+enddef;
+
+def electrolytic_capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc-cap_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(cap_wd,0);
+ z4=z3+(pl,0);
+ z5-z6=z7-z8=z9-z10=(0,cap_ht);
+ z1=.5[z5,z6];
+ z2=.5[z7,z8];
+ z3=.5[z9,z10];
+ draw z0--z1;
+ draw z3--z4;
+ draw z5--z6;
+ draw z7--z9--z10--z8--cycle;
+enddef;
+
+
+"Widerstand";
+twochars(0)(resistor)(.5res_ht#,res_lt#,.5res_ht#);
+
+"US Widerstand";
+twochars(24)(usR)(.5res_ht#,res_lt#,.5res_ht#);
+
+"Widerstand variabel";
+eightchars(8)(resistor_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"US Widerstand variabel";
+eightchars(32)(usR_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"Kondensator";
+twochars(128)(capacitor)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Kondensator variabel";
+twochars(130)(capacitor_var)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Elektrolyt-Kondensator";
+fourchars(136)(electrolytic_capacitor)(z4)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+end;
+%</csywidko>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csym>
+mode_setup;
+
+% alle Symbole in einem 7pt Raster definieren
+lLE# :=7pt#;
+define_whole_pixels(lLE);
+
+% Liniest"arke und deren Variationen
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1lLE#;
+
+% *_ht means the total height !!! only <integer>*lLE#
+% *_lt means the total length !!! only <integer>*lLE#
+
+% *_spc means an inner space
+% *_spx means an inner x-space
+% *_spy means an inner y-space
+% *_wd means an inner width
+% *_rad means a radius
+% *_dia means a diameter
+% *_phi means an angle
+% *_psi means an angle
+
+%box symbol
+box_wd# := 4lLE#;
+define_pixels(box_wd);
+
+%oscillograph
+osc_dia# := 3lLE#;
+osc_t := .75; % settings from Andreas Tille
+osc_spc := .5lLE;
+define_pixels(osc_dia);
+
+%wwire
+ww_spc := .25lLE;
+
+darr_ht# := 1.3lLE#;
+darr_lt# := 1lLE#;
+darr_phi := 10;
+darr_rad := 1lLE;
+define_pixels(darr_ht,darr_lt);
+
+
+bnd_lt# := 1lLE#;
+bnd_phi := 60;
+define_pixels(bnd_lt);
+
+dsw_wd# := 4lLE#;
+dsw_ht# := 2lLE#;
+dsw_ov := .2lLE;
+dsw_t := .2;
+dsw_cc := .35;
+dsw_c := .3;
+dsw_phi := 12;
+define_pixels(dsw_wd,dsw_ht);
+
+
+tri_lt := 0.8lLE;
+tri_phi := 18;
+
+arr_lt := 0.8lLE;
+arr_phi := 10;
+
+
+%capacitor
+cap_wd := .4lLE; %only for electrolytic capacitor
+cap_spx := .32lLE; %only for electrolytic capacitor
+cap_spy := .5lLE; %only for electrolytic capacitor
+cap_rad := .4lLE;
+cap_spc := .32lLE;
+cap_ht# := 2lLE#;
+cap_lt# := 2lLE#;
+cap_phi := 45;
+cap_ara := 1.4lLE;
+cap_arb := 1.2lLE;
+define_pixels(cap_lt,cap_ht);
+
+%resistor
+res_wd := 3lLE;
+res_ht# := 1lLE#;
+res_lt# := 4lLE#;
+res_ara# := 3.3lLE#;
+res_phi := 45;
+res_x# := 1lLE#;
+res_y# := 1lLE#;
+res_o# := res_ara#*cosd(res_phi)-res_y#;
+define_pixels(res_lt,res_ht,res_x,res_y,res_o,res_ara);
+
+%diode
+did_wd := 1.5lLE;
+did_ht# := 1.5lLE#;
+did_lt# := 3lLE#;
+did_zlt := .4lLE;
+Dcap_ht := .5lLE;
+Dcap_spc := .15lLE;
+Dcap_wd := .35lLE;
+define_pixels(did_lt,did_ht);
+
+thy_ht# := 1lLE#;
+define_pixels(thy_ht);
+
+%led
+% >wd ht lt< same as diode
+% led_* means values for the arrows
+led_lt# := 1.5lLE#;
+led_wd := .8lLE;
+led_phi := 10; %aperture-angle of arrows
+led_psi := 50; %angle of arrows from baseline
+led_spc := .4lLE; %space between arrows
+led_spx := .4lLE;
+led_spy# := .8lLE#;
+define_pixels(led_spy, led_lt);
+
+
+%transistor
+pnp_dis := 0.18;
+npn_dis := (1-pnp_dis);
+tst_fac := 0.23333;
+tst_phi := 20;
+tst_iht := 3lLE;
+tst_wd# := 1lLE#;
+tst_lt# := 2lLE#;
+tst_ht# := 4lLE#;
+define_pixels(tst_ht,tst_lt,tst_wd);
+
+%crystal
+cry_wd := .8lLE;
+cry_spc := .32lLE;
+cry_ht# := 2lLE#;
+cry_lt# := 4lLE#;
+define_pixels(cry_lt,cry_ht);
+
+%input/output connection
+ioc_dia := .5lLE;
+ioc_ht# := .5lLE#;
+ioc_lt# := 1lLE#;
+ioc_arr := 0.7lLE;
+ioc_phi := 12;
+define_pixels(ioc_ht,ioc_lt);
+
+%connection dot
+cdt_dia := .4lLE;
+cdt_ht# := .4lLE#;
+cdt_lt# := .2lLE#;
+define_pixels(cdt_ht,cdt_lt);
+
+%GND
+GND_wd# := 1.4res_ht#;
+gnd_wd# := 1.8lLE#;
+gnd_ht# := 1lLE#;
+gnd_spc# := .2lLE#;
+gnd_q := .7;
+define_pixels(gnd_ht,gnd_spc,gnd_wd,GND_wd);
+
+%gate
+inv_rad := .36lLE;
+gat_ht# := 5lLE#;
+gat_lt# := 7lLE#;
+define_pixels(gat_lt,gat_ht);
+
+bbd_wd# := 6lLE#;
+bbd_ht# := 10lLE#;
+bba_wd# := 8lLE#;
+bba_ht# := 4lLE#;
+define_pixels(bbd_wd,bbd_ht,bba_wd,bba_ht);
+
+%big integrated circuits
+pin_lt# := 2lLE#; % pin length
+ios_wd# := 2.5lLE#; % in out space
+mid_wd# := 0lLE#; % middle width
+pin_spc# := 2lLE#; % pin space
+out_spc# := 1lLE#; % outer space between pin and box
+
+define_pixels(pin_lt,ios_wd,mid_wd,pin_spc,pin_wht,out_spc);
+
+%value
+val_lt# := 2lLE#;
+val_phi := 7;
+val_lft := 0;
+val_rht := 0.9;
+val_ht# := .2lLE#;
+define_pixels(val_lt,val_ht);
+
+%circle
+cir_ht# := 1.2lLE#;
+cir_lt# := 4lLE#;
+cir_phi := 45;
+cir_ara := 2.2lLE;
+cir_arb := 1.8lLE;
+define_pixels(cir_ht,cir_lt);
+
+%usource
+uso_ht# := 1.5lLE#;
+uso_lt# := 4lLE#;
+uso_min := 1lLE;
+uso_pls := 3lLE;
+uso_spc := .5lLE;
+uso_rad := 3lLE;
+uso_dis := 0.2;
+uso_phi := 45;
+uso_ara := 1.6lLE;
+uso_arb := .8lLE;
+define_pixels(uso_ht,uso_lt);
+
+%isource
+iso_ht# := 1.2lLE#;
+iso_lt# := 4lLE#;
+iso_dis := 0.7;
+iso_rad := .8lLE;
+iso_phi := 45;
+iso_ara := 2.2lLE;
+iso_arb := 1.8lLE;
+define_pixels(iso_ht,iso_lt);
+
+%coil
+coi_ht# := .35lLE#;
+coi_lt# := 4lLE#;
+define_pixels(coi_ht,coi_lt);
+coi_rad := coi_ht;
+coi_num := 4;
+
+%switch
+swt_lt# := 4lLE#;
+swt_phi := 30;
+swt_dis := 0.3;
+swt_ind := 0.8;
+swt_slt := 0.4lLE;
+swt_ht# := (1-2swt_dis)*sind(swt_phi)*swt_lt#;
+define_pixels(swt_ht,swt_lt);
+
+%OPV
+opv_ht# := 4.5lLE#;
+opv_lt# := 14lLE#;
+opv_dis# := 3lLE#;
+opv_frc := 1.1;
+define_pixels(opv_lt,opv_ht,opv_dis);
+
+%FET
+fet_SD# := 4lLE#; % Source--Drain
+fet_GSx# := 2lLE#; % Gate--Source, x
+fet_GSy# := 1lLE#; % Gate--Source, y
+fet_Gsub := 1lLE; % Gate--Substrat
+fet_soSD := 0.3lLE; % Substrat "uber Source und Drain
+fet_sarr := 0.2lLE; % Substrat--Pfeil
+define_pixels(fet_SD,fet_GSx,fet_GSy);
+
+
+%MOSFET
+mos_SD# := fet_SD#;
+mos_GSx# := fet_GSx#;
+mos_GSy# := fet_GSy#;
+
+mos_sd := 2.3lLE;
+mos_Gsub := fet_Gsub;
+mos_ox := 0.3lLE;
+mos_soSD := fet_soSD;
+mos_rad := 0.2lLE;
+define_pixels(mos_SD,mos_GSx,mos_GSy);
+
+sym# := 232/36pt#;
+define_pixels(sym);
+
+% ############
+% definitions
+% ############
+
+% for proofing mark all points
+extra_endchar:=extra_endchar & "labels(range 0 thru 30);";
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def noarrowTF =
+ transform _aT;
+ numeric _x[],_y[];
+ _aT:=currenttransform;
+ for $=1 upto 20 : _x[$]:=x[$]; _y[$]:=y[$]; endfor;
+ endgroup;
+ for $=1 upto 20 : x[$]:=_x[$]; y[$]:=_y[$]; endfor;
+ {{
+enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+def addxTF(text t) = currenttransform:=(identity t) transformed
+ currenttransform; enddef;
+
+def triangle(expr p, l, alpha, phi) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0+((l,0) rotated (alpha+phi));
+ iz2=iz0+((l,0) rotated (-alpha+phi));
+ fill ((iz0--iz1--iz2--cycle) shifted round(p));
+enddef;
+
+def arrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ draw ((iz1--iz0--iz2) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+def fillarrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ fill ((iz1--iz0--iz2--cycle) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+lightarr_spc#=.5lLE#;
+lightarr_lt#=1.5lLE#;
+lightarr_alt=round(.7lLE);
+lightarr_awd=round(.2lLE);
+define_pixels(lightarr_spc,lightarr_lt);
+def lightarrows(expr zpoint,lightarr_psi) =
+ z100=zpoint;
+ x100=x103=x105;
+ x101=x104=x106=x100+lightarr_lt;
+ y103=y104=y100+.5lightarr_spc;
+ y105=y106=y100-.5lightarr_spc;
+ x107=x108=x109=x110=x104-lightarr_alt;
+ y107-y108=y109-y110=good.y(lightarr_awd);
+ .5[y107,y108]=y104;
+ .5[y109,y110]=y106;
+ pickup pensquare scaled normalline rotated lightarr_psi;
+ draw (z107--z104--z108--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z109--z106--z110--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z103--z104) rotatedaround(z100,lightarr_psi);
+ draw (z105--z106) rotatedaround(z100,lightarr_psi);
+
+enddef;
+
+
+def eightchars(expr cfchar) % erster Zeichenkode
+ (text dochar) % Zeichenkommandos
+ (expr x, yf, ys, o) = % Abst"ande
+
+ beginchar(cfchar,x,ys,yf); charic:=o;
+ dochar;
+ endchar;
+ beginchar(cfchar+1,x,ys,yf); charic:=o;
+ {{addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+2,yf,x,o+x); charic:=ys;
+ {{addTF(rotated 270); dochar;}}
+ endchar;
+ beginchar(cfchar+3,yf,x+o,x); charic:=ys;
+ {{addTF(rotated 270); addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+4,x,yf,ys); charic:=o;
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,x,yf,ys); charic:=o;
+ {{addTF(rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+6,ys,x,x+o); charic:=yf;
+ {{addTF(rotated 270); addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+7,ys,x+o,x); charic:=yf;
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def twochars(expr cfchar)(text dochar)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def fourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+def fourfourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+ beginchar(cfchar+4,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+6,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+7,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+% small description of >hshade< and >vshade<
+%
+% The shade macros fill areas with a 'patternpath'.
+%
+% >vshade< expect that the area is bound left and right by vertical
+% lines, the upper and lower boundary is build by the two pathes
+% >pa< and >pb<.
+%
+% >hshade< expect it vice versa.
+%
+% The >patternpath< is used to draw it on invisible points of a grid.
+% These gridpoints have a distance of 'di'.
+
+primarydef x gridmod y = if x>0: (x mod y) else: -(-x mod y) fi enddef;
+
+def vshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path vl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ ydi:=round(1.41di); % round against pattern in
+ xdi:=round(di); % pattern
+ if xdi<2: errmessage "di to small! di>=2" fi;
+ xs:=xpart(point 0 of pa);
+ xe:=xpart(point infinity of pa);
+ if xs>xe: ye:=xe; xe:=xs; xs:=ye; fi %force xs<xe
+ xs:=xs+((xe-xs) mod xdi) / 2; %adjust grid horizontally
+ vl:=(xs,infinity)--(xs,-infinity);
+ oys:=ypart(pa intersectionpoint vl);
+ oys:=oys-.5ydi; %adjust grid vertically
+ for xs:=xs step xdi until xe:
+ vl:=(xs,infinity)--(xs,-infinity); % new cut line
+ ys:=ypart(pa intersectionpoint vl);
+ ye:=ypart(pb intersectionpoint vl);
+ ifshift:=not(ifshift); %shift periodically
+ sy:=ydi-((ys-oys) gridmod ydi);
+ ys:=ys+sy if ifshift: if sy-.5ydi<0:+else:-fi .5ydi fi;
+ for ys:=ys step if ys>ye:-fi ydi until ye:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+def hshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path hl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ xdi:=round(1.41di); % round against pattern in
+ ydi:=round(di); % pattern
+ if ydi<2: errmessage "di to small! di>=2" fi;
+ ys:=ypart(point 0 of pa);
+ ye:=ypart(point infinity of pa);
+ if ys>ye: xe:=ye; ye:=ys; ys:=xe; fi %force ys<ye
+ ys:=ys+((ye-ys) mod ydi) / 2; %adjust grid vertically
+ hl:=(infinity,ys)--(-infinity,ys);
+ oxs:=xpart(pa intersectionpoint hl);
+ oxs:=oxs-.5ydi; %adjust grid horizontally
+ for ys:=ys step ydi until ye:
+ hl:=(infinity,ys)--(-infinity,ys); % new cut line
+ xs:=xpart(pa intersectionpoint hl);
+ xe:=xpart(pb intersectionpoint hl);
+ ifshift:=not(ifshift); %shift periodically
+ sx:=xdi-((xs-oxs) gridmod xdi);
+ xs:=xs+sx if ifshift: if sx-.5xdi<0:+else:-fi .5xdi fi;
+ for xs:=xs step if xs>xe:-fi xdi until xe:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+
+endinput;
+%</csym>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csydiod>
+input csym;
+designsize:=1lLE#;
+
+def diode = % "uberarbeiten
+ numeric pl;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(did_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,did_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z4+(did_zlt,0);
+ z9=z0+(0,thy_ht);
+
+ z10=.35[z5,z7];
+ z11=z10-(.5Dcap_spc,0);
+ z12=z10+(.5Dcap_spc,0);
+ y13=y15; y14=y16;
+ x13=x14; x15=x16;
+ y13-y14=Dcap_ht;
+ z11=.5[z13,z14];
+ z12=.5[z15,z16];
+ z17=z11-(Dcap_wd,0);
+ z18=z12+(Dcap_wd,0);
+
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z4--z5;
+ draw z1--z6--z7--cycle;
+enddef;
+
+def Dcap =
+ pickup pensquare scaled normalline;
+ draw z17--z11;
+ draw z13--z14;
+ draw z15--z16;
+ draw z12--z18;
+enddef;
+
+def led_arrows = % "uberarbeiten
+ numeric pl;
+ numeric x[],y[];
+ transform arr_a,arr_b;
+ pickup pencircle scaled thickline;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z4=z0+(pl,0);
+ z1=z0+(led_lt,0);
+ (z1-z2)=(led_wd,0) rotated led_phi;
+ (z1-z3)=(led_wd,0) rotated -led_phi;
+ arr_a:=identity rotated led_psi shifted
+ (z4+(led_spx+.5led_spc*cosd(led_psi),led_spy-.5led_spc*sind(led_psi)));
+ arr_b:=identity rotated led_psi shifted
+ (z4+(led_spx-.5led_spc*cosd(led_psi),led_spy+.5led_spc*sind(led_psi)));
+ draw (z0--z1) transformed arr_a;
+ draw (z0--z1) transformed arr_b;
+ fill (z2--z1--z3--cycle) transformed arr_a;
+ fill (z2--z1--z3--cycle) transformed arr_b;
+enddef;
+
+"Diode";
+fourchars(0)(diode)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"Z-Diode";
+fourchars(4)(diode; draw z4--z8)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"LED";
+fourfourchars(8)(diode; lightarrows(.5[z1,z6]+(0,.5lLE),120))(z3)
+(.5did_ht#+.5led_spy#+led_lt#*sind(led_psi),did_lt#,.5did_ht#);
+
+"Kapazit"&ditto&"atsdiode";
+fourchars(16)(diode; Dcap)(z3)(.5did_ht#,did_lt#,.65did_ht#);
+
+"Thyristor";
+
+end;
+%</csydiod>
+%^^A last update: Fri 03-13-1998
+%
+%<*csyrest>
+input csym;
+designsize:=.5lLE#;
+
+def gaslamp =
+ z0=(0,0);
+ z4=z0+(.5,0)*lLE;
+ y4=y3;
+ x2=x1;
+ x3=x4+3lLE;
+ y2=y1+2lLE;
+ y4=.5[y1,y2];
+ x1=.5[x4,x3];
+
+ x5=x0+1.1lLE;
+ y5=y0;
+ x7=x6=x5; y7-y6=.5lLE;
+ .5[y7,y6]=y0;
+
+
+ y8=y9=y0;
+ x8=x0+4lLE;
+
+ x9=x8-1.1lLE;
+
+ pickup pencircle scaled normalline;
+ draw superellipse(z3,z2,z4,z1,.75);
+ draw z0--z5;
+ draw z6--z7;
+ draw z8--z9;
+ pickup pencircle scaled .3lLE;
+ drawdot z9;
+enddef;
+
+def switch = %"uberarbeiten
+ numeric pl;
+ pl:=swt_lt*swt_dis;
+ sl:=(1-2swt_dis)*swt_lt;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+((sl,0) rotated swt_phi);
+ z3=z1+(swt_ind*sl,0);
+ z4=z0+(swt_lt,0);
+ z5=z3+(0,swt_slt);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2;
+ draw z3--z4;
+ draw z3--z5;
+enddef;
+
+
+def dswitch =
+ z0=(0,0);
+ z1=dsw_t[z0,z0+(dsw_wd,0)];
+ x2=x3=x4=x5=x0+((1-dsw_c)*dsw_wd);
+ y0=.5[y2,y3]=.5[y4,y5];
+ y2-y3=dsw_ht;
+ y2-y4=dsw_cc*dsw_ht;
+ y2=y6; y3=y7;
+ x6-x3=x7-x3=dsw_c*dsw_wd;
+ x8=x1+dsw_ov+((1-dsw_c-dsw_t)*dsw_wd);
+ y8=sind(dsw_phi)*x8/cosd(dsw_phi);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z8;
+ draw z4--z2--z6;
+ draw z5--z3--z7;
+enddef;
+
+def circle = % "uberarbeiten
+ numeric pl;
+ pl:=.5cir_lt-cir_ht;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z0+(.5cir_lt,0);
+ z3=z1+(2cir_ht,0);
+ z4=z3+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z3--z4;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2cir_ht shifted z2;
+enddef;
+
+def lamp =
+ circle
+ z10-z11=(2cir_ht,0) rotated 45;
+ z12-z13=(2cir_ht,0) rotated -45;
+ .5[z10,z11]=z2=.5[z12,z13];
+ pickup pencircle scaled normalline;
+ draw z10--z11;
+ draw z12--z13;
+enddef;
+
+def circle_var =
+ circle;
+ pickup pencircle scaled thinline;
+ noarrowTF;
+ arrow(z2,cir_ara,cir_arb,cir_phi,arr_lt,arr_phi)();
+enddef;
+
+def usource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(uso_lt-uso_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(uso_spc,0);
+ z3=z2+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ z1=.5[z4,z5]; x4-x5=0; y5-y4=uso_pls;
+ z2=.5[z6,z7]; x6-x7=0; y7-y6=uso_min;
+ pickup pensquare scaled thickline;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def usource_var =
+ usource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],uso_ara,cir_arb,uso_phi,arr_lt,arr_phi)();
+enddef;
+
+
+def isource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(iso_lt-(4-iso_dis)*iso_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(iso_rad,0);
+ z3=z2+((2-iso_dis)*iso_rad,0);
+ z4=z3+(iso_rad,0);
+ z5=z4+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled (2*iso_rad) shifted z2;
+ draw fullcircle scaled (2*iso_rad) shifted z3;
+enddef;
+
+def isource_var =
+ isource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z2,z3],iso_ara,iso_arb,iso_phi,arr_lt,arr_phi)();
+enddef;
+
+def value = % "uberarbeiten
+ z0=(0,0);
+ z1=z0+(val_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ z2=val_lft[z0,z1];
+ z3=val_rht[z0,z1];
+ triangle(z2,abs(z3-z2),val_phi,0);
+enddef;
+
+def coil = %"uberarbeiten
+ numeric pl;
+ pl:=.5(coi_lt-2coi_num*coi_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(coi_rad,0);
+ for m=1 upto coi_num-1: z[m+2]=z[m+1]+(2coi_rad,0); endfor;
+ z[2+coi_num]=z[1+coi_num]+(coi_rad,0);
+ z[3+coi_num]=z[2+coi_num]+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z[2+coi_num]--z[3+coi_num];
+ pickup pencircle scaled normalline;
+ for m=1 upto coi_num: draw halfcircle scaled 2coi_rad shifted z[m+1]; endfor;
+enddef;
+
+def crystal = %"uberarbeiten
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cry_lt-2cry_spc-cry_wd);
+ z0=(0,0); z1=z0+(pl,0);
+ z2=z1+(cry_spc,0);
+ z3=z2+(cry_wd,0);
+ z4=z3+(cry_spc,0);
+ z5=z4+(pl,0);
+ z6-z7=z8-z9=z10-z11=z12-z13=(0,cry_ht);
+ z2=.5[z6,z7]; z3=.5[z8,z9]; z1=.5[z10,z11]; z4=.5[z12,z13];
+ draw z0--z1; draw z4--z5; draw z10--z11; draw z12--z13;
+ draw z7--z9--z8--z6--cycle;
+enddef;
+
+def inout = % "uberarbeiten
+ z0=(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ z2=z0+(ioc_lt,0);
+ lft(z1)=z0+(.5ioc_dia,0);
+ draw z1--z2;
+enddef;
+
+def minout =
+ z0=(0,0);
+ z1=z0+(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ arrow(z0,0,ioc_lt,180,ioc_arr,ioc_phi)(pickup pencircle scaled normalline);
+enddef;
+
+def ground = % Masse z0 z11
+ z0=(0,0); x1=x0=x2=x3;
+ y0-y1=gnd_ht;
+ y1-y2=y2-y3=gnd_spc;
+ y4=y1=y10; y2=y6; y3=y8;
+ z1=.5[z4,z5]; x5-x4=gnd_wd;
+ z1=.5[z10,z11]; x11-x10=GND_wd;
+ z2=.5[z6,z7]; x7-x6=gnd_wd*gnd_q;
+ z3=.5[z8,z9]; x9-x8=gnd_wd*gnd_q*gnd_q*gnd_q;
+enddef;
+
+"Spule";
+fourchars(0)(coil)(z[3+coi_num])(coi_ht#,coi_lt#,0);
+
+"Quarz";
+twochars(4)(crystal)(.5cry_ht#,cry_lt#,.5cry_ht#);
+
+"Lampe";
+twochars(6)(lamp)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen";
+twochars(8)(circle)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen variabel";
+twochars(10)(circle_var)(cir_ht#,cir_lt#,cir_ht#);
+
+"Stromquelle";
+twochars(12)(isource)(iso_ht#,iso_lt#,iso_ht#);
+
+"Stromquelle variabel";
+twochars(14)(isource_var)(iso_ht#,iso_lt#,iso_ht#);
+
+"Spannungsquelle";
+fourchars(16)(usource)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Spannungsquelle variabel";
+fourchars(20)(usource_var)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Schalter";
+twochars(24)(switch)(swt_ht#,swt_lt#,0);
+
+"Umschalter";
+eightchars(32)(dswitch)(dsw_wd#,.5dsw_ht#,.5dsw_ht#,0);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+
+"Gas-Lamp";
+fourchars(40)(gaslamp)(z0)(1.5lLE#,4lLE#,1.5lLE#);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+"Anschl"&ditto&"usse Pfeil";
+fourchars(232)
+ (minout;)(z1)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse leer";
+fourchars(240)
+ (inout;
+ pickup pencircle scaled thinline;
+ draw fullcircle scaled ioc_dia shifted z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse voll";
+fourchars(244)
+ (inout;
+ pickup pencircle scaled ioc_dia;
+ draw z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Str"&ditto&"ome";
+fourchars(248)(value;)(z1)(val_ht#,val_lt#,val_ht#);
+
+"wwire half R";
+beginchar(112,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire R";
+beginchar(113,1lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=1lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half L";
+beginchar(114,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x3=x4;
+ x1=x2;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half U";
+beginchar(115,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire U";
+beginchar(116,0pt,1lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=1lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half D";
+beginchar(117,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y3=y4;
+ y1=y2;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+
+"dashed halfline R";
+beginchar(120,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line R";
+beginchar(121,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline L";
+beginchar(122,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed halfline U";
+beginchar(123,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line U";
+beginchar(124,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline D";
+beginchar(125,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb R";
+beginchar(128,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal R";
+beginchar(129,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb L";
+beginchar(130,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb U";
+beginchar(131,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal U";
+beginchar(132,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb D";
+beginchar(133,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"B"&ditto&"undel horizontal";
+beginchar(134,0,.8bnd_lt#,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated bnd_phi;
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"B"&ditto&"undel vertikal";
+beginchar(135,.8bnd_lt#,0pt,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated (90-bnd_phi);
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(136,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(137,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal halb L";
+beginchar(138,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb U";
+beginchar(139,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal U";
+beginchar(140,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb D";
+beginchar(141,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Oscillograph";
+beginchar(142,osc_dia#,.5osc_dia#,.5osc_dia#);
+ z0=(0,0);
+ z1=z0;
+ z5=.5[z1,z3]=.5[z2,z4];
+ x2=x4;
+ y1=y3;
+ x3-x1=y4-y2=osc_dia;
+ .5osc_gt+osc_spc+osc_stm=.5osc_dia;
+ osc_stm=osc_t*osc_gt;
+ z6=z1+(osc_stm,0);
+ z7=z2+(0,osc_stm);
+ z8=z3+(-osc_stm,0);
+ z9=z4+(0,-osc_stm);
+ z6=.5[z10,z11]; x10=x11; x16-x17=y14-y15=x12-x13=y11-y10=osc_gt;
+ z7=.5[z12,z13]; y12=y13;
+ z8=.5[z14,z15]; x14=x15;
+ z9=.5[z16,z17]; y16=y17;
+ pickup pensquare scaled normalline; %drawing style by Andreas Tille
+ draw z1--z6; %code rewritten by SeTa
+ draw z2--z7;
+ draw z3--z8;
+ draw z4--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled osc_dia shifted z5;
+ pickup pensquare scaled thickline;
+ draw z10--z11;
+ draw z12--z13;
+ draw z14--z15;
+ draw z16--z17;
+endchar;
+
+"a small grey elephant: Thanks to Andreas Tille.";
+%
+% The code is a little bit crazy.
+%
+LE#:=.03mm#;
+define_pixels(LE);
+numeric nPnt;
+def p(expr px,py) = x[nPnt]:=px*LE; y[nPnt]:=py*LE; nPnt:=nPnt+1 enddef;
+
+beginchar(252,540LE#,265LE#,274LE#);
+ pickup pencircle scaled 0.4pt;
+ path a, b;
+ picture cutpic;
+ nPnt:=0;
+
+p( 0, 0); % copyright by Sebastian Tannert
+p( 0, 18); % Please think of the hard work!
+%
+p( -2, 46);p( -3, 92);p( 8,117);p( 28,152);
+p( 38,171);p( 71,195);p(107,218);p(138,240);p(159,255);p(181,261);
+p(193,264);p(211,268);p(231,263);p(249,264);p(273,259);p(292,255);
+p(311,249);p(336,240);p(380,222);p(414,208);p(437,198);p(449,193);
+p(461,190);p(473,185);p(490,173);p(506,157);p(519,125);p(526, 91);
+p(530, 56);p(530, 35);p(523, 17);p(518, 1);p(509,-22);p(511,-46);
+p(515,-71);p(514,-96);p(512,-112);p(511,-135);p(507,-150);p(498,-171);
+p(485,-184);p(465,-197);p(448,-200);p(429,-194);p(418,-177);p(414,-168);
+p(420,-159);p(427,-157);p(435,-163);p(439,-171);p(449,-164);p(461,-165);
+p(470,-152);p(476,-139);p(476,-118);p(475,-97);p(465,-76);p(450,-62);
+p(442,-50);p(427,-36);p(417,-29);p(409,-27);p(392,-12);p(383,-10);
+p(374,-18);p(370,-34);p(363,-58);p(347,-92);p(343,-106);p(341,-126);
+p(330,-162);p(323,-196);p(322,-210);p(317,-237);p(327,-257);p(325,-268);
+p(310,-270);p(301,-272);p(284,-266);p(269,-258);p(268,-236);p(270,-210);
+p(282,-185);p(300,-151);p(315,-119);p(322,-93);p(325,-79);p(326,-63);
+p(315,-75);p(303,-101);p(292,-134);p(281,-164);p(269,-189);p(258,-220);
+p(259,-250);p(260,-266);p(252,-269);p(235,-260);p(221,-266);p(203,-261);
+p(194,-242);p(201,-227);p(206,-213);p(207,-190);p(215,-162);p(222,-147);
+p(225,-123);p(229,-96);p(234,-77);p(234,-65);p(236,-47);p(236,-30);
+p(236,-12);p(240,6);p(248,19);p(264,37);p(146,41);p(158,24);
+p(176,-3);p(188,-29);p(193,-53);p(185,-80);p(175,-106);p(165,-137);
+p(152,-173);p(143,-202);p(142,-222);p(136,-232);p(141,-253);p(132,-255);
+p(125,-255);p(105,-240);p(91,-239);p(75,-228);p(68,-205);p(70,-178);
+p(85,-156);p(96,-127);p(100,-112);p(95,-88);p(79,-62);p(60,-38);
+p(48,-16);p(36,18);p(28,63);p(24,41);p(28,17);p(29,-6);p(31,-32);
+p(26,-43);p(17,-65);p(15,-83);p(12,-106);p(7,-126);p(0,-141);
+p(-9,-147);p(-16,-131);p(-24,-110);p(-22,-94);p(-17,-75);p(-6,-55);
+p(-2,-34);p(2,-19);p(190,-63);p(209,-75);p(234,-69);p(31,-32);
+p(31,-44);p(26,-67);p(37,-95);p(45,-117);p(43,-158);p(38,-193);
+p(25,-224);p(29,-249);p(52,-266);p(71,-264);p(88,-266);p(113,-273);
+p(133,-273);p(138,-268);p(132,-255);p(457,48);p(462,30);p(481,21);
+p(477,40);p(449,32);p(456,11);p(478,5);p(464,60);p(486,61);
+p(499,37);p(363,93);p(352,110);p(348,129);p(358,149);p(386,162);
+p(414,173);p(427,178);p(443,167);p(456,157);p(461,142);p(450,126);
+p(436,110);p(419,74);p(409,53);p(396,40);p(372,51);p(365,67);
+p(358,148);p(375,139);p(387,124);p(401,128);p(411,146);p(418,163);
+p(427,168);p(443,167);p(444,161);p(434,152);p(432,135);p(440,124);
+p(451,128);p(460,141);p(455,157);p(350,138);p(459,138);p(-30,276);
+p(539,-283);p(539,276);p(-30,-283);p(427,-41);p(436,-54);
+
+draw for i:=0 upto 109: z[i]..endfor
+z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+for i:=124 upto 144: z[i]..endfor z145---z146..z147{down}..
+for i:=148 upto 164: z[i]..endfor z0;
+
+draw for i:=110 upto 116: z[i].. endfor z117;
+draw for i:=118 upto 122: z[i].. endfor z123{down};
+
+draw for i:=168 upto 182: z[i].. endfor z183;
+
+
+draw for i:=194 upto 210: z[i].. endfor cycle;
+
+draw for i:=211 upto 217: z[i].. endfor z218;
+
+a:= z226..z197..z198..z199..z200..z201..z202..z203..z227;
+b:= z226--z227;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z227..z206..z207..z208..z209..z210..z194..
+ z195..z196..z226;
+b:= z227--z226;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z228--z230;
+b:= z231--z229;
+vshade(a,b,4,unitsquare);
+
+cutpic=nullpicture;
+
+addto cutpic contour(z228+(0,10)--z230+(10,10)--z229--z231--cycle);
+
+pickup pencircle scaled 0.7pt
+
+addto cutpic contour (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor cycle) withweight -1;
+
+addto cutpic doublepath
+ (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor z0) withpen currentpen
+ withweight -1;
+
+addto cutpic doublepath z232..z233 withpen currentpen withweight -1;
+
+addto cutpic contour (for i:=168 upto 182: z[i].. endfor z183..z146..cycle)
+ withpen currentpen withweight -1;
+
+cull cutpic keeping (1,infinity) withweight -3;
+
+addto currentpicture also cutpic;
+
+pickup pencircle scaled .7pt;
+draw z184..z185{z186-z184}..z186;
+draw z186..z187{z184-z186}..z184;
+
+draw z188..z189..z190;
+draw z191..z192..z193;
+draw z232..z233;
+
+endchar;
+
+
+"Masse";
+beginchar(253,.5gnd_wd#,0,gnd_ht#+gnd_spc#+gnd_spc#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ draw z6--z7;
+ draw z8--z9;
+endchar;
+
+"MASSE";
+beginchar(254,.5GND_wd#,0,gnd_ht#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z10--z11;
+endchar;
+
+"Verbindungspunkt";
+beginchar(255,cdt_lt#,.5cdt_ht#,.5cdt_ht#);
+ pickup pencircle scaled cdt_dia;
+ z0=(0,0);
+ drawdot z0;
+endchar;
+
+end;
+%</csyrest>
+%
+%^^A last update: Fri 03-13-1998
+%<*optic>
+input csym;
+
+string optionname; optionname="optics";
+
+font_identifier="cioptic";
+
+input defcirc;
+
+% half of linelength of optical axis
+hsoa:=.128CIu;
+
+% lenses
+% thin convex lens
+slens_ht# := 2CIu#;
+slens_lt# := 2CIu#;
+slens_phi := 60;
+% lensthickness:
+slens_spc := .55CIu;
+define_pixels(slens_lt,slens_ht);
+
+% thick convex lens
+blens_ht# := 2CIu#;
+blens_lt# := 2CIu#;
+blens_phi := 45;
+blens_spc := .88CIu;
+define_pixels(blens_lt,blens_ht);
+
+% thin concave lens
+sklens_ht# := 2CIu#;
+sklens_lt# := 2CIu#;
+sklens_phi := 60;
+sklens_spc := .58CIu;
+sklens_bt := 1CIu; % Breite Bottom und Top
+define_pixels(sklens_lt,sklens_ht);
+
+% mirror
+mir_ht# := 2CIu#;
+mir_lt# := 2CIu#;
+mir_wd := .5CIu; % Schraffurl"ange
+define_pixels(mir_ht,mir_lt);
+
+% boxes for optical modulator and laser
+omb_wd# := 3CIu#;
+omb_ht# := 2CIu#;
+lab_wd# := 4CIu#;
+lab_ht# := 2CIu#;
+define_pixels(omb_wd,omb_ht,lab_wd,lab_ht);
+
+% polarizer
+pol_ht# := 2CIu#;
+pol_lt# := 2CIu#;
+pol_spc := .2CIu;
+define_pixels(pol_ht,pol_lt);
+
+% pinhole
+pin_ht# := 2CIu#;
+pin_lt# := 2CIu#;
+pin_spx := .16CIu;
+pin_spy := .08CIu;
+pin_spz := .5CIu;
+define_pixels(pin_ht,pin_lt);
+
+% camera
+cam_ht# := 2CIu#;
+cam_lt# := 3CIu#;
+cam_spx := 2CIu;
+cam_spy := 1CIu;
+define_pixels(cam_ht,cam_lt);
+
+% screen
+scr_ht# := 4CIu#;
+scr_lt# := 2CIu#;
+scr_spx := 1CIu;
+scr_spy := 1CIu;
+define_pixels(scr_ht,scr_lt);
+
+def rectangle(expr width, height, xs, ys) =
+ draw (xs,.5height+ys)--(width+xs,.5height+ys)--(width+xs,-.5height+ys)--
+ (xs,-.5height+ys)--cycle;
+enddef;
+
+def small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z2=(.5CIu,0); z3=z2+(hsoa,0);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z0{dir (180-slens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z0{dir (180-blens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt-sklens_bt);
+ z0=(ql,-.5sklens_ht);
+ z1=(sklens_lt-ql,-.5sklens_ht);
+ z2=(ql,.5sklens_ht);
+ z3=(sklens_lt-ql,.5sklens_ht);
+ z4=(.5CIu,0); z5=z4+(hsoa,0);
+ z6=(sklens_lt-.5CIu,0); z7=z6-(hsoa,0);
+ draw z0{dir sklens_phi}..z2--z3{dir (180+sklens_phi)}..z1--z0;
+ draw z4--z5; draw z6--z7;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt+sklens_bt);
+ z0=(.5sklens_lt,-.5sklens_ht);
+ z1=(ql,-.5sklens_ht);
+ z2=(.5sklens_lt,.5sklens_ht);
+ z3=(ql,.5sklens_ht);
+ draw z0--z2--z3{dir (180+sklens_phi)}..z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def mirror =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+ halfmirror;
+ pickup pensquare scaled thinline;
+ for i=.125 step .125 until .875:
+ draw (i*mir_lt,(.5-i)*mir_ht)--(mir_wd+i*mir_lt,mir_wd+(.5-i)*mir_ht);
+ endfor
+enddef;
+
+def halfmirror =
+ pickup pensquare scaled thickline;
+ draw (.5mir_wd,.5(mir_ht-mir_wd))--(mir_lt-.5mir_wd,.5(mir_wd-mir_ht));
+enddef;
+
+def halfmirrorline =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,.5mir_ht);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+enddef;
+
+def polarizer =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pol_lt-pol_spc);
+ z0=(pl,.5pol_ht);
+ z1=z0+(0,-pol_ht);
+ z2=z1+(pol_spc,0);
+ z3=z0+(pol_spc,0);
+ draw z0--z1--z2--z3--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def pinhole =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pin_lt-pin_spx);
+ fill (.5pin_lt,.5pin_spy)--(pl,.5pin_spz)--(pl,.5pin_ht)--
+ (pl+pin_spx,.5pin_ht)--(pl+pin_spx,.5pin_spz)--cycle;
+ fill (.5pin_lt,-.5pin_spy)--(pl,-.5pin_spz)--(pl,-.5pin_ht)--
+ (pl+pin_spx,-.5pin_ht)--(pl+pin_spx,-.5pin_spz)--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def screenleft (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,.5scr_ht);
+ z1=(pl+scr_spx,scr_spy);
+ z2=(pl+scr_spx,-.5scr_ht);
+ z3=(pl,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z0--z1;
+ b:=z2--z3;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+def screenright (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,-.5scr_ht);
+ z1=(pl,scr_spy);
+ z2=(pl+scr_spx,.5scr_ht);
+ z3=(pl+scr_spx,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z1--z2;
+ b:=z3--z0;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+% optical Axis as dashed line
+def opticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+5hsoa,0);
+ draw (offset+7hsoa,0)--(offset+1CIu,0);
+enddef;
+
+% half optical Axis as dashed line
+def halfopticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+.5CIu,0);
+enddef;
+
+% optical Axis as dashed line downwards
+def opticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-5hsoa);
+ draw (xoffset,yoffset-7hsoa)--(xoffset,yoffset-1CIu);
+enddef;
+
+% half optical Axis as dashed line downwards
+def halfopticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-.5CIu);
+enddef;
+
+% Camera
+def camera =
+ pickup pensquare scaled thickline;
+ numeric pl;
+ pl:=cam_lt-cam_spx;
+ draw (pl,.25cam_spy)--(0,.5cam_spy)--(0,-.5cam_spy)--(pl,-.25cam_spy);
+ draw (pl,.5cam_ht)--(pl,-.5cam_ht)--(cam_lt,-.5cam_ht)--(cam_lt,.5cam_ht)--cycle;
+enddef;
+
+"SmalCIuns";
+twochars(0)(small_lens)(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"HalfSmalCIuns";
+fourchars(2)(half_small_lens)((slens_lt,0))(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"BoldLens";
+twochars(6)(bold_lens)(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"HalfBoldLens";
+fourchars(8)(half_bold_lens)((blens_lt,0))(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"SmallKonkavLens";
+twochars(12)(small_konkav_lens)(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"HalfSmallKonkavLens";
+fourchars(14)(half_small_konkav_lens)((sklens_lt,0))(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"Mirror";
+eightchars(85)(mirror)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"BeamSplitter";
+eightchars(36)(halfmirror;halfmirrorline)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"Polarizer";
+twochars(44)(polarizer)(.5pol_ht#,pol_lt#,.5pol_ht#);
+
+"Pinhole";
+twochars(46)(pinhole)(.5pin_ht#,pin_lt#,.5pin_ht#);
+
+"Camera";
+fourchars(66)(camera)((cam_lt,0))(.5cam_ht#,cam_lt#,.5cam_ht#);
+
+"ScreenLeft";
+twochars(72)(screenleft(2);opticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRight";
+twochars(74)(screenright(2);opticalaxis(normalline)(1CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenLeftBehind";
+twochars(76)(screenleft(2);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRightBehind";
+twochars(78)(screenright(2);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenLeft";
+twochars(80)(screenleft(4);opticalaxis(normalline)(0);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenRight";
+twochars(82)(screenright(4);opticalaxis(normalline)(1CIu);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"horizontal dashed half line to the right";
+beginchar(128,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed long line to the right";
+beginchar(129,1CIu#,0pt,0pt);
+ opticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed half line to the left";
+beginchar(130,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(-.5CIu);
+endchar;
+
+"horizontal dashed half line up";
+beginchar(131,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(normalline)(0,.5CIu);
+endchar;
+
+"horizontal dashed long line up";
+beginchar(132,0pt,1CIu#,0pt);
+ opticalaxisdown(normalline)(0,1CIu);
+endchar;
+
+"horizontal dashed half line down";
+beginchar(133,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(normalline)(0,0);
+endchar;
+
+"bold horizontal dashed half line to the right";
+beginchar(136,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed long line to the right";
+beginchar(137,1CIu#,0pt,0pt);
+ opticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed half line to the left";
+beginchar(138,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(-.5CIu);
+endchar;
+
+"bold horizontal dashed half line up";
+beginchar(139,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(2normalline)(0,.5CIu);
+endchar;
+
+"bold horizontal dashed long line up";
+beginchar(140,0pt,1CIu#,0pt);
+ opticalaxisdown(2normalline)(0,1CIu);
+endchar;
+
+"bold horizontal dashed half line down";
+beginchar(141,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(2normalline)(0,0);
+endchar;
+
+% This is a part of mf-output from Gnuplot. It adds the possibility to
+% use Text within METAFONT-Symbols
+if unknown cmbase: input cmbase fi
+
+tracingstats:=1;
+picture r[];
+
+def put_text(expr ts,xstart,ystart,rot,justification) =
+ begingroup
+ text_width:=0;text_height:=0;
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ text_width:=text_width+wd[65];
+ text_height:=max(text_height,ht[65]+dp[65]);
+ elseif dec_num>=0:
+ text_width:=text_width+wd[dec_num];
+ text_height:=max(text_height,ht[dec_num]+dp[dec_num]);
+ fi
+ endfor
+ if rot=90:
+ if justification=1: ynext:=ystart;
+ elseif justification=2: ynext:=round(ystart-text_width/2);
+ else: ynext:=round(ystart-text_width);
+ fi
+ xnext:=xstart+text_height/2;
+ else:
+ if justification=1: xnext:=xstart;
+ elseif justification=2: xnext:=round(xstart-text_width/2);
+ else: xnext:=round(xstart-text_width);
+ fi
+ ynext:=ystart-text_height/2;
+ fi
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ xnext:=xnext+wd[65]*cosd rot;
+ ynext:=ynext+wd[65]*sind rot;
+ elseif dec_num>=0:
+ currentpicture:=currentpicture+r[dec_num] shifted(xnext,ynext)
+ rotatedaround ((xnext,ynext),rot);
+ xnext:=xnext+wd[dec_num]*cosd rot;
+ ynext:=ynext+wd[dec_num]*sind rot;
+ fi
+ endfor
+ endgroup
+enddef;
+
+def endchar =
+ r[charcode]:=currentpicture;
+ wd[charcode]:=w;ht[charcode]:=h;dp[charcode]:=d;
+ endgroup;
+enddef;
+let endchar_ = endchar;
+let generate = relax;
+let roman = relax;
+input cmss10.mf
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=
+ if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+fi
+font_setup;
+input romanu.mf %Roman uppercase.
+input romanl.mf %Roman lowerrcase.
+
+def endchar =
+ % Next line should probably be removed if CM base is used
+% l:=0; r:=w;
+ %Include the next two lines if you want to
+ %rotate the picture 90 deg.(Portrait to Landscape)
+ %currentpicture:=currentpicture rotated 90 shifted (h,0);
+ %tmp:=charht; charht:=charwd; charwd:=tmp;
+ scantokens extra_endchar;
+ if proofing>0: makebox(proofrule); fi
+ chardx:=w;
+ shipit;
+ if displaying>0: makebox(screenrule); showit; fi
+ endgroup
+enddef;
+let endchar_ = saveendchar;
+let generate = input;
+let roman = roman;
+def t_ = transformed currenttransform enddef;
+% End of Gnuplot-Part
+
+"Laser Box horizontal";
+beginchar(160,lab_wd#,.5lab_ht#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_wd,lab_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("Laser",.5lab_wd,0,0,2);
+endchar;
+
+"Laser Box vertical";
+beginchar(161,.5lab_ht#,lab_wd#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_ht,lab_wd,-.5lab_ht,.5lab_wd);
+ pickup pencircle scaled normalline;
+ put_text("Laser",0,.5lab_wd,90,2);
+endchar;
+
+"Photometer Box horizontal";
+beginchar(162,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("PM",.5omb_wd,0,0,2);
+endchar;
+
+"Photometer Box vertical";
+beginchar(163,.5omb_ht#,omb_wd#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,-.5omb_ht,.5omb_wd);
+ pickup pencircle scaled normalline;
+ put_text("PM",0,.5omb_wd,90,2);
+endchar;
+
+"Optical Modulator Box horizontal";
+beginchar(164,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_wd,0,0,2);
+endchar;
+
+"Optical Modulator Box vertical";
+beginchar(165,omb_ht#,.5omb_wd#,.5omb_wd#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,0,0); %-.5omb_ht,.5omb_wd);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_ht,0,90,2);
+endchar;
+
+end;
+%</optic>
+%^^A last update: Fri 03-13-1998
+%
+%<*csycirc>
+input csym;
+
+designsize:=2lLE#;
+
+fontdimen10: .4gat_ht#;
+fontdimen11: .65gat_lt#;
+
+fontdimen12: .5pin_lt#;
+fontdimen13: pin_spc#;
+fontdimen14: .5ios_wd#+.5pin_lt#;
+fontdimen15: mid_wd#+ios_wd#;
+fontdimen16: ios_wd#;
+fontdimen17: out_spc#;
+
+%fontdimen7: .4gat_ht#;
+%fontdimen8: .5pin_lt#;
+%fontdimen9: .5(pin_lt#+ios_wd#);
+%fontdimen10: .5mid_wd#;
+%fontdimen11: .5ios_wd#;
+%fontdimen16: pin_spc#;
+
+def defcircleabout(expr p, rad)=
+ z[p]=.5[z[p+1],z[p+3]]=.5[z[p+2],z[p+4]];
+ y[p+1]=y[p+3];
+ x[p+2]=x[p+4];
+ x[p]=lft(x[p+1])-rad;
+ y[p]=top(y[p+4])+rad;
+enddef;
+
+def gate=
+ charic:=.5pin_spc#;
+ z0=(0,0);
+ x20=x15=x1=x6=x7= x0+pin_lt;
+ y8=y6=-y7= y0+.5gat_ht;
+ x8=x9=x10= x1+gat_lt-2pin_lt;
+ y15=-y20= y0+.5pin_spc;
+ x25-x0= gat_lt;
+
+ y9=y7; y25=y10=y1=y0;
+ x0=x26=x27;
+ y26=y15; y27=y20;
+
+ pickup pencircle scaled thickline;
+ defcircleabout(1,inv_rad);
+ defcircleabout(10,inv_rad);
+ defcircleabout(15,inv_rad);
+ defcircleabout(20,inv_rad);
+enddef;
+
+def segment =
+ z0=(0,0);
+ x1-x0=pin_lt; y0=y1;
+ defcircleabout(1,inv_rad); % z2 z3 z4 z5 defined
+ z1=.5[z6,z7]; x6=x7=x8;
+ y7-y6=pin_spc;
+ y8-y1=out_spc;
+ x9-x8=ios_wd; y8=y9;
+enddef;
+
+
+def topbotsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+def midsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+
+"obere Segmente Eing"&ditto&"ange";
+topbotsegs(0,out_spc#,.5pin_spc#);
+
+"obere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(16,out_spc#,.5pin_spc#);
+}}
+
+"mittlere Segmente Eing"&ditto&"ange";
+midsegs(32,.5pin_spc#,.5pin_spc#);
+
+"mittlere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ midsegs(48,.5pin_spc#,.5pin_spc#);
+}}
+
+"untere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ topbotsegs(64,.5pin_spc#,out_spc#);
+}}
+
+"untere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(80,.5pin_spc#,out_spc#);
+}}
+
+"oberes Zwischensegment";
+beginchar(96,mid_wd#,out_spc#,.5pin_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,out_spc)--(mid_wd,out_spc);
+endchar;
+
+"Zwischensegment";
+beginchar(97,mid_wd#,.5pin_spc#,.5pin_spc#);
+endchar;
+
+"unteres Zwischensegment";
+beginchar(98,mid_wd#,.5pin_spc#,out_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,-out_spc)--(mid_wd,-out_spc);
+endchar;
+
+
+"Gatter: Eingang, Ausgang";
+beginchar(128,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang negiert, Ausgang";
+beginchar(129,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z3--z6--z8--z9--z7--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang, Ausgang negiert";
+beginchar(130,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z11--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(131,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang negiert";
+beginchar(132,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z11--z25;
+endchar;
+
+"Gatter alt AND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(133,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NAND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(134,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt OR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(135,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NOR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(136,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt EQ: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(137,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ x30=x31=x34=.2[x2,x13];
+ y30=.7[y16,y2]; y30=y32;
+ y31=.7[y21,y2]; y31=y33;
+ x32=x33=x35=.8[x2,x13];
+ y35=y34=y2;
+ pickup pencircle scaled normalline;
+ draw z30--z32;
+ draw z31--z33;
+ draw z34--z35;
+endchar;
+
+"box symbol empty";
+beginchar(250,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"box symbol cutted by line";
+beginchar(251,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+ pickup pencircle scaled normalline;
+ draw z1--z4;
+endchar;
+
+"Black Box analog";
+beginchar(252,bba_wd#,.5bba_ht#,.5bba_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bba_ht; y1=y3;
+ x3=x4=x0+bba_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"Black Box digital";
+beginchar(253,bbd_wd#,.5bbd_ht#,.5bbd_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bbd_ht; y1=y3;
+ x3=x4=x0+bbd_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"OPV";
+beginchar(254,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z5+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z1+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+"OPV";
+beginchar(255,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z1+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z5+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+end;
+%</csycirc>
+%
+%<*indexhlp>
+If you want to generate an index for the circ-package please
+run "makeindex" with the style-file "circ.ist" on "circ.idx".
+
+Using EM-TeX the command line is: makeindx -s circ.ist circ.idx
+
+To get the right pagenumbers in the index and the table of
+contents, run LaTeX on "circ.drv" and makeindex in the following
+way:
+
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+%</indexhlp>