de PI   \" Picture Include
       \" $1=file(page) $2=height,width,yoff,xoff $3=flags
       \" Height, width, xoff, and yoff are for the frame, flags is for the
       \" picture. Default dimensions are inches.
\\X'PI:\\n(.o:\\n(.i:\\n(.l:\\n(.t:\\$1:\\$2:\\$3:'\\c
.
nr FT 0
de BP   \" Begin a Picture
       \"
       \" $1=file(page) $2=height $3=width $4=position $5=offset $6=flags $7=label
       \"
       \" Height, width, position, and offset are for the frame, flags is for
       \" the picture. The postion flag should be l, c, r, or "". Omitting the
       \" position argument is also allowed for compatibility with the original
       \" version of the macro. In that case offset is taken relative to your
       \" left margin.
if \\n(FT>1 .EP
       \" Need these when we switch environments.
nr Ov \\n(.v
nr Oi \\n(.i
nr Ol \\n(.l
       \" Remember the arguments - sometimes as both a string and number register.
nr $2 \\$2i
nr $3 \\$3i
nr $4 \\$4i
ds $4 \\$4
nr $5 \\$5i
ds $5 \\$6
ds $6 \\$7
       \" Accept a few unadvertised position flags.
if '\\*($4'L' .ds $4 l
if '\\*($4'C' .ds $4 c
if '\\*($4'R' .ds $4 r
       \" A null with more than three arguments means l.
if \\n(.$>3 .if '\\*($4'' .ds $4 l
       \" Default frame dimensions if missing, zero, or null.
if !\\n($2>0 .nr $2 3.0i
if !\\n($3>0 .nr $3 \\n(.lu-\\n(.iu-\\n($4u
if !\\n($3>0 .nr $3 \\n($2u
       \" Figure out the offset that will be used the rest of the way.
if '\\*($4'l' .nr $4 \\n($5u
if '\\*($4'c' .nr $4 (\\n(.lu-\\n(.iu-\\n($3u)/2u+\\n($5u
if '\\*($4'r' .nr $4 \\n(.lu-\\n(.iu-\\n($3u+\\n($5u
       \" If we haven't recognized the position flag assume it wasn't given and
       \" treat argument four as an offset from the left.
if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $5 \\$5
if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $6 \\$6
       \" Set increments for line length and indent.
nr Ii \\n($3u+\\n($4u+.1i
nr Il \\n(.lu-\\n(.iu-\\n($4u+.1i
       \" Set the frame type to one of:
       \"      0 - frame is as wide as a line of text - skip over it.
       \"      1 - fits in left or right margins
       \"      2 - fill with text on the right
       \"      3 - on the left
       \"      4 - or on both sides of the frame
       \"      5 - only set in EP if FT was 4 and now filling on the right.
       \" Assume the frame is as wide as a line of text, then check dimensions
       \" to see what's really true. The order of these tests is important!
nr FT 0
if \\n($4u>1.0i .nr FT 3
if \\n($4u+\\n(.iu>=\\n(.lu .nr FT 1
if \\n($3u+\\n($4u+\\n(.iu+1.0i<\\n(.lu .nr FT 2
if \\n($3u+\\n($4u<=0 .nr FT 1
if \\n(FT=2 .if \\n($4u>1.0i .nr FT 4
       \" Ask for some vertical space - labeled pictures need a little extra,
       \" margin pictures a little less.
if \\n(FT=1 .if '\\*($6'' .ne \\n($2u
if \\n(FT=1 .if !'\\*($6'' .ne \\n($2u+2v
if !\\n(FT=1 .if '\\*($6'' .ne \\n($2u+3v
if !\\n(FT=1 .if !'\\*($6'' .ne \\n($2u+5v
       \" Save our place, draw the picture, label it, and return. Need precise
       \" control of when \X'...' is put out - thus the new environment.
mk Oh
ev 1
in \\n(Oiu
ll \\n(Olu
vs \\n(Ovu
if \\n(FT=1 .sp -1v
if \\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u t\\*($5
if !\\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u \\*($5
in
ll
vs
ev
lt \\n($3u
tl \(ts\(ts\\h'\\n($4u+\\n(.iu'\\v'\\n($2u+1.5v'\\*($6\\v'-\\n($2u-1.5v'\\h'-\\n($4u-\\n(.iu'\(ts\(ts
lt
'sp |\\n(Ohu
       \" Figure out what to do with the text that follows.
if !'\\*($6'' .nr $2 +2v
if \\n(FT=0 .sp \\n($2u+2v
if \\n(FT=1 .nr FT 0
if \\n(FT=2 'in +\\n(Iiu
if \\n(FT>2 .ll -\\n(Ilu
if \\n(FT>1 .di BB
if \\n(FT>1 .dt \\n($2u+2v+1u EP
       \" Clean things up.
rr $2
rr $3
rr $4
rm $4
rr $5
rm $5
rm $6
rr Oh
rr Oi
rr Ol
rr Ov
if \\n(FT=0 .EP
.
de EP   \" End the Picture - Normally called from a trap, although it can be used
       \" on its own to mark the end of a picture.
nr Ot 0
if \\n(.tu<\\n(.pu .nr Ot \\n(.tu
if \\n(Ot>0 .if \\n(FT=4 .nr FT 3
if \\n(FT<2 .nr Ot 0
if \\n(Ot>0 .br
if \\n(FT=5 .nr Ot 0
if \\n(FT>1 \{\
       ev 1
       eo
       br
       di
       nf
       in 0
       BB
       in
       fi
       ec
       ev
       rm BB\}
if \\n(FT=5 \{\
       nr FT 2
'       sp |\\n(Nhu+1v\}
if \\n(FT=4 \{\
       mk Nh
       nr Nh -1v
       nr FT 5
'       sp -\\n(dnu+1v
'       in +\\n(Iiu
       ll +\\n(Ilu
       di BB
       dt \\n(dnu-2v+1u EP\}
if \\n(FT=2 'in -\\n(Iiu
if \\n(FT=3 .ll +\\n(Ilu
if \\n(FT<4 .nr FT 0
if \\n(Ot>0 .sp \\n(Otu
rr Ot
if \\n(FT=0 \{\
       rr Nh
       rr Ii
       rr Il\}
.