rsc | 13f7391 | 2004-05-15 23:45:13 +0000 | [diff] [blame] | 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 | .. |