%%% ====================================================================
%%%  @LaTeX-style-file{
%%%     author          = "Nico Verwer",
%%%     version         = "1.1",
%%%     date            = "8 April 1992",
%%%     filename        = "loggates.sty",
%%%     address         = "Dept. of Computer Science
%%%                        Rijksuniversiteit te Utrecht
%%%                        P.O. box 80.089
%%%                        3508 TB Utrecht
%%%                        the Netherlands",
%%%     telephone       = "+31 30 533921",
%%%     FAX             = "+31 30 513791",
%%%     email           = "nico@cs.ruu.nl (Internet)",
%%%     codetable       = "ISO/ASCII",
%%%     keywords        = "TeX, LaTeX, logical gates symbols",
%%%     supported       = "yes",
%%%     docstring       = "This file accompanies the file loggates.mf
%%%                        which contains Metafont definitions of
%%%                        symbols for drawing digital circuit diagrams.
%%%                        It defines macros to draw all possible 
%%%                        gates in all directions.
%%%                        If you use this file with plain TeX, you may
%%%                        want to call it loggates.tex. Since it uses @
%%%                        as a character, it must be a style file in
%%%                        LaTeX.
%%%                        The next version of this file will include
%%%                        an interface with the XY-pic package for
%%%                        drawing diagrams.",
%%%  }
%%% ====================================================================
%
\font\loggates=loggates
%
\def\BusWidth{{\loggates\char0}}         % '/' for bus width notation
%
% Defintions for gates. All the gates that may have more than one
% input (AND, NAND, OR, NOR, XOR, NXOR) may be followed by a single
% digit from 2 to 5, to indicate the number of inputs.
% On the OR-like gates, this will draw short input lines; for the
% AND-like gates it has no effect.
%
\def\ANDr{\gdef\@gate{\char1}\@NIN}      % AND gate facing right
\def\ANDd{\gdef\@gate{\char2}\@NIN}      %                 down
\def\ANDl{\gdef\@gate{\char3}\@NIN}      %                 left
\def\ANDu{\gdef\@gate{\char4}\@NIN}      %                 up
\def\NANDr{\gdef\@gate{\char5}\@NIN}     % NAND gate facing right
\def\NANDd{\gdef\@gate{\char6}\@NIN}     %           etcetera...
\def\NANDl{\gdef\@gate{\char7}\@NIN}
\def\NANDu{\gdef\@gate{\char8}\@NIN}
\def\ORr{\gdef\@gate{\char9}\@INr}       % OR gate 
\def\ORd{\gdef\@gate{\char10}\@INd}
\def\ORl{\gdef\@gate{\char11}\@INl}
\def\ORu{\gdef\@gate{\char12}\@INu}
\def\NORr{\gdef\@gate{\char13}\@INr}     % NOR gate
\def\NORd{\gdef\@gate{\char14}\@INd}
\def\NORl{\gdef\@gate{\char15}\@INl}
\def\NORu{\gdef\@gate{\char16}\@INu}
\def\BUFr{{\loggates\char17}}            % Buffer
\def\BUFd{{\loggates\char18}}
\def\BUFl{{\loggates\char19}}
\def\BUFu{{\loggates\char20}}
\def\INVr{{\loggates\char21}}            % Inverter
\def\INVd{{\loggates\char22}}
\def\INVl{{\loggates\char23}}
\def\INVu{{\loggates\char24}}
\def\XORr{\gdef\@gate{\char25}\@INr}     % XOR gate
\def\XORd{\gdef\@gate{\char26}\@INd}
\def\XORl{\gdef\@gate{\char27}\@INl}
\def\XORu{\gdef\@gate{\char28}\@INu}
\def\NXORr{\gdef\@gate{\char29}\@INr}    % NXOR gate, a.k.a. comparator
\def\NXORd{\gdef\@gate{\char30}\@INd}
\def\NXORl{\gdef\@gate{\char31}\@INl}
\def\NXORu{\gdef\@gate{\char32}\@INu}
%
% In order to connect input lines we define some  skips.
%
\newskip\INmskip\setbox0=\hbox{{\loggates\char35}}\INmskip\ht0%
\def\deflgskip#1#2{\setbox0=\hbox{{\loggates\char#2}}%
                   \global\newskip#1\global#1\ht0%
                   \global\advance #1 by-\INmskip}
\deflgskip\INuskip{33}
\deflgskip\INlskip{34}
\deflgskip\INumskip{36}
\deflgskip\INlmskip{37}
\deflgskip\INmuskip{38}
\deflgskip\INmlskip{39}
\INmskip 0pt
%
% The following definitions are internal to loggates, and should not
% normally be used.
%
\def\@gobble#1{} %Not strictly necessary in LaTeX...
\def\@NIN{\futurelet\next\@@NIN}
\def\@@NIN{\let\@next\@gobble%
           {\loggates\@gate}%
           \ifx\next2\else\ifx\next3\else\ifx\next4\else\ifx\next5%
           \else\let\@next\relax\fi\fi\fi\fi\@next}
\def\@INr{\futurelet\next\@@INr}
\def\@@INr{\let\@next\@gobble%
        \ifx\next2{\loggates\char33\char34\@gate}%
        \else\ifx\next3{\loggates\char33\char34\char35\@gate}%
        \else\ifx\next4{\loggates\char33\char34\char38\char39\@gate}%
        \else\ifx\next5{\loggates\char33\char34\char35\char36\char37\@gate}%
        \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
\def\@INd{\futurelet\next\@@INd}
\def\@@INd{\let\@next\@gobble%
        \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
        \ifx\next2%
          \hbox{\loggates\@up{\char40\char41}\@gate}%
        \else\ifx\next3%
          \hbox{\loggates\@up{\char40\char41\char42}\@gate}%
        \else\ifx\next4%
          \hbox{\loggates\@up{\char40\char41\char45\char46}\@gate}%
        \else\ifx\next5%
          \hbox{\loggates\@up{\char40\char41\char42\char43\char44}\@gate}%
        \else%
          \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
\def\@INl{\futurelet\next\@@INl}
\def\@@INl{\let\@next\@gobble%
        \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
        \ifx\next2%
          \hbox{\loggates\@gate\@up{\char47\char48}}%
        \else\ifx\next3%
          \hbox{\loggates\@gate\@up{\char47\char48\char49}}%
        \else\ifx\next4%
          \hbox{\loggates\@gate\@up{\char47\char48\char52\char53}}%
        \else\ifx\next5%
          \hbox{\loggates\@gate\@up{\char47\char48\char49\char50\char51}}%
        \else%
          \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
\def\@INu{\futurelet\next\@@INu}
\def\@@INu{\let\@next\@gobble%
        \ifx\next2{\loggates\@gate\char54\char55}%
        \else\ifx\next3{\loggates\@gate\char54\char55\char56}%
        \else\ifx\next4{\loggates\@gate\char54\char55\char59\char60}%
        \else\ifx\next5{\loggates\@gate\char54\char55\char56\char57\char58}%
        \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}