|  | .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\} | 
|  | .. |