1
0
mirror of synced 2024-06-10 21:09:53 +02:00
avremu/avr.draw.tex
2014-09-30 14:30:01 +02:00

122 lines
2.7 KiB
TeX

% We define 2 IO Registers to communicate from AVR to the Drawing
% mechanism
\usepackage{tikz}
% TWAR
\newcount\avr@draw@argc
\csdef{avr@io@000010@set}#1{%
\avr@bin@tocount{#1}{\avr@accA}%
\avr@log{DRAW CMD: \the\avr@accA}%
\avr@draw@command{\the\avr@accA}%
\avr@draw@argc = 0\relax
}
\csdef{avr@io@000011@set}#1{%
\avr@bin@tocount{#1}{\avr@accA}%
\avr@debug{AVR DRAW PUSH: \the\avr@accA}%
\csxdef{avr@draw@stack@\the\avr@draw@argc}{\the\avr@accA}%
\advance\avr@draw@argc by 1\relax
}
\def\avr@draw@stack#1{\csuse{avr@draw@stack@#1}}
\def\avr@draw@command#1{%
\ifcsdef{avr@draw@command@#1}{%
\csuse{avr@draw@command@#1}%
}{%
\avr@error{AVR DRAW: Unkown Command #1}%
}%
}
\def\avr@draw@canvas{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Draw Commands
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\csdef{avr@draw@command@0}{} % NOP
% Set Draw Color
\definecolor{avrdraw}{rgb}{255,255,255}
\csdef{avr@draw@command@1}{%
\ifnum \avr@draw@argc < 3%
\avr@debug{DRAW: Set Draw COLOR, Not enough arguments}%
\fi%
\edef\@@append{%
\detokenize{\definecolor{avrdraw}}%
{rgb}{\avr@draw@stack{0},\avr@draw@stack{1},\avr@draw@stack{2}}%
}
\eappto\avr@draw@canvas{\@@append}
}
% Set Fill Color
\definecolor{avrfill}{rgb}{255,255,255}
\csdef{avr@draw@command@2}{%
\ifnum \avr@draw@argc < 3%
\avr@debug{DRAW: Set Fill COLOR, Not enough arguments}%
\fi%
\edef\@@append{%
\detokenize{\definecolor{avrfill}}%
{rgb}{\avr@draw@stack{0},\avr@draw@stack{1},\avr@draw@stack{2}}%
}
\eappto\avr@draw@canvas{\@@append}
}
\csdef{avr@draw@command@3}{%
\avr@draw@command{1}% Set Draw Color
\avr@draw@command{2}% Set Fill Color
}
% Rectangle
\csdef{avr@draw@command@4}{%
\ifnum \avr@draw@argc < 4%
\avr@debug{DRAW: Rectangle, Not enough arguments (4 required)}
\fi%
\edef\@@append{%
\detokenize{\node}%
[minimum height = \avr@draw@stack{2}mm,%
minimum width = \avr@draw@stack{3}mm,%
inner sep=0,%
anchor=north west,
draw=avrdraw,fill=avrfill]
at (\avr@draw@stack{0}mm,\avr@draw@stack{1}mm) {};%
}%
\eappto\avr@draw@canvas{\@@append}%
}
% Small Rectangle
\csdef{avr@draw@command@5}{%
\ifnum \avr@draw@argc < 2%
\avr@debug{DRAW: Short Rectangle, Not enough arguments (2 required)}
\fi%
\edef\@@append{%
\detokenize{\node}%
[minimum size = 1mm,%
inner sep=0,%
anchor=north west,
draw=avrdraw,fill=avrfill]
at (\avr@draw@stack{0}mm,\avr@draw@stack{1}mm) {};%
}%
\eappto\avr@draw@canvas{\@@append}%
}
\newcommand{\avrdrawcanvas}{%
\begin{tikzpicture}
\scantokens\expandafter{\avr@draw@canvas}%
\end{tikzpicture}
}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "avr.tex"
%%% End: