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

1.1       root        1: |include(macro.h)
                      2: |include(list.h)
                      3: |include(whitespace.h)
                      4: |include(style.h)
                      5: 
                      6: |attribute(page.offset; init;
                      7:        [
                      8: .              po \nOu
                      9: ]
                     10:        $ [
                     11: .              po $
                     12: ])
                     13: 
                     14: |attribute(line.length; init;
                     15:        [
                     16: .              ll \nWu
                     17: .              lt \nWu
                     18: ]
                     19:        $ [
                     20: .              ll $
                     21: .              lt $
                     22: ])
                     23: 
                     24: |attribute(page.length; init;
                     25:        [
                     26: .              pl \nLu
                     27: ]
                     28:        $ [
                     29: .              pl $
                     30: ])
                     31: 
                     32: |attribute(spacing; init off;
                     33:        on [
                     34: .              rs
                     35: ]      off [
                     36: .              ns
                     37: ])
                     38: 
                     39: |attribute(new.page; nostack;
                     40:        [
                     41: .              bp
                     42: ])
                     43: 
                     44: |attribute(line.spacing; stack, init;
                     45:        $ [
                     46: .              ls $
                     47: ]      [
                     48: .              ls 1
                     49: ])
                     50: 
                     51: |attribute(blank.lines; nostack;
                     52:        $ [
                     53: .              sp $
                     54: ]      [
                     55: .              sp 1
                     56: ])
                     57: 
                     58: |attribute(horizontal.motion; nostack;
                     59:        $ [\h'$'])
                     60: 
                     61: |attribute(vertical.motion; nostack;
                     62:        $ [\v'$'])
                     63: 
                     64: |attribute(concatenate; nostack;
                     65:        [\c])
                     66: 
                     67: |attribute(new.line; nostack;
                     68:        [
                     69: .              br
                     70: ])
                     71: 
                     72: |attribute(indent; stack, init;
                     73:        $ [
                     74: .              in $
                     75: ]      [
                     76: '              in 0
                     77: ])
                     78: 
                     79: |attribute(indent.line; nostack;
                     80:        $ [
                     81: .              ti $
                     82: ]      [
                     83: '              ti 0
                     84: ])
                     85: 
                     86: |attribute(fill; stack, init on;
                     87:        on [
                     88: .              fi
                     89: ]      off [
                     90: .              nf
                     91: ])
                     92: 
                     93: |attribute(adjust; stack, init both;
                     94:        right [
                     95: .              ad r
                     96: ]      left [
                     97: .              ad l
                     98: ]      both [
                     99: .              ad b
                    100: ]      on [
                    101: .              ad
                    102: ]      off [
                    103: .              na
                    104: ])
                    105: 
                    106: |attribute(center; stack, default off;
                    107:        on [
                    108: .              ce 9999
                    109: ]      off [
                    110: .              ce 0
                    111: ])
                    112: 
                    113: |attribute(center.block; stack, default off;
                    114:        on [
                    115: .              di :1                   \" begin second diversion
                    116: ]      off [
                    117: .              br                      \" get last partial line
                    118: .              di                      \" end diversion of centered block
                    119: .              nr ;q \n(.u             \" save prevailing fill/no-fill mode
                    120: .              nf                      \" bring it back in no-fill
                    121: .              nr ;L \n(.L             \" save line spacing
                    122: .              ls 1                    \" output display in ls 1
                    123: .              nr ;i \n(.i             \" save prevailing indent
                    124: .              nr ;y 1                 \" initialize width of block
                    125: .              if \n(dl>\n(;y .nr ;y \n(dl
                    126: .              if \n(;y<\n(.l .in (\n(.lu-\n(;yu)/2u \"indent by half of white-space
                    127: .              :1                      \" text
                    128: .              if \n(;q .fi            \" restore fill if necessary
                    129: .              ls \n(;L                \" restore line spacing
                    130: .              in \n(;iu               \" restore prevailing indent
                    131: .              rr ;y                   \" free storage
                    132: .              rm :1
                    133: ])
                    134: 
                    135: |attribute(text; nostack;
                    136:        $ [$])
                    137: 
                    138: |attribute(error; nostack;
                    139:        $ [
                    140: .              tm "__FILE__":__LINE__: $
                    141: ])
                    142: 
                    143: |attribute(width; stack, default full;
                    144:        narrow [
                    145: .              if \n(:C \{\
                    146: .                      ll \nW          \" go narrow
                    147: .                      lt \nW \}
                    148: ]      full [
                    149: .              if \n(:C \{\
                    150: .                      ll \n(:W        \" go wide
                    151: .                      lt \n(:W \}
                    152: ])
                    153: 
                    154: |attribute(here; stack, default off;
                    155:        on [
                    156: '\"    group mechanism
                    157: '\"    :0 store for initally diverted text
                    158: '\"    :1 store for centered block text
                    159: '\"    :C 0=one column, 1=first column, 2=second column
                    160: '\"    :W page width for full page output
                    161: '\"    :d prevent )h from outputting a floating group
                    162: '\"    :m initial footer place and partial footnote diverter trap
                    163: '\"    :o footer trap location
                    164: '\"    :r position at end of page header macro
                    165: '\"    :y flag indicating group/float in progress
                    166: '\"    W page width
                    167: '\"    ;L remembered line spacing TEMP
                    168: '\"    ;i remembered indent TEMP
                    169: '\"    ;q remembered fill/no-fill mode TEMP
                    170: '\"    ;y initialize width of block TEMP
                    171: .              if \n(:y .tm "__FILE__":__LINE__: Groups can not be nested
                    172: .              nr :y 1                 \" set flag indicating group
                    173: .              br                      \" output partial line before display
                    174: .              di :0                   \" collect in :0
                    175: ]      off [
                    176: '\"    Control page orientation of blocks.
                    177: '\"    Blocks are output as soon after their definition as
                    178: '\"    feasible.  The following rules are used:
                    179: '\"         1. if the block will fit on the current page, output it there.
                    180: '\"         2. if the block won't fit on any page, and we have used less than
                    181: '\"            half of the current page, then output the block on the
                    182: '\"            current page.
                    183: '\"         3. skip to the next page.
                    184: .              br                      \" get last partial line
                    185: .              di                      \" end diversion
                    186: '\"    The following if condition tests: (1) if the block is too large to
                    187: '\"    fit on the current page and either (2) it will fit on an unused page
                    188: '\"    or (3) we have already used more than half of the current page. (the
                    189: '\"    three conditions are grouped in the form 1 & (2 : 3)). If this
                    190: '\"    total condition is true, then a page is ejected and the block output
                    191: '\"    on the next page.
                    192: .              nr :d 1                 \" prevent )h from outputting a floating group
                    193: .              if (\n(dn>=\n(.t)&((\n(dn<(\n(.p-\n(:r-\n(:m)):\
                    194: (\n(nl>(\n(.p-\n(:r-\n(:o/2u+\n(:r)))\
                    195: .                      ne \n(.tu+1v    \" spring the trap
                    196: .              nr ;q \n(.u             \" save prevailing fill/no-fill mode
                    197: .              nf                      \" bring it back in no-fill
                    198: .              nr ;L \n(.L             \" save line spacing
                    199: .              ls 1                    \" output display in ls 1
                    200: .              nr ;i \n(.i             \" save prevailing indent
                    201: .              in 0                    \" indent back
                    202: .              rs                      \" restore spacing
                    203: .              :0                      \" text
                    204: .              nr :d 0                 \" allow )h to output a floating group
                    205: .              if \n(;q .fi            \" restore fill if necessary
                    206: .              ls \n(;L                \" restore line spacing
                    207: .              in \n(;iu               \" restore prevailing indent
                    208: .              nr :y 0                 \" reset flag indicating group
                    209: .              rr ;L ;i ;q             \" free storage
                    210: .              rm :0
                    211: ])
                    212: 
                    213: |attribute(around; stack, default off;
                    214:        on [
                    215: '\"    float mechanism
                    216: '\"    !{a-z} width of stored floating 0=narrow, 1=wide
                    217: '\"    :0 store for initally diverted text
                    218: '\"    :1 store for centered block text
                    219: '\"    :C 0=one column, 1=first column, 2=second column
                    220: '\"    :W page width for full page output
                    221: '\"    :m initial footer place and partial footnote diverter trap
                    222: '\"    :o footer trap location
                    223: '\"    :r position at end of page header macro
                    224: '\"    :w output counter for floating keeps
                    225: '\"    :y flag indicating group/float in progress
                    226: '\"    :z input counter for floating keeps
                    227: '\"    W page width
                    228: '\"    ?{a-z} text of stored floating
                    229: '\"    |{a-z} size of stored floating
                    230: '\"    ;L prevailing line spacing
                    231: '\"    ;f prevailing font
                    232: '\"    ;i prevailing indent
                    233: '\"    ;j prevailing adjust
                    234: '\"    ;l prevailing line length
                    235: '\"    ;o prevailing page offset ??????? bug with .po
                    236: '\"    ;s prevailing point size
                    237: '\"    ;u prevailing fill/no-fill mode
                    238: '\"    ;v prevailing vertical spacing
                    239: '\"    ;w convert to alpha format
                    240: '\"    ;y initialize width of block
                    241: .              if \n(:y .tm "__FILE__":__LINE__: Groups can not be nested
                    242: .              nr :y 1                 \" set flag indicating group
                    243: .              nr ;s \n(.s             \" save prevailing point size
                    244: .              nr ;f \n(.f             \" save prevailing font
                    245: .              nr ;u \n(.u             \" save prevailing fill/no-fill mode
                    246: .              nr ;j \n(.j             \" save prevailing adjust
                    247: .              nr ;v \n(.v             \" save prevailing vertical spacing
                    248: .              nr ;L \n(.L             \" save prevailing line spacing
                    249: .              nr ;l \n(.l             \" save prevailing line length
                    250: .              nr ;i \n(.i             \" save prevailing indent
                    251: .              ev 1                    \" use footnote environment
                    252: .              ps \n(;s                \" restore point size
                    253: .              vs \n(;sp+2p            \" restore vertical spacing
                    254: .              ft \n(;f                \" restore font
                    255: .              nf                      \" bring it back in no-fill
                    256: .              if \n(;u .fi            \" restore fill if necessary
                    257: .              ad \n(;j                \" restore page adjust
                    258: .              vs \n(;vu               \" restore vertical spacing
                    259: .              ls \n(;L                \" restore line spacing
                    260: .              ll \n(;lu               \" restore line length
                    261: .              in \n(;iu               \" restore indent
                    262: .              ti \n(;iu               \" turn off indentation
                    263: .              hy 14                   \" turn on hyphenation
                    264: .              lt \n(;lu               \" restore title length
                    265: .              di :0                   \" collect in :0
                    266: ]      off [
                    267: '\"    Control page orientation of floats.
                    268: '\"    Floats are output as soon after their definition as
                    269: '\"    feasible.  The following rules are used:
                    270: '\"         1. if the queue contains only this float and it will fit on the
                    271: '\"            current page, output it there.
                    272: '\"         2. if the queue contains only this float and it won't fit on any
                    273: '\"            page, and we have used less than half of the current page,
                    274: '\"            then output the float on the current page.
                    275: '\"         3. let the top of page macro handle it.
                    276: .              br                      \" get last partial line
                    277: .              di                      \" end diversion of centered block
                    278: .              ev                      \" back to previous environment
                    279: .              nr :z \n(:z%26+1        \" get index of next output element
                    280: .              if \n(:z-\n(:w=0 .tm "__FILE__":__LINE__: too many floating displays
                    281: .              af ;w a                 \" conversion register for display queue names
                    282: .              nr ;w \n(:z             \" form the next queue element name
                    283: .              rn :0 ?\n(;w            \" put the display into the queue
                    284: .              nr !\n(;w 0             \" narrow
                    285: .              if !\n(:C .nr !\n(;w 1  \" wide display if only one column
                    286: .              nr |\n(;w \n(dn         \" put the size of text
                    287: '\"    The following if condition tests: (1) if there is only one float
                    288: '\"    on the queue to output and (2) if wide displays and (3) we are on the
                    289: '\"    first column and (4) if the float fits on the current page or
                    290: '\"    (5) the float is too large to fit on any one page, and (6) we have used
                    291: '\"    less than half of the current page. (the six conditions are grouped
                    292: '\"    in the form (1 & (2 & 3) & (4 : (5 & 6))). If this total condition is true,
                    293: '\"    then a float is output.
                    294: .              if ((\n(:z-\n(:w=1)&((\n(!\n(;w=1)&(\n(:C<2))&\
                    295: ((\n(dn<\n(.t):((\n(dn>(\n(.p-\n(:r-\n(:m))&\
                    296: (\n(nl<=(\n(.p-\n(:r-\n(:o/2u+\n(:r))))) .)z
                    297: .              nr :y 0                 \" reset flag indicating group
                    298: .              rr ;L ;f ;i ;j ;l ;o ;s ;u ;v ;w        \" free storage
                    299: ])
                    300: 
                    301: |attribute(around_placement; nostack;
                    302:        [
                    303: .              )w
                    304: ])
                    305: 
                    306: |attribute(footnote; stack, default off;
                    307:        on [
                    308: '\"    :C 0=one column, 1=first column, 2=second column
                    309: '\"    :F Footnote text
                    310: '\"    :W page width for full page output
                    311: '\"    :m initial footer place and partial footnote diverter trap
                    312: '\"    :o footer trap location
                    313: '\"    :q amount of footnote text
                    314: '\"    :v width of stored footnote 0=narrow, 1=wide
                    315: '\"    :x flag indicating footnote in progress
                    316: '\"    W page width
                    317: '\"    ;L prevailing line spacing
                    318: '\"    ;f prevailing font
                    319: '\"    ;i prevailing indent
                    320: '\"    ;j prevailing adjust
                    321: '\"    ;l prevailing line length
                    322: '\"    ;o prevailing page offset ??????? bug with .po
                    323: '\"    ;s prevailing point size
                    324: '\"    ;u prevailing fill/no-fill mode
                    325: '\"    ;v prevailing vertical spacing
                    326: .              if \n(:x .tm "__FILE__":__LINE__: Footnotes can not be nested
                    327: .              nr :x 1                 \" set flag indicating footnote
                    328: .              nr ;s \n(.s             \" save prevailing point size
                    329: .              nr ;f \n(.f             \" save prevailing font
                    330: .              nr ;u \n(.u             \" save prevailing fill/no-fill mode
                    331: .              nr ;j \n(.j             \" save prevailing adjust
                    332: .              nr ;v \n(.v             \" save prevailing vertical spacing
                    333: .              nr ;L \n(.L             \" save prevailing line spacing
                    334: .              nr ;l \n(.l             \" save prevailing line length
                    335: .              nr ;i \n(.i             \" save prevailing indent
                    336: .              ev 1                    \" use footnote environment
                    337: .              ps \n(;s                \" restore point size
                    338: .              vs \n(;sp+2p            \" restore vertical spacing
                    339: .              ft \n(;f                \" restore font
                    340: .              nf                      \" bring it back in no-fill
                    341: .              if \n(;u .fi            \" restore fill if necessary
                    342: .              ad \n(;j                \" restore page adjust
                    343: .              vs \n(;vu               \" restore vertical spacing
                    344: .              ls \n(;L                \" restore line spacing
                    345: .              ll \n(;lu               \" restore line length
                    346: .              in \n(;iu               \" restore indent
                    347: .              ti \n(;iu               \" turn off indentation
                    348: .              hy 14                   \" turn on hyphenation
                    349: .              lt \n(;lu               \" restore title length
                    350: |ifvalue wide on [
                    351: .              if \n(:C \{\
                    352: .                      ll \n(:W        \" go wide
                    353: .                      lt \n(:W \}
                    354: ]
                    355: 'DUMMY
                    356: .              da :F                   \" collect in :F
                    357: .              if !\n(:q \{\
                    358: .                      nr ;o \n(.o     \" save prevailing page offset
                    359: .                      po 0            \" always from left margin
                    360: .                      ps 10           \" 10 point roman font          
                    361: .                      vs 10p
                    362: .                      ft 1
                    363: .                      ie \n(.A=0 \l'72p'\" layout partial rule if new footnote
                    364: .                      el  __________
                    365: .                      ft              \" restore values
                    366: .                      vs
                    367: .                      ps
                    368: .                      po \n(;ou\}
                    369: ]      off [
                    370: .              br                      \" get last partial line
                    371: .              di                      \" end diversion
                    372: |ifvalue wide on [
                    373: .              if \n(:C \{\
                    374: .                      ll \nW          \" go narrow
                    375: .                      lt \nW \}
                    376: .              nr :v 1                 \" wide footnote
                    377: ]
                    378: 'DUMMY
                    379: |ifnotvalue wide on [
                    380: .              if !\n(:C .nr :v 1      \" wide footnote if only one column
                    381: ]
                    382: 'DUMMY
                    383: .              ev                      \" go back to previous environment
                    384: .              nr :x 0                 \" clear flag indicating footnote
                    385: .              nr :q +\n(dnu           \" add in amount of new footnotes
                    386: '\"    Move up footer trap, but not above current position on page
                    387: .              nr :o +\n(dnu
                    388: .              if !\n(.pu-\n(nlu-.5p-\n(:ou .nr :o \n(.pu-\n(nlu-.5p
                    389: '\"    or below :m!
                    390: .              if !\n(:ou-\n(:mu .nr :o \n(:mu
                    391: .              ch )f -\n(:ou           \" move footer trap
                    392: .              rr ;L ;f ;i ;j ;l ;s ;u ;v      \" free storage
                    393: ])
                    394: 
                    395: |attribute(size; stack, default;
                    396:        $ [\&\s$]
                    397:        [\&\s\nS])
                    398: 
                    399: |attribute(font.size; stack, init;
                    400:        $ [
                    401: .              ps $
                    402: .              vs \n(.sp+2p
                    403: ]      [
                    404: .              ps \nSp
                    405: .              vs \nSp+2p
                    406: ])
                    407: 
                    408: |attribute(font; stack, init;
                    409:        roman [
                    410: |ifvalue fill off [\&\f1]
                    411: |ifvalue fill on [
                    412: .              ft 1
                    413: ]
                    414: ]      italics [
                    415: |ifvalue fill off [\&\f2]
                    416: |ifvalue fill on [
                    417: .              ft 2
                    418: ]
                    419: ]      bold [
                    420: |ifvalue fill off [\&\f3]
                    421: |ifvalue fill on [
                    422: .              ft 3
                    423: ]
                    424: ]      special [
                    425: |ifvalue fill off [\&\f4]
                    426: |ifvalue fill on [
                    427: .              ft 4
                    428: ]
                    429: ]      cw [
                    430: |ifvalue fill off [\&\f(CW]
                    431: |ifvalue fill on [
                    432: .              ft CW
                    433: ]
                    434: ]      [
                    435: |ifvalue fill off [\&\f\nF]
                    436: |ifvalue fill on [
                    437: .              ft \nF
                    438: ]
                    439: ])
                    440: 
                    441: |attribute(temporary.font; nostack;
                    442:        roman [\f1]
                    443:        roman $ [\f1$\fP]
                    444:        italics [\f2]
                    445:        italics $ [\f2$\fP]
                    446:        bold [\f3]
                    447:        bold $ [\f3$\fP]
                    448:        special [\f4]
                    449:        special $ [\f4$\fP]
                    450:        cw [\f(CW]
                    451:        cw $ [\f(CW$\fP]
                    452:        [\fP]
                    453: )
                    454: 
                    455: |attribute(font.family; stack, default times;
                    456:        times [
                    457: .              fp 1 R
                    458: .              fp 2 I
                    459: .              fp 3 B
                    460: .              fp 4 BI
                    461: ]      palatino [
                    462: .              fp 1 PA
                    463: .              fp 2 PI
                    464: .              fp 3 PB
                    465: .              fp 4 PX
                    466: ]      bembo [
                    467: .              fp 1 B1
                    468: .              fp 2 B2
                    469: .              fp 3 B3
                    470: .              fp 4 B4
                    471: ]      optima [
                    472: .              fp 1 O1
                    473: .              fp 2 O2
                    474: .              fp 3 O3
                    475: .              fp 4 O4
                    476: ]      souvenir [
                    477: .              fp 1 SV
                    478: .              fp 2 SI
                    479: .              fp 3 SB
                    480: .              fp 4 SX
                    481: ]      helvetica [
                    482: .              fp 1 H
                    483: .              fp 2 HI
                    484: .              fp 3 HB
                    485: .              fp 4 HX
                    486: ]      cw [
                    487: .              fp 1 CW
                    488: .              fp 2 I
                    489: .              fp 3 B
                    490: .              fp 4 BI
                    491: ])
                    492: 
                    493: |attribute(if; nostack;
                    494:        $test [
                    495: .              if $test \
                    496: ]      begin $test [
                    497: .              if $test \{\
                    498: ]      end [\}\c
                    499: ]      else $test [
                    500: .              ie $test \
                    501: ]      else begin $test [
                    502: .              ie $test \{]
                    503:        else [
                    504: .              el \
                    505: ]      else begin [
                    506: .              el \{])
                    507: 
                    508: |attribute(tab; nostack;
                    509:        [\&     ])
                    510: 
                    511: |attribute(thick.line; nostack;
                    512:        $ [
                    513: .              ps 24
                    514: \l'$'
                    515: .              ps
                    516: ]      [
                    517: .              ps 24
                    518: \l'\n(.lu'
                    519: .              ps
                    520: ])
                    521: 
                    522: |attribute(line; nostack;
                    523:        $ [\l'$']
                    524:        [\l'\n(.lu'])
                    525: 
                    526: |attribute(box; nostack;
                    527:        x [\s12\o'\(mu\(sq'\s0]
                    528:        empty [\s12\(sq\s0]
                    529:        [\(sq])
                    530: 
                    531: |attribute(underline; stack, default off;
                    532:        on [\kx]
                    533:        off [\l'|\nxu\(ul'])
                    534: 
                    535: |attribute(hyphenate; stack, init on;
                    536:        on [
                    537: .              hy 14
                    538: ]      off [
                    539: .              nh
                    540: ])
                    541: 
                    542: |attribute(case; stack, init any;
                    543:        upper [
                    544: '\" need to write this yet
                    545: ]      lower [
                    546: '\" need to write this yet
                    547: ]      capitalize [
                    548: '\" need to write this yet
                    549: ]      any [
                    550: '\" need to write this yet
                    551: ])
                    552: 
                    553: |attribute(tab.stops; nostack;
                    554:        $* [
                    555: .              ta $*
                    556: ]      [
                    557: .              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
                    558: ])
                    559: 
                    560: |attribute(set; nostack;
                    561:        $* $number [
                    562: |for i in $* {
                    563: .              nr $i $number
                    564: }]     string $* $string [
                    565: |for i in $* {
                    566: .              ds $i $string
                    567: }])
                    568: 
                    569: |attribute(store; nostack;
                    570:        $* $$. [
                    571: |for i in $* {
                    572: .              nr $i \n$$.
                    573: }]     $* $number.register [
                    574: |for i in $* {
                    575: .              nr $i \n($number.register
                    576: }]     string $* $$. [
                    577: |for i in $* {
                    578: .              ds $i \*$$.
                    579: }]     string $* $string.register [
                    580: |for i in $* {
                    581: .              ds $i \*($string.register
                    582: }]     number.from.string $* $$. [
                    583: |for i in $* {
                    584: .              nr $i \*$$.
                    585: }]     number.from.string $* $string.register [
                    586: |for i in $* {
                    587: .              nr $i \*($string.register
                    588: }]     string.from.number $* $$. [
                    589: |for i in $* {
                    590: .              ds $i \n$$.
                    591: }]     string.from.number $* $number.register [
                    592: |for i in $* {
                    593: .              ds $i \n($number.register
                    594: }])
                    595: 
                    596: |attribute(clear; nostack;
                    597:        $* [
                    598: |for i in $* {
                    599: .              nr $i 0
                    600: }]     string $* [
                    601: .              rm $*
                    602: ])
                    603: 
                    604: |attribute(add; nostack;
                    605:        $result $operand $* [
                    606: .              nr $result \n($operand
                    607: |for i in $* {
                    608: .              nr $result +\n($i
                    609: }]     $result $operand [
                    610: .              nr $result \n($operand
                    611: ]      string $string $text [
                    612: .              as $string $text
                    613: ]      string.from.number $string $number.register [
                    614: .              as $string \n($number.register
                    615: ]      string.from.string $string $string.register [
                    616: .              as $string \*($string.register
                    617: ])
                    618: 
                    619: 
                    620: |attribute(incr; nostack;
                    621:        $* [
                    622: |for i in $* {
                    623: .              nr $i +1
                    624: }])
                    625: 
                    626: |attribute(decr; nostack;
                    627:        $* [
                    628: |for i in $* {
                    629: .              nr $i -1
                    630: }])
                    631: 
                    632: |attribute(protect; nostack;
                    633:        $ [
                    634: .              ne $
                    635: ]      [
                    636: .              ne 3
                    637: ])
                    638: 
                    639: |attribute(warn.orphan; nostack;
                    640:        $ [
                    641: '\" need to write this yet
                    642: ]      [
                    643: '\" need to write this yet
                    644: ])
                    645: 
                    646: |attribute(two.columns; nostack;
                    647:        on [
                    648: '\"    :C 0=one column, 1=first column, 2=second column
                    649: '\"    :O page offset for other column
                    650: '\"    :W page width for full page output
                    651: '\"    :u position to return to for second column output
                    652: '\"    O page offset
                    653: '\"    W page width
                    654: .              if \n(:C .tm "__FILE__":__LINE__: already in two column mode
                    655: .              br                      \" force out last partial line
                    656: .              nr :C 1                 \" flag for two column mode, first column
                    657: .              nr :W \nW               \" save line length
                    658: .              nr W \n(.lu*8u/17u      \" new line length
                    659: .              nr :O \n(.lu*9u/17u+\nOu\" page offset for other column
                    660: .              ll \nWu                 \" set new line length
                    661: .              lt \nWu                 \" set new title length
                    662: .              mk :u                   \" save where second column starts
                    663: ]      off [
                    664: .              if !\n(:C .tm "__FILE__":__LINE__: already in full page mode
                    665: .              br                      \" force out last partial line
                    666: .              if \n(:C>1 .ne \n(.tu+1v\" spring footer trap for second column
                    667: .              nr W \n(:Wu             \" restore line length
                    668: .              ll \nWu                 \" set new line length
                    669: .              lt \nWu                 \" set new title length
                    670: .              nr :C 0                 \" flag for full page mode
                    671: ])
                    672: 
                    673: |attribute(divert.string; nostack;
                    674:        $string.name [
                    675: .              ds $string.name ])
                    676: 
                    677: |attribute(divert.number; nostack;
                    678:        $number.name [
                    679: .              nr $number.name ])
                    680: 
                    681: |attribute(divert.output; stack, default off;
                    682:        on $string.name [
                    683: .              di $string.name         \" start diverting into macro
                    684: ]      off [
                    685: .              br                      \" get last partial line
                    686: .              di                      \" turn off diversions
                    687: ])
                    688: 
                    689: |attribute(divert.input; stack, default off;
                    690:        on $string.name [
                    691: .              eo
                    692: .              de $string.name
                    693: ]      off [
                    694: ..
                    695: .              ec
                    696: ])
                    697: 
                    698: |attribute(remember; nostack;
                    699:        $ [
                    700: .              mk $
                    701: ])
                    702: 
                    703: |attribute(return; nostack;
                    704:        $$. [
                    705: .              sp |\n$$.u
                    706: ]      $ [
                    707: .              sp |\n($u
                    708: ])
                    709: 
                    710: |attribute(goto; nostack;
                    711:        $ [
                    712: .              sp |$
                    713: ])
                    714: 
                    715: |attribute(string; nostack;
                    716:        $$. [\*$$.]
                    717:        $string.register [\*($string.register])
                    718: 
                    719: |attribute(macro; nostack;
                    720:        $ [
                    721: .              $
                    722: ])
                    723: 
                    724: |attribute(number; nostack;
                    725:        $$. $format [
                    726: .              af $$. $format
                    727:                \n$$.]
                    728:        $number.register $format [
                    729: .              af $number.register $format
                    730:                \n($number.register]
                    731:        $$. [\n$$.]
                    732:        $number.register [\n($number.register]
                    733:        ++ $$. [\n+$$.]
                    734:        ++ $number.register [\n+($number.register]
                    735:        format $* $format [
                    736: |for i in $* {
                    737: .              af $i $format
                    738: }])
                    739: 
                    740: |attribute(reference; stack, default off;
                    741:        on {
                    742: .              [
                    743: }      off {
                    744: .              ]
                    745: }      placement {
                    746: .              [
                    747:                $LIST$
                    748: })
                    749: 
                    750: |attribute(table; stack, default off;
                    751:        on [
                    752: .              TS
                    753: ]      off [
                    754: .              TE
                    755: ])
                    756: 
                    757: |attribute(picture; stack, default off;
                    758:        on [
                    759: .              PS
                    760: ]      off [
                    761: .              PE
                    762: ])
                    763: 
                    764: |attribute(equation; stack, default off;
                    765:        on [
                    766: .              EQ
                    767: ]      off [
                    768: .              EN
                    769: ])
                    770: 
                    771: |attribute(inline.equation; stack, default off;
                    772:        on []
                    773:        off [])
                    774: 
                    775: |attribute(graph; stack, default off;
                    776:        on $$. [
                    777: .              G1 \*$$.
                    778: ]      on $string.register [
                    779: .              G1 \*($string.register
                    780: ]      off [
                    781: .              G2
                    782: ])
                    783: 
                    784: |attribute(bargraph; stack, default off;
                    785:        on [
                    786: .              B1
                    787: ]      off [
                    788: .              B0
                    789: ])
                    790: 
                    791: |attribute(citation; nostack;
                    792:        save [
                    793: .              CD "]
                    794:        save end $$. [" "\*$$."
                    795: ]      save end $string.register [" "\*($string.register"
                    796: ]      savepage end [" "\nP"
                    797: ]      remember [
                    798: .              CU "]
                    799:        remember end ["])
                    800: 
                    801: |attribute(insert; nostack;
                    802:        $file.name [
                    803: .              so $file.name
                    804: ])
                    805: 
                    806: |attribute(list.tags; stack, init none;
                    807:        bullet [
                    808: .              ds list_type bullet
                    809: ]      dash [
                    810: .              ds list_type dash
                    811: ]      outline [
                    812: .              ds list_type outline
                    813: ]      number [
                    814: .              ds list_type number
                    815: ]      none [
                    816: .              ds list_type none
                    817: ])
                    818: 
                    819: |attribute(format.type; stack, init none;
                    820:        model [
                    821: .              ds format_type model
                    822: ]      none [
                    823: .              ds format_type none
                    824: ])
                    825: 
                    826: |attribute(verbatim; stack, init off;
                    827:        off []
                    828:        on [])
                    829: 
                    830: |attribute(file.information; nostack;
                    831:        [
                    832: .              lf __LINE__ __FILE__
                    833: ])
                    834: 
                    835: |attribute(white.text; nostack;
                    836:        $text [|ifvalue verbatim off []|ifvalue verbatim on [$text]])
                    837: 
                    838: |attribute(nl.paragraph; nostack;
                    839:        [|ifvalue verbatim on [
                    840: ]|ifvalue verbatim off []])

unix.superglobalmegacorp.com

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