It's 2AM. What do you expect?
Anyhow, here it is. It handles multiple lines, and I've even started
on the vector-drawing thing that you need to draw causal relationships
(although without an arrow head yet).
\newcount\tmgcellwidth
\newcount\tmgcellhalfwidth
\newcount\tmgcellquarterwidth
\newcount\tmgcellheight
\newcount\tmgcellhalfheight
\newcount\tmglineskip
\newcount\tmghsxa
\newcount\tmghsya
\newcount\tmghsxb
\newcount\tmghsyb
\newcount\tmghsxc
\newcount\tmghsyc
\newcount\tmgvty
\newcount\tmgvtdy
\newcount\tmgx
\newcount\tmgy
\newcount\tmgallh
\newcount\tmgallw
\newcount\tmglt
\newcount\tmglb
\newcount\tmghzx
\newcount\tmghzy
\newcount\tmgloopa
\newcount\tmgloopb
\newcount\tmgtmp
\newcount\markonex
\newcount\markoney
\newcount\marktwox
\newcount\marktwoy
\newcount\markthreex
\newcount\markthreey
\newcount\markfourx
\newcount\markfoury
\tmgcellwidth=8
\tmgcellhalfwidth=4
\tmgcellquarterwidth=2
\tmgcellheight=12
\tmgcellhalfheight=6
\tmglineskip=4
\newcommand{\settmgcellheight}[1]{%
\tmgcellheight=#1%
\tmgcellhalfheight=#1%
\divide\tmgcellhalfheight 2}
\newcommand{\settmgcellwidth}[1]{%
\tmgcellwidth=#1%
\tmgcellhalfheight=#1%
\divide\tmgcellhalfheight 2%
\tmgcellquarterheight=#1%
\divide\tmgcellquarterheight 4}
% Params:{width}{height}{commands}
\newcommand{\timing}[3]{
\begingroup%
\tmgx=0%
\tmgallh=\tmgcellheight%
\advance\tmgallh \tmglineskip%
\multiply\tmgallh #2%
\advance\tmgallh -\tmglineskip%
\tmgy=\tmgallh%
\advance\tmgy -\tmgcellheight%
\tmgallw=#1%
\multiply\tmgallw \tmgcellwidth%
\tmglt=-1%
\tmglb=-1%
%\catcode`\^^M=13%
\catcode`\\=13%
%\def^^M{%
% \tmgx=0%
% \tmglt=-1%
% \tmglb=-1%
% \advance\tmgy -\tmgcellheight%
% \advance\tmgy -\tmglineskip}%
%}%
\def\\{%
\tmgx=0%
\tmglt=-1%
\tmglb=-1%
\advance\tmgy -\tmgcellheight%
\advance\tmgy -\tmglineskip}%
\providecommand{\halfslope}{}%
\renewcommand{\halfslope}[2]{%
\tmghsxa=\tmgx%
\tmghsya=\tmgy%
\advance\tmghsya ##1%
\tmghsxc=\tmgx%
\advance\tmghsxc \tmgcellhalfwidth%
\tmghsyc=\tmgy%
\advance\tmghsyc ##2%
\tmghsxb=\tmgx%
\advance\tmghsxb \tmgcellquarterwidth%
\tmghsyb=\tmghsya%
\advance\tmghsyb \tmghsyc%
\divide\tmghsyb 2%
\qbezier(\tmghsxa,\tmghsya)(\tmghsxb,\tmghsyb)%
(\tmghsxc,\tmghsyc)}%
\providecommand{\vert}{}%
\renewcommand{\vert}[2]{%
\tmgvty=##1%
\advance\tmgvty \tmgy%
\ifthenelse{##1 < ##2}{
\tmgvtdy=##2%
\advance\tmgvtdy -##1%
\put(\tmgx,\tmgvty){\line(0,1){\tmgvtdy}}}{%
\tmgvtdy=##1%
\advance\tmgvtdy -##2%
\put(\tmgx,\tmgvty){\line(0,-1){\tmgvtdy}}}}%
\providecommand{\halfhoriz}{}%
\renewcommand{\halfhoriz}[1]{%
\tmghzx=\tmgx%
\advance\tmghzx \tmgcellwidth%
\tmghzy=\tmgy%
\advance\tmghzy ##1%
\put(\tmghzx,\tmghzy){\line(-1,0){\tmgcellhalfwidth}}}%
\providecommand{\horiz}{}%
\renewcommand{\horiz}[1]{%
\tmghzy=\tmgy%
\advance\tmghzy ##1%
\put(\tmgx,\tmghzy){\line(1,0){\tmgcellwidth}}}%
\providecommand{\slope}{}%
\renewcommand{\slope}[2]{%
\ifthenelse{\tmglt<0}{\relax}{%
\halfslope{\tmglt}{##1}%
\halfslope{\tmglb}{##2}%
\halfhoriz{##1}\halfhoriz{##2}\next}
\tmglt=##1%
\tmglb=##2}%
\providecommand{\jump}{}%
\renewcommand{\jump}[2]{%
\ifthenelse{\tmglt<0}{\relax}{%
\vert{\tmglt}{##1}%
\vert{\tmglb}{##2}%
\horiz{##1}\horiz{##2}\next%
}%
\tmglt=##1%
\tmglb=##2}%
\providecommand{\flip}{}%
\renewcommand{\flip}{%
\tmghzy=\tmglt%
\tmglt=\tmglb%
\tmglb=\tmghzy}%
\providecommand{\next}{}%
\renewcommand{\next}{\advance\tmgx \tmgcellwidth}%
\providecommand{\l}{}%
\renewcommand{\l}[1][2]{
\tmgloopa=0%
\whiledo{\tmgloopa<##1}{%
\slope{0}{0}%
\advance\tmgloopa 1}}%
\providecommand{\u}{}%
\renewcommand{\u}[1][2]{
\tmgloopa=0%
\whiledo{\tmgloopa<##1}{%
\slope{\tmgcellheight}{\tmgcellheight}%
\advance\tmgloopa 1}}%
\providecommand{\ul}{}%
\renewcommand{\ul}[1][2]{
\tmgloopa=0%
\whiledo{\tmgloopa<##1}{%
\slope{0}{\tmgcellheight}%
\advance\tmgloopa 1}}%
\providecommand{\z}{}%
\renewcommand{\z}[1][2]{
\tmgloopa=0%
\whiledo{\tmgloopa<##1}{%
\slope{\tmgcellhalfheight}{\tmgcellhalfheight}%
\advance\tmgloopa 1}}%
\providecommand{\x}{}%
\renewcommand{\x}[1][2]{%
\tmgloopb=1%
\whiledo{\tmgloopb < ##1}{%
\ul[1]%
\advance\tmgx -\tmgcellhalfwidth%
\halfslope{0}{\tmgcellheight}%
\advance\tmgx \tmgcellhalfwidth%
\halfslope{0}{\tmgcellheight}%
\advance\tmgloopb 1}%
\ul[1]%
\advance\tmgx -\tmgcellhalfwidth%
\halfslope{0}{\tmgcellheight}%
\advance\tmgx \tmgcellhalfwidth}%
\providecommand{\text}{}%
\renewcommand{\text}[1]{%
\tmgloopa=\tmgx%
\advance\tmgloopa \tmgcellwidth%
\put(\tmgloopa,\tmgy){\makebox(\tmgallw,\tmgcellheight)[l]{##1}}}%
\providecommand{\label}{}%
\renewcommand{\label}[1]{%
\put(\tmgx,\tmgy){\makebox(\tmgallw,\tmgcellheight)[l]{##1}}}%
\providecommand{\clock}{}%
\renewcommand{\clock}[1]{%
\tmgloopa=0%
\jump{0}{0}%
\whiledo{\tmgloopa < ##1}{%
\jump{0}{0}\jump{\tmgcellheight}{\tmgcellheight}%
\advance\tmgloopa 1}}%
\providecommand{\skip}{}%
\renewcommand{\skip}[1][1]{%
\tmgloopa=##1%
\multiply\tmgloopa \tmgcellwidth%
\advance\tmgx \tmgloopa}%
\providecommand{\mark}{}%
\renewcommand{\mark}[1]{%
\ifthenelse{##1=1}{%
\markonex=\tmgx%
\markoney=\tmgy}{%
\ifthenelse{##1=2}{%
\marktwox=\tmgx%
\marktwoy=\tmgy}{%
\ifthenelse{##1=3}{%
\markthreex=\tmgx%
\markthreey=\tmgy}{%
\ifthenelse{##1=4}{%
\markfourx=\tmgx%
\markfoury=\tmgy}{\relax}}}}}%
\providecommand{\markx}{}%
\renewcommand{\markx}[1]{%
\ifthenelse{##1=1}{%
\tmgtmp=\markonex}{%
\ifthenelse{##1=2}{%
\tmgtmp=\marktwox}{%
\ifthenelse{##1=3}{%
\tmgtmp=\markthreex}{%
\ifthenelse{##1=4}{%
\tmgtmp=\markfourx}{\tmgtmp=0}}}}}%
\providecommand{\marky}{}%
\renewcommand{\marky}[1]{%
\ifthenelse{##1=1}{%
\tmgtmp=\markoney}{%
\ifthenelse{##1=2}{%
\tmgtmp=\marktwoy}{%
\ifthenelse{##1=3}{%
\tmgtmp=\markthreey}{%
\ifthenelse{##1=4}{%
\tmgtmp=\markfoury}{\tmgtmp=0}}}}}%
\providecommand{\vec}{}%
\renewcommand{\vec}[2]{%
\markx{##1} \tmghsxa=\tmgtmp%
\marky{##1} \tmghsya=\tmgtmp%
\markx{##2} \tmghsxc=\tmgtmp%
\marky{##2} \tmghsyc=\tmgtmp%
\advance\tmghsxa \tmgcellhalfwidth%
\advance\tmghsya \tmgcellhalfheight%
\advance\tmghsxc \tmgcellhalfwidth%
\advance\tmghsyc \tmgcellhalfheight%
\tmghsxb=\tmghsxa%
\advance\tmghsxb \tmghsxc%
\divide\tmghsxb 2%
\tmghsyb=\tmghsya%
\advance\tmghsyb \tmghsyc%
\divide\tmghsyb 2%
\qbezier(\tmghsxa,\tmghsya)(\tmghsxb,\tmghsyb)%
(\tmghsxc,\tmghsyc)}%
\setlength{\unitlength}{1pt}%
\begin{picture}(\tmgallw,\tmgallh)%
#3%
\end{picture}\endgroup}
Try putting this into a document:
\timing{20}{2}{\label{f53}\mark{1}\skip\l\u\ul\flip\ul\\
\z\z\mark{2}\x[4]\z\text{YYyy}\clock{4}\vec{1}{2}}
\timing{20}{6}{\label{clock}\skip[3]\clock{4}\\
\label{f53}\skip[3]\l\u\ul\flip\ul\\
\label{ews}\skip[3]\z\z\x[4]\z\text{YYyy}\\
\label{fhd}\skip[3]\z[5]\flip\mark{2}\ul[4]\\
\label{fhd}\skip[3]\ul[4]\flip\mark{1}\ul[5]\vec{1}{2}\\
\label{fhd}\skip[3]\ul[1]\flip\ul[4]}
--
Timothy Miller
http://www.cse.ohio-state.edu/~millerti
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)