% This is latexpicobjs.tex, Version 1.1 9/11/87
% This file makes the LaTeX line, vector, circle, and oval constructions
% available to PiCTeX users who are running under plain TeX.
% It is distributed with Leslie Lamport's permission.
% Do not \input the files prepictex.tex and postpictex.tex along with
% this file.
\catcode`@=11 \catcode`!=11
% Save the meaning of plain TeX's \line command
\let\!texline=\line
% load LaTeX line and circle fonts
\font\tenln=line10
\font\tenlnw=linew10
\font\tencirc=circle10
\font\tencircw=circlew10
% set up LaTeX hacks
\let\@tfor=\!tfor
\let\@ifnextchar=\!ifnextchar
\def\@whilenoop#1{}
\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
\def\@iwhiledim#1{\ifdim #1\let\@nextwhile=\@iwhiledim
\else\let\@nextwhile=\@whilenoop\fi\@nextwhile{#1}}
\def\@ifstar#1#2{\@ifnextchar *{\def\@tempa*{#1}\@tempa}{#2}}
\def\@height{height}
\def\@depth{depth}
\def\@width{width}
% The following are slightly modified versions of the LaTeX
% \@badlinearg and \@warning commands.
\def\!@badlinearg{%
\errmessage{Bad LaTeX \string\line\space or \string\vector
\space argument. See the LaTeX manual for an explanation.}}
\def\!@warning#1{\immediate\write16{LaTeX Warning: #1.}\ignorespaces}
% allocate registers
\newdimen\@tempdima
\newdimen\@tempdimb
\newcount\@tempcnta
\newcount\@tempcntb
\newbox\@tempboxa
% Until further notice (near the end) what follows are
% (slightly modified versions of) LaTeX's line/vector/circle/oval macros.
% See the latex.tex macro package for commentary.
\newdimen\@wholewidth
\newdimen\@halfwidth
\newdimen\unitlength \unitlength =1pt
\def\thinlines{%
\let\@linefnt\tenln \let\@circlefnt\tencirc
\@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
\def\thicklines{%
\let\@linefnt\tenlnw \let\@circlefnt\tencircw
\@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
\newif\if@negarg
\def\line(#1,#2)#3{%
\@xarg #1\relax
\@yarg #2\relax
\@linelen=#3\unitlength
\ifnum\@xarg =0
\@vline
\else
\ifnum\@yarg =0
\@hline
\else
\@sline
\fi
\fi}
\def\@sline{%
\ifnum\@xarg< 0
\@negargtrue
\@xarg -\@xarg
\@yyarg -\@yarg
\else
\@negargfalse
\@yyarg \@yarg
\fi
\ifnum \@yyarg >0
\@tempcnta\@yyarg
\else
\@tempcnta -\@yyarg
\fi
\ifnum\@tempcnta>6
\!@badlinearg
\@tempcnta0
\fi
\ifnum\@xarg>6
\!@badlinearg
\@xarg 1
\fi
\setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
\ifnum \@yarg >0
\let\@upordown\raise
\@clnht\z@
\else
\let\@upordown\lower
\@clnht \ht\@linechar
\fi
\@clnwd=\wd\@linechar
\if@negarg
\hskip -\wd\@linechar
\def\@tempa{\hskip -2\wd\@linechar}%
\else
\let\@tempa\relax
\fi
\@whiledim \@clnwd <\@linelen \do
{\@upordown\@clnht\copy\@linechar
\@tempa
\advance\@clnht \ht\@linechar
\advance\@clnwd \wd\@linechar}%
\advance\@clnht -\ht\@linechar
\advance\@clnwd -\wd\@linechar
\@tempdima\@linelen
\advance\@tempdima -\@clnwd
\@tempdimb\@tempdima
\advance\@tempdimb -\wd\@linechar
\if@negarg
\hskip -\@tempdimb
\else
\hskip \@tempdimb
\fi
\multiply\@tempdima \@m
\@tempcnta \@tempdima
\@tempdima \wd\@linechar
\divide\@tempcnta \@tempdima
\@tempdima \ht\@linechar
\multiply\@tempdima \@tempcnta
\divide\@tempdima \@m
\advance\@clnht \@tempdima
\ifdim \@linelen <\wd\@linechar
\hskip \wd\@linechar
\else
\@upordown\@clnht\copy\@linechar
\fi}
\def\@hline{%
\ifnum \@xarg <0 \hskip -\@linelen \fi
\vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen
\ifnum \@xarg <0 \hskip -\@linelen \fi}
\def\@getlinechar(#1,#2){%
\@tempcnta#1\relax
\multiply\@tempcnta 8
\advance\@tempcnta -9
\ifnum #2>0
\advance\@tempcnta #2\relax
\else
\advance\@tempcnta -#2\relax
\advance\@tempcnta 64
\fi
\char\@tempcnta}
\def\vector(#1,#2)#3{%
\@xarg #1\relax
\@yarg #2\relax
\@tempcnta \ifnum\@xarg<0 -\@xarg\else\@xarg\fi
\ifnum\@tempcnta<5\relax
\@linelen=#3\unitlength
\ifnum\@xarg =0
\@vvector
\else
\ifnum\@yarg =0
\@hvector
\else
\@svector
\fi
\fi
\else
\!@badlinearg
\fi}
\def\@hvector{%
\@hline
\hbox to 0pt{%
\@linefnt
\ifnum \@xarg <0
\@getlarrow(1,0)\hss
\else
\hss\@getrarrow(1,0)%
\fi}}
\def\@vvector{\ifnum \@yarg <0 \@downvector \else \@upvector \fi}
\def\@svector{%
\@sline
\@tempcnta\@yarg
\ifnum\@tempcnta <0
\@tempcnta=-\@tempcnta
\fi
\ifnum\@tempcnta <5
\hskip -\wd\@linechar
\@upordown\@clnht \hbox{%
\@linefnt
\if@negarg
\@getlarrow(\@xarg,\@yyarg)
\else
\@getrarrow(\@xarg,\@yyarg)
\fi}%
\else
\!@badlinearg
\fi}
\def\@getlarrow(#1,#2){%
\ifnum #2 =\z@
\@tempcnta='33
\else
\@tempcnta=#1\relax
\multiply\@tempcnta \sixt@@n
\advance\@tempcnta -9
\@tempcntb=#2\relax
\multiply\@tempcntb \tw@
\ifnum \@tempcntb >0
\advance\@tempcnta \@tempcntb\relax
\else\advance\@tempcnta -\@tempcntb
\advance\@tempcnta 64
\fi
\fi
\char\@tempcnta}
\def\@getrarrow(#1,#2){%
\@tempcntb=#2\relax
\ifnum\@tempcntb < 0
\@tempcntb=-\@tempcntb\relax
\fi
\ifcase \@tempcntb\relax
\@tempcnta='55
\or
\ifnum #1<3
\@tempcnta=#1\relax
\multiply\@tempcnta 24
\advance\@tempcnta -6
\else
\ifnum #1=3
\@tempcnta=49
\else
\@tempcnta=58
\fi
\fi
\or
\ifnum #1<3
\@tempcnta=#1\relax
\multiply\@tempcnta 24
\advance\@tempcnta -3
\else
\@tempcnta=51
\fi
\or
\@tempcnta=#1\relax
\multiply\@tempcnta \sixt@@n
\advance\@tempcnta -\tw@
\else
\@tempcnta=#1\relax
\multiply\@tempcnta \sixt@@n
\advance\@tempcnta 7
\fi
\ifnum #2<0
\advance\@tempcnta 64
\fi
\char\@tempcnta}
\def\@vline{%
\ifnum \@yarg <0
\@downline
\else
\@upline
\fi}
\def\@upline{%
\hbox to \z@{%
\hskip -\@halfwidth
\vrule \@width \@wholewidth \@height \@linelen \@depth \z@\hss}}
\def\@downline{%
\hbox to \z@{%
\hskip -\@halfwidth
\vrule \@width \@wholewidth \@height \z@ \@depth \@linelen \hss}}
\def\@upvector{%
\@upline
\setbox\@tempboxa\hbox{%
\@linefnt\char'66}%
\raise \@linelen \hbox to\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}}
\def\@downvector{%
\@downline
\lower \@linelen \hbox to \z@{\@linefnt\char'77\hss}}
\newif\if@ovt
\newif\if@ovb
\newif\if@ovl
\newif\if@ovr
\newdimen\@ovxx
\newdimen\@ovyy
\newdimen\@ovdx
\newdimen\@ovdy
\newdimen\@ovro
\newdimen\@ovri
\def\@getcirc#1{%
\@tempdima #1\relax
\@tempcnta\@tempdima
\@tempdima 4pt\relax
\divide\@tempcnta\@tempdima
\ifnum \@tempcnta > 10\relax
\@tempcnta 10\relax
\fi
\ifnum \@tempcnta >\z@
\advance\@tempcnta \m@ne
\else
\!@warning{Oval too small}%
\fi
\multiply\@tempcnta 4\relax
\setbox \@tempboxa \hbox{\@circlefnt \char \@tempcnta}%
\@tempdima \wd \@tempboxa}
\def\@put#1#2#3{%
\raise #2\hbox to \z@{\hskip #1#3\hss}}
\def\oval(#1,#2){%
\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}}
\def\@oval(#1,#2)[#3]{%
\begingroup
\boxmaxdepth \maxdimen
\@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
\@tfor\@tempa :=#3\do{%
\csname @ov\@tempa false\endcsname}%
\@ovxx #1\unitlength
\@ovyy #2\unitlength
\@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
\@getcirc \@tempdimb
\@ovro \ht\@tempboxa
\@ovri \dp\@tempboxa
\@ovdx\@ovxx
\advance\@ovdx -\@tempdima
\divide\@ovdx \tw@
\@ovdy\@ovyy
\advance\@ovdy -\@tempdima
\divide\@ovdy \tw@
\@circlefnt
\setbox\@tempboxa \hbox{%
\if@ovr
\@ovvert32\kern -\@tempdima
\fi
\if@ovl
\kern \@ovxx
\@ovvert01\kern -\@tempdima
\kern -\@ovxx
\fi
\if@ovt
\@ovhorz \kern -\@ovxx
\fi
\if@ovb
\raise \@ovyy \@ovhorz
\fi}%
\advance\@ovdx\@ovro
\advance\@ovdy\@ovro
\ht\@tempboxa\z@
\dp\@tempboxa\z@
\@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
\endgroup}
\def\@ovvert#1#2{%
\vbox to \@ovyy{%
\if@ovb
\@tempcntb \@tempcnta
\advance \@tempcntb by #1\relax
\kern -\@ovro
\hbox{\char \@tempcntb}%
\nointerlineskip
\else
\kern \@ovri
\kern \@ovdy
\fi
\leaders\vrule width \@wholewidth\vfil
\nointerlineskip
\if@ovt
\@tempcntb \@tempcnta
\advance \@tempcntb by #2\relax
\hbox{\char \@tempcntb}%
\else
\kern \@ovdy
\kern \@ovro
\fi}}
\def\@ovhorz{%
\hbox to \@ovxx{%
\kern \@ovro
\if@ovr
\else
\kern \@ovdx
\fi
\leaders \hrule height \@wholewidth \hfil
\if@ovl
\else
\kern \@ovdx
\fi
\kern \@ovri}}
\def\circle{%
\@ifstar{\@dot}{\@circle}}
\def\@circle#1{%
\begingroup
\boxmaxdepth \maxdimen
\@tempdimb #1\unitlength
\ifdim \@tempdimb >15.5pt\relax
\@getcirc\@tempdimb
\@ovro\ht\@tempboxa
\setbox\@tempboxa\hbox{%
\@circlefnt
\advance\@tempcnta\tw@
\char \@tempcnta
\advance\@tempcnta\m@ne
\char \@tempcnta
\kern -2\@tempdima
\advance\@tempcnta\tw@
\raise \@tempdima \hbox{\char\@tempcnta}%
\raise \@tempdima \box\@tempboxa}%
\ht\@tempboxa\z@
\dp\@tempboxa\z@
\@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
\else
\@circ\@tempdimb{96}%
\fi
\endgroup}
\def\@dot#1{%
\@tempdimb #1\unitlength
\@circ\@tempdimb{112}}
\def\@circ#1#2{%
\@tempdima #1\relax
\advance\@tempdima .5pt\relax
\@tempcnta\@tempdima
\@tempdima 1pt\relax
\divide\@tempcnta\@tempdima
\ifnum\@tempcnta > 15\relax
\@tempcnta 15\relax \fi
\ifnum
\@tempcnta >\z@
\advance\@tempcnta\m@ne
\fi
\advance\@tempcnta #2\relax
\@circlefnt
\char\@tempcnta}
\thinlines
\newcount\@xarg
\newcount\@yarg
\newcount\@yyarg
\newcount\@multicnt
\newdimen\@xdim
\newdimen\@ydim
\newbox\@linechar
\newdimen\@linelen
\newdimen\@clnwd
\newdimen\@clnht
% That's the end of the definitions of lines/vectors/circles/ovals.
% Save LaTeX's meaning of \line
\let\!latexline=\line
% Set variable meaning of line
\def\line{\!ifnextchar(\!latexline\!texline}
\catcode`@=12 \catcode`!=12
|