Annotation of researchv10no/cmd/monk/db/attrib.m, revision 1.1.1.1

1.1       root        1: |include(list.h)
                      2: |include(macro.h)
                      3: |include(style.h)
                      4: 
                      5: |attribute(page.offset; init 0;
                      6:        $ [
                      7: '\"    O current page offset
                      8: '\"    On page offset for column n
                      9: .              po $
                     10: .              nr O \n(.o
                     11: .              nr O0 \n(.o
                     12: ])
                     13: 
                     14: |attribute(line.length; init 6i;
                     15:        $ [
                     16: '\"    W current page width
                     17: '\"    Wn page width for column n
                     18: .              ll $
                     19: .              lt $
                     20: .              nr W \n(.lu
                     21: ])
                     22: 
                     23: |attribute(page.length; init 11i;
                     24:        $ [
                     25: .              pl $
                     26: ])
                     27: 
                     28: |attribute(spacing; init off;
                     29:        on [
                     30: .              rs
                     31: ]      off [
                     32: .              ns
                     33: ])
                     34: 
                     35: |attribute(new.page; nostack;
                     36:        [
                     37: .              bp
                     38: ]      odd [
                     39: '\"    ;P page number register TEMP
                     40: .              bp
                     41: .              af ;P \g'page_counter'          \" save format of page_counter
                     42: .              af page_counter 1                       \" normal format for next line
                     43: .              nr ;P \n'page_counter'                  \" must use different name for P
                     44: .              af page_counter \g(;P                   \" restore format to P
                     45: .              af ;P 1                                 \" normal format for control register
                     46: .              if !\n(;P%2 \{\
                     47: .                      rs
                     48: .                      bp \}
                     49: .              rr ;P                                   \" free storage
                     50: ]      even [
                     51: '\"    ;P page number register TEMP
                     52: .              bp
                     53: .              af ;P \g'page_counter'          \" save format of page_counter
                     54: .              af page_counter 1                       \" normal format for next line
                     55: .              nr ;P \n'page_counter'                  \" must use different name for P
                     56: .              af page_counter \g(;P                   \" restore format to P
                     57: .              af ;P 1                                 \" normal format for control register
                     58: .              if \n(;P%2 \{\
                     59: .                      rs
                     60: .                      bp \}
                     61: .              rr ;P                                   \" free storage
                     62: ])
                     63: 
                     64: |attribute(line.spacing; stack, init 1;
                     65:        $ [
                     66: .              ls $
                     67: ])
                     68: 
                     69: |attribute(blank.lines; nostack;
                     70:        $ [
                     71: .              sp $
                     72: .              ti \n(.iu                               \" movement resets indentation
                     73: ]      [
                     74: .              sp 1
                     75: .              ti \n(.iu                               \" movement resets indentation
                     76: ])
                     77: 
                     78: |attribute(minimum.lines; nostack;
                     79:        $ [
                     80: '\"    minimum space mechanism
                     81: '\"    :B amount of accumulated blank space
                     82: '\"    :D amount of accumulated blank space in diversion
                     83: '\"    :E position of last minimum space in diversion
                     84: '\"    :N position of last minimum space
                     85: '\"    }D name of last minimum space diversion
                     86: '\"    ;4 amount to space TEMP
                     87: .              br
                     88: '\"    when in a diversion, use .d (rather than nl) for position
                     89: '\"    careful--space might occur at the same
                     90: '\"    position BUT in a different named diversion
                     91: '\"    (hence, the use of the string }D)
                     92: '\"    bug still might be possible, if the same named diversion
                     93: '\"    is used, that a space might occur in the same vertical place.
                     94: '\"    very unlikely for
                     95: '\"            a) monk will remove :D and :E when not in a diversion
                     96: '\"            b) tbl generates unique names
                     97: .              ie !'\n(.z'' \{\
                     98: .                      if !'\n(.z'\*(}D' .rr :D :E
                     99: .                      nr ;4 $v
                    100: .                      if !(\n(.d=\n(:D) .nr :E 0      \" different place for sure
                    101: .                      nr ;4 -\n(:Eu                   \" remove previous accumulation, if any
                    102: .                      if \n(;4 \{\
                    103: .                              sp \n(;4u
                    104: .                              nr :E +\n(;4u \}
                    105: .                      rm ;4
                    106: .                      ds }D \n(.z
                    107: .                      nr :D \n(.d \}
                    108: .              el \{\
                    109: .                      rr :D :E                        \" remove the in-diversion registers
                    110: .                      nr ;4 $v
                    111: .                      if !(\n(nl=\n(:N) .nr :B 0      \" different place for sure
                    112: .                      nr ;4 -\n(:Bu                   \" remove previous accumulation, if any
                    113: .                      if \n(;4 \{\
                    114: .                              sp \n(;4u               \" space and recompute accumulation
                    115: .                              nr :B +\n(;4u \}
                    116: .                      rm ;4
                    117: .                      nr :N \n(nl \}
                    118: .                      ti \n(.iu                       \" movement resets indentation
                    119: ]      [
                    120: '\"    minimum space mechanism
                    121: '\"    :B amount of accumulated blank space
                    122: '\"    :D amount of accumulated blank space in diversion
                    123: '\"    :E position of last minimum space in diversion
                    124: '\"    :N position of last minimum space
                    125: '\"    }D name of last minimum space diversion
                    126: '\"    ;4 amount to space TEMP
                    127: .              br
                    128: '\"    when in a diversion, use .d (rather than nl) for position
                    129: '\"    careful--space might occur at the same
                    130: '\"    position BUT in a different named diversion
                    131: '\"    (hence, the use of the string }D)
                    132: '\"    bug still might be possible, if the same named diversion
                    133: '\"    is used, that a space might occur in the same vertical place.
                    134: '\"    very unlikely for
                    135: '\"            a) monk will remove :D and :E when not in a diversion
                    136: '\"            b) tbl generates unique names
                    137: .              ie !'\n(.z'' \{\
                    138: .                      if !'\n(.z'\*(}D' .rr :D :E
                    139: .                      nr ;4 1v
                    140: .                      if !(\n(.d=\n(:D) .nr :E 0      \" different place for sure
                    141: .                      nr ;4 -\n(:Eu                   \" remove previous accumulation, if any
                    142: .                      if \n(;4 \{\
                    143: .                              sp \n(;4u
                    144: .                              nr :E +\n(;4u \}
                    145: .                      rm ;4
                    146: .                      ds }D \n(.z
                    147: .                      nr :D \n(.d \}
                    148: .              el \{\
                    149: .                      rr :D :E                        \" remove the in-diversion registers
                    150: .                      nr ;4 1v
                    151: .                      if !(\n(nl=\n(:N) .nr :B 0      \" different place for sure
                    152: .                      nr ;4 -\n(:Bu                   \" remove previous accumulation, if any
                    153: .                      if \n(;4 \{\
                    154: .                              sp \n(;4u               \" space and recompute accumulation
                    155: .                              nr :B +\n(;4u \}
                    156: .                      rm ;4
                    157: .                      nr :N \n(nl \}
                    158: .                      ti \n(.iu                       \" movement resets indentation
                    159: ])
                    160: 
                    161: |attribute(horizontal.motion; nostack;
                    162:        $ [\h'$']
                    163:        number $$. [\h'\n$$.']
                    164:        number $number.register [\h'\n($number.register'])
                    165: 
                    166: |attribute(vertical.motion; nostack;
                    167:        $ [\v'$']
                    168:        number $$. [\v'\n$$.']
                    169:        number $number.register [\v'\n($number.register'])
                    170: 
                    171: |attribute(concatenate; nostack;
                    172:        [\&\c
                    173: ])
                    174: 
                    175: |attribute(new.line; nostack;
                    176:        [
                    177: .              br
                    178: ])
                    179: 
                    180: |attribute(indent; stack, default 0;
                    181:        $ [
                    182: .              in $
                    183: ])
                    184: 
                    185: |attribute(indent.line; nostack;
                    186:        $ [
                    187: .              ti $
                    188: ]
                    189:        number $$. [
                    190: .              ti \n$$.u
                    191: ]
                    192:        number $number.register [
                    193: .              ti \n($number.registeru
                    194: ])
                    195: 
                    196: |attribute(fill; stack, init on;
                    197:        on [
                    198: '              fi
                    199: ]      off [
                    200: '              nf
                    201: ])
                    202: 
                    203: |attribute(adjust; stack, init both;
                    204:        right [
                    205: .              ad r
                    206: ]      left [
                    207: .              ad l
                    208: ]      both [
                    209: .              ad b
                    210: ]      on [
                    211: .              ad
                    212: ]      off [
                    213: .              na
                    214: ])
                    215: 
                    216: |attribute(title; nostack;
                    217:        $left $center $right [
                    218: .              tl \(ts$left\(ts$center\(ts$right\(ts
                    219: ]      $$. [
                    220: .              tl \*$$.
                    221: ]      $$.. [
                    222: .              tl \*($$..
                    223: ]      $ [
                    224: .              tl $
                    225: ])
                    226: 
                    227: |attribute(center; stack, default off;
                    228:        on [
                    229: .              ce 9999
                    230: ]      off [
                    231: .              ce 0
                    232: ])
                    233: 
                    234: |attribute(center.block; stack, default off;
                    235:        on [
                    236: '\"    :1 store for centered block text
                    237: '\"    :Y width of a center block diversion
                    238: .              nr :Y 0                                 \" initialize width of block
                    239: .              br                                      \" output partial line before block
                    240: .              di :1                                   \" begin diversion
                    241: ]      off [
                    242: '\"    :1 store for centered block text
                    243: '\"    :Y width of a center block diversion
                    244: '\"    ;L remembered line spacing TEMP
                    245: '\"    ;i remembered indent TEMP
                    246: '\"    ;q remembered fill/no-fill mode TEMP
                    247: .              br                                      \" get last partial line
                    248: .              di                                      \" end diversion of centered block
                    249: .              nr ;q \n(.u                             \" save prevailing fill/no-fill mode
                    250: .              nf                                      \" bring it back in no-fill
                    251: .              nr ;L \n(.L                             \" save line spacing
                    252: .              ls 1                                    \" output display in ls 1
                    253: .              nr ;i \n(.i                             \" save prevailing indent
                    254: .              if \n(dl>\n(:Y .nr :Y \n(dl
                    255: .              if \n(:Y<\n(.l .in (\n(.lu-\n(:Yu)/2u   \"indent by half of white-space
                    256: .              :1                                      \" text
                    257: .              if \n(;q .fi                            \" restore fill if necessary
                    258: .              ls \n(;L                                \" restore line spacing
                    259: .              in \n(;iu                               \" restore prevailing indent
                    260: .              rr ;L ;i ;q                             \" free storage
                    261: .              rm :1
                    262: ])
                    263: 
                    264: |attribute(text; nostack;
                    265:        $ [$]
                    266:        roman $ [\f1\&$\fP\&]
                    267:        italics $ [\f2\&$\fP\&]
                    268:        bold $ [\f3\&$\fP\&]
                    269:        bolditalics $ [\f4\&$\fP\&]
                    270:        cw $ [\f(CW\&$\fP\&])
                    271: 
                    272: |attribute(error; nostack;
                    273:        number $* $$. [
                    274: .              tm "__FILE__":__LINE__: $* \n$$.
                    275: ]      number $* $number.register [
                    276: .              tm "__FILE__":__LINE__: $* \n($number.register
                    277: ]      string $* $$. [
                    278: .              tm "__FILE__":__LINE__: $* \n$$.
                    279: ]      string $* $string.register [
                    280: .              tm "__FILE__":__LINE__: $* \n($string.register
                    281: ]      $* [
                    282: .              tm "__FILE__":__LINE__: $*
                    283: ])
                    284: 
                    285: |attribute(here; stack, default off;
                    286:        on [
                    287: '\"    group mechanism
                    288: '\"    :0 store for initally diverted text
                    289: '\"    :y flag indicating group/float in progress
                    290: .              if \n(:y .tm "__FILE__":__LINE__: Here's and/or Around's can not be nested
                    291: .              nr :y 1                                 \" set flag indicating group
                    292: .              br                                      \" output partial line before display
                    293: .              di :0                                   \" collect in :0
                    294: ]      off [
                    295: '\"    Control page orientation of blocks.
                    296: '\"    Blocks are output as soon after their definition as
                    297: '\"    feasible.  The following rules are used:
                    298: '\"         1. if the block will fit on the current page, output it there.
                    299: '\"         2. if the block won't fit on any page, and we have used less than
                    300: '\"            half of the current page, then output the block on the
                    301: '\"            current page.
                    302: '\"         3. skip to the next page.
                    303: .              br                                      \" get last partial line
                    304: .              di                                      \" end diversion
                    305: '\"    The following if condition tests: (1) if the block is too large to
                    306: '\"    fit on the current page and either (2) it will fit on an unused page
                    307: '\"    or (3) we have already used more than half of the current page. (the
                    308: '\"    three conditions are grouped in the form 1 & (2 : 3)). If this
                    309: '\"    total condition is true, then a page is ejected and the block output
                    310: '\"    on the next page.
                    311: '\"    :0 store for initally diverted text
                    312: '\"    :d prevent )h from outputting a floating group
                    313: '\"    :m initial footer place and partial footnote diverter trap
                    314: '\"    :o footer trap location
                    315: '\"    :r position at end of page header macro
                    316: '\"    :y flag indicating group/float in progress
                    317: '\"    ;L remembered line spacing TEMP
                    318: '\"    ;i remembered indent TEMP
                    319: '\"    ;q remembered fill/no-fill mode TEMP
                    320: .              nr :d 1                                 \" prevent )h from outputting a floating group
                    321: .              if (\n(dn>=\n(.t)&((\n(dn<(\n(.p-\n(:r-\n(:m)):\
                    322: (\n(nl>(\n(.p-\n(:r-\n(:o/2u+\n(:r)))\
                    323: .                      ne \n(.tu+1v                    \" spring the trap
                    324: .              nr ;q \n(.u                             \" save prevailing fill/no-fill mode
                    325: .              nf                                      \" bring it back in no-fill
                    326: .              nr ;L \n(.L                             \" save line spacing
                    327: .              ls 1                                    \" output display in ls 1
                    328: .              nr ;i \n(.i                             \" save prevailing indent
                    329: .              in 0                                    \" indent back
                    330: .              rs                                      \" restore spacing
                    331: .              :0                                      \" text
                    332: .              nr :d 0                                 \" allow )h to output a floating group
                    333: .              if \n(;q .fi                            \" restore fill if necessary
                    334: .              ls \n(;L                                \" restore line spacing
                    335: .              in \n(;iu                               \" restore prevailing indent
                    336: .              nr :y 0                                 \" reset flag indicating group
                    337: .              rr ;L ;i ;q                             \" free storage
                    338: .              rm :0
                    339: ])
                    340: 
                    341: |attribute(around; stack, default off;
                    342:        on [
                    343: '\"    float mechanism
                    344: '\"    :0 store for initally diverted text
                    345: '\"    :y flag indicating group/float in progress
                    346: '\"    Wn page width for column n
                    347: '\"    ;L prevailing line spacing
                    348: '\"    ;f prevailing font
                    349: '\"    ;i prevailing indent
                    350: '\"    ;j prevailing adjust
                    351: '\"    ;l prevailing line length
                    352: '\"    ;s prevailing point size
                    353: '\"    ;u prevailing fill/no-fill mode
                    354: '\"    ;v prevailing vertical spacing
                    355: .              if \n(:y .tm "__FILE__":__LINE__: Here's and/or Around's can not be nested
                    356: .              nr :y 1                                 \" set flag indicating group
                    357: .              nr ;s \n(.s                             \" save prevailing point size
                    358: .              nr ;f \n(.f                             \" save prevailing font
                    359: .              nr ;u \n(.u                             \" save prevailing fill/no-fill mode
                    360: .              nr ;j \n(.j                             \" save prevailing adjust
                    361: .              nr ;v \n(.v                             \" save prevailing vertical spacing
                    362: .              nr ;L \n(.L                             \" save prevailing line spacing
                    363: .              nr ;l \n(.l                             \" save prevailing line length
                    364: .              nr ;i \n(.i                             \" save prevailing indent
                    365: .              ev 1                                    \" use footnote environment
                    366: .              ps \n(;s                                \" restore point size
                    367: .              vs \n(;sp+2p                            \" restore vertical spacing
                    368: .              ft \n(;f                                \" restore font
                    369: .              nf                                      \" bring it back in no-fill
                    370: .              if \n(;u .fi                            \" restore fill if necessary
                    371: .              ad \n(;j                                \" restore page adjust
                    372: .              vs \n(;vu                               \" restore vertical spacing
                    373: .              ls \n(;L                                \" restore line spacing
                    374: .              ll \n(;lu                               \" restore line length
                    375: .              in \n(;iu                               \" restore indent
                    376: .              ti \n(;iu                               \" restore indentation
                    377: .              hy 14                                   \" turn on hyphenation
                    378: .              lt \n(;lu                               \" restore title length
                    379: |ifvalue around_width full [
                    380: .              if \n(column_counter \{\
                    381: .                      ll \n(W0u                       \" go wide
                    382: .                      lt \n(W0u \}
                    383: ]
                    384: .              di :0                                   \" collect in :0
                    385: ]      off [
                    386: '\"    Control page orientation of floats.
                    387: '\"    Floats are output as soon after their definition as
                    388: '\"    feasible.  The following rules are used:
                    389: '\"         1. if the queue contains only this float and it will fit on the
                    390: '\"            current page, output it there.
                    391: '\"         2. if the queue contains only this float and it won't fit on any
                    392: '\"            page, and we have used less than half of the current page,
                    393: '\"            then output the float on the current page.
                    394: '\"         3. let the top of page macro handle it.
                    395: '\"    !{a-z} width of stored floating 0=narrow, 1=wide
                    396: '\"    :0 store for initally diverted text
                    397: '\"    :m initial footer place and partial footnote diverter trap
                    398: '\"    :o footer trap location
                    399: '\"    :r position at end of page header macro
                    400: '\"    :w output counter for floating keeps
                    401: '\"    :y flag indicating group/float in progress
                    402: '\"    :z input counter for floating keeps
                    403: '\"    ?{a-z} text of stored floating
                    404: '\"    W current page width
                    405: '\"    |{a-z} size of stored floating
                    406: '\"    ;L prevailing line spacing
                    407: '\"    ;f prevailing font
                    408: '\"    ;i prevailing indent
                    409: '\"    ;j prevailing adjust
                    410: '\"    ;l prevailing line length
                    411: '\"    ;s prevailing point size
                    412: '\"    ;u prevailing fill/no-fill mode
                    413: '\"    ;v prevailing vertical spacing
                    414: '\"    ;w convert to alpha format
                    415: .              br                                      \" get last partial line
                    416: .              di                                      \" end diversion of around block
                    417: |ifvalue around_width full [
                    418: .              if \n(column_counter \{\
                    419: .                      ll \nWu                         \" go narrow
                    420: .                      lt \nWu \}
                    421: ]
                    422: .              ev                                      \" back to previous environment
                    423: .              nr :z \n(:z%26+1                        \" get index of next output element
                    424: .              if \n(:z-\n(:w=0 .tm "__FILE__":__LINE__: too many floating displays
                    425: .              af ;w a                                 \" conversion register for display queue names
                    426: .              nr ;w \n(:z                             \" form the next queue element name
                    427: .              rn :0 ?\n(;w                            \" put the display into the queue
                    428: .              nr !\n(;w 0                             \" narrow
                    429: |ifvalue around_width full [
                    430: .              nr !\n(;w 1                             \" wide around
                    431: ]
                    432: |ifnotvalue around_width full [
                    433: .              if !\n(column_counter .nr !\n(;w 1      \" wide around if only one column
                    434: ]
                    435: .              nr |\n(;w \n(dn                         \" put the size of text
                    436: '\"    The following if condition tests: (1) if there is only one float
                    437: '\"    on the queue to output and (2) if wide displays and (3) we are on the
                    438: '\"    first column and (4) if the float fits on the current page or
                    439: '\"    (5) the float is too large to fit on any one page, and (6) we have used
                    440: '\"    less than half of the current page. (the six conditions are grouped
                    441: '\"    in the form (1 & (2 & 3) & (4 : (5 & 6))). If this total condition is true,
                    442: '\"    then a float is output.
                    443: .              if (((\n(:z-\n(:w=1):(\n(:z+26-\n(:w=1))&((\n(!\n(;w=1)&(\n(column_counter<2))&\
                    444: ((\n(dn<\n(.t):((\n(dn>(\n(.p-\n(:r-\n(:m))&\
                    445: (\n(nl<=(\n(.p-\n(:r-\n(:o/2u+\n(:r))))) .)z
                    446: .              nr :y 0                                 \" reset flag indicating group
                    447: .              rr ;L ;f ;i ;j ;l ;s ;u ;v ;w           \" free storage
                    448: ])
                    449: 
                    450: |attribute(around_placement; nostack;
                    451:        [
                    452: .              )w
                    453: ])
                    454: 
                    455: |attribute(footnote; stack, default off;
                    456:        on [
                    457: '\"    :F Footnote text
                    458: '\"    :q amount of footnote text
                    459: '\"    :x flag indicating footnote in progress
                    460: '\"    Wn page width for column n
                    461: '\"    ;L prevailing line spacing
                    462: '\"    ;f prevailing font
                    463: '\"    ;j prevailing adjust
                    464: '\"    ;l prevailing line length
                    465: '\"    ;o prevailing page offset ??????? bug with .po
                    466: '\"    ;s prevailing point size
                    467: '\"    ;u prevailing fill/no-fill mode
                    468: '\"    ;v prevailing vertical spacing
                    469: .              if \n(:x .tm "__FILE__":__LINE__: Footnotes can not be nested
                    470: .              nr :x 1                                 \" set flag indicating footnote
                    471: .              nr ;s \n(.s                             \" save prevailing point size
                    472: .              nr ;f \n(.f                             \" save prevailing font
                    473: .              nr ;u \n(.u                             \" save prevailing fill/no-fill mode
                    474: .              nr ;j \n(.j                             \" save prevailing adjust
                    475: .              nr ;v \n(.v                             \" save prevailing vertical spacing
                    476: .              nr ;L \n(.L                             \" save prevailing line spacing
                    477: .              nr ;l \n(.l                             \" save prevailing line length
                    478: .              ev 1                                    \" use footnote environment
                    479: .              ps \n(;s                                \" restore point size
                    480: .              vs \n(;sp+2p                            \" restore vertical spacing
                    481: .              ft \n(;f                                \" restore font
                    482: .              nf                                      \" bring it back in no-fill
                    483: .              if \n(;u .fi                            \" restore fill if necessary
                    484: .              ad \n(;j                                \" restore page adjust
                    485: .              vs \n(;vu                               \" restore vertical spacing
                    486: .              ls \n(;L                                \" restore line spacing
                    487: .              ll \n(;lu                               \" restore line length
                    488: .              in 0                                    \" reset indent
                    489: .              ti 0                                    \" reset indentation
                    490: .              hy 14                                   \" turn on hyphenation
                    491: .              lt \n(;lu                               \" restore title length
                    492: |ifvalue footnote_width full [
                    493: .              if \n(column_counter \{\
                    494: .                      ll \n(W0u                       \" go wide
                    495: .                      lt \n(W0u \}
                    496: ]
                    497: .              da :F                                   \" collect in :F
                    498: .              ie !\n(:q \{\
                    499: .                      nr ;o \n(.o                     \" save prevailing page offset
                    500: .                      po 0                            \" always from left margin
                    501: .                      ps 10                           \" 10 point roman font
                    502: .                      vs 12p
                    503: .                      ft 1
                    504: .                      ie \n(.A=0 \l'72p'              \" layout partial rule if new footnote
                    505: .                      el  __________
                    506: .                      ft                              \" restore values
                    507: .                      vs
                    508: .                      ps
                    509: .                      po \n(;ou \}
                    510: .              el .sp 1                                \" leave a blank between them
                    511: ]      off [
                    512: '\"    :V vertical spacing
                    513: '\"    :m initial footer place and partial footnote diverter trap
                    514: '\"    :o footer trap location
                    515: '\"    :q amount of footnote text
                    516: '\"    :v width of stored footnote 0=narrow, 1=wide
                    517: '\"    :x flag indicating footnote in progress
                    518: '\"    W current page width
                    519: '\"    ;L prevailing line spacing
                    520: '\"    ;f prevailing font
                    521: '\"    ;j prevailing adjust
                    522: '\"    ;l prevailing line length
                    523: '\"    ;o prevailing page offset ??????? bug with .po
                    524: '\"    ;s prevailing point size
                    525: '\"    ;u prevailing fill/no-fill mode
                    526: '\"    ;v prevailing vertical spacing
                    527: .              br                                      \" get last partial line
                    528: .              da                                      \" end diversion
                    529: |ifvalue footnote_width full [
                    530: .              if \n(column_counter \{\
                    531: .                      ll \nWu                         \" go narrow
                    532: .                      lt \nWu \}
                    533: .              nr :v 1                                 \" wide footnote
                    534: ]
                    535: |ifnotvalue footnote_width full [
                    536: .              if !\n(column_counter .nr :v 1          \" wide footnote if only one column
                    537: ]
                    538: .              ev                                      \" go back to previous environment
                    539: .              nr :x 0                                 \" clear flag indicating footnote
                    540: .              if !\n(:o-\n(:m \{\
                    541: .                      nr :o +\n(:Vu-1u                \" traps spring once we go past
                    542: .                      nr dn +\n(:V-\n(.v \}           \" uncertainty correction
                    543: .              nr :q +\n(dnu                           \" add in amount of new footnotes
                    544: '\"    Move up footer trap, but not above current position on page
                    545: .              nr :o +\n(dnu
                    546: .              if !\n(.pu-\n(nlu-.5p-\n(:ou .nr :o \n(.pu-\n(nlu-.5p
                    547: '\"    or below :m!
                    548: .              if !\n(:ou-\n(:mu .nr :o \n(:mu
                    549: '\"    or at all if in multi-column mode and the footnote is wide
                    550: .              if \n(column_counter>1&\n(:v .nr :o \n(:mu
                    551: .              ch )f -\n(:ou                           \" move footer trap
                    552: .              rr ;L ;f ;j ;l ;o ;s ;u ;v              \" free storage
                    553: ])
                    554: 
                    555: |attribute(size; stack, default 10;
                    556:        $ [|ifvalue inline on [\s$\&]|ifvalue inline off [
                    557: .              ps $
                    558: ]])
                    559: 
                    560: |attribute(space; stack, init 12;
                    561:        $ [
                    562: .              vs $
                    563: ])
                    564: 
                    565: |attribute(SPACE; nostack;
                    566:        [
                    567: .              vs \n(.sp+2p                            \" restore vertical spacing
                    568: ])
                    569: 
                    570: |attribute(font; stack, default roman;
                    571:        roman [|ifvalue inline on [\&\f1\&]|ifvalue inline off [
                    572: .              ft 1
                    573: ]]     italics [|ifvalue inline on [\&\f2\&]|ifvalue inline off [
                    574: .              ft 2
                    575: ]]     bold [|ifvalue inline on [\&\f3\&]|ifvalue inline off [
                    576: .              ft 3
                    577: ]]     bolditalics [|ifvalue inline on [\&\f4\&]|ifvalue inline off [
                    578: .              ft 4
                    579: ]]     cw [|ifvalue inline on [\&\f(CW\&]|ifvalue inline off [
                    580: .              ft CW
                    581: ]])
                    582: 
                    583: |attribute(font.family; stack, default times;
                    584:        times [
                    585: .              fp 1 R
                    586: .              fp 2 I
                    587: .              fp 3 B
                    588: .              fp 4 BI
                    589: ]      palatino [
                    590: .              fp 1 PA
                    591: .              fp 2 PI
                    592: .              fp 3 PB
                    593: .              fp 4 PX
                    594: ]      bembo [
                    595: .              fp 1 B1
                    596: .              fp 2 B2
                    597: .              fp 3 B3
                    598: .              fp 4 B4
                    599: ]      optima [
                    600: .              fp 1 O1
                    601: .              fp 2 O2
                    602: .              fp 3 O3
                    603: .              fp 4 O4
                    604: ]      souvenir [
                    605: .              fp 1 SV
                    606: .              fp 2 SI
                    607: .              fp 3 SB
                    608: .              fp 4 SX
                    609: ]      helvetica [
                    610: .              fp 1 H
                    611: .              fp 2 HI
                    612: .              fp 3 HB
                    613: .              fp 4 HX
                    614: ]      cw [
                    615: .              fp 1 CW
                    616: .              fp 2 I
                    617: .              fp 3 B
                    618: .              fp 4 BI
                    619: ]      gothic [
                    620: .              fp 1 C
                    621: .              fp 2 CX
                    622: .              fp 3 TB
                    623: .              fp 4 TX
                    624: ]      condensed [
                    625: .              fp 1 Hcond
                    626: .              fp 2 HcondI
                    627: .              fp 3 HcondB
                    628: .              fp 4 HlightI
                    629: ]      narrow [
                    630: .              fp 1 Hr
                    631: .              fp 2 Hi
                    632: .              fp 3 Hb
                    633: .              fp 4 Hx
                    634: ])
                    635: 
                    636: |attribute(if; nostack;
                    637:        $test [
                    638: .              if $test \
                    639: ]      begin $test [
                    640: .              if $test \{\
                    641: ]      end [\}\c
                    642: ]      else $test [
                    643: .              ie $test \
                    644: ]      else begin $test [
                    645: .              ie $test \{\
                    646: ]      else [
                    647: .              el \
                    648: ]      else begin [
                    649: .              el \{\
                    650: ])
                    651: 
                    652: |attribute(tab; nostack;
                    653:        [\&     ])
                    654: 
                    655: |attribute(leader; nostack;
                    656:        [\&&])
                    657: 
                    658: |attribute(thick.line; nostack;
                    659:        $ [
                    660: .              ps 24
                    661: \l'$'
                    662: .              ps
                    663: ]      [
                    664: .              ps 24
                    665: \l'\n(.lu'
                    666: .              ps
                    667: ])
                    668: 
                    669: |attribute(line; nostack;
                    670:        $ [\l'$']
                    671:        [\l'\n(.lu'])
                    672: 
                    673: |attribute(box; nostack;
                    674:        x [\s12\o'\(mu\(sq'\s0]
                    675:        empty [\s12\(sq\s0]
                    676:        [\(sq])
                    677: 
                    678: |attribute(underline; stack, default off;
                    679:        on [\kx]
                    680:        off [\l'|\nxu\(ul'])
                    681: 
                    682: |attribute(hyphenate; stack, init on;
                    683:        on [
                    684: .              hy 14
                    685: ]      off [
                    686: .              nh
                    687: ])
                    688: 
                    689: |attribute(case; stack, init any;
                    690:        upper [
                    691: '\" need to write this yet
                    692: ]      lower [
                    693: '\" need to write this yet
                    694: ]      capitalize [
                    695: '\" need to write this yet
                    696: ]      any [
                    697: '\" need to write this yet
                    698: ])
                    699: 
                    700: |attribute(tab.stops; nostack;
                    701:        $* [
                    702: .              ta $*
                    703: ]      [
                    704: .              ta .5i 1.0i 1.5i 2.0i 2.5i 3.0i 3.5i 4.0i 4.5i 5.0i 5.5i 6.0i 6.5i 7.0i 7.5i
                    705: ])
                    706: 
                    707: |attribute(set; nostack;
                    708:        $* $number [
                    709: |for i in $* {
                    710: .              nr $i $number
                    711: }]     string $* $string [
                    712: |for i in $* {
                    713: .              ds $i $string
                    714: }])
                    715: 
                    716: |attribute(store; nostack;
                    717:        $* $$. [
                    718: |for i in $* {
                    719: .              nr $i \n$$.
                    720: }]     $* $number.register [
                    721: |for i in $* {
                    722: .              nr $i \n($number.register
                    723: }]     string $* $$. [
                    724: |for i in $* {
                    725: .              ds $i \*$$.
                    726: }]     string $* $string.register [
                    727: |for i in $* {
                    728: .              ds $i \*($string.register
                    729: }]     number.from.string $* $$. [
                    730: |for i in $* {
                    731: .              nr $i \*$$.
                    732: }]     number.from.string $* $string.register [
                    733: |for i in $* {
                    734: .              nr $i \*($string.register
                    735: }]     string.from.number $* $$. [
                    736: |for i in $* {
                    737: .              ds $i \n$$.
                    738: }]     string.from.number $* $number.register [
                    739: |for i in $* {
                    740: .              ds $i \n($number.register
                    741: }]     width $* $$. [
                    742: |for i in $* {
                    743: .              nr $i \w'\*$$.'
                    744: }]     width $* $number.register [
                    745: |for i in $* {
                    746: .              nr $i \w'\*($number.register'
                    747: }]     indent $* [
                    748: |for i in $* {
                    749: .              nr $i \n(.i
                    750: }]     linelength $* [
                    751: |for i in $* {
                    752: .              nr $i \n(.l
                    753: }]     pagewidth $* [
                    754: |for i in $* {
                    755: .              nr $i \nWu
                    756: }]     totrap $* [
                    757: |for i in $* {
                    758: .              nr $i \n(.t
                    759: }]     pageoffset $* [
                    760: |for i in $* {
                    761: .              nr $i \n(.o
                    762: }]     diversionheight $* [
                    763: |for i in $* {
                    764: .              nr $i \n(dn
                    765: }])
                    766: 
                    767: |attribute(clear; nostack;
                    768:        $* [
                    769: |for i in $* {
                    770: .              nr $i 0
                    771: }]     string $* [
                    772: .              rm $*
                    773: ])
                    774: 
                    775: |attribute(rename; nostack;
                    776:        $from $to [
                    777: .              rn $from $to
                    778: ])
                    779: 
                    780: |attribute(add; nostack;
                    781:        $result $$. $* [
                    782: .              nr $result \n$$.
                    783: |for i in $* {
                    784: .              nr $result +\n($i
                    785: }]     $result $operand $* [
                    786: .              nr $result \n($operand
                    787: |for i in $* {
                    788: .              nr $result +\n($i
                    789: }]     $result $$. [
                    790: .              nr $result +\n$$.
                    791: ]      $result $operand [
                    792: .              nr $result +\n($operand
                    793: ]      constant $result $constant $* [
                    794: .              nr $result $constant
                    795: |for i in $* {
                    796: .              nr $result +$i
                    797: }]     constant $result $constant [
                    798: .              nr $result +$constant
                    799: ]      string $string $text [
                    800: .              as $string $text
                    801: ]      string.from.number $string $$. [
                    802: .              as $string \n$$.
                    803: ]      string.from.number $string $number.register [
                    804: .              as $string \n($number.register
                    805: ]      string.from.string $string $$. [
                    806: .              as $string \*$$.
                    807: ]      string.from.string $string $string.register [
                    808: .              as $string \*($string.register
                    809: ])
                    810: 
                    811: |attribute(sub; nostack;
                    812:        $result $$. $* [
                    813: .              nr $result \n$$.
                    814: |for i in $* {
                    815: .              nr $result -\n($i
                    816: }]     $result $operand $* [
                    817: .              nr $result \n($operand
                    818: |for i in $* {
                    819: .              nr $result -\n($i
                    820: }]     $result $$. [
                    821: .              nr $result -\n$$.
                    822: ]      $result $operand [
                    823: .              nr $result -\n($operand
                    824: ]      constant $result $constant $* [
                    825: .              nr $result $constant
                    826: |for i in $* {
                    827: .              nr $result -$i
                    828: }]     constant $result $constant [
                    829: .              nr $result -$constant
                    830: ])
                    831: 
                    832: |attribute(incr; nostack;
                    833:        $* [
                    834: |for i in $* {
                    835: .              nr $i +1
                    836: }])
                    837: 
                    838: |attribute(decr; nostack;
                    839:        $* [
                    840: |for i in $* {
                    841: .              nr $i -1
                    842: }])
                    843: 
                    844: |attribute(protect; nostack;
                    845:        $ [
                    846: .              ne $
                    847: ]      [
                    848: .              ne 3
                    849: ])
                    850: 
                    851: |attribute(warn.orphan; nostack;
                    852:        $ [
                    853: '\" need to write this yet
                    854: ]      [
                    855: '\" need to write this yet
                    856: ])
                    857: 
                    858: |attribute(column; nostack;
                    859:        $column $width $offset [
                    860: '\"    :c number of columns
                    861: '\"    On page offset for column n
                    862: '\"    Wn page width for column n
                    863: .              if \n(:c<$column .nr :c $column
                    864: .              nr W$column $width
                    865: .              nr O$column $offset
                    866: ]      width $width [
                    867: '\"    :c number of columns
                    868: '\"    Wn page width for column n
                    869: .              nr W\n(:c $width
                    870: ]      offset $offset [
                    871: '\"    :c number of columns
                    872: '\"    On page offset for column n
                    873: .              nr O\n(:c $offset
                    874: ]      next [
                    875: '\"    :c number of columns
                    876: .              nr :c +1
                    877: ]      clear   [
                    878: '\"    :c number of columns
                    879: .              rr :c
                    880: ]      new [
                    881: .              ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
                    882: .              el \{\
                    883: .                      br                              \" force out last partial line
                    884: .                      ne \n(.tu+1v \}                 \" spring footer trap for this column
                    885: ]      new $ [
                    886: '\"    O current page offset
                    887: '\"    On page offset for column n
                    888: '\"    W current page width
                    889: '\"    Wn page width for column n
                    890: '\"    ;d delta width TEMP
                    891: .              ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
                    892: .              el \{\
                    893: .                      br                              \" force out last partial line
                    894: .                      ne \n(.tu+1v                    \" spring footer trap for this column
                    895: .                      nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
                    896: .                      nr column_counter $             \" set column to $
                    897: .                      nr O \n(O$u                     \" restore new offset
                    898: .                      po \nOu                         \" set new offset
                    899: .                      nr W \n(W$u+\n(;du              \" restore new width
                    900: .                      ll \nWu                         \" set new line length
                    901: .                      lt \nWu                         \" set new title length
                    902: .                      rr ;d \}                        \" free storage
                    903: ]      old $ [
                    904: '\"    O current page offset
                    905: '\"    On page offset for column n
                    906: '\"    Un position to return to for column n
                    907: '\"    W current page width
                    908: '\"    Wn page width for column n
                    909: '\"    ;d delta width TEMP
                    910: .              ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
                    911: .              el \{\
                    912: .                      br                              \" force out last partial line
                    913: .                      if \n(nl>\n(U\n(column_counter \
                    914: .                              mk U\n(column_counter   \" new vertical position
                    915: .                      nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
                    916: .                      nr column_counter $             \" set column to $
                    917: .                      nr O \n(O$u                     \" restore new offset
                    918: .                      po \nOu                         \" set new offset
                    919: .                      nr W \n(W$u+\n(;du              \" restore new width
                    920: .                      ll \nWu                         \" set new line length
                    921: .                      lt \nWu                         \" set new title length
                    922: .                      rs                              \" restore spacing
                    923: .                      ie \n(U$ .sp |\n(U$u            \" restore vertical position
                    924: .                      el .sp |\n(U0u                  \" default top if not set
                    925: .                      ns                              \" turn off spacing
                    926: .                      rr ;d \}                        \" free storage
                    927: ]      on [
                    928: '\"    O current page offset
                    929: '\"    On page offset for column n
                    930: '\"    Un position to return to for column n
                    931: '\"    W current page width
                    932: '\"    Wn page width for column n
                    933: .              ie \n(column_counter .tm "__FILE__":__LINE__: already in multi-column mode
                    934: .              el \{\
                    935: .                      br                              \" force out last partial line
                    936: .                      nr column_counter 1             \" flag for multi-column mode, first column
                    937: .                      nr W \n(W1u                     \" restore first column width
                    938: .                      ll \nWu                         \" set first column line length
                    939: .                      lt \nWu                         \" set first column title length
                    940: .                      nr O \n(O1u                     \" restore first column offset
                    941: .                      po \nOu                         \" set first column offset
                    942: .                      mk U0                           \" set where all columns start
                    943: .                      ns                              \" avoid .sp in user text here
                    944: .                      rr U1 U2 U3 U4 U5 U6 U7 U8 U9   \" zero column starts
                    945: .                      rr ;d \}                        \" free storage
                    946: ]      off [
                    947: '\"    :c number of columns
                    948: '\"    Un position to return to for column n
                    949: '\"    W current page width
                    950: '\"    Wn page width for column n
                    951: '\"    ;d delta width TEMP
                    952: .              ie !\n(column_counter .tm "__FILE__":__LINE__: already in full page mode
                    953: .              el \{\
                    954: .                      br                              \" force out last partial line
                    955: .                      if \n(nl>\n(U\n(column_counter \
                    956: .                              mk U\n(column_counter   \" new vertical position
                    957: .                      nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
                    958: .                      nr column_counter 0             \" set flag for full page mode
                    959: .                      nr O \n(O0u                     \" restore new offset
                    960: .                      po \nOu                         \" set new offset
                    961: .                      nr W \n(W0u+\n(;du              \" restore line length
                    962: .                      ll \nWu                         \" set new line length
                    963: .                      lt \nWu                         \" set new title length
                    964: .                      rs                              \" restore spacing
                    965: .                      sp |\n(U0u                      \" restore vertical position
                    966: .                      if \n(nl<\n(U1 \
                    967: .                              sp |\n(U1u
                    968: .                      if \n(nl<\n(U2 \
                    969: .                              sp |\n(U2u
                    970: .                      if \n(nl<\n(U3 \
                    971: .                              sp |\n(U3u
                    972: .                      if \n(nl<\n(U4 \
                    973: .                              sp |\n(U4u
                    974: .                      if \n(nl<\n(U5 \
                    975: .                              sp |\n(U5u
                    976: .                      if \n(nl<\n(U6 \
                    977: .                              sp |\n(U6u
                    978: .                      if \n(nl<\n(U7 \
                    979: .                              sp |\n(U7u
                    980: .                      if \n(nl<\n(U8 \
                    981: .                              sp |\n(U8u
                    982: .                      if \n(nl<\n(U9 \
                    983: .                              sp |\n(U9u
                    984: .                      ti \n(.iu                       \" movement resets indentation
                    985: .                      rr U1 U2 U3 U4 U5 U6 U7 U8 U9   \" zero column starts
                    986: .                      ns                              \" turn off spacing
                    987: .                      rr ;d \}                        \" free storage
                    988: ]      2 [
                    989: '\"    :c number of columns
                    990: '\"    O current page offset
                    991: '\"    On page offset for column n
                    992: '\"    Un position to return to for column n
                    993: '\"    W current page width
                    994: '\"    Wn page width for column n
                    995: .              ie \n(column_counter .tm "__FILE__":__LINE__: already in multi-column mode
                    996: .              el \{\
                    997: .                      br                              \" force out last partial line
                    998: .                      nr column_counter 1             \" flag for multi-column mode, first column
                    999: .                      nr W0 \nW                       \" save width
                   1000: .                      nr W \n(.lu*8u/17u              \" new width
                   1001: .                      nr W1 \nW                       \" new width
                   1002: .                      nr W2 \nW                       \" new width
                   1003: .                      nr O0 \n(.ou                    \" page offset for other column
                   1004: .                      nr O1 \n(.ou                    \" page offset for other column
                   1005: .                      nr O2 \n(.lu*9u/17u+\n(.ou      \" page offset for other column
                   1006: .                      ll \nWu                         \" set new line length
                   1007: .                      lt \nWu                         \" set new title length
                   1008: .                      nr :c 2                         \" two columns
                   1009: .                      mk U0                           \" set where all columns start
                   1010: .                      ns                              \" turn off spacing
                   1011: .                      rr U1 U2 \}                     \" zero column starts
                   1012: ])
                   1013: 
                   1014: |attribute(divert.string; stack, default off;
                   1015:        $string.name [
                   1016: .              ds $string.name ]
                   1017:        off [
                   1018: ])
                   1019: 
                   1020: |attribute(divert.number; stack, default off;
                   1021:        $number.name [
                   1022: .              nr $number.name ]
                   1023:        off [
                   1024: ])
                   1025: 
                   1026: |attribute(divert.output; stack, default off;
                   1027:        on $string.name [
                   1028: '\"    ;L prevailing line spacing
                   1029: '\"    ;f prevailing font
                   1030: '\"    ;j prevailing adjust
                   1031: '\"    ;l prevailing line length
                   1032: '\"    ;o prevailing page offset ??????? bug with .po
                   1033: '\"    ;s prevailing point size
                   1034: '\"    ;u prevailing fill/no-fill mode
                   1035: '\"    ;v prevailing vertical spacing
                   1036: .              nr ;s \n(.s                             \" save prevailing point size
                   1037: .              nr ;f \n(.f                             \" save prevailing font
                   1038: .              nr ;u \n(.u                             \" save prevailing fill/no-fill mode
                   1039: .              nr ;j \n(.j                             \" save prevailing adjust
                   1040: .              nr ;v \n(.v                             \" save prevailing vertical spacing
                   1041: .              nr ;L \n(.L                             \" save prevailing line spacing
                   1042: .              nr ;l \n(.l                             \" save prevailing line length
                   1043: .              ev 1                                    \" use footnote environment
                   1044: .              ps \n(;s                                \" restore point size
                   1045: .              vs \n(;sp+2p                            \" restore vertical spacing
                   1046: .              ft \n(;f                                \" restore font
                   1047: .              nf                                      \" bring it back in no-fill
                   1048: .              if \n(;u .fi                            \" restore fill if necessary
                   1049: .              ad \n(;j                                \" restore page adjust
                   1050: .              vs \n(;vu                               \" restore vertical spacing
                   1051: .              ls \n(;L                                \" restore line spacing
                   1052: .              ll \n(;lu                               \" restore line length
                   1053: .              in 0                                    \" reset indent
                   1054: .              ti 0                                    \" reset indentation
                   1055: .              hy 14                                   \" turn on hyphenation
                   1056: .              lt \n(;lu                               \" restore title length
                   1057: .              di $string.name                         \" collect in $string.name
                   1058: ]      off [
                   1059: '\"    ;L prevailing line spacing
                   1060: '\"    ;f prevailing font
                   1061: '\"    ;j prevailing adjust
                   1062: '\"    ;l prevailing line length
                   1063: '\"    ;o prevailing page offset ??????? bug with .po
                   1064: '\"    ;s prevailing point size
                   1065: '\"    ;u prevailing fill/no-fill mode
                   1066: '\"    ;v prevailing vertical spacing
                   1067: .              br                                      \" get last partial line
                   1068: .              di                                      \" end diversion
                   1069: .              ev                                      \" go back to previous environment
                   1070: .              rr ;L ;f ;j ;l ;o ;s ;u ;v              \" free storage
                   1071: ])
                   1072: 
                   1073: |attribute(divert.input; stack, default off;
                   1074:        on $string.name [
                   1075: .              eo
                   1076: .              de $string.name\(ts\(ts
                   1077: ]      off [
                   1078: .\(ts\(ts
                   1079: .              ec
                   1080: ])
                   1081: 
                   1082: |attribute(append.output; stack, default off;
                   1083:        on $string.name [
                   1084: '\"    ;L prevailing line spacing
                   1085: '\"    ;f prevailing font
                   1086: '\"    ;j prevailing adjust
                   1087: '\"    ;l prevailing line length
                   1088: '\"    ;o prevailing page offset ??????? bug with .po
                   1089: '\"    ;s prevailing point size
                   1090: '\"    ;u prevailing fill/no-fill mode
                   1091: '\"    ;v prevailing vertical spacing
                   1092: .              nr ;s \n(.s                             \" save prevailing point size
                   1093: .              nr ;f \n(.f                             \" save prevailing font
                   1094: .              nr ;u \n(.u                             \" save prevailing fill/no-fill mode
                   1095: .              nr ;j \n(.j                             \" save prevailing adjust
                   1096: .              nr ;v \n(.v                             \" save prevailing vertical spacing
                   1097: .              nr ;L \n(.L                             \" save prevailing line spacing
                   1098: .              nr ;l \n(.l                             \" save prevailing line length
                   1099: .              ev 1                                    \" use footnote environment
                   1100: .              ps \n(;s                                \" restore point size
                   1101: .              vs \n(;sp+2p                            \" restore vertical spacing
                   1102: .              ft \n(;f                                \" restore font
                   1103: .              nf                                      \" bring it back in no-fill
                   1104: .              if \n(;u .fi                            \" restore fill if necessary
                   1105: .              ad \n(;j                                \" restore page adjust
                   1106: .              vs \n(;vu                               \" restore vertical spacing
                   1107: .              ls \n(;L                                \" restore line spacing
                   1108: .              ll \n(;lu                               \" restore line length
                   1109: .              in 0                                    \" reset indent
                   1110: .              ti 0                                    \" reset indentation
                   1111: .              hy 14                                   \" turn on hyphenation
                   1112: .              lt \n(;lu                               \" restore title length
                   1113: .              da $string.name                         \" collect in $string.name
                   1114: ]      off [
                   1115: '\"    ;L prevailing line spacing
                   1116: '\"    ;f prevailing font
                   1117: '\"    ;j prevailing adjust
                   1118: '\"    ;l prevailing line length
                   1119: '\"    ;o prevailing page offset ??????? bug with .po
                   1120: '\"    ;s prevailing point size
                   1121: '\"    ;u prevailing fill/no-fill mode
                   1122: '\"    ;v prevailing vertical spacing
                   1123: .              br                                      \" get last partial line
                   1124: .              da                                      \" end diversion
                   1125: .              ev                                      \" go back to previous environment
                   1126: .              rr ;L ;f ;j ;l ;o ;s ;u ;v              \" free storage
                   1127: ])
                   1128: 
                   1129: |attribute(append.input; stack, default off;
                   1130:        on $string.name [
                   1131: .              eo
                   1132: .              am $string.name\(ts\(ts
                   1133: ]      off [
                   1134: .\(ts\(ts
                   1135: .              ec
                   1136: ])
                   1137: 
                   1138: |attribute(invoke; nostack;
                   1139:        on $offset $what  [
                   1140: .              wh 15i $what                            \" activate the trap
                   1141: .              ch $what \n(nlu+$offset                 \" move it in place
                   1142: ]      on number $$. $what  [
                   1143: .              wh 15i $what                            \" activate the trap
                   1144: .              ch $what \n(nlu+\n$$.u                  \" move it in place
                   1145: ]      on number $number.register $what  [
                   1146: .              wh 15i $what                            \" activate the trap
                   1147: .              ch $what \(nlu+\n($number.registeru     \" move it in place
                   1148: ]      at constant $constant $what [
                   1149: .              wh 15i $what                            \" activate the trap
                   1150: .              ch $what $constant                      \" move it in place
                   1151: ]      at number $$. $what [
                   1152: .              wh 15i $what                            \" activate the trap
                   1153: .              ch $what \n$$.u                         \" move it in place
                   1154: ]      at number $number.register $what [
                   1155: .              wh 15i $what                            \" activate the trap
                   1156: .              ch $what \n($number.registeru           \" move it in place
                   1157: ]      end [
                   1158: .              br                                      \" get last partial line
                   1159: .              di                                      \" turn off diversions
                   1160: ]      off $what [
                   1161: .              ch $what                                \" remove the trap
                   1162: ])
                   1163: 
                   1164: |attribute(remember; nostack;
                   1165:        $ [
                   1166: .              mk $
                   1167: ])
                   1168: 
                   1169: |attribute(return; nostack;
                   1170:        $$. [
                   1171: .              sp |\n$$.u
                   1172: .              ti \n(.iu                               \" movement resets indentation
                   1173: ]      $ [
                   1174: .              sp |\n($u
                   1175: .              ti \n(.iu                               \" movement resets indentation
                   1176: ])
                   1177: 
                   1178: |attribute(goto; nostack;
                   1179:        $ [
                   1180: .              sp |$
                   1181: .              ti \n(.iu                               \" movement resets indentation
                   1182: ])
                   1183: 
                   1184: |attribute(string; nostack;
                   1185:        $$. [\*$$.]
                   1186:        $string.register [\*($string.register]
                   1187:        roman $$. [\f1\&\*$$.\fP\&]
                   1188:        italics $$. [\f2\&\*$$.\fP\&]
                   1189:        bold $$. [\f3\&\*$$.\fP\&]
                   1190:        bolditalics $$. [\f4\&\*$$.\fP\&]
                   1191:        cw $$. [\f(CW\&\*$$.\fP\&]
                   1192:        roman $string.register [\f1\&\*($string.register\fP\&]
                   1193:        italics $string.register [\f2\&\*($string.register\fP\&]
                   1194:        bold $string.register [\f3\&\*($string.register\fP\&]
                   1195:        bolditalics $string.register [\f4\&\*($string.register\fP\&]
                   1196:        cw $string.register [\f(CW\&\*($string.register\fP\&])
                   1197: 
                   1198: |attribute(macro; nostack;
                   1199:        $ [
                   1200: .              $
                   1201: ])
                   1202: 
                   1203: |attribute(number; nostack;
                   1204:        $$. [\n$$.]
                   1205:        $number.register [\n($number.register]
                   1206:        ++ $$. [\n+$$.]
                   1207:        ++ $number.register [\n+($number.register]
                   1208:        format $* $format [
                   1209: |for i in $* {
                   1210: .              af $i $format
                   1211: }]
                   1212:        incr $* $incr [
                   1213: |for i in $* {
                   1214: .              nr $i +0 $incr
                   1215: }]
                   1216:        format.from.string $* $$. [
                   1217: |for i in $* {
                   1218: .              af $i \*$$.
                   1219: }]
                   1220:        incr $* $incr [
                   1221: |for i in $* {
                   1222: .              nr $i +0 $incr
                   1223: }]
                   1224:        format.from.string $* $format [
                   1225: |for i in $* {
                   1226: .              af $i \*($format
                   1227: }]
                   1228:        incr $* $incr [
                   1229: |for i in $* {
                   1230: .              nr $i +0 $incr
                   1231: }])
                   1232: 
                   1233: |attribute(list.pre; stack, default;
                   1234:        [
                   1235: .              rm premark_string
                   1236: ]
                   1237:        $pre [
                   1238: .              ds premark_string $pre
                   1239: ])
                   1240: 
                   1241: |attribute(list.format; stack, default;
                   1242:        [
                   1243: .              rm format_string
                   1244: ]
                   1245:        $format [
                   1246: .              ds format_string $format
                   1247: ])
                   1248: 
                   1249: |attribute(list.post; stack, default;
                   1250:        [
                   1251: .              rm postmark_string
                   1252: ]
                   1253:        $post [
                   1254: .              ds postmark_string $post
                   1255: ])
                   1256: 
                   1257: |attribute(list.indent; stack, default;
                   1258:        [
                   1259: .              rm indent_string
                   1260: ]
                   1261:        $indent [
                   1262: .              ds indent_string $indent
                   1263: ])
                   1264: 
                   1265: |attribute(list; nostack;
                   1266:        off [
                   1267: '\"    ;i remembered indent TEMP
                   1268: .              )C ;i indentsave_string \*(indentsave_string
                   1269: .              in \n(;iu
                   1270: .              )C list_counter listsave_string \*(listsave_string
                   1271: .              rm ;i
                   1272: ]      on [
                   1273: .              ds indentsave_string \n(.i \*(indentsave_string
                   1274: .              in +\w'\*(indent_string'u
                   1275: .              af list_counter 0
                   1276: .              ds listsave_string \n(list_counter \*(listsave_string
                   1277: .              nr list_counter 0 1
                   1278: ])
                   1279: 
                   1280: |attribute(file.information; nostack;
                   1281:        [
                   1282: .              lf __LINE__ __FILE__
                   1283: ])
                   1284: 
                   1285: |attribute(reference.style; nostack;
                   1286:        acm [|reference_style(acm)
                   1287: ]      apa [|reference_style(apa)
                   1288: ]      att [|reference_style(att)
                   1289: ]      ieee [|reference_style(ieee)
                   1290: ]      lsa [|reference_style(lsa)
                   1291: ]      pami [|reference_style(pami)
                   1292: ]      spectrum [|reference_style(spectrum)
                   1293: ])
                   1294: 
                   1295: |attribute(reference.option; nostack;
                   1296:        tm [|reference_style(same tm)
                   1297: ]      rp [|reference_style(same rp)
                   1298: ]      nroff [|reference_style(same nroff)
                   1299: ]      troff [|reference_style(same troff)
                   1300: ]      sort [|reference_style(same sort)
                   1301: ]      sequence [|reference_style(same sequence)
                   1302: ]      a [|reference_style(same a)
                   1303: ]      d [|reference_style(same d)
                   1304: ]      t [|reference_style(same t)
                   1305: ]      ad [|reference_style(same ad)
                   1306: ]      at [|reference_style(same at)
                   1307: ]      da [|reference_style(same da)
                   1308: ]      dt [|reference_style(same dt)
                   1309: ]      ta [|reference_style(same ta)
                   1310: ]      td [|reference_style(same td)
                   1311: ]      adt [|reference_style(same adt)
                   1312: ]      atd [|reference_style(same atd)
                   1313: ]      dat [|reference_style(same dat)
                   1314: ]      dta [|reference_style(same dta)
                   1315: ]      tad [|reference_style(same tad)
                   1316: ]      tda [|reference_style(same tda)
                   1317: ])
                   1318: 
                   1319: |attribute(reference; stack, default off;
                   1320:        database [|reference_database<]
                   1321:        include [|reference_include<]
                   1322:        list [|reference_list<]
                   1323:        on [|reference<]
                   1324:        off [>])
                   1325: 
                   1326: |attribute(reference.placement; nostack;
                   1327:        [|reference_placement
                   1328: ])
                   1329: 
                   1330: |attribute(table; stack, default off;
                   1331:        on [
                   1332: .              TS
                   1333: ]      off [
                   1334: .              TE
                   1335: ])
                   1336: 
                   1337: |attribute(ipa; stack, default off;
                   1338:        on [@ipa(]
                   1339:        off [)])
                   1340: 
                   1341: |attribute(picture; stack, default off;
                   1342:        on [
                   1343: .              PS
                   1344: ]      off [
                   1345: .              PE
                   1346: ])
                   1347: 
                   1348: |attribute(ped; stack, default off;
                   1349:        on [
                   1350: .              GS
                   1351: ]      off[
                   1352: .              GE
                   1353: ])
                   1354: 
                   1355: |attribute(ideal; stack, default off;
                   1356:        on [
                   1357: .              IS
                   1358: ]      off[
                   1359: .              IE
                   1360: ])
                   1361: 
                   1362: |attribute(equation; stack, default off;
                   1363:        on [
                   1364: '\"    :4 store for equations
                   1365: .              br                                      \" output partial line before equation
                   1366: .              di :4                                   \" begin diversion
                   1367: .              EQ                                      \" begin equation
                   1368: ]      off [
                   1369: '\"    :4 store for equations
                   1370: '\"    :D amount of accumulate blank lines in diversion
                   1371: '\"    :E position of last minimum space in diversion
                   1372: '\"    :Y width of a center block diversion
                   1373: '\"    10 the equation as a string
                   1374: .              EN                                      \" end equation
                   1375: .              br                                      \" get last partial line
                   1376: .              di                                      \" end diversion of equation
                   1377: .              rm :4                                   \" throw the equation away
                   1378: |ifvalue center.block on [
                   1379: .              if \w@\*(10\*(equation_string@ \{\
                   1380: .                      if \n(:Y<\w@\*(10@ .nr :Y \w@\*(10@ \" update width
                   1381: \!\*(10\h'\\n(.lu-\w@\*(10\*(equation_string@u-\\n(.iu'\*(equation_string      \" output next expansion
                   1382: .                      rr :D :E \}]                    \" pretend we've moved
                   1383: |ifvalue center on [
                   1384: .              if \w@\*(10\*(equation_string@ .tl \(ts\(ts\*(10\(ts\*(equation_string\(ts]
                   1385: |ifnotvalue center.block on [ |ifnotvalue center on [
                   1386: .              if \w@\*(10\*(equation_string@ \{\
                   1387: .                      pc                              \" protect against use of % in eqn
                   1388: .                      tl \(ts\h'\n(.iu'\*(10\(ts\(ts\*(equation_string\(ts
                   1389: .                      pc % \}]]                       \" give % back to tl
                   1390: .              rm 10                                   \" free storage
                   1391: ])
                   1392: 
                   1393: |attribute(inline.equation; stack, default off;
                   1394:        on []
                   1395:        off [])
                   1396: 
                   1397: |attribute(graph; stack, default off;
                   1398:        on [
                   1399: .              G1
                   1400: ]      off [
                   1401: .              G2
                   1402: ])
                   1403: 
                   1404: |attribute(bargraph; stack, default off;
                   1405:        on [
                   1406: .              B1
                   1407: ]      off [
                   1408: .              B0
                   1409: ])
                   1410: 
                   1411: |attribute(computeroutput; stack, default off;
                   1412:        on [
                   1413: .              CW
                   1414: ]      off [
                   1415: .              CN
                   1416: ])
                   1417: 
                   1418: |attribute(citation; nostack;
                   1419:        save on [
                   1420: .              CD "]
                   1421:        save off string $$. [" "\*$$."
                   1422: ]      save off string $string.register [" "\*($string.register"
                   1423: ]      save off number $$. [" "\n$$."
                   1424: ]      save off number $number.register [" "\n($number.register"
                   1425: ]      save string $name $$. [\&\c
                   1426: .              CD "$name" "\*$$."
                   1427: ]      save string $name $string.register [\&\c
                   1428: .              CD "$name" "\*($string.register"
                   1429: ]      save number $name $$. [\&\c
                   1430: .              CD "$name" "\n$$."
                   1431: ]      save number $name $number.register [\&\c
                   1432: .              CD "$name" "\n($number.register"
                   1433: ]      remember on [\&\c
                   1434: .              CU "]
                   1435:        remember off ["]
                   1436:        remember string $name [\&\c
                   1437: .              CU "$name"])
                   1438: 
                   1439: |attribute(index; stack, default off;
                   1440:        on [\&\c
                   1441: .              tm ix: ]
                   1442:        off [   \n'page_counter'
                   1443: \&])
                   1444: 
                   1445: |attribute(contents; nostack;
                   1446:        $category $level $sequence $text [
                   1447: .              tm .TC  $category       $level  \*($sequence    \*($text        \n'page_counter'
                   1448: ])
                   1449: 
                   1450: |attribute(white.text; nostack;
                   1451:        $text [|ifvalue verbatim off []|ifvalue verbatim on [$text]])
                   1452: 
                   1453: |attribute(nl.paragraph; nostack;
                   1454:        [|ifvalue verbatim on [
                   1455: ]|ifvalue verbatim off []])
                   1456: 
                   1457: |attribute(format.type; stack, init none;
                   1458:        model [
                   1459: .              ds format_type model
                   1460: ]      acm [
                   1461: .              ds format_type acm
                   1462: ]      none [
                   1463: .              ds format_type none
                   1464: ])
                   1465: 
                   1466: |attribute(list.type; stack, default none;
                   1467:        fixed []
                   1468:        calculated []
                   1469:        none [])
                   1470: 
                   1471: |attribute(list.spacing; stack, default off;
                   1472:        off []
                   1473:        on [])
                   1474: 
                   1475: |attribute(verbatim; stack, default off;
                   1476:        off []
                   1477:        on [])
                   1478: 
                   1479: |attribute(draft; stack, default off;
                   1480:        off []
                   1481:        on [])
                   1482: 
                   1483: |attribute(sectioning; stack, default bysection;
                   1484:        bysection []
                   1485:        bychapter []
                   1486:        byappendix [])
                   1487: 
                   1488: |attribute(globalparagraph.style; stack, default flushed;
                   1489:        indented []
                   1490:        numbered []
                   1491:        flushed [])
                   1492: 
                   1493: |attribute(localparagraph.style; stack, default flushed;
                   1494:        indented []
                   1495:        numbered []
                   1496:        flushed [])
                   1497: 
                   1498: |attribute(inline; stack, default on;
                   1499:        off []
                   1500:        on [])
                   1501: 
                   1502: |attribute(footnote_width; stack, default normal;
                   1503:        narrow []
                   1504:        full []
                   1505:        normal[])
                   1506: 
                   1507: |attribute(around_width; stack, default normal;
                   1508:        narrow []
                   1509:        full []
                   1510:        normal[])
                   1511: 
                   1512: |attribute(sawreference; stack, default off;
                   1513:        off []
                   1514:        on [])
                   1515: 
                   1516: |attribute(sawabstract; stack, default off;
                   1517:        off []
                   1518:        on [])
                   1519: 
                   1520: |attribute(sawkeywords; stack, default off;
                   1521:        off []
                   1522:        on [])
                   1523: 
                   1524: |attribute(sawoverflow; stack, default off;
                   1525:        off []
                   1526:        on [])
                   1527: 
                   1528: |attribute(sawtitlebox; stack, default off;
                   1529:        off []
                   1530:        on [])
                   1531: 
                   1532: |attribute(sawendnote; stack, default off;
                   1533:        off []
                   1534:        on [])

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.