%%% ==================================================================== %%% @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}