Annotation of researchv8dc/cmd/monk/db/attrib.m, revision 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.