.cs begin *------------------------------------------------------------* | | | This is the STAFFSET file used to create a standard | | formatting environment for all Brown Computer Center | | documentation. It sets up the page layout and defines | | MACROs that facilitate uniform formatting. | | | | HRB | | 06/16/77 | | | | Revisions: | | | | 01/15/86 Replaced .BS hexjoins with "&x'nn"s --ahr | | | | 12/28/82 Changed .blt, .alp, and .seq to prevent | | justification from inserting blanks | | between the bullet and the text. | | | | Added error checking for end out of | | sequence. | | | | Removed use of /02 and /03 in these macros. | | | | Added logical line continuation with "(" | | -jb | | | | 04/14/82 Box and bracket translation only if | | &SYSTERMT = TERM. Formerly if SYSONLINE = Y | | | | 07/26/77 ADJUST value set only if not already set by | | user; line length set to 64; parentheses | | are underscored; offset in EXAM remote now | | 5; conditional page for examples. | | | | 12/13/77 The SEQ remote has been modified so that the | | BLT remote can be used within a SEQ and yield | | a properly formatted result. | | | | 02/28/78 Reference words for left and right brackets | | added; "corners" translated online. | | | | 03/20/78 Table of Contents added for decimal blocks | | (thanks to JBB); .cp value increased in | | .topic remote; .head remotes added. | | | | 06/01/78 General cleanup. Several enhancements added; | | see documentation for details. | | | | 07/01/78 Indexing capability added. | | | | 03/29/79 TOFC remote changed for compatibility with | | modified operation of .TC control word. | | | | 05/05/80 Added remote to start pagenumber in bottom | | title on the second page (automatically) | | fixed various macros to work with 3.5 | | replaced the footnote macros with stolen | | versions from sysezdef. Formatted the tentry | | macro, added conditional spacing to most | | macros. Generally mucked things around. | | What would Henri say? -- jb. | | | | 05/08/80 Different adjust values, using command | | line option &BINDING= LEFT|CENTER . | | Formatted some other macros; | | compromised on conditional spacing. | | Bullets, numeric points, and alphabetic | | points are now uniformly indented | | one space, with text starting in four | | spaces, and are generated using | | 'undent' instead of 'output overlay'. | | Tentry defaults to indent of 10. | | Blanks are now underscored only in | | in blocks and heads. --rn. | | | | 05/29/80 Removed sysbot remote for starting | | pagenumbering; set '.pi 0' and removed | | .pp macro; added a check for previous | | imbed of staffset; tab char now defaults; | | 'endnote' alternative to footnotes. --rn. | | | *------------------------------------------------------------* .cs end .* .* - - - - - - - - - - - - - - - - - - - - .* .* Make sure file hasn't already been imbedded. .* .* - - - - - - - - - - - - - - - - - - - - .* .if &$stimbed eq 'YES';.th .ef .sr $stimbed = 'YES' .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define and initialize our reference words. By .* convention, all of our reference words are .* prefixed with a dollar sign. Reference words .* used locally within a single macro are .* preceded by a "*", according to SCRIPT conventions. .* .* - - - - - - - - - - - - - - - - - - - - .* .sr $alpct = 1 ;.cm .alp index value .sr $alppend = 0 ;.cm .alp pending .sr $b1ct = 0 ;.cm decimal block counters .sr $b2ct = 0 ;.cm ... .sr $b3ct = 0 ;.cm ... .sr $bltpend = 0 ;.cm .blt pending .se $binding = &binding ;.cm adjust control .sr $fnct = 0 ;.cm footnote count .sr $fnconv = '' ;.cm footnote conversion instructions .sr $fnout = '' ;.cm current footnote text .sr $fnlen = 0 ;.cm length of symbols around footnote .se $index = &index ;.cm index control .sr $nestlevel = 0 ;.cm nesting level of macros .sr $pitb1 = 'Y' ;.cm table of contents flags .sr $pitb2 = 'Y' ;.cm ... .sr $pitb3 = 'Y' ;.cm ... .sr $pith1 = 'N' ;.cm ... .sr $pith2 = 'N' ;.cm ... .sr $pith3 = 'N' ;.cm ... .sr $seqct = 1 ;.cm .seq counter .sr $seqpend = 0 ;.cm .seq pending .sr $tenin = 99 ;.cm .tentry indent value .sr $tenof = 10 ;.cm .table entry offset .sr $trigger = 55 ;.cm page eject trigger .sr $spb = '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' .* .sr $lbr = "&x'ad." ;.cm left bracket .sr $rbr = "&x'bd." ;.cm right bracket .sr $ulc = "&x'ac." ;.cm upper left-hand corner .sr $urc = "&x'bc." ;.cm upper right-hand corner .sr $llc = "&x'ab." ;.cm lower left-hand corner .sr $lrc = "&x'bb." ;.cm lower right-hand corner .sr $bullet = "&x'af." ;.cm bullet .* .* - - - - - - - - - - - - - - - - - - - - .* .* Modify footnote instructions if endnotes are requested. .* If current terminal type is regular terminal, change footnotes .* to be inline numerals surrounded by parentheses. .* If any online terminal, convert a few special characters to .* facsimiles. .* .* - - - - - - - - - - - - - - - - - - - - .* ..su off ..cw ..su ..if '&SYSTERMT' eq TERM . ..th ..sr $fnconv = |..sr $fnout = '(&$fnct.)';..sr $fnlen = 3+&l'&$fnct| . ..el ..sr $fnconv = |..sr $fnout = &S'&$fnct.;..sr $fnlen = 1+&l'&$fnct| ..su ..if '&NOTE' eq END . ..th ..sr $enconv = |..sr $fnout = '&$fnct.&$hex02';..sr $fnlen = 5;..sr $fnun = 2+&l'&$fnct| . ..el ..sr $enconv = |..sr $fnun = &$fnlen| ..su on ..cw ; .if '&systermt' eq TERM .th .do .tr ac * bc * ab * bb * bf - af - ad < bd > .do end .* .* - - - - - - - - - - - - - - - - - - - - .* .* Set up page format. .* Allowance is made for two heading lines. .* Paragraphs are not indented. .* .* - - - - - - - - - - - - - - - - - - - - .* .ll 64;.tm 8;.hm 4;.hs 2;.bm 7;.fm 2 .tt 1 ////;.tt 2 ////;.bt //// .wd yes .pi 0 .* .* - - - - - - - - - - - - - - - - - - - - .* .* Set up adjust values for left or center binding. .* Default adjust value is 2, to allow for revision bars; .* this can be easily changed to a margin of 10, suitable for .* NW printing, or alternate margins of 13 and 6, for use .* with back-to-back printing, by specifiying LEFT or CENTER .* on the SCRIPT command line: .* .* SCRIPT filename (+BINDING= LEFT | CENTER .* .* .* - - - - - - - - - - - - - - - - - - - - .* .if &sysad eq 0 . .th .ad 2 . .el .cm .if &$binding eq CENTER . .th .do begin . .ad 6 . .ad odd 7 . .em yes . .do end . .el .cm .if &$binding eq LEFT . .th .do begin . .ad 10 . .em no . .do end . .el .cm .* .* - - - - - - - - - - - - - - - - - - - - .* .* Set up index. The index will be printed when the .pix .* macro is called, but only if indexing has been .* enabled by means of a new command line option: .* .* SCRIPT filename (&INDEX= YES .* .* .* - - - - - - - - - - - - - - - - - - - - .* .if &$index = YES .th .do .dm sysix0 /.sk 1/.in 0/.cc 4/&1/ .dm sysix1 /.in 0/.hi 1/ .dm sysix2 /.in 3/.hi 1/ .dm sysix3 /.in 6/.hi 1/ .sr sysixref = '^^' .dm pix begin .pa .head1 'Index' ^ .co .ju no .su on .cl (&sysll-2)/2 .sr gutter = &sysll-2*&syscl .cd 2 0 &syscl+&gutter .ix . dump .sc .in 0 .dm pix end .do end .el .do .dm ix // .dm pix // .do end .* .* - - - - - - - - - - - - - - - - - - - - .* .* Set up Table of Contents. For best results, the last .* line of the file should invoke the following macro: .* .* .tofc .* .* .* - - - - - - - - - - - - - - - - - - - - .* .dh 1 to ts noj .dh 2 to nts tcin 1 .dh 3 to nts tcin 2 .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define special characters: "," becomes the no-break .* control indicator; "!" is defined as the hilight escape .* character; "^" is defined as the special, non-expandable .* blank; "|" is defined as the revision character for .* revision level 1; "(" is the character to cause the .* next line to be appended (without a blank) to the current .* line. .* .* - - - - - - - - - - - - - - - - - - - - .* .dc linb , .ud set ! .dc rb ^ .dc cont ( .rc 1 | .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define initial tab settings to be ten spaces apart. .* Set default tab character. .* .* - - - - - - - - - - - - - - - - - - - - .* .tb 11 21 31 41 51 61 .tb set # .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define miscellaneous formatting macros: .* .* .alp to create a series of "alphabetic" points; .* .* .blt to format a point with a bullet; .* .* .exam to set off sample lines of terminal input .* or JCL; .* .* .pp to begin a paragraph without indentation; .* .* .seq to create a series of numbered points; .* .* .tentry to create a table entry; .* .* .tend to end a series of table entries; .* .* .tofc to generate a Table of Contents; .* .* .topic to define a low-level heading that does not .* warrant a decimal label. .* .* - - - - - - - - - - - - - - - - - - - - .* .cm - - - alp - - - .dm alp begin .if &T'&1 eq 'N' . .th .do . .se $alpct = &1 . .do end .if &e'&$alppend = 0 .sr $alppend = 0 .if &0 eq 0 OR &T'&1 eq 'N' . .th .do . .if &$alppend = 0 .do begin . .se $nestlevel = &$nestlevel + 1 . .se $alppend = &$nestlevel . .in +4 . .do end . .cp 5 . .sk 1 . .un 3 . .se *alpchr = &a'&$alpct . &*alpchr..&sysrb.&syscont .* If we can continue on the same line do so, otherwise just overprint. . .if '&syscont.' = ' ' .sk -1 . .se $alpct = &$alpct + 1 . .if &$alpct gt 26 .sr $alpct = 1 . .do end . .el .do . .if &$alppend ^= &$nestlevel .do begin . .er 4 ATTEMPT TO END .alp OUT OF SEQUENCE. . .ef . .do end . .sk 1;.sk 1 c . .in -4 . .se $nestlevel = &$nestlevel - 1 . .sr $alppend = 0 . .sr $alpct = 1 . .do end .dm alp end .* .cm - - - blt - - - .dm blt begin .if &e'&$bltpend = 0 .sr $bltpend = 0 .if &0 eq 0 .th .do . .if &$bltpend = 0 .do begin . .se $nestlevel = &$nestlevel + 1 . .se $bltpend = &$nestlevel . .in +4 . .do end . .sk 1 . .un 3 . &$bullet.&sysrb.&sysrb.&syscont .* If we can continue on the same line do so, otherwise just overprint. . .if '&syscont.' = ' ' .sk -1 . .do end .el .do begin . .if &$bltpend ^= &$nestlevel .do begin . .er 4 ATTEMPT TO END .blt OUT OF SEQUENCE. . .ef . .do end . .sk 1;.sk 1 c . .in -4 . .se $nestlevel = &$nestlevel - 1 . .sr $bltpend = 0 . .do end .dm blt end .* .cm - - - exam - - - .dm exam begin .if &0 eq 0 . .th .do . .fo no . .in +5 . .sk 1;.cp begin . .do end . .el .do . .fo yes . .br . .in -5 . .br;.cp end . .sk 1;.sk 1 c . .do end .dm exam end .* .cm - - - pp - - - .dm pp begin .sk 1 c .dm pp end .* .cm - - - seq - - - .dm seq begin .if &0 gt 0 AND &T'&1 eq 'N' . .th .do . .se $seqct = &1 . .do end .if &e'&$seqpend = 0 .sr $seqpend = 0 .if &0 eq 0 OR &T'&1 eq 'N' . .th .do . .if &$seqpend = 0 .do begin . .se $nestlevel = &$nestlevel + 1 . .se $seqpend = &$nestlevel . .in +5 . .do end . .se *seqct = &$seqct . .if &$seqct lt 10 .se *seqct = '&sysrb.&*seqct.' . .sk 1 . .cp 5 . .un 4 . &*seqct.)&sysrb.&syscont .* If we can continue on the same line do so, otherwise just overprint. . .if '&syscont.' = ' ' .sk -1 . .se $seqct = &$seqct + 1 . .do end . .el .do . .if &$seqpend ^= &$nestlevel .do begin . .er 4 ATTEMPT TO END .seq OUT OF SEQUENCE. . .ef . .do end . .sk 1;.sk 1 c . .in -5 . .se $nestlevel = &$nestlevel - 1 . .sr $seqpend = 0 . .sr $seqct = 1 . .do end .dm seq end .* .cm - - - tentry - - - .dm tentry begin .if &0 eq 0 . .th .er 4 'MISSING TENTRY OPERAND' .el .do . .if &$tenin = 99 . .th .se $tenin = &sysin . .if &0 = 2 AND &T'&2 eq 'N' . .th .se $tenof = &2 . .sk 1 . .in &$tenin+&$tenof . .se *tenpad = (&$tenof - (&L'&1)) - 1 . .se *tenblank = '' . .if &*tenpad gt 0 . .th .se *tenblank = '&$spb(1|&*tenpad)' . .un &$tenof . &1.&*tenblank . .if &*tenpad lt 0 . .th .br . .do end .dm tentry end .* .cm - - - tend - - - .dm tend begin .sk 1;.sk 1 c .in &$tenin .sr $tenin = 99 .dm tend end .* .cm - - - tofc - - - .dm tofc begin .pa 1 .pn roman .dh 1 pa noj nto us spaf 4 .tc 1 Table of Contents .dm tofc end .* .cm - - - topic - - - .dm topic begin .if &0 eq 0 . .th .er 4 MISSING TOPIC HEADING . .el .do . .sk 2;.cp 7 . .ud on . , ( ) ^ 40 . .us !&$bullet !&1 . .ud off . , ( ) ^ 40 . .sk 1;.sk 1 c . .do end .dm topic end .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define MACROs used to create decimal blocks. They .* are named BLOCK1, BLOCK2, and BLOCK3, and all require .* a heading string, in quotes, as a parameter. BLOCK1 .* allows the initial level number as a second parameter. .* .* Also define MACROs used to create non-decimal blocks. .* They are named HEAD1, HEAD2, and HEAD3, and all .* require a heading string, in quotes, as a parameter. .* .* Also define a MACRO that sets the "page eject" .* trigger used by BLOCK1 and HEAD1 and another .* macro that determines the blocks and headings .* to be included in the Table of Contents. .* .* - - - - - - - - - - - - - - - - - - - - .* .cm - - - block1 - - - .dm block1 begin .if &0 eq 0 .th .er 4 MISSING BLOCK1 HEADING .el .do .ur .if &0 eq 2 AND &T'&2 eq 'N' .th .se $b1ct = &2 .el .se $b1ct = &$b1ct + 1 .sk 5 .cp &$trigger .ud on . , ( ) ^ 40 .ur .uc &$b1ct &1 .ud off . , ( ) ^ 40 .ur .if &$pitb1 = Y .th .ur .hl 1 &$b1ct &1 .sk 3;.sk 2 c .do end .sr $b2ct = 0 .sr $b3ct = 0 .dm block1 end .* .cm - - - block2 - - - .dm block2 begin .ur .if &0 eq 0 .th .er 4 MISSING BLOCK2 HEADING .el .do .se $b2ct = &$b2ct + 1 .sk 3;.cp 8 .ud on . , ( ) ^ 40 .ur .uc &$b1ct..&$b2ct &1 .ud off . , ( ) ^ 40 .ur .if &$pitb2 = Y .th .ur .hl 2 &$b1ct..&$b2ct &1 .sk 1;.sk 1 c .do end .sr $b3ct = 0 .dm block2 end .* .cm - - - block3 - - - .dm block3 begin .ur .if &0 eq 0 .th .er 4 MISSING BLOCK3 HEADING .el .do .se $b3ct = &$b3ct + 1 .sk 3;.cp 8 .ur .up &$b1ct..&$b2ct..&$b3ct &1 .ur .if &$pitb3 = Y .th .ur .hl 3 &$b1ct..&$b2ct..&$b3ct &1 .sk 1;.sk 1 c .do end .dm block3 end .* .cm - - - head1 - - - .dm head1 begin .ur .if &0 eq 0 .th .er 4 MISSING HEAD1 HEADING .el .do .sk 5 .cp &$trigger .ud on . , ( ) ^ 40 .ur .uc &1 .ud off . , ( ) ^ 40 .ur .if &$pith1 = Y .th .ur .hl 1 &1 .sk 3;.sk 2 c .do end .dm head1 end .* .cm - - - head2 - - - .dm head2 begin .ur .if &0 eq 0 .th .er 4 MISSING HEAD2 HEADING .el .do .sk 3;.cp 8 .ud on . , ( ) ^ 40 .ur .uc &1 .ud off . , ( ) ^ 40 .ur .if &$pith2 = Y .th .ur .hl 2 &1 .sk 1;.sk 1 c .do end .dm head2 end .* .cm - - - head3 - - - .dm head3 begin .ur .if &0 eq 0 .th .er 4 MISSING HEAD3 HEADING .el .do .sk 3;.cp 8 .ur .up &1 .ur .if &$pith3 = Y .th .ur .hl 3 &1 .sk 1;.sk 1 c .do end .dm head3 end .* .cm - - - pit - - - .dm pit begin .sr $pitb1 = 'N';.sr $pitb2 = 'N';.sr $pitb3 = 'N' .sr $pith1 = 'N';.sr $pith2 = 'N';.sr $pith3 = 'N' .ur .pe &0 .se $pit&1=Y;.se 1=&2;.se 2=&3;.se 3=&4;.se 4=&5;.se 5=&6 .dm pit end .* .cm - - - spt - - - .dm spt begin .ur .if &0 eq 1 AND &T'&1 eq 'N' .th .se $trigger = &1 .el .sr $trigger = 55 .dm spt end .* .* - - - - - - - - - - - - - - - - - - - - .* .* Define MACROs to allow footnoting using superscripts. .* (Borrowed from UW EasyScript -jb) .* Endnotes can be produced instead, by specifying .* .* SCRIPT filename (&NOTE= END .* .* and using the .endnotes macro at the point where the .* list is to appear. .* .* - - - - - - - - - - - - - - - - - - - - .* .cm - - - footnote - - - ..dm footnote begin ..sr $fnct = &$fnct + 1 ..su &$fnconv &*1.&$fnout.&*2 ..if &NOTE = END . ..th ..fb begin . ..el ..fn begin ..sk ..su &$enconv ..in;..in &$fnlen;..un &$fnun ..tr 02 4b &$fnout ..tr 02 ..dm .cm - - - footend - - - .dm footend begin ..if ¬e = 'END' . ..th ..fb end . ..el ..fn end .dm footend end .* .cm - - - endnotes - - - .dm endnotes begin ..if ¬e ne 'END' . ..th ..ef ..br ..fb dump .dm endnotes end .*