146 lines
3.7 KiB
TeX
146 lines
3.7 KiB
TeX
%% Copyright (C) 2014 Christian Dietrich <stettberger@dokucode.de>
|
|
%% -------------------------------------------------------
|
|
%%
|
|
%% This package may be distributed and/or modified under the conditions
|
|
%% of the LaTeX Project Public License, either version 1.3c of this
|
|
%% license or (at your option) any later version. The latest version of
|
|
%% this license is in
|
|
%%
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%%
|
|
%% and version 1.3c or later is part of all distributions of LaTeX
|
|
%% version 2008/05/04 or later.
|
|
%
|
|
% This library can be used to draw graphics through IO ports
|
|
%
|
|
|
|
\newcount\avr@draw@x
|
|
\newcount\avr@draw@y
|
|
\newcount\avr@draw@maxx
|
|
\newcount\avr@draw@maxy
|
|
|
|
\def\avr@draw@init{%
|
|
\avr@draw@maxx = 0%
|
|
\avr@draw@maxy = 0%
|
|
}
|
|
|
|
|
|
% 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}%
|
|
}%
|
|
}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Draw Commands
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\csdef{avr@draw@command@0}{} % NOP
|
|
|
|
% Set Color
|
|
\def\avr@draw@color{0,0,0}
|
|
\csdef{avr@draw@command@1}{%
|
|
\ifnum \avr@draw@argc < 3%
|
|
\avr@debug{DRAW: Set Draw COLOR, Not enough arguments}%
|
|
\fi%
|
|
\xdef\avr@draw@color{\avr@draw@stack{0},\avr@draw@stack{1},\avr@draw@stack{2}}%
|
|
}
|
|
|
|
% Small Rectangle
|
|
\csdef{avr@draw@command@2}{%
|
|
\ifnum \avr@draw@argc < 2%
|
|
\avr@debug{DRAW: Dot, Not enough arguments (2 required)}%
|
|
\fi%
|
|
\edef\@@X{\avr@draw@stack{0}}%
|
|
\edef\@@Y{\avr@draw@stack{1}}%
|
|
\ifnum \@@X > \avr@draw@maxx%
|
|
\avr@draw@maxx=\@@X%
|
|
\fi%
|
|
\ifnum \@@Y > \avr@draw@maxy%
|
|
\avr@draw@maxy=\@@Y%
|
|
\fi%
|
|
\csxdef{avr@draw@\@@X @\@@Y}{\avr@draw@color}%
|
|
}
|
|
|
|
|
|
\newcommand{\avrdrawiter}[1]{%
|
|
\avr@draw@x=0%
|
|
\def\avr@iter@yloop{%
|
|
\avr@draw@x=0%
|
|
\ifnum \avr@draw@y > \avr@draw@maxy%
|
|
\let\avr@iter@yloop=\relax%
|
|
\else%
|
|
\let\avr@iter@xloop@rec=\avr@iter@xloop%
|
|
\avr@iter@xloop\relax%
|
|
\advance \avr@draw@y by 1\relax%
|
|
\fi%
|
|
\avr@iter@yloop%
|
|
}%
|
|
\def\avr@iter@xloop{%
|
|
\ifnum \avr@draw@x > \avr@draw@maxx%
|
|
\let\avr@iter@xloop@rec=\relax%
|
|
\else%
|
|
\ifcsdef{avr@draw@\the\avr@draw@x @\the\avr@draw@y}{%
|
|
#1 {\the\avr@draw@x}{\the\avr@draw@y}{\csuse{avr@draw@\the\avr@draw@x @\the\avr@draw@y}}%
|
|
}{% Dot not defined
|
|
}%
|
|
\advance \avr@draw@x by 1\relax%
|
|
\fi%
|
|
\avr@iter@xloop@rec%
|
|
}%
|
|
\avr@iter@yloop%
|
|
}
|
|
|
|
\newcommand{\avrdrawSize}[2]{%
|
|
\avr@count@tmpa=\avr@draw@maxx%
|
|
\advance \avr@count@tmpa by 1\relax%
|
|
\edef#1{\the\avr@count@tmpa}%
|
|
\avr@count@tmpa=\avr@draw@maxy%
|
|
\advance \avr@count@tmpa by 1\relax%
|
|
\edef#2{\the\avr@count@tmpa}%
|
|
}
|
|
|
|
\newwrite\avr@file%
|
|
|
|
\newcommand{\avrdrawppm}[1]{%
|
|
% Dump to .ppm file
|
|
\immediate\openout\avr@file=#1%
|
|
\immediate\write\avr@file{P3}%
|
|
\avrdrawSize{\x}{\y}%
|
|
\immediate\write\avr@file{\x \space \y \space 255}%
|
|
\def\removecomma##1,##2,##3,{##1 ##2 ##3}%
|
|
\newcommand{\avr@draw@ppm}[3]{%
|
|
\edef\@tempa{##3}%
|
|
\edef\@tempa{\expandafter \removecomma \@tempa,}%
|
|
\expandafter\immediate\expandafter\write\expandafter\avr@file\expandafter{\@tempa}%
|
|
}%
|
|
\avrdrawiter{\avr@draw@ppm}%
|
|
\immediate\closeout\avr@file%
|
|
}
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% TeX-master: "avr.tex"
|
|
%%% End:
|