1.de PI \" Picture Include 2. \" $1=file(page) $2=height,width,yoff,xoff $3=flags 3. \" Height, width, xoff, and yoff are for the frame, flags is for the 4. \" picture. Default dimensions are inches. 5\\X'PI:\\n(.o:\\n(.i:\\n(.l:\\n(.t:\\$1:\\$2:\\$3:'\\c 6.. 7.nr FT 0 8.de BP \" Begin a Picture 9. \" 10. \" $1=file(page) $2=height $3=width $4=position $5=offset $6=flags $7=label 11. \" 12. \" Height, width, position, and offset are for the frame, flags is for 13. \" the picture. The postion flag should be l, c, r, or "". Omitting the 14. \" position argument is also allowed for compatibility with the original 15. \" version of the macro. In that case offset is taken relative to your 16. \" left margin. 17.if \\n(FT>1 .EP 18. \" Need these when we switch environments. 19.nr Ov \\n(.v 20.nr Oi \\n(.i 21.nr Ol \\n(.l 22. \" Remember the arguments - sometimes as both a string and number register. 23.nr $2 \\$2i 24.nr $3 \\$3i 25.nr $4 \\$4i 26.ds $4 \\$4 27.nr $5 \\$5i 28.ds $5 \\$6 29.ds $6 \\$7 30. \" Accept a few unadvertised position flags. 31.if '\\*($4'L' .ds $4 l 32.if '\\*($4'C' .ds $4 c 33.if '\\*($4'R' .ds $4 r 34. \" A null with more than three arguments means l. 35.if \\n(.$>3 .if '\\*($4'' .ds $4 l 36. \" Default frame dimensions if missing, zero, or null. 37.if !\\n($2>0 .nr $2 3.0i 38.if !\\n($3>0 .nr $3 \\n(.lu-\\n(.iu-\\n($4u 39.if !\\n($3>0 .nr $3 \\n($2u 40. \" Figure out the offset that will be used the rest of the way. 41.if '\\*($4'l' .nr $4 \\n($5u 42.if '\\*($4'c' .nr $4 (\\n(.lu-\\n(.iu-\\n($3u)/2u+\\n($5u 43.if '\\*($4'r' .nr $4 \\n(.lu-\\n(.iu-\\n($3u+\\n($5u 44. \" If we haven't recognized the position flag assume it wasn't given and 45. \" treat argument four as an offset from the left. 46.if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $5 \\$5 47.if !'\\*($4'l' .if !'\\*($4'c' .if !'\\*($4'r' .ds $6 \\$6 48. \" Set increments for line length and indent. 49.nr Ii \\n($3u+\\n($4u+.1i 50.nr Il \\n(.lu-\\n(.iu-\\n($4u+.1i 51. \" Set the frame type to one of: 52. \" 0 - frame is as wide as a line of text - skip over it. 53. \" 1 - fits in left or right margins 54. \" 2 - fill with text on the right 55. \" 3 - on the left 56. \" 4 - or on both sides of the frame 57. \" 5 - only set in EP if FT was 4 and now filling on the right. 58. \" Assume the frame is as wide as a line of text, then check dimensions 59. \" to see what's really true. The order of these tests is important! 60.nr FT 0 61.if \\n($4u>1.0i .nr FT 3 62.if \\n($4u+\\n(.iu>=\\n(.lu .nr FT 1 63.if \\n($3u+\\n($4u+\\n(.iu+1.0i<\\n(.lu .nr FT 2 64.if \\n($3u+\\n($4u<=0 .nr FT 1 65.if \\n(FT=2 .if \\n($4u>1.0i .nr FT 4 66. \" Ask for some vertical space - labeled pictures need a little extra, 67. \" margin pictures a little less. 68.if \\n(FT=1 .if '\\*($6'' .ne \\n($2u 69.if \\n(FT=1 .if !'\\*($6'' .ne \\n($2u+2v 70.if !\\n(FT=1 .if '\\*($6'' .ne \\n($2u+3v 71.if !\\n(FT=1 .if !'\\*($6'' .ne \\n($2u+5v 72. \" Save our place, draw the picture, label it, and return. Need precise 73. \" control of when \X'...' is put out - thus the new environment. 74.mk Oh 75.ev 1 76.in \\n(Oiu 77.ll \\n(Olu 78.vs \\n(Ovu 79.if \\n(FT=1 .sp -1v 80.if \\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u t\\*($5 81.if !\\n(FT=1 .PI \\$1 \\n($2u,\\n($3u,\\n(.vu,\\n($4u \\*($5 82.in 83.ll 84.vs 85.ev 86.lt \\n($3u 87.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 88.lt 89'sp |\\n(Ohu 90. \" Figure out what to do with the text that follows. 91.if !'\\*($6'' .nr $2 +2v 92.if \\n(FT=0 .sp \\n($2u+2v 93.if \\n(FT=1 .nr FT 0 94.if \\n(FT=2 'in +\\n(Iiu 95.if \\n(FT>2 .ll -\\n(Ilu 96.if \\n(FT>1 .di BB 97.if \\n(FT>1 .dt \\n($2u+2v+1u EP 98. \" Clean things up. 99.rr $2 100.rr $3 101.rr $4 102.rm $4 103.rr $5 104.rm $5 105.rm $6 106.rr Oh 107.rr Oi 108.rr Ol 109.rr Ov 110.if \\n(FT=0 .EP 111.. 112.de EP \" End the Picture - Normally called from a trap, although it can be used 113. \" on its own to mark the end of a picture. 114.nr Ot 0 115.if \\n(.tu<\\n(.pu .nr Ot \\n(.tu 116.if \\n(Ot>0 .if \\n(FT=4 .nr FT 3 117.if \\n(FT<2 .nr Ot 0 118.if \\n(Ot>0 .br 119.if \\n(FT=5 .nr Ot 0 120.if \\n(FT>1 \{\ 121. ev 1 122. eo 123. br 124. di 125. nf 126. in 0 127. BB 128. in 129. fi 130. ec 131. ev 132. rm BB\} 133.if \\n(FT=5 \{\ 134. nr FT 2 135' sp |\\n(Nhu+1v\} 136.if \\n(FT=4 \{\ 137. mk Nh 138. nr Nh -1v 139. nr FT 5 140' sp -\\n(dnu+1v 141' in +\\n(Iiu 142. ll +\\n(Ilu 143. di BB 144. dt \\n(dnu-2v+1u EP\} 145.if \\n(FT=2 'in -\\n(Iiu 146.if \\n(FT=3 .ll +\\n(Ilu 147.if \\n(FT<4 .nr FT 0 148.if \\n(Ot>0 .sp \\n(Otu 149.rr Ot 150.if \\n(FT=0 \{\ 151. rr Nh 152. rr Ii 153. rr Il\} 154.. 155